From d595790d8daf185be89dc23d40b65910d2c3b94e Mon Sep 17 00:00:00 2001 From: Christian Dresen <c.dresen@fh-muenster.de> Date: Thu, 18 Aug 2016 17:10:27 +0200 Subject: [PATCH] Refactored Everything --- ldap/Dockerfile | 42 - ldap/build.sh | 1 - ldap/data/config.php | 576 -- ldap/data/fusiondirectory.conf | 26 - .../fusiondirectory-apache.conf | 18 - .../data/fusiondirectory/fusiondirectory.conf | 26 - ldap/data/ldap_conf/ldap.conf | 17 - ldap/data/ldap_conf/schema/README | 80 - ldap/data/ldap_conf/schema/collective.ldif | 48 - ldap/data/ldap_conf/schema/collective.schema | 65 - ldap/data/ldap_conf/schema/corba.ldif | 42 - ldap/data/ldap_conf/schema/corba.schema | 61 - ldap/data/ldap_conf/schema/core.ldif | 603 -- ldap/data/ldap_conf/schema/core.schema | 622 -- ldap/data/ldap_conf/schema/cosine.ldif | 200 - ldap/data/ldap_conf/schema/cosine.schema | 404 - ldap/data/ldap_conf/schema/duaconf.ldif | 83 - ldap/data/ldap_conf/schema/duaconf.schema | 153 - ldap/data/ldap_conf/schema/dyngroup.ldif | 71 - ldap/data/ldap_conf/schema/dyngroup.schema | 91 - .../fusiondirectory/core-fd-conf.schema | 562 - .../schema/fusiondirectory/core-fd.schema | 148 - .../schema/fusiondirectory/ldapns.schema | 23 - .../schema/fusiondirectory/rfc2307bis.schema | 288 - .../schema/fusiondirectory/template-fd.schema | 15 - ldap/data/ldap_conf/schema/inetorgperson.ldif | 69 - .../ldap_conf/schema/inetorgperson.schema | 113 - ldap/data/ldap_conf/schema/java.ldif | 59 - ldap/data/ldap_conf/schema/java.schema | 109 - ldap/data/ldap_conf/schema/misc.ldif | 45 - ldap/data/ldap_conf/schema/misc.schema | 75 - ldap/data/ldap_conf/schema/nis.ldif | 120 - ldap/data/ldap_conf/schema/nis.schema | 237 - ldap/data/ldap_conf/schema/openldap.ldif | 88 - ldap/data/ldap_conf/schema/openldap.schema | 54 - ldap/data/ldap_conf/schema/pmi.ldif | 123 - ldap/data/ldap_conf/schema/pmi.schema | 476 - ldap/data/ldap_conf/schema/ppolicy.ldif | 84 - ldap/data/ldap_conf/schema/ppolicy.schema | 159 - ldap/data/ldap_conf/slapd.d/cn=config.ldif | 16 - .../slapd.d/cn=config/cn=module{0}.ldif | 14 - .../slapd.d/cn=config/cn=schema.ldif | 12 - .../cn=config/cn=schema/cn={0}core.ldif | 249 - .../cn=config/cn=schema/cn={1}cosine.ldif | 178 - .../cn=config/cn=schema/cn={2}nis.ldif | 108 - .../cn=schema/cn={3}inetorgperson.ldif | 49 - .../cn=config/cn=schema/cn={4}core-fd.ldif | 90 - .../cn=schema/cn={5}core-fd-conf.ldif | 284 - .../cn=config/cn=schema/cn={6}ldapns.ldif | 20 - .../cn=schema/cn={7}template-fd.ldif | 17 - .../slapd.d/cn=config/olcBackend={0}mdb.ldif | 12 - .../cn=config/olcDatabase={-1}frontend.ldif | 18 - .../cn=config/olcDatabase={0}config.ldif | 15 - .../slapd.d/cn=config/olcDatabase={1}mdb.ldif | 28 - ldap/data/ldap_db/data.mdb | Bin 147456 -> 0 bytes ldap/data/ldap_db/lock.mdb | Bin 8192 -> 0 bytes ldap/data/start.sh | 25 - ldap/initial_config.tar.gz | Bin 0 -> 23805 bytes ldap/initial_database.gz | Bin 0 -> 39856 bytes ldap/run.sh | 28 +- ldap/stop_ldap.sh | 3 - slacktest | 3 - web_docker/Dockerfile | 35 - web_docker/build.sh | 1 - web_docker/entrypoint.sh | 10 - web_docker/run.sh | 6 - www/build.sh | 1 + www/docker/Dockerfile | 46 + www/docker/entrypoint.sh | 13 + www/docker/ldapdb_base.py | 268 + www/docker/ldapdb_fields.py | 207 + www/nginx/nginx_warpinfra.conf | 39 + {web => www/nginx}/uwsgi.ini | 2 +- www/nginx/uwsgi_params | 16 + www/nginx/warpinfra.crt | 33 + www/nginx/warpinfra.key | 52 + www/run.sh | 11 + www/web/.idea/.name | 1 + www/web/.idea/deployment.xml | 22 + www/web/.idea/dictionaries/dresen.xml | 24 + .../inspectionProfiles/Project_Default.xml | 6 + .../inspectionProfiles/profiles_settings.xml | 7 + www/web/.idea/misc.xml | 14 + www/web/.idea/modules.xml | 8 + www/web/.idea/vcs.xml | 6 + www/web/.idea/web.iml | 26 + www/web/.idea/workspace.xml | 962 ++ {web => www/web}/LICENSE | 0 {web => www/web}/manage.py | 0 www/web/static/admin/css/base.css | 967 ++ www/web/static/admin/css/changelists.css | 341 + www/web/static/admin/css/dashboard.css | 30 + www/web/static/admin/css/fonts.css | 20 + www/web/static/admin/css/forms.css | 499 + www/web/static/admin/css/login.css | 78 + www/web/static/admin/css/rtl.css | 256 + www/web/static/admin/css/widgets.css | 565 + www/web/static/admin/fonts/LICENSE.txt | 202 + www/web/static/admin/fonts/README.txt | 2 + .../admin/fonts/Roboto-Bold-webfont.woff | Bin 0 -> 82564 bytes .../admin/fonts/Roboto-Light-webfont.woff | Bin 0 -> 81348 bytes .../admin/fonts/Roboto-Regular-webfont.woff | Bin 0 -> 80304 bytes www/web/static/admin/img/LICENSE | 20 + www/web/static/admin/img/README.txt | 7 + www/web/static/admin/img/calendar-icons.svg | 14 + .../static/admin/img/gis/move_vertex_off.svg | 1 + .../static/admin/img/gis/move_vertex_on.svg | 1 + www/web/static/admin/img/icon-addlink.svg | 3 + www/web/static/admin/img/icon-alert.svg | 3 + www/web/static/admin/img/icon-calendar.svg | 9 + www/web/static/admin/img/icon-changelink.svg | 3 + www/web/static/admin/img/icon-clock.svg | 9 + www/web/static/admin/img/icon-deletelink.svg | 3 + www/web/static/admin/img/icon-no.svg | 3 + www/web/static/admin/img/icon-unknown-alt.svg | 3 + www/web/static/admin/img/icon-unknown.svg | 3 + www/web/static/admin/img/icon-yes.svg | 3 + www/web/static/admin/img/inline-delete.svg | 3 + www/web/static/admin/img/search.svg | 3 + www/web/static/admin/img/selector-icons.svg | 34 + www/web/static/admin/img/sorting-icons.svg | 19 + www/web/static/admin/img/tooltag-add.svg | 3 + .../static/admin/img/tooltag-arrowright.svg | 3 + www/web/static/admin/js/SelectBox.js | 135 + www/web/static/admin/js/SelectFilter2.js | 198 + www/web/static/admin/js/actions.js | 146 + www/web/static/admin/js/actions.min.js | 6 + .../admin/js/admin/DateTimeShortcuts.js | 364 + .../admin/js/admin/RelatedObjectLookups.js | 160 + www/web/static/admin/js/calendar.js | 178 + www/web/static/admin/js/collapse.js | 26 + www/web/static/admin/js/collapse.min.js | 2 + www/web/static/admin/js/core.js | 263 + www/web/static/admin/js/inlines.js | 275 + www/web/static/admin/js/inlines.min.js | 9 + www/web/static/admin/js/jquery.init.js | 8 + www/web/static/admin/js/prepopulate.js | 42 + www/web/static/admin/js/prepopulate.min.js | 1 + www/web/static/admin/js/timeparse.js | 106 + www/web/static/admin/js/urlify.js | 171 + .../admin/js/vendor/jquery/LICENSE-JQUERY.txt | 26 + .../static/admin/js/vendor/jquery/jquery.js | 9210 +++++++++++++++++ .../admin/js/vendor/jquery/jquery.min.js | 0 .../js/vendor/xregexp/LICENSE-XREGEXP.txt | 21 + .../admin/js/vendor/xregexp/xregexp.min.js | 18 + .../rest_framework/css/bootstrap-tweaks.css | 234 + .../rest_framework/css/bootstrap.min.css | 6 + www/web/static/rest_framework/css/default.css | 83 + .../static/rest_framework/css/prettify.css | 30 + .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12762 bytes www/web/static/rest_framework/img/grid.png | Bin 0 -> 1458 bytes www/web/static/rest_framework/js/ajax-form.js | 112 + .../static/rest_framework/js/bootstrap.min.js | 7 + www/web/static/rest_framework/js/csrf.js | 52 + www/web/static/rest_framework/js/default.js | 47 + .../rest_framework/js/jquery-1.12.4.min.js | 5 + .../static/rest_framework/js/prettify-min.js | 28 + {web => www/web}/templates/base.html | 0 .../web}/templates/licenses/bootstrap.txt | 0 .../web}/templates/licenses/chart_js.txt | 0 .../web}/templates/licenses/django.txt | 0 {web => www/web}/templates/licenses/gplv2.txt | 0 .../web}/templates/media/chart_js/.gitignore | 0 .../web}/templates/media/chart_js/.travis.yml | 0 .../web}/templates/media/chart_js/LICENSE | 0 .../web}/templates/media/chart_js/README.md | 0 .../templates/media/chart_js/css/demo.css | 0 .../web}/templates/media/chart_js/index.html | 0 .../web}/templates/media/chart_js/src/demo.js | 0 .../templates/media/chart_js/src/legend.js | 0 .../media/chart_js/src/legend.legacy.js | 0 .../templates/media/chart_js/vendor/Chart.js | 0 .../templates/media/css/bootstrap-theme.css | 0 .../media/css/bootstrap-theme.css.map | 0 .../media/css/bootstrap-theme.min.css | 0 .../web}/templates/media/css/bootstrap.css | 0 .../templates/media/css/bootstrap.css.map | 0 .../templates/media/css/bootstrap.min.css | 0 .../web}/templates/media/django_logo.gif | Bin .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../web}/templates/media/js/bootstrap.js | 0 .../web}/templates/media/js/bootstrap.min.js | 0 www/web/templates/media/js/jquery.js | 4 + {web => www/web}/templates/media/js/npm.js | 0 .../templates/media/warpzone_logo_large.png | Bin .../web}/templates/media/warpzone_medium.png | Bin .../web}/templates/media/warpzone_small.png | Bin {web => www/web}/warpauth/__init__.py | 0 www/web/warpauth/__init__.pyc | Bin 0 -> 122 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 105 bytes .../warpauth/__pycache__/admin.cpython-34.pyc | Bin 0 -> 620 bytes .../__pycache__/ldap_connector.cpython-34.pyc | Bin 0 -> 1271 bytes .../__pycache__/models.cpython-34.pyc | Bin 0 -> 2393 bytes .../warpauth/__pycache__/urls.cpython-34.pyc | Bin 0 -> 732 bytes .../warpauth/__pycache__/util.cpython-34.pyc | Bin 0 -> 206 bytes {web => www/web}/warpauth/admin.py | 0 www/web/warpauth/admin.pyc | Bin 0 -> 700 bytes {web => www/web}/warpauth/ldap_connector.py | 0 www/web/warpauth/ldap_connector.pyc | Bin 0 -> 1416 bytes www/web/warpauth/migrations/0001_initial.py | 53 + www/web/warpauth/migrations/0001_initial.pyc | Bin 0 -> 1761 bytes .../migrations/0002_auto_20160818_1603.py | 56 + .../web}/warpauth/migrations/__init__.py | 0 www/web/warpauth/migrations/__init__.pyc | Bin 0 -> 133 bytes .../__pycache__/0001_initial.cpython-34.pyc | Bin 0 -> 1557 bytes .../0002_auto_20160818_1603.cpython-34.pyc | Bin 0 -> 1323 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 129 bytes {web => www/web}/warpauth/models.py | 6 +- www/web/warpauth/models.pyc | Bin 0 -> 2744 bytes .../warpauth/templates/warpauth/login.html | 0 .../warpauth/templates/warpauth/profile.html | 0 .../warpauth/profile/change_password.html | 0 .../warpauth/profile/information.html | 0 .../warpauth/templates/warpauth/register.html | 0 .../reset_password/change_password.html | 0 .../warpauth/reset_password/token_gen.html | 0 {web => www/web}/warpauth/tests.py | 0 {web => www/web}/warpauth/urls.py | 0 www/web/warpauth/urls.pyc | Bin 0 -> 827 bytes {web => www/web}/warpauth/util.py | 0 www/web/warpauth/util.pyc | Bin 0 -> 247 bytes {web => www/web}/warpauth/views/__init__.py | 0 www/web/warpauth/views/__init__.pyc | Bin 0 -> 159 bytes .../views/__pycache__/__init__.cpython-34.pyc | Bin 0 -> 133 bytes .../views/__pycache__/login.cpython-34.pyc | Bin 0 -> 1409 bytes .../views/__pycache__/profile.cpython-34.pyc | Bin 0 -> 2567 bytes .../views/__pycache__/register.cpython-34.pyc | Bin 0 -> 1586 bytes .../__pycache__/reset_password.cpython-34.pyc | Bin 0 -> 2358 bytes .../web}/warpauth/views/admin/__init__.py | 0 {web => www/web}/warpauth/views/login.py | 0 www/web/warpauth/views/login.pyc | Bin 0 -> 1683 bytes {web => www/web}/warpauth/views/profile.py | 2 +- www/web/warpauth/views/profile.pyc | Bin 0 -> 2912 bytes {web => www/web}/warpauth/views/register.py | 0 www/web/warpauth/views/register.pyc | Bin 0 -> 1828 bytes .../web}/warpauth/views/reset_password.py | 0 www/web/warpauth/views/reset_password.pyc | Bin 0 -> 2630 bytes {web => www/web}/warpfood/__init__.py | 0 www/web/warpfood/__init__.pyc | Bin 0 -> 122 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 105 bytes .../warpfood/__pycache__/admin.cpython-34.pyc | Bin 0 -> 778 bytes .../__pycache__/models.cpython-34.pyc | Bin 0 -> 4022 bytes .../warpfood/__pycache__/urls.cpython-34.pyc | Bin 0 -> 626 bytes .../warpfood/__pycache__/util.cpython-34.pyc | Bin 0 -> 586 bytes .../warpfood/__pycache__/views.cpython-34.pyc | Bin 0 -> 3590 bytes {web => www/web}/warpfood/admin.py | 0 www/web/warpfood/admin.pyc | Bin 0 -> 882 bytes www/web/warpfood/migrations/0001_initial.py | 77 + www/web/warpfood/migrations/0001_initial.pyc | Bin 0 -> 2392 bytes .../web}/warpfood/migrations/__init__.py | 0 www/web/warpfood/migrations/__init__.pyc | Bin 0 -> 133 bytes .../__pycache__/0001_initial.cpython-34.pyc | Bin 0 -> 2125 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 129 bytes {web => www/web}/warpfood/models.py | 0 www/web/warpfood/models.pyc | Bin 0 -> 4454 bytes .../warpfood/templates/warpfood/main.html | 0 .../warpfood/templates/warpfood/view.html | 0 {web => www/web}/warpfood/tests.py | 0 {web => www/web}/warpfood/urls.py | 0 www/web/warpfood/urls.pyc | Bin 0 -> 715 bytes {web => www/web}/warpfood/util.py | 0 www/web/warpfood/util.pyc | Bin 0 -> 689 bytes {web => www/web}/warpfood/views.py | 2 +- www/web/warpfood/views.pyc | Bin 0 -> 4108 bytes {web => www/web}/warpmain/__init__.py | 0 www/web/warpmain/__init__.pyc | Bin 0 -> 122 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 105 bytes .../warpmain/__pycache__/admin.cpython-34.pyc | Bin 0 -> 404 bytes .../__pycache__/models.cpython-34.pyc | Bin 0 -> 1064 bytes .../warpmain/__pycache__/urls.cpython-34.pyc | Bin 0 -> 501 bytes {web => www/web}/warpmain/admin.py | 0 www/web/warpmain/admin.pyc | Bin 0 -> 463 bytes {web => www/web}/warpmain/apps.py | 0 www/web/warpmain/migrations/0001_initial.py | 26 + www/web/warpmain/migrations/0001_initial.pyc | Bin 0 -> 1006 bytes .../web}/warpmain/migrations/__init__.py | 0 www/web/warpmain/migrations/__init__.pyc | Bin 0 -> 133 bytes .../__pycache__/0001_initial.cpython-34.pyc | Bin 0 -> 856 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 129 bytes {web => www/web}/warpmain/models.py | 0 www/web/warpmain/models.pyc | Bin 0 -> 1246 bytes .../warpmain/templates/warpmain/about.html | 0 .../templates/warpmain/admin/dashboard.html | 0 .../templates/warpmain/admin/news.html | 0 .../warpmain/templates/warpmain/main.html | 0 {web => www/web}/warpmain/tests.py | 0 {web => www/web}/warpmain/urls.py | 0 www/web/warpmain/urls.pyc | Bin 0 -> 587 bytes {web => www/web}/warpmain/views/__init__.py | 0 www/web/warpmain/views/__init__.pyc | Bin 0 -> 159 bytes .../views/__pycache__/__init__.cpython-34.pyc | Bin 0 -> 133 bytes .../views/__pycache__/main.cpython-34.pyc | Bin 0 -> 804 bytes .../web}/warpmain/views/admin/__init__.py | 0 www/web/warpmain/views/admin/__init__.pyc | Bin 0 -> 134 bytes .../admin/__pycache__/__init__.cpython-34.pyc | Bin 0 -> 117 bytes .../__pycache__/dashboard.cpython-34.pyc | Bin 0 -> 557 bytes .../admin/__pycache__/news.cpython-34.pyc | Bin 0 -> 1177 bytes .../web}/warpmain/views/admin/dashboard.py | 0 www/web/warpmain/views/admin/dashboard.pyc | Bin 0 -> 688 bytes {web => www/web}/warpmain/views/admin/news.py | 0 www/web/warpmain/views/admin/news.pyc | Bin 0 -> 1411 bytes {web => www/web}/warpmain/views/main.py | 0 www/web/warpmain/views/main.pyc | Bin 0 -> 985 bytes {web/warpzone => www/web/warppay}/__init__.py | 0 www/web/warppay/__init__.pyc | Bin 0 -> 121 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 104 bytes .../warppay/__pycache__/admin.cpython-34.pyc | Bin 0 -> 101 bytes .../warppay/__pycache__/models.cpython-34.pyc | Bin 0 -> 1460 bytes .../warppay/__pycache__/urls.cpython-34.pyc | Bin 0 -> 270 bytes .../warppay/__pycache__/views.cpython-34.pyc | Bin 0 -> 1447 bytes .../web/warppay/admin.py | 0 www/web/warppay/admin.pyc | Bin 0 -> 118 bytes www/web/warppay/apps.py | 5 + www/web/warppay/migrations/0001_initial.py | 34 + www/web/warppay/migrations/0001_initial.pyc | Bin 0 -> 1179 bytes www/web/warppay/migrations/__init__.py | 0 www/web/warppay/migrations/__init__.pyc | Bin 0 -> 132 bytes .../__pycache__/0001_initial.cpython-34.pyc | Bin 0 -> 1015 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 128 bytes www/web/warppay/models.py | 25 + www/web/warppay/models.pyc | Bin 0 -> 1672 bytes www/web/warppay/templates/warppay/main.html | 21 + www/web/warppay/tests.py | 3 + www/web/warppay/urls.py | 7 + www/web/warppay/urls.pyc | Bin 0 -> 320 bytes www/web/warppay/views.py | 41 + www/web/warppay/views.pyc | Bin 0 -> 1376 bytes {web => www/web}/warpzone.db | Bin 67584 -> 76800 bytes www/web/warpzone/__init__.py | 0 www/web/warpzone/__init__.pyc | Bin 0 -> 122 bytes .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 105 bytes .../__pycache__/settings.cpython-34.pyc | Bin 0 -> 4639 bytes .../warpzone/__pycache__/urls.cpython-34.pyc | Bin 0 -> 598 bytes .../warpzone/__pycache__/wsgi.cpython-34.pyc | Bin 0 -> 530 bytes {web => www/web}/warpzone/settings.py | 37 +- www/web/warpzone/settings.pyc | Bin 0 -> 5109 bytes {web => www/web}/warpzone/urls.py | 1 + www/web/warpzone/urls.pyc | Bin 0 -> 690 bytes {web => www/web}/warpzone/wsgi.py | 0 www/web/warpzone/wsgi.pyc | Bin 0 -> 570 bytes 350 files changed, 17539 insertions(+), 7289 deletions(-) delete mode 100644 ldap/Dockerfile delete mode 100644 ldap/build.sh delete mode 100644 ldap/data/config.php delete mode 100644 ldap/data/fusiondirectory.conf delete mode 100644 ldap/data/fusiondirectory/fusiondirectory-apache.conf delete mode 100644 ldap/data/fusiondirectory/fusiondirectory.conf delete mode 100644 ldap/data/ldap_conf/ldap.conf delete mode 100644 ldap/data/ldap_conf/schema/README delete mode 100644 ldap/data/ldap_conf/schema/collective.ldif delete mode 100644 ldap/data/ldap_conf/schema/collective.schema delete mode 100644 ldap/data/ldap_conf/schema/corba.ldif delete mode 100644 ldap/data/ldap_conf/schema/corba.schema delete mode 100644 ldap/data/ldap_conf/schema/core.ldif delete mode 100644 ldap/data/ldap_conf/schema/core.schema delete mode 100644 ldap/data/ldap_conf/schema/cosine.ldif delete mode 100644 ldap/data/ldap_conf/schema/cosine.schema delete mode 100644 ldap/data/ldap_conf/schema/duaconf.ldif delete mode 100644 ldap/data/ldap_conf/schema/duaconf.schema delete mode 100644 ldap/data/ldap_conf/schema/dyngroup.ldif delete mode 100644 ldap/data/ldap_conf/schema/dyngroup.schema delete mode 100644 ldap/data/ldap_conf/schema/fusiondirectory/core-fd-conf.schema delete mode 100644 ldap/data/ldap_conf/schema/fusiondirectory/core-fd.schema delete mode 100644 ldap/data/ldap_conf/schema/fusiondirectory/ldapns.schema delete mode 100644 ldap/data/ldap_conf/schema/fusiondirectory/rfc2307bis.schema delete mode 100644 ldap/data/ldap_conf/schema/fusiondirectory/template-fd.schema delete mode 100644 ldap/data/ldap_conf/schema/inetorgperson.ldif delete mode 100644 ldap/data/ldap_conf/schema/inetorgperson.schema delete mode 100644 ldap/data/ldap_conf/schema/java.ldif delete mode 100644 ldap/data/ldap_conf/schema/java.schema delete mode 100644 ldap/data/ldap_conf/schema/misc.ldif delete mode 100644 ldap/data/ldap_conf/schema/misc.schema delete mode 100644 ldap/data/ldap_conf/schema/nis.ldif delete mode 100644 ldap/data/ldap_conf/schema/nis.schema delete mode 100644 ldap/data/ldap_conf/schema/openldap.ldif delete mode 100644 ldap/data/ldap_conf/schema/openldap.schema delete mode 100644 ldap/data/ldap_conf/schema/pmi.ldif delete mode 100644 ldap/data/ldap_conf/schema/pmi.schema delete mode 100644 ldap/data/ldap_conf/schema/ppolicy.ldif delete mode 100644 ldap/data/ldap_conf/schema/ppolicy.schema delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=module{0}.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={0}core.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={2}nis.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={4}core-fd.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={5}core-fd-conf.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={6}ldapns.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={7}template-fd.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/olcBackend={0}mdb.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={-1}frontend.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={0}config.ldif delete mode 100644 ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={1}mdb.ldif delete mode 100644 ldap/data/ldap_db/data.mdb delete mode 100644 ldap/data/ldap_db/lock.mdb delete mode 100644 ldap/data/start.sh create mode 100644 ldap/initial_config.tar.gz create mode 100644 ldap/initial_database.gz delete mode 100644 ldap/stop_ldap.sh delete mode 100644 slacktest delete mode 100644 web_docker/Dockerfile delete mode 100644 web_docker/build.sh delete mode 100644 web_docker/entrypoint.sh delete mode 100644 web_docker/run.sh create mode 100644 www/build.sh create mode 100644 www/docker/Dockerfile create mode 100644 www/docker/entrypoint.sh create mode 100644 www/docker/ldapdb_base.py create mode 100644 www/docker/ldapdb_fields.py create mode 100644 www/nginx/nginx_warpinfra.conf rename {web => www/nginx}/uwsgi.ini (87%) create mode 100644 www/nginx/uwsgi_params create mode 100644 www/nginx/warpinfra.crt create mode 100644 www/nginx/warpinfra.key create mode 100644 www/run.sh create mode 100644 www/web/.idea/.name create mode 100644 www/web/.idea/deployment.xml create mode 100644 www/web/.idea/dictionaries/dresen.xml create mode 100644 www/web/.idea/inspectionProfiles/Project_Default.xml create mode 100644 www/web/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 www/web/.idea/misc.xml create mode 100644 www/web/.idea/modules.xml create mode 100644 www/web/.idea/vcs.xml create mode 100644 www/web/.idea/web.iml create mode 100644 www/web/.idea/workspace.xml rename {web => www/web}/LICENSE (100%) rename {web => www/web}/manage.py (100%) create mode 100644 www/web/static/admin/css/base.css create mode 100644 www/web/static/admin/css/changelists.css create mode 100644 www/web/static/admin/css/dashboard.css create mode 100644 www/web/static/admin/css/fonts.css create mode 100644 www/web/static/admin/css/forms.css create mode 100644 www/web/static/admin/css/login.css create mode 100644 www/web/static/admin/css/rtl.css create mode 100644 www/web/static/admin/css/widgets.css create mode 100644 www/web/static/admin/fonts/LICENSE.txt create mode 100644 www/web/static/admin/fonts/README.txt create mode 100644 www/web/static/admin/fonts/Roboto-Bold-webfont.woff create mode 100644 www/web/static/admin/fonts/Roboto-Light-webfont.woff create mode 100644 www/web/static/admin/fonts/Roboto-Regular-webfont.woff create mode 100644 www/web/static/admin/img/LICENSE create mode 100644 www/web/static/admin/img/README.txt create mode 100644 www/web/static/admin/img/calendar-icons.svg create mode 100644 www/web/static/admin/img/gis/move_vertex_off.svg create mode 100644 www/web/static/admin/img/gis/move_vertex_on.svg create mode 100644 www/web/static/admin/img/icon-addlink.svg create mode 100644 www/web/static/admin/img/icon-alert.svg create mode 100644 www/web/static/admin/img/icon-calendar.svg create mode 100644 www/web/static/admin/img/icon-changelink.svg create mode 100644 www/web/static/admin/img/icon-clock.svg create mode 100644 www/web/static/admin/img/icon-deletelink.svg create mode 100644 www/web/static/admin/img/icon-no.svg create mode 100644 www/web/static/admin/img/icon-unknown-alt.svg create mode 100644 www/web/static/admin/img/icon-unknown.svg create mode 100644 www/web/static/admin/img/icon-yes.svg create mode 100644 www/web/static/admin/img/inline-delete.svg create mode 100644 www/web/static/admin/img/search.svg create mode 100644 www/web/static/admin/img/selector-icons.svg create mode 100644 www/web/static/admin/img/sorting-icons.svg create mode 100644 www/web/static/admin/img/tooltag-add.svg create mode 100644 www/web/static/admin/img/tooltag-arrowright.svg create mode 100644 www/web/static/admin/js/SelectBox.js create mode 100644 www/web/static/admin/js/SelectFilter2.js create mode 100644 www/web/static/admin/js/actions.js create mode 100644 www/web/static/admin/js/actions.min.js create mode 100644 www/web/static/admin/js/admin/DateTimeShortcuts.js create mode 100644 www/web/static/admin/js/admin/RelatedObjectLookups.js create mode 100644 www/web/static/admin/js/calendar.js create mode 100644 www/web/static/admin/js/collapse.js create mode 100644 www/web/static/admin/js/collapse.min.js create mode 100644 www/web/static/admin/js/core.js create mode 100644 www/web/static/admin/js/inlines.js create mode 100644 www/web/static/admin/js/inlines.min.js create mode 100644 www/web/static/admin/js/jquery.init.js create mode 100644 www/web/static/admin/js/prepopulate.js create mode 100644 www/web/static/admin/js/prepopulate.min.js create mode 100644 www/web/static/admin/js/timeparse.js create mode 100644 www/web/static/admin/js/urlify.js create mode 100644 www/web/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt create mode 100644 www/web/static/admin/js/vendor/jquery/jquery.js rename web/templates/media/js/jquery.js => www/web/static/admin/js/vendor/jquery/jquery.min.js (100%) create mode 100644 www/web/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt create mode 100644 www/web/static/admin/js/vendor/xregexp/xregexp.min.js create mode 100644 www/web/static/rest_framework/css/bootstrap-tweaks.css create mode 100644 www/web/static/rest_framework/css/bootstrap.min.css create mode 100644 www/web/static/rest_framework/css/default.css create mode 100644 www/web/static/rest_framework/css/prettify.css rename {web/templates/media => www/web/static/rest_framework}/fonts/glyphicons-halflings-regular.eot (100%) rename {web/templates/media => www/web/static/rest_framework}/fonts/glyphicons-halflings-regular.svg (100%) rename {web/templates/media => www/web/static/rest_framework}/fonts/glyphicons-halflings-regular.ttf (100%) rename {web/templates/media => www/web/static/rest_framework}/fonts/glyphicons-halflings-regular.woff (100%) rename {web/templates/media => www/web/static/rest_framework}/fonts/glyphicons-halflings-regular.woff2 (100%) create mode 100644 www/web/static/rest_framework/img/glyphicons-halflings-white.png create mode 100644 www/web/static/rest_framework/img/glyphicons-halflings.png create mode 100644 www/web/static/rest_framework/img/grid.png create mode 100644 www/web/static/rest_framework/js/ajax-form.js create mode 100644 www/web/static/rest_framework/js/bootstrap.min.js create mode 100644 www/web/static/rest_framework/js/csrf.js create mode 100644 www/web/static/rest_framework/js/default.js create mode 100644 www/web/static/rest_framework/js/jquery-1.12.4.min.js create mode 100644 www/web/static/rest_framework/js/prettify-min.js rename {web => www/web}/templates/base.html (100%) rename {web => www/web}/templates/licenses/bootstrap.txt (100%) rename {web => www/web}/templates/licenses/chart_js.txt (100%) rename {web => www/web}/templates/licenses/django.txt (100%) rename {web => www/web}/templates/licenses/gplv2.txt (100%) rename {web => www/web}/templates/media/chart_js/.gitignore (100%) rename {web => www/web}/templates/media/chart_js/.travis.yml (100%) rename {web => www/web}/templates/media/chart_js/LICENSE (100%) rename {web => www/web}/templates/media/chart_js/README.md (100%) rename {web => www/web}/templates/media/chart_js/css/demo.css (100%) rename {web => www/web}/templates/media/chart_js/index.html (100%) rename {web => www/web}/templates/media/chart_js/src/demo.js (100%) rename {web => www/web}/templates/media/chart_js/src/legend.js (100%) rename {web => www/web}/templates/media/chart_js/src/legend.legacy.js (100%) rename {web => www/web}/templates/media/chart_js/vendor/Chart.js (100%) rename {web => www/web}/templates/media/css/bootstrap-theme.css (100%) rename {web => www/web}/templates/media/css/bootstrap-theme.css.map (100%) rename {web => www/web}/templates/media/css/bootstrap-theme.min.css (100%) rename {web => www/web}/templates/media/css/bootstrap.css (100%) rename {web => www/web}/templates/media/css/bootstrap.css.map (100%) rename {web => www/web}/templates/media/css/bootstrap.min.css (100%) rename {web => www/web}/templates/media/django_logo.gif (100%) create mode 100644 www/web/templates/media/fonts/glyphicons-halflings-regular.eot create mode 100644 www/web/templates/media/fonts/glyphicons-halflings-regular.svg create mode 100644 www/web/templates/media/fonts/glyphicons-halflings-regular.ttf create mode 100644 www/web/templates/media/fonts/glyphicons-halflings-regular.woff create mode 100644 www/web/templates/media/fonts/glyphicons-halflings-regular.woff2 rename {web => www/web}/templates/media/js/bootstrap.js (100%) rename {web => www/web}/templates/media/js/bootstrap.min.js (100%) create mode 100644 www/web/templates/media/js/jquery.js rename {web => www/web}/templates/media/js/npm.js (100%) rename {web => www/web}/templates/media/warpzone_logo_large.png (100%) rename {web => www/web}/templates/media/warpzone_medium.png (100%) rename {web => www/web}/templates/media/warpzone_small.png (100%) rename {web => www/web}/warpauth/__init__.py (100%) create mode 100644 www/web/warpauth/__init__.pyc create mode 100644 www/web/warpauth/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpauth/__pycache__/admin.cpython-34.pyc create mode 100644 www/web/warpauth/__pycache__/ldap_connector.cpython-34.pyc create mode 100644 www/web/warpauth/__pycache__/models.cpython-34.pyc create mode 100644 www/web/warpauth/__pycache__/urls.cpython-34.pyc create mode 100644 www/web/warpauth/__pycache__/util.cpython-34.pyc rename {web => www/web}/warpauth/admin.py (100%) create mode 100644 www/web/warpauth/admin.pyc rename {web => www/web}/warpauth/ldap_connector.py (100%) create mode 100644 www/web/warpauth/ldap_connector.pyc create mode 100644 www/web/warpauth/migrations/0001_initial.py create mode 100644 www/web/warpauth/migrations/0001_initial.pyc create mode 100644 www/web/warpauth/migrations/0002_auto_20160818_1603.py rename {web => www/web}/warpauth/migrations/__init__.py (100%) create mode 100644 www/web/warpauth/migrations/__init__.pyc create mode 100644 www/web/warpauth/migrations/__pycache__/0001_initial.cpython-34.pyc create mode 100644 www/web/warpauth/migrations/__pycache__/0002_auto_20160818_1603.cpython-34.pyc create mode 100644 www/web/warpauth/migrations/__pycache__/__init__.cpython-34.pyc rename {web => www/web}/warpauth/models.py (87%) create mode 100644 www/web/warpauth/models.pyc rename {web => www/web}/warpauth/templates/warpauth/login.html (100%) rename {web => www/web}/warpauth/templates/warpauth/profile.html (100%) rename {web => www/web}/warpauth/templates/warpauth/profile/change_password.html (100%) rename {web => www/web}/warpauth/templates/warpauth/profile/information.html (100%) rename {web => www/web}/warpauth/templates/warpauth/register.html (100%) rename {web => www/web}/warpauth/templates/warpauth/reset_password/change_password.html (100%) rename {web => www/web}/warpauth/templates/warpauth/reset_password/token_gen.html (100%) rename {web => www/web}/warpauth/tests.py (100%) rename {web => www/web}/warpauth/urls.py (100%) create mode 100644 www/web/warpauth/urls.pyc rename {web => www/web}/warpauth/util.py (100%) create mode 100644 www/web/warpauth/util.pyc rename {web => www/web}/warpauth/views/__init__.py (100%) create mode 100644 www/web/warpauth/views/__init__.pyc create mode 100644 www/web/warpauth/views/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpauth/views/__pycache__/login.cpython-34.pyc create mode 100644 www/web/warpauth/views/__pycache__/profile.cpython-34.pyc create mode 100644 www/web/warpauth/views/__pycache__/register.cpython-34.pyc create mode 100644 www/web/warpauth/views/__pycache__/reset_password.cpython-34.pyc rename {web => www/web}/warpauth/views/admin/__init__.py (100%) rename {web => www/web}/warpauth/views/login.py (100%) create mode 100644 www/web/warpauth/views/login.pyc rename {web => www/web}/warpauth/views/profile.py (99%) create mode 100644 www/web/warpauth/views/profile.pyc rename {web => www/web}/warpauth/views/register.py (100%) create mode 100644 www/web/warpauth/views/register.pyc rename {web => www/web}/warpauth/views/reset_password.py (100%) create mode 100644 www/web/warpauth/views/reset_password.pyc rename {web => www/web}/warpfood/__init__.py (100%) create mode 100644 www/web/warpfood/__init__.pyc create mode 100644 www/web/warpfood/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpfood/__pycache__/admin.cpython-34.pyc create mode 100644 www/web/warpfood/__pycache__/models.cpython-34.pyc create mode 100644 www/web/warpfood/__pycache__/urls.cpython-34.pyc create mode 100644 www/web/warpfood/__pycache__/util.cpython-34.pyc create mode 100644 www/web/warpfood/__pycache__/views.cpython-34.pyc rename {web => www/web}/warpfood/admin.py (100%) create mode 100644 www/web/warpfood/admin.pyc create mode 100644 www/web/warpfood/migrations/0001_initial.py create mode 100644 www/web/warpfood/migrations/0001_initial.pyc rename {web => www/web}/warpfood/migrations/__init__.py (100%) create mode 100644 www/web/warpfood/migrations/__init__.pyc create mode 100644 www/web/warpfood/migrations/__pycache__/0001_initial.cpython-34.pyc create mode 100644 www/web/warpfood/migrations/__pycache__/__init__.cpython-34.pyc rename {web => www/web}/warpfood/models.py (100%) create mode 100644 www/web/warpfood/models.pyc rename {web => www/web}/warpfood/templates/warpfood/main.html (100%) rename {web => www/web}/warpfood/templates/warpfood/view.html (100%) rename {web => www/web}/warpfood/tests.py (100%) rename {web => www/web}/warpfood/urls.py (100%) create mode 100644 www/web/warpfood/urls.pyc rename {web => www/web}/warpfood/util.py (100%) create mode 100644 www/web/warpfood/util.pyc rename {web => www/web}/warpfood/views.py (99%) create mode 100644 www/web/warpfood/views.pyc rename {web => www/web}/warpmain/__init__.py (100%) create mode 100644 www/web/warpmain/__init__.pyc create mode 100644 www/web/warpmain/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpmain/__pycache__/admin.cpython-34.pyc create mode 100644 www/web/warpmain/__pycache__/models.cpython-34.pyc create mode 100644 www/web/warpmain/__pycache__/urls.cpython-34.pyc rename {web => www/web}/warpmain/admin.py (100%) create mode 100644 www/web/warpmain/admin.pyc rename {web => www/web}/warpmain/apps.py (100%) create mode 100644 www/web/warpmain/migrations/0001_initial.py create mode 100644 www/web/warpmain/migrations/0001_initial.pyc rename {web => www/web}/warpmain/migrations/__init__.py (100%) create mode 100644 www/web/warpmain/migrations/__init__.pyc create mode 100644 www/web/warpmain/migrations/__pycache__/0001_initial.cpython-34.pyc create mode 100644 www/web/warpmain/migrations/__pycache__/__init__.cpython-34.pyc rename {web => www/web}/warpmain/models.py (100%) create mode 100644 www/web/warpmain/models.pyc rename {web => www/web}/warpmain/templates/warpmain/about.html (100%) rename {web => www/web}/warpmain/templates/warpmain/admin/dashboard.html (100%) rename {web => www/web}/warpmain/templates/warpmain/admin/news.html (100%) rename {web => www/web}/warpmain/templates/warpmain/main.html (100%) rename {web => www/web}/warpmain/tests.py (100%) rename {web => www/web}/warpmain/urls.py (100%) create mode 100644 www/web/warpmain/urls.pyc rename {web => www/web}/warpmain/views/__init__.py (100%) create mode 100644 www/web/warpmain/views/__init__.pyc create mode 100644 www/web/warpmain/views/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpmain/views/__pycache__/main.cpython-34.pyc rename {web => www/web}/warpmain/views/admin/__init__.py (100%) create mode 100644 www/web/warpmain/views/admin/__init__.pyc create mode 100644 www/web/warpmain/views/admin/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpmain/views/admin/__pycache__/dashboard.cpython-34.pyc create mode 100644 www/web/warpmain/views/admin/__pycache__/news.cpython-34.pyc rename {web => www/web}/warpmain/views/admin/dashboard.py (100%) create mode 100644 www/web/warpmain/views/admin/dashboard.pyc rename {web => www/web}/warpmain/views/admin/news.py (100%) create mode 100644 www/web/warpmain/views/admin/news.pyc rename {web => www/web}/warpmain/views/main.py (100%) create mode 100644 www/web/warpmain/views/main.pyc rename {web/warpzone => www/web/warppay}/__init__.py (100%) create mode 100644 www/web/warppay/__init__.pyc create mode 100644 www/web/warppay/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warppay/__pycache__/admin.cpython-34.pyc create mode 100644 www/web/warppay/__pycache__/models.cpython-34.pyc create mode 100644 www/web/warppay/__pycache__/urls.cpython-34.pyc create mode 100644 www/web/warppay/__pycache__/views.cpython-34.pyc rename ldap/data/ldap_conf/schema/fusiondirectory/openssh-lpk.ldif => www/web/warppay/admin.py (100%) create mode 100644 www/web/warppay/admin.pyc create mode 100644 www/web/warppay/apps.py create mode 100644 www/web/warppay/migrations/0001_initial.py create mode 100644 www/web/warppay/migrations/0001_initial.pyc create mode 100644 www/web/warppay/migrations/__init__.py create mode 100644 www/web/warppay/migrations/__init__.pyc create mode 100644 www/web/warppay/migrations/__pycache__/0001_initial.cpython-34.pyc create mode 100644 www/web/warppay/migrations/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warppay/models.py create mode 100644 www/web/warppay/models.pyc create mode 100644 www/web/warppay/templates/warppay/main.html create mode 100644 www/web/warppay/tests.py create mode 100644 www/web/warppay/urls.py create mode 100644 www/web/warppay/urls.pyc create mode 100644 www/web/warppay/views.py create mode 100644 www/web/warppay/views.pyc rename {web => www/web}/warpzone.db (78%) create mode 100644 www/web/warpzone/__init__.py create mode 100644 www/web/warpzone/__init__.pyc create mode 100644 www/web/warpzone/__pycache__/__init__.cpython-34.pyc create mode 100644 www/web/warpzone/__pycache__/settings.cpython-34.pyc create mode 100644 www/web/warpzone/__pycache__/urls.cpython-34.pyc create mode 100644 www/web/warpzone/__pycache__/wsgi.cpython-34.pyc rename {web => www/web}/warpzone/settings.py (81%) create mode 100644 www/web/warpzone/settings.pyc rename {web => www/web}/warpzone/urls.py (91%) create mode 100644 www/web/warpzone/urls.pyc rename {web => www/web}/warpzone/wsgi.py (100%) create mode 100644 www/web/warpzone/wsgi.pyc diff --git a/ldap/Dockerfile b/ldap/Dockerfile deleted file mode 100644 index 4c76e8b..0000000 --- a/ldap/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -From debian:jessie - -RUN echo "slapd slapd/password1 password 12345" | debconf-set-selections -RUN echo "slapd slapd/password2 password 12345" | debconf-set-selections - -RUN echo "slapd slapd/domain string warpzone.ms" | debconf-set-selections -RUN echo "slapd shared/organization string warpzone.ms" | debconf-set-selections - -RUN echo "slapd slapd/internal/adminpw password warpzone.ms" | debconf-set-selections - -RUN apt-get update && apt-get install -y \ - debconf-utils \ - apt-utils \ - ssh \ - less \ - ldap-utils \ - rsyslog \ - nano \ - slapd - -RUN cp -r /etc/ldap/ /tmp - -RUN echo "deb http://repos.fusiondirectory.org/debian-jessie jessie main" >> /etc/apt/sources.list -RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E184859262B4981F - - -RUN apt-get update && apt-get install -y \ - fusiondirectory \ - fusiondirectory-schema \ - fusiondirectory-plugin-ssh - -RUN apt-get update && apt-get install -y phpldapadmin - -COPY ./data/start.sh /opt/start.sh -COPY ./data/config.php /etc/phpldapadmin/config.php - -EXPOSE 22 8000 389 - -VOLUME ["/etc/fusiondirectory","/var/lib/ldap","/etc/ldap"] - -ENTRYPOINT sh /opt/start.sh - diff --git a/ldap/build.sh b/ldap/build.sh deleted file mode 100644 index cc759a6..0000000 --- a/ldap/build.sh +++ /dev/null @@ -1 +0,0 @@ -docker build -t ldap . diff --git a/ldap/data/config.php b/ldap/data/config.php deleted file mode 100644 index 5e7154f..0000000 --- a/ldap/data/config.php +++ /dev/null @@ -1,576 +0,0 @@ -<?php -/** NOTE ** - ** Make sure that <?php is the FIRST line of this file! - ** IE: There should NOT be any blank lines or spaces BEFORE <?php - **/ - -/** - * The phpLDAPadmin config file - * See: http://phpldapadmin.sourceforge.net/wiki/index.php/Config.php - * - * This is where you can customise some of the phpLDAPadmin defaults - * that are defined in config_default.php. - * - * To override a default, use the $config->custom variable to do so. - * For example, the default for defining the language in config_default.php - * - * $this->default->appearance['language'] = array( - * 'desc'=>'Language', - * 'default'=>'auto'); - * - * to override this, use $config->custom->appearance['language'] = 'en_EN'; - * - * This file is also used to configure your LDAP server connections. - * - * You must specify at least one LDAP server there. You may add - * as many as you like. You can also specify your language, and - * many other options. - * - * NOTE: Commented out values in this file prefixed by //, represent the - * defaults that have been defined in config_default.php. - * Commented out values prefixed by #, dont reflect their default value, you can - * check config_default.php if you want to see what the default is. - * - * DONT change config_default.php, you changes will be lost by the next release - * of PLA. Instead change this file - as it will NOT be replaced by a new - * version of phpLDAPadmin. - */ - -/********************************************* - * Useful important configuration overrides * - *********************************************/ - -/* If you are asked to put PLA in debug mode, this is how you do it: */ -# $config->custom->debug['level'] = 255; -# $config->custom->debug['syslog'] = true; -# $config->custom->debug['file'] = '/tmp/pla_debug.log'; - -/* phpLDAPadmin can encrypt the content of sensitive cookies if you set this - to a big random string. */ -// $config->custom->session['blowfish'] = null; - -/* If your auth_type is http, you can override your HTTP Authentication Realm. */ -// $config->custom->session['http_realm'] = sprintf('%s %s',app_name(),'login'); - -/* The language setting. If you set this to 'auto', phpLDAPadmin will attempt - to determine your language automatically. - If PLA doesnt show (all) strings in your language, then you can do some - translation at http://translations.launchpad.net/phpldapadmin and download - the translation files, replacing those provided with PLA. - (We'll pick up the translations before making the next release too!) */ -// $config->custom->appearance['language'] = 'auto'; - -/* The temporary storage directory where we will put jpegPhoto data - This directory must be readable and writable by your web server. */ -// $config->custom->jpeg['tmpdir'] = '/tmp'; // Example for Unix systems -# $config->custom->jpeg['tmpdir'] = 'c:\\temp'; // Example for Windows systems - -/* Set this to (bool)true if you do NOT want a random salt used when - calling crypt(). Instead, use the first two letters of the user's - password. This is insecure but unfortunately needed for some older - environments. */ -# $config->custom->password['no_random_crypt_salt'] = true; - -/* PHP script timeout control. If php runs longer than this many seconds then - PHP will stop with an Maximum Execution time error. Increase this value from - the default if queries to your LDAP server are slow. The default is either - 30 seconds or the setting of max_exection_time if this is null. */ -// $config->custom->session['timelimit'] = 30; - -/* Our local timezone - This is to make sure that when we ask the system for the current time, we - get the right local time. If this is not set, all time() calculations will - assume UTC if you have not set PHP date.timezone. */ -// $config->custom->appearance['timezone'] = null; -# $config->custom->appearance['timezone'] = 'Australia/Melbourne'; - -/********************************************* - * Commands * - *********************************************/ - -/* Command availability ; if you don't authorize a command the command - links will not be shown and the command action will not be permitted. - For better security, set also ACL in your ldap directory. */ -/* -$config->custom->commands['cmd'] = array( - 'entry_internal_attributes_show' => true, - 'entry_refresh' => true, - 'oslinks' => true, - 'switch_template' => true -); - -$config->custom->commands['script'] = array( - 'add_attr_form' => true, - 'add_oclass_form' => true, - 'add_value_form' => true, - 'collapse' => true, - 'compare' => true, - 'compare_form' => true, - 'copy' => true, - 'copy_form' => true, - 'create' => true, - 'create_confirm' => true, - 'delete' => true, - 'delete_attr' => true, - 'delete_form' => true, - 'draw_tree_node' => true, - 'expand' => true, - 'export' => true, - 'export_form' => true, - 'import' => true, - 'import_form' => true, - 'login' => true, - 'logout' => true, - 'login_form' => true, - 'mass_delete' => true, - 'mass_edit' => true, - 'mass_update' => true, - 'modify_member_form' => true, - 'monitor' => true, - 'purge_cache' => true, - 'query_engine' => true, - 'rename' => true, - 'rename_form' => true, - 'rdelete' => true, - 'refresh' => true, - 'schema' => true, - 'server_info' => true, - 'show_cache' => true, - 'template_engine' => true, - 'update_confirm' => true, - 'update' => true -); -*/ - -/********************************************* - * Appearance * - *********************************************/ - -/* If you want to choose the appearance of the tree, specify a class name which - inherits from the Tree class. */ -// $config->custom->appearance['tree'] = 'AJAXTree'; -# $config->custom->appearance['tree'] = 'HTMLTree'; - -/* Just show your custom templates. */ -// $config->custom->appearance['custom_templates_only'] = false; - -/* Disable the default template. */ -// $config->custom->appearance['disable_default_template'] = false; - -/* Hide the warnings for invalid objectClasses/attributes in templates. */ -// $config->custom->appearance['hide_template_warning'] = false; - -/* Set to true if you would like to hide header and footer parts. */ -// $config->custom->appearance['minimalMode'] = false; - -/* Configure what objects are shown in left hand tree */ -// $config->custom->appearance['tree_filter'] = '(objectclass=*)'; - -/* The height and width of the tree. If these values are not set, then - no tree scroll bars are provided. */ -// $config->custom->appearance['tree_height'] = null; -# $config->custom->appearance['tree_height'] = 600; -// $config->custom->appearance['tree_width'] = null; -# $config->custom->appearance['tree_width'] = 250; - -/* Confirm create and update operations, allowing you to review the changes - and optionally skip attributes during the create/update operation. */ -// $config->custom->confirm['create'] = true; -// $config->custom->confirm['update'] = true; - -/* Confirm copy operations, and treat them like create operations. This allows - you to edit the attributes (thus changing any that might conflict with - uniqueness) before creating the new entry. */ -// $config->custom->confirm['copy'] = true; - -/********************************************* - * User-friendly attribute translation * - *********************************************/ - -/* Use this array to map attribute names to user friendly names. For example, if - you don't want to see "facsimileTelephoneNumber" but rather "Fax". */ -// $config->custom->appearance['friendly_attrs'] = array(); -$config->custom->appearance['friendly_attrs'] = array( - 'facsimileTelephoneNumber' => 'Fax', - 'gid' => 'Group', - 'mail' => 'Email', - 'telephoneNumber' => 'Telephone', - 'uid' => 'User Name', - 'userPassword' => 'Password' -); - -/********************************************* - * Hidden attributes * - *********************************************/ - -/* You may want to hide certain attributes from being edited. If you want to - hide attributes from the user, you should use your LDAP servers ACLs. - NOTE: The user must be able to read the hide_attrs_exempt entry to be - excluded. */ -// $config->custom->appearance['hide_attrs'] = array(); -# $config->custom->appearance['hide_attrs'] = array('objectClass'); - -/* Members of this list will be exempt from the hidden attributes. */ -// $config->custom->appearance['hide_attrs_exempt'] = null; -# $config->custom->appearance['hide_attrs_exempt'] = 'cn=PLA UnHide,ou=Groups,c=AU'; - -/********************************************* - * Read-only attributes * - *********************************************/ - -/* You may want to phpLDAPadmin to display certain attributes as read only, - meaning that users will not be presented a form for modifying those - attributes, and they will not be allowed to be modified on the "back-end" - either. You may configure this list here: - NOTE: The user must be able to read the readonly_attrs_exempt entry to be - excluded. */ -// $config->custom->appearance['readonly_attrs'] = array(); - -/* Members of this list will be exempt from the readonly attributes. */ -// $config->custom->appearance['readonly_attrs_exempt'] = null; -# $config->custom->appearance['readonly_attrs_exempt'] = 'cn=PLA ReadWrite,ou=Groups,c=AU'; - -/********************************************* - * Group attributes * - *********************************************/ - -/* Add "modify group members" link to the attribute. */ -// $config->custom->modify_member['groupattr'] = array('member','uniqueMember','memberUid'); - -/* Configure filter for member search. This only applies to "modify group members" feature */ -// $config->custom->modify_member['filter'] = '(objectclass=Person)'; - -/* Attribute that is added to the group member attribute. */ -// $config->custom->modify_member['attr'] = 'dn'; - -/* For Posix attributes */ -// $config->custom->modify_member['posixattr'] = 'uid'; -// $config->custom->modify_member['posixfilter'] = '(uid=*)'; -// $config->custom->modify_member['posixgroupattr'] = 'memberUid'; - -/********************************************* - * Support for attrs display order * - *********************************************/ - -/* Use this array if you want to have your attributes displayed in a specific - order. You can use default attribute names or their fridenly names. - For example, "sn" will be displayed right after "givenName". All the other - attributes that are not specified in this array will be displayed after in - alphabetical order. */ -// $config->custom->appearance['attr_display_order'] = array(); -# $config->custom->appearance['attr_display_order'] = array( -# 'givenName', -# 'sn', -# 'cn', -# 'displayName', -# 'uid', -# 'uidNumber', -# 'gidNumber', -# 'homeDirectory', -# 'mail', -# 'userPassword' -# ); - -/********************************************* - * Define your LDAP servers in this section * - *********************************************/ - -$servers = new Datastore(); - -/* $servers->NewServer('ldap_pla') must be called before each new LDAP server - declaration. */ -$servers->newServer('ldap_pla'); - -/* A convenient name that will appear in the tree viewer and throughout - phpLDAPadmin to identify this LDAP server to users. */ -$servers->setValue('server','name','warpzone.ms'); - -/* Examples: - 'ldap.example.com', - 'ldaps://ldap.example.com/', - 'ldapi://%2fusr%local%2fvar%2frun%2fldapi' - (Unix socket at /usr/local/var/run/ldap) */ -$servers->setValue('server','host','127.0.0.1'); - -/* The port your LDAP server listens on (no quotes). 389 is standard. */ -// $servers->setValue('server','port',389); - -/* Array of base DNs of your LDAP server. Leave this blank to have phpLDAPadmin - auto-detect it for you. */ -$servers->setValue('server','base',array('dc=warpzone,dc=ms')); - -/* Five options for auth_type: - 1. 'cookie': you will login via a web form, and a client-side cookie will - store your login dn and password. - 2. 'session': same as cookie but your login dn and password are stored on the - web server in a persistent session variable. - 3. 'http': same as session but your login dn and password are retrieved via - HTTP authentication. - 4. 'config': specify your login dn and password here in this config file. No - login will be required to use phpLDAPadmin for this server. - 5. 'sasl': login will be taken from the webserver's kerberos authentication. - Currently only GSSAPI has been tested (using mod_auth_kerb). - - Choose wisely to protect your authentication information appropriately for - your situation. If you choose 'cookie', your cookie contents will be - encrypted using blowfish and the secret your specify above as - session['blowfish']. */ -$servers->setValue('login','auth_type','session'); - -/* The DN of the user for phpLDAPadmin to bind with. For anonymous binds or - 'cookie','session' or 'sasl' auth_types, LEAVE THE LOGIN_DN AND LOGIN_PASS - BLANK. If you specify a login_attr in conjunction with a cookie or session - auth_type, then you can also specify the bind_id/bind_pass here for searching - the directory for users (ie, if your LDAP server does not allow anonymous - binds. */ -$servers->setValue('login','bind_id','cn=admin,dc=warpzone,dc=ms'); -# $servers->setValue('login','bind_id','cn=Manager,dc=example,dc=com'); - -/* Your LDAP password. If you specified an empty bind_id above, this MUST also - be blank. */ -// $servers->setValue('login','bind_pass',''); -# $servers->setValue('login','bind_pass','secret'); - -/* Use TLS (Transport Layer Security) to connect to the LDAP server. */ -// $servers->setValue('server','tls',false); - -/************************************ - * SASL Authentication * - ************************************/ - -/* Enable SASL authentication LDAP SASL authentication requires PHP 5.x - configured with --with-ldap-sasl=DIR. If this option is disabled (ie, set to - false), then all other sasl options are ignored. */ -// $servers->setValue('login','auth_type','sasl'); - -/* SASL auth mechanism */ -// $servers->setValue('sasl','mech','GSSAPI'); - -/* SASL authentication realm name */ -// $servers->setValue('sasl','realm',''); -# $servers->setValue('sasl','realm','EXAMPLE.COM'); - -/* SASL authorization ID name - If this option is undefined, authorization id will be computed from bind DN, - using authz_id_regex and authz_id_replacement. */ -// $servers->setValue('sasl','authz_id', null); - -/* SASL authorization id regex and replacement - When authz_id property is not set (default), phpLDAPAdmin will try to - figure out authorization id by itself from bind distinguished name (DN). - - This procedure is done by calling preg_replace() php function in the - following way: - - $authz_id = preg_replace($sasl_authz_id_regex,$sasl_authz_id_replacement, - $bind_dn); - - For info about pcre regexes, see: - - pcre(3), perlre(3) - - http://www.php.net/preg_replace */ -// $servers->setValue('sasl','authz_id_regex',null); -// $servers->setValue('sasl','authz_id_replacement',null); -# $servers->setValue('sasl','authz_id_regex','/^uid=([^,]+)(.+)/i'); -# $servers->setValue('sasl','authz_id_replacement','$1'); - -/* SASL auth security props. - See http://beepcore-tcl.sourceforge.net/tclsasl.html#anchor5 for explanation. */ -// $servers->setValue('sasl','props',null); - -/* Default password hashing algorithm. One of md5, ssha, sha, md5crpyt, smd5, - blowfish, crypt or leave blank for now default algorithm. */ -// $servers->setValue('appearance','password_hash_custom','md5'); - -/* If you specified 'cookie' or 'session' as the auth_type above, you can - optionally specify here an attribute to use when logging in. If you enter - 'uid' and login as 'dsmith', phpLDAPadmin will search for (uid=dsmith) - and log in as that user. - Leave blank or specify 'dn' to use full DN for logging in. Note also that if - your LDAP server requires you to login to perform searches, you can enter the - DN to use when searching in 'bind_id' and 'bind_pass' above. */ -// $servers->setValue('login','attr','dn'); - -/* Base DNs to used for logins. If this value is not set, then the LDAP server - Base DNs are used. */ -// $servers->setValue('login','base',array()); - -/* If 'login,attr' is used above such that phpLDAPadmin will search for your DN - at login, you may restrict the search to a specific objectClasses. EG, set this - to array('posixAccount') or array('inetOrgPerson',..), depending upon your - setup. */ -// $servers->setValue('login','class',array()); - -/* If you specified something different from 'dn', for example 'uid', as the - login_attr above, you can optionally specify here to fall back to - authentication with dn. - This is useful, when users should be able to log in with their uid, but - the ldap administrator wants to log in with his root-dn, that does not - necessarily have the uid attribute. - When using this feature, login_class is ignored. */ -// $servers->setValue('login','fallback_dn',false); - -/* Specify true If you want phpLDAPadmin to not display or permit any - modification to the LDAP server. */ -// $servers->setValue('server','read_only',false); - -/* Specify false if you do not want phpLDAPadmin to draw the 'Create new' links - in the tree viewer. */ -// $servers->setValue('appearance','show_create',true); - -/* Set to true if you would like to initially open the first level of each tree. */ -// $servers->setValue('appearance','open_tree',false); - -/* This feature allows phpLDAPadmin to automatically determine the next - available uidNumber for a new entry. */ -// $servers->setValue('auto_number','enable',true); - -/* The mechanism to use when finding the next available uidNumber. Two possible - values: 'uidpool' or 'search'. - The 'uidpool' mechanism uses an existing uidPool entry in your LDAP server to - blindly lookup the next available uidNumber. The 'search' mechanism searches - for entries with a uidNumber value and finds the first available uidNumber - (slower). */ -// $servers->setValue('auto_number','mechanism','search'); - -/* The DN of the search base when the 'search' mechanism is used above. */ -# $servers->setValue('auto_number','search_base','ou=People,dc=example,dc=com'); - -/* The minimum number to use when searching for the next available number - (only when 'search' is used for auto_number. */ -// $servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500)); - -/* If you set this, then phpldapadmin will bind to LDAP with this user ID when - searching for the uidnumber. The idea is, this user id would have full - (readonly) access to uidnumber in your ldap directory (the logged in user - may not), so that you can be guaranteed to get a unique uidnumber for your - directory. */ -// $servers->setValue('auto_number','dn',null); - -/* The password for the dn above. */ -// $servers->setValue('auto_number','pass',null); - -/* Enable anonymous bind login. */ -// $servers->setValue('login','anon_bind',true); - -/* Use customized page with prefix when available. */ -# $servers->setValue('custom','pages_prefix','custom_'); - -/* If you set this, then only these DNs are allowed to log in. This array can - contain individual users, groups or ldap search filter(s). Keep in mind that - the user has not authenticated yet, so this will be an anonymous search to - the LDAP server, so make your ACLs allow these searches to return results! */ -# $servers->setValue('login','allowed_dns',array( -# 'uid=stran,ou=People,dc=example,dc=com', -# '(&(gidNumber=811)(objectClass=groupOfNames))', -# '(|(uidNumber=200)(uidNumber=201))', -# 'cn=callcenter,ou=Group,dc=example,dc=com')); - -/* Set this if you dont want this LDAP server to show in the tree */ -// $servers->setValue('server','visible',true); - -/* Set this if you want to hide the base DNs that dont exist instead of - displaying the message "The base entry doesnt exist, create it?" -// $servers->setValue('server','hide_noaccess_base',false); -# $servers->setValue('server','hide_noaccess_base',true); - -/* This is the time out value in minutes for the server. After as many minutes - of inactivity you will be automatically logged out. If not set, the default - value will be ( session_cache_expire()-1 ) */ -# $servers->setValue('login','timeout',30); - -/* Set this if you want phpldapadmin to perform rename operation on entry which - has children. Certain servers are known to allow it, certain are not. */ -// $servers->setValue('server','branch_rename',false); - -/* If you set this, then phpldapadmin will show these attributes as - internal attributes, even if they are not defined in your schema. */ -// $servers->setValue('server','custom_sys_attrs',array('')); -# $servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime')); - -/* If you set this, then phpldapadmin will show these attributes on - objects, even if they are not defined in your schema. */ -// $servers->setValue('server','custom_attrs',array('')); -# $servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock')); - -/* These attributes will be forced to MAY attributes and become option in the - templates. If they are not defined in the templates, then they wont appear - as per normal template processing. You may want to do this because your LDAP - server may automatically calculate a default value. - In Fedora Directory Server using the DNA Plugin one could ignore uidNumber, - gidNumber and sambaSID. */ -// $servers->setValue('server','force_may',array('')); -# $servers->setValue('server','force_may',array('uidNumber','gidNumber','sambaSID')); - -/********************************************* - * Unique attributes * - *********************************************/ - -/* You may want phpLDAPadmin to enforce some attributes to have unique values - (ie: not belong to other entries in your tree. This (together with - 'unique','dn' and 'unique','pass' option will not let updates to - occur with other attributes have the same value. */ -# $servers->setValue('unique','attrs',array('mail','uid','uidNumber')); - -/* If you set this, then phpldapadmin will bind to LDAP with this user ID when - searching for attribute uniqueness. The idea is, this user id would have full - (readonly) access to your ldap directory (the logged in user may not), so - that you can be guaranteed to get a unique uidnumber for your directory. */ -// $servers->setValue('unique','dn',null); - -/* The password for the dn above. */ -// $servers->setValue('unique','pass',null); - -/************************************************************************** - * If you want to configure additional LDAP servers, do so below. * - * Remove the commented lines and use this section as a template for all * - * your other LDAP servers. * - **************************************************************************/ - -/* -$servers->newServer('ldap_pla'); -$servers->setValue('server','name','LDAP Server'); -$servers->setValue('server','host','127.0.0.1'); -$servers->setValue('server','port',389); -$servers->setValue('server','base',array('')); -$servers->setValue('login','auth_type','cookie'); -$servers->setValue('login','bind_id',''); -$servers->setValue('login','bind_pass',''); -$servers->setValue('server','tls',false); - -# SASL auth -$servers->setValue('login','auth_type','sasl'); -$servers->setValue('sasl','mech','GSSAPI'); -$servers->setValue('sasl','realm','EXAMPLE.COM'); -$servers->setValue('sasl','authz_id',null); -$servers->setValue('sasl','authz_id_regex','/^uid=([^,]+)(.+)/i'); -$servers->setValue('sasl','authz_id_replacement','$1'); -$servers->setValue('sasl','props',null); - -$servers->setValue('appearance','password_hash_custom','md5'); -$servers->setValue('login','attr','dn'); -$servers->setValue('login','fallback_dn',false); -$servers->setValue('login','class',null); -$servers->setValue('server','read_only',false); -$servers->setValue('appearance','show_create',true); - -$servers->setValue('auto_number','enable',true); -$servers->setValue('auto_number','mechanism','search'); -$servers->setValue('auto_number','search_base',null); -$servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500)); -$servers->setValue('auto_number','dn',null); -$servers->setValue('auto_number','pass',null); - -$servers->setValue('login','anon_bind',true); -$servers->setValue('custom','pages_prefix','custom_'); -$servers->setValue('unique','attrs',array('mail','uid','uidNumber')); -$servers->setValue('unique','dn',null); -$servers->setValue('unique','pass',null); - -$servers->setValue('server','visible',true); -$servers->setValue('login','timeout',30); -$servers->setValue('server','branch_rename',false); -$servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime')); -$servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock')); -$servers->setValue('server','force_may',array('uidNumber','gidNumber','sambaSID')); -*/ -?> diff --git a/ldap/data/fusiondirectory.conf b/ldap/data/fusiondirectory.conf deleted file mode 100644 index 5df16a7..0000000 --- a/ldap/data/fusiondirectory.conf +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0"?> -<conf> - <!-- Main section ********************************************************** - The main section defines global settings, which might be overridden by - each location definition inside. - - For more information about the configuration parameters, take a look at - the FusionDirectory.conf(5) manual page. - --> - <main default="localhost" - logging="TRUE" - displayErrors="FALSE" - forceSSL="FALSE" - templateCompileDirectory="/var/spool/fusiondirectory/" - debugLevel="0" - > - - <!-- Location definition --> - <location name="localhost" - > - <referral URI="ldap://localhost:389/dc=warpzone,dc=ms" - adminDn="cn=admin,dc=warpzone,dc=ms" - adminPassword="12345" /> - </location> - </main> -</conf> diff --git a/ldap/data/fusiondirectory/fusiondirectory-apache.conf b/ldap/data/fusiondirectory/fusiondirectory-apache.conf deleted file mode 100644 index 0d4334b..0000000 --- a/ldap/data/fusiondirectory/fusiondirectory-apache.conf +++ /dev/null @@ -1,18 +0,0 @@ -# Include FusionDirectory to your web service -Alias /fusiondirectory /usr/share/fusiondirectory/html - -<IfModule mod_php5.c> -<Location /fusiondirectory> - php_admin_flag engine on - php_admin_flag register_globals off - php_admin_flag allow_call_time_pass_reference off - php_admin_flag expose_php off - php_admin_flag zend.ze1_compatibility_mode off - php_admin_flag register_long_arrays off - php_admin_value upload_tmp_dir /var/spool/fusiondirectory/ - php_admin_value session.cookie_lifetime 0 -# Remove the comment from the line below if you use fusiondirectory-setup --encrypt-passwords -# include /etc/fusiondirectory/fusiondirectory.secrets -</Location> -</IfModule> - diff --git a/ldap/data/fusiondirectory/fusiondirectory.conf b/ldap/data/fusiondirectory/fusiondirectory.conf deleted file mode 100644 index b90fcf6..0000000 --- a/ldap/data/fusiondirectory/fusiondirectory.conf +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0"?> -<conf> - <!-- Main section ********************************************************** - The main section defines global settings, which might be overridden by - each location definition inside. - - For more information about the configuration parameters, take a look at - the FusionDirectory.conf(5) manual page. - --> - <main default="default" - logging="TRUE" - displayErrors="FALSE" - forceSSL="FALSE" - templateCompileDirectory="/var/spool/fusiondirectory/" - debugLevel="0" - > - - <!-- Location definition --> - <location name="default" - > - <referral URI="ldap://localhost:389/dc=warpzone,dc=ms" - adminDn="cn=admin,dc=warpzone,dc=ms" - adminPassword="12345" /> - </location> - </main> -</conf> diff --git a/ldap/data/ldap_conf/ldap.conf b/ldap/data/ldap_conf/ldap.conf deleted file mode 100644 index 42d42b0..0000000 --- a/ldap/data/ldap_conf/ldap.conf +++ /dev/null @@ -1,17 +0,0 @@ -# -# LDAP Defaults -# - -# See ldap.conf(5) for details -# This file should be world readable but not world writable. - -#BASE dc=example,dc=com -#URI ldap://ldap.example.com ldap://ldap-master.example.com:666 - -#SIZELIMIT 12 -#TIMELIMIT 15 -#DEREF never - -# TLS certificates (needed for GnuTLS) -TLS_CACERT /etc/ssl/certs/ca-certificates.crt - diff --git a/ldap/data/ldap_conf/schema/README b/ldap/data/ldap_conf/schema/README deleted file mode 100644 index ae88756..0000000 --- a/ldap/data/ldap_conf/schema/README +++ /dev/null @@ -1,80 +0,0 @@ -This directory contains user application schema definitions for use -with slapd(8). - -File Description ----- ----------- -collective.schema Collective attributes (experimental) -corba.schema Corba Object -core.schema OpenLDAP "core" -cosine.schema COSINE Pilot -duaconf.schema Client Configuration (work in progress) -dyngroup.schema Dynamic Group (experimental) -inetorgperson.schema InetOrgPerson -java.schema Java Object -misc.schema Miscellaneous Schema (experimental) -nadf.schema North American Directory Forum (obsolete) -nis.schema Network Information Service (experimental) -openldap.schema OpenLDAP Project (FYI) -ppolicy.schema Password Policy Schema (work in progress) - -Additional "generally useful" schema definitions can be submitted -using the OpenLDAP Issue Tracking System <http://www.openldap.org/its/>. -Submissions should include a stable reference to a mature, open -technical specification (e.g., an RFC) for the schema. - -The core.ldif and openldap.ldif files are equivalent to their -corresponding .schema files. They have been provided as examples -for use with the dynamic configuration backend. These example files -are not actually necessary since slapd will automatically convert any -included *.schema files into LDIF when converting a slapd.conf file -to a configuration database, but they serve as a model of how to -convert schema files in general. - ---- - -This notice applies to all files in this directory. - -Copyright 1998-2014 The OpenLDAP Foundation, Redwood City, California, USA -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted only as authorized by the OpenLDAP -Public License. A copy of this license is available at -http://www.OpenLDAP.org/license.html or in file LICENSE in the -top-level directory of the distribution. - ---- - -This notice applies to all schema in this directory which are derived -from RFCs and other IETF documents. - -Portions Copyright 1991-2004, The Internet Society. All Rights Reserved. - -This document and translations of it may be copied and furnished -to others, and derivative works that comment on or otherwise explain -it or assist in its implementation may be prepared, copied, published -and distributed, in whole or in part, without restriction of any -kind, provided that the above copyright notice and this paragraph -are included on all such copies and derivative works. However, -this document itself may not be modified in any way, such as by -removing the copyright notice or references to the Internet Society -or other Internet organizations, except as needed for the purpose -of developing Internet standards in which case the procedures for -copyrights defined in the Internet Standards process must be -followed, or as required to translate it into languages other than -English. - -The limited permissions granted above are perpetual and will not -be revoked by the Internet Society or its successors or assigns. - -This document and the information contained herein is provided on -an "AS IS" basis and THE AUTHORS, THE INTERNET SOCIETY, AND THE -INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE -OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY -IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. - - ---- -$OpenLDAP$ diff --git a/ldap/data/ldap_conf/schema/collective.ldif b/ldap/data/ldap_conf/schema/collective.ldif deleted file mode 100644 index 34ec3db..0000000 --- a/ldap/data/ldap_conf/schema/collective.ldif +++ /dev/null @@ -1,48 +0,0 @@ -# collective.ldif -- Collective attribute schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -## Portions Copyright (C) The Internet Society (2003). -## Please see full copyright statement below. -# -# From RFC 3671 [portions trimmed]: -# Collective Attributes in LDAP -# -# This file was automatically generated from collective.schema; see that file -# for complete references. -# -dn: cn=collective,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: collective -olcAttributeTypes: {0}( 2.5.4.7.1 NAME 'c-l' SUP l COLLECTIVE ) -olcAttributeTypes: {1}( 2.5.4.8.1 NAME 'c-st' SUP st COLLECTIVE ) -olcAttributeTypes: {2}( 2.5.4.9.1 NAME 'c-street' SUP street COLLECTIVE ) -olcAttributeTypes: {3}( 2.5.4.10.1 NAME 'c-o' SUP o COLLECTIVE ) -olcAttributeTypes: {4}( 2.5.4.11.1 NAME 'c-ou' SUP ou COLLECTIVE ) -olcAttributeTypes: {5}( 2.5.4.16.1 NAME 'c-PostalAddress' SUP postalAddress CO - LLECTIVE ) -olcAttributeTypes: {6}( 2.5.4.17.1 NAME 'c-PostalCode' SUP postalCode COLLECTI - VE ) -olcAttributeTypes: {7}( 2.5.4.18.1 NAME 'c-PostOfficeBox' SUP postOfficeBox CO - LLECTIVE ) -olcAttributeTypes: {8}( 2.5.4.19.1 NAME 'c-PhysicalDeliveryOfficeName' SUP phy - sicalDeliveryOfficeName COLLECTIVE ) -olcAttributeTypes: {9}( 2.5.4.20.1 NAME 'c-TelephoneNumber' SUP telephoneNumbe - r COLLECTIVE ) -olcAttributeTypes: {10}( 2.5.4.21.1 NAME 'c-TelexNumber' SUP telexNumber COLLE - CTIVE ) -olcAttributeTypes: {11}( 2.5.4.23.1 NAME 'c-FacsimileTelephoneNumber' SUP facs - imileTelephoneNumber COLLECTIVE ) -olcAttributeTypes: {12}( 2.5.4.25.1 NAME 'c-InternationalISDNNumber' SUP inter - nationalISDNNumber COLLECTIVE ) diff --git a/ldap/data/ldap_conf/schema/collective.schema b/ldap/data/ldap_conf/schema/collective.schema deleted file mode 100644 index c3dc1a1..0000000 --- a/ldap/data/ldap_conf/schema/collective.schema +++ /dev/null @@ -1,65 +0,0 @@ -# collective.schema -- Collective attribute schema -# $OpenLDAP: pkg/ldap/servers/slapd/schema/collective.schema,v 1.12.2.2 2007/08/31 23:14:06 quanah Exp $ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2007 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF RFC explaining the schema. Unfortunately, -# that text is covered by a license that doesn't meet Debian's Free -# Software Guidelines. This is a stripped version of the schema that -# contains only the functional schema definition, not the text of the -# RFC. -# -# For an explanation of this schema, see RFC 3671, at (among other -# places): http://www.ietf.org/rfc/rfc3671.txt - -attributeType ( 2.5.4.7.1 NAME 'c-l' - SUP l COLLECTIVE ) - -attributeType ( 2.5.4.8.1 NAME 'c-st' - SUP st COLLECTIVE ) - -attributeType ( 2.5.4.9.1 NAME 'c-street' - SUP street COLLECTIVE ) - -attributeType ( 2.5.4.10.1 NAME 'c-o' - SUP o COLLECTIVE ) - -attributeType ( 2.5.4.11.1 NAME 'c-ou' - SUP ou COLLECTIVE ) - -attributeType ( 2.5.4.16.1 NAME 'c-PostalAddress' - SUP postalAddress COLLECTIVE ) - -attributeType ( 2.5.4.17.1 NAME 'c-PostalCode' - SUP postalCode COLLECTIVE ) - -attributeType ( 2.5.4.18.1 NAME 'c-PostOfficeBox' - SUP postOfficeBox COLLECTIVE ) - -attributeType ( 2.5.4.19.1 NAME 'c-PhysicalDeliveryOfficeName' - SUP physicalDeliveryOfficeName COLLECTIVE ) - -attributeType ( 2.5.4.20.1 NAME 'c-TelephoneNumber' - SUP telephoneNumber COLLECTIVE ) - -attributeType ( 2.5.4.21.1 NAME 'c-TelexNumber' - SUP telexNumber COLLECTIVE ) - -attributeType ( 2.5.4.23.1 NAME 'c-FacsimileTelephoneNumber' - SUP facsimileTelephoneNumber COLLECTIVE ) - -attributeType ( 2.5.4.25.1 NAME 'c-InternationalISDNNumber' - SUP internationalISDNNumber COLLECTIVE ) - diff --git a/ldap/data/ldap_conf/schema/corba.ldif b/ldap/data/ldap_conf/schema/corba.ldif deleted file mode 100644 index d5b4e07..0000000 --- a/ldap/data/ldap_conf/schema/corba.ldif +++ /dev/null @@ -1,42 +0,0 @@ -# corba.ldif -- Corba Object Schema -# depends upon core.ldif -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -## Portions Copyright (C) The Internet Society (1999). -## Please see full copyright statement below. -# -# From RFC 2714 [portions trimmed]: -# Schema for Representing CORBA Object References in an LDAP Directory -# -# This file was automatically generated from corba.schema; see that file -# for complete references. -# -dn: cn=corba,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: corba -olcAttributeTypes: {0}( 1.3.6.1.4.1.42.2.27.4.1.14 NAME 'corbaIor' DESC 'Strin - gified interoperable object reference of a CORBA object' EQUALITY caseIgnoreI - A5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: {1}( 1.3.6.1.4.1.42.2.27.4.1.15 NAME 'corbaRepositoryId' DE - SC 'Repository ids of interfaces implemented by a CORBA object' EQUALITY case - ExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcObjectClasses: {0}( 1.3.6.1.4.1.42.2.27.4.2.10 NAME 'corbaContainer' DESC ' - Container for a CORBA object' SUP top STRUCTURAL MUST cn ) -olcObjectClasses: {1}( 1.3.6.1.4.1.42.2.27.4.2.9 NAME 'corbaObject' DESC 'CORB - A object representation' SUP top ABSTRACT MAY ( corbaRepositoryId $ descripti - on ) ) -olcObjectClasses: {2}( 1.3.6.1.4.1.42.2.27.4.2.11 NAME 'corbaObjectReference' - DESC 'CORBA interoperable object reference' SUP corbaObject AUXILIARY MUST co - rbaIor ) diff --git a/ldap/data/ldap_conf/schema/corba.schema b/ldap/data/ldap_conf/schema/corba.schema deleted file mode 100644 index 918e9df..0000000 --- a/ldap/data/ldap_conf/schema/corba.schema +++ /dev/null @@ -1,61 +0,0 @@ -# corba.schema -- Corba Object Schema -# depends upon core.schema -# $OpenLDAP: pkg/ldap/servers/slapd/schema/corba.schema,v 1.4.2.3 2007/01/02 21:44:09 kurt Exp $ -# $OpenLDAP: pkg/ldap/servers/slapd/schema/corba.schema,v 1.4.2.3 2007/01/02 21:44:09 kurt Exp $ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2007 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF RFC explaining the schema. Unfortunately, -# that text is covered by a license that doesn't meet Debian's Free -# Software Guidelines. This is a stripped version of the schema that -# contains only the functional schema definition, not the text of the -# RFC. -# -# For an explanation of this schema, see RFC 2714, at (among other -# places): http://www.ietf.org/rfc/rfc2714.txt - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.14 - NAME 'corbaIor' - DESC 'Stringified interoperable object reference of a CORBA object' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.15 - NAME 'corbaRepositoryId' - DESC 'Repository ids of interfaces implemented by a CORBA object' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.10 - NAME 'corbaContainer' - DESC 'Container for a CORBA object' - SUP top - STRUCTURAL - MUST cn ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.9 - NAME 'corbaObject' - DESC 'CORBA object representation' - SUP top - ABSTRACT - MAY ( corbaRepositoryId $ description ) ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.11 - NAME 'corbaObjectReference' - DESC 'CORBA interoperable object reference' - SUP corbaObject - AUXILIARY - MUST corbaIor ) diff --git a/ldap/data/ldap_conf/schema/core.ldif b/ldap/data/ldap_conf/schema/core.ldif deleted file mode 100644 index cc1811f..0000000 --- a/ldap/data/ldap_conf/schema/core.ldif +++ /dev/null @@ -1,603 +0,0 @@ -# OpenLDAP Core schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text claiming copyright by the Internet Society and including -# the IETF RFC license, which does not meet Debian's Free Software -# Guidelines. However, apart from short and obvious comments, the text of -# this file is purely a functional interface specification, which is not -# subject to that license and is not copyrightable under US law. -# -# The license statement is retained below so as not to remove credit, but -# as best as we can determine, it is not applicable to the contents of -# this file. - -## Portions Copyright (C) The Internet Society (1997-2003). -## All Rights Reserved. -## -## This document and translations of it may be copied and furnished to -## others, and derivative works that comment on or otherwise explain it -## or assist in its implementation may be prepared, copied, published -## and distributed, in whole or in part, without restriction of any -## kind, provided that the above copyright notice and this paragraph are -## included on all such copies and derivative works. However, this -## document itself may not be modified in any way, such as by removing -## the copyright notice or references to the Internet Society or other -## Internet organizations, except as needed for the purpose of -## developing Internet standards in which case the procedures for -## copyrights defined in the Internet Standards process must be -## followed, or as required to translate it into languages other than -## English. -## -## The limited permissions granted above are perpetual and will not be -## revoked by the Internet Society or its successors or assigns. -## -## This document and the information contained herein is provided on an -## "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING -## TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING -## BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION -## HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF -## MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. -# -# -# -# Includes LDAPv3 schema items from: -# RFC 2252/2256 (LDAPv3) -# -# Select standard track schema items: -# RFC 1274 (uid/dc) -# RFC 2079 (URI) -# RFC 2247 (dc/dcObject) -# RFC 2587 (PKI) -# RFC 2589 (Dynamic Directory Services) -# -# Select informational schema items: -# RFC 2377 (uidObject) -# -# -# Standard attribute types from RFC 2256 -# -dn: cn=core,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: core -# -# system schema -#olcAttributeTypes: ( 2.5.4.0 NAME 'objectClass' -# DESC 'RFC2256: object classes of the entity' -# EQUALITY objectIdentifierMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) -# -# system schema -#olcAttributeTypes: ( 2.5.4.1 NAME ( 'aliasedObjectName' 'aliasedEntryName' ) -# DESC 'RFC2256: name of aliased object' -# EQUALITY distinguishedNameMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE ) -# -olcAttributeTypes: ( 2.5.4.2 NAME 'knowledgeInformation' - DESC 'RFC2256: knowledge information' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) -# -# system schema -#olcAttributeTypes: ( 2.5.4.3 NAME ( 'cn' 'commonName' ) -# DESC 'RFC2256: common name(s) for which the entity is known by' -# SUP name ) -# -olcAttributeTypes: ( 2.5.4.4 NAME ( 'sn' 'surname' ) - DESC 'RFC2256: last (family) name(s) for which the entity is known by' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.5 NAME 'serialNumber' - DESC 'RFC2256: serial number of the entity' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} ) -# -# RFC 4519 definition ('countryName' in X.500 and RFC2256) -olcAttributeTypes: ( 2.5.4.6 NAME ( 'c' 'countryName' ) - DESC 'RFC4519: two-letter ISO-3166 country code' - SUP name - SYNTAX 1.3.6.1.4.1.1466.115.121.1.11 - SINGLE-VALUE ) -# -olcAttributeTypes: ( 2.5.4.7 NAME ( 'l' 'localityName' ) - DESC 'RFC2256: locality which this object resides in' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.8 NAME ( 'st' 'stateOrProvinceName' ) - DESC 'RFC2256: state or province which this object resides in' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.9 NAME ( 'street' 'streetAddress' ) - DESC 'RFC2256: street address of this object' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) -# -olcAttributeTypes: ( 2.5.4.10 NAME ( 'o' 'organizationName' ) - DESC 'RFC2256: organization this object belongs to' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.11 NAME ( 'ou' 'organizationalUnitName' ) - DESC 'RFC2256: organizational unit this object belongs to' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.12 NAME 'title' - DESC 'RFC2256: title associated with the entity' - SUP name ) -# -# system schema -#olcAttributeTypes: ( 2.5.4.13 NAME 'description' -# DESC 'RFC2256: descriptive information' -# EQUALITY caseIgnoreMatch -# SUBSTR caseIgnoreSubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) -# -# Deprecated by enhancedSearchGuide -olcAttributeTypes: ( 2.5.4.14 NAME 'searchGuide' - DESC 'RFC2256: search guide, deprecated by enhancedSearchGuide' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.25 ) -# -olcAttributeTypes: ( 2.5.4.15 NAME 'businessCategory' - DESC 'RFC2256: business category' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) -# -olcAttributeTypes: ( 2.5.4.16 NAME 'postalAddress' - DESC 'RFC2256: postal address' - EQUALITY caseIgnoreListMatch - SUBSTR caseIgnoreListSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) -# -olcAttributeTypes: ( 2.5.4.17 NAME 'postalCode' - DESC 'RFC2256: postal code' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} ) -# -olcAttributeTypes: ( 2.5.4.18 NAME 'postOfficeBox' - DESC 'RFC2256: Post Office Box' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} ) -# -olcAttributeTypes: ( 2.5.4.19 NAME 'physicalDeliveryOfficeName' - DESC 'RFC2256: Physical Delivery Office Name' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) -# -olcAttributeTypes: ( 2.5.4.20 NAME 'telephoneNumber' - DESC 'RFC2256: Telephone Number' - EQUALITY telephoneNumberMatch - SUBSTR telephoneNumberSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} ) -# -olcAttributeTypes: ( 2.5.4.21 NAME 'telexNumber' - DESC 'RFC2256: Telex Number' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.52 ) -# -olcAttributeTypes: ( 2.5.4.22 NAME 'teletexTerminalIdentifier' - DESC 'RFC2256: Teletex Terminal Identifier' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.51 ) -# -olcAttributeTypes: ( 2.5.4.23 NAME ( 'facsimileTelephoneNumber' 'fax' ) - DESC 'RFC2256: Facsimile (Fax) Telephone Number' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 ) -# -olcAttributeTypes: ( 2.5.4.24 NAME 'x121Address' - DESC 'RFC2256: X.121 Address' - EQUALITY numericStringMatch - SUBSTR numericStringSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{15} ) -# -olcAttributeTypes: ( 2.5.4.25 NAME 'internationaliSDNNumber' - DESC 'RFC2256: international ISDN number' - EQUALITY numericStringMatch - SUBSTR numericStringSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{16} ) -# -olcAttributeTypes: ( 2.5.4.26 NAME 'registeredAddress' - DESC 'RFC2256: registered postal address' - SUP postalAddress - SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) -# -olcAttributeTypes: ( 2.5.4.27 NAME 'destinationIndicator' - DESC 'RFC2256: destination indicator' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{128} ) -# -olcAttributeTypes: ( 2.5.4.28 NAME 'preferredDeliveryMethod' - DESC 'RFC2256: preferred delivery method' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.14 - SINGLE-VALUE ) -# -olcAttributeTypes: ( 2.5.4.29 NAME 'presentationAddress' - DESC 'RFC2256: presentation address' - EQUALITY presentationAddressMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.43 - SINGLE-VALUE ) -# -olcAttributeTypes: ( 2.5.4.30 NAME 'supportedApplicationContext' - DESC 'RFC2256: supported application context' - EQUALITY objectIdentifierMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) -# -olcAttributeTypes: ( 2.5.4.31 NAME 'member' - DESC 'RFC2256: member of a group' - SUP distinguishedName ) -# -olcAttributeTypes: ( 2.5.4.32 NAME 'owner' - DESC 'RFC2256: owner (of the object)' - SUP distinguishedName ) -# -olcAttributeTypes: ( 2.5.4.33 NAME 'roleOccupant' - DESC 'RFC2256: occupant of role' - SUP distinguishedName ) -# -# system schema -#olcAttributeTypes: ( 2.5.4.34 NAME 'seeAlso' -# DESC 'RFC2256: DN of related object' -# SUP distinguishedName ) -# -# system schema -#olcAttributeTypes: ( 2.5.4.35 NAME 'userPassword' -# DESC 'RFC2256/2307: password of user' -# EQUALITY octetStringMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} ) -# -# Must be transferred using ;binary -# with certificateExactMatch rule (per X.509) -olcAttributeTypes: ( 2.5.4.36 NAME 'userCertificate' - DESC 'RFC2256: X.509 user certificate, use ;binary' - EQUALITY certificateExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 ) -# -# Must be transferred using ;binary -# with certificateExactMatch rule (per X.509) -olcAttributeTypes: ( 2.5.4.37 NAME 'cACertificate' - DESC 'RFC2256: X.509 CA certificate, use ;binary' - EQUALITY certificateExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 ) -# -# Must be transferred using ;binary -olcAttributeTypes: ( 2.5.4.38 NAME 'authorityRevocationList' - DESC 'RFC2256: X.509 authority revocation list, use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) -# -# Must be transferred using ;binary -olcAttributeTypes: ( 2.5.4.39 NAME 'certificateRevocationList' - DESC 'RFC2256: X.509 certificate revocation list, use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) -# -# Must be stored and requested in the binary form -olcAttributeTypes: ( 2.5.4.40 NAME 'crossCertificatePair' - DESC 'RFC2256: X.509 cross certificate pair, use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.10 ) -# -# 2.5.4.41 is defined above as it's used for subtyping -#olcAttributeTypes: ( 2.5.4.41 NAME 'name' -# EQUALITY caseIgnoreMatch -# SUBSTR caseIgnoreSubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) -# -olcAttributeTypes: ( 2.5.4.42 NAME ( 'givenName' 'gn' ) - DESC 'RFC2256: first name(s) for which the entity is known by' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.43 NAME 'initials' - DESC 'RFC2256: initials of some or all of names, but not the surname(s).' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.44 NAME 'generationQualifier' - DESC 'RFC2256: name qualifier indicating a generation' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.45 NAME 'x500UniqueIdentifier' - DESC 'RFC2256: X.500 unique identifier' - EQUALITY bitStringMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.6 ) -# -olcAttributeTypes: ( 2.5.4.46 NAME 'dnQualifier' - DESC 'RFC2256: DN qualifier' - EQUALITY caseIgnoreMatch - ORDERING caseIgnoreOrderingMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 ) -# -olcAttributeTypes: ( 2.5.4.47 NAME 'enhancedSearchGuide' - DESC 'RFC2256: enhanced search guide' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.21 ) -# -olcAttributeTypes: ( 2.5.4.48 NAME 'protocolInformation' - DESC 'RFC2256: protocol information' - EQUALITY protocolInformationMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.42 ) -# -# 2.5.4.49 is defined above as it's used for subtyping -#olcAttributeTypes: ( 2.5.4.49 NAME 'distinguishedName' -# EQUALITY distinguishedNameMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) -# -olcAttributeTypes: ( 2.5.4.50 NAME 'uniqueMember' - DESC 'RFC2256: unique member of a group' - EQUALITY uniqueMemberMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.34 ) -# -olcAttributeTypes: ( 2.5.4.51 NAME 'houseIdentifier' - DESC 'RFC2256: house identifier' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) -# -# Must be transferred using ;binary -olcAttributeTypes: ( 2.5.4.52 NAME 'supportedAlgorithms' - DESC 'RFC2256: supported algorithms' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.49 ) -# -# Must be transferred using ;binary -olcAttributeTypes: ( 2.5.4.53 NAME 'deltaRevocationList' - DESC 'RFC2256: delta revocation list; use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) -# -olcAttributeTypes: ( 2.5.4.54 NAME 'dmdName' - DESC 'RFC2256: name of DMD' - SUP name ) -# -olcAttributeTypes: ( 2.5.4.65 NAME 'pseudonym' - DESC 'X.520(4th): pseudonym for the object' - SUP name ) -# -# Standard object classes from RFC2256 -# -# system schema -#olcObjectClasses: ( 2.5.6.1 NAME 'alias' -# DESC 'RFC2256: an alias' -# SUP top STRUCTURAL -# MUST aliasedObjectName ) -# -olcObjectClasses: ( 2.5.6.2 NAME 'country' - DESC 'RFC2256: a country' - SUP top STRUCTURAL - MUST c - MAY ( searchGuide $ description ) ) -# -olcObjectClasses: ( 2.5.6.3 NAME 'locality' - DESC 'RFC2256: a locality' - SUP top STRUCTURAL - MAY ( street $ seeAlso $ searchGuide $ st $ l $ description ) ) -# -olcObjectClasses: ( 2.5.6.4 NAME 'organization' - DESC 'RFC2256: an organization' - SUP top STRUCTURAL - MUST o - MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ - x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ - postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) ) -# -olcObjectClasses: ( 2.5.6.5 NAME 'organizationalUnit' - DESC 'RFC2256: an organizational unit' - SUP top STRUCTURAL - MUST ou - MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ - x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ - postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) ) -# -olcObjectClasses: ( 2.5.6.6 NAME 'person' - DESC 'RFC2256: a person' - SUP top STRUCTURAL - MUST ( sn $ cn ) - MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) ) -# -olcObjectClasses: ( 2.5.6.7 NAME 'organizationalPerson' - DESC 'RFC2256: an organizational person' - SUP person STRUCTURAL - MAY ( title $ x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ - postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l ) ) -# -olcObjectClasses: ( 2.5.6.8 NAME 'organizationalRole' - DESC 'RFC2256: an organizational role' - SUP top STRUCTURAL - MUST cn - MAY ( x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ - seeAlso $ roleOccupant $ preferredDeliveryMethod $ street $ - postOfficeBox $ postalCode $ postalAddress $ - physicalDeliveryOfficeName $ ou $ st $ l $ description ) ) -# -olcObjectClasses: ( 2.5.6.9 NAME 'groupOfNames' - DESC 'RFC2256: a group of names (DNs)' - SUP top STRUCTURAL - MUST ( member $ cn ) - MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) ) -# -olcObjectClasses: ( 2.5.6.10 NAME 'residentialPerson' - DESC 'RFC2256: an residential person' - SUP person STRUCTURAL - MUST l - MAY ( businessCategory $ x121Address $ registeredAddress $ - destinationIndicator $ preferredDeliveryMethod $ telexNumber $ - teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ preferredDeliveryMethod $ street $ - postOfficeBox $ postalCode $ postalAddress $ - physicalDeliveryOfficeName $ st $ l ) ) -# -olcObjectClasses: ( 2.5.6.11 NAME 'applicationProcess' - DESC 'RFC2256: an application process' - SUP top STRUCTURAL - MUST cn - MAY ( seeAlso $ ou $ l $ description ) ) -# -olcObjectClasses: ( 2.5.6.12 NAME 'applicationEntity' - DESC 'RFC2256: an application entity' - SUP top STRUCTURAL - MUST ( presentationAddress $ cn ) - MAY ( supportedApplicationContext $ seeAlso $ ou $ o $ l $ - description ) ) -# -olcObjectClasses: ( 2.5.6.13 NAME 'dSA' - DESC 'RFC2256: a directory system agent (a server)' - SUP applicationEntity STRUCTURAL - MAY knowledgeInformation ) -# -olcObjectClasses: ( 2.5.6.14 NAME 'device' - DESC 'RFC2256: a device' - SUP top STRUCTURAL - MUST cn - MAY ( serialNumber $ seeAlso $ owner $ ou $ o $ l $ description ) ) -# -olcObjectClasses: ( 2.5.6.15 NAME 'strongAuthenticationUser' - DESC 'RFC2256: a strong authentication user' - SUP top AUXILIARY - MUST userCertificate ) -# -olcObjectClasses: ( 2.5.6.16 NAME 'certificationAuthority' - DESC 'RFC2256: a certificate authority' - SUP top AUXILIARY - MUST ( authorityRevocationList $ certificateRevocationList $ - cACertificate ) MAY crossCertificatePair ) -# -olcObjectClasses: ( 2.5.6.17 NAME 'groupOfUniqueNames' - DESC 'RFC2256: a group of unique names (DN and Unique Identifier)' - SUP top STRUCTURAL - MUST ( uniqueMember $ cn ) - MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) ) -# -olcObjectClasses: ( 2.5.6.18 NAME 'userSecurityInformation' - DESC 'RFC2256: a user security information' - SUP top AUXILIARY - MAY ( supportedAlgorithms ) ) -# -olcObjectClasses: ( 2.5.6.16.2 NAME 'certificationAuthority-V2' - SUP certificationAuthority - AUXILIARY MAY ( deltaRevocationList ) ) -# -olcObjectClasses: ( 2.5.6.19 NAME 'cRLDistributionPoint' - SUP top STRUCTURAL - MUST ( cn ) - MAY ( certificateRevocationList $ authorityRevocationList $ - deltaRevocationList ) ) -# -olcObjectClasses: ( 2.5.6.20 NAME 'dmd' - SUP top STRUCTURAL - MUST ( dmdName ) - MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ - x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ - street $ postOfficeBox $ postalCode $ postalAddress $ - physicalDeliveryOfficeName $ st $ l $ description ) ) -# -# -# Object Classes from RFC 2587 -# -olcObjectClasses: ( 2.5.6.21 NAME 'pkiUser' - DESC 'RFC2587: a PKI user' - SUP top AUXILIARY - MAY userCertificate ) -# -olcObjectClasses: ( 2.5.6.22 NAME 'pkiCA' - DESC 'RFC2587: PKI certificate authority' - SUP top AUXILIARY - MAY ( authorityRevocationList $ certificateRevocationList $ - cACertificate $ crossCertificatePair ) ) -# -olcObjectClasses: ( 2.5.6.23 NAME 'deltaCRL' - DESC 'RFC2587: PKI user' - SUP top AUXILIARY - MAY deltaRevocationList ) -# -# -# Standard Track URI label schema from RFC 2079 -# system schema -#olcAttributeTypes: ( 1.3.6.1.4.1.250.1.57 NAME 'labeledURI' -# DESC 'RFC2079: Uniform Resource Identifier with optional label' -# EQUALITY caseExactMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -# -olcObjectClasses: ( 1.3.6.1.4.1.250.3.15 NAME 'labeledURIObject' - DESC 'RFC2079: object that contains the URI attribute type' - MAY ( labeledURI ) - SUP top AUXILIARY ) -# -# -# Derived from RFC 1274, but with new "short names" -# -#olcAttributeTypes: ( 0.9.2342.19200300.100.1.1 -# NAME ( 'uid' 'userid' ) -# DESC 'RFC1274: user identifier' -# EQUALITY caseIgnoreMatch -# SUBSTR caseIgnoreSubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -# -olcAttributeTypes: ( 0.9.2342.19200300.100.1.3 - NAME ( 'mail' 'rfc822Mailbox' ) - DESC 'RFC1274: RFC822 Mailbox' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) -# -olcObjectClasses: ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject' - DESC 'RFC1274: simple security object' - SUP top AUXILIARY - MUST userPassword ) -# -# RFC 1274 + RFC 2247 -olcAttributeTypes: ( 0.9.2342.19200300.100.1.25 - NAME ( 'dc' 'domainComponent' ) - DESC 'RFC1274/2247: domain component' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -# -# RFC 2247 -olcObjectClasses: ( 1.3.6.1.4.1.1466.344 NAME 'dcObject' - DESC 'RFC2247: domain component object' - SUP top AUXILIARY MUST dc ) -# -# RFC 2377 -olcObjectClasses: ( 1.3.6.1.1.3.1 NAME 'uidObject' - DESC 'RFC2377: uid object' - SUP top AUXILIARY MUST uid ) -# -# From COSINE Pilot -olcAttributeTypes: ( 0.9.2342.19200300.100.1.37 - NAME 'associatedDomain' - DESC 'RFC1274: domain associated with object' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -# -# RFC 2459 -- deprecated in favor of 'mail' (in cosine.schema) -olcAttributeTypes: ( 1.2.840.113549.1.9.1 - NAME ( 'email' 'emailAddress' 'pkcs9email' ) - DESC 'RFC3280: legacy attribute for email addresses in DNs' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) -# diff --git a/ldap/data/ldap_conf/schema/core.schema b/ldap/data/ldap_conf/schema/core.schema deleted file mode 100644 index cf0968a..0000000 --- a/ldap/data/ldap_conf/schema/core.schema +++ /dev/null @@ -1,622 +0,0 @@ -# OpenLDAP Core schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text claiming copyright by the Internet Society and including -# the IETF RFC license, which does not meet Debian's Free Software -# Guidelines. However, apart from short and obvious comments, the text of -# this file is purely a functional interface specification, which is not -# subject to that license and is not copyrightable under US law. -# -# The license statement is retained below so as not to remove credit, but -# as best as we can determine, it is not applicable to the contents of -# this file. - -## Portions Copyright (C) The Internet Society (1997-2006). -## All Rights Reserved. -## -## This document and translations of it may be copied and furnished to -## others, and derivative works that comment on or otherwise explain it -## or assist in its implementation may be prepared, copied, published -## and distributed, in whole or in part, without restriction of any -## kind, provided that the above copyright notice and this paragraph are -## included on all such copies and derivative works. However, this -## document itself may not be modified in any way, such as by removing -## the copyright notice or references to the Internet Society or other -## Internet organizations, except as needed for the purpose of -## developing Internet standards in which case the procedures for -## copyrights defined in the Internet Standards process must be -## followed, or as required to translate it into languages other than -## English. -## -## The limited permissions granted above are perpetual and will not be -## revoked by the Internet Society or its successors or assigns. -## -## This document and the information contained herein is provided on an -## "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING -## TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING -## BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION -## HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF -## MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -# -# -# Includes LDAPv3 schema items from: -# RFC 2252/2256 (LDAPv3) -# -# Select standard track schema items: -# RFC 1274 (uid/dc) -# RFC 2079 (URI) -# RFC 2247 (dc/dcObject) -# RFC 2587 (PKI) -# RFC 2589 (Dynamic Directory Services) -# RFC 4524 (associatedDomain) -# -# Select informational schema items: -# RFC 2377 (uidObject) - -# -# Standard attribute types from RFC 2256 -# - -# system schema -#attributetype ( 2.5.4.0 NAME 'objectClass' -# DESC 'RFC2256: object classes of the entity' -# EQUALITY objectIdentifierMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) - -# system schema -#attributetype ( 2.5.4.1 NAME ( 'aliasedObjectName' 'aliasedEntryName' ) -# DESC 'RFC2256: name of aliased object' -# EQUALITY distinguishedNameMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE ) - -attributetype ( 2.5.4.2 NAME 'knowledgeInformation' - DESC 'RFC2256: knowledge information' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) - -# system schema -#attributetype ( 2.5.4.3 NAME ( 'cn' 'commonName' ) -# DESC 'RFC2256: common name(s) for which the entity is known by' -# SUP name ) - -attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' ) - DESC 'RFC2256: last (family) name(s) for which the entity is known by' - SUP name ) - -attributetype ( 2.5.4.5 NAME 'serialNumber' - DESC 'RFC2256: serial number of the entity' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} ) - -# RFC 4519 definition ('countryName' in X.500 and RFC2256) -attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' ) - DESC 'RFC4519: two-letter ISO-3166 country code' - SUP name - SYNTAX 1.3.6.1.4.1.1466.115.121.1.11 - SINGLE-VALUE ) - -#attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' ) -# DESC 'RFC2256: ISO-3166 country 2-letter code' -# SUP name SINGLE-VALUE ) - -attributetype ( 2.5.4.7 NAME ( 'l' 'localityName' ) - DESC 'RFC2256: locality which this object resides in' - SUP name ) - -attributetype ( 2.5.4.8 NAME ( 'st' 'stateOrProvinceName' ) - DESC 'RFC2256: state or province which this object resides in' - SUP name ) - -attributetype ( 2.5.4.9 NAME ( 'street' 'streetAddress' ) - DESC 'RFC2256: street address of this object' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) - -attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' ) - DESC 'RFC2256: organization this object belongs to' - SUP name ) - -attributetype ( 2.5.4.11 NAME ( 'ou' 'organizationalUnitName' ) - DESC 'RFC2256: organizational unit this object belongs to' - SUP name ) - -attributetype ( 2.5.4.12 NAME 'title' - DESC 'RFC2256: title associated with the entity' - SUP name ) - -# system schema -#attributetype ( 2.5.4.13 NAME 'description' -# DESC 'RFC2256: descriptive information' -# EQUALITY caseIgnoreMatch -# SUBSTR caseIgnoreSubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) - -# Deprecated by enhancedSearchGuide -attributetype ( 2.5.4.14 NAME 'searchGuide' - DESC 'RFC2256: search guide, deprecated by enhancedSearchGuide' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.25 ) - -attributetype ( 2.5.4.15 NAME 'businessCategory' - DESC 'RFC2256: business category' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) - -attributetype ( 2.5.4.16 NAME 'postalAddress' - DESC 'RFC2256: postal address' - EQUALITY caseIgnoreListMatch - SUBSTR caseIgnoreListSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) - -attributetype ( 2.5.4.17 NAME 'postalCode' - DESC 'RFC2256: postal code' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} ) - -attributetype ( 2.5.4.18 NAME 'postOfficeBox' - DESC 'RFC2256: Post Office Box' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} ) - -attributetype ( 2.5.4.19 NAME 'physicalDeliveryOfficeName' - DESC 'RFC2256: Physical Delivery Office Name' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) - -attributetype ( 2.5.4.20 NAME 'telephoneNumber' - DESC 'RFC2256: Telephone Number' - EQUALITY telephoneNumberMatch - SUBSTR telephoneNumberSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} ) - -attributetype ( 2.5.4.21 NAME 'telexNumber' - DESC 'RFC2256: Telex Number' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.52 ) - -attributetype ( 2.5.4.22 NAME 'teletexTerminalIdentifier' - DESC 'RFC2256: Teletex Terminal Identifier' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.51 ) - -attributetype ( 2.5.4.23 NAME ( 'facsimileTelephoneNumber' 'fax' ) - DESC 'RFC2256: Facsimile (Fax) Telephone Number' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.22 ) - -attributetype ( 2.5.4.24 NAME 'x121Address' - DESC 'RFC2256: X.121 Address' - EQUALITY numericStringMatch - SUBSTR numericStringSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{15} ) - -attributetype ( 2.5.4.25 NAME 'internationaliSDNNumber' - DESC 'RFC2256: international ISDN number' - EQUALITY numericStringMatch - SUBSTR numericStringSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{16} ) - -attributetype ( 2.5.4.26 NAME 'registeredAddress' - DESC 'RFC2256: registered postal address' - SUP postalAddress - SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) - -attributetype ( 2.5.4.27 NAME 'destinationIndicator' - DESC 'RFC2256: destination indicator' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{128} ) - -attributetype ( 2.5.4.28 NAME 'preferredDeliveryMethod' - DESC 'RFC2256: preferred delivery method' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.14 - SINGLE-VALUE ) - -attributetype ( 2.5.4.29 NAME 'presentationAddress' - DESC 'RFC2256: presentation address' - EQUALITY presentationAddressMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.43 - SINGLE-VALUE ) - -attributetype ( 2.5.4.30 NAME 'supportedApplicationContext' - DESC 'RFC2256: supported application context' - EQUALITY objectIdentifierMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) - -attributetype ( 2.5.4.31 NAME 'member' - DESC 'RFC2256: member of a group' - SUP distinguishedName ) - -attributetype ( 2.5.4.32 NAME 'owner' - DESC 'RFC2256: owner (of the object)' - SUP distinguishedName ) - -attributetype ( 2.5.4.33 NAME 'roleOccupant' - DESC 'RFC2256: occupant of role' - SUP distinguishedName ) - -# system schema -#attributetype ( 2.5.4.34 NAME 'seeAlso' -# DESC 'RFC2256: DN of related object' -# SUP distinguishedName ) - -# system schema -#attributetype ( 2.5.4.35 NAME 'userPassword' -# DESC 'RFC2256/2307: password of user' -# EQUALITY octetStringMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} ) - -# Must be transferred using ;binary -# with certificateExactMatch rule (per X.509) -attributetype ( 2.5.4.36 NAME 'userCertificate' - DESC 'RFC2256: X.509 user certificate, use ;binary' - EQUALITY certificateExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 ) - -# Must be transferred using ;binary -# with certificateExactMatch rule (per X.509) -attributetype ( 2.5.4.37 NAME 'cACertificate' - DESC 'RFC2256: X.509 CA certificate, use ;binary' - EQUALITY certificateExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 ) - -# Must be transferred using ;binary -attributetype ( 2.5.4.38 NAME 'authorityRevocationList' - DESC 'RFC2256: X.509 authority revocation list, use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) - -# Must be transferred using ;binary -attributetype ( 2.5.4.39 NAME 'certificateRevocationList' - DESC 'RFC2256: X.509 certificate revocation list, use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) - -# Must be stored and requested in the binary form -attributetype ( 2.5.4.40 NAME 'crossCertificatePair' - DESC 'RFC2256: X.509 cross certificate pair, use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.10 ) - -# system schema -#attributetype ( 2.5.4.41 NAME 'name' -# EQUALITY caseIgnoreMatch -# SUBSTR caseIgnoreSubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) - -attributetype ( 2.5.4.42 NAME ( 'givenName' 'gn' ) - DESC 'RFC2256: first name(s) for which the entity is known by' - SUP name ) - -attributetype ( 2.5.4.43 NAME 'initials' - DESC 'RFC2256: initials of some or all of names, but not the surname(s).' - SUP name ) - -attributetype ( 2.5.4.44 NAME 'generationQualifier' - DESC 'RFC2256: name qualifier indicating a generation' - SUP name ) - -attributetype ( 2.5.4.45 NAME 'x500UniqueIdentifier' - DESC 'RFC2256: X.500 unique identifier' - EQUALITY bitStringMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.6 ) - -attributetype ( 2.5.4.46 NAME 'dnQualifier' - DESC 'RFC2256: DN qualifier' - EQUALITY caseIgnoreMatch - ORDERING caseIgnoreOrderingMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 ) - -attributetype ( 2.5.4.47 NAME 'enhancedSearchGuide' - DESC 'RFC2256: enhanced search guide' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.21 ) - -attributetype ( 2.5.4.48 NAME 'protocolInformation' - DESC 'RFC2256: protocol information' - EQUALITY protocolInformationMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.42 ) - -# system schema -#attributetype ( 2.5.4.49 NAME 'distinguishedName' -# EQUALITY distinguishedNameMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype ( 2.5.4.50 NAME 'uniqueMember' - DESC 'RFC2256: unique member of a group' - EQUALITY uniqueMemberMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.34 ) - -attributetype ( 2.5.4.51 NAME 'houseIdentifier' - DESC 'RFC2256: house identifier' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) - -# Must be transferred using ;binary -attributetype ( 2.5.4.52 NAME 'supportedAlgorithms' - DESC 'RFC2256: supported algorithms' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.49 ) - -# Must be transferred using ;binary -attributetype ( 2.5.4.53 NAME 'deltaRevocationList' - DESC 'RFC2256: delta revocation list; use ;binary' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) - -attributetype ( 2.5.4.54 NAME 'dmdName' - DESC 'RFC2256: name of DMD' - SUP name ) - -attributetype ( 2.5.4.65 NAME 'pseudonym' - DESC 'X.520(4th): pseudonym for the object' - SUP name ) - -# Standard object classes from RFC2256 - -# system schema -#objectclass ( 2.5.6.0 NAME 'top' -# DESC 'RFC2256: top of the superclass chain' -# ABSTRACT -# MUST objectClass ) - -# system schema -#objectclass ( 2.5.6.1 NAME 'alias' -# DESC 'RFC2256: an alias' -# SUP top STRUCTURAL -# MUST aliasedObjectName ) - -objectclass ( 2.5.6.2 NAME 'country' - DESC 'RFC2256: a country' - SUP top STRUCTURAL - MUST c - MAY ( searchGuide $ description ) ) - -objectclass ( 2.5.6.3 NAME 'locality' - DESC 'RFC2256: a locality' - SUP top STRUCTURAL - MAY ( street $ seeAlso $ searchGuide $ st $ l $ description ) ) - -objectclass ( 2.5.6.4 NAME 'organization' - DESC 'RFC2256: an organization' - SUP top STRUCTURAL - MUST o - MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ - x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ - postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) ) - -objectclass ( 2.5.6.5 NAME 'organizationalUnit' - DESC 'RFC2256: an organizational unit' - SUP top STRUCTURAL - MUST ou - MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ - x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ - postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) ) - -objectclass ( 2.5.6.6 NAME 'person' - DESC 'RFC2256: a person' - SUP top STRUCTURAL - MUST ( sn $ cn ) - MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) ) - -objectclass ( 2.5.6.7 NAME 'organizationalPerson' - DESC 'RFC2256: an organizational person' - SUP person STRUCTURAL - MAY ( title $ x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ - postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l ) ) - -objectclass ( 2.5.6.8 NAME 'organizationalRole' - DESC 'RFC2256: an organizational role' - SUP top STRUCTURAL - MUST cn - MAY ( x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ - seeAlso $ roleOccupant $ preferredDeliveryMethod $ street $ - postOfficeBox $ postalCode $ postalAddress $ - physicalDeliveryOfficeName $ ou $ st $ l $ description ) ) - -objectclass ( 2.5.6.9 NAME 'groupOfNames' - DESC 'RFC2256: a group of names (DNs)' - SUP top STRUCTURAL - MUST ( member $ cn ) - MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) ) - -objectclass ( 2.5.6.10 NAME 'residentialPerson' - DESC 'RFC2256: an residential person' - SUP person STRUCTURAL - MUST l - MAY ( businessCategory $ x121Address $ registeredAddress $ - destinationIndicator $ preferredDeliveryMethod $ telexNumber $ - teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ - facsimileTelephoneNumber $ preferredDeliveryMethod $ street $ - postOfficeBox $ postalCode $ postalAddress $ - physicalDeliveryOfficeName $ st $ l ) ) - -objectclass ( 2.5.6.11 NAME 'applicationProcess' - DESC 'RFC2256: an application process' - SUP top STRUCTURAL - MUST cn - MAY ( seeAlso $ ou $ l $ description ) ) - -objectclass ( 2.5.6.12 NAME 'applicationEntity' - DESC 'RFC2256: an application entity' - SUP top STRUCTURAL - MUST ( presentationAddress $ cn ) - MAY ( supportedApplicationContext $ seeAlso $ ou $ o $ l $ - description ) ) - -objectclass ( 2.5.6.13 NAME 'dSA' - DESC 'RFC2256: a directory system agent (a server)' - SUP applicationEntity STRUCTURAL - MAY knowledgeInformation ) - -objectclass ( 2.5.6.14 NAME 'device' - DESC 'RFC2256: a device' - SUP top STRUCTURAL - MUST cn - MAY ( serialNumber $ seeAlso $ owner $ ou $ o $ l $ description ) ) - -objectclass ( 2.5.6.15 NAME 'strongAuthenticationUser' - DESC 'RFC2256: a strong authentication user' - SUP top AUXILIARY - MUST userCertificate ) - -objectclass ( 2.5.6.16 NAME 'certificationAuthority' - DESC 'RFC2256: a certificate authority' - SUP top AUXILIARY - MUST ( authorityRevocationList $ certificateRevocationList $ - cACertificate ) MAY crossCertificatePair ) - -objectclass ( 2.5.6.17 NAME 'groupOfUniqueNames' - DESC 'RFC2256: a group of unique names (DN and Unique Identifier)' - SUP top STRUCTURAL - MUST ( uniqueMember $ cn ) - MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) ) - -objectclass ( 2.5.6.18 NAME 'userSecurityInformation' - DESC 'RFC2256: a user security information' - SUP top AUXILIARY - MAY ( supportedAlgorithms ) ) - -objectclass ( 2.5.6.16.2 NAME 'certificationAuthority-V2' - SUP certificationAuthority - AUXILIARY MAY ( deltaRevocationList ) ) - -objectclass ( 2.5.6.19 NAME 'cRLDistributionPoint' - SUP top STRUCTURAL - MUST ( cn ) - MAY ( certificateRevocationList $ authorityRevocationList $ - deltaRevocationList ) ) - -objectclass ( 2.5.6.20 NAME 'dmd' - SUP top STRUCTURAL - MUST ( dmdName ) - MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ - x121Address $ registeredAddress $ destinationIndicator $ - preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ - telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ - street $ postOfficeBox $ postalCode $ postalAddress $ - physicalDeliveryOfficeName $ st $ l $ description ) ) - -# -# Object Classes from RFC 2587 -# -objectclass ( 2.5.6.21 NAME 'pkiUser' - DESC 'RFC2587: a PKI user' - SUP top AUXILIARY - MAY userCertificate ) - -objectclass ( 2.5.6.22 NAME 'pkiCA' - DESC 'RFC2587: PKI certificate authority' - SUP top AUXILIARY - MAY ( authorityRevocationList $ certificateRevocationList $ - cACertificate $ crossCertificatePair ) ) - -objectclass ( 2.5.6.23 NAME 'deltaCRL' - DESC 'RFC2587: PKI user' - SUP top AUXILIARY - MAY deltaRevocationList ) - -# -# Standard Track URI label schema from RFC 2079 -# system schema -#attributetype ( 1.3.6.1.4.1.250.1.57 NAME 'labeledURI' -# DESC 'RFC2079: Uniform Resource Identifier with optional label' -# EQUALITY caseExactMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -objectclass ( 1.3.6.1.4.1.250.3.15 NAME 'labeledURIObject' - DESC 'RFC2079: object that contains the URI attribute type' - SUP top AUXILIARY - MAY ( labeledURI ) ) - -# -# Derived from RFC 1274, but with new "short names" -# -#attributetype ( 0.9.2342.19200300.100.1.1 -# NAME ( 'uid' 'userid' ) -# DESC 'RFC1274: user identifier' -# EQUALITY caseIgnoreMatch -# SUBSTR caseIgnoreSubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.3 - NAME ( 'mail' 'rfc822Mailbox' ) - DESC 'RFC1274: RFC822 Mailbox' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) - -objectclass ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject' - DESC 'RFC1274: simple security object' - SUP top AUXILIARY - MUST userPassword ) - -# RFC 1274 + RFC 2247 -attributetype ( 0.9.2342.19200300.100.1.25 - NAME ( 'dc' 'domainComponent' ) - DESC 'RFC1274/2247: domain component' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -# RFC 2247 -objectclass ( 1.3.6.1.4.1.1466.344 NAME 'dcObject' - DESC 'RFC2247: domain component object' - SUP top AUXILIARY MUST dc ) - -# RFC 2377 -objectclass ( 1.3.6.1.1.3.1 NAME 'uidObject' - DESC 'RFC2377: uid object' - SUP top AUXILIARY MUST uid ) - -# RFC 4524 -# The 'associatedDomain' attribute specifies DNS [RFC1034][RFC2181] -# host names [RFC1123] that are associated with an object. That is, -# values of this attribute should conform to the following ABNF: -# -# domain = root / label *( DOT label ) -# root = SPACE -# label = LETDIG [ *61( LETDIG / HYPHEN ) LETDIG ] -# LETDIG = %x30-39 / %x41-5A / %x61-7A ; "0" - "9" / "A"-"Z" / "a"-"z" -# SPACE = %x20 ; space (" ") -# HYPHEN = %x2D ; hyphen ("-") -# DOT = %x2E ; period (".") -attributetype ( 0.9.2342.19200300.100.1.37 - NAME 'associatedDomain' - DESC 'RFC1274: domain associated with object' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -# RFC 2459 -- deprecated in favor of 'mail' (in cosine.schema) -attributetype ( 1.2.840.113549.1.9.1 - NAME ( 'email' 'emailAddress' 'pkcs9email' ) - DESC 'RFC3280: legacy attribute for email addresses in DNs' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) - diff --git a/ldap/data/ldap_conf/schema/cosine.ldif b/ldap/data/ldap_conf/schema/cosine.ldif deleted file mode 100644 index d207111..0000000 --- a/ldap/data/ldap_conf/schema/cosine.ldif +++ /dev/null @@ -1,200 +0,0 @@ -# RFC1274: Cosine and Internet X.500 schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# RFC1274: Cosine and Internet X.500 schema -# -# This file contains LDAPv3 schema derived from X.500 COSINE "pilot" -# schema. As this schema was defined for X.500(89), some -# oddities were introduced in the mapping to LDAPv3. The -# mappings were based upon: draft-ietf-asid-ldapv3-attributes-03.txt -# (a work in progress) -# -# Note: It seems that the pilot schema evolved beyond what was -# described in RFC1274. However, this document attempts to describes -# RFC1274 as published. -# -# Depends on core.ldif -# -# This file was automatically generated from cosine.schema; see that -# file for complete background. -# -dn: cn=cosine,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: cosine -olcAttributeTypes: ( 0.9.2342.19200300.100.1.2 NAME 'textEncodedORAddress' - EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1. - 1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.4 NAME 'info' DESC 'RFC1274: g - eneral information' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{2048} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.5 NAME ( 'drink' 'favouriteDri - nk' ) DESC 'RFC1274: favorite drink' EQUALITY caseIgnoreMatch SUBSTR caseIgno - reSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.6 NAME 'roomNumber' DESC 'RFC1 - 274: room number' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch S - YNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.7 NAME 'photo' DESC 'RFC1274: - photo (G3 fax)' SYNTAX 1.3.6.1.4.1.1466.115.121.1.23{25000} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.8 NAME 'userClass' DESC 'RFC12 - 74: category of user' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.9 NAME 'host' DESC 'RFC1274: h - ost computer' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTA - X 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.10 NAME 'manager' DESC 'RFC127 - 4: DN of manager' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115 - .121.1.12 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.11 NAME 'documentIdentifier' D - ESC 'RFC1274: unique identifier of document' EQUALITY caseIgnoreMatch SUBSTR - caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.12 NAME 'documentTitle' DESC ' - RFC1274: title of document' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstri - ngsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.13 NAME 'documentVersion' DES - C 'RFC1274: version of document' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSu - bstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.14 NAME 'documentAuthor' DESC - 'RFC1274: DN of author of document' EQUALITY distinguishedNameMatch SYNTAX 1 - .3.6.1.4.1.1466.115.121.1.12 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.15 NAME 'documentLocation' DE - SC 'RFC1274: location of document original' EQUALITY caseIgnoreMatch SUBSTR c - aseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.20 NAME ( 'homePhone' 'homeTe - lephoneNumber' ) DESC 'RFC1274: home telephone number' EQUALITY telephoneNumb - erMatch SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121 - .1.50 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.21 NAME 'secretary' DESC 'RFC - 1274: DN of secretary' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.146 - 6.115.121.1.12 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.22 NAME 'otherMailbox' SYNTAX - 1.3.6.1.4.1.1466.115.121.1.39 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.26 NAME 'aRecord' EQUALITY ca - seIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.27 NAME 'mDRecord' EQUALITY c - aseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.28 NAME 'mXRecord' EQUALITY c - aseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.29 NAME 'nSRecord' EQUALITY c - aseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.30 NAME 'sOARecord' EQUALITY - caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.31 NAME 'cNAMERecord' EQUALIT - Y caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.38 NAME 'associatedName' DESC - 'RFC1274: DN of entry associated with domain' EQUALITY distinguishedNameMatc - h SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.39 NAME 'homePostalAddress' D - ESC 'RFC1274: home postal address' EQUALITY caseIgnoreListMatch SUBSTR caseIg - noreListSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.40 NAME 'personalTitle' DESC - 'RFC1274: personal title' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstring - sMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.41 NAME ( 'mobile' 'mobileTel - ephoneNumber' ) DESC 'RFC1274: mobile telephone number' EQUALITY telephoneNum - berMatch SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.50 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.42 NAME ( 'pager' 'pagerTelep - honeNumber' ) DESC 'RFC1274: pager telephone number' EQUALITY telephoneNumber - Match SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1 - .50 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.43 NAME ( 'co' 'friendlyCount - ryName' ) DESC 'RFC1274: friendly country name' EQUALITY caseIgnoreMatch SUBS - TR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.44 NAME 'uniqueIdentifier' DE - SC 'RFC1274: unique identifer' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.45 NAME 'organizationalStatus - ' DESC 'RFC1274: organizational status' EQUALITY caseIgnoreMatch SUBSTR caseI - gnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.46 NAME 'janetMailbox' DESC ' - RFC1274: Janet mailbox' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subst - ringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.47 NAME 'mailPreferenceOption - ' DESC 'RFC1274: mail preference option' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.48 NAME 'buildingName' DESC ' - RFC1274: name of building' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstrin - gsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.49 NAME 'dSAQuality' DESC 'RF - C1274: DSA Quality' SYNTAX 1.3.6.1.4.1.1466.115.121.1.19 SINGLE-VALUE ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.50 NAME 'singleLevelQuality' - DESC 'RFC1274: Single Level Quality' SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SIN - GLE-VALUE ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.51 NAME 'subtreeMinimumQualit - y' DESC 'RFC1274: Subtree Mininum Quality' SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 13 SINGLE-VALUE ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.52 NAME 'subtreeMaximumQualit - y' DESC 'RFC1274: Subtree Maximun Quality' SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 13 SINGLE-VALUE ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.53 NAME 'personalSignature' D - ESC 'RFC1274: Personal Signature (G3 fax)' SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 23 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.54 NAME 'dITRedirect' DESC 'R - FC1274: DIT Redirect' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466 - .115.121.1.12 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.55 NAME 'audio' DESC 'RFC1274 - : audio (u-law)' SYNTAX 1.3.6.1.4.1.1466.115.121.1.4{25000} ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.56 NAME 'documentPublisher' D - ESC 'RFC1274: publisher of document' EQUALITY caseIgnoreMatch SUBSTR caseIgno - reSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.4 NAME ( 'pilotPerson' 'newPilo - tPerson' ) SUP person STRUCTURAL MAY ( userid $ textEncodedORAddress $ rfc822 - Mailbox $ favouriteDrink $ roomNumber $ userClass $ homeTelephoneNumber $ hom - ePostalAddress $ secretary $ personalTitle $ preferredDeliveryMethod $ busine - ssCategory $ janetMailbox $ otherMailbox $ mobileTelephoneNumber $ pagerTelep - honeNumber $ organizationalStatus $ mailPreferenceOption $ personalSignature - ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.5 NAME 'account' SUP top STRUCT - URAL MUST userid MAY ( description $ seeAlso $ localityName $ organizationNam - e $ organizationalUnitName $ host ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.6 NAME 'document' SUP top STRUC - TURAL MUST documentIdentifier MAY ( commonName $ description $ seeAlso $ loca - lityName $ organizationName $ organizationalUnitName $ documentTitle $ docume - ntVersion $ documentAuthor $ documentLocation $ documentPublisher ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.7 NAME 'room' SUP top STRUCTURA - L MUST commonName MAY ( roomNumber $ description $ seeAlso $ telephoneNumber - ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.9 NAME 'documentSeries' SUP top - STRUCTURAL MUST commonName MAY ( description $ seeAlso $ telephonenumber $ l - ocalityName $ organizationName $ organizationalUnitName ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.13 NAME 'domain' SUP top STRUCT - URAL MUST domainComponent MAY ( associatedName $ organizationName $ descripti - on $ businessCategory $ seeAlso $ searchGuide $ userPassword $ localityName $ - stateOrProvinceName $ streetAddress $ physicalDeliveryOfficeName $ postalAdd - ress $ postalCode $ postOfficeBox $ streetAddress $ facsimileTelephoneNumber - $ internationalISDNNumber $ telephoneNumber $ teletexTerminalIdentifier $ tel - exNumber $ preferredDeliveryMethod $ destinationIndicator $ registeredAddress - $ x121Address ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.14 NAME 'RFC822localPart' SUP d - omain STRUCTURAL MAY ( commonName $ surname $ description $ seeAlso $ telepho - neNumber $ physicalDeliveryOfficeName $ postalAddress $ postalCode $ postOffi - ceBox $ streetAddress $ facsimileTelephoneNumber $ internationalISDNNumber $ - telephoneNumber $ teletexTerminalIdentifier $ telexNumber $ preferredDelivery - Method $ destinationIndicator $ registeredAddress $ x121Address ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.15 NAME 'dNSDomain' SUP domain - STRUCTURAL MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ SOARecord $ CNAME - Record ) ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.17 NAME 'domainRelatedObject' D - ESC 'RFC1274: an object related to an domain' SUP top AUXILIARY MUST associat - edDomain ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.18 NAME 'friendlyCountry' SUP c - ountry STRUCTURAL MUST friendlyCountryName ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.20 NAME 'pilotOrganization' SU - P ( organization $ organizationalUnit ) STRUCTURAL MAY buildingName ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.21 NAME 'pilotDSA' SUP dsa STR - UCTURAL MAY dSAQuality ) -olcObjectClasses: ( 0.9.2342.19200300.100.4.22 NAME 'qualityLabelledData' - SUP top AUXILIARY MUST dsaQuality MAY ( subtreeMinimumQuality $ subtreeMaximu - mQuality ) ) diff --git a/ldap/data/ldap_conf/schema/cosine.schema b/ldap/data/ldap_conf/schema/cosine.schema deleted file mode 100644 index a0f5ae2..0000000 --- a/ldap/data/ldap_conf/schema/cosine.schema +++ /dev/null @@ -1,404 +0,0 @@ -# RFC1274: Cosine and Internet X.500 schema -# $OpenLDAP: pkg/ldap/servers/slapd/schema/cosine.schema,v 1.19.2.5 2007/01/02 21:44:09 kurt Exp $ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2007 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. - -# RFC1274: Cosine and Internet X.500 schema -# -# This file contains LDAPv3 schema derived from X.500 COSINE "pilot" -# schema. As this schema was defined for X.500(89), some -# oddities were introduced in the mapping to LDAPv3. The -# mappings were based upon: draft-ietf-asid-ldapv3-attributes-03.txt -# (a work in progress) -# -# Note: It seems that the pilot schema evolved beyond what was -# described in RFC1274. However, this document attempts to describes -# RFC1274 as published. -# -# Depends on core.schema - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF RFC explaining the schema. Unfortunately, -# that text is covered by a license that doesn't meet Debian's Free -# Software Guidelines. This is a stripped version of the schema that -# contains only the functional schema definition, not the text of the -# RFC. -# -# For an explanation of this schema, see RFC 1274, at (among other -# places): http://www.ietf.org/rfc/rfc1274.txt - -#(in core.schema) -##attributetype ( 0.9.2342.19200300.100.1.1 NAME ( 'uid' 'userid' ) -## EQUALITY caseIgnoreMatch -## SUBSTR caseIgnoreSubstringsMatch -## SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.2 NAME 'textEncodedORAddress' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -#(in core.schema) -##attributetype ( 0.9.2342.19200300.100.1.3 NAME ( 'mail' 'rfc822Mailbox' ) -## EQUALITY caseIgnoreIA5Match -## SUBSTR caseIgnoreIA5SubstringsMatch -## SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) - -attributetype ( 0.9.2342.19200300.100.1.4 NAME 'info' - DESC 'RFC1274: general information' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{2048} ) - -attributetype ( 0.9.2342.19200300.100.1.5 - NAME ( 'drink' 'favouriteDrink' ) - DESC 'RFC1274: favorite drink' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.6 NAME 'roomNumber' - DESC 'RFC1274: room number' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.7 NAME 'photo' - DESC 'RFC1274: photo (G3 fax)' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.23{25000} ) - -attributetype ( 0.9.2342.19200300.100.1.8 NAME 'userClass' - DESC 'RFC1274: category of user' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.9 NAME 'host' - DESC 'RFC1274: host computer' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.10 NAME 'manager' - DESC 'RFC1274: DN of manager' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype ( 0.9.2342.19200300.100.1.11 NAME 'documentIdentifier' - DESC 'RFC1274: unique identifier of document' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.12 NAME 'documentTitle' - DESC 'RFC1274: title of document' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.13 NAME 'documentVersion' - DESC 'RFC1274: version of document' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.14 NAME 'documentAuthor' - DESC 'RFC1274: DN of author of document' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype ( 0.9.2342.19200300.100.1.15 NAME 'documentLocation' - DESC 'RFC1274: location of document original' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.20 - NAME ( 'homePhone' 'homeTelephoneNumber' ) - DESC 'RFC1274: home telephone number' - EQUALITY telephoneNumberMatch - SUBSTR telephoneNumberSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 ) - -attributetype ( 0.9.2342.19200300.100.1.21 NAME 'secretary' - DESC 'RFC1274: DN of secretary' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype ( 0.9.2342.19200300.100.1.22 NAME 'otherMailbox' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.39 ) - -## Deprecated in favor of modifyTimeStamp -#attributetype ( 0.9.2342.19200300.100.1.23 NAME 'lastModifiedTime' -# DESC 'RFC1274: time of last modify, replaced by modifyTimestamp' -# OBSOLETE -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.53 -# USAGE directoryOperation ) - -## Deprecated in favor of modifiersName -#attributetype ( 0.9.2342.19200300.100.1.24 NAME 'lastModifiedBy' -# DESC 'RFC1274: last modifier, replaced by modifiersName' -# OBSOLETE -# EQUALITY distinguishedNameMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 -# USAGE directoryOperation ) - -##(in core.schema) -##attributetype ( 0.9.2342.19200300.100.1.25 NAME ( 'dc' 'domainComponent' ) -## EQUALITY caseIgnoreIA5Match -## SUBSTR caseIgnoreIA5SubstringsMatch -## SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -## incorrect syntax? -attributetype ( 0.9.2342.19200300.100.1.26 NAME 'aRecord' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -## missing from RFC1274 -## incorrect syntax? -attributetype ( 0.9.2342.19200300.100.1.27 NAME 'mDRecord' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -## incorrect syntax!! -attributetype ( 0.9.2342.19200300.100.1.28 NAME 'mXRecord' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -## incorrect syntax!! -attributetype ( 0.9.2342.19200300.100.1.29 NAME 'nSRecord' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -## incorrect syntax!! -attributetype ( 0.9.2342.19200300.100.1.30 NAME 'sOARecord' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -## incorrect syntax!! -attributetype ( 0.9.2342.19200300.100.1.31 NAME 'cNAMERecord' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -#attributetype ( 0.9.2342.19200300.100.1.37 NAME 'associatedDomain' -# EQUALITY caseIgnoreIA5Match -# SUBSTR caseIgnoreIA5SubstringsMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 0.9.2342.19200300.100.1.38 NAME 'associatedName' - DESC 'RFC1274: DN of entry associated with domain' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype ( 0.9.2342.19200300.100.1.39 NAME 'homePostalAddress' - DESC 'RFC1274: home postal address' - EQUALITY caseIgnoreListMatch - SUBSTR caseIgnoreListSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) - -attributetype ( 0.9.2342.19200300.100.1.40 NAME 'personalTitle' - DESC 'RFC1274: personal title' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.41 - NAME ( 'mobile' 'mobileTelephoneNumber' ) - DESC 'RFC1274: mobile telephone number' - EQUALITY telephoneNumberMatch - SUBSTR telephoneNumberSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 ) - -attributetype ( 0.9.2342.19200300.100.1.42 - NAME ( 'pager' 'pagerTelephoneNumber' ) - DESC 'RFC1274: pager telephone number' - EQUALITY telephoneNumberMatch - SUBSTR telephoneNumberSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 ) - -attributetype ( 0.9.2342.19200300.100.1.43 - NAME ( 'co' 'friendlyCountryName' ) - DESC 'RFC1274: friendly country name' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributetype ( 0.9.2342.19200300.100.1.44 NAME 'uniqueIdentifier' - DESC 'RFC1274: unique identifer' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.45 NAME 'organizationalStatus' - DESC 'RFC1274: organizational status' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.46 NAME 'janetMailbox' - DESC 'RFC1274: Janet mailbox' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) - -attributetype ( 0.9.2342.19200300.100.1.47 - NAME 'mailPreferenceOption' - DESC 'RFC1274: mail preference option' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) - -attributetype ( 0.9.2342.19200300.100.1.48 NAME 'buildingName' - DESC 'RFC1274: name of building' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -attributetype ( 0.9.2342.19200300.100.1.49 NAME 'dSAQuality' - DESC 'RFC1274: DSA Quality' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.19 SINGLE-VALUE ) - -attributetype ( 0.9.2342.19200300.100.1.50 NAME 'singleLevelQuality' - DESC 'RFC1274: Single Level Quality' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SINGLE-VALUE ) - -attributetype ( 0.9.2342.19200300.100.1.51 NAME 'subtreeMinimumQuality' - DESC 'RFC1274: Subtree Mininum Quality' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SINGLE-VALUE ) - -attributetype ( 0.9.2342.19200300.100.1.52 NAME 'subtreeMaximumQuality' - DESC 'RFC1274: Subtree Maximun Quality' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 SINGLE-VALUE ) - -attributetype ( 0.9.2342.19200300.100.1.53 NAME 'personalSignature' - DESC 'RFC1274: Personal Signature (G3 fax)' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.23 ) - -attributetype ( 0.9.2342.19200300.100.1.54 NAME 'dITRedirect' - DESC 'RFC1274: DIT Redirect' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype ( 0.9.2342.19200300.100.1.55 NAME 'audio' - DESC 'RFC1274: audio (u-law)' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.4{25000} ) - -attributetype ( 0.9.2342.19200300.100.1.56 NAME 'documentPublisher' - DESC 'RFC1274: publisher of document' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -#objectclass ( 0.9.2342.19200300.100.4.3 NAME 'pilotObject' -# DESC 'RFC1274: pilot object' -# SUP top AUXILIARY -# MAY ( info $ photo $ manager $ uniqueIdentifier $ -# lastModifiedTime $ lastModifiedBy $ dITRedirect $ audio ) -# ) - -objectclass ( 0.9.2342.19200300.100.4.4 - NAME ( 'pilotPerson' 'newPilotPerson' ) - SUP person STRUCTURAL - MAY ( userid $ textEncodedORAddress $ rfc822Mailbox $ - favouriteDrink $ roomNumber $ userClass $ - homeTelephoneNumber $ homePostalAddress $ secretary $ - personalTitle $ preferredDeliveryMethod $ businessCategory $ - janetMailbox $ otherMailbox $ mobileTelephoneNumber $ - pagerTelephoneNumber $ organizationalStatus $ - mailPreferenceOption $ personalSignature ) - ) - -objectclass ( 0.9.2342.19200300.100.4.5 NAME 'account' - SUP top STRUCTURAL - MUST userid - MAY ( description $ seeAlso $ localityName $ - organizationName $ organizationalUnitName $ host ) - ) - -objectclass ( 0.9.2342.19200300.100.4.6 NAME 'document' - SUP top STRUCTURAL - MUST documentIdentifier - MAY ( commonName $ description $ seeAlso $ localityName $ - organizationName $ organizationalUnitName $ - documentTitle $ documentVersion $ documentAuthor $ - documentLocation $ documentPublisher ) - ) - -objectclass ( 0.9.2342.19200300.100.4.7 NAME 'room' - SUP top STRUCTURAL - MUST commonName - MAY ( roomNumber $ description $ seeAlso $ telephoneNumber ) - ) - -objectclass ( 0.9.2342.19200300.100.4.9 NAME 'documentSeries' - SUP top STRUCTURAL - MUST commonName - MAY ( description $ seeAlso $ telephonenumber $ - localityName $ organizationName $ organizationalUnitName ) - ) - -objectclass ( 0.9.2342.19200300.100.4.13 NAME 'domain' - SUP top STRUCTURAL - MUST domainComponent - MAY ( associatedName $ organizationName $ description $ - businessCategory $ seeAlso $ searchGuide $ userPassword $ - localityName $ stateOrProvinceName $ streetAddress $ - physicalDeliveryOfficeName $ postalAddress $ postalCode $ - postOfficeBox $ streetAddress $ - facsimileTelephoneNumber $ internationalISDNNumber $ - telephoneNumber $ teletexTerminalIdentifier $ telexNumber $ - preferredDeliveryMethod $ destinationIndicator $ - registeredAddress $ x121Address ) - ) - -objectclass ( 0.9.2342.19200300.100.4.14 NAME 'RFC822localPart' - SUP domain STRUCTURAL - MAY ( commonName $ surname $ description $ seeAlso $ telephoneNumber $ - physicalDeliveryOfficeName $ postalAddress $ postalCode $ - postOfficeBox $ streetAddress $ - facsimileTelephoneNumber $ internationalISDNNumber $ - telephoneNumber $ teletexTerminalIdentifier $ - telexNumber $ preferredDeliveryMethod $ destinationIndicator $ - registeredAddress $ x121Address ) - ) - -objectclass ( 0.9.2342.19200300.100.4.15 NAME 'dNSDomain' - SUP domain STRUCTURAL - MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ - SOARecord $ CNAMERecord ) - ) - -objectclass ( 0.9.2342.19200300.100.4.17 NAME 'domainRelatedObject' - DESC 'RFC1274: an object related to an domain' - SUP top AUXILIARY - MUST associatedDomain ) - -objectclass ( 0.9.2342.19200300.100.4.18 NAME 'friendlyCountry' - SUP country STRUCTURAL - MUST friendlyCountryName ) - -## (in core.schema) -## objectclass ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject' -## SUP top AUXILIARY -## MUST userPassword ) - -objectclass ( 0.9.2342.19200300.100.4.20 NAME 'pilotOrganization' - SUP ( organization $ organizationalUnit ) STRUCTURAL - MAY buildingName ) - -objectclass ( 0.9.2342.19200300.100.4.21 NAME 'pilotDSA' - SUP dsa STRUCTURAL - MAY dSAQuality ) - -objectclass ( 0.9.2342.19200300.100.4.22 NAME 'qualityLabelledData' - SUP top AUXILIARY - MUST dsaQuality - MAY ( subtreeMinimumQuality $ subtreeMaximumQuality ) - ) diff --git a/ldap/data/ldap_conf/schema/duaconf.ldif b/ldap/data/ldap_conf/schema/duaconf.ldif deleted file mode 100644 index aae45c7..0000000 --- a/ldap/data/ldap_conf/schema/duaconf.ldif +++ /dev/null @@ -1,83 +0,0 @@ -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# DUA schema from draft-joslin-config-schema (a work in progress) -# -# This file was automatically generated from duaconf.schema; see that file -# for complete references. -# -dn: cn=duaconf,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: duaconf -olcObjectIdentifier: {0}DUAConfSchemaOID 1.3.6.1.4.1.11.1.3.1 -olcAttributeTypes: {0}( DUAConfSchemaOID:1.0 NAME 'defaultServerList' DESC 'De - fault LDAP server host address used by a DUA' EQUALITY caseIgnoreMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {1}( DUAConfSchemaOID:1.1 NAME 'defaultSearchBase' DESC 'De - fault LDAP base DN used by a DUA' EQUALITY distinguishedNameMatch SYNTAX 1.3. - 6.1.4.1.1466.115.121.1.12 SINGLE-VALUE ) -olcAttributeTypes: {2}( DUAConfSchemaOID:1.2 NAME 'preferredServerList' DESC ' - Preferred LDAP server host addresses to be used by a DUA' EQUALITY - caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {3}( DUAConfSchemaOID:1.3 NAME 'searchTimeLimit' DESC 'Maxi - mum time in seconds a DUA should allow for a search to complete' E - QUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {4}( DUAConfSchemaOID:1.4 NAME 'bindTimeLimit' DESC 'Maximu - m time in seconds a DUA should allow for the bind operation to com - plete' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALU - E ) -olcAttributeTypes: {5}( DUAConfSchemaOID:1.5 NAME 'followReferrals' DESC 'Tell - s DUA if it should follow referrals returned by a DSA search resul - t' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {6}( DUAConfSchemaOID:1.16 NAME 'dereferenceAliases' DESC ' - Tells DUA if it should dereference aliases' EQUALITY booleanMatch SYNTAX 1.3. - 6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {7}( DUAConfSchemaOID:1.6 NAME 'authenticationMethod' DESC - 'A keystring which identifies the type of authentication method us - ed to contact the DSA' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.1 - 21.1.15 SINGLE-VALUE ) -olcAttributeTypes: {8}( DUAConfSchemaOID:1.7 NAME 'profileTTL' DESC 'Time to l - ive, in seconds, before a client DUA should re-read this configura - tion profile' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SING - LE-VALUE ) -olcAttributeTypes: {9}( DUAConfSchemaOID:1.14 NAME 'serviceSearchDescriptor' D - ESC 'LDAP search descriptor list used by a DUA' EQUALITY caseExactMatch SYNTA - X 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: {10}( DUAConfSchemaOID:1.9 NAME 'attributeMap' DESC 'Attrib - ute mappings used by a DUA' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.26 ) -olcAttributeTypes: {11}( DUAConfSchemaOID:1.10 NAME 'credentialLevel' DESC 'Id - entifies type of credentials a DUA should use when binding to the - LDAP server' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) -olcAttributeTypes: {12}( DUAConfSchemaOID:1.11 NAME 'objectclassMap' DESC 'Obj - ectclass mappings used by a DUA' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4 - .1.1466.115.121.1.26 ) -olcAttributeTypes: {13}( DUAConfSchemaOID:1.12 NAME 'defaultSearchScope' DESC - 'Default search scope used by a DUA' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6 - .1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: {14}( DUAConfSchemaOID:1.13 NAME 'serviceCredentialLevel' D - ESC 'Identifies type of credentials a DUA should use when binding - to the LDAP server for a specific service' EQUALITY caseIgnoreIA5M - atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {15}( DUAConfSchemaOID:1.15 NAME 'serviceAuthenticationMeth - od' DESC 'Authentication method used by a service of the DUA' EQUALITY caseIg - noreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcObjectClasses: {0}( DUAConfSchemaOID:2.5 NAME 'DUAConfigProfile' DESC 'Abst - raction of a base configuration for a DUA' SUP top STRUCTURAL MUST cn MAY ( d - efaultServerList $ preferredServerList $ defaultSearchBase $ defaultSearchSco - pe $ searchTimeLimit $ bindTimeLimit $ credentialLevel $ authenticationMethod - $ followReferrals $ dereferenceAliases $ serviceSearchDescriptor $ serviceCr - edentialLevel $ serviceAuthenticationMethod $ objectclassMap $ attributeMap $ - profileTTL ) ) diff --git a/ldap/data/ldap_conf/schema/duaconf.schema b/ldap/data/ldap_conf/schema/duaconf.schema deleted file mode 100644 index 8c1683f..0000000 --- a/ldap/data/ldap_conf/schema/duaconf.schema +++ /dev/null @@ -1,153 +0,0 @@ -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. - -# DUA schema from draft-joslin-config-schema (a work in progress) - -# Contents of this file are subject to change (including deletion) -# without notice. -# -# Not recommended for production use! -# Use with extreme caution! - -## Notes: -## - The matching rule for attributes followReferrals and dereferenceAliases -## has been changed to booleanMatch since their syntax is boolean -## - There was a typo in the name of the dereferenceAliases attributeType -## in the DUAConfigProfile objectClass definition -## - Credit goes to the original Authors - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF Internet-Draft explaining the schema. -# Unfortunately, that text is covered by a license that doesn't meet -# Debian's Free Software Guidelines. This is a stripped version of the -# schema that contains only the functional schema definition, not the text -# of the Internet-Draft. -# -# For an explanation of this schema, see -# draft-joslin-config-schema-07.txt. - -objectidentifier DUAConfSchemaOID 1.3.6.1.4.1.11.1.3.1 - -attributeType ( DUAConfSchemaOID:1.0 NAME 'defaultServerList' - DESC 'Default LDAP server host address used by a DUA' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.1 NAME 'defaultSearchBase' - DESC 'Default LDAP base DN used by a DUA' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.2 NAME 'preferredServerList' - DESC 'Preferred LDAP server host addresses to be used by a - DUA' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.3 NAME 'searchTimeLimit' - DESC 'Maximum time in seconds a DUA should allow for a - search to complete' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.4 NAME 'bindTimeLimit' - DESC 'Maximum time in seconds a DUA should allow for the - bind operation to complete' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.5 NAME 'followReferrals' - DESC 'Tells DUA if it should follow referrals - returned by a DSA search result' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.16 NAME 'dereferenceAliases' - DESC 'Tells DUA if it should dereference aliases' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.6 NAME 'authenticationMethod' - DESC 'A keystring which identifies the type of - authentication method used to contact the DSA' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.7 NAME 'profileTTL' - DESC 'Time to live, in seconds, before a client DUA - should re-read this configuration profile' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.14 NAME 'serviceSearchDescriptor' - DESC 'LDAP search descriptor list used by a DUA' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributeType ( DUAConfSchemaOID:1.9 NAME 'attributeMap' - DESC 'Attribute mappings used by a DUA' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributeType ( DUAConfSchemaOID:1.10 NAME 'credentialLevel' - DESC 'Identifies type of credentials a DUA should - use when binding to the LDAP server' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.11 NAME 'objectclassMap' - DESC 'Objectclass mappings used by a DUA' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributeType ( DUAConfSchemaOID:1.12 NAME 'defaultSearchScope' - DESC 'Default search scope used by a DUA' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributeType ( DUAConfSchemaOID:1.13 NAME 'serviceCredentialLevel' - DESC 'Identifies type of credentials a DUA - should use when binding to the LDAP server for a - specific service' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributeType ( DUAConfSchemaOID:1.15 NAME 'serviceAuthenticationMethod' - DESC 'Authentication method used by a service of the DUA' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -objectClass ( DUAConfSchemaOID:2.5 NAME 'DUAConfigProfile' - SUP top STRUCTURAL - DESC 'Abstraction of a base configuration for a DUA' - MUST ( cn ) - MAY ( defaultServerList $ preferredServerList $ - defaultSearchBase $ defaultSearchScope $ - searchTimeLimit $ bindTimeLimit $ - credentialLevel $ authenticationMethod $ - followReferrals $ dereferenceAliases $ - serviceSearchDescriptor $ serviceCredentialLevel $ - serviceAuthenticationMethod $ objectclassMap $ - attributeMap $ profileTTL ) ) diff --git a/ldap/data/ldap_conf/schema/dyngroup.ldif b/ldap/data/ldap_conf/schema/dyngroup.ldif deleted file mode 100644 index 1f7070d..0000000 --- a/ldap/data/ldap_conf/schema/dyngroup.ldif +++ /dev/null @@ -1,71 +0,0 @@ -# dyngroup.schema -- Dynamic Group schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Dynamic Group schema (experimental), as defined by Netscape. See -# http://www.redhat.com/docs/manuals/ent-server/pdf/esadmin611.pdf -# page 70 for details on how these groups were used. -# -# A description of the objectclass definition is available here: -# http://www.redhat.com/docs/manuals/dir-server/schema/7.1/oc_dir.html#1303745 -# -# depends upon: -# core.schema -# -# These definitions are considered experimental due to the lack of -# a formal specification (e.g., RFC). -# -# NOT RECOMMENDED FOR PRODUCTION USE! USE WITH CAUTION! -# -# The Netscape documentation describes this as an auxiliary objectclass -# but their implementations have always defined it as a structural class. -# The sloppiness here is because Netscape-derived servers don't actually -# implement the X.500 data model, and they don't honor the distinction -# between structural and auxiliary classes. This fact is noted here: -# http://forum.java.sun.com/thread.jspa?threadID=5016864&messageID=9034636 -# -# In accordance with other existing implementations, we define it as a -# structural class. -# -# Our definition of memberURL also does not match theirs but again -# their published definition and what works in practice do not agree. -# In other words, the Netscape definitions are broken and interoperability -# is not guaranteed. -# -# Also see the new DynGroup proposed spec at -# http://tools.ietf.org/html/draft-haripriya-dynamicgroup-02 -dn: cn=dyngroup,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: dyngroup -olcObjectIdentifier: {0}NetscapeRoot 2.16.840.1.113730 -olcObjectIdentifier: {1}NetscapeLDAP NetscapeRoot:3 -olcObjectIdentifier: {2}NetscapeLDAPattributeType NetscapeLDAP:1 -olcObjectIdentifier: {3}NetscapeLDAPobjectClass NetscapeLDAP:2 -olcObjectIdentifier: {4}OpenLDAPExp11 1.3.6.1.4.1.4203.666.11 -olcObjectIdentifier: {5}DynGroupBase OpenLDAPExp11:8 -olcObjectIdentifier: {6}DynGroupAttr DynGroupBase:1 -olcObjectIdentifier: {7}DynGroupOC DynGroupBase:2 -olcAttributeTypes: {0}( NetscapeLDAPattributeType:198 NAME 'memberURL' DESC 'I - dentifies an URL associated with each member of a group. Any type of labeled - URL can be used.' SUP labeledURI ) -olcAttributeTypes: {1}( DynGroupAttr:1 NAME 'dgIdentity' DESC 'Identity to use - when processing the memberURL' SUP distinguishedName SINGLE-VALUE ) -olcAttributeTypes: {2}( DynGroupAttr:2 NAME 'dgAuthz' DESC 'Optional authoriza - tion rules that determine who is allowed to assume the dgIdentity' EQUALITY a - uthzMatch SYNTAX 1.3.6.1.4.1.4203.666.2.7 X-ORDERED 'VALUES' ) -olcObjectClasses: {0}( NetscapeLDAPobjectClass:33 NAME 'groupOfURLs' SUP top S - TRUCTURAL MUST cn MAY ( memberURL $ businessCategory $ description $ o $ ou $ - owner $ seeAlso ) ) -olcObjectClasses: {1}( DynGroupOC:1 NAME 'dgIdentityAux' SUP top AUXILIARY MAY - ( dgIdentity $ dgAuthz ) ) diff --git a/ldap/data/ldap_conf/schema/dyngroup.schema b/ldap/data/ldap_conf/schema/dyngroup.schema deleted file mode 100644 index ab8e6a0..0000000 --- a/ldap/data/ldap_conf/schema/dyngroup.schema +++ /dev/null @@ -1,91 +0,0 @@ -# dyngroup.schema -- Dynamic Group schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Dynamic Group schema (experimental), as defined by Netscape. See -# http://www.redhat.com/docs/manuals/ent-server/pdf/esadmin611.pdf -# page 70 for details on how these groups were used. -# -# A description of the objectclass definition is available here: -# http://www.redhat.com/docs/manuals/dir-server/schema/7.1/oc_dir.html#1303745 -# -# depends upon: -# core.schema -# -# These definitions are considered experimental due to the lack of -# a formal specification (e.g., RFC). -# -# NOT RECOMMENDED FOR PRODUCTION USE! USE WITH CAUTION! -# -# The Netscape documentation describes this as an auxiliary objectclass -# but their implementations have always defined it as a structural class. -# The sloppiness here is because Netscape-derived servers don't actually -# implement the X.500 data model, and they don't honor the distinction -# between structural and auxiliary classes. This fact is noted here: -# http://forum.java.sun.com/thread.jspa?threadID=5016864&messageID=9034636 -# -# In accordance with other existing implementations, we define it as a -# structural class. -# -# Our definition of memberURL also does not match theirs but again -# their published definition and what works in practice do not agree. -# In other words, the Netscape definitions are broken and interoperability -# is not guaranteed. -# -# Also see the new DynGroup proposed spec at -# http://tools.ietf.org/html/draft-haripriya-dynamicgroup-02 - -objectIdentifier NetscapeRoot 2.16.840.1.113730 - -objectIdentifier NetscapeLDAP NetscapeRoot:3 -objectIdentifier NetscapeLDAPattributeType NetscapeLDAP:1 -objectIdentifier NetscapeLDAPobjectClass NetscapeLDAP:2 - -objectIdentifier OpenLDAPExp11 1.3.6.1.4.1.4203.666.11 -objectIdentifier DynGroupBase OpenLDAPExp11:8 -objectIdentifier DynGroupAttr DynGroupBase:1 -objectIdentifier DynGroupOC DynGroupBase:2 - -attributetype ( NetscapeLDAPattributeType:198 - NAME 'memberURL' - DESC 'Identifies an URL associated with each member of a group. Any type of labeled URL can be used.' - SUP labeledURI ) - -attributetype ( DynGroupAttr:1 - NAME 'dgIdentity' - DESC 'Identity to use when processing the memberURL' - SUP distinguishedName SINGLE-VALUE ) - -attributeType ( DynGroupAttr:2 - NAME 'dgAuthz' - DESC 'Optional authorization rules that determine who is allowed to assume the dgIdentity' - EQUALITY authzMatch - SYNTAX 1.3.6.1.4.1.4203.666.2.7 - X-ORDERED 'VALUES' ) - -objectClass ( NetscapeLDAPobjectClass:33 - NAME 'groupOfURLs' - SUP top STRUCTURAL - MUST cn - MAY ( memberURL $ businessCategory $ description $ o $ ou $ - owner $ seeAlso ) ) - -# The Haripriya dyngroup schema still needs a lot of work. -# We're just adding support for the dgIdentity attribute for now... -objectClass ( DynGroupOC:1 - NAME 'dgIdentityAux' - SUP top AUXILIARY - MAY ( dgIdentity $ dgAuthz ) ) - - diff --git a/ldap/data/ldap_conf/schema/fusiondirectory/core-fd-conf.schema b/ldap/data/ldap_conf/schema/fusiondirectory/core-fd-conf.schema deleted file mode 100644 index 0db3f0f..0000000 --- a/ldap/data/ldap_conf/schema/fusiondirectory/core-fd-conf.schema +++ /dev/null @@ -1,562 +0,0 @@ -## -## fusiondirectory-conf.schema - Needed by FusionDirectory for its configuration -## - -#~ ldapTLS="true" - -# Attributes - -# Schema setup - -attributetype ( 1.3.6.1.4.1.38414.8.10.1 NAME 'fdRfc2307bis' - DESC 'FusionDirectory - rfc2307bis' - OBSOLETE - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.10.2 NAME 'fdSchemaCheck' - DESC 'FusionDirectory - Schema check' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -# Look n feel - -attributetype ( 1.3.6.1.4.1.38414.8.11.1 NAME 'fdLanguage' - DESC 'FusionDirectory - language' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.11.2 NAME 'fdTheme' - DESC 'FusionDirectory - theme' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.11.3 NAME 'fdTimezone' - DESC 'FusionDirectory - timezone' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -# People and group storage - -attributetype ( 1.3.6.1.4.1.38414.8.12.1 NAME 'fdAccountPrimaryAttribute' - DESC 'FusionDirectory - attribute that should be used in user dn' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.2 NAME 'fdAccountRDN' - DESC 'FusionDirectory - use a placeholder pattern for generating account RDNs' - OBSOLETE - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.3 NAME 'fdNextIdHook' - DESC 'FusionDirectory - A script to be called for finding the next free id for users or groups' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.4 NAME 'fdIdGenerator' - DESC 'FusionDirectory - An automatic way to generate new user ids' - OBSOLETE - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.5 NAME 'fdPersonalTitleInDN' - OBSOLETE - DESC 'FusionDirectory - Personal title in dn' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.12.6 NAME 'fdStrictNamingRules' - DESC 'FusionDirectory - Strict naming rules' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.12.7 NAME 'fdMinId' - DESC 'FusionDirectory - minimum user id' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.8 NAME 'fdUidNumberBase' - DESC 'FusionDirectory - uid number base' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.9 NAME 'fdGidNumberBase' - DESC 'FusionDirectory - gid number base' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.10 NAME 'fdUserRDN' - DESC 'FusionDirectory - User RDN' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.11 NAME 'fdGroupRDN' - DESC 'FusionDirectory - Group RDN' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.12 NAME 'fdIdAllocationMethod' - DESC 'FusionDirectory - id allocation method traditional/pool' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.13 NAME 'fdGidNumberPoolMin' - DESC 'FusionDirectory - pool gid number min' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.14 NAME 'fdUidNumberPoolMin' - DESC 'FusionDirectory - pool uid number min' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.15 NAME 'fdGidNumberPoolMax' - DESC 'FusionDirectory - pool gid number max' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.16 NAME 'fdUidNumberPoolMax' - DESC 'FusionDirectory - pool uid number max' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.17 NAME 'fdAclRoleRDN' - DESC 'FusionDirectory - ACL role RDN' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.12.18 NAME 'fdCnPattern' - DESC 'FusionDirectory - Common Name pattern' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -# Password - -attributetype ( 1.3.6.1.4.1.38414.8.13.1 NAME 'fdPasswordDefaultHash' - DESC 'FusionDirectory - Password default hash' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.13.2 NAME 'fdPasswordMinLength' - DESC 'FusionDirectory - Password min length' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.13.3 NAME 'fdPasswordMinDiffer' - DESC 'FusionDirectory - password min differ' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.13.4 NAME 'fdPasswordHook' - DESC 'FusionDirectory - Password hook (external command)' - OBSOLETE - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.13.5 NAME 'fdHandleExpiredAccounts' - DESC 'FusionDirectory - Handle expired accounts' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.13.6 NAME 'fdSaslRealm' - DESC 'FusionDirectory - SASL Realm' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.13.7 NAME 'fdSaslExop' - DESC 'FusionDirectory - SASL Exop' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.13.8 NAME 'fdForcePasswordDefaultHash' - DESC 'FusionDirectory - Force password default hash' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -# Core settings - -attributetype ( 1.3.6.1.4.1.38414.8.14.1 NAME 'fdPrimaryGroupFilter' - DESC 'FusionDirectory - Primary group filter' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.14.2 NAME 'fdListSummary' - DESC 'FusionDirectory - Show list summary' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.14.4 NAME 'fdModificationDetectionAttribute' - DESC 'FusionDirectory - Modification detection attribute' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.14.5 NAME 'fdCopyPaste' - DESC 'FusionDirectory - (de)Activate copy/paste' - OBSOLETE - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.14.6 NAME 'fdLogging' - DESC 'FusionDirectory - Logging' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.14.7 NAME 'fdLdapSizeLimit' - DESC 'FusionDirectory - LDAP size limit' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -# Login and session - -attributetype ( 1.3.6.1.4.1.38414.8.15.1 NAME 'fdLoginAttribute' - DESC 'FusionDirectory attribute that will be used for login' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.15.2 NAME 'fdForceSSL' - DESC 'FusionDirectory - Force SSL' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.15.3 NAME 'fdWarnSSL' - DESC 'FusionDirectory - Warn user when SSL is not used' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.15.4 NAME 'fdStoreFilterSettings' - DESC 'FusionDirectory - Store filter settings' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.15.5 NAME 'fdSessionLifeTime' - DESC 'FusionDirectory - Session life time in seconds' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -# Debugging - -attributetype ( 1.3.6.1.4.1.38414.8.16.1 NAME 'fdDisplayErrors' - DESC 'FusionDirectory - Weither or not to display errors' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.16.2 NAME 'fdLdapMaxQueryTime' - DESC 'FusionDirectory - Maximum LDAP query time' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.16.3 NAME 'fdLdapStats' - DESC 'FusionDirectory - Weither or not to activate ldap stats' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.16.4 NAME 'fdDebugLevel' - DESC 'FusionDirectory - Debug level' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE) - -# Snapshots - -attributetype ( 1.3.6.1.4.1.38414.8.17.1 NAME 'fdEnableSnapshots' - DESC 'FusionDirectory - Weither or not to enable snapshots' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.17.2 NAME 'fdSnapshotBase' - DESC 'FusionDirectory - Snaphost base' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.17.3 NAME 'fdSnapshotURI' - DESC 'FusionDirectory - Snaphost URI' - OBSOLETE - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.17.4 NAME 'fdSnapshotAdminDn' - DESC 'FusionDirectory - Snaphost admin dn' - OBSOLETE - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.17.5 NAME 'fdSnapshotAdminPassword' - DESC 'FusionDirectory - Snaphost admin password' - OBSOLETE - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -# Miscellaneous - -attributetype ( 1.3.6.1.4.1.38414.8.18.2 NAME 'fdTabHook' - DESC 'FusionDirectory - tab hook' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.4.1.38414.8.18.3 NAME 'fdShells' - DESC 'FusionDirectory - available shell' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.4.1.38414.8.18.4 NAME 'fusionConfigMd5' - DESC 'FusionDirectory - md5sum of class.cache' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.4.1.38414.8.18.5 NAME 'fdDisplayHookOutput' - DESC 'FusionDirectory - display hook execution output to the user' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.18.6 NAME 'fdAclTabOnObjects' - DESC 'FusionDirectory - Should acl tabs be shown on all objects' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -# Plugins - -attributetype ( 1.3.6.1.4.1.38414.8.19.1 NAME 'fdOGroupRDN' - DESC 'FusionDirectory - OGroup RDN' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.19.2 NAME 'fdForceSaslPasswordAsk' - DESC 'FusionDirectory - Force password ask for SASL users' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -# SSL - -attributetype ( 1.3.6.1.4.1.38414.8.20.1 NAME 'fdSslCaCertPath' - DESC 'FusionDirectory - CA certificate path' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.20.2 NAME 'fdSslKeyPath' - DESC 'FusionDirectory - SSL key path' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.38414.8.20.3 NAME 'fdSslCertPath' - DESC 'FusionDirectory - SSL certificate path' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) - -# merged from dashboard-fd.schema - Needed by Fusion Directory for dashboard options - -attributetype ( 1.3.6.1.4.1.38414.27.1.1 NAME 'fdDashboardPrefix' - DESC 'FusionDirectory - Dashboard computer name prefix' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) - -attributetype ( 1.3.6.1.4.1.38414.27.1.2 NAME 'fdDashboardNumberOfDigit' - DESC 'FusionDirectory - Dashboard number of digits after prefixes in computer names' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.27.1.3 NAME 'fdDashboardExpiredAccountsDays' - DESC 'FusionDirectory - Dashboard number of days before expiration to be shown in board user tab' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -# merged from recovery-fd.schema - Needed by Fusion Directory for password recovery options - -attributetype ( 1.3.6.1.4.1.38414.8.110.1 NAME 'fdPasswordRecoveryActivated' - DESC 'Fusion Directory - Password recovery enabled/disabled' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.2 NAME 'fdPasswordRecoveryEmail' - DESC 'Fusion Directory - Password recovery sender email' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.3 NAME 'fdPasswordRecoveryMailSubject' - DESC 'Fusion Directory - Password recovery first email subject' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.4 NAME 'fdPasswordRecoveryMailBody' - DESC 'Fusion Directory - Password recovery first email body' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.5 NAME 'fdPasswordRecoveryMail2Subject' - DESC 'Fusion Directory - Password recovery second email subject' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.6 NAME 'fdPasswordRecoveryMail2Body' - DESC 'Fusion Directory - Password recovery second email body' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.7 NAME 'fdPasswordRecoveryValidity' - DESC 'Fusion Directory - Password recovery link validity in minutes' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.8 NAME 'fdPasswordRecoverySalt' - DESC 'Fusion Directory - Password recovery token salt' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.38414.8.110.9 NAME 'fdPasswordRecoveryUseAlternate' - DESC 'Fusion Directory - Allow/disallow the use of alternate addresses for password recovery' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - - -# Object Class -objectclass ( 1.3.6.1.4.1.38414.8.2.1 NAME 'fusionDirectoryConf' - DESC 'FusionDirectory configuration' - SUP top STRUCTURAL - MUST ( cn ) - MAY ( - fusionConfigMd5 $ - fdSchemaCheck $ - fdLanguage $ fdTheme $ fdTimezone $ - fdAccountPrimaryAttribute $ fdNextIdHook $ fdIdGenerator $ - fdStrictNamingRules $ fdMinId $ fdUidNumberBase $ - fdGidNumberBase $ fdUserRDN $ fdGroupRDN $ fdIdAllocationMethod $ - fdGidNumberPoolMin $ fdUidNumberPoolMin $ fdGidNumberPoolMax $ fdUidNumberPoolMax $ - fdAclRoleRDN $ fdCnPattern $ - fdPasswordDefaultHash $ fdPasswordMinLength $ fdPasswordMinDiffer $ - fdPasswordHook $ fdHandleExpiredAccounts $ fdSaslRealm $ fdSaslExop $ - fdForcePasswordDefaultHash $ - fdPrimaryGroupFilter $ fdListSummary $ - fdModificationDetectionAttribute $ fdLogging $ fdLdapSizeLimit $ - fdLoginAttribute $ fdForceSSL $ fdWarnSSL $ fdStoreFilterSettings $ fdSessionLifeTime $ - fdDisplayErrors $ fdLdapMaxQueryTime $ fdLdapStats $ fdDebugLevel $ - fdEnableSnapshots $ fdSnapshotBase $ - fdTabHook $ fdShells $ fdDisplayHookOutput $ - fdAclTabOnObjects $ - fdRfc2307bis $ fdCopyPaste $ fdSnapshotURI $ - fdSnapshotAdminDn $ fdSnapshotAdminPassword $ fdPersonalTitleInDN $ fdAccountRDN $ - fdSslCaCertPath $ fdSslKeyPath $ fdSslCertPath - ) ) - -objectclass ( 1.3.6.1.4.1.38414.8.2.2 NAME 'fusionDirectoryPluginsConf' - DESC 'FusionDirectory plugins configuration' - SUP top AUXILIARY - MUST ( cn ) - MAY ( fdOGroupRDN $ fdForceSaslPasswordAsk ) ) - -objectclass ( 1.3.6.1.4.1.38414.8.2.3 NAME 'fdPasswordRecoveryConf' - DESC 'FusionDirectory password recovery configuration' - SUP top AUXILIARY - MUST ( cn ) - MAY ( - fdPasswordRecoveryActivated $ fdPasswordRecoveryEmail $ - fdPasswordRecoveryMailSubject $ fdPasswordRecoveryMailBody $ - fdPasswordRecoveryMail2Subject $ fdPasswordRecoveryMail2Body $ - fdPasswordRecoveryValidity $ fdPasswordRecoverySalt $ - fdPasswordRecoveryUseAlternate - ) ) - -# Dashboard Object Class -objectclass ( 1.3.6.1.4.1.38414.27.2.1 NAME 'fdDashboardPluginConf' - DESC 'FusionDirectory dashboard plugin configuration' - SUP top AUXILIARY - MUST ( cn ) - MAY ( fdDashboardPrefix $ fdDashboardNumberOfDigit $ fdDashboardExpiredAccountsDays) ) diff --git a/ldap/data/ldap_conf/schema/fusiondirectory/core-fd.schema b/ldap/data/ldap_conf/schema/fusiondirectory/core-fd.schema deleted file mode 100644 index 4ecf57c..0000000 --- a/ldap/data/ldap_conf/schema/fusiondirectory/core-fd.schema +++ /dev/null @@ -1,148 +0,0 @@ -## -## core-fd.schema - Needed by FusionDirectory for its basic fonctionnalities -## - - -# Attributes -attributetype ( 1.3.6.1.4.1.10098.1.1.12.1 NAME 'gosaSubtreeACL' - DESC 'GOsa - ACL entry' - OBSOLETE - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.2 NAME 'gosaUser' - DESC 'GOsa - DN of a user' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.3 NAME 'gosaObject' - DESC 'GOsa - DN of an object' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.14 NAME 'gosaDefaultLanguage' - DESC 'GOsa - Defines the default language for a user' - OBSOLETE - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.30 NAME 'gosaGroupObjects' - DESC 'GOsa - List of all object types that are in a gosaGroupOfNames' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.34 NAME 'gosaAclTemplate' - DESC 'GOsa - ACL entries for ACL roles' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.35 NAME 'gosaAclEntry' - DESC 'GOsa - ACL entries' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.37 NAME 'gosaSnapshotTimestamp' - DESC 'GOsa - Unix timestamp of snapshot' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.38 NAME 'gosaSnapshotDN' - DESC 'GOsa - Original DN of saved object in snapshot' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.39 NAME 'gosaSnapshotData' - DESC 'GOsa - Original data of saved object in snapshot' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 SINGLE-VALUE) - -attributetype ( 1.3.6.1.4.1.10098.1.1.12.46 NAME 'gosaLoginRestriction' - DESC 'GOsa - Multivalue attribute to carry a number of allowed ips/subnets' - OBSOLETE - SUP name) - -attributetype ( 1.3.6.1.4.1.10098.1.1.6.2 NAME 'academicTitle' - DESC 'Field to represent the academic title' - OBSOLETE - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) - -attributetype ( 1.3.6.1.4.1.15305.2.1 NAME ( 'gender' 'sex' ) - DESC 'Gender: M for male, F for female' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1} - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.15305.2.2 NAME ( 'dateOfBirth' 'dob' ) - DESC 'Date of birth in ISO 8601 format' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{10} - SINGLE-VALUE ) - -# Classes -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.1 NAME 'gosaObject' SUP top AUXILIARY - DESC 'GOsa - Class for GOsa settings' - OBSOLETE - MUST ( ) - MAY ( gosaSubtreeACL )) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.2 NAME 'gosaLockEntry' SUP top STRUCTURAL - DESC 'GOsa - Class for GOsa locking' - MUST ( gosaUser $ gosaObject $ cn )) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.3 NAME 'gosaCacheEntry' SUP top STRUCTURAL - DESC 'GOsa - Class for GOsa caching' - OBSOLETE - MAY ( ) - MUST ( cn $ gosaUser )) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' SUP top AUXILIARY - DESC 'GOsa - Class to mark Departments for GOsa' - MUST ( ou $ description ) - MAY ( manager )) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.6 NAME 'gosaAccount' SUP top AUXILIARY - DESC 'GOsa - Class for GOsa Accounts' - OBSOLETE - MUST ( ) - MAY ( - gosaLoginRestriction $ - gosaDefaultLanguage $ academicTitle $ personalTitle $ dateOfBirth $ gender - ) ) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' SUP top AUXILIARY - DESC 'GOsa - Class for GOsa User Templates' - OBSOLETE - MUST ( cn )) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.12 NAME 'gosaGroupOfNames' - DESC 'GOsa - Adds the gosaGroupObjects field to groupOfNames' - SUP top AUXILIARY - MUST ( cn $ gosaGroupObjects ) MAY ( member $ description ) ) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.17 NAME 'gosaRole' - DESC 'GOsa - ACL container to define ACL roles' - SUP top STRUCTURAL - MUST ( gosaAclTemplate $ cn ) - MAY ( description ) ) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.18 NAME 'gosaAcl' - DESC 'GOsa - ACL container to define single ACLs' - SUP top AUXILIARY - MUST ( gosaAclEntry )) - -objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.19 NAME 'gosaSnapshotObject' - DESC 'GOsa - Container object for undo and snapshot data' - SUP top STRUCTURAL - MUST ( gosaSnapshotTimestamp $ gosaSnapshotDN $ gosaSnapshotData ) - MAY ( description ) ) - diff --git a/ldap/data/ldap_conf/schema/fusiondirectory/ldapns.schema b/ldap/data/ldap_conf/schema/fusiondirectory/ldapns.schema deleted file mode 100644 index 21ae00c..0000000 --- a/ldap/data/ldap_conf/schema/fusiondirectory/ldapns.schema +++ /dev/null @@ -1,23 +0,0 @@ -# $Id: ldapns.schema,v 1.3 2003/05/29 12:57:29 lukeh Exp $ - -# LDAP Name Service Additional Schema - -# http://www.iana.org/assignments/gssapi-service-names - -attributetype ( 1.3.6.1.4.1.5322.17.2.1 NAME 'authorizedService' - DESC 'IANA GSS-API authorized service name' - EQUALITY caseIgnoreMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -objectclass ( 1.3.6.1.4.1.5322.17.1.1 NAME 'authorizedServiceObject' - DESC 'Auxiliary object class for adding authorizedService attribute' - SUP top - AUXILIARY - MAY authorizedService ) - -objectclass ( 1.3.6.1.4.1.5322.17.1.2 NAME 'hostObject' - DESC 'Auxiliary object class for adding host attribute' - SUP top - AUXILIARY - MAY host ) - diff --git a/ldap/data/ldap_conf/schema/fusiondirectory/rfc2307bis.schema b/ldap/data/ldap_conf/schema/fusiondirectory/rfc2307bis.schema deleted file mode 100644 index db34365..0000000 --- a/ldap/data/ldap_conf/schema/fusiondirectory/rfc2307bis.schema +++ /dev/null @@ -1,288 +0,0 @@ -# builtin -# -#attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber' -# DESC 'An integer uniquely identifying a user in an administrative domain' -# EQUALITY integerMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 -# SINGLE-VALUE ) - -# builtin -# -#attributetype ( 1.3.6.1.1.1.1.1 NAME 'gidNumber' -# DESC 'An integer uniquely identifying a group in an -# administrative domain' -# EQUALITY integerMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 -# SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.2 NAME 'gecos' - DESC 'The GECOS field; the common name' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory' - DESC 'The absolute path to the home directory' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.4 NAME 'loginShell' - DESC 'The path to the login shell' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.6 NAME 'shadowMin' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.7 NAME 'shadowMax' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.8 NAME 'shadowWarning' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.9 NAME 'shadowInactive' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.10 NAME 'shadowExpire' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.11 NAME 'shadowFlag' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.12 NAME 'memberUid' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.13 NAME 'memberNisNetgroup' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' - DESC 'Netgroup triple' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.15 NAME 'ipServicePort' - DESC 'Service port number' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.16 NAME 'ipServiceProtocol' - DESC 'Service protocol name' - SUP name ) - -attributetype ( 1.3.6.1.1.1.1.17 NAME 'ipProtocolNumber' - DESC 'IP protocol number' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.18 NAME 'oncRpcNumber' - DESC 'ONC RPC number' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) -attributetype ( 1.3.6.1.1.1.1.19 NAME 'ipHostNumber' - DESC 'IPv4 addresses as a dotted decimal omitting leading - zeros or IPv6 addresses as defined in RFC2373' - SUP name ) - -attributetype ( 1.3.6.1.1.1.1.20 NAME 'ipNetworkNumber' - DESC 'IP network as a dotted decimal, eg. 192.168, - omitting leading zeros' - SUP name - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.21 NAME 'ipNetmaskNumber' - DESC 'IP netmask as a dotted decimal, eg. 255.255.255.0, - omitting leading zeros' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.22 NAME 'macAddress' - DESC 'MAC address in maximal, colon separated hex - notation, eg. 00:00:92:90:ee:e2' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.23 NAME 'bootParameter' - DESC 'rpc.bootparamd parameter' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.24 NAME 'bootFile' - DESC 'Boot image name' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.26 NAME 'nisMapName' - DESC 'Name of a A generic NIS map' - SUP name ) - -attributetype ( 1.3.6.1.1.1.1.27 NAME 'nisMapEntry' - DESC 'A generic NIS entry' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.28 NAME 'nisPublicKey' - DESC 'NIS public key' - EQUALITY octetStringMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.29 NAME 'nisSecretKey' - DESC 'NIS secret key' - EQUALITY octetStringMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.30 NAME 'nisDomain' - DESC 'NIS domain' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) - -attributetype ( 1.3.6.1.1.1.1.31 NAME 'automountMapName' - DESC 'automount Map Name' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.32 NAME 'automountKey' - DESC 'Automount Key value' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.33 NAME 'automountInformation' - DESC 'Automount information' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY - DESC 'Abstraction of an account with POSIX attributes' - MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) - MAY ( userPassword $ loginShell $ gecos $ - description ) ) - -objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' SUP top AUXILIARY - DESC 'Additional attributes for shadow passwords' - MUST uid - MAY ( userPassword $ description $ - shadowLastChange $ shadowMin $ shadowMax $ - shadowWarning $ shadowInactive $ - shadowExpire $ shadowFlag ) ) - -objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup' SUP top AUXILIARY - DESC 'Abstraction of a group of accounts' - MUST gidNumber - MAY ( userPassword $ memberUid $ - description ) ) - -objectclass ( 1.3.6.1.1.1.2.3 NAME 'ipService' SUP top STRUCTURAL - DESC 'Abstraction an Internet Protocol service. - Maps an IP port and protocol (such as tcp or udp) - to one or more names; the distinguished value of - the cn attribute denotes the services canonical - name' - MUST ( cn $ ipServicePort $ ipServiceProtocol ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.4 NAME 'ipProtocol' SUP top STRUCTURAL - DESC 'Abstraction of an IP protocol. Maps a protocol number - to one or more names. The distinguished value of the cn - attribute denotes the protocols canonical name' - MUST ( cn $ ipProtocolNumber ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.5 NAME 'oncRpc' SUP top STRUCTURAL - DESC 'Abstraction of an Open Network Computing (ONC) - [RFC1057] Remote Procedure Call (RPC) binding. - This class maps an ONC RPC number to a name. - The distinguished value of the cn attribute denotes - the RPC services canonical name' - MUST ( cn $ oncRpcNumber ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.6 NAME 'ipHost' SUP top AUXILIARY - DESC 'Abstraction of a host, an IP device. The distinguished - value of the cn attribute denotes the hosts canonical - name. Device SHOULD be used as a structural class' - MUST ( cn $ ipHostNumber ) - MAY ( userPassword $ l $ description $ manager ) ) - -objectclass ( 1.3.6.1.1.1.2.7 NAME 'ipNetwork' SUP top STRUCTURAL - DESC 'Abstraction of a network. The distinguished value of - the cn attribute denotes the networks canonical name' - MUST ipNetworkNumber - MAY ( cn $ ipNetmaskNumber $ l $ description $ manager ) ) - -objectclass ( 1.3.6.1.1.1.2.8 NAME 'nisNetgroup' SUP top STRUCTURAL - DESC 'Abstraction of a netgroup. May refer to other netgroups' - MUST cn - MAY ( nisNetgroupTriple $ memberNisNetgroup $ description ) ) - -objectclass ( 1.3.6.1.1.1.2.9 NAME 'nisMap' SUP top STRUCTURAL - DESC 'A generic abstraction of a NIS map' - MUST nisMapName - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.10 NAME 'nisObject' SUP top STRUCTURAL - DESC 'An entry in a NIS map' - MUST ( cn $ nisMapEntry $ nisMapName ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.11 NAME 'ieee802Device' SUP top AUXILIARY - DESC 'A device with a MAC address; device SHOULD be - used as a structural class' - MAY macAddress ) - -objectclass ( 1.3.6.1.1.1.2.12 NAME 'bootableDevice' SUP top AUXILIARY - DESC 'A device with boot parameters; device SHOULD be - used as a structural class' - MAY ( bootFile $ bootParameter ) ) - -objectclass ( 1.3.6.1.1.1.2.14 NAME 'nisKeyObject' SUP top AUXILIARY - DESC 'An object with a public and secret key' - MUST ( cn $ nisPublicKey $ nisSecretKey ) - MAY ( uidNumber $ description ) ) - -objectclass ( 1.3.6.1.1.1.2.15 NAME 'nisDomainObject' SUP top AUXILIARY - DESC 'Associates a NIS domain with a naming context' - MUST nisDomain ) - -objectclass ( 1.3.6.1.1.1.2.16 NAME 'automountMap' SUP top STRUCTURAL - MUST ( automountMapName ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.17 NAME 'automount' SUP top STRUCTURAL - DESC 'Automount information' - MUST ( automountKey $ automountInformation ) - MAY description ) -## namedObject is needed for groups without members -objectclass ( 1.3.6.1.4.1.5322.13.1.1 NAME 'namedObject' SUP top - STRUCTURAL MAY cn ) - diff --git a/ldap/data/ldap_conf/schema/fusiondirectory/template-fd.schema b/ldap/data/ldap_conf/schema/fusiondirectory/template-fd.schema deleted file mode 100644 index 2ac801b..0000000 --- a/ldap/data/ldap_conf/schema/fusiondirectory/template-fd.schema +++ /dev/null @@ -1,15 +0,0 @@ -## -## template-fd.schema - Needed by Fusion Directory for managing templates -## - -# Attributes -attributetype ( 1.3.6.1.4.1.38414.38.1.1 NAME 'fdTemplateField' - DESC 'FusionDirectory - template field' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) - -# Objectclasses -objectclass (1.3.6.1.4.1.38414.38.2.1 NAME 'fdTemplate' - DESC 'FusionDirectory - template object' - MUST ( cn ) - MAY ( fdTemplateField ) ) diff --git a/ldap/data/ldap_conf/schema/inetorgperson.ldif b/ldap/data/ldap_conf/schema/inetorgperson.ldif deleted file mode 100644 index ff7927c..0000000 --- a/ldap/data/ldap_conf/schema/inetorgperson.ldif +++ /dev/null @@ -1,69 +0,0 @@ -# InetOrgPerson (RFC2798) -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# InetOrgPerson (RFC2798) -# -# Depends upon -# Definition of an X.500 Attribute Type and an Object Class to Hold -# Uniform Resource Identifiers (URIs) [RFC2079] -# (core.ldif) -# -# A Summary of the X.500(96) User Schema for use with LDAPv3 [RFC2256] -# (core.ldif) -# -# The COSINE and Internet X.500 Schema [RFC1274] (cosine.ldif) -# -# This file was automatically generated from inetorgperson.schema; see -# that file for complete references. -# -dn: cn=inetorgperson,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: inetorgperson -olcAttributeTypes: ( 2.16.840.1.113730.3.1.1 NAME 'carLicense' DESC 'RFC279 - 8: vehicle license or registration plate' EQUALITY caseIgnoreMatch SUBSTR cas - eIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.2 NAME 'departmentNumber' DESC ' - RFC2798: identifies a department within an organization' EQUALITY caseIgnoreM - atch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.241 NAME 'displayName' DESC 'RFC - 2798: preferred name to be used when displaying entries' EQUALITY caseIgnoreM - atch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SI - NGLE-VALUE ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.3 NAME 'employeeNumber' DESC 'RF - C2798: numerically identifies an employee within an organization' EQUALITY ca - seIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.15 SINGLE-VALUE ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.4 NAME 'employeeType' DESC 'RFC2 - 798: type of employment for a person' EQUALITY caseIgnoreMatch SUBSTR caseIgn - oreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: ( 0.9.2342.19200300.100.1.60 NAME 'jpegPhoto' DESC 'RFC2 - 798: a JPEG image' SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.39 NAME 'preferredLanguage' DESC - 'RFC2798: preferred written or spoken language for a person' EQUALITY caseIg - noreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 15 SINGLE-VALUE ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.40 NAME 'userSMIMECertificate' D - ESC 'RFC2798: PKCS#7 SignedData used to support S/MIME' SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.5 ) -olcAttributeTypes: ( 2.16.840.1.113730.3.1.216 NAME 'userPKCS12' DESC 'RFC2 - 798: personal identity information, a PKCS #12 PFX' SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.5 ) -olcObjectClasses: ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2 - 798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY - ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ em - ployeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ ini - tials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo - $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ pre - ferredLanguage $ userSMIMECertificate $ userPKCS12 ) ) diff --git a/ldap/data/ldap_conf/schema/inetorgperson.schema b/ldap/data/ldap_conf/schema/inetorgperson.schema deleted file mode 100644 index 34c3bf8..0000000 --- a/ldap/data/ldap_conf/schema/inetorgperson.schema +++ /dev/null @@ -1,113 +0,0 @@ -# inetorgperson.schema -- InetOrgPerson (RFC2798) -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# InetOrgPerson (RFC2798) -# -# Depends upon -# Definition of an X.500 Attribute Type and an Object Class to Hold -# Uniform Resource Identifiers (URIs) [RFC2079] -# (core.schema) -# -# A Summary of the X.500(96) User Schema for use with LDAPv3 [RFC2256] -# (core.schema) -# -# The COSINE and Internet X.500 Schema [RFC1274] (cosine.schema) - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF RFC explaining the schema. Unfortunately, -# that text is covered by a license that doesn't meet Debian's Free -# Software Guidelines. This is a stripped version of the schema that -# contains only the functional schema definition, not the text of the -# RFC. -# -# For an explanation of this schema, see RFC 2798, at (among other -# places): http://www.ietf.org/rfc/rfc2798.txt - -attributetype ( 2.16.840.1.113730.3.1.1 - NAME 'carLicense' - DESC 'RFC2798: vehicle license or registration plate' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributetype ( 2.16.840.1.113730.3.1.2 - NAME 'departmentNumber' - DESC 'RFC2798: identifies a department within an organization' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributetype ( 2.16.840.1.113730.3.1.241 - NAME 'displayName' - DESC 'RFC2798: preferred name to be used when displaying entries' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 2.16.840.1.113730.3.1.3 - NAME 'employeeNumber' - DESC 'RFC2798: numerically identifies an employee within an organization' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 2.16.840.1.113730.3.1.4 - NAME 'employeeType' - DESC 'RFC2798: type of employment for a person' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributetype ( 0.9.2342.19200300.100.1.60 - NAME 'jpegPhoto' - DESC 'RFC2798: a JPEG image' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 ) - -attributetype ( 2.16.840.1.113730.3.1.39 - NAME 'preferredLanguage' - DESC 'RFC2798: preferred written or spoken language for a person' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -## OpenLDAP note: ";binary" transfer should NOT be used as syntax is binary -attributetype ( 2.16.840.1.113730.3.1.40 - NAME 'userSMIMECertificate' - DESC 'RFC2798: PKCS#7 SignedData used to support S/MIME' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 ) - -## OpenLDAP note: ";binary" transfer should NOT be used as syntax is binary -attributetype ( 2.16.840.1.113730.3.1.216 - NAME 'userPKCS12' - DESC 'RFC2798: personal identity information, a PKCS #12 PFX' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 ) - -objectclass ( 2.16.840.1.113730.3.2.2 - NAME 'inetOrgPerson' - DESC 'RFC2798: Internet Organizational Person' - SUP organizationalPerson - STRUCTURAL - MAY ( - audio $ businessCategory $ carLicense $ departmentNumber $ - displayName $ employeeNumber $ employeeType $ givenName $ - homePhone $ homePostalAddress $ initials $ jpegPhoto $ - labeledURI $ mail $ manager $ mobile $ o $ pager $ - photo $ roomNumber $ secretary $ uid $ userCertificate $ - x500uniqueIdentifier $ preferredLanguage $ - userSMIMECertificate $ userPKCS12 ) - ) diff --git a/ldap/data/ldap_conf/schema/java.ldif b/ldap/data/ldap_conf/schema/java.ldif deleted file mode 100644 index 61a185c..0000000 --- a/ldap/data/ldap_conf/schema/java.ldif +++ /dev/null @@ -1,59 +0,0 @@ -# java.ldif -- Java Object Schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Java Object Schema (defined in RFC 2713) -# depends upon core.ldif -# -# This file was automatically generated from java.schema; see that file -# for complete references. -# -dn: cn=java,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: java -olcAttributeTypes: {0}( 1.3.6.1.4.1.42.2.27.4.1.6 NAME 'javaClassName' DESC 'F - ully qualified name of distinguished Java class or interface' EQUALITY caseEx - actMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {1}( 1.3.6.1.4.1.42.2.27.4.1.7 NAME 'javaCodebase' DESC 'UR - L(s) specifying the location of class definition' EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {2}( 1.3.6.1.4.1.42.2.27.4.1.13 NAME 'javaClassNames' DESC - 'Fully qualified Java class or interface name' EQUALITY caseExactMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: {3}( 1.3.6.1.4.1.42.2.27.4.1.8 NAME 'javaSerializedData' DE - SC 'Serialized form of a Java object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SI - NGLE-VALUE ) -olcAttributeTypes: {4}( 1.3.6.1.4.1.42.2.27.4.1.10 NAME 'javaFactory' DESC 'Fu - lly qualified Java class name of a JNDI object factory' EQUALITY caseExactMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {5}( 1.3.6.1.4.1.42.2.27.4.1.11 NAME 'javaReferenceAddress' - DESC 'Addresses associated with a JNDI Reference' EQUALITY caseExactMatch SY - NTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: {6}( 1.3.6.1.4.1.42.2.27.4.1.12 NAME 'javaDoc' DESC 'The Ja - va documentation for the class' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1 - .1466.115.121.1.26 ) -olcObjectClasses: {0}( 1.3.6.1.4.1.42.2.27.4.2.1 NAME 'javaContainer' DESC 'Co - ntainer for a Java object' SUP top STRUCTURAL MUST cn ) -olcObjectClasses: {1}( 1.3.6.1.4.1.42.2.27.4.2.4 NAME 'javaObject' DESC 'Java - object representation' SUP top ABSTRACT MUST javaClassName MAY ( javaClassNam - es $ javaCodebase $ javaDoc $ description ) ) -olcObjectClasses: {2}( 1.3.6.1.4.1.42.2.27.4.2.5 NAME 'javaSerializedObject' D - ESC 'Java serialized object' SUP javaObject AUXILIARY MUST javaSerializedData - ) -olcObjectClasses: {3}( 1.3.6.1.4.1.42.2.27.4.2.8 NAME 'javaMarshalledObject' D - ESC 'Java marshalled object' SUP javaObject AUXILIARY MUST javaSerializedData - ) -olcObjectClasses: {4}( 1.3.6.1.4.1.42.2.27.4.2.7 NAME 'javaNamingReference' DE - SC 'JNDI reference' SUP javaObject AUXILIARY MAY ( javaReferenceAddress $ jav - aFactory ) ) diff --git a/ldap/data/ldap_conf/schema/java.schema b/ldap/data/ldap_conf/schema/java.schema deleted file mode 100644 index 24c1f1b..0000000 --- a/ldap/data/ldap_conf/schema/java.schema +++ /dev/null @@ -1,109 +0,0 @@ -# java.schema -- Java Object Schema -# $OpenLDAP: pkg/ldap/servers/slapd/schema/java.schema,v 1.5.2.3 2007/01/02 21:44:09 kurt Exp $ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2007 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Java Object Schema (defined in RFC 2713) -# depends upon core.schema -# - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF RFC explaining the schema. Unfortunately, -# that text is covered by a license that doesn't meet Debian's Free -# Software Guidelines. This is a stripped version of the schema that -# contains only the functional schema definition, not the text of the -# RFC. -# -# For an explanation of this schema, see RFC 2713, at (among other -# places): http://www.ietf.org/rfc/rfc2713.txt - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.6 - NAME 'javaClassName' - DESC 'Fully qualified name of distinguished Java class or interface' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.7 - NAME 'javaCodebase' - DESC 'URL(s) specifying the location of class definition' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.13 - NAME 'javaClassNames' - DESC 'Fully qualified Java class or interface name' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.8 - NAME 'javaSerializedData' - DESC 'Serialized form of a Java object' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.10 - NAME 'javaFactory' - DESC 'Fully qualified Java class name of a JNDI object factory' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.11 - NAME 'javaReferenceAddress' - DESC 'Addresses associated with a JNDI Reference' - EQUALITY caseExactMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) - -attributetype ( 1.3.6.1.4.1.42.2.27.4.1.12 - NAME 'javaDoc' - DESC 'The Java documentation for the class' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1 - NAME 'javaContainer' - DESC 'Container for a Java object' - SUP top - STRUCTURAL - MUST cn ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.4 - NAME 'javaObject' - DESC 'Java object representation' - SUP top - ABSTRACT - MUST javaClassName - MAY ( javaClassNames $ javaCodebase $ - javaDoc $ description ) ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.5 - NAME 'javaSerializedObject' - DESC 'Java serialized object' - SUP javaObject - AUXILIARY - MUST javaSerializedData ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.8 - NAME 'javaMarshalledObject' - DESC 'Java marshalled object' - SUP javaObject - AUXILIARY - MUST javaSerializedData ) - -objectclass ( 1.3.6.1.4.1.42.2.27.4.2.7 - NAME 'javaNamingReference' - DESC 'JNDI reference' - SUP javaObject - AUXILIARY - MAY ( javaReferenceAddress $ javaFactory ) ) diff --git a/ldap/data/ldap_conf/schema/misc.ldif b/ldap/data/ldap_conf/schema/misc.ldif deleted file mode 100644 index d2614bb..0000000 --- a/ldap/data/ldap_conf/schema/misc.ldif +++ /dev/null @@ -1,45 +0,0 @@ -# misc.ldif -- assorted schema definitions -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Assorted definitions from several sources, including -# ''works in progress''. Contents of this file are -# subject to change (including deletion) without notice. -# -# Not recommended for production use! -# Use with extreme caution! -# -# This file was automatically generated from misc.schema; see that file -# for complete references. -# -dn: cn=misc,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: misc -olcAttributeTypes: {0}( 2.16.840.1.113730.3.1.13 NAME 'mailLocalAddress' DESC - 'RFC822 email address of this recipient' EQUALITY caseIgnoreIA5Match SYNTAX 1 - .3.6.1.4.1.1466.115.121.1.26{256} ) -olcAttributeTypes: {1}( 2.16.840.1.113730.3.1.18 NAME 'mailHost' DESC 'FQDN of - the SMTP/MTA of this recipient' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4 - .1.1466.115.121.1.26{256} SINGLE-VALUE ) -olcAttributeTypes: {2}( 2.16.840.1.113730.3.1.47 NAME 'mailRoutingAddress' DES - C 'RFC822 routing address of this recipient' EQUALITY caseIgnoreIA5Match SYNT - AX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE ) -olcAttributeTypes: {3}( 1.3.6.1.4.1.42.2.27.2.1.15 NAME 'rfc822MailMember' DES - C 'rfc822 mail address of group member(s)' EQUALITY caseIgnoreIA5Match SYNTAX - 1.3.6.1.4.1.1466.115.121.1.26 ) -olcObjectClasses: {0}( 2.16.840.1.113730.3.2.147 NAME 'inetLocalMailRecipient' - DESC 'Internet local mail recipient' SUP top AUXILIARY MAY ( mailLocalAddres - s $ mailHost $ mailRoutingAddress ) ) -olcObjectClasses: {1}( 1.3.6.1.4.1.42.2.27.1.2.5 NAME 'nisMailAlias' DESC 'NIS - mail alias' SUP top STRUCTURAL MUST cn MAY rfc822MailMember ) diff --git a/ldap/data/ldap_conf/schema/misc.schema b/ldap/data/ldap_conf/schema/misc.schema deleted file mode 100644 index 999e25f..0000000 --- a/ldap/data/ldap_conf/schema/misc.schema +++ /dev/null @@ -1,75 +0,0 @@ -# misc.schema -- assorted schema definitions -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Assorted definitions from several sources, including -# ''works in progress''. Contents of this file are -# subject to change (including deletion) without notice. -# -# Not recommended for production use! -# Use with extreme caution! - -#----------------------------------------------------------- -# draft-lachman-laser-ldap-mail-routing-02.txt !!!EXPIRED!!! -# (a work in progress) -# -attributetype ( 2.16.840.1.113730.3.1.13 - NAME 'mailLocalAddress' - DESC 'RFC822 email address of this recipient' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) - -attributetype ( 2.16.840.1.113730.3.1.18 - NAME 'mailHost' - DESC 'FQDN of the SMTP/MTA of this recipient' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} - SINGLE-VALUE ) - -attributetype ( 2.16.840.1.113730.3.1.47 - NAME 'mailRoutingAddress' - DESC 'RFC822 routing address of this recipient' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} - SINGLE-VALUE ) - -# I-D leaves this OID TBD. -# iPlanet uses 2.16.840.1.113.730.3.2.147 but that is an -# improperly delegated OID. A typo is likely. -objectclass ( 2.16.840.1.113730.3.2.147 - NAME 'inetLocalMailRecipient' - DESC 'Internet local mail recipient' - SUP top AUXILIARY - MAY ( mailLocalAddress $ mailHost $ mailRoutingAddress ) ) - -#----------------------------------------------------------- -# draft-srivastava-ldap-mail-00.txt !!!EXPIRED!!! -# (a work in progress) -# -attributetype ( 1.3.6.1.4.1.42.2.27.2.1.15 - NAME 'rfc822MailMember' - DESC 'rfc822 mail address of group member(s)' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -#----------------------------------------------------------- -# !!!no I-D!!! -# (a work in progress) -# -objectclass ( 1.3.6.1.4.1.42.2.27.1.2.5 - NAME 'nisMailAlias' - DESC 'NIS mail alias' - SUP top STRUCTURAL - MUST cn - MAY rfc822MailMember ) diff --git a/ldap/data/ldap_conf/schema/nis.ldif b/ldap/data/ldap_conf/schema/nis.ldif deleted file mode 100644 index 32a63be..0000000 --- a/ldap/data/ldap_conf/schema/nis.ldif +++ /dev/null @@ -1,120 +0,0 @@ -# NIS (RFC2307) -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# Definitions from RFC2307 (Experimental) -# An Approach for Using LDAP as a Network Information Service -# -# Depends upon core.ldif and cosine.ldif -# -# This file was automatically generated from nis.schema; see that file -# for complete references. -# -dn: cn=nis,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: nis -olcAttributeTypes: ( 1.3.6.1.1.1.1.2 NAME 'gecos' DESC 'The GECOS field; th - e common name' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatc - h SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory' DESC 'The absolut - e path to the home directory' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1 - 466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.4 NAME 'loginShell' DESC 'The path to th - e login shell' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.2 - 6 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange' EQUALITY integ - erMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.6 NAME 'shadowMin' EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.7 NAME 'shadowMax' EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.8 NAME 'shadowWarning' EQUALITY integerM - atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.9 NAME 'shadowInactive' EQUALITY integer - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.10 NAME 'shadowExpire' EQUALITY integerM - atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.11 NAME 'shadowFlag' EQUALITY integerMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.12 NAME 'memberUid' EQUALITY caseExactI - A5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 26 ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.13 NAME 'memberNisNetgroup' EQUALITY ca - seExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.11 - 5.121.1.26 ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' DESC 'Netgr - oup triple' SYNTAX 1.3.6.1.1.1.0.0 ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.15 NAME 'ipServicePort' EQUALITY intege - rMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.16 NAME 'ipServiceProtocol' SUP name ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.17 NAME 'ipProtocolNumber' EQUALITY int - egerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.18 NAME 'oncRpcNumber' EQUALITY integer - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.19 NAME 'ipHostNumber' DESC 'IP address - ' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.20 NAME 'ipNetworkNumber' DESC 'IP netw - ork' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SI - NGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.21 NAME 'ipNetmaskNumber' DESC 'IP netm - ask' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SI - NGLE-VALUE ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.22 NAME 'macAddress' DESC 'MAC address' - EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.23 NAME 'bootParameter' DESC 'rpc.bootp - aramd parameter' SYNTAX 1.3.6.1.1.1.0.1 ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.24 NAME 'bootFile' DESC 'Boot image nam - e' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.26 NAME 'nisMapName' SUP name ) -olcAttributeTypes: ( 1.3.6.1.1.1.1.27 NAME 'nisMapEntry' EQUALITY caseExac - tIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121. - 1.26{1024} SINGLE-VALUE ) -olcObjectClasses: ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' DESC 'Abstraction o - f an account with POSIX attributes' SUP top AUXILIARY MUST ( cn $ uid $ uidNu - mber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ - description ) ) -olcObjectClasses: ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' DESC 'Additional a - ttributes for shadow passwords' SUP top AUXILIARY MUST uid MAY ( userPassword - $ shadowLastChange $ shadowMin $ shadowMax $ shadowWarning $ shadowInactive - $ shadowExpire $ shadowFlag $ description ) ) -olcObjectClasses: ( 1.3.6.1.1.1.2.2 NAME 'posixGroup' DESC 'Abstraction of - a group of accounts' SUP top STRUCTURAL MUST ( cn $ gidNumber ) MAY ( userPas - sword $ memberUid $ description ) ) -olcObjectClasses: ( 1.3.6.1.1.1.2.3 NAME 'ipService' DESC 'Abstraction an I - nternet Protocol service' SUP top STRUCTURAL MUST ( cn $ ipServicePort $ ipSe - rviceProtocol ) MAY description ) -olcObjectClasses: ( 1.3.6.1.1.1.2.4 NAME 'ipProtocol' DESC 'Abstraction of - an IP protocol' SUP top STRUCTURAL MUST ( cn $ ipProtocolNumber $ description - ) MAY description ) -olcObjectClasses: ( 1.3.6.1.1.1.2.5 NAME 'oncRpc' DESC 'Abstraction of an O - NC/RPC binding' SUP top STRUCTURAL MUST ( cn $ oncRpcNumber $ description ) M - AY description ) -olcObjectClasses: ( 1.3.6.1.1.1.2.6 NAME 'ipHost' DESC 'Abstraction of a ho - st, an IP device' SUP top AUXILIARY MUST ( cn $ ipHostNumber ) MAY ( l $ desc - ription $ manager ) ) -olcObjectClasses: ( 1.3.6.1.1.1.2.7 NAME 'ipNetwork' DESC 'Abstraction of a - n IP network' SUP top STRUCTURAL MUST ( cn $ ipNetworkNumber ) MAY ( ipNetmas - kNumber $ l $ description $ manager ) ) -olcObjectClasses: ( 1.3.6.1.1.1.2.8 NAME 'nisNetgroup' DESC 'Abstraction of - a netgroup' SUP top STRUCTURAL MUST cn MAY ( nisNetgroupTriple $ memberNisNe - tgroup $ description ) ) -olcObjectClasses: ( 1.3.6.1.1.1.2.9 NAME 'nisMap' DESC 'A generic abstracti - on of a NIS map' SUP top STRUCTURAL MUST nisMapName MAY description ) -olcObjectClasses: ( 1.3.6.1.1.1.2.10 NAME 'nisObject' DESC 'An entry in a - NIS map' SUP top STRUCTURAL MUST ( cn $ nisMapEntry $ nisMapName ) MAY descri - ption ) -olcObjectClasses: ( 1.3.6.1.1.1.2.11 NAME 'ieee802Device' DESC 'A device w - ith a MAC address' SUP top AUXILIARY MAY macAddress ) -olcObjectClasses: ( 1.3.6.1.1.1.2.12 NAME 'bootableDevice' DESC 'A device - with boot parameters' SUP top AUXILIARY MAY ( bootFile $ bootParameter ) ) diff --git a/ldap/data/ldap_conf/schema/nis.schema b/ldap/data/ldap_conf/schema/nis.schema deleted file mode 100644 index 9627277..0000000 --- a/ldap/data/ldap_conf/schema/nis.schema +++ /dev/null @@ -1,237 +0,0 @@ -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. - -# Definitions from RFC2307 (Experimental) -# An Approach for Using LDAP as a Network Information Service - -# Depends upon core.schema and cosine.schema - -# Note: The definitions in RFC2307 are given in syntaxes closely related -# to those in RFC2252, however, some liberties are taken that are not -# supported by RFC2252. This file has been written following RFC2252 -# strictly. - -# OID Base is iso(1) org(3) dod(6) internet(1) directory(1) nisSchema(1). -# i.e. nisSchema in RFC2307 is 1.3.6.1.1.1 -# -# Syntaxes are under 1.3.6.1.1.1.0 (two new syntaxes are defined) -# validaters for these syntaxes are incomplete, they only -# implement printable string validation (which is good as the -# common use of these syntaxes violates the specification). -# Attribute types are under 1.3.6.1.1.1.1 -# Object classes are under 1.3.6.1.1.1.2 - -# Attribute Type Definitions - -# builtin -#attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber' -# DESC 'An integer uniquely identifying a user in an administrative domain' -# EQUALITY integerMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -# builtin -#attributetype ( 1.3.6.1.1.1.1.1 NAME 'gidNumber' -# DESC 'An integer uniquely identifying a group in an administrative domain' -# EQUALITY integerMatch -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.2 NAME 'gecos' - DESC 'The GECOS field; the common name' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory' - DESC 'The absolute path to the home directory' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.4 NAME 'loginShell' - DESC 'The path to the login shell' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.6 NAME 'shadowMin' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.7 NAME 'shadowMax' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.8 NAME 'shadowWarning' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.9 NAME 'shadowInactive' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.10 NAME 'shadowExpire' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.11 NAME 'shadowFlag' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.12 NAME 'memberUid' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.13 NAME 'memberNisNetgroup' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' - DESC 'Netgroup triple' - SYNTAX 1.3.6.1.1.1.0.0 ) - -attributetype ( 1.3.6.1.1.1.1.15 NAME 'ipServicePort' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.16 NAME 'ipServiceProtocol' - SUP name ) - -attributetype ( 1.3.6.1.1.1.1.17 NAME 'ipProtocolNumber' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.18 NAME 'oncRpcNumber' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.19 NAME 'ipHostNumber' - DESC 'IP address' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) - -attributetype ( 1.3.6.1.1.1.1.20 NAME 'ipNetworkNumber' - DESC 'IP network' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.21 NAME 'ipNetmaskNumber' - DESC 'IP netmask' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SINGLE-VALUE ) - -attributetype ( 1.3.6.1.1.1.1.22 NAME 'macAddress' - DESC 'MAC address' - EQUALITY caseIgnoreIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) - -attributetype ( 1.3.6.1.1.1.1.23 NAME 'bootParameter' - DESC 'rpc.bootparamd parameter' - SYNTAX 1.3.6.1.1.1.0.1 ) - -attributetype ( 1.3.6.1.1.1.1.24 NAME 'bootFile' - DESC 'Boot image name' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( 1.3.6.1.1.1.1.26 NAME 'nisMapName' - SUP name ) - -attributetype ( 1.3.6.1.1.1.1.27 NAME 'nisMapEntry' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} SINGLE-VALUE ) - -# Object Class Definitions - -objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' - DESC 'Abstraction of an account with POSIX attributes' - SUP top AUXILIARY - MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) - MAY ( userPassword $ loginShell $ gecos $ description ) ) - -objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' - DESC 'Additional attributes for shadow passwords' - SUP top AUXILIARY - MUST uid - MAY ( userPassword $ shadowLastChange $ shadowMin $ - shadowMax $ shadowWarning $ shadowInactive $ - shadowExpire $ shadowFlag $ description ) ) - -objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup' - DESC 'Abstraction of a group of accounts' - SUP top STRUCTURAL - MUST ( cn $ gidNumber ) - MAY ( userPassword $ memberUid $ description ) ) - -objectclass ( 1.3.6.1.1.1.2.3 NAME 'ipService' - DESC 'Abstraction an Internet Protocol service' - SUP top STRUCTURAL - MUST ( cn $ ipServicePort $ ipServiceProtocol ) - MAY ( description ) ) - -objectclass ( 1.3.6.1.1.1.2.4 NAME 'ipProtocol' - DESC 'Abstraction of an IP protocol' - SUP top STRUCTURAL - MUST ( cn $ ipProtocolNumber $ description ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.5 NAME 'oncRpc' - DESC 'Abstraction of an ONC/RPC binding' - SUP top STRUCTURAL - MUST ( cn $ oncRpcNumber $ description ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.6 NAME 'ipHost' - DESC 'Abstraction of a host, an IP device' - SUP top AUXILIARY - MUST ( cn $ ipHostNumber ) - MAY ( l $ description $ manager ) ) - -objectclass ( 1.3.6.1.1.1.2.7 NAME 'ipNetwork' - DESC 'Abstraction of an IP network' - SUP top STRUCTURAL - MUST ( cn $ ipNetworkNumber ) - MAY ( ipNetmaskNumber $ l $ description $ manager ) ) - -objectclass ( 1.3.6.1.1.1.2.8 NAME 'nisNetgroup' - DESC 'Abstraction of a netgroup' - SUP top STRUCTURAL - MUST cn - MAY ( nisNetgroupTriple $ memberNisNetgroup $ description ) ) - -objectclass ( 1.3.6.1.1.1.2.9 NAME 'nisMap' - DESC 'A generic abstraction of a NIS map' - SUP top STRUCTURAL - MUST nisMapName - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.10 NAME 'nisObject' - DESC 'An entry in a NIS map' - SUP top STRUCTURAL - MUST ( cn $ nisMapEntry $ nisMapName ) - MAY description ) - -objectclass ( 1.3.6.1.1.1.2.11 NAME 'ieee802Device' - DESC 'A device with a MAC address' - SUP top AUXILIARY - MAY macAddress ) - -objectclass ( 1.3.6.1.1.1.2.12 NAME 'bootableDevice' - DESC 'A device with boot parameters' - SUP top AUXILIARY - MAY ( bootFile $ bootParameter ) ) diff --git a/ldap/data/ldap_conf/schema/openldap.ldif b/ldap/data/ldap_conf/schema/openldap.ldif deleted file mode 100644 index f9f250f..0000000 --- a/ldap/data/ldap_conf/schema/openldap.ldif +++ /dev/null @@ -1,88 +0,0 @@ -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -# -# OpenLDAP Project's directory schema items -# -# depends upon: -# core.schema -# cosine.schema -# inetorgperson.schema -# -# These are provided for informational purposes only. -# -# This openldap.ldif file is provided as a demonstration of how to -# convert a *.schema file into *.ldif format. The key points: -# In LDIF, a blank line terminates an entry. Blank lines in a *.schema -# file should be replaced with a single '#' to turn them into -# comments, or they should just be removed. -# In addition to the actual schema directives, the file needs a small -# header to make it a valid LDAP entry. This header must provide the -# dn of the entry, the objectClass, and the cn, as shown here: -# -dn: cn=openldap,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: openldap -# -# The schema directives need to be changed to LDAP Attributes. -# First a basic string substitution can be done on each of the keywords: -# objectIdentifier -> olcObjectIdentifier: -# objectClass -> olcObjectClasses: -# attributeType -> olcAttributeTypes: -# Then leading whitespace must be fixed. The slapd.conf format allows -# tabs or spaces to denote line continuation, while LDIF only allows -# the space character. -# Also slapd.conf preserves the continuation character, while LDIF strips -# it out. So a single TAB/SPACE in slapd.conf must be replaced with -# two SPACEs in LDIF, otherwise the continued text may get joined as -# a single word. -# The directives must be listed in a proper sequence: -# All olcObjectIdentifiers must be first, so they may be referenced by -# any following definitions. -# All olcAttributeTypes must be next, so they may be referenced by any -# following objectClass definitions. -# All olcObjectClasses must be after the olcAttributeTypes. -# And of course, any superior must occur before anything that inherits -# from it. -# -olcObjectIdentifier: OpenLDAProot 1.3.6.1.4.1.4203 -# -olcObjectIdentifier: OpenLDAP OpenLDAProot:1 -olcObjectIdentifier: OpenLDAPattributeType OpenLDAP:3 -olcObjectIdentifier: OpenLDAPobjectClass OpenLDAP:4 -# -olcObjectClasses: ( OpenLDAPobjectClass:3 - NAME 'OpenLDAPorg' - DESC 'OpenLDAP Organizational Object' - SUP organization - MAY ( buildingName $ displayName $ labeledURI ) ) -# -olcObjectClasses: ( OpenLDAPobjectClass:4 - NAME 'OpenLDAPou' - DESC 'OpenLDAP Organizational Unit Object' - SUP organizationalUnit - MAY ( buildingName $ displayName $ labeledURI $ o ) ) -# -olcObjectClasses: ( OpenLDAPobjectClass:5 - NAME 'OpenLDAPperson' - DESC 'OpenLDAP Person' - SUP ( pilotPerson $ inetOrgPerson ) - MUST ( uid $ cn ) - MAY ( givenName $ labeledURI $ o ) ) -# -olcObjectClasses: ( OpenLDAPobjectClass:6 - NAME 'OpenLDAPdisplayableObject' - DESC 'OpenLDAP Displayable Object' - AUXILIARY - MAY displayName ) diff --git a/ldap/data/ldap_conf/schema/openldap.schema b/ldap/data/ldap_conf/schema/openldap.schema deleted file mode 100644 index 9f7466d..0000000 --- a/ldap/data/ldap_conf/schema/openldap.schema +++ /dev/null @@ -1,54 +0,0 @@ -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. - -# -# OpenLDAP Project's directory schema items -# -# depends upon: -# core.schema -# cosine.schema -# inetorgperson.schema -# -# These are provided for informational purposes only. - -objectIdentifier OpenLDAProot 1.3.6.1.4.1.4203 - -objectIdentifier OpenLDAP OpenLDAProot:1 -objectIdentifier OpenLDAPattributeType OpenLDAP:3 -objectIdentifier OpenLDAPobjectClass OpenLDAP:4 - -objectClass ( OpenLDAPobjectClass:3 - NAME 'OpenLDAPorg' - DESC 'OpenLDAP Organizational Object' - SUP organization - MAY ( buildingName $ displayName $ labeledURI ) ) - -objectClass ( OpenLDAPobjectClass:4 - NAME 'OpenLDAPou' - DESC 'OpenLDAP Organizational Unit Object' - SUP organizationalUnit - MAY ( buildingName $ displayName $ labeledURI $ o ) ) - -objectClass ( OpenLDAPobjectClass:5 - NAME 'OpenLDAPperson' - DESC 'OpenLDAP Person' - SUP ( pilotPerson $ inetOrgPerson ) - MUST ( uid $ cn ) - MAY ( givenName $ labeledURI $ o ) ) - -objectClass ( OpenLDAPobjectClass:6 - NAME 'OpenLDAPdisplayableObject' - DESC 'OpenLDAP Displayable Object' - AUXILIARY - MAY displayName ) diff --git a/ldap/data/ldap_conf/schema/pmi.ldif b/ldap/data/ldap_conf/schema/pmi.ldif deleted file mode 100644 index c567f26..0000000 --- a/ldap/data/ldap_conf/schema/pmi.ldif +++ /dev/null @@ -1,123 +0,0 @@ -# OpenLDAP X.509 PMI schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -## Portions Copyright (C) The Internet Society (1997-2006). -## All Rights Reserved. -# -# Includes LDAPv3 schema items from: -# ITU X.509 (08/2005) -# -# This file was automatically generated from pmi.schema; see that file -# for complete references. -# -dn: cn=pmi,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: pmi -olcObjectIdentifier: {0}id-oc-pmiUser 2.5.6.24 -olcObjectIdentifier: {1}id-oc-pmiAA 2.5.6.25 -olcObjectIdentifier: {2}id-oc-pmiSOA 2.5.6.26 -olcObjectIdentifier: {3}id-oc-attCertCRLDistributionPts 2.5.6.27 -olcObjectIdentifier: {4}id-oc-privilegePolicy 2.5.6.32 -olcObjectIdentifier: {5}id-oc-pmiDelegationPath 2.5.6.33 -olcObjectIdentifier: {6}id-oc-protectedPrivilegePolicy 2.5.6.34 -olcObjectIdentifier: {7}id-at-attributeCertificate 2.5.4.58 -olcObjectIdentifier: {8}id-at-attributeCertificateRevocationList 2.5.4.59 -olcObjectIdentifier: {9}id-at-aACertificate 2.5.4.61 -olcObjectIdentifier: {10}id-at-attributeDescriptorCertificate 2.5.4.62 -olcObjectIdentifier: {11}id-at-attributeAuthorityRevocationList 2.5.4.63 -olcObjectIdentifier: {12}id-at-privPolicy 2.5.4.71 -olcObjectIdentifier: {13}id-at-role 2.5.4.72 -olcObjectIdentifier: {14}id-at-delegationPath 2.5.4.73 -olcObjectIdentifier: {15}id-at-protPrivPolicy 2.5.4.74 -olcObjectIdentifier: {16}id-at-xMLPrivilegeInfo 2.5.4.75 -olcObjectIdentifier: {17}id-at-xMLPprotPrivPolicy 2.5.4.76 -olcObjectIdentifier: {18}id-mr 2.5.13 -olcObjectIdentifier: {19}id-mr-attributeCertificateMatch id-mr:42 -olcObjectIdentifier: {20}id-mr-attributeCertificateExactMatch id-mr:45 -olcObjectIdentifier: {21}id-mr-holderIssuerMatch id-mr:46 -olcObjectIdentifier: {22}id-mr-authAttIdMatch id-mr:53 -olcObjectIdentifier: {23}id-mr-roleSpecCertIdMatch id-mr:54 -olcObjectIdentifier: {24}id-mr-basicAttConstraintsMatch id-mr:55 -olcObjectIdentifier: {25}id-mr-delegatedNameConstraintsMatch id-mr:56 -olcObjectIdentifier: {26}id-mr-timeSpecMatch id-mr:57 -olcObjectIdentifier: {27}id-mr-attDescriptorMatch id-mr:58 -olcObjectIdentifier: {28}id-mr-acceptableCertPoliciesMatch id-mr:59 -olcObjectIdentifier: {29}id-mr-delegationPathMatch id-mr:61 -olcObjectIdentifier: {30}id-mr-sOAIdentifierMatch id-mr:66 -olcObjectIdentifier: {31}id-mr-indirectIssuerMatch id-mr:67 -olcObjectIdentifier: {32}AttributeCertificate 1.3.6.1.4.1.4203.666.11.10.2.1 -olcObjectIdentifier: {33}CertificateList 1.3.6.1.4.1.1466.115.121.1.9 -olcObjectIdentifier: {34}AttCertPath 1.3.6.1.4.1.4203.666.11.10.2.4 -olcObjectIdentifier: {35}PolicySyntax 1.3.6.1.4.1.4203.666.11.10.2.5 -olcObjectIdentifier: {36}RoleSyntax 1.3.6.1.4.1.4203.666.11.10.2.6 -olcLdapSyntaxes: {0}( 1.3.6.1.4.1.4203.666.11.10.2.4 DESC 'X.509 PMI attribute - cartificate path: SEQUENCE OF AttributeCertificate' X-SUBST '1.3.6.1.4.1.146 - 6.115.121.1.15' ) -olcLdapSyntaxes: {1}( 1.3.6.1.4.1.4203.666.11.10.2.5 DESC 'X.509 PMI policy sy - ntax' X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' ) -olcLdapSyntaxes: {2}( 1.3.6.1.4.1.4203.666.11.10.2.6 DESC 'X.509 PMI role synt - ax' X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' ) -olcAttributeTypes: {0}( id-at-role NAME 'role' DESC 'X.509 Role attribute, use - ;binary' SYNTAX RoleSyntax ) -olcAttributeTypes: {1}( id-at-xMLPrivilegeInfo NAME 'xmlPrivilegeInfo' DESC 'X - .509 XML privilege information attribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.1 - 5 ) -olcAttributeTypes: {2}( id-at-attributeCertificate NAME 'attributeCertificateA - ttribute' DESC 'X.509 Attribute certificate attribute, use ;binary' EQUALITY - attributeCertificateExactMatch SYNTAX AttributeCertificate ) -olcAttributeTypes: {3}( id-at-aACertificate NAME 'aACertificate' DESC 'X.509 A - A certificate attribute, use ;binary' EQUALITY attributeCertificateExactMatch - SYNTAX AttributeCertificate ) -olcAttributeTypes: {4}( id-at-attributeDescriptorCertificate NAME 'attributeDe - scriptorCertificate' DESC 'X.509 Attribute descriptor certificate attribute, - use ;binary' EQUALITY attributeCertificateExactMatch SYNTAX AttributeCertific - ate ) -olcAttributeTypes: {5}( id-at-attributeCertificateRevocationList NAME 'attribu - teCertificateRevocationList' DESC 'X.509 Attribute certificate revocation lis - t attribute, use ;binary' SYNTAX CertificateList X-EQUALITY 'certificateListE - xactMatch, not implemented yet' ) -olcAttributeTypes: {6}( id-at-attributeAuthorityRevocationList NAME 'attribute - AuthorityRevocationList' DESC 'X.509 AA certificate revocation list attribute - , use ;binary' SYNTAX CertificateList X-EQUALITY 'certificateListExactMatch, - not implemented yet' ) -olcAttributeTypes: {7}( id-at-delegationPath NAME 'delegationPath' DESC 'X.509 - Delegation path attribute, use ;binary' SYNTAX AttCertPath ) -olcAttributeTypes: {8}( id-at-privPolicy NAME 'privPolicy' DESC 'X.509 Privile - ge policy attribute, use ;binary' SYNTAX PolicySyntax ) -olcAttributeTypes: {9}( id-at-protPrivPolicy NAME 'protPrivPolicy' DESC 'X.509 - Protected privilege policy attribute, use ;binary' EQUALITY attributeCertifi - cateExactMatch SYNTAX AttributeCertificate ) -olcAttributeTypes: {10}( id-at-xMLPprotPrivPolicy NAME 'xmlPrivPolicy' DESC 'X - .509 XML Protected privilege policy attribute' SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.15 ) -olcObjectClasses: {0}( id-oc-pmiUser NAME 'pmiUser' DESC 'X.509 PMI user objec - t class' SUP top AUXILIARY MAY attributeCertificateAttribute ) -olcObjectClasses: {1}( id-oc-pmiAA NAME 'pmiAA' DESC 'X.509 PMI AA object clas - s' SUP top AUXILIARY MAY ( aACertificate $ attributeCertificateRevocationList - $ attributeAuthorityRevocationList ) ) -olcObjectClasses: {2}( id-oc-pmiSOA NAME 'pmiSOA' DESC 'X.509 PMI SOA object c - lass' SUP top AUXILIARY MAY ( attributeCertificateRevocationList $ attributeA - uthorityRevocationList $ attributeDescriptorCertificate ) ) -olcObjectClasses: {3}( id-oc-attCertCRLDistributionPts NAME 'attCertCRLDistrib - utionPt' DESC 'X.509 Attribute certificate CRL distribution point object clas - s' SUP top AUXILIARY MAY ( attributeCertificateRevocationList $ attributeAuth - orityRevocationList ) ) -olcObjectClasses: {4}( id-oc-pmiDelegationPath NAME 'pmiDelegationPath' DESC ' - X.509 PMI delegation path' SUP top AUXILIARY MAY delegationPath ) -olcObjectClasses: {5}( id-oc-privilegePolicy NAME 'privilegePolicy' DESC 'X.50 - 9 Privilege policy object class' SUP top AUXILIARY MAY privPolicy ) -olcObjectClasses: {6}( id-oc-protectedPrivilegePolicy NAME 'protectedPrivilege - Policy' DESC 'X.509 Protected privilege policy object class' SUP top AUXILIAR - Y MAY protPrivPolicy ) diff --git a/ldap/data/ldap_conf/schema/pmi.schema b/ldap/data/ldap_conf/schema/pmi.schema deleted file mode 100644 index bc3ca0b..0000000 --- a/ldap/data/ldap_conf/schema/pmi.schema +++ /dev/null @@ -1,476 +0,0 @@ -# OpenLDAP X.509 PMI schema -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 1998-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text claiming copyright by the Internet Society and including -# the IETF RFC license, which does not meet Debian's Free Software -# Guidelines. However, apart from short and obvious comments, the text of -# this file is purely a functional interface specification, which is not -# subject to that license and is not copyrightable under US law. -# -# The license statement is retained below so as not to remove credit, but -# as best as we can determine, it is not applicable to the contents of -# this file. - -## Portions Copyright (C) The Internet Society (1997-2006). -## All Rights Reserved. -## -## This document and translations of it may be copied and furnished to -## others, and derivative works that comment on or otherwise explain it -## or assist in its implementation may be prepared, copied, published -## and distributed, in whole or in part, without restriction of any -## kind, provided that the above copyright notice and this paragraph are -## included on all such copies and derivative works. However, this -## document itself may not be modified in any way, such as by removing -## the copyright notice or references to the Internet Society or other -## Internet organizations, except as needed for the purpose of -## developing Internet standards in which case the procedures for -## copyrights defined in the Internet Standards process must be -## followed, or as required to translate it into languages other than -## English. -## -## The limited permissions granted above are perpetual and will not be -## revoked by the Internet Society or its successors or assigns. -## -## This document and the information contained herein is provided on an -## "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING -## TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING -## BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION -## HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF -## MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -# -# -# Includes LDAPv3 schema items from: -# ITU X.509 (08/2005) -# -## X.509 (08/2005) pp. 120-121 -## -## -- object identifier assignments -- -## -- object classes -- -## id-oc-pmiUser OBJECT IDENTIFIER ::= {id-oc 24} -## id-oc-pmiAA OBJECT IDENTIFIER ::= {id-oc 25} -## id-oc-pmiSOA OBJECT IDENTIFIER ::= {id-oc 26} -## id-oc-attCertCRLDistributionPts OBJECT IDENTIFIER ::= {id-oc 27} -## id-oc-privilegePolicy OBJECT IDENTIFIER ::= {id-oc 32} -## id-oc-pmiDelegationPath OBJECT IDENTIFIER ::= {id-oc 33} -## id-oc-protectedPrivilegePolicy OBJECT IDENTIFIER ::= {id-oc 34} -## -- directory attributes -- -## id-at-attributeCertificate OBJECT IDENTIFIER ::= {id-at 58} -## id-at-attributeCertificateRevocationList OBJECT IDENTIFIER ::= {id-at 59} -## id-at-aACertificate OBJECT IDENTIFIER ::= {id-at 61} -## id-at-attributeDescriptorCertificate OBJECT IDENTIFIER ::= {id-at 62} -## id-at-attributeAuthorityRevocationList OBJECT IDENTIFIER ::= {id-at 63} -## id-at-privPolicy OBJECT IDENTIFIER ::= {id-at 71} -## id-at-role OBJECT IDENTIFIER ::= {id-at 72} -## id-at-delegationPath OBJECT IDENTIFIER ::= {id-at 73} -## id-at-protPrivPolicy OBJECT IDENTIFIER ::= {id-at 74} -## id-at-xMLPrivilegeInfo OBJECT IDENTIFIER ::= {id-at 75} -## id-at-xMLPprotPrivPolicy OBJECT IDENTIFIER ::= {id-at 76} -## -- attribute certificate extensions -- -## id-ce-authorityAttributeIdentifier OBJECT IDENTIFIER ::= {id-ce 38} -## id-ce-roleSpecCertIdentifier OBJECT IDENTIFIER ::= {id-ce 39} -## id-ce-basicAttConstraints OBJECT IDENTIFIER ::= {id-ce 41} -## id-ce-delegatedNameConstraints OBJECT IDENTIFIER ::= {id-ce 42} -## id-ce-timeSpecification OBJECT IDENTIFIER ::= {id-ce 43} -## id-ce-attributeDescriptor OBJECT IDENTIFIER ::= {id-ce 48} -## id-ce-userNotice OBJECT IDENTIFIER ::= {id-ce 49} -## id-ce-sOAIdentifier OBJECT IDENTIFIER ::= {id-ce 50} -## id-ce-acceptableCertPolicies OBJECT IDENTIFIER ::= {id-ce 52} -## id-ce-targetInformation OBJECT IDENTIFIER ::= {id-ce 55} -## id-ce-noRevAvail OBJECT IDENTIFIER ::= {id-ce 56} -## id-ce-acceptablePrivilegePolicies OBJECT IDENTIFIER ::= {id-ce 57} -## id-ce-indirectIssuer OBJECT IDENTIFIER ::= {id-ce 61} -## id-ce-noAssertion OBJECT IDENTIFIER ::= {id-ce 62} -## id-ce-issuedOnBehalfOf OBJECT IDENTIFIER ::= {id-ce 64} -## -- PMI matching rules -- -## id-mr-attributeCertificateMatch OBJECT IDENTIFIER ::= {id-mr 42} -## id-mr-attributeCertificateExactMatch OBJECT IDENTIFIER ::= {id-mr 45} -## id-mr-holderIssuerMatch OBJECT IDENTIFIER ::= {id-mr 46} -## id-mr-authAttIdMatch OBJECT IDENTIFIER ::= {id-mr 53} -## id-mr-roleSpecCertIdMatch OBJECT IDENTIFIER ::= {id-mr 54} -## id-mr-basicAttConstraintsMatch OBJECT IDENTIFIER ::= {id-mr 55} -## id-mr-delegatedNameConstraintsMatch OBJECT IDENTIFIER ::= {id-mr 56} -## id-mr-timeSpecMatch OBJECT IDENTIFIER ::= {id-mr 57} -## id-mr-attDescriptorMatch OBJECT IDENTIFIER ::= {id-mr 58} -## id-mr-acceptableCertPoliciesMatch OBJECT IDENTIFIER ::= {id-mr 59} -## id-mr-delegationPathMatch OBJECT IDENTIFIER ::= {id-mr 61} -## id-mr-sOAIdentifierMatch OBJECT IDENTIFIER ::= {id-mr 66} -## id-mr-indirectIssuerMatch OBJECT IDENTIFIER ::= {id-mr 67} -## -## -## X.509 (08/2005) pp. 71, 86-89 -## -## 14.4.1 Role attribute -## role ATTRIBUTE ::= { -## WITH SYNTAX RoleSyntax -## ID id-at-role } -## RoleSyntax ::= SEQUENCE { -## roleAuthority [0] GeneralNames OPTIONAL, -## roleName [1] GeneralName } -## -## 14.5 XML privilege information attribute -## xmlPrivilegeInfo ATTRIBUTE ::= { -## WITH SYNTAX UTF8String -- contains XML-encoded privilege information -## ID id-at-xMLPrivilegeInfo } -## -## 17.1 PMI directory object classes -## -## 17.1.1 PMI user object class -## pmiUser OBJECT-CLASS ::= { -## -- a PMI user (i.e., a "holder") -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN {attributeCertificateAttribute} -## ID id-oc-pmiUser } -## -## 17.1.2 PMI AA object class -## pmiAA OBJECT-CLASS ::= { -## -- a PMI AA -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN {aACertificate | -## attributeCertificateRevocationList | -## attributeAuthorityRevocationList} -## ID id-oc-pmiAA } -## -## 17.1.3 PMI SOA object class -## pmiSOA OBJECT-CLASS ::= { -- a PMI Source of Authority -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN {attributeCertificateRevocationList | -## attributeAuthorityRevocationList | -## attributeDescriptorCertificate} -## ID id-oc-pmiSOA } -## -## 17.1.4 Attribute certificate CRL distribution point object class -## attCertCRLDistributionPt OBJECT-CLASS ::= { -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN { attributeCertificateRevocationList | -## attributeAuthorityRevocationList } -## ID id-oc-attCertCRLDistributionPts } -## -## 17.1.5 PMI delegation path -## pmiDelegationPath OBJECT-CLASS ::= { -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN { delegationPath } -## ID id-oc-pmiDelegationPath } -## -## 17.1.6 Privilege policy object class -## privilegePolicy OBJECT-CLASS ::= { -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN {privPolicy } -## ID id-oc-privilegePolicy } -## -## 17.1.7 Protected privilege policy object class -## protectedPrivilegePolicy OBJECT-CLASS ::= { -## SUBCLASS OF {top} -## KIND auxiliary -## MAY CONTAIN {protPrivPolicy } -## ID id-oc-protectedPrivilegePolicy } -## -## 17.2 PMI Directory attributes -## -## 17.2.1 Attribute certificate attribute -## attributeCertificateAttribute ATTRIBUTE ::= { -## WITH SYNTAX AttributeCertificate -## EQUALITY MATCHING RULE attributeCertificateExactMatch -## ID id-at-attributeCertificate } -## -## 17.2.2 AA certificate attribute -## aACertificate ATTRIBUTE ::= { -## WITH SYNTAX AttributeCertificate -## EQUALITY MATCHING RULE attributeCertificateExactMatch -## ID id-at-aACertificate } -## -## 17.2.3 Attribute descriptor certificate attribute -## attributeDescriptorCertificate ATTRIBUTE ::= { -## WITH SYNTAX AttributeCertificate -## EQUALITY MATCHING RULE attributeCertificateExactMatch -## ID id-at-attributeDescriptorCertificate } -## -## 17.2.4 Attribute certificate revocation list attribute -## attributeCertificateRevocationList ATTRIBUTE ::= { -## WITH SYNTAX CertificateList -## EQUALITY MATCHING RULE certificateListExactMatch -## ID id-at-attributeCertificateRevocationList} -## -## 17.2.5 AA certificate revocation list attribute -## attributeAuthorityRevocationList ATTRIBUTE ::= { -## WITH SYNTAX CertificateList -## EQUALITY MATCHING RULE certificateListExactMatch -## ID id-at-attributeAuthorityRevocationList } -## -## 17.2.6 Delegation path attribute -## delegationPath ATTRIBUTE ::= { -## WITH SYNTAX AttCertPath -## ID id-at-delegationPath } -## AttCertPath ::= SEQUENCE OF AttributeCertificate -## -## 17.2.7 Privilege policy attribute -## privPolicy ATTRIBUTE ::= { -## WITH SYNTAX PolicySyntax -## ID id-at-privPolicy } -## -## 17.2.8 Protected privilege policy attribute -## protPrivPolicy ATTRIBUTE ::= { -## WITH SYNTAX AttributeCertificate -## EQUALITY MATCHING RULE attributeCertificateExactMatch -## ID id-at-protPrivPolicy } -## -## 17.2.9 XML Protected privilege policy attribute -## xmlPrivPolicy ATTRIBUTE ::= { -## WITH SYNTAX UTF8String -- contains XML-encoded privilege policy information -## ID id-at-xMLPprotPrivPolicy } -## - -## -- object identifier assignments -- -## -- object classes -- -objectidentifier id-oc-pmiUser 2.5.6.24 -objectidentifier id-oc-pmiAA 2.5.6.25 -objectidentifier id-oc-pmiSOA 2.5.6.26 -objectidentifier id-oc-attCertCRLDistributionPts 2.5.6.27 -objectidentifier id-oc-privilegePolicy 2.5.6.32 -objectidentifier id-oc-pmiDelegationPath 2.5.6.33 -objectidentifier id-oc-protectedPrivilegePolicy 2.5.6.34 -## -- directory attributes -- -objectidentifier id-at-attributeCertificate 2.5.4.58 -objectidentifier id-at-attributeCertificateRevocationList 2.5.4.59 -objectidentifier id-at-aACertificate 2.5.4.61 -objectidentifier id-at-attributeDescriptorCertificate 2.5.4.62 -objectidentifier id-at-attributeAuthorityRevocationList 2.5.4.63 -objectidentifier id-at-privPolicy 2.5.4.71 -objectidentifier id-at-role 2.5.4.72 -objectidentifier id-at-delegationPath 2.5.4.73 -objectidentifier id-at-protPrivPolicy 2.5.4.74 -objectidentifier id-at-xMLPrivilegeInfo 2.5.4.75 -objectidentifier id-at-xMLPprotPrivPolicy 2.5.4.76 -## -- attribute certificate extensions -- -## id-ce-authorityAttributeIdentifier OBJECT IDENTIFIER ::= {id-ce 38} -## id-ce-roleSpecCertIdentifier OBJECT IDENTIFIER ::= {id-ce 39} -## id-ce-basicAttConstraints OBJECT IDENTIFIER ::= {id-ce 41} -## id-ce-delegatedNameConstraints OBJECT IDENTIFIER ::= {id-ce 42} -## id-ce-timeSpecification OBJECT IDENTIFIER ::= {id-ce 43} -## id-ce-attributeDescriptor OBJECT IDENTIFIER ::= {id-ce 48} -## id-ce-userNotice OBJECT IDENTIFIER ::= {id-ce 49} -## id-ce-sOAIdentifier OBJECT IDENTIFIER ::= {id-ce 50} -## id-ce-acceptableCertPolicies OBJECT IDENTIFIER ::= {id-ce 52} -## id-ce-targetInformation OBJECT IDENTIFIER ::= {id-ce 55} -## id-ce-noRevAvail OBJECT IDENTIFIER ::= {id-ce 56} -## id-ce-acceptablePrivilegePolicies OBJECT IDENTIFIER ::= {id-ce 57} -## id-ce-indirectIssuer OBJECT IDENTIFIER ::= {id-ce 61} -## id-ce-noAssertion OBJECT IDENTIFIER ::= {id-ce 62} -## id-ce-issuedOnBehalfOf OBJECT IDENTIFIER ::= {id-ce 64} -## -- PMI matching rules -- -objectidentifier id-mr 2.5.13 -objectidentifier id-mr-attributeCertificateMatch id-mr:42 -objectidentifier id-mr-attributeCertificateExactMatch id-mr:45 -objectidentifier id-mr-holderIssuerMatch id-mr:46 -objectidentifier id-mr-authAttIdMatch id-mr:53 -objectidentifier id-mr-roleSpecCertIdMatch id-mr:54 -objectidentifier id-mr-basicAttConstraintsMatch id-mr:55 -objectidentifier id-mr-delegatedNameConstraintsMatch id-mr:56 -objectidentifier id-mr-timeSpecMatch id-mr:57 -objectidentifier id-mr-attDescriptorMatch id-mr:58 -objectidentifier id-mr-acceptableCertPoliciesMatch id-mr:59 -objectidentifier id-mr-delegationPathMatch id-mr:61 -objectidentifier id-mr-sOAIdentifierMatch id-mr:66 -objectidentifier id-mr-indirectIssuerMatch id-mr:67 -## -- syntaxes -- -## NOTE: 1.3.6.1.4.1.4203.666.11.10 is the oid arc assigned by OpenLDAP -## to this work in progress -objectidentifier AttributeCertificate 1.3.6.1.4.1.4203.666.11.10.2.1 -objectidentifier CertificateList 1.3.6.1.4.1.1466.115.121.1.9 -objectidentifier AttCertPath 1.3.6.1.4.1.4203.666.11.10.2.4 -objectidentifier PolicySyntax 1.3.6.1.4.1.4203.666.11.10.2.5 -objectidentifier RoleSyntax 1.3.6.1.4.1.4203.666.11.10.2.6 -# NOTE: OIDs from <draft-ietf-pkix-ldap-schema-02.txt> (expired) -#objectidentifier AttributeCertificate 1.2.826.0.1.3344810.7.5 -#objectidentifier AttCertPath 1.2.826.0.1.3344810.7.10 -#objectidentifier PolicySyntax 1.2.826.0.1.3344810.7.17 -#objectidentifier RoleSyntax 1.2.826.0.1.3344810.7.13 -## -## Substitute syntaxes -## -## AttCertPath -ldapsyntax ( 1.3.6.1.4.1.4203.666.11.10.2.4 - NAME 'AttCertPath' - DESC 'X.509 PMI attribute cartificate path: SEQUENCE OF AttributeCertificate' - X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' ) -## -## PolicySyntax -ldapsyntax ( 1.3.6.1.4.1.4203.666.11.10.2.5 - NAME 'PolicySyntax' - DESC 'X.509 PMI policy syntax' - X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' ) -## -## RoleSyntax -ldapsyntax ( 1.3.6.1.4.1.4203.666.11.10.2.6 - NAME 'RoleSyntax' - DESC 'X.509 PMI role syntax' - X-SUBST '1.3.6.1.4.1.1466.115.121.1.15' ) -## -## X.509 (08/2005) pp. 71, 86-89 -## -## 14.4.1 Role attribute -attributeType ( id-at-role - NAME 'role' - DESC 'X.509 Role attribute, use ;binary' - SYNTAX RoleSyntax ) -## -## 14.5 XML privilege information attribute -## -- contains XML-encoded privilege information -attributeType ( id-at-xMLPrivilegeInfo - NAME 'xmlPrivilegeInfo' - DESC 'X.509 XML privilege information attribute' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -## -## 17.2 PMI Directory attributes -## -## 17.2.1 Attribute certificate attribute -attributeType ( id-at-attributeCertificate - NAME 'attributeCertificateAttribute' - DESC 'X.509 Attribute certificate attribute, use ;binary' - SYNTAX AttributeCertificate - EQUALITY attributeCertificateExactMatch ) -## -## 17.2.2 AA certificate attribute -attributeType ( id-at-aACertificate - NAME 'aACertificate' - DESC 'X.509 AA certificate attribute, use ;binary' - SYNTAX AttributeCertificate - EQUALITY attributeCertificateExactMatch ) -## -## 17.2.3 Attribute descriptor certificate attribute -attributeType ( id-at-attributeDescriptorCertificate - NAME 'attributeDescriptorCertificate' - DESC 'X.509 Attribute descriptor certificate attribute, use ;binary' - SYNTAX AttributeCertificate - EQUALITY attributeCertificateExactMatch ) -## -## 17.2.4 Attribute certificate revocation list attribute -attributeType ( id-at-attributeCertificateRevocationList - NAME 'attributeCertificateRevocationList' - DESC 'X.509 Attribute certificate revocation list attribute, use ;binary' - SYNTAX CertificateList - X-EQUALITY 'certificateListExactMatch, not implemented yet' ) -## -## 17.2.5 AA certificate revocation list attribute -attributeType ( id-at-attributeAuthorityRevocationList - NAME 'attributeAuthorityRevocationList' - DESC 'X.509 AA certificate revocation list attribute, use ;binary' - SYNTAX CertificateList - X-EQUALITY 'certificateListExactMatch, not implemented yet' ) -## -## 17.2.6 Delegation path attribute -attributeType ( id-at-delegationPath - NAME 'delegationPath' - DESC 'X.509 Delegation path attribute, use ;binary' - SYNTAX AttCertPath ) -## AttCertPath ::= SEQUENCE OF AttributeCertificate -## -## 17.2.7 Privilege policy attribute -attributeType ( id-at-privPolicy - NAME 'privPolicy' - DESC 'X.509 Privilege policy attribute, use ;binary' - SYNTAX PolicySyntax ) -## -## 17.2.8 Protected privilege policy attribute -attributeType ( id-at-protPrivPolicy - NAME 'protPrivPolicy' - DESC 'X.509 Protected privilege policy attribute, use ;binary' - SYNTAX AttributeCertificate - EQUALITY attributeCertificateExactMatch ) -## -## 17.2.9 XML Protected privilege policy attribute -## -- contains XML-encoded privilege policy information -attributeType ( id-at-xMLPprotPrivPolicy - NAME 'xmlPrivPolicy' - DESC 'X.509 XML Protected privilege policy attribute' - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -## -## 17.1 PMI directory object classes -## -## 17.1.1 PMI user object class -## -- a PMI user (i.e., a "holder") -objectClass ( id-oc-pmiUser - NAME 'pmiUser' - DESC 'X.509 PMI user object class' - SUP top - AUXILIARY - MAY ( attributeCertificateAttribute ) ) -## -## 17.1.2 PMI AA object class -## -- a PMI AA -objectClass ( id-oc-pmiAA - NAME 'pmiAA' - DESC 'X.509 PMI AA object class' - SUP top - AUXILIARY - MAY ( aACertificate $ - attributeCertificateRevocationList $ - attributeAuthorityRevocationList - ) ) -## -## 17.1.3 PMI SOA object class -## -- a PMI Source of Authority -objectClass ( id-oc-pmiSOA - NAME 'pmiSOA' - DESC 'X.509 PMI SOA object class' - SUP top - AUXILIARY - MAY ( attributeCertificateRevocationList $ - attributeAuthorityRevocationList $ - attributeDescriptorCertificate - ) ) -## -## 17.1.4 Attribute certificate CRL distribution point object class -objectClass ( id-oc-attCertCRLDistributionPts - NAME 'attCertCRLDistributionPt' - DESC 'X.509 Attribute certificate CRL distribution point object class' - SUP top - AUXILIARY - MAY ( attributeCertificateRevocationList $ - attributeAuthorityRevocationList - ) ) -## -## 17.1.5 PMI delegation path -objectClass ( id-oc-pmiDelegationPath - NAME 'pmiDelegationPath' - DESC 'X.509 PMI delegation path' - SUP top - AUXILIARY - MAY ( delegationPath ) ) -## -## 17.1.6 Privilege policy object class -objectClass ( id-oc-privilegePolicy - NAME 'privilegePolicy' - DESC 'X.509 Privilege policy object class' - SUP top - AUXILIARY - MAY ( privPolicy ) ) -## -## 17.1.7 Protected privilege policy object class -objectClass ( id-oc-protectedPrivilegePolicy - NAME 'protectedPrivilegePolicy' - DESC 'X.509 Protected privilege policy object class' - SUP top - AUXILIARY - MAY ( protPrivPolicy ) ) - diff --git a/ldap/data/ldap_conf/schema/ppolicy.ldif b/ldap/data/ldap_conf/schema/ppolicy.ldif deleted file mode 100644 index 6559529..0000000 --- a/ldap/data/ldap_conf/schema/ppolicy.ldif +++ /dev/null @@ -1,84 +0,0 @@ -# $OpenLDAP$ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 2004-2014 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -## Portions Copyright (C) The Internet Society (2004). -## Please see full copyright statement below. -# -# Definitions from Draft behera-ldap-password-policy-07 (a work in progress) -# Password Policy for LDAP Directories -# With extensions from Hewlett-Packard: -# pwdCheckModule etc. -# -# Contents of this file are subject to change (including deletion) -# without notice. -# -# Not recommended for production use! -# Use with extreme caution! -# -# This file was automatically generated from ppolicy.schema; see that file -# for complete references. -# -dn: cn=ppolicy,cn=schema,cn=config -objectClass: olcSchemaConfig -cn: ppolicy -olcAttributeTypes: {0}( 1.3.6.1.4.1.42.2.27.8.1.1 NAME 'pwdAttribute' EQUALITY - objectIdentifierMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) -olcAttributeTypes: {1}( 1.3.6.1.4.1.42.2.27.8.1.2 NAME 'pwdMinAge' EQUALITY in - tegerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) -olcAttributeTypes: {2}( 1.3.6.1.4.1.42.2.27.8.1.3 NAME 'pwdMaxAge' EQUALITY in - tegerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) -olcAttributeTypes: {3}( 1.3.6.1.4.1.42.2.27.8.1.4 NAME 'pwdInHistory' EQUALITY - integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1 - .27 SINGLE-VALUE ) -olcAttributeTypes: {4}( 1.3.6.1.4.1.42.2.27.8.1.5 NAME 'pwdCheckQuality' EQUAL - ITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.27 SINGLE-VALUE ) -olcAttributeTypes: {5}( 1.3.6.1.4.1.42.2.27.8.1.6 NAME 'pwdMinLength' EQUALITY - integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121. - 1.27 SINGLE-VALUE ) -olcAttributeTypes: {6}( 1.3.6.1.4.1.42.2.27.8.1.7 NAME 'pwdExpireWarning' EQUA - LITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115. - 121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {7}( 1.3.6.1.4.1.42.2.27.8.1.8 NAME 'pwdGraceAuthNLimit' EQ - UALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.11 - 5.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {8}( 1.3.6.1.4.1.42.2.27.8.1.9 NAME 'pwdLockout' EQUALITY b - ooleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {9}( 1.3.6.1.4.1.42.2.27.8.1.10 NAME 'pwdLockoutDuration' E - QUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {10}( 1.3.6.1.4.1.42.2.27.8.1.11 NAME 'pwdMaxFailure' EQUAL - ITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.1 - 21.1.27 SINGLE-VALUE ) -olcAttributeTypes: {11}( 1.3.6.1.4.1.42.2.27.8.1.12 NAME 'pwdFailureCountInter - val' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1. - 1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {12}( 1.3.6.1.4.1.42.2.27.8.1.13 NAME 'pwdMustChange' EQUAL - ITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {13}( 1.3.6.1.4.1.42.2.27.8.1.14 NAME 'pwdAllowUserChange' - EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {14}( 1.3.6.1.4.1.42.2.27.8.1.15 NAME 'pwdSafeModify' EQUAL - ITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {15}( 1.3.6.1.4.1.4754.1.99.1 NAME 'pwdCheckModule' DESC 'L - oadable module that instantiates "check_password() function' EQUALITY caseExa - ctIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcObjectClasses: {0}( 1.3.6.1.4.1.4754.2.99.1 NAME 'pwdPolicyChecker' SUP top - AUXILIARY MAY pwdCheckModule ) -olcObjectClasses: {1}( 1.3.6.1.4.1.42.2.27.8.2.1 NAME 'pwdPolicy' SUP top AUXI - LIARY MUST pwdAttribute MAY ( pwdMinAge $ pwdMaxAge $ pwdInHistory $ pwdCheck - Quality $ pwdMinLength $ pwdExpireWarning $ pwdGraceAuthNLimit $ pwdLockout $ - pwdLockoutDuration $ pwdMaxFailure $ pwdFailureCountInterval $ pwdMustChange - $ pwdAllowUserChange $ pwdSafeModify ) ) diff --git a/ldap/data/ldap_conf/schema/ppolicy.schema b/ldap/data/ldap_conf/schema/ppolicy.schema deleted file mode 100644 index 8720a22..0000000 --- a/ldap/data/ldap_conf/schema/ppolicy.schema +++ /dev/null @@ -1,159 +0,0 @@ -# $OpenLDAP: pkg/ldap/servers/slapd/schema/ppolicy.schema,v 1.2.2.4 2007/01/02 21:44:09 kurt Exp $ -## This work is part of OpenLDAP Software <http://www.openldap.org/>. -## -## Copyright 2004-2007 The OpenLDAP Foundation. -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted only as authorized by the OpenLDAP -## Public License. -## -## A copy of this license is available in the file LICENSE in the -## top-level directory of the distribution or, alternatively, at -## <http://www.OpenLDAP.org/license.html>. -# -## Portions Copyright (C) The Internet Society (2004). -## Please see full copyright statement below. - -# Definitions from Draft behera-ldap-password-policy-07 (a work in progress) -# Password Policy for LDAP Directories -# With extensions from Hewlett-Packard: -# pwdCheckModule etc. - -# Contents of this file are subject to change (including deletion) -# without notice. -# -# Not recommended for production use! -# Use with extreme caution! - -# The version of this file as distributed by the OpenLDAP Foundation -# contains text from an IETF Internet-Draft explaining the schema. -# Unfortunately, that text is covered by a license that doesn't meet -# Debian's Free Software Guidelines. This is a stripped version of the -# schema that contains only the functional schema definition, not the text -# of the Internet-Draft. -# -# For an explanation of this schema, see -# draft-behera-ldap-password-policy-08.txt. - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.1 - NAME 'pwdAttribute' - EQUALITY objectIdentifierMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.2 - NAME 'pwdMinAge' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.3 - NAME 'pwdMaxAge' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.4 - NAME 'pwdInHistory' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.5 - NAME 'pwdCheckQuality' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.6 - NAME 'pwdMinLength' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.7 - NAME 'pwdExpireWarning' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.8 - NAME 'pwdGraceAuthNLimit' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.9 - NAME 'pwdLockout' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.10 - NAME 'pwdLockoutDuration' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.11 - NAME 'pwdMaxFailure' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.12 - NAME 'pwdFailureCountInterval' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.13 - NAME 'pwdMustChange' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.14 - NAME 'pwdAllowUserChange' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.42.2.27.8.1.15 - NAME 'pwdSafeModify' - EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 - SINGLE-VALUE ) - -attributetype ( 1.3.6.1.4.1.4754.1.99.1 - NAME 'pwdCheckModule' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - DESC 'Loadable module that instantiates "check_password() function' - SINGLE-VALUE ) - -objectclass ( 1.3.6.1.4.1.4754.2.99.1 - NAME 'pwdPolicyChecker' - SUP top - AUXILIARY - MAY ( pwdCheckModule ) ) - -objectclass ( 1.3.6.1.4.1.42.2.27.8.2.1 - NAME 'pwdPolicy' - SUP top - AUXILIARY - MUST ( pwdAttribute ) - MAY ( pwdMinAge $ pwdMaxAge $ pwdInHistory $ pwdCheckQuality $ - pwdMinLength $ pwdExpireWarning $ pwdGraceAuthNLimit $ pwdLockout - $ pwdLockoutDuration $ pwdMaxFailure $ pwdFailureCountInterval $ - pwdMustChange $ pwdAllowUserChange $ pwdSafeModify ) ) diff --git a/ldap/data/ldap_conf/slapd.d/cn=config.ldif b/ldap/data/ldap_conf/slapd.d/cn=config.ldif deleted file mode 100644 index 7bd72ac..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config.ldif +++ /dev/null @@ -1,16 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 b5bf1103 -dn: cn=config -objectClass: olcGlobal -cn: config -olcArgsFile: /var/run/slapd/slapd.args -olcLogLevel: none -olcPidFile: /var/run/slapd/slapd.pid -olcToolThreads: 1 -structuralObjectClass: olcGlobal -entryUUID: 352fd2c6-4b40-1035-97eb-87e18fb4723c -creatorsName: cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.298036Z#000000#000#000000 -modifiersName: cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=module{0}.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=module{0}.ldif deleted file mode 100644 index d21f950..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=module{0}.ldif +++ /dev/null @@ -1,14 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 00e54b7f -dn: cn=module{0} -objectClass: olcModuleList -cn: module{0} -olcModulePath: /usr/lib/ldap -olcModuleLoad: {0}back_mdb -structuralObjectClass: olcModuleList -entryUUID: 35309bde-4b40-1035-97f3-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.303274Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema.ldif deleted file mode 100644 index 4b2091b..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema.ldif +++ /dev/null @@ -1,12 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 cd0f551e -dn: cn=schema -objectClass: olcSchemaConfig -cn: schema -structuralObjectClass: olcSchemaConfig -entryUUID: 352feeaa-4b40-1035-97ee-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.298859Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={0}core.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={0}core.ldif deleted file mode 100644 index ce134d8..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={0}core.ldif +++ /dev/null @@ -1,249 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 e10062b8 -dn: cn={0}core -objectClass: olcSchemaConfig -cn: {0}core -olcAttributeTypes: {0}( 2.5.4.2 NAME 'knowledgeInformation' DESC 'RFC2256: k - nowledge information' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115. - 121.1.15{32768} ) -olcAttributeTypes: {1}( 2.5.4.4 NAME ( 'sn' 'surname' ) DESC 'RFC2256: last - (family) name(s) for which the entity is known by' SUP name ) -olcAttributeTypes: {2}( 2.5.4.5 NAME 'serialNumber' DESC 'RFC2256: serial nu - mber of the entity' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} ) -olcAttributeTypes: {3}( 2.5.4.6 NAME ( 'c' 'countryName' ) DESC 'RFC4519: tw - o-letter ISO-3166 country code' SUP name SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 11 SINGLE-VALUE ) -olcAttributeTypes: {4}( 2.5.4.7 NAME ( 'l' 'localityName' ) DESC 'RFC2256: l - ocality which this object resides in' SUP name ) -olcAttributeTypes: {5}( 2.5.4.8 NAME ( 'st' 'stateOrProvinceName' ) DESC 'RF - C2256: state or province which this object resides in' SUP name ) -olcAttributeTypes: {6}( 2.5.4.9 NAME ( 'street' 'streetAddress' ) DESC 'RFC2 - 256: street address of this object' EQUALITY caseIgnoreMatch SUBSTR caseIgn - oreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) -olcAttributeTypes: {7}( 2.5.4.10 NAME ( 'o' 'organizationName' ) DESC 'RFC22 - 56: organization this object belongs to' SUP name ) -olcAttributeTypes: {8}( 2.5.4.11 NAME ( 'ou' 'organizationalUnitName' ) DESC - 'RFC2256: organizational unit this object belongs to' SUP name ) -olcAttributeTypes: {9}( 2.5.4.12 NAME 'title' DESC 'RFC2256: title associate - d with the entity' SUP name ) -olcAttributeTypes: {10}( 2.5.4.14 NAME 'searchGuide' DESC 'RFC2256: search g - uide, deprecated by enhancedSearchGuide' SYNTAX 1.3.6.1.4.1.1466.115.121.1. - 25 ) -olcAttributeTypes: {11}( 2.5.4.15 NAME 'businessCategory' DESC 'RFC2256: bus - iness category' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch S - YNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) -olcAttributeTypes: {12}( 2.5.4.16 NAME 'postalAddress' DESC 'RFC2256: postal - address' EQUALITY caseIgnoreListMatch SUBSTR caseIgnoreListSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) -olcAttributeTypes: {13}( 2.5.4.17 NAME 'postalCode' DESC 'RFC2256: postal co - de' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6. - 1.4.1.1466.115.121.1.15{40} ) -olcAttributeTypes: {14}( 2.5.4.18 NAME 'postOfficeBox' DESC 'RFC2256: Post O - ffice Box' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.15{40} ) -olcAttributeTypes: {15}( 2.5.4.19 NAME 'physicalDeliveryOfficeName' DESC 'RF - C2256: Physical Delivery Office Name' EQUALITY caseIgnoreMatch SUBSTR caseI - gnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) -olcAttributeTypes: {16}( 2.5.4.20 NAME 'telephoneNumber' DESC 'RFC2256: Tele - phone Number' EQUALITY telephoneNumberMatch SUBSTR telephoneNumberSubstring - sMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.50{32} ) -olcAttributeTypes: {17}( 2.5.4.21 NAME 'telexNumber' DESC 'RFC2256: Telex Nu - mber' SYNTAX 1.3.6.1.4.1.1466.115.121.1.52 ) -olcAttributeTypes: {18}( 2.5.4.22 NAME 'teletexTerminalIdentifier' DESC 'RFC - 2256: Teletex Terminal Identifier' SYNTAX 1.3.6.1.4.1.1466.115.121.1.51 ) -olcAttributeTypes: {19}( 2.5.4.23 NAME ( 'facsimileTelephoneNumber' 'fax' ) - DESC 'RFC2256: Facsimile (Fax) Telephone Number' SYNTAX 1.3.6.1.4.1.1466.11 - 5.121.1.22 ) -olcAttributeTypes: {20}( 2.5.4.24 NAME 'x121Address' DESC 'RFC2256: X.121 Ad - dress' EQUALITY numericStringMatch SUBSTR numericStringSubstringsMatch SYNT - AX 1.3.6.1.4.1.1466.115.121.1.36{15} ) -olcAttributeTypes: {21}( 2.5.4.25 NAME 'internationaliSDNNumber' DESC 'RFC22 - 56: international ISDN number' EQUALITY numericStringMatch SUBSTR numericSt - ringSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.36{16} ) -olcAttributeTypes: {22}( 2.5.4.26 NAME 'registeredAddress' DESC 'RFC2256: re - gistered postal address' SUP postalAddress SYNTAX 1.3.6.1.4.1.1466.115.121. - 1.41 ) -olcAttributeTypes: {23}( 2.5.4.27 NAME 'destinationIndicator' DESC 'RFC2256: - destination indicator' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstring - sMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{128} ) -olcAttributeTypes: {24}( 2.5.4.28 NAME 'preferredDeliveryMethod' DESC 'RFC22 - 56: preferred delivery method' SYNTAX 1.3.6.1.4.1.1466.115.121.1.14 SINGLE- - VALUE ) -olcAttributeTypes: {25}( 2.5.4.29 NAME 'presentationAddress' DESC 'RFC2256: - presentation address' EQUALITY presentationAddressMatch SYNTAX 1.3.6.1.4.1. - 1466.115.121.1.43 SINGLE-VALUE ) -olcAttributeTypes: {26}( 2.5.4.30 NAME 'supportedApplicationContext' DESC 'R - FC2256: supported application context' EQUALITY objectIdentifierMatch SYNTA - X 1.3.6.1.4.1.1466.115.121.1.38 ) -olcAttributeTypes: {27}( 2.5.4.31 NAME 'member' DESC 'RFC2256: member of a g - roup' SUP distinguishedName ) -olcAttributeTypes: {28}( 2.5.4.32 NAME 'owner' DESC 'RFC2256: owner (of the - object)' SUP distinguishedName ) -olcAttributeTypes: {29}( 2.5.4.33 NAME 'roleOccupant' DESC 'RFC2256: occupan - t of role' SUP distinguishedName ) -olcAttributeTypes: {30}( 2.5.4.36 NAME 'userCertificate' DESC 'RFC2256: X.50 - 9 user certificate, use ;binary' EQUALITY certificateExactMatch SYNTAX 1.3. - 6.1.4.1.1466.115.121.1.8 ) -olcAttributeTypes: {31}( 2.5.4.37 NAME 'cACertificate' DESC 'RFC2256: X.509 - CA certificate, use ;binary' EQUALITY certificateExactMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.8 ) -olcAttributeTypes: {32}( 2.5.4.38 NAME 'authorityRevocationList' DESC 'RFC22 - 56: X.509 authority revocation list, use ;binary' SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.9 ) -olcAttributeTypes: {33}( 2.5.4.39 NAME 'certificateRevocationList' DESC 'RFC - 2256: X.509 certificate revocation list, use ;binary' SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.9 ) -olcAttributeTypes: {34}( 2.5.4.40 NAME 'crossCertificatePair' DESC 'RFC2256: - X.509 cross certificate pair, use ;binary' SYNTAX 1.3.6.1.4.1.1466.115.121 - .1.10 ) -olcAttributeTypes: {35}( 2.5.4.42 NAME ( 'givenName' 'gn' ) DESC 'RFC2256: f - irst name(s) for which the entity is known by' SUP name ) -olcAttributeTypes: {36}( 2.5.4.43 NAME 'initials' DESC 'RFC2256: initials of - some or all of names, but not the surname(s).' SUP name ) -olcAttributeTypes: {37}( 2.5.4.44 NAME 'generationQualifier' DESC 'RFC2256: - name qualifier indicating a generation' SUP name ) -olcAttributeTypes: {38}( 2.5.4.45 NAME 'x500UniqueIdentifier' DESC 'RFC2256: - X.500 unique identifier' EQUALITY bitStringMatch SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.6 ) -olcAttributeTypes: {39}( 2.5.4.46 NAME 'dnQualifier' DESC 'RFC2256: DN quali - fier' EQUALITY caseIgnoreMatch ORDERING caseIgnoreOrderingMatch SUBSTR case - IgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 ) -olcAttributeTypes: {40}( 2.5.4.47 NAME 'enhancedSearchGuide' DESC 'RFC2256: - enhanced search guide' SYNTAX 1.3.6.1.4.1.1466.115.121.1.21 ) -olcAttributeTypes: {41}( 2.5.4.48 NAME 'protocolInformation' DESC 'RFC2256: - protocol information' EQUALITY protocolInformationMatch SYNTAX 1.3.6.1.4.1. - 1466.115.121.1.42 ) -olcAttributeTypes: {42}( 2.5.4.50 NAME 'uniqueMember' DESC 'RFC2256: unique - member of a group' EQUALITY uniqueMemberMatch SYNTAX 1.3.6.1.4.1.1466.115.1 - 21.1.34 ) -olcAttributeTypes: {43}( 2.5.4.51 NAME 'houseIdentifier' DESC 'RFC2256: hous - e identifier' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYN - TAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) -olcAttributeTypes: {44}( 2.5.4.52 NAME 'supportedAlgorithms' DESC 'RFC2256: - supported algorithms' SYNTAX 1.3.6.1.4.1.1466.115.121.1.49 ) -olcAttributeTypes: {45}( 2.5.4.53 NAME 'deltaRevocationList' DESC 'RFC2256: - delta revocation list; use ;binary' SYNTAX 1.3.6.1.4.1.1466.115.121.1.9 ) -olcAttributeTypes: {46}( 2.5.4.54 NAME 'dmdName' DESC 'RFC2256: name of DMD' - SUP name ) -olcAttributeTypes: {47}( 2.5.4.65 NAME 'pseudonym' DESC 'X.520(4th): pseudon - ym for the object' SUP name ) -olcAttributeTypes: {48}( 0.9.2342.19200300.100.1.3 NAME ( 'mail' 'rfc822Mail - box' ) DESC 'RFC1274: RFC822 Mailbox' EQUALITY caseIgnoreIA5Match SUBST - R caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} - ) -olcAttributeTypes: {49}( 0.9.2342.19200300.100.1.25 NAME ( 'dc' 'domainCompo - nent' ) DESC 'RFC1274/2247: domain component' EQUALITY caseIgnoreIA5Match S - UBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SIN - GLE-VALUE ) -olcAttributeTypes: {50}( 0.9.2342.19200300.100.1.37 NAME 'associatedDomain' - DESC 'RFC1274: domain associated with object' EQUALITY caseIgnoreIA5Match S - UBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {51}( 1.2.840.113549.1.9.1 NAME ( 'email' 'emailAddress' - 'pkcs9email' ) DESC 'RFC3280: legacy attribute for email addresses in DNs' - EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3. - 6.1.4.1.1466.115.121.1.26{128} ) -olcObjectClasses: {0}( 2.5.6.2 NAME 'country' DESC 'RFC2256: a country' SUP - top STRUCTURAL MUST c MAY ( searchGuide $ description ) ) -olcObjectClasses: {1}( 2.5.6.3 NAME 'locality' DESC 'RFC2256: a locality' SU - P top STRUCTURAL MAY ( street $ seeAlso $ searchGuide $ st $ l $ descriptio - n ) ) -olcObjectClasses: {2}( 2.5.6.4 NAME 'organization' DESC 'RFC2256: an organiz - ation' SUP top STRUCTURAL MUST o MAY ( userPassword $ searchGuide $ seeAlso - $ businessCategory $ x121Address $ registeredAddress $ destinationIndicato - r $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ tel - ephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ street - $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName - $ st $ l $ description ) ) -olcObjectClasses: {3}( 2.5.6.5 NAME 'organizationalUnit' DESC 'RFC2256: an o - rganizational unit' SUP top STRUCTURAL MUST ou MAY ( userPassword $ searchG - uide $ seeAlso $ businessCategory $ x121Address $ registeredAddress $ desti - nationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalId - entifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNu - mber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDelive - ryOfficeName $ st $ l $ description ) ) -olcObjectClasses: {4}( 2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP to - p STRUCTURAL MUST ( sn $ cn ) MAY ( userPassword $ telephoneNumber $ seeAls - o $ description ) ) -olcObjectClasses: {5}( 2.5.6.7 NAME 'organizationalPerson' DESC 'RFC2256: an - organizational person' SUP person STRUCTURAL MAY ( title $ x121Address $ r - egisteredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNu - mber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumbe - r $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ posta - lAddress $ physicalDeliveryOfficeName $ ou $ st $ l ) ) -olcObjectClasses: {6}( 2.5.6.8 NAME 'organizationalRole' DESC 'RFC2256: an o - rganizational role' SUP top STRUCTURAL MUST cn MAY ( x121Address $ register - edAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber $ - teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ fac - simileTelephoneNumber $ seeAlso $ roleOccupant $ preferredDeliveryMethod $ - street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOffic - eName $ ou $ st $ l $ description ) ) -olcObjectClasses: {7}( 2.5.6.9 NAME 'groupOfNames' DESC 'RFC2256: a group of - names (DNs)' SUP top STRUCTURAL MUST ( member $ cn ) MAY ( businessCategor - y $ seeAlso $ owner $ ou $ o $ description ) ) -olcObjectClasses: {8}( 2.5.6.10 NAME 'residentialPerson' DESC 'RFC2256: an r - esidential person' SUP person STRUCTURAL MUST l MAY ( businessCategory $ x1 - 21Address $ registeredAddress $ destinationIndicator $ preferredDeliveryMet - hod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internati - onaliSDNNumber $ facsimileTelephoneNumber $ preferredDeliveryMethod $ stree - t $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName - $ st $ l ) ) -olcObjectClasses: {9}( 2.5.6.11 NAME 'applicationProcess' DESC 'RFC2256: an - application process' SUP top STRUCTURAL MUST cn MAY ( seeAlso $ ou $ l $ de - scription ) ) -olcObjectClasses: {10}( 2.5.6.12 NAME 'applicationEntity' DESC 'RFC2256: an - application entity' SUP top STRUCTURAL MUST ( presentationAddress $ cn ) MA - Y ( supportedApplicationContext $ seeAlso $ ou $ o $ l $ description ) ) -olcObjectClasses: {11}( 2.5.6.13 NAME 'dSA' DESC 'RFC2256: a directory syste - m agent (a server)' SUP applicationEntity STRUCTURAL MAY knowledgeInformati - on ) -olcObjectClasses: {12}( 2.5.6.14 NAME 'device' DESC 'RFC2256: a device' SUP - top STRUCTURAL MUST cn MAY ( serialNumber $ seeAlso $ owner $ ou $ o $ l $ - description ) ) -olcObjectClasses: {13}( 2.5.6.15 NAME 'strongAuthenticationUser' DESC 'RFC22 - 56: a strong authentication user' SUP top AUXILIARY MUST userCertificate ) -olcObjectClasses: {14}( 2.5.6.16 NAME 'certificationAuthority' DESC 'RFC2256 - : a certificate authority' SUP top AUXILIARY MUST ( authorityRevocationList - $ certificateRevocationList $ cACertificate ) MAY crossCertificatePair ) -olcObjectClasses: {15}( 2.5.6.17 NAME 'groupOfUniqueNames' DESC 'RFC2256: a - group of unique names (DN and Unique Identifier)' SUP top STRUCTURAL MUST ( - uniqueMember $ cn ) MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ de - scription ) ) -olcObjectClasses: {16}( 2.5.6.18 NAME 'userSecurityInformation' DESC 'RFC225 - 6: a user security information' SUP top AUXILIARY MAY ( supportedAlgorithms - ) ) -olcObjectClasses: {17}( 2.5.6.16.2 NAME 'certificationAuthority-V2' SUP cert - ificationAuthority AUXILIARY MAY ( deltaRevocationList ) ) -olcObjectClasses: {18}( 2.5.6.19 NAME 'cRLDistributionPoint' SUP top STRUCTU - RAL MUST ( cn ) MAY ( certificateRevocationList $ authorityRevocationList $ - deltaRevocationList ) ) -olcObjectClasses: {19}( 2.5.6.20 NAME 'dmd' SUP top STRUCTURAL MUST ( dmdNam - e ) MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ x121Add - ress $ registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ - telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationali - SDNNumber $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode - $ postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) ) -olcObjectClasses: {20}( 2.5.6.21 NAME 'pkiUser' DESC 'RFC2587: a PKI user' S - UP top AUXILIARY MAY userCertificate ) -olcObjectClasses: {21}( 2.5.6.22 NAME 'pkiCA' DESC 'RFC2587: PKI certificate - authority' SUP top AUXILIARY MAY ( authorityRevocationList $ certificateRe - vocationList $ cACertificate $ crossCertificatePair ) ) -olcObjectClasses: {22}( 2.5.6.23 NAME 'deltaCRL' DESC 'RFC2587: PKI user' SU - P top AUXILIARY MAY deltaRevocationList ) -olcObjectClasses: {23}( 1.3.6.1.4.1.250.3.15 NAME 'labeledURIObject' DESC 'R - FC2079: object that contains the URI attribute type' MAY ( labeledURI ) SUP - top AUXILIARY ) -olcObjectClasses: {24}( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObjec - t' DESC 'RFC1274: simple security object' SUP top AUXILIARY MUST userPasswo - rd ) -olcObjectClasses: {25}( 1.3.6.1.4.1.1466.344 NAME 'dcObject' DESC 'RFC2247: - domain component object' SUP top AUXILIARY MUST dc ) -olcObjectClasses: {26}( 1.3.6.1.1.3.1 NAME 'uidObject' DESC 'RFC2377: uid ob - ject' SUP top AUXILIARY MUST uid ) -structuralObjectClass: olcSchemaConfig -entryUUID: 352ff0d0-4b40-1035-97ef-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.298896Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif deleted file mode 100644 index c3606cb..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif +++ /dev/null @@ -1,178 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 8d28ab18 -dn: cn={1}cosine -objectClass: olcSchemaConfig -cn: {1}cosine -olcAttributeTypes: {0}( 0.9.2342.19200300.100.1.2 NAME 'textEncodedORAddress - ' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {1}( 0.9.2342.19200300.100.1.4 NAME 'info' DESC 'RFC1274: - general information' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsM - atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{2048} ) -olcAttributeTypes: {2}( 0.9.2342.19200300.100.1.5 NAME ( 'drink' 'favouriteD - rink' ) DESC 'RFC1274: favorite drink' EQUALITY caseIgnoreMatch SUBSTR case - IgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {3}( 0.9.2342.19200300.100.1.6 NAME 'roomNumber' DESC 'RF - C1274: room number' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {4}( 0.9.2342.19200300.100.1.7 NAME 'photo' DESC 'RFC1274 - : photo (G3 fax)' SYNTAX 1.3.6.1.4.1.1466.115.121.1.23{25000} ) -olcAttributeTypes: {5}( 0.9.2342.19200300.100.1.8 NAME 'userClass' DESC 'RFC - 1274: category of user' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstring - sMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {6}( 0.9.2342.19200300.100.1.9 NAME 'host' DESC 'RFC1274: - host computer' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch S - YNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {7}( 0.9.2342.19200300.100.1.10 NAME 'manager' DESC 'RFC1 - 274: DN of manager' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466 - .115.121.1.12 ) -olcAttributeTypes: {8}( 0.9.2342.19200300.100.1.11 NAME 'documentIdentifier' - DESC 'RFC1274: unique identifier of document' EQUALITY caseIgnoreMatch SUB - STR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {9}( 0.9.2342.19200300.100.1.12 NAME 'documentTitle' DESC - 'RFC1274: title of document' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSub - stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {10}( 0.9.2342.19200300.100.1.13 NAME 'documentVersion' D - ESC 'RFC1274: version of document' EQUALITY caseIgnoreMatch SUBSTR caseIgno - reSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {11}( 0.9.2342.19200300.100.1.14 NAME 'documentAuthor' DE - SC 'RFC1274: DN of author of document' EQUALITY distinguishedNameMatch SYNT - AX 1.3.6.1.4.1.1466.115.121.1.12 ) -olcAttributeTypes: {12}( 0.9.2342.19200300.100.1.15 NAME 'documentLocation' - DESC 'RFC1274: location of document original' EQUALITY caseIgnoreMatch SUBS - TR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {13}( 0.9.2342.19200300.100.1.20 NAME ( 'homePhone' 'home - TelephoneNumber' ) DESC 'RFC1274: home telephone number' EQUALITY telephone - NumberMatch SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.50 ) -olcAttributeTypes: {14}( 0.9.2342.19200300.100.1.21 NAME 'secretary' DESC 'R - FC1274: DN of secretary' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1 - .1466.115.121.1.12 ) -olcAttributeTypes: {15}( 0.9.2342.19200300.100.1.22 NAME 'otherMailbox' SYNT - AX 1.3.6.1.4.1.1466.115.121.1.39 ) -olcAttributeTypes: {16}( 0.9.2342.19200300.100.1.26 NAME 'aRecord' EQUALITY - caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {17}( 0.9.2342.19200300.100.1.27 NAME 'mDRecord' EQUALITY - caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {18}( 0.9.2342.19200300.100.1.28 NAME 'mXRecord' EQUALITY - caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {19}( 0.9.2342.19200300.100.1.29 NAME 'nSRecord' EQUALITY - caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {20}( 0.9.2342.19200300.100.1.30 NAME 'sOARecord' EQUALIT - Y caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {21}( 0.9.2342.19200300.100.1.31 NAME 'cNAMERecord' EQUAL - ITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {22}( 0.9.2342.19200300.100.1.38 NAME 'associatedName' DE - SC 'RFC1274: DN of entry associated with domain' EQUALITY distinguishedName - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) -olcAttributeTypes: {23}( 0.9.2342.19200300.100.1.39 NAME 'homePostalAddress' - DESC 'RFC1274: home postal address' EQUALITY caseIgnoreListMatch SUBSTR ca - seIgnoreListSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) -olcAttributeTypes: {24}( 0.9.2342.19200300.100.1.40 NAME 'personalTitle' DES - C 'RFC1274: personal title' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubst - ringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {25}( 0.9.2342.19200300.100.1.41 NAME ( 'mobile' 'mobileT - elephoneNumber' ) DESC 'RFC1274: mobile telephone number' EQUALITY telephon - eNumberMatch SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466. - 115.121.1.50 ) -olcAttributeTypes: {26}( 0.9.2342.19200300.100.1.42 NAME ( 'pager' 'pagerTel - ephoneNumber' ) DESC 'RFC1274: pager telephone number' EQUALITY telephoneNu - mberMatch SUBSTR telephoneNumberSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115 - .121.1.50 ) -olcAttributeTypes: {27}( 0.9.2342.19200300.100.1.43 NAME ( 'co' 'friendlyCou - ntryName' ) DESC 'RFC1274: friendly country name' EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: {28}( 0.9.2342.19200300.100.1.44 NAME 'uniqueIdentifier' - DESC 'RFC1274: unique identifer' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4. - 1.1466.115.121.1.15{256} ) -olcAttributeTypes: {29}( 0.9.2342.19200300.100.1.45 NAME 'organizationalStat - us' DESC 'RFC1274: organizational status' EQUALITY caseIgnoreMatch SUBSTR c - aseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {30}( 0.9.2342.19200300.100.1.46 NAME 'janetMailbox' DESC - 'RFC1274: Janet mailbox' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5S - ubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) -olcAttributeTypes: {31}( 0.9.2342.19200300.100.1.47 NAME 'mailPreferenceOpti - on' DESC 'RFC1274: mail preference option' SYNTAX 1.3.6.1.4.1.1466.115.121. - 1.27 ) -olcAttributeTypes: {32}( 0.9.2342.19200300.100.1.48 NAME 'buildingName' DESC - 'RFC1274: name of building' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubs - tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) -olcAttributeTypes: {33}( 0.9.2342.19200300.100.1.49 NAME 'dSAQuality' DESC ' - RFC1274: DSA Quality' SYNTAX 1.3.6.1.4.1.1466.115.121.1.19 SINGLE-VALUE ) -olcAttributeTypes: {34}( 0.9.2342.19200300.100.1.50 NAME 'singleLevelQuality - ' DESC 'RFC1274: Single Level Quality' SYNTAX 1.3.6.1.4.1.1466.115.121.1.13 - SINGLE-VALUE ) -olcAttributeTypes: {35}( 0.9.2342.19200300.100.1.51 NAME 'subtreeMinimumQual - ity' DESC 'RFC1274: Subtree Mininum Quality' SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.13 SINGLE-VALUE ) -olcAttributeTypes: {36}( 0.9.2342.19200300.100.1.52 NAME 'subtreeMaximumQual - ity' DESC 'RFC1274: Subtree Maximun Quality' SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.13 SINGLE-VALUE ) -olcAttributeTypes: {37}( 0.9.2342.19200300.100.1.53 NAME 'personalSignature' - DESC 'RFC1274: Personal Signature (G3 fax)' SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.23 ) -olcAttributeTypes: {38}( 0.9.2342.19200300.100.1.54 NAME 'dITRedirect' DESC - 'RFC1274: DIT Redirect' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1. - 1466.115.121.1.12 ) -olcAttributeTypes: {39}( 0.9.2342.19200300.100.1.55 NAME 'audio' DESC 'RFC12 - 74: audio (u-law)' SYNTAX 1.3.6.1.4.1.1466.115.121.1.4{25000} ) -olcAttributeTypes: {40}( 0.9.2342.19200300.100.1.56 NAME 'documentPublisher' - DESC 'RFC1274: publisher of document' EQUALITY caseIgnoreMatch SUBSTR case - IgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcObjectClasses: {0}( 0.9.2342.19200300.100.4.4 NAME ( 'pilotPerson' 'newPi - lotPerson' ) SUP person STRUCTURAL MAY ( userid $ textEncodedORAddress $ rf - c822Mailbox $ favouriteDrink $ roomNumber $ userClass $ homeTelephoneNumber - $ homePostalAddress $ secretary $ personalTitle $ preferredDeliveryMethod - $ businessCategory $ janetMailbox $ otherMailbox $ mobileTelephoneNumber $ - pagerTelephoneNumber $ organizationalStatus $ mailPreferenceOption $ person - alSignature ) ) -olcObjectClasses: {1}( 0.9.2342.19200300.100.4.5 NAME 'account' SUP top STRU - CTURAL MUST userid MAY ( description $ seeAlso $ localityName $ organizatio - nName $ organizationalUnitName $ host ) ) -olcObjectClasses: {2}( 0.9.2342.19200300.100.4.6 NAME 'document' SUP top STR - UCTURAL MUST documentIdentifier MAY ( commonName $ description $ seeAlso $ - localityName $ organizationName $ organizationalUnitName $ documentTitle $ - documentVersion $ documentAuthor $ documentLocation $ documentPublisher ) ) -olcObjectClasses: {3}( 0.9.2342.19200300.100.4.7 NAME 'room' SUP top STRUCTU - RAL MUST commonName MAY ( roomNumber $ description $ seeAlso $ telephoneNum - ber ) ) -olcObjectClasses: {4}( 0.9.2342.19200300.100.4.9 NAME 'documentSeries' SUP t - op STRUCTURAL MUST commonName MAY ( description $ seeAlso $ telephonenumber - $ localityName $ organizationName $ organizationalUnitName ) ) -olcObjectClasses: {5}( 0.9.2342.19200300.100.4.13 NAME 'domain' SUP top STRU - CTURAL MUST domainComponent MAY ( associatedName $ organizationName $ descr - iption $ businessCategory $ seeAlso $ searchGuide $ userPassword $ locality - Name $ stateOrProvinceName $ streetAddress $ physicalDeliveryOfficeName $ p - ostalAddress $ postalCode $ postOfficeBox $ streetAddress $ facsimileTeleph - oneNumber $ internationalISDNNumber $ telephoneNumber $ teletexTerminalIden - tifier $ telexNumber $ preferredDeliveryMethod $ destinationIndicator $ reg - isteredAddress $ x121Address ) ) -olcObjectClasses: {6}( 0.9.2342.19200300.100.4.14 NAME 'RFC822localPart' SUP - domain STRUCTURAL MAY ( commonName $ surname $ description $ seeAlso $ tel - ephoneNumber $ physicalDeliveryOfficeName $ postalAddress $ postalCode $ po - stOfficeBox $ streetAddress $ facsimileTelephoneNumber $ internationalISDNN - umber $ telephoneNumber $ teletexTerminalIdentifier $ telexNumber $ preferr - edDeliveryMethod $ destinationIndicator $ registeredAddress $ x121Address ) - ) -olcObjectClasses: {7}( 0.9.2342.19200300.100.4.15 NAME 'dNSDomain' SUP domai - n STRUCTURAL MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ SOARecord $ C - NAMERecord ) ) -olcObjectClasses: {8}( 0.9.2342.19200300.100.4.17 NAME 'domainRelatedObject' - DESC 'RFC1274: an object related to an domain' SUP top AUXILIARY MUST asso - ciatedDomain ) -olcObjectClasses: {9}( 0.9.2342.19200300.100.4.18 NAME 'friendlyCountry' SUP - country STRUCTURAL MUST friendlyCountryName ) -olcObjectClasses: {10}( 0.9.2342.19200300.100.4.20 NAME 'pilotOrganization' - SUP ( organization $ organizationalUnit ) STRUCTURAL MAY buildingName ) -olcObjectClasses: {11}( 0.9.2342.19200300.100.4.21 NAME 'pilotDSA' SUP dsa S - TRUCTURAL MAY dSAQuality ) -olcObjectClasses: {12}( 0.9.2342.19200300.100.4.22 NAME 'qualityLabelledData - ' SUP top AUXILIARY MUST dsaQuality MAY ( subtreeMinimumQuality $ subtreeMa - ximumQuality ) ) -structuralObjectClass: olcSchemaConfig -entryUUID: 353020aa-4b40-1035-97f0-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.300120Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={2}nis.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={2}nis.ldif deleted file mode 100644 index 4d34aec..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={2}nis.ldif +++ /dev/null @@ -1,108 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 9e14530e -dn: cn={2}nis -objectClass: olcSchemaConfig -cn: {2}nis -olcAttributeTypes: {0}( 1.3.6.1.1.1.1.2 NAME 'gecos' DESC 'The GECOS field; - the common name' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Substrings - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: {1}( 1.3.6.1.1.1.1.3 NAME 'homeDirectory' DESC 'The absol - ute path to the home directory' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4 - .1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: {2}( 1.3.6.1.1.1.1.4 NAME 'loginShell' DESC 'The path to - the login shell' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121 - .1.26 SINGLE-VALUE ) -olcAttributeTypes: {3}( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange' EQUALITY int - egerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {4}( 1.3.6.1.1.1.1.6 NAME 'shadowMin' EQUALITY integerMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {5}( 1.3.6.1.1.1.1.7 NAME 'shadowMax' EQUALITY integerMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {6}( 1.3.6.1.1.1.1.8 NAME 'shadowWarning' EQUALITY intege - rMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {7}( 1.3.6.1.1.1.1.9 NAME 'shadowInactive' EQUALITY integ - erMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {8}( 1.3.6.1.1.1.1.10 NAME 'shadowExpire' EQUALITY intege - rMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {9}( 1.3.6.1.1.1.1.11 NAME 'shadowFlag' EQUALITY integerM - atch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {10}( 1.3.6.1.1.1.1.12 NAME 'memberUid' EQUALITY caseExac - tIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.12 - 1.1.26 ) -olcAttributeTypes: {11}( 1.3.6.1.1.1.1.13 NAME 'memberNisNetgroup' EQUALITY - caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.146 - 6.115.121.1.26 ) -olcAttributeTypes: {12}( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' DESC 'Net - group triple' SYNTAX 1.3.6.1.1.1.0.0 ) -olcAttributeTypes: {13}( 1.3.6.1.1.1.1.15 NAME 'ipServicePort' EQUALITY inte - gerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {14}( 1.3.6.1.1.1.1.16 NAME 'ipServiceProtocol' SUP name - ) -olcAttributeTypes: {15}( 1.3.6.1.1.1.1.17 NAME 'ipProtocolNumber' EQUALITY i - ntegerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {16}( 1.3.6.1.1.1.1.18 NAME 'oncRpcNumber' EQUALITY integ - erMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {17}( 1.3.6.1.1.1.1.19 NAME 'ipHostNumber' DESC 'IP addre - ss' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) -olcAttributeTypes: {18}( 1.3.6.1.1.1.1.20 NAME 'ipNetworkNumber' DESC 'IP ne - twork' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128 - } SINGLE-VALUE ) -olcAttributeTypes: {19}( 1.3.6.1.1.1.1.21 NAME 'ipNetmaskNumber' DESC 'IP ne - tmask' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128 - } SINGLE-VALUE ) -olcAttributeTypes: {20}( 1.3.6.1.1.1.1.22 NAME 'macAddress' DESC 'MAC addres - s' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} ) -olcAttributeTypes: {21}( 1.3.6.1.1.1.1.23 NAME 'bootParameter' DESC 'rpc.boo - tparamd parameter' SYNTAX 1.3.6.1.1.1.0.1 ) -olcAttributeTypes: {22}( 1.3.6.1.1.1.1.24 NAME 'bootFile' DESC 'Boot image n - ame' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {23}( 1.3.6.1.1.1.1.26 NAME 'nisMapName' SUP name ) -olcAttributeTypes: {24}( 1.3.6.1.1.1.1.27 NAME 'nisMapEntry' EQUALITY caseEx - actIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115. - 121.1.26{1024} SINGLE-VALUE ) -olcObjectClasses: {0}( 1.3.6.1.1.1.2.0 NAME 'posixAccount' DESC 'Abstraction - of an account with POSIX attributes' SUP top AUXILIARY MUST ( cn $ uid $ u - idNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ ge - cos $ description ) ) -olcObjectClasses: {1}( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' DESC 'Additional - attributes for shadow passwords' SUP top AUXILIARY MUST uid MAY ( userPass - word $ shadowLastChange $ shadowMin $ shadowMax $ shadowWarning $ shadowIna - ctive $ shadowExpire $ shadowFlag $ description ) ) -olcObjectClasses: {2}( 1.3.6.1.1.1.2.2 NAME 'posixGroup' DESC 'Abstraction o - f a group of accounts' SUP top STRUCTURAL MUST ( cn $ gidNumber ) MAY ( use - rPassword $ memberUid $ description ) ) -olcObjectClasses: {3}( 1.3.6.1.1.1.2.3 NAME 'ipService' DESC 'Abstraction an - Internet Protocol service' SUP top STRUCTURAL MUST ( cn $ ipServicePort $ - ipServiceProtocol ) MAY description ) -olcObjectClasses: {4}( 1.3.6.1.1.1.2.4 NAME 'ipProtocol' DESC 'Abstraction o - f an IP protocol' SUP top STRUCTURAL MUST ( cn $ ipProtocolNumber $ descrip - tion ) MAY description ) -olcObjectClasses: {5}( 1.3.6.1.1.1.2.5 NAME 'oncRpc' DESC 'Abstraction of an - ONC/RPC binding' SUP top STRUCTURAL MUST ( cn $ oncRpcNumber $ description - ) MAY description ) -olcObjectClasses: {6}( 1.3.6.1.1.1.2.6 NAME 'ipHost' DESC 'Abstraction of a - host, an IP device' SUP top AUXILIARY MUST ( cn $ ipHostNumber ) MAY ( l $ - description $ manager ) ) -olcObjectClasses: {7}( 1.3.6.1.1.1.2.7 NAME 'ipNetwork' DESC 'Abstraction of - an IP network' SUP top STRUCTURAL MUST ( cn $ ipNetworkNumber ) MAY ( ipNe - tmaskNumber $ l $ description $ manager ) ) -olcObjectClasses: {8}( 1.3.6.1.1.1.2.8 NAME 'nisNetgroup' DESC 'Abstraction - of a netgroup' SUP top STRUCTURAL MUST cn MAY ( nisNetgroupTriple $ memberN - isNetgroup $ description ) ) -olcObjectClasses: {9}( 1.3.6.1.1.1.2.9 NAME 'nisMap' DESC 'A generic abstrac - tion of a NIS map' SUP top STRUCTURAL MUST nisMapName MAY description ) -olcObjectClasses: {10}( 1.3.6.1.1.1.2.10 NAME 'nisObject' DESC 'An entry in - a NIS map' SUP top STRUCTURAL MUST ( cn $ nisMapEntry $ nisMapName ) MAY de - scription ) -olcObjectClasses: {11}( 1.3.6.1.1.1.2.11 NAME 'ieee802Device' DESC 'A device - with a MAC address' SUP top AUXILIARY MAY macAddress ) -olcObjectClasses: {12}( 1.3.6.1.1.1.2.12 NAME 'bootableDevice' DESC 'A devic - e with boot parameters' SUP top AUXILIARY MAY ( bootFile $ bootParameter ) - ) -structuralObjectClass: olcSchemaConfig -entryUUID: 35304de6-4b40-1035-97f1-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.301292Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif deleted file mode 100644 index f8dd9cc..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif +++ /dev/null @@ -1,49 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 c8d0515c -dn: cn={3}inetorgperson -objectClass: olcSchemaConfig -cn: {3}inetorgperson -olcAttributeTypes: {0}( 2.16.840.1.113730.3.1.1 NAME 'carLicense' DESC 'RFC2 - 798: vehicle license or registration plate' EQUALITY caseIgnoreMatch SUBSTR - caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: {1}( 2.16.840.1.113730.3.1.2 NAME 'departmentNumber' DESC - 'RFC2798: identifies a department within an organization' EQUALITY caseIgn - oreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1 - .15 ) -olcAttributeTypes: {2}( 2.16.840.1.113730.3.1.241 NAME 'displayName' DESC 'R - FC2798: preferred name to be used when displaying entries' EQUALITY caseIgn - oreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1 - .15 SINGLE-VALUE ) -olcAttributeTypes: {3}( 2.16.840.1.113730.3.1.3 NAME 'employeeNumber' DESC ' - RFC2798: numerically identifies an employee within an organization' EQUALIT - Y caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466. - 115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {4}( 2.16.840.1.113730.3.1.4 NAME 'employeeType' DESC 'RF - C2798: type of employment for a person' EQUALITY caseIgnoreMatch SUBSTR cas - eIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) -olcAttributeTypes: {5}( 0.9.2342.19200300.100.1.60 NAME 'jpegPhoto' DESC 'RF - C2798: a JPEG image' SYNTAX 1.3.6.1.4.1.1466.115.121.1.28 ) -olcAttributeTypes: {6}( 2.16.840.1.113730.3.1.39 NAME 'preferredLanguage' DE - SC 'RFC2798: preferred written or spoken language for a person' EQUALITY ca - seIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115. - 121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {7}( 2.16.840.1.113730.3.1.40 NAME 'userSMIMECertificate' - DESC 'RFC2798: PKCS#7 SignedData used to support S/MIME' SYNTAX 1.3.6.1.4. - 1.1466.115.121.1.5 ) -olcAttributeTypes: {8}( 2.16.840.1.113730.3.1.216 NAME 'userPKCS12' DESC 'RF - C2798: personal identity information, a PKCS #12 PFX' SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.5 ) -olcObjectClasses: {0}( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RF - C2798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL - MAY ( audio $ businessCategory $ carLicense $ departmentNumber $ displayNam - e $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddre - ss $ initials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ page - r $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIden - tifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12 ) ) -structuralObjectClass: olcSchemaConfig -entryUUID: 35308e14-4b40-1035-97f2-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.302936Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={4}core-fd.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={4}core-fd.ldif deleted file mode 100644 index f5b2e32..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={4}core-fd.ldif +++ /dev/null @@ -1,90 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 d16a33cf -dn: cn={4}core-fd -objectClass: olcSchemaConfig -cn: {4}core-fd -olcAttributeTypes: {0}( 1.3.6.1.4.1.10098.1.1.12.1 NAME 'gosaSubtreeACL' DES - C 'GOsa - ACL entry' OBSOLETE EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSub - stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) -olcAttributeTypes: {1}( 1.3.6.1.4.1.10098.1.1.12.2 NAME 'gosaUser' DESC 'GOs - a - DN of a user' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) -olcAttributeTypes: {2}( 1.3.6.1.4.1.10098.1.1.12.3 NAME 'gosaObject' DESC 'G - Osa - DN of an object' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstrings - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) -olcAttributeTypes: {3}( 1.3.6.1.4.1.10098.1.1.12.14 NAME 'gosaDefaultLanguag - e' DESC 'GOsa - Defines the default language for a user' OBSOLETE EQUALITY - caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1 - 466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {4}( 1.3.6.1.4.1.10098.1.1.12.30 NAME 'gosaGroupObjects' - DESC 'GOsa - List of all object types that are in a gosaGroupOfNames' EQUAL - ITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4 - .1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {5}( 1.3.6.1.4.1.10098.1.1.12.34 NAME 'gosaAclTemplate' D - ESC 'GOsa - ACL entries for ACL roles' EQUALITY caseIgnoreIA5Match SUBSTR c - aseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) -olcAttributeTypes: {6}( 1.3.6.1.4.1.10098.1.1.12.35 NAME 'gosaAclEntry' DESC - 'GOsa - ACL entries' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5Subst - ringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26) -olcAttributeTypes: {7}( 1.3.6.1.4.1.10098.1.1.12.37 NAME 'gosaSnapshotTimest - amp' DESC 'GOsa - Unix timestamp of snapshot' EQUALITY caseIgnoreMatch SUBS - TR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VA - LUE) -olcAttributeTypes: {8}( 1.3.6.1.4.1.10098.1.1.12.38 NAME 'gosaSnapshotDN' DE - SC 'GOsa - Original DN of saved object in snapshot' EQUALITY caseIgnoreMatc - h SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SIN - GLE-VALUE) -olcAttributeTypes: {9}( 1.3.6.1.4.1.10098.1.1.12.39 NAME 'gosaSnapshotData' - DESC 'GOsa - Original data of saved object in snapshot' SYNTAX 1.3.6.1.4.1. - 1466.115.121.1.5 SINGLE-VALUE) -olcAttributeTypes: {10}( 1.3.6.1.4.1.10098.1.1.12.46 NAME 'gosaLoginRestrict - ion' DESC 'GOsa - Multivalue attribute to carry a number of allowed ips/sub - nets' OBSOLETE SUP name) -olcAttributeTypes: {11}( 1.3.6.1.4.1.10098.1.1.6.2 NAME 'academicTitle' DESC - 'Field to represent the academic title' OBSOLETE EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) -olcAttributeTypes: {12}( 1.3.6.1.4.1.15305.2.1 NAME ( 'gender' 'sex' ) DESC - 'Gender: M for male, F for female' EQUALITY caseIgnoreIA5Match SYNTAX 1 - .3.6.1.4.1.1466.115.121.1.26{1} SINGLE-VALUE ) -olcAttributeTypes: {13}( 1.3.6.1.4.1.15305.2.2 NAME ( 'dateOfBirth' 'dob' ) - DESC 'Date of birth in ISO 8601 format' EQUALITY caseIgnoreMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.15{10} SINGLE-VALUE ) -olcObjectClasses: {0}( 1.3.6.1.4.1.10098.1.2.1.19.1 NAME 'gosaObject' SUP to - p AUXILIARY DESC 'GOsa - Class for GOsa settings' OBSOLETE MUST ( ) MAY ( g - osaSubtreeACL )) -olcObjectClasses: {1}( 1.3.6.1.4.1.10098.1.2.1.19.2 NAME 'gosaLockEntry' SUP - top STRUCTURAL DESC 'GOsa - Class for GOsa locking' MUST ( gosaUser $ gosa - Object $ cn )) -olcObjectClasses: {2}( 1.3.6.1.4.1.10098.1.2.1.19.3 NAME 'gosaCacheEntry' SU - P top STRUCTURAL DESC 'GOsa - Class for GOsa caching' OBSOLETE MAY ( ) MUS - T ( cn $ gosaUser )) -olcObjectClasses: {3}( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' SU - P top AUXILIARY DESC 'GOsa - Class to mark Departments for GOsa' MUST ( ou - $ description ) MAY ( manager )) -olcObjectClasses: {4}( 1.3.6.1.4.1.10098.1.2.1.19.6 NAME 'gosaAccount' SUP t - op AUXILIARY DESC 'GOsa - Class for GOsa Accounts' OBSOLETE MUST ( ) MAY ( - gosaLoginRestriction $ gosaDefaultLanguage $ academicTitle $ personalTitle - $ dateOfBirth $ gender ) ) -olcObjectClasses: {5}( 1.3.6.1.4.1.10098.1.2.1.19.11 NAME 'gosaUserTemplate' - SUP top AUXILIARY DESC 'GOsa - Class for GOsa User Templates' OBSOLETE MUS - T ( cn )) -olcObjectClasses: {6}( 1.3.6.1.4.1.10098.1.2.1.19.12 NAME 'gosaGroupOfNames' - DESC 'GOsa - Adds the gosaGroupObjects field to groupOfNames' SUP top AUXI - LIARY MUST ( cn $ gosaGroupObjects ) MAY ( member $ description ) ) -olcObjectClasses: {7}( 1.3.6.1.4.1.10098.1.2.1.19.17 NAME 'gosaRole' DESC 'G - Osa - ACL container to define ACL roles' SUP top STRUCTURAL MUST ( gosaAclT - emplate $ cn ) MAY ( description ) ) -olcObjectClasses: {8}( 1.3.6.1.4.1.10098.1.2.1.19.18 NAME 'gosaAcl' DESC 'GO - sa - ACL container to define single ACLs' SUP top AUXILIARY MUST ( gosaAclE - ntry )) -olcObjectClasses: {9}( 1.3.6.1.4.1.10098.1.2.1.19.19 NAME 'gosaSnapshotObjec - t' DESC 'GOsa - Container object for undo and snapshot data' SUP top STRUCT - URAL MUST ( gosaSnapshotTimestamp $ gosaSnapshotDN $ gosaSnapshotData ) MAY - ( description ) ) -structuralObjectClass: olcSchemaConfig -entryUUID: 513eab9e-4b46-1035-8a61-a5f01aea6174 -creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -createTimestamp: 20160109175822Z -entryCSN: 20160109175822.351990Z#000000#000#000000 -modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -modifyTimestamp: 20160109175822Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={5}core-fd-conf.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={5}core-fd-conf.ldif deleted file mode 100644 index eabddf0..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={5}core-fd-conf.ldif +++ /dev/null @@ -1,284 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 5643a101 -dn: cn={5}core-fd-conf -objectClass: olcSchemaConfig -cn: {5}core-fd-conf -olcAttributeTypes: {0}( 1.3.6.1.4.1.38414.8.10.1 NAME 'fdRfc2307bis' DESC 'F - usionDirectory - rfc2307bis' OBSOLETE EQUALITY booleanMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {1}( 1.3.6.1.4.1.38414.8.10.2 NAME 'fdSchemaCheck' DESC ' - FusionDirectory - Schema check' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {2}( 1.3.6.1.4.1.38414.8.11.1 NAME 'fdLanguage' DESC 'Fus - ionDirectory - language' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Subs - tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {3}( 1.3.6.1.4.1.38414.8.11.2 NAME 'fdTheme' DESC 'Fusion - Directory - theme' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Substrings - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {4}( 1.3.6.1.4.1.38414.8.11.3 NAME 'fdTimezone' DESC 'Fus - ionDirectory - timezone' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Subs - tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {5}( 1.3.6.1.4.1.38414.8.12.1 NAME 'fdAccountPrimaryAttri - bute' DESC 'FusionDirectory - attribute that should be used in user dn' EQU - ALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4 - .1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {6}( 1.3.6.1.4.1.38414.8.12.2 NAME 'fdAccountRDN' DESC 'F - usionDirectory - use a placeholder pattern for generating account RDNs' OBS - OLETE EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {7}( 1.3.6.1.4.1.38414.8.12.3 NAME 'fdNextIdHook' DESC 'F - usionDirectory - A script to be called for finding the next free id for use - rs or groups' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {8}( 1.3.6.1.4.1.38414.8.12.4 NAME 'fdIdGenerator' DESC ' - FusionDirectory - An automatic way to generate new user ids' OBSOLETE EQUAL - ITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1 - .1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {9}( 1.3.6.1.4.1.38414.8.12.5 NAME 'fdPersonalTitleInDN' - OBSOLETE DESC 'FusionDirectory - Personal title in dn' EQUALITY booleanMatc - h SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {10}( 1.3.6.1.4.1.38414.8.12.6 NAME 'fdStrictNamingRules' - DESC 'FusionDirectory - Strict naming rules' EQUALITY booleanMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {11}( 1.3.6.1.4.1.38414.8.12.7 NAME 'fdMinId' DESC 'Fusio - nDirectory - minimum user id' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466 - .115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {12}( 1.3.6.1.4.1.38414.8.12.8 NAME 'fdUidNumberBase' DES - C 'FusionDirectory - uid number base' EQUALITY integerMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {13}( 1.3.6.1.4.1.38414.8.12.9 NAME 'fdGidNumberBase' DES - C 'FusionDirectory - gid number base' EQUALITY integerMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {14}( 1.3.6.1.4.1.38414.8.12.10 NAME 'fdUserRDN' DESC 'Fu - sionDirectory - User RDN' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Sub - stringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {15}( 1.3.6.1.4.1.38414.8.12.11 NAME 'fdGroupRDN' DESC 'F - usionDirectory - Group RDN' EQUALITY caseExactIA5Match SUBSTR caseExactIA5S - ubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {16}( 1.3.6.1.4.1.38414.8.12.12 NAME 'fdIdAllocationMetho - d' DESC 'FusionDirectory - id allocation method traditional/pool' EQUALITY - caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.146 - 6.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {17}( 1.3.6.1.4.1.38414.8.12.13 NAME 'fdGidNumberPoolMin' - DESC 'FusionDirectory - pool gid number min' EQUALITY integerMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {18}( 1.3.6.1.4.1.38414.8.12.14 NAME 'fdUidNumberPoolMin' - DESC 'FusionDirectory - pool uid number min' EQUALITY integerMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {19}( 1.3.6.1.4.1.38414.8.12.15 NAME 'fdGidNumberPoolMax' - DESC 'FusionDirectory - pool gid number max' EQUALITY integerMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {20}( 1.3.6.1.4.1.38414.8.12.16 NAME 'fdUidNumberPoolMax' - DESC 'FusionDirectory - pool uid number max' EQUALITY integerMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {21}( 1.3.6.1.4.1.38414.8.12.17 NAME 'fdAclRoleRDN' DESC - 'FusionDirectory - ACL role RDN' EQUALITY caseExactIA5Match SUBSTR caseExac - tIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {22}( 1.3.6.1.4.1.38414.8.12.18 NAME 'fdCnPattern' DESC ' - FusionDirectory - Common Name pattern' EQUALITY caseExactIA5Match SUBSTR ca - seExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE - ) -olcAttributeTypes: {23}( 1.3.6.1.4.1.38414.8.13.1 NAME 'fdPasswordDefaultHas - h' DESC 'FusionDirectory - Password default hash' EQUALITY caseExactIA5Matc - h SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 S - INGLE-VALUE) -olcAttributeTypes: {24}( 1.3.6.1.4.1.38414.8.13.2 NAME 'fdPasswordMinLength' - DESC 'FusionDirectory - Password min length' EQUALITY integerMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {25}( 1.3.6.1.4.1.38414.8.13.3 NAME 'fdPasswordMinDiffer' - DESC 'FusionDirectory - password min differ' EQUALITY integerMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {26}( 1.3.6.1.4.1.38414.8.13.4 NAME 'fdPasswordHook' DESC - 'FusionDirectory - Password hook (external command)' OBSOLETE EQUALITY cas - eExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {27}( 1.3.6.1.4.1.38414.8.13.5 NAME 'fdHandleExpiredAccou - nts' DESC 'FusionDirectory - Handle expired accounts' EQUALITY booleanMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {28}( 1.3.6.1.4.1.38414.8.13.6 NAME 'fdSaslRealm' DESC 'F - usionDirectory - SASL Realm' EQUALITY caseExactIA5Match SUBSTR caseExactIA5 - SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {29}( 1.3.6.1.4.1.38414.8.13.7 NAME 'fdSaslExop' DESC 'Fu - sionDirectory - SASL Exop' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Su - bstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {30}( 1.3.6.1.4.1.38414.8.13.8 NAME 'fdForcePasswordDefau - ltHash' DESC 'FusionDirectory - Force password default hash' EQUALITY boole - anMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {31}( 1.3.6.1.4.1.38414.8.14.1 NAME 'fdPrimaryGroupFilter - ' DESC 'FusionDirectory - Primary group filter' EQUALITY booleanMatch SYNTA - X 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {32}( 1.3.6.1.4.1.38414.8.14.2 NAME 'fdListSummary' DESC - 'FusionDirectory - Show list summary' EQUALITY booleanMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {33}( 1.3.6.1.4.1.38414.8.14.4 NAME 'fdModificationDetect - ionAttribute' DESC 'FusionDirectory - Modification detection attribute' EQU - ALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4 - .1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {34}( 1.3.6.1.4.1.38414.8.14.5 NAME 'fdCopyPaste' DESC 'F - usionDirectory - (de)Activate copy/paste' OBSOLETE EQUALITY booleanMatch SY - NTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {35}( 1.3.6.1.4.1.38414.8.14.6 NAME 'fdLogging' DESC 'Fus - ionDirectory - Logging' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.1 - 21.1.7 SINGLE-VALUE ) -olcAttributeTypes: {36}( 1.3.6.1.4.1.38414.8.14.7 NAME 'fdLdapSizeLimit' DES - C 'FusionDirectory - LDAP size limit' EQUALITY integerMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {37}( 1.3.6.1.4.1.38414.8.15.1 NAME 'fdLoginAttribute' DE - SC 'FusionDirectory attribute that will be used for login' EQUALITY caseExa - ctIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.1 - 21.1.26 SINGLE-VALUE) -olcAttributeTypes: {38}( 1.3.6.1.4.1.38414.8.15.2 NAME 'fdForceSSL' DESC 'Fu - sionDirectory - Force SSL' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.11 - 5.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {39}( 1.3.6.1.4.1.38414.8.15.3 NAME 'fdWarnSSL' DESC 'Fus - ionDirectory - Warn user when SSL is not used' EQUALITY booleanMatch SYNTAX - 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {40}( 1.3.6.1.4.1.38414.8.15.4 NAME 'fdStoreFilterSetting - s' DESC 'FusionDirectory - Store filter settings' EQUALITY booleanMatch SYN - TAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {41}( 1.3.6.1.4.1.38414.8.15.5 NAME 'fdSessionLifeTime' D - ESC 'FusionDirectory - Session life time in seconds' EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {42}( 1.3.6.1.4.1.38414.8.16.1 NAME 'fdDisplayErrors' DES - C 'FusionDirectory - Weither or not to display errors' EQUALITY booleanMatc - h SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {43}( 1.3.6.1.4.1.38414.8.16.2 NAME 'fdLdapMaxQueryTime' - DESC 'FusionDirectory - Maximum LDAP query time' EQUALITY integerMatch SYNT - AX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {44}( 1.3.6.1.4.1.38414.8.16.3 NAME 'fdLdapStats' DESC 'F - usionDirectory - Weither or not to activate ldap stats' EQUALITY booleanMat - ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {45}( 1.3.6.1.4.1.38414.8.16.4 NAME 'fdDebugLevel' DESC ' - FusionDirectory - Debug level' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.146 - 6.115.121.1.27 SINGLE-VALUE) -olcAttributeTypes: {46}( 1.3.6.1.4.1.38414.8.17.1 NAME 'fdEnableSnapshots' D - ESC 'FusionDirectory - Weither or not to enable snapshots' EQUALITY boolean - Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {47}( 1.3.6.1.4.1.38414.8.17.2 NAME 'fdSnapshotBase' DESC - 'FusionDirectory - Snaphost base' EQUALITY caseExactIA5Match SUBSTR caseEx - actIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {48}( 1.3.6.1.4.1.38414.8.17.3 NAME 'fdSnapshotURI' DESC - 'FusionDirectory - Snaphost URI' OBSOLETE EQUALITY caseExactIA5Match SUBSTR - caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VA - LUE) -olcAttributeTypes: {49}( 1.3.6.1.4.1.38414.8.17.4 NAME 'fdSnapshotAdminDn' D - ESC 'FusionDirectory - Snaphost admin dn' OBSOLETE EQUALITY caseExactIA5Mat - ch SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 - SINGLE-VALUE) -olcAttributeTypes: {50}( 1.3.6.1.4.1.38414.8.17.5 NAME 'fdSnapshotAdminPassw - ord' DESC 'FusionDirectory - Snaphost admin password' OBSOLETE EQUALITY cas - eExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.1 - 15.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {51}( 1.3.6.1.4.1.38414.8.18.2 NAME 'fdTabHook' DESC 'Fus - ionDirectory - tab hook' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Subs - tringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {52}( 1.3.6.1.4.1.38414.8.18.3 NAME 'fdShells' DESC 'Fusi - onDirectory - available shell' EQUALITY caseExactIA5Match SUBSTR caseExactI - A5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {53}( 1.3.6.1.4.1.38414.8.18.4 NAME 'fusionConfigMd5' DES - C 'FusionDirectory - md5sum of class.cache' EQUALITY caseExactIA5Match SUBS - TR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) -olcAttributeTypes: {54}( 1.3.6.1.4.1.38414.8.18.5 NAME 'fdDisplayHookOutput' - DESC 'FusionDirectory - display hook execution output to the user' EQUALIT - Y booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {55}( 1.3.6.1.4.1.38414.8.18.6 NAME 'fdAclTabOnObjects' D - ESC 'FusionDirectory - Should acl tabs be shown on all objects' EQUALITY bo - oleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {56}( 1.3.6.1.4.1.38414.8.19.1 NAME 'fdOGroupRDN' DESC 'F - usionDirectory - OGroup RDN' EQUALITY caseExactIA5Match SUBSTR caseExactIA5 - SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {57}( 1.3.6.1.4.1.38414.8.19.2 NAME 'fdForceSaslPasswordA - sk' DESC 'FusionDirectory - Force password ask for SASL users' EQUALITY boo - leanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {58}( 1.3.6.1.4.1.38414.8.20.1 NAME 'fdSslCaCertPath' DES - C 'FusionDirectory - CA certificate path' EQUALITY caseExactIA5Match SUBSTR - caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VA - LUE) -olcAttributeTypes: {59}( 1.3.6.1.4.1.38414.8.20.2 NAME 'fdSslKeyPath' DESC ' - FusionDirectory - SSL key path' EQUALITY caseExactIA5Match SUBSTR caseExact - IA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE) -olcAttributeTypes: {60}( 1.3.6.1.4.1.38414.8.20.3 NAME 'fdSslCertPath' DESC - 'FusionDirectory - SSL certificate path' EQUALITY caseExactIA5Match SUBSTR - caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VAL - UE) -olcAttributeTypes: {61}( 1.3.6.1.4.1.38414.27.1.1 NAME 'fdDashboardPrefix' D - ESC 'FusionDirectory - Dashboard computer name prefix' EQUALITY caseExactIA - 5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1 - .26) -olcAttributeTypes: {62}( 1.3.6.1.4.1.38414.27.1.2 NAME 'fdDashboardNumberOfD - igit' DESC 'FusionDirectory - Dashboard number of digits after prefixes in - computer names' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 - SINGLE-VALUE ) -olcAttributeTypes: {63}( 1.3.6.1.4.1.38414.27.1.3 NAME 'fdDashboardExpiredAc - countsDays' DESC 'FusionDirectory - Dashboard number of days before expirat - ion to be shown in board user tab' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1 - .1466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {64}( 1.3.6.1.4.1.38414.8.110.1 NAME 'fdPasswordRecoveryA - ctivated' DESC 'Fusion Directory - Password recovery enabled/disabled' EQUA - LITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) -olcAttributeTypes: {65}( 1.3.6.1.4.1.38414.8.110.2 NAME 'fdPasswordRecoveryE - mail' DESC 'Fusion Directory - Password recovery sender email' EQUALITY cas - eExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: {66}( 1.3.6.1.4.1.38414.8.110.3 NAME 'fdPasswordRecoveryM - ailSubject' DESC 'Fusion Directory - Password recovery first email subject' - EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE - ) -olcAttributeTypes: {67}( 1.3.6.1.4.1.38414.8.110.4 NAME 'fdPasswordRecoveryM - ailBody' DESC 'Fusion Directory - Password recovery first email body' EQUAL - ITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {68}( 1.3.6.1.4.1.38414.8.110.5 NAME 'fdPasswordRecoveryM - ail2Subject' DESC 'Fusion Directory - Password recovery second email subjec - t' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALU - E ) -olcAttributeTypes: {69}( 1.3.6.1.4.1.38414.8.110.6 NAME 'fdPasswordRecoveryM - ail2Body' DESC 'Fusion Directory - Password recovery second email body' EQU - ALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) -olcAttributeTypes: {70}( 1.3.6.1.4.1.38414.8.110.7 NAME 'fdPasswordRecoveryV - alidity' DESC 'Fusion Directory - Password recovery link validity in minute - s' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1 - 466.115.121.1.27 SINGLE-VALUE ) -olcAttributeTypes: {71}( 1.3.6.1.4.1.38414.8.110.8 NAME 'fdPasswordRecoveryS - alt' DESC 'Fusion Directory - Password recovery token salt' EQUALITY caseEx - actIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) -olcAttributeTypes: {72}( 1.3.6.1.4.1.38414.8.110.9 NAME 'fdPasswordRecoveryU - seAlternate' DESC 'Fusion Directory - Allow/disallow the use of alternate a - ddresses for password recovery' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.14 - 66.115.121.1.7 SINGLE-VALUE ) -olcObjectClasses: {0}( 1.3.6.1.4.1.38414.8.2.1 NAME 'fusionDirectoryConf' DE - SC 'FusionDirectory configuration' SUP top STRUCTURAL MUST ( cn ) MAY ( fus - ionConfigMd5 $ fdSchemaCheck $ fdLanguage $ fdTheme $ fdTimezone $ fdAccoun - tPrimaryAttribute $ fdNextIdHook $ fdIdGenerator $ fdStrictNamingRules $ fd - MinId $ fdUidNumberBase $ fdGidNumberBase $ fdUserRDN $ fdGroupRDN $ fdIdAl - locationMethod $ fdGidNumberPoolMin $ fdUidNumberPoolMin $ fdGidNumberPoolM - ax $ fdUidNumberPoolMax $ fdAclRoleRDN $ fdCnPattern $ fdPasswordDefaultHas - h $ fdPasswordMinLength $ fdPasswordMinDiffer $ fdPasswordHook $ fdHandleEx - piredAccounts $ fdSaslRealm $ fdSaslExop $ fdForcePasswordDefaultHash $ fdP - rimaryGroupFilter $ fdListSummary $ fdModificationDetectionAttribute $ fdLo - gging $ fdLdapSizeLimit $ fdLoginAttribute $ fdForceSSL $ fdWarnSSL $ fdSto - reFilterSettings $ fdSessionLifeTime $ fdDisplayErrors $ fdLdapMaxQueryTime - $ fdLdapStats $ fdDebugLevel $ fdEnableSnapshots $ fdSnapshotBase $ fdTabH - ook $ fdShells $ fdDisplayHookOutput $ fdAclTabOnObjects $ fdRfc2307bis $ f - dCopyPaste $ fdSnapshotURI $ fdSnapshotAdminDn $ fdSnapshotAdminPassword $ - fdPersonalTitleInDN $ fdAccountRDN $ fdSslCaCertPath $ fdSslKeyPath $ fdSsl - CertPath ) ) -olcObjectClasses: {1}( 1.3.6.1.4.1.38414.8.2.2 NAME 'fusionDirectoryPluginsC - onf' DESC 'FusionDirectory plugins configuration' SUP top AUXILIARY MUST ( - cn ) MAY ( fdOGroupRDN $ fdForceSaslPasswordAsk ) ) -olcObjectClasses: {2}( 1.3.6.1.4.1.38414.8.2.3 NAME 'fdPasswordRecoveryConf' - DESC 'FusionDirectory password recovery configuration' SUP top AUXILIARY M - UST ( cn ) MAY ( fdPasswordRecoveryActivated $ fdPasswordRecoveryEmail - $ fdPasswordRecoveryMailSubject $ fdPasswordRecoveryMailBody $ fdPas - swordRecoveryMail2Subject $ fdPasswordRecoveryMail2Body $ fdPasswordRecove - ryValidity $ fdPasswordRecoverySalt $ fdPasswordRecoveryUseAltern - ate ) ) -olcObjectClasses: {3}( 1.3.6.1.4.1.38414.27.2.1 NAME 'fdDashboardPluginConf' - DESC 'FusionDirectory dashboard plugin configuration' SUP top AUXILIARY MU - ST ( cn ) MAY ( fdDashboardPrefix $ fdDashboardNumberOfDigit $ fdDashboardE - xpiredAccountsDays) ) -structuralObjectClass: olcSchemaConfig -entryUUID: 51421fd6-4b46-1035-8a62-a5f01aea6174 -creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -createTimestamp: 20160109175822Z -entryCSN: 20160109175822.374659Z#000000#000#000000 -modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -modifyTimestamp: 20160109175822Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={6}ldapns.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={6}ldapns.ldif deleted file mode 100644 index 4d27641..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={6}ldapns.ldif +++ /dev/null @@ -1,20 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 1eeccea7 -dn: cn={6}ldapns -objectClass: olcSchemaConfig -cn: {6}ldapns -olcAttributeTypes: {0}( 1.3.6.1.4.1.5322.17.2.1 NAME 'authorizedService' DES - C 'IANA GSS-API authorized service name' EQUALITY caseIgnoreMatch SYNTAX 1. - 3.6.1.4.1.1466.115.121.1.15{256} ) -olcObjectClasses: {0}( 1.3.6.1.4.1.5322.17.1.1 NAME 'authorizedServiceObject - ' DESC 'Auxiliary object class for adding authorizedService attribute' SUP - top AUXILIARY MAY authorizedService ) -olcObjectClasses: {1}( 1.3.6.1.4.1.5322.17.1.2 NAME 'hostObject' DESC 'Auxil - iary object class for adding host attribute' SUP top AUXILIARY MAY host ) -structuralObjectClass: olcSchemaConfig -entryUUID: 51461df2-4b46-1035-8a63-a5f01aea6174 -creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -createTimestamp: 20160109175822Z -entryCSN: 20160109175822.400798Z#000000#000#000000 -modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -modifyTimestamp: 20160109175822Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={7}template-fd.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={7}template-fd.ldif deleted file mode 100644 index 0187d53..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/cn=schema/cn={7}template-fd.ldif +++ /dev/null @@ -1,17 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 22a14bb7 -dn: cn={7}template-fd -objectClass: olcSchemaConfig -cn: {7}template-fd -olcAttributeTypes: {0}( 1.3.6.1.4.1.38414.38.1.1 NAME 'fdTemplateField' DESC - 'FusionDirectory - template field' EQUALITY caseExactMatch SYNTAX 1.3.6.1. - 4.1.1466.115.121.1.15) -olcObjectClasses: {0}(1.3.6.1.4.1.38414.38.2.1 NAME 'fdTemplate' DESC 'Fusio - nDirectory - template object' MUST ( cn ) MAY ( fdTemplateField ) ) -structuralObjectClass: olcSchemaConfig -entryUUID: 51499c84-4b46-1035-8a64-a5f01aea6174 -creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -createTimestamp: 20160109175822Z -entryCSN: 20160109175822.423697Z#000000#000#000000 -modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth -modifyTimestamp: 20160109175822Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/olcBackend={0}mdb.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/olcBackend={0}mdb.ldif deleted file mode 100644 index aeb9bc2..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/olcBackend={0}mdb.ldif +++ /dev/null @@ -1,12 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 b76c0b19 -dn: olcBackend={0}mdb -objectClass: olcBackendConfig -olcBackend: {0}mdb -structuralObjectClass: olcBackendConfig -entryUUID: 3530bc2c-4b40-1035-97f4-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.304112Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={-1}frontend.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={-1}frontend.ldif deleted file mode 100644 index 168147a..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={-1}frontend.ldif +++ /dev/null @@ -1,18 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 8a1c1b89 -dn: olcDatabase={-1}frontend -objectClass: olcDatabaseConfig -objectClass: olcFrontendConfig -olcDatabase: {-1}frontend -olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern - al,cn=auth manage by * break -olcAccess: {1}to dn.exact="" by * read -olcAccess: {2}to dn.base="cn=Subschema" by * read -olcSizeLimit: 500 -structuralObjectClass: olcDatabaseConfig -entryUUID: 352fd8d4-4b40-1035-97ec-87e18fb4723c -creatorsName: cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.298281Z#000000#000#000000 -modifiersName: cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={0}config.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={0}config.ldif deleted file mode 100644 index c3e42c0..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={0}config.ldif +++ /dev/null @@ -1,15 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 84ef2f3c -dn: olcDatabase={0}config -objectClass: olcDatabaseConfig -olcDatabase: {0}config -olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern - al,cn=auth manage by * break -olcRootDN: cn=admin,cn=config -structuralObjectClass: olcDatabaseConfig -entryUUID: 352fe7ac-4b40-1035-97ed-87e18fb4723c -creatorsName: cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.298680Z#000000#000#000000 -modifiersName: cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={1}mdb.ldif b/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={1}mdb.ldif deleted file mode 100644 index 515cf11..0000000 --- a/ldap/data/ldap_conf/slapd.d/cn=config/olcDatabase={1}mdb.ldif +++ /dev/null @@ -1,28 +0,0 @@ -# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. -# CRC32 403a1978 -dn: olcDatabase={1}mdb -objectClass: olcDatabaseConfig -objectClass: olcMdbConfig -olcDatabase: {1}mdb -olcDbDirectory: /var/lib/ldap -olcSuffix: dc=warpzone,dc=ms -olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonym - ous auth by * none -olcAccess: {1}to dn.base="" by * read -olcAccess: {2}to * by * read -olcLastMod: TRUE -olcRootDN: cn=admin,dc=warpzone,dc=ms -olcRootPW:: e1NTSEF9aTZsUlYvdlhLVUFxU255ZEF6YUZUQUN4NmxRRUpmbE4= -olcDbCheckpoint: 512 30 -olcDbIndex: objectClass eq -olcDbIndex: cn,uid eq -olcDbIndex: uidNumber,gidNumber eq -olcDbIndex: member,memberUid eq -olcDbMaxSize: 1073741824 -structuralObjectClass: olcMdbConfig -entryUUID: 3530c8e8-4b40-1035-97f5-87e18fb4723c -creatorsName: cn=admin,cn=config -createTimestamp: 20160109171438Z -entryCSN: 20160109171438.304442Z#000000#000#000000 -modifiersName: cn=admin,cn=config -modifyTimestamp: 20160109171438Z diff --git a/ldap/data/ldap_db/data.mdb b/ldap/data/ldap_db/data.mdb deleted file mode 100644 index 49999d4bc92eb12193494fef7016c2f3ba2c1366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147456 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K(}G=8iF`+vV+ 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 Vt^o0<Q=H+u7dCGFpDTU${{whc&))z5 diff --git a/ldap/data/ldap_db/lock.mdb b/ldap/data/ldap_db/lock.mdb deleted file mode 100644 index 2f787b55451e6366f4649a56b3d6e38634a7b7e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 zcmeIuAr62r3<c1^NiiG&y`2gi;TAZqfJ6>63}hiV#H(rg*JjDvmVItQ6YiDnL7Dr~ z+sb>Y<h3}L>aK+&PeZ(h_x`wF<M`$N{RbNa2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs O0RjXF5FkL{{{km(RvZQZ diff --git a/ldap/data/start.sh b/ldap/data/start.sh deleted file mode 100644 index 6b6d324..0000000 --- a/ldap/data/start.sh +++ /dev/null @@ -1,25 +0,0 @@ -if [ ! -f /etc/ldap/ldap.conf ]; then - echo "[ ok ] Creating initial Configuration" - cp -r /tmp/ldap/* /etc/ldap/; - rm -r /tmp/ldap/ -fi - -#apt-get update && apt-get install -y \ -# fusiondirectory \ -# fusiondirectory-schema \ -# fusiondirectory-plugin-ssh - -service rsyslog restart -chown -R openldap:openldap /etc/ldap/slapd.d -chown -R openldap:openldap /var/lib/ldap -service slapd restart -cp -r /tmp/ldap/schema/fusiondirectory /etc/ldap/schema/ - -chown -R www-data /etc/fusiondirectory/ -chmod 770 /etc/fusiondirectory/fusiondirectory.conf - -fusiondirectory-insert-schema -fusiondirectory-insert-schema -i /etc/ldap/schema/fusiondirectory/openssh-lpk.schema -service apache2 restart -bash - diff --git a/ldap/initial_config.tar.gz b/ldap/initial_config.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..11945d2efd995f1a68a9b3c7be09744eb6540d4f GIT binary patch literal 23805 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 E0D}pnj{pDw literal 0 HcmV?d00001 diff --git a/ldap/initial_database.gz b/ldap/initial_database.gz new file mode 100644 index 0000000000000000000000000000000000000000..888cba1913b2928e34e9d6f68f39dca598074d43 GIT binary patch literal 39856 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�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 O>c@q<e|T8^hyMk|0IlW# literal 0 HcmV?d00001 diff --git a/ldap/run.sh b/ldap/run.sh index f691975..b52fa95 100644 --- a/ldap/run.sh +++ b/ldap/run.sh @@ -1,12 +1,20 @@ -#docker run -v /opt/warpauth/data/warpauth:/opt/warpauth -p 389:389 -it warpauth -#-v /opt/warpauth/data/warpauth:/opt/warpauth +docker kill ldap-service phpldapadmin-service +docker rm ldap-service phpldapadmin-service +docker run \ + --env LDAP_ORGANISATION="Warpzone" \ + --env LDAP_DOMAIN="warpzone.ms" \ + --env LDAP_ADMIN_PASSWORD="k7dAw8j2" \ + --volume /opt/warpzone/ldap/data/database:/var/lib/ldap \ + --volume /opt/warpzone/ldap/data/config:/etc/ldap/slapd.d \ + --name ldap-service \ + --hostname ldap-service \ + --detach osixia/openldap:latest docker run \ - --name ldap \ - -v ${PWD}/data/ldap_db:/var/lib/ldap \ - -v ${PWD}/data/ldap_conf:/etc/ldap \ - -v ${PWD}/data/fusiondirectory:/etc/fusiondirectory \ - -p 389:389 \ - -p 8123:80 \ - -it \ - ldap + --name phpldapadmin-service \ + --hostname phpldapadmin-service \ + --link ldap-service:ldap-host \ + --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host \ + -p 6443:443 \ + --detach osixia/phpldapadmin:latest + diff --git a/ldap/stop_ldap.sh b/ldap/stop_ldap.sh deleted file mode 100644 index 5107941..0000000 --- a/ldap/stop_ldap.sh +++ /dev/null @@ -1,3 +0,0 @@ -docker kill ldap -docker rm ldap - diff --git a/slacktest b/slacktest deleted file mode 100644 index de8f6ea..0000000 --- a/slacktest +++ /dev/null @@ -1,3 +0,0 @@ -test slack -test2 -asd \ No newline at end of file diff --git a/web_docker/Dockerfile b/web_docker/Dockerfile deleted file mode 100644 index 25f5b35..0000000 --- a/web_docker/Dockerfile +++ /dev/null @@ -1,35 +0,0 @@ -From debian:jessie - -RUN apt-get update && apt-get install -y \ - debconf-utils \ - apt-utils \ - ssh \ - less \ - ldap-utils \ - rsyslog \ - nano \ - python \ - python-pip \ - python-ldap \ - python-dev \ - build-essential \ - libfreetype6-dev \ - python-imaging \ - libjpeg-dev - -RUN apt-get -y install libsasl2-dev python-dev libldap2-dev libssl-dev - -RUN pip install django \ - django-ldapdb \ - django-auth-ldap \ - reportlab \ - --upgrade - -RUN apt-get install -y python-bootstrapform -COPY entrypoint.sh /opt/entrypoint.sh -EXPOSE 22 8000 - -VOLUME ["/opt/warpauth"] - -ENTRYPOINT sh /opt/entrypoint.sh - diff --git a/web_docker/build.sh b/web_docker/build.sh deleted file mode 100644 index e833f90..0000000 --- a/web_docker/build.sh +++ /dev/null @@ -1 +0,0 @@ -docker build -t warpauth_web . diff --git a/web_docker/entrypoint.sh b/web_docker/entrypoint.sh deleted file mode 100644 index 068a763..0000000 --- a/web_docker/entrypoint.sh +++ /dev/null @@ -1,10 +0,0 @@ -service rsyslog restart -cd /opt/warpauth; - -python manage.py makemigrations -python manage.py migrate - -python manage.py runserver 0.0.0.0:8000 - -bash - diff --git a/web_docker/run.sh b/web_docker/run.sh deleted file mode 100644 index 7710f89..0000000 --- a/web_docker/run.sh +++ /dev/null @@ -1,6 +0,0 @@ -docker run \ - -v /home/chris/Documents/warpzone/pycharm/web:/opt/warpauth \ - --link ldap:ldap \ - -p 8000:8000 \ - -itd \ - warpauth_web diff --git a/www/build.sh b/www/build.sh new file mode 100644 index 0000000..51abdce --- /dev/null +++ b/www/build.sh @@ -0,0 +1 @@ +cd docker; docker build -t warpinfra .; cd - diff --git a/www/docker/Dockerfile b/www/docker/Dockerfile new file mode 100644 index 0000000..1a1da0a --- /dev/null +++ b/www/docker/Dockerfile @@ -0,0 +1,46 @@ +From debian:jessie + +# Common Packages +RUN apt-get update && apt-get install -y \ + debconf-utils apt-utils rsyslog less nano \ + ldap-utils \ + build-essential \ + libfreetype6-dev \ + libjpeg-dev \ + libsasl2-dev \ + libldap2-dev \ + libssl-dev \ + nginx + +# Python Packages +RUN apt-get update && apt-get install -y \ + python3 \ + python3-pip \ + python3-dev \ + python3-bootstrapform + +RUN pip3 install \ + django==1.9 \ + django-ldapdb \ + django-auth-ldap \ + reportlab \ + djangorestframework \ + ldap3 \ + uwsgi \ + --upgrade + +RUN ln -s /opt/nginx/nginx_warpinfra.conf /etc/nginx/sites-enabled/ +RUN rm /etc/nginx/sites-enabled/default + +COPY ldapdb_base.py /usr/local/lib/python2.7/dist-packages/ldapdb/backends/ldap/base.py +COPY entrypoint.sh /opt/entrypoint.sh + +EXPOSE 8000 + +VOLUME ["/opt/nginx", "/opt/warpinfra"] + +ENTRYPOINT sh /opt/entrypoint.sh + + +#COPY ldapdb_fields.py /usr/local/lib/python2.7/dist-packages/ldapdb/models/fields.py + diff --git a/www/docker/entrypoint.sh b/www/docker/entrypoint.sh new file mode 100644 index 0000000..ac1f3e3 --- /dev/null +++ b/www/docker/entrypoint.sh @@ -0,0 +1,13 @@ +service rsyslog restart +service nginx restart + +cd /opt/warpinfra; +python3 manage.py makemigrations +python3 manage.py migrate +python3 manage.py collectstatic --noinput + +uwsgi --ini /opt/nginx/uwsgi.ini --py-autoreload 1 + +bash + + diff --git a/www/docker/ldapdb_base.py b/www/docker/ldapdb_base.py new file mode 100644 index 0000000..86be20b --- /dev/null +++ b/www/docker/ldapdb_base.py @@ -0,0 +1,268 @@ +# -*- coding: utf-8 -*- +# This software is distributed under the two-clause BSD license. +# Copyright (c) The django-ldapdb project + +from __future__ import unicode_literals + +import ldap +import django + +if django.VERSION < (1, 8): + from django.db.backends import (BaseDatabaseFeatures, BaseDatabaseOperations, + BaseDatabaseWrapper) + from django.db.backends.creation import BaseDatabaseCreation +else: + from django.db.backends.base.features import BaseDatabaseFeatures + from django.db.backends.base.operations import BaseDatabaseOperations + from django.db.backends.base.base import BaseDatabaseWrapper + from django.db.backends.base.creation import BaseDatabaseCreation + from django.db.backends.base.validation import BaseDatabaseValidation + + +class DatabaseCreation(BaseDatabaseCreation): + def create_test_db(self, *args, **kwargs): + """ + Creates a test database, prompting the user for confirmation if the + database already exists. Returns the name of the test database created. + """ + pass + + def destroy_test_db(self, *args, **kwargs): + """ + Destroy a test database, prompting the user for confirmation if the + database already exists. Returns the name of the test database created. + """ + pass + + +class DatabaseCursor(object): + def __init__(self, ldap_connection): + self.connection = ldap_connection + + +class DatabaseFeatures(BaseDatabaseFeatures): + def __init__(self, connection): + self.connection = connection + self.supports_transactions = False + + +class DatabaseOperations(BaseDatabaseOperations): + compiler_module = "ldapdb.backends.ldap.compiler" + + def quote_name(self, name): + return name + + def no_limit_value(self): + return -1 + + +class LdapDatabase(object): + # Base class for all exceptions + Error = ldap.LDAPError + + class DatabaseError(Error): + """Database-side errors.""" + + class OperationalError( + DatabaseError, + ldap.ADMINLIMIT_EXCEEDED, + ldap.AUTH_METHOD_NOT_SUPPORTED, + ldap.AUTH_UNKNOWN, + ldap.BUSY, + ldap.CONFIDENTIALITY_REQUIRED, + ldap.CONNECT_ERROR, + ldap.INAPPROPRIATE_AUTH, + ldap.INVALID_CREDENTIALS, + ldap.OPERATIONS_ERROR, + ldap.RESULTS_TOO_LARGE, + ldap.SASL_BIND_IN_PROGRESS, + ldap.SERVER_DOWN, + ldap.SIZELIMIT_EXCEEDED, + ldap.STRONG_AUTH_NOT_SUPPORTED, + ldap.STRONG_AUTH_REQUIRED, + ldap.TIMELIMIT_EXCEEDED, + ldap.TIMEOUT, + ldap.UNAVAILABLE, + ldap.UNAVAILABLE_CRITICAL_EXTENSION, + ldap.UNWILLING_TO_PERFORM, + ): + """Exceptions related to the database operations, out of the programmer control.""" + + class IntegrityError( + DatabaseError, + ldap.AFFECTS_MULTIPLE_DSAS, + ldap.ALREADY_EXISTS, + ldap.CONSTRAINT_VIOLATION, + ldap.TYPE_OR_VALUE_EXISTS, + ): + """Exceptions related to database Integrity.""" + + class DataError( + DatabaseError, + ldap.INVALID_DN_SYNTAX, + ldap.INVALID_SYNTAX, + ldap.NOT_ALLOWED_ON_NONLEAF, + ldap.NOT_ALLOWED_ON_RDN, + ldap.OBJECT_CLASS_VIOLATION, + ldap.UNDEFINED_TYPE, + ): + """Exceptions related to invalid data""" + + class InterfaceError( + ldap.CLIENT_LOOP, + ldap.DECODING_ERROR, + ldap.ENCODING_ERROR, + ldap.LOCAL_ERROR, + ldap.LOOP_DETECT, + ldap.NO_MEMORY, + ldap.PROTOCOL_ERROR, + ldap.REFERRAL_LIMIT_EXCEEDED, + ldap.USER_CANCELLED, + Error, + ): + """Exceptions related to the pyldap interface.""" + + class InternalError( + DatabaseError, + ldap.ALIAS_DEREF_PROBLEM, + ldap.ALIAS_PROBLEM, + ): + """Exceptions encountered within the database.""" + + class ProgrammingError( + DatabaseError, + ldap.CONTROL_NOT_FOUND, + ldap.FILTER_ERROR, + ldap.INAPPROPRIATE_MATCHING, + ldap.NAMING_VIOLATION, + ldap.NO_SUCH_ATTRIBUTE, + ldap.NO_SUCH_OBJECT, + ldap.PARAM_ERROR, + ): + """Invalid data send by the programmer.""" + + class NotSupportedError( + DatabaseError, + ldap.NOT_SUPPORTED, + ): + """Exception for unsupported actions.""" + + +class DatabaseWrapper(BaseDatabaseWrapper): + vendor = 'ldap' + + Database = LdapDatabase + + # NOTE: These are copied from the mysql DatabaseWrapper + operators = { + 'exact': '= %s', + 'iexact': 'LIKE %s', + 'contains': 'LIKE BINARY %s', + 'icontains': 'LIKE %s', + 'regex': 'REGEXP BINARY %s', + 'iregex': 'REGEXP %s', + 'gt': '> %s', + 'gte': '>= %s', + 'lt': '< %s', + 'lte': '<= %s', + 'startswith': 'LIKE BINARY %s', + 'endswith': 'LIKE BINARY %s', + 'istartswith': 'LIKE %s', + 'iendswith': 'LIKE %s', + } + + def __init__(self, *args, **kwargs): + super(DatabaseWrapper, self).__init__(*args, **kwargs) + + # Charset used for LDAP text *values* + self.charset = "utf-8" + self.creation = DatabaseCreation(self) + self.features = DatabaseFeatures(self) + self.ops = DatabaseOperations(self) + self.settings_dict['SUPPORTS_TRANSACTIONS'] = True + self.autocommit = True + + if django.VERSION >= (1, 8): + self.validation = BaseDatabaseValidation(self) + + def close(self): + if hasattr(self, 'validate_thread_sharing'): + # django >= 1.4 + self.validate_thread_sharing() + if self.connection is not None: + self.connection.unbind_s() + self.connection = None + + def get_connection_params(self): + """Compute appropriate parameters for establishing a new connection. + + Computed at system startup. + """ + return { + 'uri': self.settings_dict['NAME'], + 'tls': self.settings_dict.get('TLS', False), + 'bind_dn': self.settings_dict['USER'], + 'bind_pw': self.settings_dict['PASSWORD'], + 'options': self.settings_dict.get('CONNECTION_OPTIONS', {}), + } + + def get_new_connection(self, conn_params): + """Build a connection from its parameters.""" + connection = ldap.initialize(conn_params['uri'], bytes_mode=False) + + options = conn_params['options'] + for opt, value in options.items(): + connection.set_option(opt, value) + + if conn_params['tls']: + connection.start_tls_s() + + connection.simple_bind_s( + conn_params['bind_dn'], + conn_params['bind_pw'], + ) + return connection + + def init_connection_state(self): + """Initialize python-side connection state.""" + pass + + def _commit(self): + pass + + def _cursor(self): + self.ensure_connection() + return DatabaseCursor(self.connection) + + def _rollback(self): + pass + + def _set_autocommit(self, autocommit): + pass + + def add_s(self, dn, modlist): + cursor = self._cursor() + return cursor.connection.add_s(dn, modlist) + + def delete_s(self, dn): + cursor = self._cursor() + return cursor.connection.delete_s(dn) + + def modify_s(self, dn, modlist): + cursor = self._cursor() + return cursor.connection.modify_s(dn, modlist) + + def rename_s(self, dn, newrdn): + cursor = self._cursor() + return cursor.connection.rename_s(dn, newrdn) + + def search_s(self, base, scope, filterstr='(objectClass=*)', + attrlist=None): + cursor = self._cursor() + results = cursor.connection.search_s(base, scope, filterstr, attrlist) + output = [] + for dn, attrs in results: + # skip referrals + if dn is not None: + output.append((dn, attrs)) + return output \ No newline at end of file diff --git a/www/docker/ldapdb_fields.py b/www/docker/ldapdb_fields.py new file mode 100644 index 0000000..099624f --- /dev/null +++ b/www/docker/ldapdb_fields.py @@ -0,0 +1,207 @@ +# -*- coding: utf-8 -*- +# This software is distributed under the two-clause BSD license. +# Copyright (c) The django-ldapdb project + +from __future__ import unicode_literals + +from ldapdb import escape_ldap_filter +import datetime +from django.db.models import fields + + +class CharField(fields.CharField): + def __init__(self, *args, **kwargs): + defaults = {'max_length': 200} + defaults.update(kwargs) + super(CharField, self).__init__(*args, **defaults) + + def from_ldap(self, value, connection): + if len(value) == 0: + return '' + else: + return value[0].decode(connection.charset) + + def get_db_prep_lookup(self, lookup_type, value, connection, + prepared=False): + "Returns field's value prepared for database lookup." + if lookup_type == 'endswith': + return ["*%s" % escape_ldap_filter(value)] + elif lookup_type == 'startswith': + return ["%s*" % escape_ldap_filter(value)] + elif lookup_type in ['contains', 'icontains']: + return ["*%s*" % escape_ldap_filter(value)] + elif lookup_type == 'exact': + return [escape_ldap_filter(value)] + elif lookup_type == 'in': + return [escape_ldap_filter(v) for v in value] + + raise TypeError("CharField has invalid lookup: %s" % lookup_type) + + def get_db_prep_save(self, value, connection): + if not value: + return None + return [value.encode(connection.charset)] + + def get_prep_lookup(self, lookup_type, value): + "Perform preliminary non-db specific lookup checks and conversions" + if lookup_type == 'endswith': + return "*%s" % escape_ldap_filter(value) + elif lookup_type == 'startswith': + return "%s*" % escape_ldap_filter(value) + elif lookup_type in ['contains', 'icontains']: + return "*%s*" % escape_ldap_filter(value) + elif lookup_type == 'exact': + return escape_ldap_filter(value) + elif lookup_type == 'in': + return [escape_ldap_filter(v) for v in value] + + raise TypeError("CharField has invalid lookup: %s" % lookup_type) + + +class ImageField(fields.Field): + def from_ldap(self, value, connection): + if len(value) == 0: + return '' + else: + return value[0] + + def get_db_prep_lookup(self, lookup_type, value, connection, + prepared=False): + "Returns field's value prepared for database lookup." + return [self.get_prep_lookup(lookup_type, value)] + + def get_db_prep_save(self, value, connection): + if not value: + return None + return [value] + + def get_prep_lookup(self, lookup_type, value): + "Perform preliminary non-db specific lookup checks and conversions" + raise TypeError("ImageField has invalid lookup: %s" % lookup_type) + + +class IntegerField(fields.IntegerField): + def from_ldap(self, value, connection): + if len(value) == 0: + return 0 + else: + return int(value[0]) + + def get_db_prep_lookup(self, lookup_type, value, connection, + prepared=False): + "Returns field's value prepared for database lookup." + return [self.get_prep_lookup(lookup_type, value)] + + def get_db_prep_save(self, value, connection): + if value is None: + return None + return [str(value).encode(connection.charset)] + + def get_prep_lookup(self, lookup_type, value): + "Perform preliminary non-db specific lookup checks and conversions" + if lookup_type in ('exact', 'gte', 'lte'): + return value + raise TypeError("IntegerField has invalid lookup: %s" % lookup_type) + + +class FloatField(fields.FloatField): + def from_ldap(self, value, connection): + if len(value) == 0: + return 0.0 + else: + return float(value[0]) + + def get_db_prep_lookup(self, lookup_type, value, connection, + prepared=False): + "Returns field's value prepared for database lookup." + return [self.get_prep_lookup(lookup_type, value)] + + def get_db_prep_save(self, value, connection): + if value is None: + return None + return [str(value).encode(connection.charset)] + + def get_prep_lookup(self, lookup_type, value): + "Perform preliminary non-db specific lookup checks and conversions" + if lookup_type in ('exact', 'gte', 'lte'): + return value + raise TypeError("FloatField has invalid lookup: %s" % lookup_type) + + +class ListField(fields.Field): + + def from_ldap(self, value, connection): + return [x.decode(connection.charset) for x in value] + + def get_db_prep_lookup(self, lookup_type, value, connection, + prepared=False): + "Returns field's value prepared for database lookup." + return [self.get_prep_lookup(lookup_type, value)] + + def get_db_prep_save(self, value, connection): + if not value: + return None + return [x.encode(connection.charset) for x in value] + + def get_prep_lookup(self, lookup_type, value): + "Perform preliminary non-db specific lookup checks and conversions" + if lookup_type == 'contains': + return escape_ldap_filter(value) + raise TypeError("ListField has invalid lookup: %s" % lookup_type) + + def from_db_value(self, value, expression, connection, context): + if not value: + return [] + return value + + def to_python(self, value): + if not value: + return [] + return value + + +class DateField(fields.DateField): + """ + A text field containing date, in specified format. + The format can be specified as 'format' argument, as strptime() + format string. It defaults to ISO8601 (%Y-%m-%d). + + Note: 'lte' and 'gte' lookups are done string-wise. Therefore, + they will onlywork correctly on Y-m-d dates with constant + component widths. + """ + + def __init__(self, *args, **kwargs): + if 'format' in kwargs: + self._date_format = kwargs.pop('format') + else: + self._date_format = '%Y-%m-%d' + super(DateField, self).__init__(*args, **kwargs) + + def from_ldap(self, value, connection): + if len(value) == 0: + return None + else: + return datetime.datetime.strptime(value[0], + self._date_format).date() + + def get_db_prep_lookup(self, lookup_type, value, connection, + prepared=False): + "Returns field's value prepared for database lookup." + return [self.get_prep_lookup(lookup_type, value)] + + def get_db_prep_save(self, value, connection): + if not value: + return None + if not isinstance(value, datetime.date) \ + and not isinstance(value, datetime.datetime): + raise ValueError( + 'DateField can be only set to a datetime.date instance') + + return [value.strftime(self._date_format)] + + def get_prep_lookup(self, lookup_type, value): + "Perform preliminary non-db specific lookup checks and conversions" + if lookup_type in ('exact',): + return value + raise TypeError("DateField has invalid lookup: %s" % lookup_type) \ No newline at end of file diff --git a/www/nginx/nginx_warpinfra.conf b/www/nginx/nginx_warpinfra.conf new file mode 100644 index 0000000..d5bb926 --- /dev/null +++ b/www/nginx/nginx_warpinfra.conf @@ -0,0 +1,39 @@ +upstream django { + server unix:///tmp/warpinfra.sock; +} + +server { + listen 80; + return 301 https://$host$request_uri; +} + +# configuration of the server +server { + + listen 443; + server_name _; + charset utf-8; + + + ssl on; + ssl_certificate /opt/nginx/warpinfra.crt; + ssl_certificate_key /opt/nginx/warpinfra.key; + + # max upload size + client_max_body_size 100M; # adjust to taste + + # Django media +# location /media { +# alias /opt/flaghunter/media; # your Django project's media files - amend as required +# } + + location /static { + alias /opt/warpinfra/static; # your Django project's static files - amend as required + } + + # Finally, send all non-media requests to the Django server. + location / { + uwsgi_pass django; + include /opt/nginx/uwsgi_params; # the uwsgi_params file you installed + } +} diff --git a/web/uwsgi.ini b/www/nginx/uwsgi.ini similarity index 87% rename from web/uwsgi.ini rename to www/nginx/uwsgi.ini index f853769..cac057f 100644 --- a/web/uwsgi.ini +++ b/www/nginx/uwsgi.ini @@ -4,7 +4,7 @@ module=warpzone.wsgi:application master=True pidfile=/tmp/warpinfra.pid vacuum=True -socket=0.0.0.0:8000 +socket=/tmp/warpinfra.sock max-requests=5000 daemonize=/var/log/uwsgi.log processes = 10 diff --git a/www/nginx/uwsgi_params b/www/nginx/uwsgi_params new file mode 100644 index 0000000..d26f2ff --- /dev/null +++ b/www/nginx/uwsgi_params @@ -0,0 +1,16 @@ +uwsgi_param QUERY_STRING $query_string; +uwsgi_param REQUEST_METHOD $request_method; +uwsgi_param CONTENT_TYPE $content_type; +uwsgi_param CONTENT_LENGTH $content_length; + +uwsgi_param REQUEST_URI $request_uri; +uwsgi_param PATH_INFO $document_uri; +uwsgi_param DOCUMENT_ROOT $document_root; +uwsgi_param SERVER_PROTOCOL $server_protocol; +uwsgi_param REQUEST_SCHEME $scheme; +uwsgi_param HTTPS $https if_not_empty; + +uwsgi_param REMOTE_ADDR $remote_addr; +uwsgi_param REMOTE_PORT $remote_port; +uwsgi_param SERVER_PORT $server_port; +uwsgi_param SERVER_NAME $server_name; \ No newline at end of file diff --git a/www/nginx/warpinfra.crt b/www/nginx/warpinfra.crt new file mode 100644 index 0000000..57cf97f --- /dev/null +++ b/www/nginx/warpinfra.crt @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFrTCCA5WgAwIBAgIJAKzK6RrFSz83MA0GCSqGSIb3DQEBCwUAMG0xCzAJBgNV +BAYTAkRFMQwwCgYDVQQIDANOUlcxETAPBgNVBAcMCE11ZW5zdGVyMRIwEAYDVQQK +DAlJVFNlY1RlYW0xEzARBgNVBAsMCkZsYWdIdW50ZXIxFDASBgNVBAMMC2ZsYWcu +aHVudGVyMB4XDTE1MTEyMDE5MTQ1OVoXDTE2MTExOTE5MTQ1OVowbTELMAkGA1UE +BhMCREUxDDAKBgNVBAgMA05SVzERMA8GA1UEBwwITXVlbnN0ZXIxEjAQBgNVBAoM +CUlUU2VjVGVhbTETMBEGA1UECwwKRmxhZ0h1bnRlcjEUMBIGA1UEAwwLZmxhZy5o +dW50ZXIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC7toPOwQ1Xcqwk +VJItQC8wifoGeNk/E0k52XYVhvxXsZZI90n3CBp4LEIUMB6tPBwZ/mpI83hUu29f +yWkD1iexWFQF5uJJr4IlAjKjznYuvi7EzbNAQsFTmOYRvmTSVvnONx1PpZFRGEt8 +d4AmeztCMtk9JCV45xPeh7T00mxq7okOFsfrIlKfi7q0N5X1neMK4hgOuRqR+TE3 +MJvcsCKzIi/g1hvrly48OZqhnoBeQZHxbuT2i+jyl56sBjHqRswFxxBOwifEBNsP +V27Q9LWAi6tF1+RU6YYtfD4/en9sLEZ9y9U+Ch9kL82EaScIh234Sxb7VevAdJ3K +b+sL3Vum3JaOwejhTbzMtl2JkTy7knR2PUFW4ZA85MvE6/IChFoYSHVM/rsbUESn +nu08qAQ7AF2Yj/+sPCqc1BUEXxO6qYFeX+yXx4Fbl29xu3d5evbc2CHjVqGuGRyv +2V7XkuUHhvLmYV8AVUFHp1yLxhEZsMl4eSoPjVnNmY/WoljJeNjC7XmHwllsvqJt +59meh7FkD28DPducKnjfsKElqbc5pjeVi24302nHTS41eExalgHCd07j2sQVjXgF +C3BUP2Jl+tU2QV5/jRH2GCLMkhEwP/lPdK5usS9jXhJo0sb56M1ak4ECfavrxHHh +TSmgD9IaqP0ChOVIZ04DuxYxX2MURQIDAQABo1AwTjAdBgNVHQ4EFgQUC/Jkv7Vf +f/VAeY8zrBqvyWe+L4cwHwYDVR0jBBgwFoAUC/Jkv7Vff/VAeY8zrBqvyWe+L4cw +DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAeTtgmsIFI6LgxbyAIc/8 +dZXmP9DKXZkv17UEAKoJC/d+IOqDogXoeRhbo2cLmIXCE5cmhp+xsXZnxke4Oq39 +az6eBlcwaPUUTlzP5MiIqDpzbhi6sjQhp5FmH2/RtFkVzjpNm2NP+7IW1lAxx3is +qxXBCVXYXmiHL6rW5BwNrlGDqwUhFDVZJL4QIBENqwMC7qTubYiukBdaqWz8uTYs +WFOo73fYqG/SNbFifq78czTRoXTTr085Yxnprr4whuqTPpmBd42IUzOxRHF5ICPX +316S6X3b65mTzzz15p1KquUe+VsULnUZTtOOeyIqpm8VWSu4EoKK0c2w8bZkgImR +ttAMRnA4S00ZuhQ1CnJgMX/54krJWdswJH7O+fTsu7A7jy2PhADbyhPx61pVyH2H +zYm+7RPlvGgdkqvdyO6EeZN1RRIPkyUb+6bbCwHPIDRc+DXh5dq4w0wN7vctMMri +eo+OrxK97O4egmg67J3XCYBCmPsnH0vaV/UTOgmyeo7Y8NqMulUOCVz1PhidW0r2 +M7dRB7958G6Z1tuuFXr0Y+88RDyTHdu9XqCLHjLAjF2PIqhPHZ59KnHVmb4bWICK +4D3rdOS0woeiXCxUQxekBh8ZMBIzyeUONrkYykBwV5sZrMZt26GGMlNyJ7uYcFzW +MsRX8eO4RytlNdVSGVSrLpQ= +-----END CERTIFICATE----- diff --git a/www/nginx/warpinfra.key b/www/nginx/warpinfra.key new file mode 100644 index 0000000..fb31d8d --- /dev/null +++ b/www/nginx/warpinfra.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +su7ZYG7K5L+RRjrWZagNh8X2s6qeaA== +-----END PRIVATE KEY----- diff --git a/www/run.sh b/www/run.sh new file mode 100644 index 0000000..5924b83 --- /dev/null +++ b/www/run.sh @@ -0,0 +1,11 @@ +docker kill warpinfra +docker rm warpinfra + +docker run \ + -v /opt/warpzone/www/web:/opt/warpinfra \ + -v /opt/warpzone/www/nginx:/opt/nginx \ + --link ldap-service:ldap \ + --name warpinfra \ + -p 8000:443 \ + -itd \ + warpinfra diff --git a/www/web/.idea/.name b/www/web/.idea/.name new file mode 100644 index 0000000..6f3439a --- /dev/null +++ b/www/web/.idea/.name @@ -0,0 +1 @@ +web \ No newline at end of file diff --git a/www/web/.idea/deployment.xml b/www/web/.idea/deployment.xml new file mode 100644 index 0000000..2c45a15 --- /dev/null +++ b/www/web/.idea/deployment.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="PublishConfigData" autoUpload="Always" serverName="localUbbuntu"> + <serverData> + <paths name="localUbbuntu"> + <serverdata> + <mappings> + <mapping deploy="web" local="$PROJECT_DIR$" web="/" /> + </mappings> + </serverdata> + </paths> + <paths name="s1WARP"> + <serverdata> + <mappings> + <mapping deploy="/warpauth" local="$PROJECT_DIR$" web="/" /> + </mappings> + </serverdata> + </paths> + </serverData> + <option name="myAutoUpload" value="ALWAYS" /> + </component> +</project> \ No newline at end of file diff --git a/www/web/.idea/dictionaries/dresen.xml b/www/web/.idea/dictionaries/dresen.xml new file mode 100644 index 0000000..c1e15a4 --- /dev/null +++ b/www/web/.idea/dictionaries/dresen.xml @@ -0,0 +1,24 @@ +<component name="ProjectDictionaryState"> + <dictionary name="dresen"> + <words> + <w>backends</w> + <w>bootstrapform</w> + <w>clickjacking</w> + <w>csrf</w> + <w>dyhost</w> + <w>howto</w> + <w>insp</w> + <w>ldapdb</w> + <w>passwd</w> + <w>sqlite</w> + <w>startproject</w> + <w>tabpanel</w> + <w>ubwued</w> + <w>warpauth</w> + <w>warpfood</w> + <w>warpmain</w> + <w>warpzone</w> + <w>wsgi</w> + </words> + </dictionary> +</component> \ No newline at end of file diff --git a/www/web/.idea/inspectionProfiles/Project_Default.xml b/www/web/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..ac21435 --- /dev/null +++ b/www/web/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="PyInterpreterInspection" enabled="false" level="WARNING" enabled_by_default="false" /> + </profile> +</component> \ No newline at end of file diff --git a/www/web/.idea/inspectionProfiles/profiles_settings.xml b/www/web/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..3b31283 --- /dev/null +++ b/www/web/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="PROJECT_PROFILE" value="Project Default" /> + <option name="USE_PROJECT_PROFILE" value="true" /> + <version value="1.0" /> + </settings> +</component> \ No newline at end of file diff --git a/www/web/.idea/misc.xml b/www/web/.idea/misc.xml new file mode 100644 index 0000000..977ffde --- /dev/null +++ b/www/web/.idea/misc.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectLevelVcsManager" settingsEditedManually="false"> + <OptionsSetting value="true" id="Add" /> + <OptionsSetting value="true" id="Remove" /> + <OptionsSetting value="true" id="Checkout" /> + <OptionsSetting value="true" id="Update" /> + <OptionsSetting value="true" id="Status" /> + <OptionsSetting value="true" id="Edit" /> + <ConfirmationsSetting value="0" id="Add" /> + <ConfirmationsSetting value="0" id="Remove" /> + </component> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.3 (C:\Python27\python.exe)" project-jdk-type="Python SDK" /> +</project> \ No newline at end of file diff --git a/www/web/.idea/modules.xml b/www/web/.idea/modules.xml new file mode 100644 index 0000000..f589ca3 --- /dev/null +++ b/www/web/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/web.iml" filepath="$PROJECT_DIR$/.idea/web.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/www/web/.idea/vcs.xml b/www/web/.idea/vcs.xml new file mode 100644 index 0000000..6564d52 --- /dev/null +++ b/www/web/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="" /> + </component> +</project> \ No newline at end of file diff --git a/www/web/.idea/web.iml b/www/web/.idea/web.iml new file mode 100644 index 0000000..36d59bf --- /dev/null +++ b/www/web/.idea/web.iml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="FacetManager"> + <facet type="django" name="Django"> + <configuration> + <option name="rootFolder" value="$MODULE_DIR$" /> + <option name="settingsModule" value="warpauth/settings.py" /> + <option name="manageScript" value="manage.py" /> + <option name="environment" value="<map/>" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="jdk" jdkName="Python 2.7.3 (C:\Python27\python.exe)" jdkType="Python SDK" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> + <component name="TemplatesService"> + <option name="TEMPLATE_CONFIGURATION" value="Django" /> + <option name="TEMPLATE_FOLDERS"> + <list> + <option value="$MODULE_DIR$/warpauthWeb/templates" /> + </list> + </option> + </component> +</module> \ No newline at end of file diff --git a/www/web/.idea/workspace.xml b/www/web/.idea/workspace.xml new file mode 100644 index 0000000..3b90aa7 --- /dev/null +++ b/www/web/.idea/workspace.xml @@ -0,0 +1,962 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="AnalysisUIOptions"> + <option name="SCOPE_TYPE" value="3" /> + </component> + <component name="ChangeListManager"> + <list default="true" id="a5a69002-7777-4433-b658-71ade1ab645a" name="Default" comment="" /> + <ignored path="web.iws" /> + <ignored path=".idea/workspace.xml" /> + <ignored path=".idea/dataSources.local.xml" /> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="TRACKING_ENABLED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="ChangesViewManager" flattened_view="true" show_ignored="false" /> + <component name="CreatePatchCommitExecutor"> + <option name="PATCH_PATH" value="" /> + </component> + <component name="DatabaseView"> + <option name="FLATTEN" value="false" /> + <option name="GROUP_BY_TYPE" value="true" /> + <option name="SORT_CHILDREN" value="false" /> + <option name="SHOW_TABLE_CONSTRAINTS" value="true" /> + </component> + <component name="DjangoConsoleOptions" custom-start-script="import sys; print('Python %s on %s' % (sys.version, sys.platform)) import django; print('Django %s' % django.get_version()) sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) if 'setup' in dir(django): django.setup() import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)"> + <option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform)) import django; print('Django %s' % django.get_version()) sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) if 'setup' in dir(django): django.setup() import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" /> + </component> + <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" /> + <component name="FavoritesManager"> + <favorites_list name="web" /> + </component> + <component name="FileEditorManager"> + <leaf> + <file leaf-file-name="models.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/warppay/models.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="21" column="26" selection-start-line="21" selection-start-column="6" selection-end-line="21" selection-end-column="26" /> + <folding> + <element signature="e#0#39#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="urls.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/warpzone/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="11" column="30" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="views.py" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/warppay/views.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.5707434"> + <caret line="28" column="12" selection-start-line="28" selection-start-column="12" selection-end-line="28" selection-end-column="12" /> + <folding> + <element signature="e#0#36#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="urls.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/warppay/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="5" column="42" selection-start-line="5" selection-start-column="42" selection-end-line="5" selection-end-column="42" /> + <folding> + <element signature="e#0#41#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="FileTemplateManagerImpl"> + <option name="RECENT_TEMPLATES"> + <list> + <option value="Html5" /> + <option value="Python Script" /> + </list> + </option> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/profile/change_password.html" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/about.html" /> + <option value="$PROJECT_DIR$/warpzone/ldap_settings.py" /> + <option value="$PROJECT_DIR$/templates/media/chart_js/vendor/Chart.js" /> + <option value="$PROJECT_DIR$/warpauth/ldap_connector.py" /> + <option value="$PROJECT_DIR$/warpauth/views/main.py" /> + <option value="$PROJECT_DIR$/warpauth/util.py" /> + <option value="$PROJECT_DIR$/warpauth/views/reset_password.py" /> + <option value="$PROJECT_DIR$/warpauth/admin.py" /> + <option value="$PROJECT_DIR$/warpfood/admin.py" /> + <option value="$PROJECT_DIR$/warpfood/models.py" /> + <option value="$PROJECT_DIR$/warpfood/util.py" /> + <option value="$PROJECT_DIR$/warpauth/views/admin/__init__.py" /> + <option value="$PROJECT_DIR$/templates/admin_base.html" /> + <option value="$PROJECT_DIR$/templates/media/css/sidenav.css" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/admin/dashboard.html" /> + <option value="$PROJECT_DIR$/warpauth/views/admin/dashboard.py" /> + <option value="$PROJECT_DIR$/warpmain/views.py" /> + <option value="$PROJECT_DIR$/warpmain/views/main.py" /> + <option value="$PROJECT_DIR$/warpmain/templates/warpmain/admin/news.html" /> + <option value="$PROJECT_DIR$/warpmain/views/admin/dashboard.py" /> + <option value="$PROJECT_DIR$/warpmain/models.py" /> + <option value="$PROJECT_DIR$/warpmain/admin.py" /> + <option value="$PROJECT_DIR$/warpmain/templates/warpmain/admin/news_list.html" /> + <option value="$PROJECT_DIR$/warpmain/urls.py" /> + <option value="$PROJECT_DIR$/warpmain/views/admin/news.py" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/profile/information.html" /> + <option value="$PROJECT_DIR$/warpauth/views/login.py" /> + <option value="$PROJECT_DIR$/warpauth/urls.py" /> + <option value="$PROJECT_DIR$/warpauth/models.py" /> + <option value="$PROJECT_DIR$/warpauth/views/profile.py" /> + <option value="$PROJECT_DIR$/warpauth/views/register.py" /> + <option value="$PROJECT_DIR$/warpfood/views.py" /> + <option value="$PROJECT_DIR$/warpfood/templates/warpfood/main.html" /> + <option value="$PROJECT_DIR$/warpfood/templates/warpfood/view.html" /> + <option value="$PROJECT_DIR$/templates/base.html" /> + <option value="$PROJECT_DIR$/warpmain/templates/warpmain/about.html" /> + <option value="$PROJECT_DIR$/warpmain/templates/warpmain/main.html" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/register.html" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/login.html" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/profile.html" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/reset_password/change_password.html" /> + <option value="$PROJECT_DIR$/warpauth/templates/warpauth/reset_password/token_gen.html" /> + <option value="$PROJECT_DIR$/warppay/apps.py" /> + <option value="$PROJECT_DIR$/warppay/views/main.py" /> + <option value="$PROJECT_DIR$/warpzone/settings.py" /> + <option value="$PROJECT_DIR$/warppay/admin.py" /> + <option value="$PROJECT_DIR$/warpzone/urls.py" /> + <option value="$PROJECT_DIR$/warppay/urls.py" /> + <option value="$PROJECT_DIR$/warppay/models.py" /> + <option value="$PROJECT_DIR$/warppay/views.py" /> + </list> + </option> + </component> + <component name="JsBuildToolGruntFileManager" detection-done="true" /> + <component name="JsGulpfileManager"> + <detection-done>true</detection-done> + </component> + <component name="NamedScopeManager"> + <order /> + </component> + <component name="ProjectFrameBounds"> + <option name="x" value="1" /> + <option name="y" value="1" /> + <option name="width" value="1918" /> + <option name="height" value="1044" /> + </component> + <component name="ProjectLevelVcsManager" settingsEditedManually="false"> + <OptionsSetting value="true" id="Add" /> + <OptionsSetting value="true" id="Remove" /> + <OptionsSetting value="true" id="Checkout" /> + <OptionsSetting value="true" id="Update" /> + <OptionsSetting value="true" id="Status" /> + <OptionsSetting value="true" id="Edit" /> + <ConfirmationsSetting value="0" id="Add" /> + <ConfirmationsSetting value="0" id="Remove" /> + </component> + <component name="ProjectView"> + <navigator currentView="ProjectPane" proportions="" version="1"> + <flattenPackages /> + <showMembers /> + <showModules /> + <showLibraryContents /> + <hideEmptyPackages /> + <abbreviatePackageNames /> + <autoscrollToSource /> + <autoscrollFromSource /> + <sortByType /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="warpzone" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="warppay" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="web" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="warpmain" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + </subPane> + </pane> + <pane id="Scope" /> + <pane id="Scratches" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> + <property name="WebServerToolWindowFactoryState" value="true" /> + <property name="recentsLimit" value="5" /> + <property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" /> + <property name="settings.editor.splitter.proportion" value="0.2" /> + <property name="DefaultHtmlFileTemplate" value="Html5" /> + <property name="FullScreen" value="false" /> + <property name="restartRequiresConfirmation" value="true" /> + </component> + <component name="RecentsManager"> + <key name="CopyFile.RECENT_KEYS"> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpmain" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpmain\templates\warpmain" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\templates\media\css" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpauth\views\admin" /> + </key> + <key name="MoveFile.RECENT_KEYS"> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\templates\media" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpauth\templates\warpauth\profile" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpauth\templates\warpauth" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpfood\templates\warpfood" /> + <recent name="C:\Users\Chris\Documents\git\warpzone\warpauth\web\warpfood\templates" /> + </key> + </component> + <component name="RunManager" selected="Django server.web"> + <configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="TARGET" value="" /> + <option name="SETTINGS_FILE" value="" /> + <option name="CUSTOM_SETTINGS" value="false" /> + <option name="USE_OPTIONS" value="false" /> + <option name="OPTIONS" value="" /> + <method /> + </configuration> + <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug"> + <method /> + </configuration> + <configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="ADDITIONAL_ARGS" value="" /> + <method /> + </configuration> + <configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="ADDITIONAL_ARGS" value="" /> + <method /> + </configuration> + <configuration default="true" type="Python.DjangoServer" factoryName="Django server"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <option name="launchJavascriptDebuger" value="false" /> + <option name="port" value="8000" /> + <option name="host" value="" /> + <option name="additionalOptions" value="" /> + <option name="browserUrl" value="" /> + <option name="runTestServer" value="false" /> + <option name="runNoReload" value="false" /> + <option name="useCustomRunCommand" value="false" /> + <option name="customRunCommand" value="" /> + <method /> + </configuration> + <configuration default="true" type="PythonConfigurationType" factoryName="Python"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="" /> + <option name="PARAMETERS" value="" /> + <option name="SHOW_COMMAND_LINE" value="false" /> + <method /> + </configuration> + <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js"> + <node-options /> + <gulpfile /> + <tasks /> + <arguments /> + <pass-parent-envs>true</pass-parent-envs> + <envs /> + <method /> + </configuration> + <configuration default="true" type="tests" factoryName="Attests"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="FOLDER_NAME" value="" /> + <option name="TEST_TYPE" value="TEST_SCRIPT" /> + <option name="PATTERN" value="" /> + <option name="USE_PATTERN" value="false" /> + <method /> + </configuration> + <configuration default="true" type="tests" factoryName="Doctests"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="FOLDER_NAME" value="" /> + <option name="TEST_TYPE" value="TEST_SCRIPT" /> + <option name="PATTERN" value="" /> + <option name="USE_PATTERN" value="false" /> + <method /> + </configuration> + <configuration default="true" type="tests" factoryName="Nosetests"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="FOLDER_NAME" value="" /> + <option name="TEST_TYPE" value="TEST_SCRIPT" /> + <option name="PATTERN" value="" /> + <option name="USE_PATTERN" value="false" /> + <option name="PARAMS" value="" /> + <option name="USE_PARAM" value="false" /> + <method /> + </configuration> + <configuration default="true" type="tests" factoryName="Unittests"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="FOLDER_NAME" value="" /> + <option name="TEST_TYPE" value="TEST_SCRIPT" /> + <option name="PATTERN" value="" /> + <option name="USE_PATTERN" value="false" /> + <option name="PUREUNITTEST" value="true" /> + <option name="PARAMS" value="" /> + <option name="USE_PARAM" value="false" /> + <method /> + </configuration> + <configuration default="true" type="tests" factoryName="py.test"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs /> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="FOLDER_NAME" value="" /> + <option name="TEST_TYPE" value="TEST_SCRIPT" /> + <option name="PATTERN" value="" /> + <option name="USE_PATTERN" value="false" /> + <option name="testToRun" value="" /> + <option name="keywords" value="" /> + <option name="params" value="" /> + <option name="USE_PARAM" value="false" /> + <option name="USE_KEYWORD" value="false" /> + <method /> + </configuration> + <configuration default="false" name="web" type="Python.DjangoServer" factoryName="Django server"> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="C:\Python34\python.exe" /> + <option name="WORKING_DIRECTORY" value="" /> + <option name="IS_MODULE_SDK" value="false" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <module name="web" /> + <option name="launchJavascriptDebuger" value="false" /> + <option name="port" value="8000" /> + <option name="host" value="" /> + <option name="additionalOptions" value="" /> + <option name="browserUrl" value="" /> + <option name="runTestServer" value="false" /> + <option name="runNoReload" value="false" /> + <option name="useCustomRunCommand" value="false" /> + <option name="customRunCommand" value="" /> + <method /> + </configuration> + <list size="1"> + <item index="0" class="java.lang.String" itemvalue="Django server.web" /> + </list> + </component> + <component name="ShelveChangesManager" show_recycled="false" /> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="a5a69002-7777-4433-b658-71ade1ab645a" name="Default" comment="" /> + <created>1447875511859</created> + <option name="number" value="Default" /> + <updated>1447875511859</updated> + </task> + <servers /> + </component> + <component name="TodoView"> + <todo-panel id="selected-file"> + <is-autoscroll-to-source value="true" /> + </todo-panel> + <todo-panel id="all"> + <are-packages-shown value="true" /> + <is-autoscroll-to-source value="true" /> + </todo-panel> + </component> + <component name="ToolWindowManager"> + <frame x="1" y="1" width="1918" height="1044" extended-state="0" /> + <editor active="false" /> + <layout> + <window_info id="Remote Host" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.31135136" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> + <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3201804" sideWeight="0.5235294" order="6" side_tool="true" content_ui="tabs" /> + <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3201804" sideWeight="0.5235294" order="7" side_tool="true" content_ui="tabs" /> + <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> + <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32994652" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="GitLabIntegration" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" /> + <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32919955" sideWeight="0.49786097" order="10" side_tool="false" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" /> + <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24973261" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" /> + <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> + <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="File Transfer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.3201804" sideWeight="0.4764706" order="9" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Django errors" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32932165" sideWeight="0.49786097" order="14" side_tool="false" content_ui="tabs" /> + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32822758" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + </layout> + </component> + <component name="Vcs.Log.UiProperties"> + <option name="RECENTLY_FILTERED_USER_GROUPS"> + <collection /> + </option> + <option name="RECENTLY_FILTERED_BRANCH_GROUPS"> + <collection /> + </option> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> + </component> + <component name="XDebuggerManager"> + <breakpoint-manager> + <breakpoints> + <line-breakpoint enabled="true" type="python-line"> + <url>file://$PROJECT_DIR$/warpfood/urls.py</url> + <option name="timeStamp" value="1" /> + </line-breakpoint> + </breakpoints> + <option name="time" value="9" /> + </breakpoint-manager> + <watches-manager /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/warppay/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="5" column="42" selection-start-line="5" selection-start-column="42" selection-end-line="5" selection-end-column="42" /> + <folding> + <element signature="e#0#41#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/templates/warpmain/admin/dashboard.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/tests.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/views/admin/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/views/__init__.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/admin.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.26842105"> + <caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="12" selection-end-column="12" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/templates/media/css/bootstrap.min.css"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.33333334"> + <caret line="4" column="15952" selection-start-line="4" selection-start-column="15945" selection-end-line="4" selection-end-column="15952" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/templates/media/css/bootstrap-theme.css"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/util.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/views/admin/dashboard.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="8" column="49" selection-start-line="8" selection-start-column="49" selection-end-line="8" selection-end-column="49" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/views/main.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="9" column="4" selection-start-line="9" selection-start-column="4" selection-end-line="9" selection-end-column="57" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/apps.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/admin.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="5" column="0" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/views/admin/news.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.05964912"> + <caret line="6" column="21" selection-start-line="6" selection-start-column="21" selection-end-line="6" selection-end-column="21" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/templates/media/warpzone_small.png"> + <provider selected="true" editor-type-id="images"> + <state /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/templates/warpmain/admin/news.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.53125"> + <caret line="17" column="14" selection-start-line="5" selection-start-column="7" selection-end-line="17" selection-end-column="14" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/util.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.11929824"> + <caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/models.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.3877193"> + <caret line="16" column="0" selection-start-line="16" selection-start-column="0" selection-end-line="20" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/views/login.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="22" column="32" selection-start-line="22" selection-start-column="32" selection-end-line="22" selection-end-column="32" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/views/profile.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-0.7"> + <caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="43" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/views/register.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.13508771"> + <caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/templates/warpauth/profile/information.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.25"> + <caret line="8" column="59" selection-start-line="8" selection-start-column="59" selection-end-line="8" selection-end-column="59" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.05964912"> + <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/models.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.3140351"> + <caret line="23" column="32" selection-start-line="23" selection-start-column="32" selection-end-line="23" selection-end-column="32" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/tests.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/tests.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.11929824"> + <caret line="5" column="4" selection-start-line="5" selection-start-column="4" selection-end-line="5" selection-end-column="46" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/models.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="38" column="10" selection-start-line="38" selection-start-column="4" selection-end-line="38" selection-end-column="10" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/templates/base.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-8.5"> + <caret line="16" column="57" selection-start-line="16" selection-start-column="57" selection-end-line="16" selection-end-column="57" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/templates/warpfood/view.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-3.2692308"> + <caret line="5" column="0" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="56" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/templates/warpfood/main.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.15625"> + <caret line="5" column="0" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="56" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpfood/views.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.50701755"> + <caret line="26" column="58" selection-start-line="26" selection-start-column="58" selection-end-line="26" selection-end-column="58" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/templates/warpmain/about.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-2.6153846"> + <caret line="4" column="58" selection-start-line="4" selection-start-column="8" selection-end-line="4" selection-end-column="58" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/templates/warpmain/main.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-3.2692308"> + <caret line="5" column="25" selection-start-line="5" selection-start-column="8" selection-end-line="5" selection-end-column="25" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/templates/warpauth/login.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0625"> + <caret line="2" column="32" selection-start-line="2" selection-start-column="32" selection-end-line="2" selection-end-column="32" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/templates/warpauth/profile.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-3.9230769"> + <caret line="6" column="63" selection-start-line="6" selection-start-column="63" selection-end-line="6" selection-end-column="63" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/templates/warpauth/register.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-1.3076923"> + <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="57" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/templates/warpauth/reset_password/change_password.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-1.3076923"> + <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="59" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/templates/warpauth/reset_password/token_gen.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="-4.576923"> + <caret line="7" column="35" selection-start-line="7" selection-start-column="30" selection-end-line="7" selection-end-column="35" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpauth/views/reset_password.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="1.7298245"> + <caret line="71" column="33" selection-start-line="71" selection-start-column="33" selection-end-line="71" selection-end-column="33" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/manage.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/apps.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="4" column="19" selection-start-line="4" selection-start-column="19" selection-end-line="4" selection-end-column="19" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/tests.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/templates/warppay/main.html"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpzone/settings.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="192" column="1" selection-start-line="192" selection-start-column="1" selection-end-line="192" selection-end-column="1" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpmain/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.32807016"> + <caret line="11" column="11" selection-start-line="11" selection-start-column="11" selection-end-line="11" selection-end-column="31" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/admin.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warpzone/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="11" column="30" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/models.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="21" column="26" selection-start-line="21" selection-start-column="6" selection-end-line="21" selection-end-column="26" /> + <folding> + <element signature="e#0#39#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/views.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.5707434"> + <caret line="28" column="12" selection-start-line="28" selection-start-column="12" selection-end-line="28" selection-end-column="12" /> + <folding> + <element signature="e#0#36#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/warppay/urls.py"> + <provider selected="true" editor-type-id="text-editor"> + <state vertical-scroll-proportion="0.0"> + <caret line="5" column="42" selection-start-line="5" selection-start-column="42" selection-end-line="5" selection-end-column="42" /> + <folding> + <element signature="e#0#41#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + </component> +</project> \ No newline at end of file diff --git a/web/LICENSE b/www/web/LICENSE similarity index 100% rename from web/LICENSE rename to www/web/LICENSE diff --git a/web/manage.py b/www/web/manage.py similarity index 100% rename from web/manage.py rename to www/web/manage.py diff --git a/www/web/static/admin/css/base.css b/www/web/static/admin/css/base.css new file mode 100644 index 0000000..a37555a --- /dev/null +++ b/www/web/static/admin/css/base.css @@ -0,0 +1,967 @@ +/* + DJANGO Admin styles +*/ + +@import url(fonts.css); + +body { + margin: 0; + padding: 0; + font-size: 14px; + font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; + color: #333; + background: #fff; +} + +/* LINKS */ + +a:link, a:visited { + color: #447e9b; + text-decoration: none; +} + +a:focus, a:hover { + color: #036; +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: #fff; + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 20px; + color: #666; +} + +h2 { + font-size: 16px; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 14px; + margin: .8em 0 .3em 0; + color: #666; + font-weight: bold; +} + +h4 { + font-size: 12px; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 10px; + margin: 1.5em 0 .5em 0; + color: #666; + text-transform: uppercase; + letter-spacing: 1px; +} + +ul li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 13px; + line-height: 20px; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + padding: 0; + border: none; + border-top: 1px solid #eee; +} + +blockquote { + font-size: 11px; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; + color: #666; + font-size: 12px; +} + +pre.literal-block { + margin: 10px; + background: #eee; + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: #eee; + background-color: #eee; + height: 1px; + border: none; + margin: 0; + padding: 0; + font-size: 1px; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 11px; +} + +.tiny { + font-size: 10px; +} + +p.tiny { + margin-top: -2px; +} + +.mini { + font-size: 10px; +} + +p.mini { + margin-top: -3px; +} + +.help, p.help, form p.help { + font-size: 11px; + color: #999; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: #999; + font-weight: normal; +} + +.float-right { + float: right; +} + +.float-left { + float: left; +} + +.clear { + clear: both; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.example { + margin: 10px 0; + padding: 5px 10px; + background: #efefef; +} + +.nowrap { + white-space: nowrap; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: #ccc; +} + +td, th { + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid #eee; + vertical-align: top; + padding: 8px; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: #666; + padding: 5px 10px; + font-size: 11px; + background: #fff; + border: none; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +tfoot td { + border-bottom: none; + border-top: 1px solid #eee; +} + +tr.alt { + background: #f6f6f6; +} + +.row1 { + background: #fff; +} + +.row2 { + background: #f9f9f9; +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: #f6f6f6; +} + +thead th a:link, thead th a:visited { + color: #666; +} + +thead th.sorted { + background: #eee; +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: #eee; +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 18px; + color: #999; +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: #447e9b; +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + font-size: 13px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], textarea, select, .vTextField { + border: 1px solid #ccc; + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, textarea:focus, select:focus, +.vTextField:focus { + border-color: #999; +} + +select { + height: 30px; +} + +select[multiple] { + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: #79aec8; + padding: 10px 15px; + border: none; + border-radius: 4px; + color: #fff; + cursor: pointer; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: #609ab6; +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + float: right; + border: none; + font-weight: 400; + background: #417690; +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: #205067; +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: #fff; +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 13px; + text-align: left; + background: #79aec8; + color: #fff; +} + +.module caption, +.inline-group h2 { + font-size: 12px; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 13px; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: #333; +} + +ul.messagelist li.warning { + background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 14px; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: #ba2121; + border: 1px solid #ba2121; + border-radius: 4px; + background-color: #fff; + background-position: 5px 12px; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: #ba2121; + background: #fff; +} + +ul.errorlist li { + font-size: 13px; + display: block; + margin-bottom: 4px; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid #eee; + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea { + border: 1px solid #ba2121; +} + +div.system-message { + background: #ffc; + margin: 10px; + padding: 6px 8px; + font-size: .8em; +} + +div.system-message p.system-message-title { + padding: 4px 5px 4px 25px; + margin: 0; + color: #c11; + background: #ffefef url(../img/icon-no.svg) 5px 5px no-repeat; +} + +.description { + font-size: 12px; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: #79aec8; + padding: 10px 40px; + border: none; + font-size: 14px; + color: #c4dce8; + text-align: left; +} + +div.breadcrumbs a { + color: #fff; +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: #c4dce8; +} + +/* ACTION ICONS */ + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 10px; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.form-row .object-tools { + margin-top: 5px; + margin-bottom: 5px; + float: none; + height: 2em; + padding-left: 3.5em; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 16px; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: #999; + font-weight: 400; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #fff; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: #417690; +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { + background-repeat: no-repeat; + background-position: 93% center; + padding-right: 26px; +} + +.object-tools a.viewsitelink, .object-tools a.golink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +table#change-history { + width: 100%; +} + +table#change-history tbody th { + width: 16em; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: 40px; + padding: 10px 40px; + background: #417690; + line-height: 40px; + color: #ffc; + overflow: hidden; +} + +#header a:link, #header a:visited { + color: #fff; +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + float: left; +} + +#branding h1 { + padding: 0; + margin: 0 20px 0 0; + font-weight: 300; + font-size: 24px; + color: #f5dd5d; +} + +#branding h1, #branding h1 a:link, #branding h1 a:visited { + color: #f5dd5d; +} + +#branding h2 { + padding: 0 10px; + font-size: 14px; + margin: -8px 0 8px 0; + font-weight: normal; + color: #ffc; +} + +#branding a:hover { + text-decoration: none; +} + +#user-tools { + float: right; + padding: 0; + margin: 0 0 0 20px; + font-weight: 300; + font-size: 11px; + letter-spacing: 0.5px; + text-transform: uppercase; + text-align: right; +} + +#user-tools a { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover { + text-decoration: none; + border-bottom-color: #79aec8; + color: #79aec8; +} + +/* SIDEBAR */ + +#content-related { + background: #f8f8f8; +} + +#content-related .module { + background: none; +} + +#content-related h3 { + font-size: 14px; + color: #666; + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 13px; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid #eaeaea; + font-size: 18px; + color: #333; +} + +.delete-confirmation form input[type="submit"] { + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + color: #fff; +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: #a41515; +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 15px; + line-height: 15px; + background: #ddd; + border-radius: 4px; + padding: 10px 15px; + color: #333; + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: #ccc; +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} diff --git a/www/web/static/admin/css/changelists.css b/www/web/static/admin/css/changelists.css new file mode 100644 index 0000000..fd9e784 --- /dev/null +++ b/www/web/static/admin/css/changelists.css @@ -0,0 +1,341 @@ +/* CHANGELISTS */ + +#changelist { + position: relative; + width: 100%; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + margin-right: 280px; + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; +} + +#changelist .toplinks { + border-bottom: 1px solid #ddd; +} + +#changelist .paginator { + color: #666; + border-bottom: 1px solid #eee; + background: #fff; + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: #666; +} + +/* TOOLBAR */ + +#changelist #toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; + background: #f8f8f8; + color: #666; +} + +#changelist #toolbar form input { + border-radius: 4px; + font-size: 14px; + padding: 5px; + color: #333; +} + +#changelist #toolbar form #searchbar { + height: 19px; + border: 1px solid #ccc; + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 13px; +} + +#changelist #toolbar form #searchbar:focus { + border-color: #999; +} + +#changelist #toolbar form input[type="submit"] { + border: 1px solid #ccc; + padding: 2px 10px; + margin: 0; + vertical-align: middle; + background: #fff; + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: #333; +} + +#changelist #toolbar form input[type="submit"]:focus, +#changelist #toolbar form input[type="submit"]:hover { + border-color: #999; +} + +#changelist #changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +/* FILTER COLUMN */ + +#changelist-filter { + position: absolute; + top: 0; + right: 0; + z-index: 1000; + width: 240px; + background: #f8f8f8; + border-left: none; + margin: 0; +} + +#changelist-filter h2 { + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3 { + font-weight: 400; + font-size: 14px; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid #eaeaea; +} + +#changelist-filter ul:last-child { + border-bottom: none; + padding-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: #999; +} + +#changelist-filter li.selected { + border-left: 5px solid #eaeaea; + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: #5b80b2; +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: #036; +} + +/* DATE DRILLDOWN */ + +.change-list ul.toplinks { + display: block; + float: left; + padding: 0; + margin: 0; + width: 100%; +} + +.change-list ul.toplinks li { + padding: 3px 6px; + font-weight: bold; + list-style-type: none; + display: inline-block; +} + +.change-list ul.toplinks .date-back a { + color: #999; +} + +.change-list ul.toplinks .date-back a:focus, +.change-list ul.toplinks .date-back a:hover { + color: #036; +} + +/* PAGINATOR */ + +.paginator { + font-size: 13px; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid #ddd; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: #79aec8; + text-decoration: none; + color: #fff; +} + +.paginator a.showall { + padding: 0; + border: none; + background: none; + color: #5b80b2; +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: #036; +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 13px; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: #036; +} + +/* ACTIONS */ + +.filtered .actions { + margin-right: 280px; + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +#changelist table tbody tr.selected { + background-color: #FFFFCC; +} + +#changelist .actions { + padding: 10px; + background: #fff; + border-top: none; + border-bottom: none; + line-height: 24px; + color: #999; +} + +#changelist .actions.selected { + background: #fffccf; + border-top: 1px solid #fffee8; + border-bottom: 1px solid #edecd6; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 13px; + margin: 0 0.5em; + display: none; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 24px; + background: none; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: #999; +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +#changelist .actions .button { + font-size: 13px; + border: 1px solid #ccc; + border-radius: 4px; + background: #fff; + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 24px; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: #333; +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: #999; +} diff --git a/www/web/static/admin/css/dashboard.css b/www/web/static/admin/css/dashboard.css new file mode 100644 index 0000000..05808bc --- /dev/null +++ b/www/web/static/admin/css/dashboard.css @@ -0,0 +1,30 @@ +/* DASHBOARD */ + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; +} + +ul.actionlist li { + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} diff --git a/www/web/static/admin/css/fonts.css b/www/web/static/admin/css/fonts.css new file mode 100644 index 0000000..c837e01 --- /dev/null +++ b/www/web/static/admin/css/fonts.css @@ -0,0 +1,20 @@ +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Bold-webfont.woff'); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Regular-webfont.woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Light-webfont.woff'); + font-weight: 300; + font-style: normal; +} diff --git a/www/web/static/admin/css/forms.css b/www/web/static/admin/css/forms.css new file mode 100644 index 0000000..2a21257 --- /dev/null +++ b/www/web/static/admin/css/forms.css @@ -0,0 +1,499 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 13px; + border-bottom: 1px solid #eee; +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +.hidden { + display: none; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: #666; + font-size: 13px; +} + +.required label, label.required { + font-weight: bold; + color: #333; +} + +/* RADIO BUTTONS */ + +form ul.radiolist li { + list-style-type: none; +} + +form ul.radiolist label { + float: none; + display: inline; +} + +form ul.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + float: left; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 26px; +} + +.aligned label + p { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 170px; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help { + clear: left; + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned label + p.help { + margin-left: 0; + padding-left: 0; +} + +form .aligned p.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +.checkbox-row p.help { + margin-left: 0; + padding-left: 0; +} + +fieldset .field-box { + float: left; + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, form .wide input + p.help { + margin-left: 200px; +} + +form .wide p.help { + padding-left: 38px; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid #eee; + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: #f8f8f8; + color: #666; +} + +fieldset .collapse-toggle { + color: #fff; +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: #447e9b; +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px; + margin: 0 0 20px; + background: #f8f8f8; + border: 1px solid #eee; + border-radius: 4px; + text-align: right; + overflow: hidden; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 35px; + line-height: 15px; + margin: 0 0 0 5px; +} + +.submit-row input.default { + margin: 0 0 0 8px; + text-transform: uppercase; +} + +.submit-row p { + margin: 0.3em; +} + +.submit-row p.deletelink-box { + float: left; + margin: 0; +} + +.submit-row a.deletelink { + display: block; + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + color: #fff; +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: #a41515; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vTextField { + width: 20em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: #666; + padding: 5px; + font-size: 13px; + background: #f8f8f8; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 11px; +} + +.inline-related fieldset { + margin: 0; + background: #fff; + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 11px; + text-align: left; + font-weight: bold; + background: #bcd; + color: #fff; +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 9px; + font-weight: bold; + color: #666; + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: #666; + background: #f8f8f8; + padding: 8px 10px; + border-bottom: 1px solid #eee; +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid #eee; +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 12px; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.add-another, .related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.add-another { + width: 16px; + height: 16px; + background-image: url(../img/icon-addlink.svg); +} + +.related-lookup { + width: 16px; + height: 16px; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/www/web/static/admin/css/login.css b/www/web/static/admin/css/login.css new file mode 100644 index 0000000..cab3bbf --- /dev/null +++ b/www/web/static/admin/css/login.css @@ -0,0 +1,78 @@ +/* LOGIN FORM */ + +body.login { + background: #f8f8f8; +} + +.login #header { + height: auto; + padding: 5px 16px; +} + +.login #header h1 { + font-size: 18px; +} + +.login #header h1 a { + color: #fff; +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: #fff; + border: 1px solid #eaeaea; + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; +} + +.login #content-main { + width: 100%; +} + +.login .form-row { + padding: 4px 0; + float: left; + width: 100%; + border-bottom: none; +} + +.login .form-row label { + padding-right: 0.5em; + line-height: 2em; + font-size: 1em; + clear: both; + color: #333; +} + +.login .form-row #id_username, .login .form-row #id_password { + clear: both; + padding: 8px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.login span.help { + font-size: 10px; + display: block; +} + +.login .submit-row { + clear: both; + padding: 1em 0 0 9.4em; + margin: 0; + border: none; + background: none; + text-align: left; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/www/web/static/admin/css/rtl.css b/www/web/static/admin/css/rtl.css new file mode 100644 index 0000000..8c1ceb4 --- /dev/null +++ b/www/web/static/admin/css/rtl.css @@ -0,0 +1,256 @@ +body { + direction: rtl; +} + +/* LOGIN */ + +.login .form-row { + float: right; +} + +.login .form-row label { + float: right; + padding-left: 0.5em; + padding-right: 0; + text-align: left; +} + +.login .submit-row { + clear: both; + padding: 1em 9.4em 0 0; +} + +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + right: auto; + left: 0; + border-left: none; + border-right: none; +} + +.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { + margin-right: 0; + margin-left: 280px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid #eaeaea; + padding-right: 10px; + margin-right: -15px; +} + +.filtered .actions { + margin-left: 280px; + margin-right: 0; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; + float: right; +} + +.submit-row { + text-align: left +} + +.submit-row p.deletelink-box { + float: right; +} + +.submit-row input.default { + margin-left: 0; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +input[type=submit].default, .submit-row input.default { + float: left; +} + +fieldset .field-box { + float: right; + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} + +/* IE7 specific bug fixes */ + +div.colM { + position: relative; +} + +.submit-row input { + float: left; +} diff --git a/www/web/static/admin/css/widgets.css b/www/web/static/admin/css/widgets.css new file mode 100644 index 0000000..d3bd67a --- /dev/null +++ b/www/web/static/admin/css/widgets.css @@ -0,0 +1,565 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + width: 800px; + float: left; +} + +.selector select { + width: 380px; + height: 17.2em; +} + +.selector-available, .selector-chosen { + float: left; + width: 380px; + text-align: center; + margin-bottom: 5px; +} + +.selector-chosen select { + border-top: none; +} + +.selector-available h2, .selector-chosen h2 { + border: 1px solid #ccc; + border-radius: 4px 4px 0 0; +} + +.selector-chosen h2 { + background: #79aec8; + color: #fff; +} + +.selector .selector-available h2 { + background: #f8f8f8; + color: #666; +} + +.selector .selector-filter { + background: white; + border: 1px solid #ccc; + border-width: 0 1px; + padding: 8px; + color: #999; + font-size: 10px; + margin: 0; + text-align: left; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; +} + +.selector .selector-available input { + width: 320px; + margin-left: 8px; +} + +.selector ul.selector-chooser { + float: left; + width: 22px; + background-color: #eee; + border-radius: 10px; + margin: 10em 5px 0 5px; + padding: 0; +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} + +.selector-add, .selector-remove { + width: 16px; + height: 16px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.3; +} + +.active.selector-add, .active.selector-remove { + opacity: 1; +} + +.active.selector-add:hover, .active.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -112px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -80px; +} + +a.selector-chooseall, a.selector-clearall { + display: inline-block; + height: 16px; + text-align: left; + margin: 1px auto 3px; + overflow: hidden; + font-weight: bold; + line-height: 16px; + color: #666; + text-decoration: none; + opacity: 0.3; +} + +a.active.selector-chooseall:focus, a.active.selector-clearall:focus, +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + color: #447e9b; +} + +a.active.selector-chooseall, a.active.selector-clearall { + opacity: 1; +} + +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + cursor: pointer; +} + +a.selector-chooseall { + padding: 0 18px 0 0; + background: url(../img/selector-icons.svg) right -160px no-repeat; + cursor: default; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -176px; +} + +a.selector-clearall { + padding: 0 0 0 18px; + background: url(../img/selector-icons.svg) 0 -128px no-repeat; + cursor: default; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + height: 22px; + width: 50px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -32px no-repeat; + cursor: default; +} + +.stacked .active.selector-add { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + cursor: default; +} + +.stacked .active.selector-remove { + background-position: 0 -16px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 18px; + width: 18px; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-weight: bold; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 11px; + color: #ccc; +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + min-width: 0; + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 11px; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 16px; + width: 16px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -16px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -16px; +} + +.timezonewarning { + font-size: 11px; + color: #999; +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-size: 11px; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-size: 11px; + font-weight: bold; +} + +.aligned p.file-upload { + margin-left: 170px; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: #333; + font-size: 11px; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 12px; + width: 19em; + text-align: center; + background: white; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + background: #f5dd5d; + font-weight: 700; + font-size: 12px; + color: #333; +} + +.calendar th { + padding: 8px 5px; + background: #f8f8f8; + border-bottom: 1px solid #ddd; + font-weight: 400; + font-size: 12px; + text-align: center; + color: #666; +} + +.calendar td { + font-weight: 400; + font-size: 12px; + text-align: center; + padding: 0; + border-top: 1px solid #eee; + border-bottom: none; +} + +.calendar td.selected a { + background: #79aec8; + color: #fff; +} + +.calendar td.nonday { + background: #f8f8f8; +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: #444; +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: #79aec8; + color: white; +} + +.calendar td a:active, .timelist a:active { + background: #417690; + color: white; +} + +.calendarnav { + font-size: 10px; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: #999; +} + +.calendar-shortcuts { + background: white; + font-size: 11px; + line-height: 11px; + border-top: 1px solid #eee; + padding: 8px 0; + color: #ccc; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -15px; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -45px; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 12px; + background: #eee; + border-top: 1px solid #ddd; + color: #333; +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: #ddd; +} + +.calendar-cancel a { + color: black; + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) 0 0 no-repeat; + width: 16px; + height: 16px; + border: 0px none; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + float: left; /* display properly in form rows with multiple fields */ + overflow: hidden; /* clear floated contents */ +} + +.related-widget-wrapper-link { + opacity: 0.3; +} + +.related-widget-wrapper-link:link { + opacity: .8; +} + +.related-widget-wrapper-link:link:focus, +.related-widget-wrapper-link:link:hover { + opacity: 1; +} + +select + .related-widget-wrapper-link, +.related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 7px; +} diff --git a/www/web/static/admin/fonts/LICENSE.txt b/www/web/static/admin/fonts/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/www/web/static/admin/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/www/web/static/admin/fonts/README.txt b/www/web/static/admin/fonts/README.txt new file mode 100644 index 0000000..cc2135a --- /dev/null +++ b/www/web/static/admin/fonts/README.txt @@ -0,0 +1,2 @@ +Roboto webfont source: https://www.google.com/fonts/specimen/Roboto +Weights used in this project: Light (300), Regular (400), Bold (700) diff --git a/www/web/static/admin/fonts/Roboto-Bold-webfont.woff b/www/web/static/admin/fonts/Roboto-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..03357ce4f5833006114f2e790a7b89dbf69d4f90 GIT binary patch literal 82564 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 literal 0 HcmV?d00001 diff --git a/www/web/static/admin/fonts/Roboto-Light-webfont.woff b/www/web/static/admin/fonts/Roboto-Light-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..f6abd871351b74882016af8e796aa6566803035b GIT binary patch literal 81348 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 literal 0 HcmV?d00001 diff --git a/www/web/static/admin/fonts/Roboto-Regular-webfont.woff b/www/web/static/admin/fonts/Roboto-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6ff6afd8c863f4ee4a2bd032a93c5dde5bf15f0d GIT binary patch literal 80304 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 U5+{zuf?@lC+j6Kse)s?X0ZPdgP5=M^ literal 0 HcmV?d00001 diff --git a/www/web/static/admin/img/LICENSE b/www/web/static/admin/img/LICENSE new file mode 100644 index 0000000..a4faaa1 --- /dev/null +++ b/www/web/static/admin/img/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Code Charm Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/www/web/static/admin/img/README.txt b/www/web/static/admin/img/README.txt new file mode 100644 index 0000000..43373ad --- /dev/null +++ b/www/web/static/admin/img/README.txt @@ -0,0 +1,7 @@ +All icons are taken from Font Awesome (http://fontawesome.io/) project. +The Font Awesome font is licensed under the SIL OFL 1.1: +- http://scripts.sil.org/OFL + +SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG +Font-Awesome-SVG-PNG is licensed under the MIT license (see file license +in current folder). diff --git a/www/web/static/admin/img/calendar-icons.svg b/www/web/static/admin/img/calendar-icons.svg new file mode 100644 index 0000000..dbf21c3 --- /dev/null +++ b/www/web/static/admin/img/calendar-icons.svg @@ -0,0 +1,14 @@ +<svg width="15" height="60" viewBox="0 0 1792 7168" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="previous"> + <path d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="next"> + <path d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#previous" x="0" y="0" fill="#333333" /> + <use xlink:href="#previous" x="0" y="1792" fill="#000000" /> + <use xlink:href="#next" x="0" y="3584" fill="#333333" /> + <use xlink:href="#next" x="0" y="5376" fill="#000000" /> +</svg> diff --git a/www/web/static/admin/img/gis/move_vertex_off.svg b/www/web/static/admin/img/gis/move_vertex_off.svg new file mode 100644 index 0000000..228854f --- /dev/null +++ b/www/web/static/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ +<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#EBECE6" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9C9C9" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg> \ No newline at end of file diff --git a/www/web/static/admin/img/gis/move_vertex_on.svg b/www/web/static/admin/img/gis/move_vertex_on.svg new file mode 100644 index 0000000..96b87fd --- /dev/null +++ b/www/web/static/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ +<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F1C02A" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9A741" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg> \ No newline at end of file diff --git a/www/web/static/admin/img/icon-addlink.svg b/www/web/static/admin/img/icon-addlink.svg new file mode 100644 index 0000000..e004fb1 --- /dev/null +++ b/www/web/static/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#70bf2b" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/> +</svg> diff --git a/www/web/static/admin/img/icon-alert.svg b/www/web/static/admin/img/icon-alert.svg new file mode 100644 index 0000000..e51ea83 --- /dev/null +++ b/www/web/static/admin/img/icon-alert.svg @@ -0,0 +1,3 @@ +<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#efb80b" d="M1024 1375v-190q0-14-9.5-23.5t-22.5-9.5h-192q-13 0-22.5 9.5t-9.5 23.5v190q0 14 9.5 23.5t22.5 9.5h192q13 0 22.5-9.5t9.5-23.5zm-2-374l18-459q0-12-10-19-13-11-24-11h-220q-11 0-24 11-10 7-10 21l17 457q0 10 10 16.5t24 6.5h185q14 0 23.5-6.5t10.5-16.5zm-14-934l768 1408q35 63-2 126-17 29-46.5 46t-63.5 17h-1536q-34 0-63.5-17t-46.5-46q-37-63-2-126l768-1408q17-31 47-49t65-18 65 18 47 49z"/> +</svg> diff --git a/www/web/static/admin/img/icon-calendar.svg b/www/web/static/admin/img/icon-calendar.svg new file mode 100644 index 0000000..97910a9 --- /dev/null +++ b/www/web/static/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ +<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="icon"> + <path d="M192 1664h288v-288h-288v288zm352 0h320v-288h-320v288zm-352-352h288v-320h-288v320zm352 0h320v-320h-320v320zm-352-384h288v-288h-288v288zm736 736h320v-288h-320v288zm-384-736h320v-288h-320v288zm768 736h288v-288h-288v288zm-384-352h320v-320h-320v320zm-352-864v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm736 864h288v-320h-288v320zm-384-384h320v-288h-320v288zm384 0h288v-288h-288v288zm32-480v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm384-64v1280q0 52-38 90t-90 38h-1408q-52 0-90-38t-38-90v-1280q0-52 38-90t90-38h128v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h384v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h128q52 0 90 38t38 90z"/> + </g> + </defs> + <use xlink:href="#icon" x="0" y="0" fill="#447e9b" /> + <use xlink:href="#icon" x="0" y="1792" fill="#003366" /> +</svg> diff --git a/www/web/static/admin/img/icon-changelink.svg b/www/web/static/admin/img/icon-changelink.svg new file mode 100644 index 0000000..bbb137a --- /dev/null +++ b/www/web/static/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#efb80b" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/> +</svg> diff --git a/www/web/static/admin/img/icon-clock.svg b/www/web/static/admin/img/icon-clock.svg new file mode 100644 index 0000000..bf9985d --- /dev/null +++ b/www/web/static/admin/img/icon-clock.svg @@ -0,0 +1,9 @@ +<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="icon"> + <path d="M1024 544v448q0 14-9 23t-23 9h-320q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h224v-352q0-14 9-23t23-9h64q14 0 23 9t9 23zm416 352q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#icon" x="0" y="0" fill="#447e9b" /> + <use xlink:href="#icon" x="0" y="1792" fill="#003366" /> +</svg> diff --git a/www/web/static/admin/img/icon-deletelink.svg b/www/web/static/admin/img/icon-deletelink.svg new file mode 100644 index 0000000..4059b15 --- /dev/null +++ b/www/web/static/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ +<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#dd4646" d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/> +</svg> diff --git a/www/web/static/admin/img/icon-no.svg b/www/web/static/admin/img/icon-no.svg new file mode 100644 index 0000000..2e0d383 --- /dev/null +++ b/www/web/static/admin/img/icon-no.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#dd4646" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/www/web/static/admin/img/icon-unknown-alt.svg b/www/web/static/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000..1c6b99f --- /dev/null +++ b/www/web/static/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/www/web/static/admin/img/icon-unknown.svg b/www/web/static/admin/img/icon-unknown.svg new file mode 100644 index 0000000..50b4f97 --- /dev/null +++ b/www/web/static/admin/img/icon-unknown.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#666666" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/www/web/static/admin/img/icon-yes.svg b/www/web/static/admin/img/icon-yes.svg new file mode 100644 index 0000000..5883d87 --- /dev/null +++ b/www/web/static/admin/img/icon-yes.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#70bf2b" d="M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/www/web/static/admin/img/inline-delete.svg b/www/web/static/admin/img/inline-delete.svg new file mode 100644 index 0000000..17d1ad6 --- /dev/null +++ b/www/web/static/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/www/web/static/admin/img/search.svg b/www/web/static/admin/img/search.svg new file mode 100644 index 0000000..c8c69b2 --- /dev/null +++ b/www/web/static/admin/img/search.svg @@ -0,0 +1,3 @@ +<svg width="15" height="15" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#555555" d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/> +</svg> diff --git a/www/web/static/admin/img/selector-icons.svg b/www/web/static/admin/img/selector-icons.svg new file mode 100644 index 0000000..926b8e2 --- /dev/null +++ b/www/web/static/admin/img/selector-icons.svg @@ -0,0 +1,34 @@ +<svg width="16" height="192" viewBox="0 0 1792 21504" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="up"> + <path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="down"> + <path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="left"> + <path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="right"> + <path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="clearall"> + <path transform="translate(336, 336) scale(0.75)" d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="chooseall"> + <path transform="translate(336, 336) scale(0.75)" d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#up" x="0" y="0" fill="#666666" /> + <use xlink:href="#up" x="0" y="1792" fill="#447e9b" /> + <use xlink:href="#down" x="0" y="3584" fill="#666666" /> + <use xlink:href="#down" x="0" y="5376" fill="#447e9b" /> + <use xlink:href="#left" x="0" y="7168" fill="#666666" /> + <use xlink:href="#left" x="0" y="8960" fill="#447e9b" /> + <use xlink:href="#right" x="0" y="10752" fill="#666666" /> + <use xlink:href="#right" x="0" y="12544" fill="#447e9b" /> + <use xlink:href="#clearall" x="0" y="14336" fill="#666666" /> + <use xlink:href="#clearall" x="0" y="16128" fill="#447e9b" /> + <use xlink:href="#chooseall" x="0" y="17920" fill="#666666" /> + <use xlink:href="#chooseall" x="0" y="19712" fill="#447e9b" /> +</svg> diff --git a/www/web/static/admin/img/sorting-icons.svg b/www/web/static/admin/img/sorting-icons.svg new file mode 100644 index 0000000..7c31ec9 --- /dev/null +++ b/www/web/static/admin/img/sorting-icons.svg @@ -0,0 +1,19 @@ +<svg width="14" height="84" viewBox="0 0 1792 10752" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="sort"> + <path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/> + </g> + <g id="ascending"> + <path d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/> + </g> + <g id="descending"> + <path d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/> + </g> + </defs> + <use xlink:href="#sort" x="0" y="0" fill="#999999" /> + <use xlink:href="#sort" x="0" y="1792" fill="#447e9b" /> + <use xlink:href="#ascending" x="0" y="3584" fill="#999999" /> + <use xlink:href="#ascending" x="0" y="5376" fill="#447e9b" /> + <use xlink:href="#descending" x="0" y="7168" fill="#999999" /> + <use xlink:href="#descending" x="0" y="8960" fill="#447e9b" /> +</svg> diff --git a/www/web/static/admin/img/tooltag-add.svg b/www/web/static/admin/img/tooltag-add.svg new file mode 100644 index 0000000..1ca64ae --- /dev/null +++ b/www/web/static/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/> +</svg> diff --git a/www/web/static/admin/img/tooltag-arrowright.svg b/www/web/static/admin/img/tooltag-arrowright.svg new file mode 100644 index 0000000..b664d61 --- /dev/null +++ b/www/web/static/admin/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"/> +</svg> diff --git a/www/web/static/admin/js/SelectBox.js b/www/web/static/admin/js/SelectBox.js new file mode 100644 index 0000000..95825d8 --- /dev/null +++ b/www/web/static/admin/js/SelectBox.js @@ -0,0 +1,135 @@ +(function() { + 'use strict'; + var SelectBox = { + cache: {}, + init: function(id) { + var box = document.getElementById(id); + var node; + SelectBox.cache[id] = []; + var cache = SelectBox.cache[id]; + for (var i = 0, j = box.options.length; i < j; i++) { + node = box.options[i]; + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + var box = document.getElementById(id); + var node; + box.options.length = 0; // clear all options + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.displayed) { + var new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.setAttribute("title", node.text); + box.options[box.options.length] = new_option; + } + } + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + var tokens = text.toLowerCase().split(/\s+/); + var node, token; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + node.displayed = 1; + var numTokens = tokens.length; + for (var k = 0; k < numTokens; k++) { + token = tokens[k]; + if (node.text.toLowerCase().indexOf(token) === -1) { + node.displayed = 0; + } + } + } + SelectBox.redisplay(id); + }, + delete_from_cache: function(id, value) { + var node, delete_index = null; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.value === value) { + delete_index = i; + break; + } + } + var k = cache.length - 1; + for (i = delete_index; i < k; i++) { + cache[i] = cache[i + 1]; + } + cache.length--; + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + var node; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + var from_box = document.getElementById(from); + var option; + var boxOptions = from_box.options; + for (var i = 0, j = boxOptions.length; i < j; i++) { + option = boxOptions[i]; + if (option.selected && SelectBox.cache_contains(from, option.value)) { + SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option.value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + var from_box = document.getElementById(from); + var option; + var boxOptions = from_box.options; + for (var i = 0, j = boxOptions.length; i < j; i++) { + option = boxOptions[i]; + if (SelectBox.cache_contains(from, option.value)) { + SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option.value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + try { + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + } + catch (e) { + // silently fail on IE 'unknown' exception + } + return 0; + } ); + }, + select_all: function(id) { + var box = document.getElementById(id); + for (var i = 0; i < box.options.length; i++) { + box.options[i].selected = 'selected'; + } + } + }; + window.SelectBox = SelectBox; +})(); diff --git a/www/web/static/admin/js/SelectFilter2.js b/www/web/static/admin/js/SelectFilter2.js new file mode 100644 index 0000000..acf3996 --- /dev/null +++ b/www/web/static/admin/js/SelectFilter2.js @@ -0,0 +1,198 @@ +/*global SelectBox, addEvent, gettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires core.js, SelectBox.js and addevent.js. +*/ +(function($) { + 'use strict'; + function findForm(node) { + // returns the node of the form containing the given node + if (node.tagName.toLowerCase() !== 'form') { + return findForm(node.parentNode); + } + return node; + } + + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + var from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + + var ps = from_box.parentNode.getElementsByTagName('p'); + for (var i = 0; i < ps.length; i++) { + if (ps[i].className.indexOf("info") !== -1) { + // Remove <p class="info">, because it just gets in the way. + from_box.parentNode.removeChild(ps[i]); + } else if (ps[i].className.indexOf("help") !== -1) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(ps[i], from_box.parentNode.firstChild); + } + } + + // <div class="selector"> or <div class="selector stacked"> + var selector_div = quickElement('div', from_box.parentNode); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + // <div class="selector-available"> + var selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + var title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); + quickElement( + 'span', title_available, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of available %s. You may choose some by ' + + 'selecting them in the box below and then clicking the ' + + '"Choose" arrow between the two boxes.' + ), + [field_name] + ) + ); + + var filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + var filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', 'javascript:void(0);', 'id', field_id + '_add_all_link'); + choose_all.className = 'selector-chooseall'; + + // <ul class="selector-chooser"> + var selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + var add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', 'javascript:void(0);', 'id', field_id + '_add_link'); + add_link.className = 'selector-add'; + var remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', 'javascript:void(0);', 'id', field_id + '_remove_link'); + remove_link.className = 'selector-remove'; + + // <div class="selector-chosen"> + var selector_chosen = quickElement('div', selector_div); + selector_chosen.className = 'selector-chosen'; + var title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); + quickElement( + 'span', title_chosen, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of chosen %s. You may remove some by ' + + 'selecting them in the box below and then clicking the ' + + '"Remove" arrow between the two boxes.' + ), + [field_name] + ) + ); + + var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name')); + to_box.className = 'filtered'; + var clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', 'javascript:void(0);', 'id', field_id + '_remove_all_link'); + clear_all.className = 'selector-clearall'; + + from_box.setAttribute('name', from_box.getAttribute('name') + '_old'); + + // Set up the JavaScript event handlers for the select box filter interface + addEvent(choose_all, 'click', function() { SelectBox.move_all(field_id + '_from', field_id + '_to'); SelectFilter.refresh_icons(field_id); }); + addEvent(add_link, 'click', function() { SelectBox.move(field_id + '_from', field_id + '_to'); SelectFilter.refresh_icons(field_id); }); + addEvent(remove_link, 'click', function() { SelectBox.move(field_id + '_to', field_id + '_from'); SelectFilter.refresh_icons(field_id); }); + addEvent(clear_all, 'click', function() { SelectBox.move_all(field_id + '_to', field_id + '_from'); SelectFilter.refresh_icons(field_id); }); + addEvent(filter_input, 'keypress', function(e) { SelectFilter.filter_key_press(e, field_id); }); + addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); }); + addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); }); + addEvent(from_box, 'change', function(e) { SelectFilter.refresh_icons(field_id); }); + addEvent(to_box, 'change', function(e) { SelectFilter.refresh_icons(field_id); }); + addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); SelectFilter.refresh_icons(field_id); }); + addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); SelectFilter.refresh_icons(field_id); }); + addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + if (!is_stacked) { + // In horizontal mode, give the same height to the two boxes. + var j_from_box = $(from_box); + var j_to_box = $(to_box); + var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); }; + if (j_from_box.outerHeight() > 0) { + resize_filters(); // This fieldset is already open. Resize now. + } else { + // This fieldset is probably collapsed. Wait for its 'show' event. + j_to_box.closest('fieldset').one('show.fieldset', resize_filters); + } + } + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + refresh_icons: function(field_id) { + var from = $('#' + field_id + '_from'); + var to = $('#' + field_id + '_to'); + var is_from_selected = from.find('option:selected').length > 0; + var is_to_selected = to.find('option:selected').length > 0; + // Active if at least one item is selected + $('#' + field_id + '_add_link').toggleClass('active', is_from_selected); + $('#' + field_id + '_remove_link').toggleClass('active', is_to_selected); + // Active if the corresponding box isn't empty + $('#' + field_id + '_add_all_link').toggleClass('active', from.find('option').length > 0); + $('#' + field_id + '_remove_all_link').toggleClass('active', to.find('option').length > 0); + }, + filter_key_press: function(event, field_id) { + var from = document.getElementById(field_id + '_from'); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + from.selectedIndex = 0; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = 0; + event.preventDefault(); + return false; + } + }, + filter_key_up: function(event, field_id) { + var from = document.getElementById(field_id + '_from'); + var temp = from.selectedIndex; + SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); + from.selectedIndex = temp; + return true; + }, + filter_key_down: function(event, field_id) { + var from = document.getElementById(field_id + '_from'); + // right arrow -- move across + if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { + var old_index = from.selectedIndex; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; + return false; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; + } + return true; + } + }; + +})(django.jQuery); diff --git a/www/web/static/admin/js/actions.js b/www/web/static/admin/js/actions.js new file mode 100644 index 0000000..95e8492 --- /dev/null +++ b/www/web/static/admin/js/actions.js @@ -0,0 +1,146 @@ +/*global _actions_icnt, gettext, interpolate, ngettext*/ +(function($) { + 'use strict'; + var lastChecked; + + $.fn.actions = function(opts) { + var options = $.extend({}, $.fn.actions.defaults, opts); + var actionCheckboxes = $(this); + var list_editable_changed = false; + var showQuestion = function() { + $(options.acrossClears).hide(); + $(options.acrossQuestions).show(); + $(options.allContainer).hide(); + }, + showClear = function() { + $(options.acrossClears).show(); + $(options.acrossQuestions).hide(); + $(options.actionContainer).toggleClass(options.selectedClass); + $(options.allContainer).show(); + $(options.counterContainer).hide(); + }, + reset = function() { + $(options.acrossClears).hide(); + $(options.acrossQuestions).hide(); + $(options.allContainer).hide(); + $(options.counterContainer).show(); + }, + clearAcross = function() { + reset(); + $(options.acrossInput).val(0); + $(options.actionContainer).removeClass(options.selectedClass); + }, + checker = function(checked) { + if (checked) { + showQuestion(); + } else { + reset(); + } + $(actionCheckboxes).prop("checked", checked) + .parent().parent().toggleClass(options.selectedClass, checked); + }, + updateCounter = function() { + var sel = $(actionCheckboxes).filter(":checked").length; + // _actions_icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + $(options.counterContainer).html(interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: _actions_icnt + }, true)); + $(options.allToggle).prop("checked", function() { + var value; + if (sel === actionCheckboxes.length) { + value = true; + showQuestion(); + } else { + value = false; + clearAcross(); + } + return value; + }); + }; + // Show counter by default + $(options.counterContainer).show(); + // Check state of checkboxes and reinit state if needed + $(this).filter(":checked").each(function(i) { + $(this).parent().parent().toggleClass(options.selectedClass); + updateCounter(); + if ($(options.acrossInput).val() === 1) { + showClear(); + } + }); + $(options.allToggle).show().click(function() { + checker($(this).prop("checked")); + updateCounter(); + }); + $("a", options.acrossQuestions).click(function(event) { + event.preventDefault(); + $(options.acrossInput).val(1); + showClear(); + }); + $("a", options.acrossClears).click(function(event) { + event.preventDefault(); + $(options.allToggle).prop("checked", false); + clearAcross(); + checker(0); + updateCounter(); + }); + lastChecked = null; + $(actionCheckboxes).click(function(event) { + if (!event) { event = window.event; } + var target = event.target ? event.target : event.srcElement; + if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { + var inrange = false; + $(lastChecked).prop("checked", target.checked) + .parent().parent().toggleClass(options.selectedClass, target.checked); + $(actionCheckboxes).each(function() { + if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { + inrange = (inrange) ? false : true; + } + if (inrange) { + $(this).prop("checked", target.checked) + .parent().parent().toggleClass(options.selectedClass, target.checked); + } + }); + } + $(target).parent().parent().toggleClass(options.selectedClass, target.checked); + lastChecked = target; + updateCounter(); + }); + $('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() { + list_editable_changed = true; + }); + $('form#changelist-form button[name="index"]').click(function(event) { + if (list_editable_changed) { + return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + } + }); + $('form#changelist-form input[name="_save"]').click(function(event) { + var action_changed = false; + $('select option:selected', options.actionContainer).each(function() { + if ($(this).val()) { + action_changed = true; + } + }); + if (action_changed) { + if (list_editable_changed) { + return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")); + } else { + return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.")); + } + } + }); + }; + /* Setup plugin defaults */ + $.fn.actions.defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggle: "#action-toggle", + selectedClass: "selected" + }; +})(django.jQuery); diff --git a/www/web/static/admin/js/actions.min.js b/www/web/static/admin/js/actions.min.js new file mode 100644 index 0000000..d0e87bc --- /dev/null +++ b/www/web/static/admin/js/actions.min.js @@ -0,0 +1,6 @@ +(function(a){var f;a.fn.actions=function(q){var b=a.extend({},a.fn.actions.defaults,q),g=a(this),e=!1,k=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},l=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},m=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},n=function(){m(); +a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},p=function(c){c?k():m();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},!0));a(b.allToggle).prop("checked",function(){var a;c===g.length?(a=!0,k()):(a=!1,n());return a})};a(b.counterContainer).show();a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass); +h();1===a(b.acrossInput).val()&&l()});a(b.allToggle).show().click(function(){p(a(this).prop("checked"));h()});a("a",b.acrossQuestions).click(function(c){c.preventDefault();a(b.acrossInput).val(1);l()});a("a",b.acrossClears).click(function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);n();p(0);h()});f=null;a(g).click(function(c){c||(c=window.event);var d=c.target?c.target:c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass, +d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){e=!0});a('form#changelist-form button[name="index"]').click(function(a){if(e)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))}); +a('form#changelist-form input[name="_save"]').click(function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return e?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})}; +a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery); diff --git a/www/web/static/admin/js/admin/DateTimeShortcuts.js b/www/web/static/admin/js/admin/DateTimeShortcuts.js new file mode 100644 index 0000000..d0acc23 --- /dev/null +++ b/www/web/static/admin/js/admin/DateTimeShortcuts.js @@ -0,0 +1,364 @@ +/*global addEvent, Calendar, cancelEventPropagation, findPosX, findPosY, getStyle, get_format, gettext, interpolate, ngettext, quickElement, removeEvent*/ +// Inserts shortcut buttons after all of the following: +// <input type="text" class="vDateField"> +// <input type="text" class="vTimeField"> +(function() { + 'use strict'; + var DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled + calendarDivName2: 'calendarin', // name of <div> that contains calendar + calendarLinkName: 'calendarlink',// name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock <div> that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + var body = document.getElementsByTagName('body')[0]; + var serverOffset = body.getAttribute('data-admin-utc-offset'); + if (serverOffset !== undefined) { + var localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + var inputs = document.getElementsByTagName('input'); + for (var i = 0; i < inputs.length; i++) { + var inp = inputs[i]; + if (inp.getAttribute('type') === 'text' && inp.className.match(/vTimeField/)) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.getAttribute('type') === 'text' && inp.className.match(/vDateField/)) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + var body = document.getElementsByTagName('body')[0]; + var serverOffset = body.getAttribute('data-admin-utc-offset'); + if (serverOffset !== undefined) { + var localNow = new Date(); + var localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + var $ = django.jQuery; + var warningClass = DateTimeShortcuts.timezoneWarningClass; + var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if ($(inp).siblings('.' + warningClass).length) { + return; + } + + var message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + var $warning = $('<span>'); + $warning.attr('class', warningClass); + $warning.text(message); + + $(inp).parent() + .append($('<br>')) + .append($warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + var num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + var shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + var now_link = document.createElement('a'); + now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", -1);"); + now_link.appendChild(document.createTextNode(gettext('Now'))); + var clock_link = document.createElement('a'); + clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');'); + clock_link.id = DateTimeShortcuts.clockLinkName + num; + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + // <div id="clockbox1" class="clockbox module"> + // <h2>Choose a time</h2> + // <ul class="timelist"> + // <li><a href="#">Now</a></li> + // <li><a href="#">Midnight</a></li> + // <li><a href="#">6 a.m.</a></li> + // <li><a href="#">Noon</a></li> + // <li><a href="#">6 p.m.</a></li> + // </ul> + // <p class="calendar-cancel"><a href="#">Cancel</a></p> + // </div> + + var clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num); + document.body.appendChild(clock_box); + addEvent(clock_box, 'click', cancelEventPropagation); + + quickElement('h2', clock_box, gettext('Choose a time')); + var time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + quickElement("a", quickElement("li", time_list), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", -1);"); + quickElement("a", quickElement("li", time_list), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 0);"); + quickElement("a", quickElement("li", time_list), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 6);"); + quickElement("a", quickElement("li", time_list), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 12);"); + quickElement("a", quickElement("li", time_list), gettext("6 p.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 18);"); + + var cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');'); + django.jQuery(document).bind('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + var clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (getStyle(document.body, 'direction') !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + // TODO: IE returns wrong value for findPosX when in rtl mode + // (it returns as it was left aligned), needs to be fixed. + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + addEvent(document, 'click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + removeEvent(document, 'click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + var d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + var num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + var shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + var today_link = document.createElement('a'); + today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);'); + today_link.appendChild(document.createTextNode(gettext('Today'))); + var cal_link = document.createElement('a'); + cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');'); + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + // <div id="calendarbox3" class="calendarbox module"> + // <h2> + // <a href="#" class="link-previous">‹</a> + // <a href="#" class="link-next">›</a> February 2003 + // </h2> + // <div class="calendar" id="calendarin3"> + // <!-- (cal) --> + // </div> + // <div class="calendar-shortcuts"> + // <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a> + // </div> + // <p class="calendar-cancel"><a href="#">Cancel</a></p> + // </div> + var cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num); + document.body.appendChild(cal_box); + addEvent(cal_box, 'click', cancelEventPropagation); + + // next-prev links + var cal_nav = quickElement('div', cal_box); + var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev(' + num + ');'); + cal_nav_prev.className = 'calendarnav-previous'; + var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext(' + num + ');'); + cal_nav_next.className = 'calendarnav-next'; + + // main box + var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + var shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + quickElement('a', shortcuts, gettext('Yesterday'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);'); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + quickElement('a', shortcuts, gettext('Today'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);'); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + quickElement('a', shortcuts, gettext('Tomorrow'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);'); + + // cancel bar + var cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');'); + django.jQuery(document).bind('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + var inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + var format = get_format('DATE_INPUT_FORMATS')[0]; + var selected = inp.value.strptime(format); + var year = selected.getFullYear(); + var month = selected.getMonth() + 1; + var re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (getStyle(document.body, 'direction') !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + // TODO: IE returns wrong value for findPosX when in rtl mode + // (it returns as it was left aligned), needs to be fixed. + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + addEvent(document, 'click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + removeEvent(document, 'click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + var format = get_format('DATE_INPUT_FORMATS')[0]; + // the format needs to be escaped a little + format = format.replace('\\', '\\\\'); + format = format.replace('\r', '\\r'); + format = format.replace('\n', '\\n'); + format = format.replace('\t', '\\t'); + format = format.replace("'", "\\'"); + return ["function(y, m, d) { DateTimeShortcuts.calendarInputs[", + num, + "].value = new Date(y, m-1, d).strftime('", + format, + "');DateTimeShortcuts.calendarInputs[", + num, + "].focus();document.getElementById(DateTimeShortcuts.calendarDivName1+", + num, + ").style.display='none';}"].join(''); + }, + handleCalendarQuickLink: function(num, offset) { + var d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + addEvent(window, 'load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +})(); diff --git a/www/web/static/admin/js/admin/RelatedObjectLookups.js b/www/web/static/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000..fa782fe --- /dev/null +++ b/www/web/static/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,160 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. + +(function() { + 'use strict'; + + function html_unescape(text) { + // Unescape a string that was escaped using django.utils.html.escape. + text = text.replace(/</g, '<'); + text = text.replace(/>/g, '>'); + text = text.replace(/"/g, '"'); + text = text.replace(/'/g, "'"); + text = text.replace(/&/g, '&'); + return text; + } + + // IE doesn't accept periods or dashes in the window name, but the element IDs + // we use to generate popup window names may contain them, therefore we map them + // to allowed characters in a reversible way so that we can locate the correct + // element when the popup window is dismissed. + function id_to_windowname(text) { + text = text.replace(/\./g, '__dot__'); + text = text.replace(/\-/g, '__dash__'); + return text; + } + + function windowname_to_id(text) { + text = text.replace(/__dot__/g, '.'); + text = text.replace(/__dash__/g, '-'); + return text; + } + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + var name = triggeringLink.id.replace(name_regexp, ''); + name = id_to_windowname(name); + var href = triggeringLink.href; + if (add_popup) { + if (href.indexOf('?') === -1) { + href += '?_popup=1'; + } else { + href += '&_popup=1'; + } + } + var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + var name = windowname_to_id(win.name); + var elem = document.getElementById(name); + if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { + elem.value += ',' + chosenId; + } else { + document.getElementById(name).value = chosenId; + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + var $this = django.jQuery(triggeringLink); + var siblings = $this.nextAll('.change-related, .delete-related'); + if (!siblings.length) { + return; + } + var value = $this.val(); + if (value) { + siblings.each(function() { + var elm = django.jQuery(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + }); + } else { + siblings.removeAttr('href'); + } + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + // newId and newRepr are expected to have previously been escaped by + // django.utils.html.escape. + newId = html_unescape(newId); + newRepr = html_unescape(newRepr); + var name = windowname_to_id(win.name); + var elem = document.getElementById(name); + if (elem) { + var elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + } else if (elemName === 'INPUT') { + if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + django.jQuery(elem).trigger('change'); + } else { + var toId = name + "_to"; + var o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + objId = html_unescape(objId); + newRepr = html_unescape(newRepr); + var id = windowname_to_id(win.name).replace(/^edit_/, ''); + var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + var selects = django.jQuery(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.innerHTML = newRepr; + this.value = newId; + } + }); + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + objId = html_unescape(objId); + var id = windowname_to_id(win.name).replace(/^delete_/, ''); + var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + var selects = django.jQuery(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + django.jQuery(this).remove(); + } + }).trigger('change'); + win.close(); + } + + // Global for testing purposes + window.html_unescape = html_unescape; + window.id_to_windowname = id_to_windowname; + window.windowname_to_id = windowname_to_id; + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + +})(); diff --git a/www/web/static/admin/js/calendar.js b/www/web/static/admin/js/calendar.js new file mode 100644 index 0000000..1043dd6 --- /dev/null +++ b/www/web/static/admin/js/calendar.js @@ -0,0 +1,178 @@ +/*global gettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ + +(function() { + 'use strict'; + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + var CalendarNamespace = { + monthsOfYear: gettext('January February March April May June July August September October November December').split(' '), + daysOfWeek: gettext('S M T W T F S').split(' '), + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + var days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + var today = new Date(); + var todayDay = today.getDate(); + var todayMonth = today.getMonth() + 1; + var todayYear = today.getFullYear(); + var todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + var isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + var calDiv = document.getElementById(div_id); + removeChildren(calDiv); + var calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + var tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + var tableRow = quickElement('tr', tableBody); + for (var i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + var startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + var days = CalendarNamespace.getDaysInMonth(month, year); + + var nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + // Draw days of month + var currentDay = 1; + for (i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + var cell = quickElement('td', tableRow, '', 'class', todayClass); + + quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '(' + year + ',' + month + ',' + currentDay + '));'); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; +})(); diff --git a/www/web/static/admin/js/collapse.js b/www/web/static/admin/js/collapse.js new file mode 100644 index 0000000..7cb9362 --- /dev/null +++ b/www/web/static/admin/js/collapse.js @@ -0,0 +1,26 @@ +/*global gettext*/ +(function($) { + 'use strict'; + $(document).ready(function() { + // Add anchor tag for Show/Hide link + $("fieldset.collapse").each(function(i, elem) { + // Don't hide if fields in this fieldset have errors + if ($(elem).find("div.errors").length === 0) { + $(elem).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser' + + i + '" class="collapse-toggle" href="#">' + gettext("Show") + + '</a>)'); + } + }); + // Add toggle to anchor tag + $("fieldset.collapse a.collapse-toggle").click(function(ev) { + if ($(this).closest("fieldset").hasClass("collapsed")) { + // Show + $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]); + } else { + // Hide + $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]); + } + return false; + }); + }); +})(django.jQuery); diff --git a/www/web/static/admin/js/collapse.min.js b/www/web/static/admin/js/collapse.min.js new file mode 100644 index 0000000..6251d91 --- /dev/null +++ b/www/web/static/admin/js/collapse.min.js @@ -0,0 +1,2 @@ +(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(b,c){0===a(c).find("div.errors").length&&a(c).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser'+b+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")});a("fieldset.collapse a.collapse-toggle").click(function(b){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]):a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", +[a(this).attr("id")]);return!1})})})(django.jQuery); diff --git a/www/web/static/admin/js/core.js b/www/web/static/admin/js/core.js new file mode 100644 index 0000000..34f9926 --- /dev/null +++ b/www/web/static/admin/js/core.js @@ -0,0 +1,263 @@ +// Core javascript helper functions + +// basic browser identification & version +var isOpera = (navigator.userAgent.indexOf("Opera") >= 0) && parseFloat(navigator.appVersion); +var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]); + +// Cross-browser event handlers. +function addEvent(obj, evType, fn) { + 'use strict'; + if (obj.addEventListener) { + obj.addEventListener(evType, fn, false); + return true; + } else if (obj.attachEvent) { + var r = obj.attachEvent("on" + evType, fn); + return r; + } else { + return false; + } +} + +function removeEvent(obj, evType, fn) { + 'use strict'; + if (obj.removeEventListener) { + obj.removeEventListener(evType, fn, false); + return true; + } else if (obj.detachEvent) { + obj.detachEvent("on" + evType, fn); + return true; + } else { + return false; + } +} + +function cancelEventPropagation(e) { + 'use strict'; + if (!e) { + e = window.event; + } + e.cancelBubble = true; + if (e.stopPropagation) { + e.stopPropagation(); + } +} + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + 'use strict'; + var obj = document.createElement(arguments[0]); + if (arguments[2]) { + var textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + var len = arguments.length; + for (var i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + 'use strict'; + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Cross-browser xmlhttp object +// from http://jibbering.com/2002/4/httprequest.html +// ---------------------------------------------------------------------------- +var xmlhttp; +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) + try { + xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); + } catch (e) { + try { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } catch (E) { + xmlhttp = false; + } + } +@else + xmlhttp = false; +@end @*/ +if (!xmlhttp && typeof XMLHttpRequest !== 'undefined') { + xmlhttp = new XMLHttpRequest(); +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See http://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + 'use strict'; + var curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft); + obj = obj.offsetParent; + } + // IE offsetParent does not include the top-level + if (isIE && obj.parentElement) { + curleft += obj.offsetLeft - obj.scrollLeft; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + 'use strict'; + var curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop); + obj = obj.offsetParent; + } + // IE offsetParent does not include the top-level + if (isIE && obj.parentElement) { + curtop += obj.offsetTop - obj.scrollTop; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +(function() { + 'use strict'; + Date.prototype.getTwelveHours = function() { + var hours = this.getHours(); + if (hours === 0) { + return 12; + } + else { + return hours <= 12 ? hours : hours - 12; + } + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getHourMinute = function() { + return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); + }; + + Date.prototype.getHourMinuteSecond = function() { + return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); + }; + + Date.prototype.strftime = function(format) { + var fields = { + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + var result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result = result + fields[format.charAt(i + 1)]; + ++i; + } + else { + result = result + format.charAt(i); + } + ++i; + } + return result; + }; + +// ---------------------------------------------------------------------------- +// String object extensions +// ---------------------------------------------------------------------------- + String.prototype.pad_left = function(pad_length, pad_string) { + var new_string = this; + for (var i = 0; new_string.length < pad_length; i++) { + new_string = pad_string + new_string; + } + return new_string; + }; + + String.prototype.strptime = function(format) { + var split_format = format.split(/[.\-/]/); + var date = this.split(/[.\-/]/); + var i = 0; + var day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + year = date[i]; + break; + } + ++i; + } + return new Date(year, month, day); + }; + +})(); +// ---------------------------------------------------------------------------- +// Get the computed style for and element +// ---------------------------------------------------------------------------- +function getStyle(oElm, strCssRule) { + 'use strict'; + var strValue = ""; + if(document.defaultView && document.defaultView.getComputedStyle) { + strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); + } + else if(oElm.currentStyle) { + strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { + return p1.toUpperCase(); + }); + strValue = oElm.currentStyle[strCssRule]; + } + return strValue; +} diff --git a/www/web/static/admin/js/inlines.js b/www/web/static/admin/js/inlines.js new file mode 100644 index 0000000..c725e30 --- /dev/null +++ b/www/web/static/admin/js/inlines.js @@ -0,0 +1,275 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: http://www.opensource.org/licenses/bsd-license.php + */ +(function($) { + 'use strict'; + $.fn.formset = function(opts) { + var options = $.extend({}, $.fn.formset.defaults, opts); + var $this = $(this); + var $parent = $this.parent(); + var updateElementIndex = function(el, prefix, ndx) { + var id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + var replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + var nextIndex = parseInt(totalForms.val(), 10); + var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + // only show the add button if we are allowed to add more items, + // note that max_num = None translates to a blank string. + var showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + if ($this.length && showAddButton) { + var addButton; + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + var numCols = this.eq(-1).children().length; + $parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="javascript:void(0)">' + options.addText + "</a></tr>"); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('<div class="' + options.addCssClass + '"><a href="javascript:void(0)">' + options.addText + "</a></div>"); + addButton = $this.filter(":last").next().find("a"); + } + addButton.click(function(e) { + e.preventDefault(); + var template = $("#" + options.prefix + "-empty"); + var row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('<div><a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText + "</a></div>"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an <li> after the last list item: + row.append('<li><a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText + "</a></li>"); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText + "</a></span>"); + } + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited + row.insertBefore($(template)); + // Update number of total forms + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide add button in case we've hit the max, except we want to add infinitely + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // The delete button of each row triggers a bunch of other things + row.find("a." + options.deleteCssClass).click(function(e1) { + e1.preventDefault(); + // Remove the parent form containing this button: + row.remove(); + nextIndex -= 1; + // If a post-delete callback was provided, call it with the deleted form: + if (options.removed) { + options.removed(row); + } + $(document).trigger('formset:removed', [row, options.prefix]); + // Update the TOTAL_FORMS form count. + var forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once we drop below max + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Also, update names and ids for all remaining form controls + // so they remain in sequence: + var i, formCount; + var updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }); + // If a post-add callback was supplied, call it with the added form: + if (options.added) { + options.added(row); + } + $(document).trigger('formset:added', [row, options.prefix]); + }); + } + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null // Function called each time a form is deleted + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(options) { + var $rows = $(this); + var alternatingRows = function(row) { + $($rows.selector).not(".add-row").removeClass("row1 row2") + .filter(":even").addClass("row1").end() + .filter(":odd").addClass("row2"); + }; + + var reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + var updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], false); + }); + $('.selectfilterstacked').each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], true); + }); + } + }; + + var initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + var field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: alternatingRows, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + alternatingRows(row); + } + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(options) { + var $rows = $(this); + var updateInlineLabel = function(row) { + $($rows.selector).find(".inline_label").each(function(i) { + var count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + var reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + var updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], false); + }); + $(".selectfilterstacked").each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], true); + }); + } + }; + + var initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + var field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + } + }); + + return $rows; + }; +})(django.jQuery); diff --git a/www/web/static/admin/js/inlines.min.js b/www/web/static/admin/js/inlines.min.js new file mode 100644 index 0000000..f83cbec --- /dev/null +++ b/www/web/static/admin/js/inlines.min.js @@ -0,0 +1,9 @@ +(function(b){b.fn.formset=function(d){var a=b.extend({},b.fn.formset.defaults,d),e=b(this);d=e.parent();var k=function(a,f,l){var c=new RegExp("("+f+"-(\\d+|__prefix__))");f=f+"-"+l;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(c,f));a.id&&(a.id=a.id.replace(c,f));a.name&&(a.name=a.name.replace(c,f))},h=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),l=parseInt(h.val(),10),f=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),c=""===f.val()||0<f.val()-h.val(); +e.each(function(f){b(this).not("."+a.emptyCssClass).addClass(a.formCssClass)});if(e.length&&c){var m;"TR"===e.prop("tagName")?(e=this.eq(-1).children().length,d.append('<tr class="'+a.addCssClass+'"><td colspan="'+e+'"><a href="javascript:void(0)">'+a.addText+"</a></tr>"),m=d.find("tr:last a")):(e.filter(":last").after('<div class="'+a.addCssClass+'"><a href="javascript:void(0)">'+a.addText+"</a></div>"),m=e.filter(":last").next().find("a"));m.click(function(c){c.preventDefault();c=b("#"+a.prefix+ +"-empty");var g=c.clone(!0);g.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+l);g.is("tr")?g.children(":last").append('<div><a class="'+a.deleteCssClass+'" href="javascript:void(0)">'+a.deleteText+"</a></div>"):g.is("ul")||g.is("ol")?g.append('<li><a class="'+a.deleteCssClass+'" href="javascript:void(0)">'+a.deleteText+"</a></li>"):g.children(":first").append('<span><a class="'+a.deleteCssClass+'" href="javascript:void(0)">'+a.deleteText+"</a></span>");g.find("*").each(function(){k(this, +a.prefix,h.val())});g.insertBefore(b(c));b(h).val(parseInt(h.val(),10)+1);l+=1;""!==f.val()&&0>=f.val()-h.val()&&m.parent().hide();g.find("a."+a.deleteCssClass).click(function(c){c.preventDefault();g.remove();--l;a.removed&&a.removed(g);b(document).trigger("formset:removed",[g,a.prefix]);c=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(c.length);(""===f.val()||0<f.val()-c.length)&&m.parent().show();var d,e,h=function(){k(this,a.prefix,d)};d=0;for(e=c.length;d<e;d++)k(b(c).get(d),a.prefix, +d),b(c.get(d)).find("*").each(h)});a.added&&a.added(g);b(document).trigger("formset:added",[g,a.prefix])})}return this};b.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null};b.fn.tabularFormset=function(d){var a=b(this),e=function(l){b(a.selector).not(".add-row").removeClass("row1 row2").filter(":even").addClass("row1").end().filter(":odd").addClass("row2")}, +k=function(){"undefined"!==typeof SelectFilter&&(b(".selectfilter").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],!1)}),b(".selectfilterstacked").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var f=b(this).find("input, select, textarea"),c=f.data("dependency_list")||[],d=[];b.each(c,function(b,c){d.push("#"+a.find(".field-"+c).find("input, select, textarea").attr("id"))}); +d.length&&f.prepopulate(d,f.attr("maxlength"))})};a.formset({prefix:d.prefix,addText:d.addText,formCssClass:"dynamic-"+d.prefix,deleteCssClass:"inline-deletelink",deleteText:d.deleteText,emptyCssClass:"empty-form",removed:e,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());k();e(a)}});return a};b.fn.stackedFormset=function(d){var a=b(this),e=function(d){b(a.selector).find(".inline_label").each(function(a){a+=1;b(this).html(b(this).html().replace(/(#\d+)/g, +"#"+a))})},k=function(){"undefined"!==typeof SelectFilter&&(b(".selectfilter").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],!1)}),b(".selectfilterstacked").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var d=b(this).find("input, select, textarea"),c=d.data("dependency_list")||[],e=[];b.each(c,function(b,c){e.push("#"+a.find(".form-row .field-"+c).find("input, select, textarea").attr("id"))}); +e.length&&d.prepopulate(e,d.attr("maxlength"))})};a.formset({prefix:d.prefix,addText:d.addText,formCssClass:"dynamic-"+d.prefix,deleteCssClass:"inline-deletelink",deleteText:d.deleteText,emptyCssClass:"empty-form",removed:e,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());k();e(a)}});return a}})(django.jQuery); diff --git a/www/web/static/admin/js/jquery.init.js b/www/web/static/admin/js/jquery.init.js new file mode 100644 index 0000000..f3ac162 --- /dev/null +++ b/www/web/static/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global django:true, jQuery:false*/ +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +var django = django || {}; +django.jQuery = jQuery.noConflict(true); diff --git a/www/web/static/admin/js/prepopulate.js b/www/web/static/admin/js/prepopulate.js new file mode 100644 index 0000000..5d4b0e8 --- /dev/null +++ b/www/web/static/admin/js/prepopulate.js @@ -0,0 +1,42 @@ +/*global URLify*/ +(function($) { + 'use strict'; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + var prepopulatedField = $(this); + + var populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + var values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.change(function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).keyup(populate).change(populate).focus(populate); + } + }); + }; +})(django.jQuery); diff --git a/www/web/static/admin/js/prepopulate.min.js b/www/web/static/admin/js/prepopulate.min.js new file mode 100644 index 0000000..75f3c17 --- /dev/null +++ b/www/web/static/admin/js/prepopulate.min.js @@ -0,0 +1 @@ +(function(c){c.fn.prepopulate=function(e,f,g){return this.each(function(){var a=c(this),b=function(){if(!a.data("_changed")){var b=[];c.each(e,function(a,d){d=c(d);0<d.val().length&&b.push(d.val())});a.val(URLify(b.join(" "),f,g))}};a.data("_changed",!1);a.change(function(){a.data("_changed",!0)});a.val()||c(e.join(",")).keyup(b).change(b).focus(b)})}})(django.jQuery); diff --git a/www/web/static/admin/js/timeparse.js b/www/web/static/admin/js/timeparse.js new file mode 100644 index 0000000..3cdc7ec --- /dev/null +++ b/www/web/static/admin/js/timeparse.js @@ -0,0 +1,106 @@ +(function() { + 'use strict'; + var timeParsePatterns = [ + // 9 + { + re: /^\d{1,2}$/i, + handler: function(bits) { + if (bits[0].length === 1) { + return '0' + bits[0] + ':00'; + } else { + return bits[0] + ':00'; + } + } + }, + // 13:00 + { + re: /^\d{2}[:.]\d{2}$/i, + handler: function(bits) { + return bits[0].replace('.', ':'); + } + }, + // 9:00 + { + re: /^\d[:.]\d{2}$/i, + handler: function(bits) { + return '0' + bits[0].replace('.', ':'); + } + }, + // 3 am / 3 a.m. / 3am + { + re: /^(\d+)\s*([ap])(?:.?m.?)?$/i, + handler: function(bits) { + var hour = parseInt(bits[1]); + if (hour === 12) { + hour = 0; + } + if (bits[2].toLowerCase() === 'p') { + if (hour === 12) { + hour = 0; + } + return (hour + 12) + ':00'; + } else { + if (hour < 10) { + return '0' + hour + ':00'; + } else { + return hour + ':00'; + } + } + } + }, + // 3.30 am / 3:15 a.m. / 3.00am + { + re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i, + handler: function(bits) { + var hour = parseInt(bits[1]); + var mins = parseInt(bits[2]); + if (mins < 10) { + mins = '0' + mins; + } + if (hour === 12) { + hour = 0; + } + if (bits[3].toLowerCase() === 'p') { + if (hour === 12) { + hour = 0; + } + return (hour + 12) + ':' + mins; + } else { + if (hour < 10) { + return '0' + hour + ':' + mins; + } else { + return hour + ':' + mins; + } + } + } + }, + // noon + { + re: /^no/i, + handler: function(bits) { + return '12:00'; + } + }, + // midnight + { + re: /^mid/i, + handler: function(bits) { + return '00:00'; + } + } + ]; + + function parseTimeString(s) { + for (var i = 0; i < timeParsePatterns.length; i++) { + var re = timeParsePatterns[i].re; + var handler = timeParsePatterns[i].handler; + var bits = re.exec(s); + if (bits) { + return handler(bits); + } + } + return s; + } + + window.parseTimeString = parseTimeString; +})(); diff --git a/www/web/static/admin/js/urlify.js b/www/web/static/admin/js/urlify.js new file mode 100644 index 0000000..b27325e --- /dev/null +++ b/www/web/static/admin/js/urlify.js @@ -0,0 +1,171 @@ +/*global XRegExp*/ +(function() { + 'use strict'; + + var LATIN_MAP = { + 'À': 'A', 'Ã': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Ã…': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'ÃŒ': 'I', 'Ã': 'I', + 'ÃŽ': 'I', 'Ã': 'I', 'Ã': 'D', 'Ñ': 'N', 'Ã’': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Å': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ã': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à ': 'a', + 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'Ã¥': 'a', 'æ': 'ae', 'ç': 'c', + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'Ã': 'i', 'î': 'i', + 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', + 'ö': 'o', 'Å‘': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', + 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' + }; + var LATIN_SYMBOLS_MAP = { + '©': '(c)' + }; + var GREEK_MAP = { + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', + 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', + 'ο': 'o', 'Ï€': 'p', 'Ï': 'r', 'σ': 's', 'Ï„': 't', 'Ï…': 'y', 'φ': 'f', + 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'Î': 'e', 'ί': 'i', 'ÏŒ': 'o', + 'Ï': 'y', 'ή': 'h', 'ÏŽ': 'w', 'Ï‚': 's', 'ÏŠ': 'i', 'ΰ': 'y', 'Ï‹': 'y', + 'Î': 'i', 'Α': 'A', 'Î’': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', + 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Î': 'N', + 'Ξ': '3', 'Ο': 'O', 'Î ': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Î¥': 'Y', + 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', + 'ÎŒ': 'O', 'ÎŽ': 'Y', 'Ή': 'H', 'Î': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' + }; + var TURKISH_MAP = { + 'ÅŸ': 's', 'Åž': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', + 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ÄŸ': 'g', 'Äž': 'G' + }; + var ROMANIAN_MAP = { + 'ă': 'a', 'î': 'i', 'È™': 's', 'È›': 't', 'â': 'a', + 'Ä‚': 'A', 'ÃŽ': 'I', 'Ș': 'S', 'Èš': 'T', 'Â': 'A' + }; + var RUSSIAN_MAP = { + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'Ñ‘': 'yo', + 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', + 'н': 'n', 'о': 'o', 'п': 'p', 'Ñ€': 'r', 'Ñ': 's', 'Ñ‚': 't', 'у': 'u', + 'Ñ„': 'f', 'Ñ…': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ÑŠ': '', + 'Ñ‹': 'y', 'ÑŒ': '', 'Ñ': 'e', 'ÑŽ': 'yu', 'Ñ': 'ya', + 'Ð': 'A', 'Б': 'B', 'Ð’': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ð': 'Yo', + 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', + 'Ð': 'N', 'О': 'O', 'П': 'P', 'Ð ': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', + 'Ф': 'F', 'Ð¥': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', + 'Ы': 'Y', 'Ь': '', 'Ð': 'E', 'Ю': 'Yu', 'Я': 'Ya' + }; + var UKRAINIAN_MAP = { + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ò': 'G', 'Ñ”': 'ye', 'Ñ–': 'i', + 'Ñ—': 'yi', 'Ò‘': 'g' + }; + var CZECH_MAP = { + 'Ä': 'c', 'Ä': 'd', 'Ä›': 'e', 'ň': 'n', 'Å™': 'r', 'Å¡': 's', 'Å¥': 't', + 'ů': 'u', 'ž': 'z', 'ÄŒ': 'C', 'ÄŽ': 'D', 'Äš': 'E', 'Ň': 'N', 'Ř': 'R', + 'Å ': 'S', 'Ť': 'T', 'Å®': 'U', 'Ž': 'Z' + }; + var POLISH_MAP = { + 'Ä…': 'a', 'ć': 'c', 'Ä™': 'e', 'Å‚': 'l', 'Å„': 'n', 'ó': 'o', 'Å›': 's', + 'ź': 'z', 'ż': 'z', + 'Ä„': 'A', 'Ć': 'C', 'Ę': 'E', 'Å': 'L', 'Ń': 'N', 'Ó': 'O', 'Åš': 'S', + 'Ź': 'Z', 'Å»': 'Z' + }; + var LATVIAN_MAP = { + 'Ä': 'a', 'Ä': 'c', 'Ä“': 'e', 'Ä£': 'g', 'Ä«': 'i', 'Ä·': 'k', 'ļ': 'l', + 'ņ': 'n', 'Å¡': 's', 'Å«': 'u', 'ž': 'z', + 'Ä€': 'A', 'ÄŒ': 'C', 'Ä’': 'E', 'Ä¢': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ä»': 'L', + 'Å…': 'N', 'Å ': 'S', 'Ū': 'U', 'Ž': 'Z' + }; + var ARABIC_MAP = { + 'Ø£': 'a', 'ب': 'b', 'ت': 't', 'Ø«': 'th', 'ج': 'g', 'Ø': 'h', 'Ø®': 'kh', 'د': 'd', + 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'Ø´': 'sh', 'ص': 's', 'ض': 'd', 'Ø·': 't', + 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'Ù': 'f', 'Ù‚': 'k', 'Ùƒ': 'k', 'Ù„': 'l', 'Ù…': 'm', + 'Ù†': 'n', 'Ù‡': 'h', 'Ùˆ': 'o', 'ÙŠ': 'y' + }; + var LITHUANIAN_MAP = { + 'Ä…': 'a', 'Ä': 'c', 'Ä™': 'e', 'Ä—': 'e', 'į': 'i', 'Å¡': 's', 'ų': 'u', + 'Å«': 'u', 'ž': 'z', + 'Ä„': 'A', 'ÄŒ': 'C', 'Ę': 'E', 'Ä–': 'E', 'Ä®': 'I', 'Å ': 'S', 'Ų': 'U', + 'Ū': 'U', 'Ž': 'Z' + }; + var SERBIAN_MAP = { + 'Ñ’': 'dj', 'ј': 'j', 'Ñ™': 'lj', 'Ñš': 'nj', 'Ñ›': 'c', 'ÑŸ': 'dz', + 'Ä‘': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', + 'Ð': 'Dz', 'Ä': 'Dj' + }; + var AZERBAIJANI_MAP = { + 'ç': 'c', 'É™': 'e', 'ÄŸ': 'g', 'ı': 'i', 'ö': 'o', 'ÅŸ': 's', 'ü': 'u', + 'Ç': 'C', 'Æ': 'E', 'Äž': 'G', 'İ': 'I', 'Ö': 'O', 'Åž': 'S', 'Ü': 'U' + }; + + var ALL_DOWNCODE_MAPS = [ + LATIN_MAP, + LATIN_SYMBOLS_MAP, + GREEK_MAP, + TURKISH_MAP, + ROMANIAN_MAP, + RUSSIAN_MAP, + UKRAINIAN_MAP, + CZECH_MAP, + POLISH_MAP, + LATVIAN_MAP, + ARABIC_MAP, + LITHUANIAN_MAP, + SERBIAN_MAP, + AZERBAIJANI_MAP + ]; + + var Downcoder = { + 'Initialize': function() { + if (Downcoder.map) { // already made + return; + } + Downcoder.map = {}; + Downcoder.chars = []; + for (var i = 0; i < ALL_DOWNCODE_MAPS.length; i++) { + var lookup = ALL_DOWNCODE_MAPS[i]; + for (var c in lookup) { + if (lookup.hasOwnProperty(c)) { + Downcoder.map[c] = lookup[c]; + } + } + } + for (var k in Downcoder.map) { + if (Downcoder.map.hasOwnProperty(k)) { + Downcoder.chars.push(k); + } + } + Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g'); + } + }; + + function downcode(slug) { + Downcoder.Initialize(); + return slug.replace(Downcoder.regex, function(m) { + return Downcoder.map[m]; + }); + } + + + function URLify(s, num_chars, allowUnicode) { + // changes, e.g., "Petty theft" to "petty-theft" + // remove all these words from the string before urlifying + if (!allowUnicode) { + s = downcode(s); + } + var removelist = [ + "a", "an", "as", "at", "before", "but", "by", "for", "from", "is", + "in", "into", "like", "of", "off", "on", "onto", "per", "since", + "than", "the", "this", "that", "to", "up", "via", "with" + ]; + var r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi'); + s = s.replace(r, ''); + // if downcode doesn't hit, the char will be stripped here + if (allowUnicode) { + // Keep Unicode letters including both lowercase and uppercase + // characters, whitespace, and dash; remove other characters. + s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); + } else { + s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars + } + s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.toLowerCase(); // convert to lowercase + return s.substring(0, num_chars); // trim to first num_chars chars + } + window.URLify = URLify; +})(); diff --git a/www/web/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt b/www/web/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt new file mode 100644 index 0000000..d930e62 --- /dev/null +++ b/www/web/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt @@ -0,0 +1,26 @@ +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/www/web/static/admin/js/vendor/jquery/jquery.js b/www/web/static/admin/js/vendor/jquery/jquery.js new file mode 100644 index 0000000..eed1777 --- /dev/null +++ b/www/web/static/admin/js/vendor/jquery/jquery.js @@ -0,0 +1,9210 @@ +/*! + * jQuery JavaScript Library v2.1.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-04-28T16:01Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + 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 ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// + +var arr = []; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + version = "2.1.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + 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); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + 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 : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isPlainObject: function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf("use strict") === 1 ) { + script = document.createElement("script"); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + 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; + } + } + } + + // A special, fast, case for the most common use of each + } 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; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + 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 ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + 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 = +/*! + * Sizzle CSS Selector Engine v2.2.0-pre + * http://sizzlejs.com/ + * + * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-16 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + 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; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + 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", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + 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 ), + "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" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "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/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + 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 ) { + + // Try to shortcut find operations when possible (e.g., not under DocumentFragment) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType !== 1 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + 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"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + parent = doc.defaultView; + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Support tests + ---------------------------------------------------------------------- */ + documentIsHTML = !isXML( doc ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + 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 { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + 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; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\f]' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + 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; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + 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 ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + 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 ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + 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 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + 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 ); + + // Move the given value to match[3] whether quoted or unquoted + 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 ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + 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" ); + + // other types prohibit arguments + } 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; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + 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 ? + + // Shortcut for :nth-*(n) + 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 ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + 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 ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + 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: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + 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; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + 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; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + 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; + }; + }), + + // Miscellaneous + "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); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "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" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "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"]; + +// Add button/input type pseudos +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 ); +} + +// Easy API for creating new setFilters +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 ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + 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 the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + 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 ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + 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 ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + 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, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } 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, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + 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 ) ); + // Avoid hanging onto element (issue #299) + 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 ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + 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, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + 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; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +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 || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + 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; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +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 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +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; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +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 = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + 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 ( indexOf.call( qualifier, elem ) >= 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, + len = this.length, + ret = [], + self = this; + + 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 ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + 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, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + // Inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + 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; + }, + + sibling: function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter(function() { + var i = 0; + for ( ; i < l; 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 ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + 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 ) { + while ( (cur = cur[dir]) && 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 elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.unique( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + 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; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + 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" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + 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; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "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( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + 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(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + 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; + + // Add listeners to Deferred subordinates; treat others as resolved + 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 we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // We once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[0], key ) : emptyGet; +}; + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( owner ) { + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + +function Data() { + // Support: Android<4, + // Old WebKit does not have Object.preventExtensions/freeze method, + // return new empty object instead with no [[set]] accessor + Object.defineProperty( this.cache = {}, 0, { + get: function() { + return {}; + } + }); + + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; +Data.accepts = jQuery.acceptData; + +Data.prototype = { + key: function( owner ) { + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return the key for a frozen object. + if ( !Data.accepts( owner ) ) { + return 0; + } + + var descriptor = {}, + // Check if the owner object already has a cache key + unlock = owner[ this.expando ]; + + // If not, create one + if ( !unlock ) { + unlock = Data.uid++; + + // Secure it in a non-enumerable, non-writable property + try { + descriptor[ this.expando ] = { value: unlock }; + Object.defineProperties( owner, descriptor ); + + // Support: Android<4 + // Fallback to a less secure definition + } catch ( e ) { + descriptor[ this.expando ] = unlock; + jQuery.extend( owner, descriptor ); + } + } + + // Ensure the cache object + if ( !this.cache[ unlock ] ) { + this.cache[ unlock ] = {}; + } + + return unlock; + }, + set: function( owner, data, value ) { + var prop, + // There may be an unlock assigned to this node, + // if there is no entry for this "owner", create one inline + // and set the unlock as though an owner entry had always existed + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + // Fresh assignments by object are shallow copied + if ( jQuery.isEmptyObject( cache ) ) { + jQuery.extend( this.cache[ unlock ], data ); + // Otherwise, copy the properties one-by-one to the cache object + } else { + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + } + return cache; + }, + get: function( owner, key ) { + // Either a valid cache is found, or will be created. + // New caches will be created and the unlock returned, + // allowing direct access to the newly created + // empty data object. A valid owner object must be provided. + var cache = this.cache[ this.key( owner ) ]; + + return key === undefined ? + cache : cache[ key ]; + }, + access: function( owner, key, value ) { + var stored; + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ((key && typeof key === "string") && value === undefined) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase(key) ); + } + + // [*]When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + unlock = this.key( owner ), + cache = this.cache[ unlock ]; + + if ( key === undefined ) { + this.cache[ unlock ] = {}; + + } else { + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + }, + hasData: function( owner ) { + return !jQuery.isEmptyObject( + this.cache[ owner[ this.expando ] ] || {} + ); + }, + discard: function( owner ) { + if ( owner[ this.expando ] ) { + delete this.cache[ owner[ this.expando ] ]; + } + } +}; +var data_priv = new Data(); + +var data_user = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + 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 : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + data_user.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend({ + hasData: function( elem ) { + return data_user.hasData( elem ) || data_priv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return data_user.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + data_user.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to data_priv methods, these can be deprecated. + _data: function( elem, name, data ) { + return data_priv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + data_priv.remove( elem, name ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = data_user.get( elem ); + + if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + data_priv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + data_user.set( this, key ); + }); + } + + return access( this, function( value ) { + var data, + camelKey = jQuery.camelCase( key ); + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + // Attempt to get data from the cache + // with the key as-is + data = data_user.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to get data from the cache + // with the key camelized + data = data_user.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each(function() { + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = data_user.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + data_user.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf("-") !== -1 && data !== undefined ) { + data_user.set( this, key, value ); + } + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + data_user.remove( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = data_priv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = data_priv.access( 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 the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return data_priv.get( elem, key ) || data_priv.access( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + data_priv.remove( elem, [ type + "queue", 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 ); + + // Ensure a hooks for this queue + 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", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + 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 = data_priv.get( 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 ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +})(); +var strundefined = typeof undefined; + + + +support.focusinBubbles = "onfocusin" in window; + + +var + 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 ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + 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 ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = data_priv.hasData( elem ) && data_priv.get( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + 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("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + 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 ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + data_priv.remove( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + 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; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + 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 nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + 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(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + 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; + + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + 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 }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + 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 ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + 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 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + 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 ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + 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 = function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } +}; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && e.preventDefault ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && e.stopPropagation ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// Support: Chrome 15+ +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; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// Support: Firefox, Chrome, Safari +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + 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 = data_priv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = data_priv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + data_priv.remove( doc, fix ); + + } else { + data_priv.access( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + 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 ) { + // ( event ) dispatched jQuery.Event + 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" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + 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 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + + // Support: IE9 + 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, "", "" ] + }; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: 1.x compatibility +// Manipulating tables requires a tbody +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; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (elem.getAttribute("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; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + data_priv.set( + elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) + ); + } +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( data_priv.hasData( src ) ) { + pdataOld = data_priv.access( src ); + pdataCur = data_priv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( data_user.hasData( src ) ) { + udataOld = data_user.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + data_user.set( dest, udataCur ); + } +} + +function getAll( context, tag ) { + var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : + context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: QtWebKit, PhantomJS + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + }, + + cleanData: function( elems ) { + var data, elem, type, key, + special = jQuery.event.special, + i = 0; + + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { + if ( jQuery.acceptData( elem ) ) { + key = elem[ data_priv.expando ]; + + if ( key && (data = data_priv.cache[ key ]) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + if ( data_priv.cache[ key ] ) { + // Discard any remaining `private` data + delete data_priv.cache[ key ]; + } + } + } + // Discard any remaining `user` data + delete data_user.cache[ elem[ data_user.expando ] ]; + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each(function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = 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 /* Internal Use Only */ ) { + 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 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + 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 && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + 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; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + // Support: QtWebKit + // jQuery.merge because push.apply(_, arraylike) throws + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optimization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = iframe[ 0 ].contentDocument; + + // Support: IE + doc.write(); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; +} +var rmargin = (/^margin/); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + // Support: IE<=11+, Firefox<=30+ (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + if ( elem.ownerDocument.defaultView.opener ) { + return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); + } + + return window.getComputedStyle( elem, null ); + }; + + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE9 + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + } + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // Support: iOS < 6 + // A tribute to the "awesome hack by Dean Edwards" + // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + // Support: IE + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return (this.get = hookFn).apply( this, arguments ); + } + }; +} + + +(function() { + var pixelPositionVal, boxSizingReliableVal, + docElem = document.documentElement, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + if ( !div.style ) { + return; + } + + // Support: IE9-11+ + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + + "position:absolute"; + container.appendChild( div ); + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computePixelPositionAndBoxSizingReliable() { + div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-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"; + div.innerHTML = ""; + docElem.appendChild( container ); + + var divStyle = window.getComputedStyle( div, null ); + pixelPositionVal = divStyle.top !== "1%"; + boxSizingReliableVal = divStyle.width === "4px"; + + docElem.removeChild( container ); + } + + // Support: node.js jsdom + // Don't assume that getComputedStyle is a property of the global object + if ( window.getComputedStyle ) { + jQuery.extend( support, { + pixelPosition: function() { + + // This test is executed only once but we still do memoizing + // since we can use the boxSizingReliable pre-computing. + // No need to check if the test was already performed, though. + computePixelPositionAndBoxSizingReliable(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + if ( boxSizingReliableVal == null ) { + computePixelPositionAndBoxSizingReliable(); + } + return boxSizingReliableVal; + }, + reliableMarginRight: function() { + + // Support: Android 2.3 + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // This support function is only executed once so no memoizing is needed. + var ret, + marginDiv = div.appendChild( document.createElement( "div" ) ); + + // Reset CSS: box-sizing; display; margin; border; padding + marginDiv.style.cssText = div.style.cssText = + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + docElem.appendChild( container ); + + ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); + + docElem.removeChild( container ); + div.removeChild( marginDiv ); + + return ret; + } + }); + } +})(); + + +// A method for quickly swapping in/out CSS properties to get correct calculations. +jQuery.swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var + // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + 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" ]; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[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 setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +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 ] = data_priv.get( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); + } + } else { + hidden = isHidden( elem ); + + if ( display !== "none" || !hidden ) { + data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + 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; +} + +jQuery.extend({ + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + 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 + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Support: IE9-11+ + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + style[ name ] = value; + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + 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 ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + 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, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; +}); + +// Support: Android 2.3 +jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, + function( elem, computed ) { + if ( computed ) { + return jQuery.swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + 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 ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + 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; + } + } + } +}; + +// Support: IE9 +// Panic based approach to setting things on disconnected nodes +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 0.5 - Math.cos( p * Math.PI ) / 2; + } +}; + +jQuery.fx = Tween.prototype.init; + +// Back Compat <1.8 extension point +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" ), + + // Starting value computation is required for potential unit mismatches + start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && + rfxnum.exec( jQuery.css( tween.elem, prop ) ), + scale = 1, + maxIterations = 20; + + if ( start && start[ 3 ] !== unit ) { + // Trust units reported by jQuery.css + unit = unit || start[ 3 ]; + + // Make sure we update the tween properties later on + parts = parts || []; + + // Iteratively approximate from a nonzero starting point + start = +target || 1; + + do { + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur(), + // break the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + // Update tween properties + if ( parts ) { + start = tween.start = +start || +target || 0; + tween.unit = unit; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[ 1 ] ? + start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : + +parts[ 2 ]; + } + + return tween; + } ] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + 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 )) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + /* jshint validthis: true */ + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHidden( elem ), + dataShow = data_priv.get( elem, "fxshow" ); + + // Handle queue: false promises + 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() { + // Ensure the complete handler is called before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // Height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE9-10 do not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + display = jQuery.css( elem, "display" ); + + // Test default display if display is currently "none" + checkDisplay = display === "none" ? + data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; + + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { + style.display = "inline-block"; + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + + // show/hide pass + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.exec( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + + // Any non-fx value stops us from restoring the original display value + } else { + display = undefined; + } + } + + if ( !jQuery.isEmptyObject( orig ) ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = data_priv.access( elem, "fxshow", {} ); + } + + // Store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + + data_priv.remove( 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; + } + } + } + + // If this is a noop like .hide().hide(), restore an overwritten display value + } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { + style.display = display; + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + 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 ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "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() { + // Don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // Support: Android 2.3 + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + 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, + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + 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 + }) + ); + + // attach callbacks from options + 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; + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + 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 ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // Animate to the value specified + .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() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || data_priv.get( 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 = data_priv.get( 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 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each(function() { + var index, + data = data_priv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + 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 ); + }; +}); + +// Generate shortcuts for custom animations +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, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + 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 speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// http://blindsignals.com/index.php/2009/07/jquery-delay/ +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 = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: iOS<=5.1, Android<=4.2+ + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE<=11+ + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: Android<=2.3 + // Options inside disabled selects are incorrectly marked as disabled + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<=11+ + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +})(); + + +var nodeHook, boolHook, + attrHandle = jQuery.expr.attrHandle; + +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; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + 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 ); + + // Non-existent attributes return null, we normalize to undefined + 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; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + elem[ propName ] = false; + } + + elem.removeAttribute( name ); + } + } + }, + + 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; + } + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle; + if ( !isXML ) { + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ name ]; + attrHandle[ name ] = ret; + ret = getter( elem, name, isXML ) != null ? + name.toLowerCase() : + null; + attrHandle[ name ] = handle; + } + return ret; + }; +}); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i; + +jQuery.fn.extend({ + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each(function() { + delete this[ jQuery.propFix[ name ] || name ]; + }); + } +}); + +jQuery.extend({ + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + 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 ) { + return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? + elem.tabIndex : + -1; + } + } + } +}); + +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + if ( parent && 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; +}); + + + + +var rclass = /[\t\r\n\f]/g; + +jQuery.fn.extend({ + addClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = typeof value === "string" && value, + i = 0, + len = this.length; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + 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 + " "; + } + } + + // only assign if different to avoid unneeded rendering. + finalValue = jQuery.trim( cur ); + if ( elem.className !== finalValue ) { + elem.className = finalValue; + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, finalValue, + proceed = arguments.length === 0 || typeof value === "string" && value, + i = 0, + len = this.length; + + 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 ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + 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" ) { + // Toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + data_priv.set( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : data_priv.get( 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; + } +}); + + + + +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" ? + // Handle most common string cases + ret.replace(rreturn, "") : + // Handle cases where value is null/undef or number + 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; + } + + // Treat null/undefined as ""; convert numbers to string + 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 set returns undefined, fall back to normal setting + 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 : + // Support: IE10-11+ + // option.text throws exceptions (#14686, #14858) + 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; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // IE6-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + 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 ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { + optionSet = true; + } + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +}); + +// Radios and checkboxes getter/setter +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; + }; + } +}); + + + + +// Return jQuery for attributes-only inclusion + + +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 ) { + + // Handle event binding + 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 ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + } +}); + + +var nonce = jQuery.now(); + +var rquery = (/\?/); + + + +// Support: Android 2.3 +// Workaround failure to string-cast null input +jQuery.parseJSON = function( data ) { + return JSON.parse( data + "" ); +}; + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE9 + try { + tmp = new DOMParser(); + xml = tmp.parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Document location + ajaxLocation = window.location.href, + + // Segment location into parts + ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + while ( (dataType = dataTypes[i++]) ) { + // Prepend if requested + if ( dataType[0] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + + // Otherwise append + } else { + (structure[ dataType ] = structure[ dataType ] || []).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +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( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + 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; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + 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({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + 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", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + 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" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + // URL without anti-cache param + cacheURL, + // Response headers + responseHeadersString, + responseHeaders, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + 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; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) + .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; + + // A cross-domain request is in order when we have a protocol:host:port mismatch + 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" ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger("ajaxStart"); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + 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 ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + 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[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + 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 no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + 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 ) { + // Shift arguments if data argument was omitted + 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 ) { + var wrap; + + if ( jQuery.isFunction( html ) ) { + return this.each(function( i ) { + jQuery( this ).wrapAll( html.call(this, i) ); + }); + } + + if ( this[ 0 ] ) { + + // The elements to wrap the target around + 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.firstElementChild ) { + elem = elem.firstElementChild; + } + + 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 ) { + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; +}; +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 ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // Item is non-scalar (array or object), encode its numeric index. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function() { + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + }) + .filter(function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + 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 = function() { + try { + return new XMLHttpRequest(); + } catch( e ) {} +}; + +var xhrId = 0, + xhrCallbacks = {}, + xhrSuccessStatus = { + // file protocol always yields status code 0, assume 200 + 0: 200, + // Support: IE9 + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +// Support: IE9 +// Open requests must be manually aborted on unload (#5280) +// See https://support.microsoft.com/kb/2856746 for more info +if ( window.attachEvent ) { + window.attachEvent( "onunload", function() { + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ](); + } + }); +} + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport(function( options ) { + var callback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(), + id = ++xhrId; + + xhr.open( options.type, options.url, options.async, options.username, options.password ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers["X-Requested-With"] ) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + delete xhrCallbacks[ id ]; + callback = xhr.onload = xhr.onerror = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + complete( + // file: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + // Support: IE9 + // Accessing binary-data responseText throws an exception + // (#11426) + typeof xhr.responseText === "string" ? { + text: xhr.responseText + } : undefined, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + xhr.onerror = callback("error"); + + // Create the abort callback + callback = xhrCallbacks[ id ] = callback("abort"); + + try { + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +// Install script dataType +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; + } + } +}); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery("<script>").prop({ + async: true, + charset: s.scriptCharset, + src: s.url + }).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +}); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +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" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); + + + + +// data: string of html +// context (optional): If specified, the fragment will be created in this context, defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +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 && []; + + // Single tag + 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 ); +}; + + +// Keep a copy of the old load method +var _load = jQuery.fn.load; + +/** + * Load a url into a page + */ +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 >= 0 ) { + selector = jQuery.trim( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + }).complete( callback && function( jqXHR, status ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + } + + return this; +}; + + + + +// Attach a bunch of functions for handling common AJAX events +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; + +/** + * Gets a window from an element + */ +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; +} + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + 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" ) && + ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + 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, + elem = this[ 0 ], + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // Support: BlackBerry 5, iOS 3 (original iPhone) + // If we don't have gBCR, just use 0,0 rather than error + if ( typeof elem.getBoundingClientRect !== strundefined ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + }, + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // Assume getBoundingClientRect is there when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + 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; + }); + } +}); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : window.pageXOffset, + top ? val : window.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +// Support: Safari<7+, Chrome<37+ +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +}); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // Margin is only for outerHeight, outerWidth + 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 ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); + + +// The number of elements contained in the matched element set +jQuery.fn.size = function() { + return this.length; +}; + +jQuery.fn.andSelf = jQuery.fn.addBack; + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + }); +} + + + + +var + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( typeof noGlobal === strundefined ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; + +})); diff --git a/web/templates/media/js/jquery.js b/www/web/static/admin/js/vendor/jquery/jquery.min.js similarity index 100% rename from web/templates/media/js/jquery.js rename to www/web/static/admin/js/vendor/jquery/jquery.min.js diff --git a/www/web/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt b/www/web/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt new file mode 100644 index 0000000..341652a --- /dev/null +++ b/www/web/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2007-2012 Steven Levithan <http://xregexp.com/> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/www/web/static/admin/js/vendor/xregexp/xregexp.min.js b/www/web/static/admin/js/vendor/xregexp/xregexp.min.js new file mode 100644 index 0000000..a190558 --- /dev/null +++ b/www/web/static/admin/js/vendor/xregexp/xregexp.min.js @@ -0,0 +1,18 @@ +//XRegExp 2.0.0 <xregexp.com> MIT License +var XRegExp;XRegExp=XRegExp||function(n){"use strict";function v(n,i,r){var u;for(u in t.prototype)t.prototype.hasOwnProperty(u)&&(n[u]=t.prototype[u]);return n.xregexp={captureNames:i,isNative:!!r},n}function g(n){return(n.global?"g":"")+(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.extended?"x":"")+(n.sticky?"y":"")}function o(n,r,u){if(!t.isRegExp(n))throw new TypeError("type RegExp expected");var f=i.replace.call(g(n)+(r||""),h,"");return u&&(f=i.replace.call(f,new RegExp("["+u+"]+","g"),"")),n=n.xregexp&&!n.xregexp.isNative?v(t(n.source,f),n.xregexp.captureNames?n.xregexp.captureNames.slice(0):null):v(new RegExp(n.source,f),null,!0)}function a(n,t){var i=n.length;if(Array.prototype.lastIndexOf)return n.lastIndexOf(t);while(i--)if(n[i]===t)return i;return-1}function s(n,t){return Object.prototype.toString.call(n).toLowerCase()==="[object "+t+"]"}function d(n){return n=n||{},n==="all"||n.all?n={natives:!0,extensibility:!0}:s(n,"string")&&(n=t.forEach(n,/[^\s,]+/,function(n){this[n]=!0},{})),n}function ut(n,t,i,u){var o=p.length,s=null,e,f;y=!0;try{while(o--)if(f=p[o],(f.scope==="all"||f.scope===i)&&(!f.trigger||f.trigger.call(u))&&(f.pattern.lastIndex=t,e=r.exec.call(f.pattern,n),e&&e.index===t)){s={output:f.handler.call(u,e,i),match:e};break}}catch(h){throw h;}finally{y=!1}return s}function b(n){t.addToken=c[n?"on":"off"],f.extensibility=n}function tt(n){RegExp.prototype.exec=(n?r:i).exec,RegExp.prototype.test=(n?r:i).test,String.prototype.match=(n?r:i).match,String.prototype.replace=(n?r:i).replace,String.prototype.split=(n?r:i).split,f.natives=n}var t,c,u,f={natives:!1,extensibility:!1},i={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},k={},p=[],e="default",rt="class",it={"default":/^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/,"class":/^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/},et=/\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g,h=/([\s\S])(?=[\s\S]*\1)/g,nt=/^(?:[?*+]|{\d+(?:,\d*)?})\??/,ft=i.exec.call(/()??/,"")[1]===n,l=RegExp.prototype.sticky!==n,y=!1,w="gim"+(l?"y":"");return t=function(r,u){if(t.isRegExp(r)){if(u!==n)throw new TypeError("can't supply flags when constructing one RegExp from another");return o(r)}if(y)throw new Error("can't call the XRegExp constructor within token definition functions");var l=[],a=e,b={hasNamedCapture:!1,captureNames:[],hasFlag:function(n){return u.indexOf(n)>-1}},f=0,c,s,p;if(r=r===n?"":String(r),u=u===n?"":String(u),i.match.call(u,h))throw new SyntaxError("invalid duplicate regular expression flag");for(r=i.replace.call(r,/^\(\?([\w$]+)\)/,function(n,t){if(i.test.call(/[gy]/,t))throw new SyntaxError("can't use flag g or y in mode modifier");return u=i.replace.call(u+t,h,""),""}),t.forEach(u,/[\s\S]/,function(n){if(w.indexOf(n[0])<0)throw new SyntaxError("invalid regular expression flag "+n[0]);});f<r.length;)c=ut(r,f,a,b),c?(l.push(c.output),f+=c.match[0].length||1):(s=i.exec.call(it[a],r.slice(f)),s?(l.push(s[0]),f+=s[0].length):(p=r.charAt(f),p==="["?a=rt:p==="]"&&(a=e),l.push(p),++f));return v(new RegExp(l.join(""),i.replace.call(u,/[^gimy]+/g,"")),b.hasNamedCapture?b.captureNames:null)},c={on:function(n,t,r){r=r||{},n&&p.push({pattern:o(n,"g"+(l?"y":"")),handler:t,scope:r.scope||e,trigger:r.trigger||null}),r.customFlags&&(w=i.replace.call(w+r.customFlags,h,""))},off:function(){throw new Error("extensibility must be installed before using addToken");}},t.addToken=c.off,t.cache=function(n,i){var r=n+"/"+(i||"");return k[r]||(k[r]=t(n,i))},t.escape=function(n){return i.replace.call(n,/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},t.exec=function(n,t,i,u){var e=o(t,"g"+(u&&l?"y":""),u===!1?"y":""),f;return e.lastIndex=i=i||0,f=r.exec.call(e,n),u&&f&&f.index!==i&&(f=null),t.global&&(t.lastIndex=f?e.lastIndex:0),f},t.forEach=function(n,i,r,u){for(var e=0,o=-1,f;f=t.exec(n,i,e);)r.call(u,f,++o,n,i),e=f.index+(f[0].length||1);return u},t.globalize=function(n){return o(n,"g")},t.install=function(n){n=d(n),!f.natives&&n.natives&&tt(!0),!f.extensibility&&n.extensibility&&b(!0)},t.isInstalled=function(n){return!!f[n]},t.isRegExp=function(n){return s(n,"regexp")},t.matchChain=function(n,i){return function r(n,u){for(var o=i[u].regex?i[u]:{regex:i[u]},f=[],s=function(n){f.push(o.backref?n[o.backref]||"":n[0])},e=0;e<n.length;++e)t.forEach(n[e],o.regex,s);return u===i.length-1||!f.length?f:r(f,u+1)}([n],0)},t.replace=function(i,u,f,e){var c=t.isRegExp(u),s=u,h;return c?(e===n&&u.global&&(e="all"),s=o(u,e==="all"?"g":"",e==="all"?"":"g")):e==="all"&&(s=new RegExp(t.escape(String(u)),"g")),h=r.replace.call(String(i),s,f),c&&u.global&&(u.lastIndex=0),h},t.split=function(n,t,i){return r.split.call(n,t,i)},t.test=function(n,i,r,u){return!!t.exec(n,i,r,u)},t.uninstall=function(n){n=d(n),f.natives&&n.natives&&tt(!1),f.extensibility&&n.extensibility&&b(!1)},t.union=function(n,i){var l=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,o=0,f,h,c=function(n,t,i){var r=h[o-f];if(t){if(++o,r)return"(?<"+r+">"}else if(i)return"\\"+(+i+f);return n},e=[],r,u;if(!(s(n,"array")&&n.length))throw new TypeError("patterns must be a nonempty array");for(u=0;u<n.length;++u)r=n[u],t.isRegExp(r)?(f=o,h=r.xregexp&&r.xregexp.captureNames||[],e.push(t(r.source).source.replace(l,c))):e.push(t.escape(r));return t(e.join("|"),i)},t.version="2.0.0",r.exec=function(t){var r,f,e,o,u;if(this.global||(o=this.lastIndex),r=i.exec.apply(this,arguments),r){if(!ft&&r.length>1&&a(r,"")>-1&&(e=new RegExp(this.source,i.replace.call(g(this),"g","")),i.replace.call(String(t).slice(r.index),e,function(){for(var t=1;t<arguments.length-2;++t)arguments[t]===n&&(r[t]=n)})),this.xregexp&&this.xregexp.captureNames)for(u=1;u<r.length;++u)f=this.xregexp.captureNames[u-1],f&&(r[f]=r[u]);this.global&&!r[0].length&&this.lastIndex>r.index&&(this.lastIndex=r.index)}return this.global||(this.lastIndex=o),r},r.test=function(n){return!!r.exec.call(this,n)},r.match=function(n){if(t.isRegExp(n)){if(n.global){var u=i.match.apply(this,arguments);return n.lastIndex=0,u}}else n=new RegExp(n);return r.exec.call(n,this)},r.replace=function(n,r){var e=t.isRegExp(n),u,f,h,o;return e?(n.xregexp&&(u=n.xregexp.captureNames),n.global||(o=n.lastIndex)):n+="",s(r,"function")?f=i.replace.call(String(this),n,function(){var t=arguments,i;if(u)for(t[0]=new String(t[0]),i=0;i<u.length;++i)u[i]&&(t[0][u[i]]=t[i+1]);return e&&n.global&&(n.lastIndex=t[t.length-2]+t[0].length),r.apply(null,t)}):(h=String(this),f=i.replace.call(h,n,function(){var n=arguments;return i.replace.call(String(r),et,function(t,i,r){var f;if(i){if(f=+i,f<=n.length-3)return n[f]||"";if(f=u?a(u,i):-1,f<0)throw new SyntaxError("backreference to undefined group "+t);return n[f+1]||""}if(r==="$")return"$";if(r==="&"||+r==0)return n[0];if(r==="`")return n[n.length-1].slice(0,n[n.length-2]);if(r==="'")return n[n.length-1].slice(n[n.length-2]+n[0].length);if(r=+r,!isNaN(r)){if(r>n.length-3)throw new SyntaxError("backreference to undefined group "+t);return n[r]||""}throw new SyntaxError("invalid token "+t);})})),e&&(n.lastIndex=n.global?0:o),f},r.split=function(r,u){if(!t.isRegExp(r))return i.split.apply(this,arguments);var e=String(this),h=r.lastIndex,f=[],o=0,s;return u=(u===n?-1:u)>>>0,t.forEach(e,r,function(n){n.index+n[0].length>o&&(f.push(e.slice(o,n.index)),n.length>1&&n.index<e.length&&Array.prototype.push.apply(f,n.slice(1)),s=n[0].length,o=n.index+s)}),o===e.length?(!i.test.call(r,"")||s)&&f.push(""):f.push(e.slice(o)),r.lastIndex=h,f.length>u?f.slice(0,u):f},u=c.on,u(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4})|x(?![\dA-Fa-f]{2}))/,function(n,t){if(n[1]==="B"&&t===e)return n[0];throw new SyntaxError("invalid escape "+n[0]);},{scope:"all"}),u(/\[(\^?)]/,function(n){return n[1]?"[\\s\\S]":"\\b\\B"}),u(/(?:\(\?#[^)]*\))+/,function(n){return i.test.call(nt,n.input.slice(n.index+n[0].length))?"":"(?:)"}),u(/\\k<([\w$]+)>/,function(n){var t=isNaN(n[1])?a(this.captureNames,n[1])+1:+n[1],i=n.index+n[0].length;if(!t||t>this.captureNames.length)throw new SyntaxError("backreference to undefined group "+n[0]);return"\\"+t+(i===n.input.length||isNaN(n.input.charAt(i))?"":"(?:)")}),u(/(?:\s+|#.*)+/,function(n){return i.test.call(nt,n.input.slice(n.index+n[0].length))?"":"(?:)"},{trigger:function(){return this.hasFlag("x")},customFlags:"x"}),u(/\./,function(){return"[\\s\\S]"},{trigger:function(){return this.hasFlag("s")},customFlags:"s"}),u(/\(\?P?<([\w$]+)>/,function(n){if(!isNaN(n[1]))throw new SyntaxError("can't use integer as capture name "+n[0]);return this.captureNames.push(n[1]),this.hasNamedCapture=!0,"("}),u(/\\(\d+)/,function(n,t){if(!(t===e&&/^[1-9]/.test(n[1])&&+n[1]<=this.captureNames.length)&&n[1]!=="0")throw new SyntaxError("can't use octal escape or backreference to undefined group "+n[0]);return n[0]},{scope:"all"}),u(/\((?!\?)/,function(){return this.hasFlag("n")?"(?:":(this.captureNames.push(null),"(")},{customFlags:"n"}),typeof exports!="undefined"&&(exports.XRegExp=t),t}(); +//XRegExp Unicode Base 1.0.0 +(function(n){"use strict";function i(n){return n.replace(/[- _]+/g,"").toLowerCase()}function s(n){return n.replace(/\w{4}/g,"\\u$&")}function u(n){while(n.length<4)n="0"+n;return n}function f(n){return parseInt(n,16)}function r(n){return parseInt(n,10).toString(16)}function o(t){var e=[],i=-1,o;return n.forEach(t,/\\u(\w{4})(?:-\\u(\w{4}))?/,function(n){o=f(n[1]),o>i+1&&(e.push("\\u"+u(r(i+1))),o>i+2&&e.push("-\\u"+u(r(o-1)))),i=f(n[2]||n[1])}),i<65535&&(e.push("\\u"+u(r(i+1))),i<65534&&e.push("-\\uFFFF")),e.join("")}function e(n){return t["^"+n]||(t["^"+n]=o(t[n]))}var t={};n.install("extensibility"),n.addUnicodePackage=function(r,u){var f;if(!n.isInstalled("extensibility"))throw new Error("extensibility must be installed before adding Unicode packages");if(r)for(f in r)r.hasOwnProperty(f)&&(t[i(f)]=s(r[f]));if(u)for(f in u)u.hasOwnProperty(f)&&(t[i(u[f])]=t[i(f)])},n.addUnicodePackage({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705D0-05EA05F0-05F20620-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280840-085808A008A2-08AC0904-0939093D09500958-09610971-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDAAE0-AAEAAAF2-AAF4AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC"},{L:"Letter"}),n.addToken(/\\([pP]){(\^?)([^}]*)}/,function(n,r){var f=n[1]==="P"||n[2]?"^":"",u=i(n[3]);if(n[1]==="P"&&n[2])throw new SyntaxError("invalid double negation \\P{^");if(!t.hasOwnProperty(u))throw new SyntaxError("invalid or unknown Unicode property "+n[0]);return r==="class"?f?e(u):t[u]:"["+f+t[u]+"]"},{scope:"all"})})(XRegExp); +//XRegExp Unicode Categories 1.2.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Categories");n.install("extensibility"),n.addUnicodePackage({Ll:"0061-007A00B500DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1D2B1D6B-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7B2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7FAFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D6A1D781D9B-1DBF2071207F2090-209C2C7C2C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A7F8A7F9A9CFAA70AADDAAF3AAF4FF70FF9EFF9F",Lo:"00AA00BA01BB01C0-01C3029405D0-05EA05F0-05F20620-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150840-085808A008A2-08AC0904-0939093D09500958-09610972-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA10FD-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF11CF51CF62135-21382D30-2D672D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCAAE0-AAEAAAF2AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0903093A-093C093E-094F0951-0957096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F8D-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135D-135F1712-17141732-1734175217531772177317B4-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAD1BE6-1BF31C24-1C371CD0-1CD21CD4-1CE81CED1CF2-1CF41DC0-1DE61DFC-1DFF20D0-20F02CEF-2CF12D7F2DE0-2DFF302A-302F3099309AA66F-A672A674-A67DA69FA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAEB-AAEFAAF5AAF6ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0902093A093C0941-0948094D0951-095709620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F8D-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135D-135F1712-17141732-1734175217531772177317B417B517B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91BAB1BE61BE81BE91BED1BEF-1BF11C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF20D0-20DC20E120E5-20F02CEF-2CF12D7F2DE0-2DFF302A-302D3099309AA66FA674-A67DA69FA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAECAAEDAAF6ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093B093E-09400949-094C094E094F0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1BAC1BAD1BE71BEA-1BEC1BEE1BF21BF31C24-1C2B1C341C351CE11CF21CF3302E302FA823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BAAEBAAEEAAEFAAF5ABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048920DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0B72-0B770BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19D91A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90B72-0B770BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F919DA20702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100A700AB00B600B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F3A-0F3D0F850FD0-0FD40FD90FDA104A-104F10FB1360-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2D702E00-2E2E2E30-2E3B3001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A2E3A2E3B301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100A700B600B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F850FD0-0FD40FD90FDA104A-104F10FB1360-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2D702E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E30-2E393001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A600A800A900AC00AE-00B100B400B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F60482058F0606-0608060B060E060F06DE06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0D790E3F0F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-139917DB194019DE-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B9210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23F32400-24262440-244A249C-24E92500-26FF2701-27672794-27C427C7-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FBB2-FBC1FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C21182140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5058F060B09F209F309FB0AF10BF90E3F17DB20A0-20B9A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFBB2-FBC1FF3EFF40FFE3",So:"00A600A900AE00B00482060E060F06DE06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0D790F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-1399194019DE-19FF1B61-1B6A1B74-1B7C210021012103-210621082109211421162117211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23F32400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26FF2701-27672794-27BF2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-0605061C061D06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060406DD070F200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-05FF0605061C061D070E074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"},{Ll:"Lowercase_Letter",Lu:"Uppercase_Letter",Lt:"Titlecase_Letter",Lm:"Modifier_Letter",Lo:"Other_Letter",M:"Mark",Mn:"Nonspacing_Mark",Mc:"Spacing_Mark",Me:"Enclosing_Mark",N:"Number",Nd:"Decimal_Number",Nl:"Letter_Number",No:"Other_Number",P:"Punctuation",Pd:"Dash_Punctuation",Ps:"Open_Punctuation",Pe:"Close_Punctuation",Pi:"Initial_Punctuation",Pf:"Final_Punctuation",Pc:"Connector_Punctuation",Po:"Other_Punctuation",S:"Symbol",Sm:"Math_Symbol",Sc:"Currency_Symbol",Sk:"Modifier_Symbol",So:"Other_Symbol",Z:"Separator",Zs:"Space_Separator",Zl:"Line_Separator",Zp:"Paragraph_Separator",C:"Other",Cc:"Control",Cf:"Format",Co:"Private_Use",Cs:"Surrogate",Cn:"Unassigned"})})(XRegExp); +//XRegExp Unicode Scripts 1.2.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");n.install("extensibility"),n.addUnicodePackage({Arabic:"0600-06040606-060B060D-061A061E0620-063F0641-064A0656-065E066A-066F0671-06DC06DE-06FF0750-077F08A008A2-08AC08E4-08FEFB50-FBC1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFCFE70-FE74FE76-FEFC",Armenian:"0531-05560559-055F0561-0587058A058FFB13-FB17",Balinese:"1B00-1B4B1B50-1B7C",Bamum:"A6A0-A6F7",Batak:"1BC0-1BF31BFC-1BFF",Bengali:"0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB",Bopomofo:"02EA02EB3105-312D31A0-31BA",Braille:"2800-28FF",Buginese:"1A00-1A1B1A1E1A1F",Buhid:"1740-1753",Canadian_Aboriginal:"1400-167F18B0-18F5",Cham:"AA00-AA36AA40-AA4DAA50-AA59AA5C-AA5F",Cherokee:"13A0-13F4",Common:"0000-0040005B-0060007B-00A900AB-00B900BB-00BF00D700F702B9-02DF02E5-02E902EC-02FF0374037E038503870589060C061B061F06400660-066906DD096409650E3F0FD5-0FD810FB16EB-16ED173517361802180318051CD31CE11CE9-1CEC1CEE-1CF31CF51CF62000-200B200E-2064206A-20702074-207E2080-208E20A0-20B92100-21252127-2129212C-21312133-214D214F-215F21892190-23F32400-24262440-244A2460-26FF2701-27FF2900-2B4C2B50-2B592E00-2E3B2FF0-2FFB3000-300430063008-30203030-3037303C-303F309B309C30A030FB30FC3190-319F31C0-31E33220-325F327F-32CF3358-33FF4DC0-4DFFA700-A721A788-A78AA830-A839FD3EFD3FFDFDFE10-FE19FE30-FE52FE54-FE66FE68-FE6BFEFFFF01-FF20FF3B-FF40FF5B-FF65FF70FF9EFF9FFFE0-FFE6FFE8-FFEEFFF9-FFFD",Coptic:"03E2-03EF2C80-2CF32CF9-2CFF",Cyrillic:"0400-04840487-05271D2B1D782DE0-2DFFA640-A697A69F",Devanagari:"0900-09500953-09630966-09770979-097FA8E0-A8FB",Ethiopic:"1200-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-13992D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDEAB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2E",Georgian:"10A0-10C510C710CD10D0-10FA10FC-10FF2D00-2D252D272D2D",Glagolitic:"2C00-2C2E2C30-2C5E",Greek:"0370-03730375-0377037A-037D038403860388-038A038C038E-03A103A3-03E103F0-03FF1D26-1D2A1D5D-1D611D66-1D6A1DBF1F00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2126",Gujarati:"0A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF1",Gurmukhi:"0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A75",Han:"2E80-2E992E9B-2EF32F00-2FD5300530073021-30293038-303B3400-4DB54E00-9FCCF900-FA6DFA70-FAD9",Hangul:"1100-11FF302E302F3131-318E3200-321E3260-327EA960-A97CAC00-D7A3D7B0-D7C6D7CB-D7FBFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Hanunoo:"1720-1734",Hebrew:"0591-05C705D0-05EA05F0-05F4FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FB4F",Hiragana:"3041-3096309D-309F",Inherited:"0300-036F04850486064B-0655065F0670095109521CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF200C200D20D0-20F0302A-302D3099309AFE00-FE0FFE20-FE26",Javanese:"A980-A9CDA9CF-A9D9A9DEA9DF",Kannada:"0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF2",Katakana:"30A1-30FA30FD-30FF31F0-31FF32D0-32FE3300-3357FF66-FF6FFF71-FF9D",Kayah_Li:"A900-A92F",Khmer:"1780-17DD17E0-17E917F0-17F919E0-19FF",Lao:"0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF",Latin:"0041-005A0061-007A00AA00BA00C0-00D600D8-00F600F8-02B802E0-02E41D00-1D251D2C-1D5C1D62-1D651D6B-1D771D79-1DBE1E00-1EFF2071207F2090-209C212A212B2132214E2160-21882C60-2C7FA722-A787A78B-A78EA790-A793A7A0-A7AAA7F8-A7FFFB00-FB06FF21-FF3AFF41-FF5A",Lepcha:"1C00-1C371C3B-1C491C4D-1C4F",Limbu:"1900-191C1920-192B1930-193B19401944-194F",Lisu:"A4D0-A4FF",Malayalam:"0D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F",Mandaic:"0840-085B085E",Meetei_Mayek:"AAE0-AAF6ABC0-ABEDABF0-ABF9",Mongolian:"1800180118041806-180E1810-18191820-18771880-18AA",Myanmar:"1000-109FAA60-AA7B",New_Tai_Lue:"1980-19AB19B0-19C919D0-19DA19DE19DF",Nko:"07C0-07FA",Ogham:"1680-169C",Ol_Chiki:"1C50-1C7F",Oriya:"0B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B77",Phags_Pa:"A840-A877",Rejang:"A930-A953A95F",Runic:"16A0-16EA16EE-16F0",Samaritan:"0800-082D0830-083E",Saurashtra:"A880-A8C4A8CE-A8D9",Sinhala:"0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF4",Sundanese:"1B80-1BBF1CC0-1CC7",Syloti_Nagri:"A800-A82B",Syriac:"0700-070D070F-074A074D-074F",Tagalog:"1700-170C170E-1714",Tagbanwa:"1760-176C176E-177017721773",Tai_Le:"1950-196D1970-1974",Tai_Tham:"1A20-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD",Tai_Viet:"AA80-AAC2AADB-AADF",Tamil:"0B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA",Telugu:"0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F",Thaana:"0780-07B1",Thai:"0E01-0E3A0E40-0E5B",Tibetan:"0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FD40FD90FDA",Tifinagh:"2D30-2D672D6F2D702D7F",Vai:"A500-A62B",Yi:"A000-A48CA490-A4C6"})})(XRegExp); +//XRegExp Unicode Blocks 1.2.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Blocks");n.install("extensibility"),n.addUnicodePackage({InBasic_Latin:"0000-007F",InLatin_1_Supplement:"0080-00FF",InLatin_Extended_A:"0100-017F",InLatin_Extended_B:"0180-024F",InIPA_Extensions:"0250-02AF",InSpacing_Modifier_Letters:"02B0-02FF",InCombining_Diacritical_Marks:"0300-036F",InGreek_and_Coptic:"0370-03FF",InCyrillic:"0400-04FF",InCyrillic_Supplement:"0500-052F",InArmenian:"0530-058F",InHebrew:"0590-05FF",InArabic:"0600-06FF",InSyriac:"0700-074F",InArabic_Supplement:"0750-077F",InThaana:"0780-07BF",InNKo:"07C0-07FF",InSamaritan:"0800-083F",InMandaic:"0840-085F",InArabic_Extended_A:"08A0-08FF",InDevanagari:"0900-097F",InBengali:"0980-09FF",InGurmukhi:"0A00-0A7F",InGujarati:"0A80-0AFF",InOriya:"0B00-0B7F",InTamil:"0B80-0BFF",InTelugu:"0C00-0C7F",InKannada:"0C80-0CFF",InMalayalam:"0D00-0D7F",InSinhala:"0D80-0DFF",InThai:"0E00-0E7F",InLao:"0E80-0EFF",InTibetan:"0F00-0FFF",InMyanmar:"1000-109F",InGeorgian:"10A0-10FF",InHangul_Jamo:"1100-11FF",InEthiopic:"1200-137F",InEthiopic_Supplement:"1380-139F",InCherokee:"13A0-13FF",InUnified_Canadian_Aboriginal_Syllabics:"1400-167F",InOgham:"1680-169F",InRunic:"16A0-16FF",InTagalog:"1700-171F",InHanunoo:"1720-173F",InBuhid:"1740-175F",InTagbanwa:"1760-177F",InKhmer:"1780-17FF",InMongolian:"1800-18AF",InUnified_Canadian_Aboriginal_Syllabics_Extended:"18B0-18FF",InLimbu:"1900-194F",InTai_Le:"1950-197F",InNew_Tai_Lue:"1980-19DF",InKhmer_Symbols:"19E0-19FF",InBuginese:"1A00-1A1F",InTai_Tham:"1A20-1AAF",InBalinese:"1B00-1B7F",InSundanese:"1B80-1BBF",InBatak:"1BC0-1BFF",InLepcha:"1C00-1C4F",InOl_Chiki:"1C50-1C7F",InSundanese_Supplement:"1CC0-1CCF",InVedic_Extensions:"1CD0-1CFF",InPhonetic_Extensions:"1D00-1D7F",InPhonetic_Extensions_Supplement:"1D80-1DBF",InCombining_Diacritical_Marks_Supplement:"1DC0-1DFF",InLatin_Extended_Additional:"1E00-1EFF",InGreek_Extended:"1F00-1FFF",InGeneral_Punctuation:"2000-206F",InSuperscripts_and_Subscripts:"2070-209F",InCurrency_Symbols:"20A0-20CF",InCombining_Diacritical_Marks_for_Symbols:"20D0-20FF",InLetterlike_Symbols:"2100-214F",InNumber_Forms:"2150-218F",InArrows:"2190-21FF",InMathematical_Operators:"2200-22FF",InMiscellaneous_Technical:"2300-23FF",InControl_Pictures:"2400-243F",InOptical_Character_Recognition:"2440-245F",InEnclosed_Alphanumerics:"2460-24FF",InBox_Drawing:"2500-257F",InBlock_Elements:"2580-259F",InGeometric_Shapes:"25A0-25FF",InMiscellaneous_Symbols:"2600-26FF",InDingbats:"2700-27BF",InMiscellaneous_Mathematical_Symbols_A:"27C0-27EF",InSupplemental_Arrows_A:"27F0-27FF",InBraille_Patterns:"2800-28FF",InSupplemental_Arrows_B:"2900-297F",InMiscellaneous_Mathematical_Symbols_B:"2980-29FF",InSupplemental_Mathematical_Operators:"2A00-2AFF",InMiscellaneous_Symbols_and_Arrows:"2B00-2BFF",InGlagolitic:"2C00-2C5F",InLatin_Extended_C:"2C60-2C7F",InCoptic:"2C80-2CFF",InGeorgian_Supplement:"2D00-2D2F",InTifinagh:"2D30-2D7F",InEthiopic_Extended:"2D80-2DDF",InCyrillic_Extended_A:"2DE0-2DFF",InSupplemental_Punctuation:"2E00-2E7F",InCJK_Radicals_Supplement:"2E80-2EFF",InKangxi_Radicals:"2F00-2FDF",InIdeographic_Description_Characters:"2FF0-2FFF",InCJK_Symbols_and_Punctuation:"3000-303F",InHiragana:"3040-309F",InKatakana:"30A0-30FF",InBopomofo:"3100-312F",InHangul_Compatibility_Jamo:"3130-318F",InKanbun:"3190-319F",InBopomofo_Extended:"31A0-31BF",InCJK_Strokes:"31C0-31EF",InKatakana_Phonetic_Extensions:"31F0-31FF",InEnclosed_CJK_Letters_and_Months:"3200-32FF",InCJK_Compatibility:"3300-33FF",InCJK_Unified_Ideographs_Extension_A:"3400-4DBF",InYijing_Hexagram_Symbols:"4DC0-4DFF",InCJK_Unified_Ideographs:"4E00-9FFF",InYi_Syllables:"A000-A48F",InYi_Radicals:"A490-A4CF",InLisu:"A4D0-A4FF",InVai:"A500-A63F",InCyrillic_Extended_B:"A640-A69F",InBamum:"A6A0-A6FF",InModifier_Tone_Letters:"A700-A71F",InLatin_Extended_D:"A720-A7FF",InSyloti_Nagri:"A800-A82F",InCommon_Indic_Number_Forms:"A830-A83F",InPhags_pa:"A840-A87F",InSaurashtra:"A880-A8DF",InDevanagari_Extended:"A8E0-A8FF",InKayah_Li:"A900-A92F",InRejang:"A930-A95F",InHangul_Jamo_Extended_A:"A960-A97F",InJavanese:"A980-A9DF",InCham:"AA00-AA5F",InMyanmar_Extended_A:"AA60-AA7F",InTai_Viet:"AA80-AADF",InMeetei_Mayek_Extensions:"AAE0-AAFF",InEthiopic_Extended_A:"AB00-AB2F",InMeetei_Mayek:"ABC0-ABFF",InHangul_Syllables:"AC00-D7AF",InHangul_Jamo_Extended_B:"D7B0-D7FF",InHigh_Surrogates:"D800-DB7F",InHigh_Private_Use_Surrogates:"DB80-DBFF",InLow_Surrogates:"DC00-DFFF",InPrivate_Use_Area:"E000-F8FF",InCJK_Compatibility_Ideographs:"F900-FAFF",InAlphabetic_Presentation_Forms:"FB00-FB4F",InArabic_Presentation_Forms_A:"FB50-FDFF",InVariation_Selectors:"FE00-FE0F",InVertical_Forms:"FE10-FE1F",InCombining_Half_Marks:"FE20-FE2F",InCJK_Compatibility_Forms:"FE30-FE4F",InSmall_Form_Variants:"FE50-FE6F",InArabic_Presentation_Forms_B:"FE70-FEFF",InHalfwidth_and_Fullwidth_Forms:"FF00-FFEF",InSpecials:"FFF0-FFFF"})})(XRegExp); +//XRegExp Unicode Properties 1.0.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");n.install("extensibility"),n.addUnicodePackage({Alphabetic:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE03450370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705B0-05BD05BF05C105C205C405C505C705D0-05EA05F0-05F20610-061A0620-06570659-065F066E-06D306D5-06DC06E1-06E806ED-06EF06FA-06FC06FF0710-073F074D-07B107CA-07EA07F407F507FA0800-0817081A-082C0840-085808A008A2-08AC08E4-08E908F0-08FE0900-093B093D-094C094E-09500955-09630971-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BD-09C409C709C809CB09CC09CE09D709DC09DD09DF-09E309F009F10A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3E-0A420A470A480A4B0A4C0A510A59-0A5C0A5E0A70-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD-0AC50AC7-0AC90ACB0ACC0AD00AE0-0AE30B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D-0B440B470B480B4B0B4C0B560B570B5C0B5D0B5F-0B630B710B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCC0BD00BD70C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4C0C550C560C580C590C60-0C630C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD-0CC40CC6-0CC80CCA-0CCC0CD50CD60CDE0CE0-0CE30CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4C0D4E0D570D60-0D630D7A-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCF-0DD40DD60DD8-0DDF0DF20DF30E01-0E3A0E40-0E460E4D0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60ECD0EDC-0EDF0F000F40-0F470F49-0F6C0F71-0F810F88-0F970F99-0FBC1000-10361038103B-103F1050-10621065-1068106E-1086108E109C109D10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135F1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA16EE-16F01700-170C170E-17131720-17331740-17531760-176C176E-1770177217731780-17B317B6-17C817D717DC1820-18771880-18AA18B0-18F51900-191C1920-192B1930-19381950-196D1970-19741980-19AB19B0-19C91A00-1A1B1A20-1A5E1A61-1A741AA71B00-1B331B35-1B431B45-1B4B1B80-1BA91BAC-1BAF1BBA-1BE51BE7-1BF11C00-1C351C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF31CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E2160-218824B6-24E92C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2DFF2E2F3005-30073021-30293031-30353038-303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA674-A67BA67F-A697A69F-A6EFA717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A827A840-A873A880-A8C3A8F2-A8F7A8FBA90A-A92AA930-A952A960-A97CA980-A9B2A9B4-A9BFA9CFAA00-AA36AA40-AA4DAA60-AA76AA7AAA80-AABEAAC0AAC2AADB-AADDAAE0-AAEFAAF2-AAF5AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEAAC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Uppercase:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F21452160-216F218324B6-24CF2C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A",Lowercase:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02B802C002C102E0-02E40345037103730377037A-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1DBF1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF72071207F2090-209C210A210E210F2113212F21342139213C213D2146-2149214E2170-217F218424D0-24E92C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7D2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76F-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7F8-A7FAFB00-FB06FB13-FB17FF41-FF5A",White_Space:"0009-000D0020008500A01680180E2000-200A20282029202F205F3000",Noncharacter_Code_Point:"FDD0-FDEFFFFEFFFF",Default_Ignorable_Code_Point:"00AD034F115F116017B417B5180B-180D200B-200F202A-202E2060-206F3164FE00-FE0FFEFFFFA0FFF0-FFF8",Any:"0000-FFFF",Ascii:"0000-007F",Assigned:"0000-0377037A-037E0384-038A038C038E-03A103A3-05270531-05560559-055F0561-05870589058A058F0591-05C705D0-05EA05F0-05F40600-06040606-061B061E-070D070F-074A074D-07B107C0-07FA0800-082D0830-083E0840-085B085E08A008A2-08AC08E4-08FE0900-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF10B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B770B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF40E01-0E3A0E3F-0E5B0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FDA1000-10C510C710CD10D0-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-139913A0-13F41400-169C16A0-16F01700-170C170E-17141720-17361740-17531760-176C176E-1770177217731780-17DD17E0-17E917F0-17F91800-180E1810-18191820-18771880-18AA18B0-18F51900-191C1920-192B1930-193B19401944-196D1970-19741980-19AB19B0-19C919D0-19DA19DE-1A1B1A1E-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD1B00-1B4B1B50-1B7C1B80-1BF31BFC-1C371C3B-1C491C4D-1C7F1CC0-1CC71CD0-1CF61D00-1DE61DFC-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2000-2064206A-20712074-208E2090-209C20A0-20B920D0-20F02100-21892190-23F32400-24262440-244A2460-26FF2701-2B4C2B50-2B592C00-2C2E2C30-2C5E2C60-2CF32CF9-2D252D272D2D2D30-2D672D6F2D702D7F-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2E3B2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB3000-303F3041-30963099-30FF3105-312D3131-318E3190-31BA31C0-31E331F0-321E3220-32FE3300-4DB54DC0-9FCCA000-A48CA490-A4C6A4D0-A62BA640-A697A69F-A6F7A700-A78EA790-A793A7A0-A7AAA7F8-A82BA830-A839A840-A877A880-A8C4A8CE-A8D9A8E0-A8FBA900-A953A95F-A97CA980-A9CDA9CF-A9D9A9DEA9DFAA00-AA36AA40-AA4DAA50-AA59AA5C-AA7BAA80-AAC2AADB-AAF6AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEDABF0-ABF9AC00-D7A3D7B0-D7C6D7CB-D7FBD800-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBC1FBD3-FD3FFD50-FD8FFD92-FDC7FDF0-FDFDFE00-FE19FE20-FE26FE30-FE52FE54-FE66FE68-FE6BFE70-FE74FE76-FEFCFEFFFF01-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDCFFE0-FFE6FFE8-FFEEFFF9-FFFD"})})(XRegExp); +//XRegExp.matchRecursive 0.2.0 +(function(n){"use strict";function t(n,t,i,r){return{value:n,name:t,start:i,end:r}}n.matchRecursive=function(i,r,u,f,e){f=f||"",e=e||{};var g=f.indexOf("g")>-1,nt=f.indexOf("y")>-1,d=f.replace(/y/g,""),y=e.escapeChar,o=e.valueNames,v=[],b=0,h=0,s=0,c=0,p,w,l,a,k;if(r=n(r,d),u=n(u,d),y){if(y.length>1)throw new SyntaxError("can't use more than one escape character");y=n.escape(y),k=new RegExp("(?:"+y+"[\\S\\s]|(?:(?!"+n.union([r,u]).source+")[^"+y+"])+)+",f.replace(/[^im]+/g,""))}for(;;){if(y&&(s+=(n.exec(i,k,s,"sticky")||[""])[0].length),l=n.exec(i,r,s),a=n.exec(i,u,s),l&&a&&(l.index<=a.index?a=null:l=null),l||a)h=(l||a).index,s=h+(l||a)[0].length;else if(!b)break;if(nt&&!b&&h>c)break;if(l)b||(p=h,w=s),++b;else if(a&&b){if(!--b&&(o?(o[0]&&p>c&&v.push(t(o[0],i.slice(c,p),c,p)),o[1]&&v.push(t(o[1],i.slice(p,w),p,w)),o[2]&&v.push(t(o[2],i.slice(w,h),w,h)),o[3]&&v.push(t(o[3],i.slice(h,s),h,s))):v.push(i.slice(w,h)),c=s,!g))break}else throw new Error("string contains unbalanced delimiters");h===s&&++s}return g&&!nt&&o&&o[0]&&i.length>c&&v.push(t(o[0],i.slice(c),c,i.length)),v}})(XRegExp); +//XRegExp.build 0.1.0 +(function(n){"use strict";function u(n){var i=/^(?:\(\?:\))?\^/,t=/\$(?:\(\?:\))?$/;return t.test(n.replace(/\\[\s\S]/g,""))?n.replace(i,"").replace(t,""):n}function t(t){return n.isRegExp(t)?t.xregexp&&!t.xregexp.isNative?t:n(t.source):n(t)}var i=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,r=n.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,i],"g");n.build=function(f,e,o){var w=/^\(\?([\w$]+)\)/.exec(f),l={},s=0,v,h=0,p=[0],y,a,c;w&&(o=o||"",w[1].replace(/./g,function(n){o+=o.indexOf(n)>-1?"":n}));for(c in e)e.hasOwnProperty(c)&&(a=t(e[c]),l[c]={pattern:u(a.source),names:a.xregexp.captureNames||[]});return f=t(f),y=f.xregexp.captureNames||[],f=f.source.replace(r,function(n,t,r,u,f){var o=t||r,e,c;if(o){if(!l.hasOwnProperty(o))throw new ReferenceError("undefined property "+n);return t?(e=y[h],p[++h]=++s,c="(?<"+(e||o)+">"):c="(?:",v=s,c+l[o].pattern.replace(i,function(n,t,i){if(t){if(e=l[o].names[s-v],++s,e)return"(?<"+e+">"}else if(i)return"\\"+(+i+v);return n})+")"}if(u){if(e=y[h],p[++h]=++s,e)return"(?<"+e+">"}else if(f)return"\\"+p[+f];return n}),n(f,o)}})(XRegExp); +//XRegExp Prototype Methods 1.0.0 +(function(n){"use strict";function t(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])}t(n.prototype,{apply:function(n,t){return this.test(t[0])},call:function(n,t){return this.test(t)},forEach:function(t,i,r){return n.forEach(t,this,i,r)},globalize:function(){return n.globalize(this)},xexec:function(t,i,r){return n.exec(t,this,i,r)},xtest:function(t,i,r){return n.test(t,this,i,r)}})})(XRegExp) diff --git a/www/web/static/rest_framework/css/bootstrap-tweaks.css b/www/web/static/rest_framework/css/bootstrap-tweaks.css new file mode 100644 index 0000000..17085b4 --- /dev/null +++ b/www/web/static/rest_framework/css/bootstrap-tweaks.css @@ -0,0 +1,234 @@ +/* + +This CSS file contains some tweaks specific to the included Bootstrap theme. +It's separate from `style.css` so that it can be easily overridden by replacing +a single block in the template. + +*/ + +.form-actions { + background: transparent; + border-top-color: transparent; + padding-top: 0; + text-align: right; +} + +#generic-content-form textarea { + font-family:Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace; + font-size: 80%; +} + +.navbar-inverse .brand a { + color: #999999; +} +.navbar-inverse .brand:hover a { + color: white; + text-decoration: none; +} + +/* custom navigation styles */ +.navbar { + width: 100%; + position: fixed; + left: 0; + top: 0; + z-index: 3; +} + +.navbar { + background: #2C2C2C; + color: white; + border: none; + border-top: 5px solid #A30000; + border-radius: 0px; +} + +.navbar .nav li, .navbar .nav li a, .navbar .brand:hover { + color: white; +} + +.nav-list > .active > a, .nav-list > .active > a:hover { + background: #2C2C2C; +} + +.navbar .dropdown-menu li a, .navbar .dropdown-menu li { + color: #A30000; +} + +.navbar .dropdown-menu li a:hover { + background: #EEEEEE; + color: #C20000; +} + +ul.breadcrumb { + margin: 70px 0 0 0; +} + +.breadcrumb li.active a { + color: #777; +} + +.pagination>.disabled>a, +.pagination>.disabled>a:hover, +.pagination>.disabled>a:focus { + cursor: not-allowed; + pointer-events: none; +} + +.pager>.disabled>a, +.pager>.disabled>a:hover, +.pager>.disabled>a:focus { + pointer-events: none; +} + +.pager .next { + margin-left: 10px; +} + +/*=== dabapps bootstrap styles ====*/ + +html { + width:100%; + background: none; +} + +/*body, .navbar .container-fluid { + max-width: 1150px; + margin: 0 auto; +}*/ + +body { + background: url("../img/grid.png") repeat-x; + background-attachment: fixed; +} + +#content { + margin: 0; + padding-bottom: 60px; +} + +/* sticky footer and footer */ +html, body { + height: 100%; +} + +.wrapper { + position: relative; + top: 0; + left: 0; + padding-top: 60px; + margin: -60px 0; + min-height: 100%; +} + +.form-switcher { + margin-bottom: 0; +} + +.well { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.well .form-actions { + padding-bottom: 0; + margin-bottom: 0; +} + +.well form { + margin-bottom: 0; +} + +.nav-tabs { + border: 0; +} + +.nav-tabs > li { + float: right; +} + +.nav-tabs li a { + margin-right: 0; +} + +.nav-tabs > .active > a { + background: #F5F5F5; +} + +.nav-tabs > .active > a:hover { + background: #F5F5F5; +} + +.tabbable.first-tab-active .tab-content { + border-top-right-radius: 0; +} + +footer { + position: absolute; + bottom: 0; + left: 0; + clear: both; + z-index: 10; + height: 60px; + width: 95%; + margin: 0 2.5%; +} + +footer p { + text-align: center; + color: gray; + border-top: 1px solid #DDDDDD; + padding-top: 10px; +} + +footer a { + color: gray !important; + font-weight: bold; +} + +footer a:hover { + color: gray; +} + +.page-header { + border-bottom: none; + padding-bottom: 0px; + margin: 0; +} + +/* custom general page styles */ +.hero-unit h1, .hero-unit h2 { + color: #A30000; +} + +body a { + color: #A30000; +} + +body a:hover { + color: #c20000; +} + +.request-info { + clear:both; +} + +.horizontal-checkbox label { + padding-top: 0; +} + +.horizontal-checkbox label { + padding-top: 0 !important; +} + +.horizontal-checkbox input { + float: left; + width: 20px; + margin-top: 3px; +} + +.modal-footer form { + margin-left: 5px; + margin-right: 5px; +} diff --git a/www/web/static/rest_framework/css/bootstrap.min.css b/www/web/static/rest_framework/css/bootstrap.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/www/web/static/rest_framework/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-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:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=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{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/www/web/static/rest_framework/css/default.css b/www/web/static/rest_framework/css/default.css new file mode 100644 index 0000000..f4e645c --- /dev/null +++ b/www/web/static/rest_framework/css/default.css @@ -0,0 +1,83 @@ + +/* The navbar is fixed at >= 980px wide, so add padding to the body to prevent +content running up underneath it. */ + +h1 { + font-weight: 300; +} + +h2, h3 { + font-weight: 300; +} + +.resource-description, .response-info { + margin-bottom: 2em; +} + +.version:before { + content: "v"; + opacity: 0.6; + padding-right: 0.25em; +} + +.version { + font-size: 70%; +} + +.format-option { + font-family: Menlo, Consolas, "Andale Mono", "Lucida Console", monospace; +} + +.button-form { + float: right; + margin-right: 1em; +} + +td.nested { + padding: 0 !important; +} + +td.nested > table { + margin: 0; +} + +form select, form input, form textarea { + width: 90%; +} + +form select[multiple] { + height: 150px; +} + +/* To allow tooltips to work on disabled elements */ +.disabled-tooltip-shield { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.errorlist { + margin-top: 0.5em; +} + +pre { + overflow: auto; + word-wrap: normal; + white-space: pre; + font-size: 12px; +} + +.page-header { + border-bottom: none; + padding-bottom: 0px; +} + +#filtersModal form input[type=submit] { + width: auto; +} + +#filtersModal .modal-body h2 { + margin-top: 0 +} diff --git a/www/web/static/rest_framework/css/prettify.css b/www/web/static/rest_framework/css/prettify.css new file mode 100644 index 0000000..d437aff --- /dev/null +++ b/www/web/static/rest_framework/css/prettify.css @@ -0,0 +1,30 @@ +.com { color: #93a1a1; } +.lit { color: #195f91; } +.pun, .opn, .clo { color: #93a1a1; } +.fun { color: #dc322f; } +.str, .atv { color: #D14; } +.kwd, .prettyprint .tag { color: #1e347b; } +.typ, .atn, .dec, .var { color: teal; } +.pln { color: #48484c; } + +.prettyprint { + padding: 8px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} +.prettyprint.linenums { + -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; + -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; + box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin: 0 0 0 33px; /* IE indents via margin-left */ +} +ol.linenums li { + padding-left: 12px; + color: #bebec5; + line-height: 20px; + text-shadow: 0 1px 0 #fff; +} \ No newline at end of file diff --git a/web/templates/media/fonts/glyphicons-halflings-regular.eot b/www/web/static/rest_framework/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from web/templates/media/fonts/glyphicons-halflings-regular.eot rename to www/web/static/rest_framework/fonts/glyphicons-halflings-regular.eot diff --git a/web/templates/media/fonts/glyphicons-halflings-regular.svg b/www/web/static/rest_framework/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from web/templates/media/fonts/glyphicons-halflings-regular.svg rename to www/web/static/rest_framework/fonts/glyphicons-halflings-regular.svg diff --git a/web/templates/media/fonts/glyphicons-halflings-regular.ttf b/www/web/static/rest_framework/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from web/templates/media/fonts/glyphicons-halflings-regular.ttf rename to www/web/static/rest_framework/fonts/glyphicons-halflings-regular.ttf diff --git a/web/templates/media/fonts/glyphicons-halflings-regular.woff b/www/web/static/rest_framework/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from web/templates/media/fonts/glyphicons-halflings-regular.woff rename to www/web/static/rest_framework/fonts/glyphicons-halflings-regular.woff diff --git a/web/templates/media/fonts/glyphicons-halflings-regular.woff2 b/www/web/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from web/templates/media/fonts/glyphicons-halflings-regular.woff2 rename to www/web/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 diff --git a/www/web/static/rest_framework/img/glyphicons-halflings-white.png b/www/web/static/rest_framework/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 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 B7G?kd literal 0 HcmV?d00001 diff --git a/www/web/static/rest_framework/img/glyphicons-halflings.png b/www/web/static/rest_framework/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..36c3b1ed9e71dce20dca9e35c36c97fd8afd718c GIT binary patch literal 12762 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 JeEj_Fe*q52p!xs+ literal 0 HcmV?d00001 diff --git a/www/web/static/rest_framework/img/grid.png b/www/web/static/rest_framework/img/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..878c3ed5c196539c4e2da35b7787ab08e98b9cca GIT binary patch literal 1458 zcmeAS@N?(olHy`uVBq!ia0vp^Q49=>MjUKFR#nCEMj*vm;1OBOz`!jG!i)^F=12fl z<Yk6LltlRYSS9D@>LsS+C#C9D<Q4!`GcedxSOJ;2sU?XD6}dTi#a0!zN?;XMKsHEN zUr7P1q$Jx`DZ)2E!8yMuRl!8hM9)CUj!Qv7!KNrB%__*n4XPc;vsKC{DJihh*Do(G z*DE*H%P&gTH?*|0)Hg8FH!{)%s?aU2%qvN((9J7Wh8O}f$0fBmxhS)sBr`ux0c37s zQhsTPt&$SRA~=A!GbI^rPeEx>4%n8IWc}2f)ZEm(l45;BJwtuC;Xu7MDalsFrAb+- z$t7TS!;J%bz$r0ZA4%9oA5*oBKFCE#E`)d=EDH3$9hZ$hJS^?Fp4#&|GB7Z|@^o<w zshIQj?!hAIPyvUFa?Fj39{jf#F>^SSJTd6tq0S!DeK!2h*Tl*`P5Yzc8-3Bx*#7*P z_lIZyDoaaS`}OwX=Dx>2?#<D!t}0>BS1xgR(Q!d=p|X>EOCN`<pp_D;faS3^)x^U> zXA4VQu*xH8*v`wH|7Kg_&!-n1cjuav&3^o%1B-!38l2qsw5vX{)ww9+?vCFTf>ud~ zg*GO3KC`e=!r@T3xzf`*c)d-IUlfFk;PBjy4K6tmi!A&4@cAEP$Px9s?lqTci7~T+ z-}^{4afY_30{uixxSHt*N>9t^Tda&0H5mQ_1`yCs#p`NH*8Km)_~-KFoNo=!_8c#s zWAa>N-HQ`bo%5fbxey)esBZQ2{nIXNu`Os-bmok|{*PU&?;Wq;K7ViC-rR_~+KOL= zH4)jidxUns0>)Izao*FaI~PF{%uT~Dk@j=8|5Dta{K8wv>d|%Hcb{Lgz3+r2sU6kg zmTAw9&-`i8w14I8wx>P5N6NF;+MlVs*O$JfT6WJou)_P>@A@uXTleG5F;Ur%rwkr} z9Cy=jOL!Yh{`u60)j+55f37_IN$UUe9sghL7uuB@5hwlYz5Q2<eUaI<M$aqHK~nO& zd#*7TCu+Cfdu3gE{6aLV)#<*4`koNEdG7b0o4u@l1WB4e6WeE2zU<9?{$YA;>Eoi? z8|G~6tcc3~n|batFcfpX-rfHA^NYK3=QY>WxaPaUGs?d6cXxkJIsW|O^e4z^d}6ZQ z{XhH5lWzwfnEw0KbC6*c*P{6UH^(HL+Z_Lz)%(e&^e>X(pJ#64-W$DObB_40RoL^? hufEOi_HxMn<eq$PhVnkSKkA@T)zj6_Wt~$(69B@oPZ9tC literal 0 HcmV?d00001 diff --git a/www/web/static/rest_framework/js/ajax-form.js b/www/web/static/rest_framework/js/ajax-form.js new file mode 100644 index 0000000..ce17729 --- /dev/null +++ b/www/web/static/rest_framework/js/ajax-form.js @@ -0,0 +1,112 @@ +function replaceDocument(docString) { + var doc = document.open("text/html"); + + doc.write(docString); + doc.close(); +} + +function doAjaxSubmit(e) { + var form = $(this); + var btn = $(this.clk); + var method = ( + btn.data('method') || + form.data('method') || + form.attr('method') || 'GET' + ).toUpperCase(); + + if (method === 'GET') { + // GET requests can always use standard form submits. + return; + } + + var contentType = + form.find('input[data-override="content-type"]').val() || + form.find('select[data-override="content-type"] option:selected').text(); + + if (method === 'POST' && !contentType) { + // POST requests can use standard form submits, unless we have + // overridden the content type. + return; + } + + // At this point we need to make an AJAX form submission. + e.preventDefault(); + + var url = form.attr('action'); + var data; + + if (contentType) { + data = form.find('[data-override="content"]').val() || '' + } else { + contentType = form.attr('enctype') || form.attr('encoding') + + if (contentType === 'multipart/form-data') { + if (!window.FormData) { + alert('Your browser does not support AJAX multipart form submissions'); + return; + } + + // Use the FormData API and allow the content type to be set automatically, + // so it includes the boundary string. + // See https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects + contentType = false; + data = new FormData(form[0]); + } else { + contentType = 'application/x-www-form-urlencoded; charset=UTF-8' + data = form.serialize(); + } + } + + var ret = $.ajax({ + url: url, + method: method, + data: data, + contentType: contentType, + processData: false, + headers: { + 'Accept': 'text/html; q=1.0, */*' + }, + }); + + ret.always(function(data, textStatus, jqXHR) { + if (textStatus != 'success') { + jqXHR = data; + } + + var responseContentType = jqXHR.getResponseHeader("content-type") || ""; + + if (responseContentType.toLowerCase().indexOf('text/html') === 0) { + replaceDocument(jqXHR.responseText); + + try { + // Modify the location and scroll to top, as if after page load. + history.replaceState({}, '', url); + scroll(0, 0); + } catch (err) { + // History API not supported, so redirect. + window.location = url; + } + } else { + // Not HTML content. We can't open this directly, so redirect. + window.location = url; + } + }); + + return ret; +} + +function captureSubmittingElement(e) { + var target = e.target; + var form = this; + + form.clk = target; +} + +$.fn.ajaxForm = function() { + var options = {} + + return this + .unbind('submit.form-plugin click.form-plugin') + .bind('submit.form-plugin', options, doAjaxSubmit) + .bind('click.form-plugin', options, captureSubmittingElement); +}; diff --git a/www/web/static/rest_framework/js/bootstrap.min.js b/www/web/static/rest_framework/js/bootstrap.min.js new file mode 100644 index 0000000..9bcd2fc --- /dev/null +++ b/www/web/static/rest_framework/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){ +this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/www/web/static/rest_framework/js/csrf.js b/www/web/static/rest_framework/js/csrf.js new file mode 100644 index 0000000..f8ab442 --- /dev/null +++ b/www/web/static/rest_framework/js/csrf.js @@ -0,0 +1,52 @@ +function getCookie(name) { + var cookieValue = null; + + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + + return cookieValue; +} + +function csrfSafeMethod(method) { + // these HTTP methods do not require CSRF protection + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); +} + +function sameOrigin(url) { + // test that a given url is a same-origin URL + // url could be relative or scheme relative or absolute + var host = document.location.host; // host + port + var protocol = document.location.protocol; + var sr_origin = '//' + host; + var origin = protocol + sr_origin; + + // Allow absolute or scheme relative URLs to same origin + return (url == origin || url.slice(0, origin.length + 1) == origin + '/') || + (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') || + // or any other URL that isn't scheme relative or absolute i.e relative. + !(/^(\/\/|http:|https:).*/.test(url)); +} + +var csrftoken = getCookie(window.drf.csrfCookieName); + +$.ajaxSetup({ + beforeSend: function(xhr, settings) { + if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) { + // Send the token to same-origin, relative URLs only. + // Send the token only if the method warrants CSRF protection + // Using the CSRFToken value acquired earlier + xhr.setRequestHeader("X-CSRFToken", csrftoken); + } + } +}); diff --git a/www/web/static/rest_framework/js/default.js b/www/web/static/rest_framework/js/default.js new file mode 100644 index 0000000..d8394b0 --- /dev/null +++ b/www/web/static/rest_framework/js/default.js @@ -0,0 +1,47 @@ +$(document).ready(function() { + // JSON highlighting. + prettyPrint(); + + // Bootstrap tooltips. + $('.js-tooltip').tooltip({ + delay: 1000, + container: 'body' + }); + + // Deal with rounded tab styling after tab clicks. + $('a[data-toggle="tab"]:first').on('shown', function(e) { + $(e.target).parents('.tabbable').addClass('first-tab-active'); + }); + + $('a[data-toggle="tab"]:not(:first)').on('shown', function(e) { + $(e.target).parents('.tabbable').removeClass('first-tab-active'); + }); + + $('a[data-toggle="tab"]').click(function() { + document.cookie = "tabstyle=" + this.name + "; path=/"; + }); + + // Store tab preference in cookies & display appropriate tab on load. + var selectedTab = null; + var selectedTabName = getCookie('tabstyle'); + + if (selectedTabName) { + selectedTabName = selectedTabName.replace(/[^a-z-]/g, ''); + } + + if (selectedTabName) { + selectedTab = $('.form-switcher a[name=' + selectedTabName + ']'); + } + + if (selectedTab && selectedTab.length > 0) { + // Display whichever tab is selected. + selectedTab.tab('show'); + } else { + // If no tab selected, display rightmost tab. + $('.form-switcher a:first').tab('show'); + } + + $(window).load(function() { + $('#errorModal').modal('show'); + }); +}); diff --git a/www/web/static/rest_framework/js/jquery-1.12.4.min.js b/www/web/static/rest_framework/js/jquery-1.12.4.min.js new file mode 100644 index 0000000..e836475 --- /dev/null +++ b/www/web/static/rest_framework/js/jquery-1.12.4.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!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=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.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 e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.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()},push:g,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!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));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||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},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){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[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):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[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,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"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=ga(),z=ga(),A=ga(),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="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),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")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=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)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){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 fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(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 la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(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 oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.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]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);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"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' 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(".#.+[+~]")}),ia(function(a){var b=n.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=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.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===n||a.ownerDocument===v&&t(v,a)?-1:b===n||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,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!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 fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.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},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.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=fa.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=fa.selectors={cacheLength:50,createPseudo:ha,match:W,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(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===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]||fa.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]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.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(ba,ca).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=fa.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(P," ")+" ").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,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(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:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(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:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).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 Y.test(a.nodeName)},input:function(a){return X.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:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(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]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.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=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[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?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(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,k=[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(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(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 ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(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 va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(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=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(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=[ra(sa(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 va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.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(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.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(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(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}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=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},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(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(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==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=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.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.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&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 u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document: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&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},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().progress(c.notify).done(c.resolve).fail(c.reject):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=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;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||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(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){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),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=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){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])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(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 n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,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=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.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",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=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)Y(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},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="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 ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={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:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=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(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.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=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(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.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!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&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(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)>-1: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},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(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){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},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?pa:qa):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={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,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}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,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=qa),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 ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(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 Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}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 Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=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},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.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%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.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+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(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}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(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+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,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":l.cssFloat?"cssFloat":"styleFloat"},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;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{ +marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":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+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(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 cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.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):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.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},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(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++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(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 qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),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:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),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.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,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(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.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(W).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=qb(this,n.extend({},a),f);(e||n._data(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=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.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=n._data(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(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("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=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=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(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/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(rb,""):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)).replace(sb," ")}},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)&&(l.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--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(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(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(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){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),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)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;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 Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(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:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,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":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},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(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var 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.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(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()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(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)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},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")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.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(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},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",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.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(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.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(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.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||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),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||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,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};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}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)&&n.inArray("auto",[f,i])>-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,n.extend({},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={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.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 Y(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.extend({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)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n}); diff --git a/www/web/static/rest_framework/js/prettify-min.js b/www/web/static/rest_framework/js/prettify-min.js new file mode 100644 index 0000000..eef5ad7 --- /dev/null +++ b/www/web/static/rest_framework/js/prettify-min.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c< +f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&& +(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r= +{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length, +t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b=== +"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value", +m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m= +a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue= +j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m, +250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit", +PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})(); diff --git a/web/templates/base.html b/www/web/templates/base.html similarity index 100% rename from web/templates/base.html rename to www/web/templates/base.html diff --git a/web/templates/licenses/bootstrap.txt b/www/web/templates/licenses/bootstrap.txt similarity index 100% rename from web/templates/licenses/bootstrap.txt rename to www/web/templates/licenses/bootstrap.txt diff --git a/web/templates/licenses/chart_js.txt b/www/web/templates/licenses/chart_js.txt similarity index 100% rename from web/templates/licenses/chart_js.txt rename to www/web/templates/licenses/chart_js.txt diff --git a/web/templates/licenses/django.txt b/www/web/templates/licenses/django.txt similarity index 100% rename from web/templates/licenses/django.txt rename to www/web/templates/licenses/django.txt diff --git a/web/templates/licenses/gplv2.txt b/www/web/templates/licenses/gplv2.txt similarity index 100% rename from web/templates/licenses/gplv2.txt rename to www/web/templates/licenses/gplv2.txt diff --git a/web/templates/media/chart_js/.gitignore b/www/web/templates/media/chart_js/.gitignore similarity index 100% rename from web/templates/media/chart_js/.gitignore rename to www/web/templates/media/chart_js/.gitignore diff --git a/web/templates/media/chart_js/.travis.yml b/www/web/templates/media/chart_js/.travis.yml similarity index 100% rename from web/templates/media/chart_js/.travis.yml rename to www/web/templates/media/chart_js/.travis.yml diff --git a/web/templates/media/chart_js/LICENSE b/www/web/templates/media/chart_js/LICENSE similarity index 100% rename from web/templates/media/chart_js/LICENSE rename to www/web/templates/media/chart_js/LICENSE diff --git a/web/templates/media/chart_js/README.md b/www/web/templates/media/chart_js/README.md similarity index 100% rename from web/templates/media/chart_js/README.md rename to www/web/templates/media/chart_js/README.md diff --git a/web/templates/media/chart_js/css/demo.css b/www/web/templates/media/chart_js/css/demo.css similarity index 100% rename from web/templates/media/chart_js/css/demo.css rename to www/web/templates/media/chart_js/css/demo.css diff --git a/web/templates/media/chart_js/index.html b/www/web/templates/media/chart_js/index.html similarity index 100% rename from web/templates/media/chart_js/index.html rename to www/web/templates/media/chart_js/index.html diff --git a/web/templates/media/chart_js/src/demo.js b/www/web/templates/media/chart_js/src/demo.js similarity index 100% rename from web/templates/media/chart_js/src/demo.js rename to www/web/templates/media/chart_js/src/demo.js diff --git a/web/templates/media/chart_js/src/legend.js b/www/web/templates/media/chart_js/src/legend.js similarity index 100% rename from web/templates/media/chart_js/src/legend.js rename to www/web/templates/media/chart_js/src/legend.js diff --git a/web/templates/media/chart_js/src/legend.legacy.js b/www/web/templates/media/chart_js/src/legend.legacy.js similarity index 100% rename from web/templates/media/chart_js/src/legend.legacy.js rename to www/web/templates/media/chart_js/src/legend.legacy.js diff --git a/web/templates/media/chart_js/vendor/Chart.js b/www/web/templates/media/chart_js/vendor/Chart.js similarity index 100% rename from web/templates/media/chart_js/vendor/Chart.js rename to www/web/templates/media/chart_js/vendor/Chart.js diff --git a/web/templates/media/css/bootstrap-theme.css b/www/web/templates/media/css/bootstrap-theme.css similarity index 100% rename from web/templates/media/css/bootstrap-theme.css rename to www/web/templates/media/css/bootstrap-theme.css diff --git a/web/templates/media/css/bootstrap-theme.css.map b/www/web/templates/media/css/bootstrap-theme.css.map similarity index 100% rename from web/templates/media/css/bootstrap-theme.css.map rename to www/web/templates/media/css/bootstrap-theme.css.map diff --git a/web/templates/media/css/bootstrap-theme.min.css b/www/web/templates/media/css/bootstrap-theme.min.css similarity index 100% rename from web/templates/media/css/bootstrap-theme.min.css rename to www/web/templates/media/css/bootstrap-theme.min.css diff --git a/web/templates/media/css/bootstrap.css b/www/web/templates/media/css/bootstrap.css similarity index 100% rename from web/templates/media/css/bootstrap.css rename to www/web/templates/media/css/bootstrap.css diff --git a/web/templates/media/css/bootstrap.css.map b/www/web/templates/media/css/bootstrap.css.map similarity index 100% rename from web/templates/media/css/bootstrap.css.map rename to www/web/templates/media/css/bootstrap.css.map diff --git a/web/templates/media/css/bootstrap.min.css b/www/web/templates/media/css/bootstrap.min.css similarity index 100% rename from web/templates/media/css/bootstrap.min.css rename to www/web/templates/media/css/bootstrap.min.css diff --git a/web/templates/media/django_logo.gif b/www/web/templates/media/django_logo.gif similarity index 100% rename from web/templates/media/django_logo.gif rename to www/web/templates/media/django_logo.gif diff --git a/www/web/templates/media/fonts/glyphicons-halflings-regular.eot b/www/web/templates/media/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 literal 0 HcmV?d00001 diff --git a/www/web/templates/media/fonts/glyphicons-halflings-regular.svg b/www/web/templates/media/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/www/web/templates/media/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode=" " /> +<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="433" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="162" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/www/web/templates/media/fonts/glyphicons-halflings-regular.ttf b/www/web/templates/media/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 literal 0 HcmV?d00001 diff --git a/www/web/templates/media/fonts/glyphicons-halflings-regular.woff b/www/web/templates/media/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35 GIT binary patch literal 23424 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/www/web/templates/media/fonts/glyphicons-halflings-regular.woff2 b/www/web/templates/media/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/web/templates/media/js/bootstrap.js b/www/web/templates/media/js/bootstrap.js similarity index 100% rename from web/templates/media/js/bootstrap.js rename to www/web/templates/media/js/bootstrap.js diff --git a/web/templates/media/js/bootstrap.min.js b/www/web/templates/media/js/bootstrap.min.js similarity index 100% rename from web/templates/media/js/bootstrap.min.js rename to www/web/templates/media/js/bootstrap.min.js diff --git a/www/web/templates/media/js/jquery.js b/www/web/templates/media/js/jquery.js new file mode 100644 index 0000000..49990d6 --- /dev/null +++ b/www/web/templates/media/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!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){ +return 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)), +void 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/web/templates/media/js/npm.js b/www/web/templates/media/js/npm.js similarity index 100% rename from web/templates/media/js/npm.js rename to www/web/templates/media/js/npm.js diff --git a/web/templates/media/warpzone_logo_large.png b/www/web/templates/media/warpzone_logo_large.png similarity index 100% rename from web/templates/media/warpzone_logo_large.png rename to www/web/templates/media/warpzone_logo_large.png diff --git a/web/templates/media/warpzone_medium.png b/www/web/templates/media/warpzone_medium.png similarity index 100% rename from web/templates/media/warpzone_medium.png rename to www/web/templates/media/warpzone_medium.png diff --git a/web/templates/media/warpzone_small.png b/www/web/templates/media/warpzone_small.png similarity index 100% rename from web/templates/media/warpzone_small.png rename to www/web/templates/media/warpzone_small.png diff --git a/web/warpauth/__init__.py b/www/web/warpauth/__init__.py similarity index 100% rename from web/warpauth/__init__.py rename to www/web/warpauth/__init__.py diff --git a/www/web/warpauth/__init__.pyc b/www/web/warpauth/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..390566db7511b986b75376ce9dfd974a364ba05d GIT binary patch literal 122 zcmZSn%*)j{D<dqK0SXv_v;z<qvjB+{28Lh_kcgiKkYGR~ij{$4`uPPV`sIm51(|ti qMTuZmVrfZ+etdjpUS>&ryk0?N2?tP}O>TZlX-=vg$h2Z0W&i-!XcyuD literal 0 HcmV?d00001 diff --git a/www/web/warpauth/__pycache__/__init__.cpython-34.pyc b/www/web/warpauth/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c067e0d6df1d89478d078bf2d2347c3c2137c69 GIT binary patch literal 105 zcmaFI!^_n;D<g~n2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUt)Ut<%vZFiKQhO g`tk9Zd6^~g@p=W7w>WHa^HWN5Qtd$Mi-DK{0L-WrTmS$7 literal 0 HcmV?d00001 diff --git a/www/web/warpauth/__pycache__/admin.cpython-34.pyc b/www/web/warpauth/__pycache__/admin.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c5e680d0e42a3924c983848c0814ee4e7a54f0d GIT binary patch literal 620 zcmb7AJx{|h5IyIsX=rH$5{RFWCEb`1f{6txM1dhoWNNFl<fGWBD!P`DKf+HUD-#Pp zfQdUtK_FPLd{1}2r+e@G-suLbm#6D}2Ji~sj*IybhF&2EybMx+j6uwRQEfqLL1sg2 zL*_v20Fw-6E=U{J3{Hd%!huI5IzSB%)}|4+Oo=?F=D8p|!}EUfd=M=dh5j4rL&z$Z zi)@;QR<(7`wO$rVTu3d;%i>Pvm47Pu{7OqTCU$dhr+SAzCKAXxI*%<{W`vV=e@{9l zkzr_8ev;%olSxtqNs<*}ky74ClKTZu>&`Q%HV!uMu^kPTT+R8Syd4;)(fmQtC$=!O zh0w7~{V#{zX0OJV@<@?pDxcuXK%E8jwt+y=s8T)*+wrED@qAK5<03EB^hS}XxYxLj xa7meJW#g-I5Gr5E$yAq8Rlyncj0dxWk@!oy@(=32I;6kXWT$WM*n6yp@d@cqeaQd- literal 0 HcmV?d00001 diff --git a/www/web/warpauth/__pycache__/ldap_connector.cpython-34.pyc b/www/web/warpauth/__pycache__/ldap_connector.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..678b2e39b981a8266dea305b647a0812b9fad80e GIT binary patch literal 1271 zcmZuwOHbQC5T12x$E2pv3Q8+lDeBD^kjkNlK2*x9NHn0BS99pf#0DIUo$fkBM4=Zr z_SQ@P0zasiz4nw#e?SjyXEuZe)RjFuJG=AE?98`6-O<wJ_b=P8On@ISGzzG{!C%gy z2=QZ(0Mz=r0SSX+18N4am9PMz2^Y9y!a3S-$-wul9y&tBW6F_Hp2z8dtdnIht^+(r zON7vj!XP4ghX&yh(g3?=LTEu~Ls*0h1~t?j3^Jld*B0kD7P2&r>Uk#W><XS{im-sc ze1;+iXfVhPXcXX_K^K6VBpW6)EN!>7EYckqX5xFS;yKDp!l0>2aT@1wki?xx7>K4O z=C?NAaf;3TrRw%lm2Xv7)wH%;XTv!;^K7qy$tim;PD3u$y??H6S1XHrv7)AKnKtHq ze`meAh{ZEyl<Z%Ea53ty$1}6-Ks19^emJY4>w}BWG*6YoIi<<@I9=LA0c?_W9^9zV z%;3<CQc<~dsfwsjRj%&O1Q|Rg?%<?z=!;QYs<DG8AHLxP8YNW+Sm(*jptnvg*DX4R zgWxG$9sC<Ar*qIn4gegDfSiP`31a3dBkW%nKLfhh!UC{Vv(n#5KZ4nB>`@8CS72ur zX7B=XY_LVmK114|mkmcY$c#wU*M%ff`MGs<jv>GNoevlsKLq(~!EVZ67gxSltn{c# zopLK}$4P>GF6UYKBogudX*o;6ax;*!or$nBJ-jNP1W79@$Fdw9H}lgT)u;CdNAEWZ z&(;N2j&??N2ov|!#8zczb!~06vcfml`NmRpdA<5x6=W`y)f91>dqv$5WwvA_YBmPs z&34UBqc+Wsi15jwrdXt`NQg|_?%hQFFh~y~PX2t5`4q;M)J0$gcAq_B4)Vuk51DC{ zSm)`@mi`Z*;@QN)G&qhpS0&Dmv#^zr?sERA6(s!~aTh~~F%r`xh}%Pg$R+6U(lKeH ra1GaV3)<$Hx<oaH9zrKe`|nY24MAu`O;YD&KZn=UJpCwKHtzlfqc19? literal 0 HcmV?d00001 diff --git a/www/web/warpauth/__pycache__/models.cpython-34.pyc b/www/web/warpauth/__pycache__/models.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec2b7b6da1abe401d7f16afeeffbfdfb625159d2 GIT binary patch literal 2393 zcmb7F&2k$>5bo8kepX(^vSSB=UHn5K3KXii63SGlxTuOniZ}(em#vj%EU&UZ%8WLS zUEIuL@B%qg9J%uhbLHd<55S49XC)!K93U%Cd$zl$d#3mMdj1SL?Vo@9_4|uD(I2$( zc$n{D=wBcN{v1k)GKWHk9Dc7+TBFRR(51|y(4(wQVZE}slr|`A+I1eKEy{cfeRB3i zokW9v!tw@5hbC=0M}#%n7jSM_LyKgSCQDlYn@^%`ZEcdiUD1JdjYMFz!Q~Y<NVxQ< z*SWyPspptRRtTBuo@@Mj$FaJf$W)l%n|vn6a{lH&Nc7Aa23X)9@Phk=%0?Vw@wk}m zVdx(qByk~7hp<M{rHRJ{LQT%eK@qNMaM&w8O{;0~R)uF*;gEG~yJ0pT##)~gN_;1^ zoE;WVWNzA7{5(o!KAs(4ASsz3E@wrQ7bj6H#NnXVHmxYi<4i`8X-5%`T&6q^qUdQE zr<Fz3uvGCmj8|%@OkHMik{a(g*2kvvbv%=YNhYfbHAhN9AzqNW$;(*$wbj3K600ea zAK$6U+Mk}PCQLkZ3nFkf?ayj26_8!_*zE<xY5`F?pa|7NHO4i@k_1jrQj3-f8j$DY zhNxs^vX}q{&Z!2V&6NQIWv&E{D$mY}(qAY6lBFjm>m<62B|uSZkl3_yM7xPEvSnHi zL_B?rf}Oolly|vu`V%p_%au4Qa>?^dhrzVa$@8y9qoT}bVJFGu>{~T{2<IX<z8FTM zA}zDrxMd<tqs)`1r93oiQ<Y?~I*p#lQ{#`5XEGn)Gb%3S#qSWNrgP)j?^GM*BL^ye z_&<+(7@8~lBhiGgT?Y_WuR#GMds?PP|9n2R1+{5Lk)Ek2+ToRq2y)K4ixc+e##hRt z-a?S8Y1X0$XB>e_QS|0Ys;!k&ONT+Pqt-Y`z@h_Tn!{MjNaW^5F`UTJEE=WYh13?m z_JF2+lqfy3us1%e)l{u>3{I)uX7LV-C4{RP7eZ}AbTRZMMBp@>ptj>|S3fs!t^E>! znK^sB;5~>{0Pk1i=e~v(00aZg+=Dz5EKd9KcJjfMU}zO!KoyY*fmaLUN4@&l#%j3! zft<zaeJocT!=8K4Yg{R$J%*`UwwlHfcRzhyIgH2Q_+;9H;CiSYCWD@LH6p983!y%Q z;av<1tH81Emnyhy0ngyITES%t7^4?d{I{L4Y5`1gFdugWl=h~m?gZQ-+!R1{v;&y9 z9XKKQ4C;0kd<NCm7kuvGqih(TtGKU<a(cE4LXUZ78J!oR0Ml}2bfLy!+fv$ks$1AG z6I2Y!Y$%m_9q)$~%$Tc+>7;I3r%bZP<3#*F78#G*Ggx~KjVy#eL(~OREduP0UXiMw zBFIZ}Fhf3H$+5kx4|4nqM-_i-#gI`98RMcl6+Jnbs<W<H6+{0A7e9vYM;Q7B1Y^&y zZ96;8dJQ~eTW=jLbQ0&|qA!N_9t*cpd_^(r&+nl*vRyda-PrVD=aN&{s9wWh9_t8~ xyjBgYG4%t!_3f=?DPzHFb6*E_)A|B=amRkiP1x?b>+Cv#({*qAyPLNfe*;Md+M)me literal 0 HcmV?d00001 diff --git a/www/web/warpauth/__pycache__/urls.cpython-34.pyc b/www/web/warpauth/__pycache__/urls.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71140a398ab4b62680b4413529ba30c23641144c GIT binary patch literal 732 zcmZ9K&5qMB5P-+|Ykt~psk9d)E@+X6kkS`eEu1(aBqR>es#Uah(}cv1?36;UJORgj zgncDn;lhOn;KbP7uA1g&;`#E)Ga2RYcoN^<|NQ*k1^5Lg#~9b|@K(PuP`n5<04;%> z05Q1(jRUO<xeKiaxd*Kexesjsc>shFpe`^M>Jd;6s1H9J3j+(oAshh<pbmyG1m-~< z4Pj(qJcKbYAL?WX6AKUK_*i{n;n<o}1IrNd3D67pl+OO(mqJRkyOmAqX}=L=#r0G& z#rjoOD76!k>QN`fx@wpXB`Yh{Gr13!R$W|aj~6Y|e#I&KwvP-J+kSDiPnJg+lV_Nm zZi(pCIePu}<MqMX6l!yGyL*$O7B3%*<NEp2`fgM3l09{ZZCsq8{fl$C;%gz>qOSx; zfBxv7&=2WU&uEQ1i|kJDb%sMx(!mMk(_JCEV%u-BuNB)ViN6j=&jjCuz&Np;$jS(L zau~xQiAu&-z4*eojEo(c5M$5@R_KZz2g=n0$ccGj!oPX8I96PkF0$^s4zF85w+*`? TXs9`c8F?995_>wAj(PqEsY<`v literal 0 HcmV?d00001 diff --git a/www/web/warpauth/__pycache__/util.cpython-34.pyc b/www/web/warpauth/__pycache__/util.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dbe825c75ef0165d5cd1fea283dd08dfddee0d2 GIT binary patch literal 206 zcmaFI!^`#iYEM`J0|UcjAcg~0Aj<)Wi;aOqCL=>86GI9ELkc5<SqhNF%wPr*V1Wp* zf(6on0&EOsQ9xDf48fWlQLF`-RaJ?%SaLG+vZJ^HK%C%=)YOt&EP08!skc}Ylk!VT zZm~K-sDi}w)M7tP#v+i-D;bK|fE1YcC8Vcco>)|nSXz>yUs{rxqgPOQi^C>2KczG$ Q)s7M5MiwB!%qYkR0P(3YHUIzs literal 0 HcmV?d00001 diff --git a/web/warpauth/admin.py b/www/web/warpauth/admin.py similarity index 100% rename from web/warpauth/admin.py rename to www/web/warpauth/admin.py diff --git a/www/web/warpauth/admin.pyc b/www/web/warpauth/admin.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34cb789c0104c9620c44bf283b055512495dcc61 GIT binary patch literal 700 zcmbVJy-ve05I)CgQi@6u1Bi_=Q~Cl30W%=v0uoswQ@bT4e~MjIbS)z<$aC-jaOaeY zfrVPW&v*7`-+gEP+3zhs-XF%W9zL$;Xl99^a5BgN3I+)SMzIIE2L*?OL*YZ>1Jev< z9nc(B3={_n1DK%i!yCW~;1Lg!&>bMpcRX}9yx=#l3o3+B)W!7K7mkRbXFCW|6<Ha1 z6doYlN@EsPql7lv-c>KUv~=l8$@<>t#vc92xu8cjYU%AuG($HvkVr9#(1$h;ZKr7| z3!SF6=YpbA^BlvL<){Sa1Yua!cDRsDot2YDI#15+^Uzfu*RO&jDI_+j2t3=z<)`3( zRVL`41a)PrIs&}7i?*)gCfdQk?jfj|ET>gGu1ecvPXc$q4iHEcX^Bz4&W)hX3HKM& pqef3NW3lPfqibR~HBPUfWZP8fzVo#0_Zj6g^!h$O<O6n$_6?E$jK2T? literal 0 HcmV?d00001 diff --git a/web/warpauth/ldap_connector.py b/www/web/warpauth/ldap_connector.py similarity index 100% rename from web/warpauth/ldap_connector.py rename to www/web/warpauth/ldap_connector.py diff --git a/www/web/warpauth/ldap_connector.pyc b/www/web/warpauth/ldap_connector.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2de888b4dbde7ce5057714fe86d14644bf091beb GIT binary patch literal 1416 zcmbtTOK;Oa5T5lTZAuFTQ6A#r6ABk9(JMl<O&^hpTdn(mURG|rZJj!{<=r$&l^#%g z<d5)!_$AzdnK6AJPLwD+p53))zWL@G_xsG$*Kc2TyYTzx;`2Q&vw$YSzkm#2zxEx- z1oR!)cR(aABt9e_TmoDGeA>sofT-2L@6w<63tIwRJ4wN`wP}82><n%;+KXGuMV{-f zEvoCh4&E%$t1r=L%qS>3#>QM2mmC+g2Z;lh0``57QH!v4DG4pwEaNh7&{%+;0P8@{ zg$n^=0OgVGdC>Fuyuo$?E~peh+!P~h5nAh^$&$FVQ|P35YSTDN&$PrH*vDuVced9R z)uEylxw|6Oj_lYMc)^F)#VJKmRB_P5S}hTCkmiXp_Te8fmO5cuwL|;#@6)ZtDB9bU z?V3u$WpsAf!Y8mXuh5$>N;^M{t1`_GtC+obV2|fHdH0Ix*X4+Np%hi5)GP&~h#=;~ zHH*Xovp9hc5q3ijT}dAegON@0aNP;W1N`nt+uQsQuZC0rqDxr_06iJaXLLpjFh(r^ zoHW7A!PtZ9HA588b6|{JMvLusLFBC4XfIy_&$`t0lPRdiAkKXd)`ziAsyJ_un#K({ zX@JQ91zr19NwSXcrL}dGc$5qHh-qtShbi%30yKksm}VL3I<Q4>s;l&H6ckw!l(8|x zqDl-Y;`Tvs8fOC?q$be)(vEma(jPb~JTxr3u*fx&%)R1BC>Tk+u<~}oz0Sr)CtOq8 zn`&!Cu5QW?SRo>^Rf{O&zHq34(G`mhA*gc5Zmx&qlFBQMQ%M`DM<Xd{tE#B(+*4{` z_c+dvw4&7NiUyLkp-T|1cqE>SNwm}AneZH6)Rhw+rSiD1mExgOs$V3747ZYIP~Jns z5Le^OX!!)UH#ph*w@Hvx^nF~0rn2EQy{20Sq=~5MCQvk0XVen(fj|1Mv`qZly0mw! LBT6?dW~YAvJe)LQ literal 0 HcmV?d00001 diff --git a/www/web/warpauth/migrations/0001_initial.py b/www/web/warpauth/migrations/0001_initial.py new file mode 100644 index 0000000..d9bbae0 --- /dev/null +++ b/www/web/warpauth/migrations/0001_initial.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-18 15:07 +from __future__ import unicode_literals + +from django.db import migrations, models +import ldapdb.models.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='LdapGroup', + fields=[ + ('dn', models.CharField(max_length=200)), + ('gid', ldapdb.models.fields.IntegerField(db_column=b'gidNumber', unique=True)), + ('name', ldapdb.models.fields.CharField(db_column=b'cn', max_length=200, primary_key=True, serialize=False)), + ('members', ldapdb.models.fields.ListField(db_column=b'memberUid')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='LdapUser', + fields=[ + ('dn', models.CharField(max_length=200)), + ('uid', ldapdb.models.fields.CharField(db_column=b'uid', max_length=200, primary_key=True, serialize=False, unique=True)), + ('first_name', ldapdb.models.fields.CharField(db_column=b'givenName', max_length=200)), + ('last_name', ldapdb.models.fields.CharField(db_column=b'sn', max_length=200)), + ('email', ldapdb.models.fields.CharField(db_column=b'description', max_length=200)), + ('cn', ldapdb.models.fields.CharField(db_column=b'cn', max_length=200)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='PasswordResetToken', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user', models.CharField(max_length=100)), + ('email', models.CharField(max_length=100)), + ('hash', models.CharField(max_length=100)), + ('created', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/www/web/warpauth/migrations/0001_initial.pyc b/www/web/warpauth/migrations/0001_initial.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1df7dab1332fc2588b873a2aaeff67bae9696594 GIT binary patch literal 1761 zcmbVN-)|E~5T3iU9by~^KSB#Fh4dGGAxT>a@laJ15ET*xWP(ura$4Vx&ui}X+}mB! z^fmp9korIL|LJR`c4p3YjFP_87v1g5emnckH?y1MuZ`~C@Bes{!Tgud_W{J<UeG|( zUjzj}8No1ui0v4P7|H~O36w1uwi<5&MH_}4&@I3OrfV>cK)2y{fMbB4hijk{c-8Mv zO!E)@`Vo!%CcT0+S*0;8jK^9Pt{?MEmtLjGYvoO4o#%BWp$fO}*J=EGF}0+9nY<5~ z_I+B9z-%#Qjya8qQyZp4PST+ahzzd5^c>SAmd6l{$=Ly1XX?`~OwWTR&IDNJIL8n( zpt}N~DFP5oBIq8&^afy$z%2$}SOISc_~Lw{oR(~YA%;EBm*CzpBq#hXv%>mJepgl^ zHrro4WBUc;Hj~&owdC3|XG!U!Q-F^@1YAD_xbY$2lT(0&D2-}4>HeSDek$4Clxkc6 z{h6q^qNTnC`u0N6?UkZ^KG#wczhxzt&M(e#eksn2pucKL$~Diq_;F6%ya|I>{jaHu ze2ZRIl^D3wo@q7vsjk9IdT?y8&@OO`YTGoa`ZX=k=6+)SByZs3lN&8vsz+&76`{0Z zk#|3oBdjG7wf!#v!(uPbAv5dG(`QzjQq@Q4TRf754r`+d^BaaWnk|uIIGJh2uW37; zsb+Fm!Z{kNk@L06ycnFrYl<S|0->2CeFLAev7ulo=R0Tl4(<LT`$8?|n4hzuO&=_k zDTJv;m(@nL6-_c5_#D1e&K*{@9-u>iP`yPfv$S!KW>xT2n$@U0HjZ~#k1B`4L4Z#m zi!Ol^ry~nuO_ZC60IN$SmaPs`rFH)jK|Lp*N~koI0;MTk9HBrmS?q&4pr~c6@g%EI z(l|q_(PjqSKyD_k!z1DNoUfe$r!V?EnyC5-cY#!~AZ7Jvz^X`~r`BVRa{zmv(2dpz z`^-4sEabNOkwj>$4YD4S76+!p#=}*qW^@@!Is0V6$;*99<}Q_b_fXX{W5>0U5h*d* zJ-IP=_xAR_N#{B4%#H?Ja^Be8qgN-Ur?nn+;;m>qx*KiBNz_dm`#bXRb7$$h6K%=U zXKm-2j)M<1X*wWRBaEIZn^!xe1`F5-c9lkrL_5vxy)%{rG`PtSrgV~+jQ(eKQuXhf RI{(079sk4FjITw#<X@yfbKd{} literal 0 HcmV?d00001 diff --git a/www/web/warpauth/migrations/0002_auto_20160818_1603.py b/www/web/warpauth/migrations/0002_auto_20160818_1603.py new file mode 100644 index 0000000..557159c --- /dev/null +++ b/www/web/warpauth/migrations/0002_auto_20160818_1603.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-18 16:03 +from __future__ import unicode_literals + +from django.db import migrations +import ldapdb.models.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('warpauth', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='ldapgroup', + name='gid', + field=ldapdb.models.fields.IntegerField(db_column='gidNumber', unique=True), + ), + migrations.AlterField( + model_name='ldapgroup', + name='members', + field=ldapdb.models.fields.ListField(db_column='memberUid'), + ), + migrations.AlterField( + model_name='ldapgroup', + name='name', + field=ldapdb.models.fields.CharField(db_column='cn', max_length=200, primary_key=True, serialize=False), + ), + migrations.AlterField( + model_name='ldapuser', + name='cn', + field=ldapdb.models.fields.CharField(db_column='cn', max_length=200), + ), + migrations.AlterField( + model_name='ldapuser', + name='email', + field=ldapdb.models.fields.CharField(db_column='mail', max_length=200), + ), + migrations.AlterField( + model_name='ldapuser', + name='first_name', + field=ldapdb.models.fields.CharField(db_column='givenName', max_length=200), + ), + migrations.AlterField( + model_name='ldapuser', + name='last_name', + field=ldapdb.models.fields.CharField(db_column='sn', max_length=200), + ), + migrations.AlterField( + model_name='ldapuser', + name='uid', + field=ldapdb.models.fields.CharField(db_column='uid', max_length=200, primary_key=True, serialize=False, unique=True), + ), + ] diff --git a/web/warpauth/migrations/__init__.py b/www/web/warpauth/migrations/__init__.py similarity index 100% rename from web/warpauth/migrations/__init__.py rename to www/web/warpauth/migrations/__init__.py diff --git a/www/web/warpauth/migrations/__init__.pyc b/www/web/warpauth/migrations/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b787248a833daff14666059ac4e43fc278c2397 GIT binary patch literal 133 zcmZSn%*)j{D<dqK0SXv_v;z<qvjB+{28Lh_kcgiKkYGR~iuHhE`uPPV`sIm51(|ti zMTuZmVrfZ+er{%ZQDRAEeqOPDe0*kJW=VX!UO{CE2T+SmZhlH>PO2Tq;9?+V001;% B99aMW literal 0 HcmV?d00001 diff --git a/www/web/warpauth/migrations/__pycache__/0001_initial.cpython-34.pyc b/www/web/warpauth/migrations/__pycache__/0001_initial.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f660d3c1f6a68dbd5ad08be6697e7f521de273a GIT binary patch literal 1557 zcmZ`(U2hXd6utZ5wbyY<ni5+29cY_c6-l5HPgNBJ0wF=D+Mr5)S&cp8^_cxIGrOee zEBqN=EA>D0H_U6F^1=^5JaA^#c8mhM-u0b3XYQPP?%jFSTkpR4=ifiCb%_3_l`DjO zfJZ;Vi{s}}MwELr@W``cpE95FfCd5OAq~RD8&KAwK}7d>NW4Wa0Bn&6XxgUdz_y78 z^hZBBMNsN{W}`0TsN^EaWF-{Kbl*4KT&9XuvMjWTa!h9WaAfg|YZJx+9(~{w39^hp zXy99pV3WcQNwjDhS(eza;Ud~J?GT3(T*w<^szV~S)TUjUt`U!kcZtLB0ProqUjbk( z0KItxzHVXsBjOhT4lQ_N1q>L#AI~>RA;u<2;4cvWgl;~k;EdnJ5A)kviP&s^={?&o z7`H5mPtPs+Y?-r5>GC<i=kEf(I0yLhUBFl801HtX)lx|O!EC>F*?vQ|8j$c?r{ap1 ze4F@{g`!s-tSQ=eb1gaeEi1Wne*Zq_56+1a?KCB|HBVcJ<EQ9Fl;TJ9V&B9M7Y%o0 z!h+?(#1A-|-BV>fGtpRzjBDfb0-eeJN-|NT)#UU)G@uDm$xY0M$*9cgywEY6a2?k9 zP$(0jxu4cTqf2R2n6;UbIa4Re6LDf<EtF)L{9D{L?Oa&AcFP<4G2*t%S@RKe*icuB zjVjZzydGnz32Mo8fWY`S-LX`<N-Xs`g=eBTbctkaF=1Kg!n8!rWTw|J;zEy<bek9- z1UG+US|68+|1Pwsj>;#ZFh0WfSY4ILNC{R6jGhTKEVXdk8UOwr6V_mKicgSCIAMBX z+DoikS(L{K<NUC{VLFLhmL#T|B>1-LOu+6X$<vx;mOn;qS;z|7m>w51QE*X=q|nMH zYu0W%77y*IphD}3Z%>%IYinep4C?Tq!cj)1cfY7aD&|x11F5S972iTOjk$gY86C-7 zG{bH=!x`i>e@W^(qPW-V8+)k4-Z4`%S&S8P780B6ogGwr`}_OXlR5F-*@<dlwe1Fd z6R(~h`B4~qk-z0_d)K^eKk&LiGyWMKd+#iLJKmPNU5tLmDmAXFT0t9Si-?AsvLY>a wk*XD?(cxl~{BCn#?v7p8s-Nt<<#LuzW8JWUI=?g}_|=Bd5ndbqC9fB}1sKtI`~Uy| literal 0 HcmV?d00001 diff --git a/www/web/warpauth/migrations/__pycache__/0002_auto_20160818_1603.cpython-34.pyc b/www/web/warpauth/migrations/__pycache__/0002_auto_20160818_1603.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..867720630f7c5bd98979b1e909f196dcf3b12609 GIT binary patch literal 1323 zcmaJ=OK%e~5T1P|o2C$;KzUW_jc`cPBB34t6_AQ5K`(%i_F_4)vvu%3>fHs}Yxy($ z0PY;Qarc!|FZ=*bjCT|IAnhie8IR_h8GmE{ZZEbrzJGfkHUNIXiO)rQ6IZ^Cg5lo+ z2@qQlT40&I4bq0#fzYY<4oDY54_-1Cm<L}l!~^cY#D_zS@_{+<rt2SJI_O%uQzl}R zGESr@xS}#gUn>@oqJ>D4d}n0hX5TUzo4E3y761p+1GW&_!0thWEjhqln0Tf{U7caM z25=uH4VW}x5&&xgL)ikh0Eb{7f^!zqJ`KT0ge+pPH76Kroy@;b1z!So8CVC{6;p*> z1$GVL?kV_^p@m`O`S7#t)sXA+AUCEJ=R<DJgDhVNxit@R`$EW_c@T8|N5zbM4+)8y z5F+7s@k*@d;Pq_oy7`H!jF!c&ZVv{7H6jvG2rBVv;9Zd<p)n5w$!Hd-w9K??9NLKl z)81Hc$#lSmWR%J>PIQ3ooiZMBrG30@dnJFX8!<PITnDxB4w3dK!Tj_ykvxft-J>6P z)AT~7L`>B_`M~#ekaLAyhy%VAHcj;s9opkD6;ivEY>kD=i>g6W_#;ntOlyIpGq0T| z+9|Q6u6^+Dm<Okh*<I94Qsp2-w+O*Qmy)C1CS<Rq(wx@p7|(dZcrp?^SB`17^-SV3 z+Nvn<O^0l#{fe_(`xP^}Zf_?Ak7iN9E0Gs9Ab7D$r`T4S;cKj(;8#%hF?A*WJn5%d z(Ko{p$ym|KGGpo=KiNJGY@MJpCF_H=M}v*E4T9=nFWXlxCJJ!n&r!6Uzzr-Pe=Bya zm#6x{RL}h9=_+5hVJI4xMX8V!Wn*TX{)8q`+GE3-mZh4CUd=?WCPJ-ZXqDplfVI^% UIhv1a+MgO?b00;=?pST-FHD>~-v9sr literal 0 HcmV?d00001 diff --git a/www/web/warpauth/migrations/__pycache__/__init__.cpython-34.pyc b/www/web/warpauth/migrations/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cff914e5847bfb0da1d8788a11b94891d95d23e4 GIT binary patch literal 129 zcmaFI!^_n;D<g~n2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUwZoa1tt3BiA4pO zd1*z7U{+#jNrrxIW_nR#NoIatv3`7fW?p7Ve7s&k<t+}I-29Z%oK!oIImJNC005^Q BA1wd? literal 0 HcmV?d00001 diff --git a/web/warpauth/models.py b/www/web/warpauth/models.py similarity index 87% rename from web/warpauth/models.py rename to www/web/warpauth/models.py index 0c96461..3f4bae7 100644 --- a/web/warpauth/models.py +++ b/www/web/warpauth/models.py @@ -14,13 +14,13 @@ class PasswordResetToken(models.Model): class LdapUser(ldapdb.models.Model): - base_dn = "ou=people,dc=warpzone,dc=ms" - object_classes = ['person', 'organizationalPerson', 'inetOrgPerson'] + base_dn = "ou=users,dc=warpzone,dc=ms" + object_classes = ['posixAccount', 'inetOrgPerson'] uid = CharField(db_column='uid', unique=True, primary_key=True) first_name = CharField(db_column='givenName', max_length=200) last_name = CharField(db_column='sn', max_length=200) - email = CharField(db_column='description', max_length=200) + email = CharField(db_column='mail', max_length=200) cn = CharField(db_column='cn', max_length=200) diff --git a/www/web/warpauth/models.pyc b/www/web/warpauth/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7735a7978f6dc1ee8e92d81d164e849b892d8a54 GIT binary patch literal 2744 zcmbtWTW%vo6usSTJGS#wL<XUR=OAGTlpyiTAjF_SNRtrNBuMzD)pnKb_VkOcGMS9{ z8#cfOW)p0J{jdPI=a$`>gr6jn#FeUBuUn_iIpye|&Hnl8KYt$6@+ac|-}1-)#f9d- zfHI;ypkY7(+972j<q-`d%3CySQQoFu+xJD3b!fOI^IDX3Deuv+$9-)w0nPg~2}pP7 z529B@zYNz&uaQ}!dDGWz`Zh@S$n<1Jzlm;=UcWwLqv_is9nrJFCg+|0%RhsFYp%mZ zUTTxs0gmQ+Ts)p7^^??O+HG*_$HJMZSq9MkG__8;Py7;y9b<_nWu3cSZk;C9UX-;~ z#u|54J~zcR{J!HM_LK`lfX#$7kCs@zqJSa08DV&CjOj>(kqpUn8Lfa}RL}eo`n+<U zyofVXOx-NyOCdQ(vT$WwloxTL^#Frhmy0+qlHA0xLnMwFi$%sw#Vt|-QHyH}Yiif# zipi5Sa|q26J99wu`^1^EG&deHbe+`;<JPz`t_^qU0axj&upe{tsI1)4MN(I3F{u-& zae}iWe;J3>rNVYt#3Id3uq(fk^HZHv=bTZ4DuxNFuest;<zo*+(32tJi=PT3O^Y=D zwZSsOCDW_T=tV<r`mQc`rTZKVnW)Pk6R`<)S3zOmawJpHPiF!)Bm1Pcz&`MJTPhp4 zqa7S+pNn$ws4``hnJ@JC5s-LU7E;fx(6TbMEerP!hSt-hNM9x{EsG>O^&P_G!nmL6 z=`sQ)>QOu{vqfGw@OhDHS!+?Gzw(`|bEvA*JgG0^=jKw_K23i!#R+pjK?~{MT)2=6 zTgY&2?6^)V>@4ANF$ODEpT`&p_<tvw6YC2dUKnbRt6m}?g*Dmat{e~&#j$mD90M|o z#3;CX2I_$4-FbJw6~~O-nB^VEA8>P-f!K%wF%>|UJV%K&u`b*e2g=dhj9om=*a?gk z9Vx^G6Oq~^t*sO7$u00e-%{9A;jrp`6xj4CajD%>KOmZr4VKgiI>C0hAME+xs27PR ztds=nYSaYch?<Z^qbBGmXxubx>;`vxY+UmH>B!$tXZzy!fF<em2r;%+3n;jO`UC}z zK7j16kX1N=IFA^Eka+@cw)X?&Q(o>Ne=O1lD1I3n`Hf96>VE5EZJb4T(h1~l0rC%Z zxu_b58o!$H&<0`eS5tmVBk>b4F7_+&s1P0{hVSi*y-TwfdHdoD+YXQK$y>nABX1&{ zXZ^}~@S0f&ft_cHd@P)&D0RuEUZBoCBjl_~o4$~g73^o}6Z&M4k4&u|aL6;XaSZkD zYFKVC<~-H66{$QXc!R_$?j=-F%9otMUH##6p7R#lLYrS*ZF|EM)Q8-qK0*Q868(!Q zPgCt30oyB3PyE9pXWv%#pYeL&u7%%#;k|G#*k|$gqQN%yl2>A$6w~rhkK~<~Hzs42 z>e1oy{q-92X-f8zCZ3#Y<3x`>B7UO%x)Zh&s~|Cv?lHa{$$KtxRuG9=<@tutZf9)r e72s>mlfS5ZgXcz0x)U4(8^KQWUhiP{LFYdmoCi<< literal 0 HcmV?d00001 diff --git a/web/warpauth/templates/warpauth/login.html b/www/web/warpauth/templates/warpauth/login.html similarity index 100% rename from web/warpauth/templates/warpauth/login.html rename to www/web/warpauth/templates/warpauth/login.html diff --git a/web/warpauth/templates/warpauth/profile.html b/www/web/warpauth/templates/warpauth/profile.html similarity index 100% rename from web/warpauth/templates/warpauth/profile.html rename to www/web/warpauth/templates/warpauth/profile.html diff --git a/web/warpauth/templates/warpauth/profile/change_password.html b/www/web/warpauth/templates/warpauth/profile/change_password.html similarity index 100% rename from web/warpauth/templates/warpauth/profile/change_password.html rename to www/web/warpauth/templates/warpauth/profile/change_password.html diff --git a/web/warpauth/templates/warpauth/profile/information.html b/www/web/warpauth/templates/warpauth/profile/information.html similarity index 100% rename from web/warpauth/templates/warpauth/profile/information.html rename to www/web/warpauth/templates/warpauth/profile/information.html diff --git a/web/warpauth/templates/warpauth/register.html b/www/web/warpauth/templates/warpauth/register.html similarity index 100% rename from web/warpauth/templates/warpauth/register.html rename to www/web/warpauth/templates/warpauth/register.html diff --git a/web/warpauth/templates/warpauth/reset_password/change_password.html b/www/web/warpauth/templates/warpauth/reset_password/change_password.html similarity index 100% rename from web/warpauth/templates/warpauth/reset_password/change_password.html rename to www/web/warpauth/templates/warpauth/reset_password/change_password.html diff --git a/web/warpauth/templates/warpauth/reset_password/token_gen.html b/www/web/warpauth/templates/warpauth/reset_password/token_gen.html similarity index 100% rename from web/warpauth/templates/warpauth/reset_password/token_gen.html rename to www/web/warpauth/templates/warpauth/reset_password/token_gen.html diff --git a/web/warpauth/tests.py b/www/web/warpauth/tests.py similarity index 100% rename from web/warpauth/tests.py rename to www/web/warpauth/tests.py diff --git a/web/warpauth/urls.py b/www/web/warpauth/urls.py similarity index 100% rename from web/warpauth/urls.py rename to www/web/warpauth/urls.py diff --git a/www/web/warpauth/urls.pyc b/www/web/warpauth/urls.pyc new file mode 100644 index 0000000000000000000000000000000000000000..881c18b6fb6d1d906b6d753503caa0f39e4c36e2 GIT binary patch literal 827 zcmZvZ+iuh_5QfJ&?YRe}-XI|)RHPuJ%?nh8C#X;=^&+ZRS!-`LA+aOd%fdBJz$Nd; z8}I;S##!18Y7P_spJ(Fn@9@uJdjIR^-5L(p9KRp&wZAb4d>AwUErWsqBOO2!KpR34 zLK{I5K^sF6Lz_U60Fw+v2r`6v1R??v!;iqj#KZ9rjzA_*Cqp;}89_Z6!ik5|A)JDY zp`H!l%)>r&{%`e#hjX8KLa-b|u>f%jx9J&fw0giRWjJynhMj5Bh(wH`(PgFF366}k z(ycmf?Oq$<Mu<A2H&r9u*iV<0b<$W8pM6<&>F7U-x6=QsQbK;Slf%5;x$M%;NEzAJ zqCW5S@lr_NK10(FpRW3zw%l&7@AvQDVdj)F4}GD0c`Vmku1fj11#IsWr~jk&)iWiP z+Gx{qS80V+FP^H7CT>!4$&sO=#)b59t<`3UZrU6fcoX;BbbRNw%deH(+nhYl0}5n( z?p>!Hc>7kA<H#VC=vJ@EzEY}{(_f^@=@jyW0@?19alwu|JPBn}WbhR1Ym}MpTt;nR m>xTOgHIz}G%kH~B%d1w4T_dllJxjYiV{axG%-_L9K;OT1vcQ1= literal 0 HcmV?d00001 diff --git a/web/warpauth/util.py b/www/web/warpauth/util.py similarity index 100% rename from web/warpauth/util.py rename to www/web/warpauth/util.py diff --git a/www/web/warpauth/util.pyc b/www/web/warpauth/util.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12ce56a81d5b8798f750c19a276710d45cfbc2e2 GIT binary patch literal 247 zcmZSn%**xrYEM`)0~D|VX$K%KHU<)zj0~Af3@Ho@DU1weDL@u8gBeJG1tP!-7DxvQ zurZiL0adXx1Z!{r^_753Dafp<N-SXkvT`!>vP-yti~x{Oa7Jos30OQYF*g;gG%+c^ zv;@p@gtH0~(^HH6G#G)}g4lqB1`s0=#qvO|ettoTetBY1L1tcBQ6iX?SXz>yUs{rx cqgPN_0&<H@ZhlH>PO2Tqpkk0~m>C5b0cu+@qW}N^ literal 0 HcmV?d00001 diff --git a/web/warpauth/views/__init__.py b/www/web/warpauth/views/__init__.py similarity index 100% rename from web/warpauth/views/__init__.py rename to www/web/warpauth/views/__init__.py diff --git a/www/web/warpauth/views/__init__.pyc b/www/web/warpauth/views/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a8b9c9cae2c852a5b862e67aa45d0ce2f720abb GIT binary patch literal 159 zcmZSn%*)j@D<dqK0SXv_v;z<qa{-AI28Jjg$;c3_!35-%umXwXjH1k9KMjz&5|Ens z_{7qZjQpbbcnu(r0YMaN0=fG61tt3BiA4pOd1*z7U=~QZepzN}d9i+cd}dx|NqoFs YL1hUCP_<2NeoARhsvXGiVjyM!061SFEC2ui literal 0 HcmV?d00001 diff --git a/www/web/warpauth/views/__pycache__/__init__.cpython-34.pyc b/www/web/warpauth/views/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf9f806c8e81dd335bd7155363ddfddc0cdc2865 GIT binary patch literal 133 zcmaFI!^_n)D<e#dfq~&M5W@i@kmUfx#auulg@GXoNHQ`6YckzpP0lFFEcVl6yu}qC zpIBOwkzW)azmlPd8K@9U{F2erFHbBg0Lkf>Wu}%F>&M4u=4F<|$LkeT-r}&y%}*)K MNwou6Q4GWk09*$kLI3~& literal 0 HcmV?d00001 diff --git a/www/web/warpauth/views/__pycache__/login.cpython-34.pyc b/www/web/warpauth/views/__pycache__/login.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a04491559cd14033a02c4b6fce87494d844ad72 GIT binary patch literal 1409 zcmZuw&5qne5U%#$*dBXll3jixAVj&D!>qWEA{N*LL^MH}1qoj)XS%cF-L^gHZf8lf zds<$A8?V5HJ7*pNi9=sGAt4?hC#vk()gs}aa@E(>-Cxz${wGP}-+ub>+mC&KKjFrO zF?@or{uK?!hk*pB8RQHY#STaZY8P@BY7cS`Y9DeR>HzX!$Z$c9pbjAqp^hMrppGGr zhcT~TZ4CK%h<%U=)G6fY5C<T4pq@ZJ8R8MhDID<-cmzKH<hMYiz+>QJ;0f>)F2UhD zz$Y|%i7amuxXh-1A$`c04U}lOP?=|wFO1nd6?)S)TG+R5MxU1asd&)|ZT^cdT5}*} zdnUNuyP1#p!?tU9=Gvs}%vv<2T9rmvU$)0pV*~uOox$xxC3vO8iu|2^uu!-YLL8B? zQDviLX{xrtkbSgbL>n)Xf!@#X)qkTw9ZcW-`POq`&b=P<VSWy9!hi>G>VWzKD0G02 z;LZiR3PKDVFfPI8m>a^mL*2V@;T%DL(+Jcr<ezw;eh1^zObjm_lp=x)+$?|-oa|Af z8GdM+uty`98x$p`k>v{{fE$eA)a}V2lPe!JqbiUwCN%(N3?`v<P&6F4#NBX#Y-f@C zkExS+yeW@GVJag<9zARMtHOxy%|q)wFDq%iub(WBY}jd`nz9x)+>~0MwTfGxi{kUc zH*DX+(d*r_Qf)}5{a%6D+SD>jtxs!f8`Q$ATdpS9Wi>)$qe>U$%2Y3f3JFXI410t` z9%-R9DrWZ{A1oeybMWY}SRO8yUp`qBUmbp@Vw&QTanNMG9g*UAw$zlsTWG9Dl=GBq zA<O2tLnc3i`T)n?+?nlP^L<%~GreWKd1d3_1Q8lxs=ki~SWLGwVJY5kv4lk|bprIK z_<fg69rYn**=U&CDfxOdthjG?uTE$2yb_WZ)WpU08KkpFCG=--4;@qpr6TbS>dOYL zoW=EenWKnS-+_#&_sFM`26GoZJ4P1xXB1SzJp{Ce2Ar5FswLaCQ+|T|XlHueDzoa0 z?z?EmTX>EC@X%bEsOT3_0UEozO<1*!QPr~<$=$0tNO;Z5-u<7%85gTom8Ml%jcK)H xo79;~>OueXN|YIaeNTJNH!AFF?aK`3b;~;`9#9W8={{xm+50F7-LaFr^Dh`>RIUI3 literal 0 HcmV?d00001 diff --git a/www/web/warpauth/views/__pycache__/profile.cpython-34.pyc b/www/web/warpauth/views/__pycache__/profile.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9a799d86a817a05b14b0d5d9c566123003cceebc GIT binary patch literal 2567 zcmZ`)-ESL35TCvC-Pvb5w)5GfAGocA<U*YngoG3!N@)aAl}2r$<zB3-cN3p`A7=O5 zv{nKS;hFz~KY({$_$OApAs+gIc&?COX3ys&Rq^@eW@cw+cV~Vx`&XmsSAP5D$)7&J zA8_vHApaS@YK;MK{4<CF5(WVSMzRI51&IxTUC1`X6-XQioI<WZ>_Xx};6YM_pbAM1 zf*K?~1b$)Rm>G2l>V@n=+<>GBL9>uOh?gK~LC`AXD#UF_IuLXqS%zS_(AFScfycBX zAL3OARzWm@*MT>HBjdv<SbPb13w{JR#r?0n%b*RsQyQ$l%U~J!N@=h`ZXfklUsJq# zOt-!X<A{fOl%@Bi%p|IugG?q08CQyw3)!pa#+P|Mc_`E*OO?>;=cUg>{!n~36)L}| z-^=nlahx3qu2;|7qkcD=rX2lOrQnei!yNggI6I8efkaoRqS5C4FYfH$&C(PNa9@_L z-sj=uYbB&^l-w@v6iwN!JzXmtOl3Utwhh0nSIPwj2a$;RAPo~SL`;|;eO-L-;;TkT z5GJ_+#}2m*SAm^lfH8xy1>-{Hz)oHP?n3Us*oCnN+=ILdg&n5o6d3-=PZdpTkoz>o zk--ewl*C6pe@}yU1ciH7duloy3Z;U2jK>=s%4|AOx*DY_57VL0_B7(bk{O%g*$0%I z+1gPkC*d?7ZBJx&5XGWD%9FTP*Ult76iQdf6hlHDi4E$;uL*#XO+2h@Akkj-Y>eSm z+CCJywpA`A6_2bS!MJ*q4$SP&Ag`k4&E@{~V&NB&I8uw{C$F><Ay{5^&`x1N0$4ut z*$VrB$@frNguRMF8($Olhg6`8uopqZ;6JxP-h|u&UNI5NZ5UTz>;QKlcTKQ88o)@O zFe6qeCz~f$DR?N@rBFqo0+@_3RTP{!@TvpHn7}$5n+4dD^b@G$4S4Q@{1u(Lz-F8C ztYNp<IoryUZ>e0-i3{Jm@HA!c^ceT)!^W`<8z&wddoXUAWst`a2G1>!e^XiG_EG?} zn=2hgO4}$ANQLE=QF=y+$6+v7qAA3*$T=}>+BY$H3`FNLEyvFG*lX-b%7a`+qAU9k z9zC8_%T&oVQu+sxRJp+e!XzwNM<ihs&zfJQFQ_ea?~(Y1b#-MgOGR%*uG3^U5&0<N zvPNqVj^rkhEh3kRY!K-Zv5{!sxY?x=)Xp##VJa=sJBYVvBCnI-4N_Rc6!VTuMTIX! zuPU$5kny%KDh$|xW<uVgVM1m>uF=%x;V4WG#UM(lQcPo`jj4~35GGs9x2~}!JywI+ ztizTOr&rk$Yv5B`yfx(M@h#cMnG5{ViKs^I;;a5aa)w|2R@*?d5|VElB)bO5*ewX< z2yqWoKuzL;SUVHtA)#vCkkTLK12|!`n1L;2lf3^#$STdA0(PfUL?>1S0>d%0Oq&{) zE8z}G59kY95)}>Nv~6(uJ6$}bHy`lwApslVSu1Ois%&MQb4c5jD;N%w_cv@?yBT)e z$&q$bafIJssrU|tS&HCGW}Ewn1SPuIzT$3_c0>G_Hmzni_d}(QGReDhW0S@%M?|Js z-o>mAN3W@W&$b@KygMnaFBm-jpDy|OU;Opz2Fmh%+OffLm$*6--I^n)bXx%M5)D~A zJ=Y*@gHOD=sLkR|i<?T@Qsi%;QhtQ9ckoqLkeJqJ5fE=947U)7HTEF_uZi$9mc2`Q zosSX5S$~*G(HAd=VnSE6DhkIf28-%y&n?v`llgF(E7QGoeXbti&0Xx7E<5QFp&o2b zt*<SXNwF56_32LObAhXdc<Cxhom_8}O}~Hfq$XTJYcZN+T*RvA2z1Bj=3;1?N3r(s xTE<KM&|C<ns?2H6#mdyODdXx6dYi`LQ%bX<;I|n)Hw<mFbu8M3cfEG~#(x5MOojje literal 0 HcmV?d00001 diff --git a/www/web/warpauth/views/__pycache__/register.cpython-34.pyc b/www/web/warpauth/views/__pycache__/register.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c65e1ec4460ad5a9d07d9a0ce2884cf633bfbc3 GIT binary patch literal 1586 zcmY*ZPjB2r6o2D?>-E~%&3`K31P8WA3E~`8h0=;c6)F<iVxg`a&urGt*xt;H6B=!} z1aap>AjAjZ3m}!lTzf(wK0r^rvDfKh@4S8g<~Q&CX2$=9QSi^NKR<or0lbEl$3p!+ z4*3%bia!DzAZ~RFIDx`~*aBi=HgFpX2V$qS9pEk$9>iX2yTE%;_z?T8?E&vY5kMTY zb`SUfiV)(kwSC|b9Me9~0Di<(*Ua)q<H2883mlG#9zIQYMiZ4)<wGGVfi8Dii9({{ z306{OT;Z2W&A(=HUX_xe9X<ZyvnLO#vSg`h=J=0kGXF+4$>eTI3_Lyoj!hg7aLB*W zi>oV?791=!8x9r#IRWaxnFZn%F{TC7g*(>-mWGFh)fqiB?9TAfa6s9RJ8%PV?ZV4- zSh$e8us{z1@~qqkM|p4-fcOQ-H8OcM1f;|ig3CYq))0?VJ@~<c=OuyX3oIuv<;Xt` z%3B@ly7k*jUAzW5=)lfj5!Hj-2O0vR+#rNSXtWYuU>`P|*&yB}bZsTjmUBlULLc$~ z@&V9c1A;~OV1clqX_1Z^qJB4NreojaEPR+mK(TdHaFbgF+iaDQX~TpXGv6>1iP~)D z_hEtSZJBVs-7Ekdxkx+3TyqvTno4os&i^2EbEWJOK<$9qHFM~e3EbF*_oMOl;UnFX zb(%6Mwad)u($15wj*hio<4Gx#f@y!ANO@Tas{5VxDdrYQ#^Wd}FU;YbG^U1lIL$bp zBsiuS<5XU`FTT6{_``VAC3dj!ZU-hO6amUgO^QUNGi}!y73Oqm=ddc-alF&bX_Ar) zTsS%5>}uyS5%Z*0vwgu%GpU%^o2i12-_h<oIb~9N1yi$%iUEQN+aLxHP1%o3Y1&OW zOG;txzP1F@o@9wgXQF2uz3L>#i-Q>05F%rCRhLSvHz?CgNHuBL>GPyht+W(F6L(~C z!32I}KyRh9q&#I4)54_dSo<e+#_5EX!o?)vpcn_bC)jz-q!OWVMn<d|(O{CPCQOrB zI|fRxalFivw7cHFf%phh-@LcCe@n_m#xCVsYUVGs-|=Mby!;#mkbnf%kVMNjBsN(m z8{~cK6ZCB02yp~t8}<Im8=(FHiL8+&?jp)~D0cBr@6a5(t@hGNus!yD%I4;yC0mZY zHrQ^&XqhQzl~8G|WJ7`;EZsBwmNney-L9X#|99Nb8xL=zMMW8x?dC<d-dbh6sj#7E aMT||k{sGRaIlE_0n;fAC$!O&btp5O<poTdB literal 0 HcmV?d00001 diff --git a/www/web/warpauth/views/__pycache__/reset_password.cpython-34.pyc b/www/web/warpauth/views/__pycache__/reset_password.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de612fc29869922bda9a3fa917ac1e02b5206b8a GIT binary patch literal 2358 zcmZ8i&2k$>5boJs{r_6FWjh4QNk~9cumcAUl#7B&l!C%IuGqw8t0<MM9qY%dU3qpC zJ1#o~I7d#rMV^2w2Y3kP$|)Bffa1W{yOI*D)%MQxboX}meBbQf#ZvyppFcmT6^Q<# zH-0w8pW}}Hfbj4a<P*8Gu^?AW^%l9-bZnDr$773phlVL~Q#4GIn<l|gZ1OWS%#xc; z<_`He8s^E(C-W5f1sWE~Ehh6c`6b$A&kXrx8dk`y(6CBwHCfM+KS#qFxi!pl<mKrF zvYh91y#jefdVxe2c)HUly+SFp)v!$M(ZN7=^n*}FTcK{A_9Ja7PuhOpYwLa(G?fZf zLzv>1T8|#fXcPvK#5}EJ;7ML7Z9e#7`+gV%h!UHM4>;_0JBm(1<-tel-S9{TCcEji zN8d)V*V6W0>v40Zx!c-(^mTKqwfWV<=I&SDG&_P5!!Lz<9`}9R(H&?t(EybQx)gLF z=p0jvR8>5CN!q4?LxU7~)<loyu3VD1z}%uida8A3<p@r{k<QR1(S;o^XX)IgR&HvF zahi0V1_jbZ8kERO@jLM!l-Y}oD=Y_9o(d1)F{w~p&+*=DoWrt49>U_?S-P}H1Vnqs zRpID)I?9tO3UT3(IBSqzpmT>~3-($hY+O<qSHLSaiM{W5(~+)2&mG!FoPEU8b<#_0 zjE%;NVTdR@jlz~GEADw~G}!@TkNcj<j?ws_J(MOThwZ-q>IXFT>}C(!`sw<*A9mV) zFO2m1|9#hQM<(UTgK_t)yff}}WE8C)hHCY8bhh{qQKUDSuAcODkJWch+G^Au>)zE! znlaGo%3!Uhhkj$(Wc;w(?FU_x>q@<eu~f#{ezdcza!Ac&!Wfv5v9YYmP^m17A}=~z zjmh-dQP1xm7$@qrKQdMrnao(V11}t!Tu+{Q{jLO@9X5ka`zeYawV^XkKR66cu6f## zBZfKjsvl_dhViZ(ei0+Ekun)2kH;J)&G|~@+T%zWF)~8FB=sJQ{<*ofKCAj^U!Fu) zYF`^Y<06Ar+=Dt?qE!eI6_FFRxGw5=7IEDWc`+xhi5i~wY}J5G$6`zTxcC_%UV;#( z?@l-Y9sq|AzMm)H9b918C73#{(%!Rwr)J;>cmpJZ7&hrN6Jrn)f$^KAWdID28{q7) z=q)hd$RYJ(4DLdVbkG5?1k8RC1OzfrOQaS>GVs8z$tVS$*%bXcG2s=kgsJyCGenn} z9UI3tg|0BEnYqCIgi+!m6$2W82eXi3jm}dvnCBG0g4ZuYq)V`f{gV8G(j*AKAWs{6 z!H^s<40#_~G4VVQF9YJO#C?K4h&M^70Q)J?GW0w{`@uTA7h}I)CVrJS{H|IH+JDW- zA{RO3WNAxX$L_t_fH<qfhv8}v>eZ)w%$n?ssJZFrV?(=c9z+|q5<oKORSCi^Bs_}M zXLo0?yF%MeuN`#d><E}pE+NnY!Wg^l`|1Wq<;>I~>#{iVrS9X1u!Hc#WI9Sh;h9V% zJ7M5OD$iDFPx?|zWwRdxQoX~1Ijb1jDh=T-Ofq1e&eAa1gK^*YT3(<S)oPW+Yp!M0 zEq2W(wZx>gMkj80bka&xap`V_Q*3$t!$XOWP)EjZb;~|JE-mDle23H>j?L^$#QPYT z%9Xa<gEG1cL3UltS+-aN6X(Ibij@-|ijuVqUf#lU4x>DHS`%+u>J!*E7S#$KYKg@h zi**Q7_Xg;DxYh}kT$9toB}%I0hMB^|g3sN!bW@#ZqF$(UXRM?6;Bl9xTf26pFmA6Y z%~r>{@4J=RbQofLqGY3aOWZkLItv52hHrw#ahq&oe73};ywRk%U2&(f8wfP^<!Agk Xj+P<#c*14XMU^irFX~n`TfFuk^B6JF literal 0 HcmV?d00001 diff --git a/web/warpauth/views/admin/__init__.py b/www/web/warpauth/views/admin/__init__.py similarity index 100% rename from web/warpauth/views/admin/__init__.py rename to www/web/warpauth/views/admin/__init__.py diff --git a/web/warpauth/views/login.py b/www/web/warpauth/views/login.py similarity index 100% rename from web/warpauth/views/login.py rename to www/web/warpauth/views/login.py diff --git a/www/web/warpauth/views/login.pyc b/www/web/warpauth/views/login.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60bfafb6cbd81a2a656d02ab2b683389d78727a2 GIT binary patch literal 1683 zcmbVM&5q+l5dLiE*GXowEPpE@KqD=(I3zDHLOTny3u2W;&VYn3mN(rq@r-}6-R&J# z%AAH5;KoyM;SqQQB%XpB4**r=1kl0-;&i#Iy1M$Ss;?dVHVJ?F{=2VM*!{Znen7+i zNJ7!yLjjZ?5)U5hJ_;XYfFwZKLDE6lMbbstL(*$K0u+6e10(~KLnK3#A(F6N>qxW_ zl2NO7QH)VekW5;=hvER`A(F#Z@1vOFObzfYklcZuKn<Zns1eizxA4`Nmu?B)UA8Qv z1HzsEPQS>bnd^}-x>DLi9oEMrK6P#rYrCl{tKFNg7#?OS*3TPl-9MHVwL2+_`dTaZ z`YXF==~3NODhl?8WQ|+v%H^xfX~$J9>WjP*JT$8t*Ww${iqR@JdbP7~0^*w*!a)nF z^&D|zlU26JTwYhLk#qcT#gdQU@i7hiD+%hHlYSlVW&w^}YwO^63tak8U0nGvzkt;M zs)u_w-d^dG;=^^=y!D{^*!o=Zn*dw#1+IoLKk)pr2lF!=Ie^t$pPDzoO$Tm(%OSQM zZjeVWJ|-0Fh`@}wnY6NeP5|hD5LbbKAz=Htn@ARfn4BuAzyaJL#~}t#dbe~M1&Fw< z3n}vxDRW5rCcDt7%Uz+}kkn_jdYL-?jiZc!^DHl9^2O8T8Nmb^t4)=aT9i#@?R9OG zgj72H<djMW%;`uf?_Cntnb~lU=hCa$+Lc8#CA;k4qpi#yWd)IpSxAxBwTjs%=0?fs zi@Ivj<u=V$E`On8_Kg|801+cos81HFt)<or`<|RE9)EfA_%vOfE|;G@U8J9%ejRfj z68FqBI%dQ%4McJtM_@`3viJ@!y+%U3Idv*@TZ6R7s*8pah{ymD_5+&D>y4Xp)_HYq zGMP#KFLHftcU9QDbd0>EFE4Q6?GXuhAwT}1H=*YZZ|n`diQl97l-_T9Q(v0Y?rcn9 z8EqSN?zrCjOOl@Fx=<;1N_fvn`ZR?1d@ZR(L=Pq$wT!4Q{9up8-(yB>iTMyIn%t)N zJyQQ))_ge$J6-FP(|(^+%QS-@dW%S4apTn`)wZ75b#2_LaaOwHc=K*$&7UUeo8aTG zNi5$jF2T-cMGP?cvl&-knAB3{&s^NQ|L!|edR3du)yBr$7x@<MVm2->Y|A?4!JgbR tw#P?giSMzvPvWlv{bz0rX!~(ltESK&agvs6GWCwUcZdc2g#PfYKL9~BX+r=2 literal 0 HcmV?d00001 diff --git a/web/warpauth/views/profile.py b/www/web/warpauth/views/profile.py similarity index 99% rename from web/warpauth/views/profile.py rename to www/web/warpauth/views/profile.py index 6dbc13a..fb099d5 100644 --- a/web/warpauth/views/profile.py +++ b/www/web/warpauth/views/profile.py @@ -7,7 +7,7 @@ from django.contrib.auth.decorators import login_required from warpauth.ldap_connector import LDAPConnector from warpauth.models import LdapUser, LdapUserForm from warpauth.util import * - +import logging ## # http://www.python-ldap.org/doc/html/ldap.html#ldap.LDAPObject diff --git a/www/web/warpauth/views/profile.pyc b/www/web/warpauth/views/profile.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5e4cccfc8ca4da5ec41df5e9dc200ea46a1c097 GIT binary patch literal 2912 zcmbVOTW=dh6h7-qd`X;JFCnD_(*m*zO&*YV3W!n~fmDTPTT0~@YwMlF>+Z$ujGI<U z#6x&S;t%i#_(||1ka*w)3BK>F*J(?6ptg5>&YYPuXXbq8o2~xQY5)22PY;GN`_%FO z86GR1NQj>&u}I=c-xH5|MdFGiRq0m?y()1{lDhQkg<g|*L6U~_8<I4o-;|^!{gxzc z>9>m!b)B&&{l!9Gka$Uwj`TZ)-jH}%k`?K%6nazQRY}&Qzb47L^w*2tmc$q2zUfHV zmT*zRB?(vMOe$eVeh@iBz?b9|*5%TA`Bm1H(z-!!_j+qMiRf>9dN>VnD`*}BaTEqF z%F;V|p5=vsr*@d-i7nIxsJTf)llN+zw}j?P=O(_flPtByU4E(K^C0xicT;2CzfAj? zyA{XTu?gM9muA7Vmrc{KShNXiZo()xLs#@HqbJUeqI8hMISjLr9rWM*;?}|KEKM;O zo2a12(ZSs?n0#YRt|6Do9(GoE<SE>6EwqK-X&&1Kv>jD<+y%&G41>eS#Ni+f5;NpH zK0KJ)c<cxbpyd=$yRML`vU?&juE@A5<C+?4vg_&+*2OKzxFO@FgbRWIigC#DnRxio zPXj~S;udKOo1A@CB@XWO81FuG?2(Bw%$sA_b~+pyYcU5K!p;Xrc{ZI`J&7o_E=Y&Q zRbiY)q0`gkpefF0pxM3z({Yebf~gzrO!Dk7ip}=OC2@}#*Tp8m5wgl<_ktLiCm!ga zIK<MOMxcx9d0C$k`E5F3oY|u>@?<rXBjfbny4+`IK66)OheMfZEZBo6+E}(b*~INI z(kMO51C=!9Cy_a}^T;R9G|&jZeM;n81|XHT*Y+-WA9$L@CVIFV&EhA>>3J5J6Hmgb zJg!Q9U0g-NnkE48BAw$hj~v&a0f{^HG?kjx&C^P$G-UI%S}IK_KtoH$ZA_8Vx;$Hx zle&zNYF)tlHhouWfb8S8<iEh_0w|(22iH7~hbIu*vT;(Cjnjsl08btD2pJYn9#<s) zm284YQW1=sb^flMRqbq)opp~R8`_D;JsB)>3WXIqr?AQpDIj7`#_L?pJ3kr4$-Yls z@mJ9(JPy9Tci-}y%f$E>X<{-Cque@$NP(ZA)D+iA5XF|o{Z;yeEY-ck9u${IS3U1% zsp+vseG(8#3e0ZYC<}c;NAc#rN$Dz^x7fVFrptzIGzj&&$KqDF3}X|dK8yw6fy-#( zzrz{V*hhE{Q~x?;g5L&DOpm+sx7euv`RHO8S31<Njei3&5&Sw}UdOcIC`gaY0JsN< zDQ#atul<-Vf$SBpUD@(F{8pB{s<*}-Z_!)!mhf%OpB7|(+ZC;XDrV2C;4diWRq!&G zp$1qFHw9Gy9wQ-v!dL?^G{pAFTra52b2UGbb0DYR&kUHbS<C>>ZPNRX#5GB<BD?8B zCW3{6+5+Z^#gse81##9$qNNA;0#CB^Py&lu0>AM#Exo~S;Tr4=nnIOfX<V|fm;6d* zd=A7uxkE9dIowg4Ww;6^$10}gm?CEt;$WDiKz3p`(RBbgS<?lT#@#6G2Kdv9#9Bh= zAh7m0%fs$$ie|JM0_$n!x=8SFr1!ODmcNd}?xdXX!WjGC%+31I^6)n(z0XFgqf3cb ziM|HRa8<f5aLo7>@L{T0zn@Rdb0kgFDC*De5^STmf|b*A^SZ?Ce+1vVc<fa)%GniS z`zDZm1=wzR9|FrAAb!8clGE3WaE#i>wuf16w$0O_neeT~7NtyXDC|YylbvSc?FiTB zaO$jHJ$iM`EF-?-=q_35J}bnhBRxRJdY><uf+ikq^Ag$)4I&8e8e)C&g5$ZDx9YZD z%kxt@KmYlFBnwS!3-02r>6pN|b?Tzne-AzW+ibSk@TkryMWz3DNixb^tUHa(r{pS2 VHeL1jy{7G|ciC$<w_01*{sF+$SNs3~ literal 0 HcmV?d00001 diff --git a/web/warpauth/views/register.py b/www/web/warpauth/views/register.py similarity index 100% rename from web/warpauth/views/register.py rename to www/web/warpauth/views/register.py diff --git a/www/web/warpauth/views/register.pyc b/www/web/warpauth/views/register.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c451e689850f9ae82ae633a649cd427c107b13c GIT binary patch literal 1828 zcmbVMO>QGa6n@oi|8?xx$uI)}v4VvGks#I)0)`o}K*OjL24o>xm9BE!J=H&{s!kZm zS(ytU4#5Gq0Mc*)mfV2_5(j|ys@#s*;&xZRpL&1adsUsk$I+iZ|M)D0%`d?3$M~8x zE&~4y6u{im0VoDV0P_GC={le~P=qiKJs*PVLeYbH&+}bSeJBPnA9%h8Y6wLH^T_jk zP<v2}U_SEv0Mr=H#SnhLkoy$-Y!+c2*+2MuGGj>E2`<mL$^^GrRX)<X(q7R;#iG)M z@oW!SElVLc>JjpvTU*D{)KzJu-!(?*7oUCd^kG$&GPSL*0f_~#zcQ^k#eO%Xl@g*@ z5AijBpv2;zQL?8SDuB}!Kpqf4&jZje8L=G@AspQ@*f3pWf|lta(`lJLG9lOy@-AQ- zZoBZ}09IYdd$0;&&47Jfz6qi2!}AFAPrz;o?}5t#W0wrRSz$s$3T}QQn>!kl+R8B_ zN9*4~M6LDJOJ)a<4?*k!dRe23zd($3)GN#y3+sR$GBMs!5DEbt8T1fAz6bdT#J+Qa zDfVI2hkQ&0iHU>d7urVk4QS750138y>WE28Oj`m02%YMX*8CnBGW&|NAHr$~`F*E& z-~vDkC4y{UgEh`4el}gY`jv@;owQ5r-x1i?$wnNKV%;H>&t~_q#ZM4sY;=>R(ilsP zmo#(O9e}4_o}D9D01eJb$qVV2nj3RdX<>(`X_*hbX~8pPY3Q=@nua)$PJ#kI*^5l6 zgyXx&q!PwZyzjofdGBpI-7(sRdliLk1d|B#S5`JDxJ{R~gSsXY8GdM%u#&2j_5n#Z z*}BdA8dKsIN*Yq#a9#7pE>E<)%#4-#cxekYdxLyXE|0k~(or?Pl*ZC2!?Kr^h^gAx z9Z@<VkEpK4RD|1|D#^<j<zVTC(b8EO$#uGn$+1JZy2$YmdasBChWEx*Q`(rCfdhkw zJk!P|4sMF6c*~LJw2TQ}SFqvNGN#ILPEfPt<)uuh_@u?m_3NU^lt@Gw(=KOtt{WK> zelfXpSCGq3%c};9jwy?Hj~2RBd_byvfwP12;nv1^qG)y>g$i$zB;DRJD1jL*<{ey4 zs@k3q^jW#k+)=Ix*O|OAcde*jxP05zP!{G>a>61O1rs*jJR{a&2W-OjgAY)0i0=sB zh}}nexbs9vzs1JEG?>w?8oMsj6o?$5s*cl2%VYU{Dr>rGjc*@y-0OX_X)ZVW%@WT= z+F0XYvjosav!sic0JSu+?T{V+7Zl$r%4EBtsDxC;4+yn&t7vSd;`dSFK)hT22b`xE Sq*3xCYMr5KMr^wCM8Uu6*@hkf literal 0 HcmV?d00001 diff --git a/web/warpauth/views/reset_password.py b/www/web/warpauth/views/reset_password.py similarity index 100% rename from web/warpauth/views/reset_password.py rename to www/web/warpauth/views/reset_password.py diff --git a/www/web/warpauth/views/reset_password.pyc b/www/web/warpauth/views/reset_password.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a22e39704aa733b7e26be7276d62b0f6fefb68df GIT binary patch literal 2630 zcmbVOZEqVz5T3oW9ovaxCu!WYP&K6#S-jZ1d;&$hsC8*YNTZ8sDoe<^_%`-A_u|~H z;}j(l!u`k};VXZj{0)8w;zK1QcxLaMKqS7@_Ra0i&dkov%rk5Ik4pK@?>|57Q}(g& z{t}OR3F6@=C?M)yj0JVYoNrOrnvZSj+GcD~kfSh9-8_W_>J~__6`O(u3X9Y&rt=&H zB?`;bEvNH51&b6eQFkew7bvJuhcy={Sf;Q_-71AO>ekZrA_XfHu2Odu^Af#)i)-ww zSEd(mah=C|jYXWn{~Mp32A@l>f;>4G$-aINOSKd0_NlM5u7ds44SdhlejK%vBu*NF z<(EJnX+3tN8pn~6DYpP_A|p>`QWea%AAGfYKaL`po-4D3cQ5zdb(NaNi3eL!cj6-% z=^`t7?)W=3H+3DH-Tj`^-fMSyohRS4cY528AGSM>zis!~UOs#7<E^UTXrd8LEodg_ zT+kV&7A3Ff`7fkx8s%t|C(p|G$ij^oiF3>?8WrZ;9NjpA(r=^}Xhw8yo8=;%+0-k| zMKLarF4Jg{!!oLnm*+k48!fXI3s;$rYCIJl%wtlex?bTVZk<7Ll{}cm-bI>OBqE~y z<5!f^Yjjkm<WIPkBXO3auOG4WH9}_76S3#u&ukJ<cm_qiPP)#k$T)Vu3S3DuzN42B zo`mDv8)s2RFo-6;XJS4<ydyW1n!_nW*AM(3F;Z`V43X~7TCE`NyTLG4y7gZ>t$WI7 zdGcT~P`uCHq~DiHZ63zS<~^m>!FmXb(#trTQ(q5x<sGa{-DK=e^zf=x&Gpb5$f!Bg zVbI_*Kr)Decrfszfi7V@ka`<andls5yHEBy4vQGM*c7!gr-Yoth3jygI%O7N1wOQq z9lB~5_y>lmhVDn2p@EaKu}R`aUL2bJhVs<&2NL*Tb=FE%+><nLW0x0s&5sUaqtZU@ z%Q0gpjVuGnVe1Y@zroQqyCm{>!gkp~J|P@4=~0R1A|D$n8yJ!ys)bQ29_tpz54$C< z8JS3)_;RYQ#Iremo`o#xnb6i@Ky8AMsEU%X#hapz_Y%H$L|Lqeo8afg9lOu&GA`M- z`*_p|Tspm-0S(}q5k2^RnKBUBsMX^d?LYr(E|Ft2qI?->HX#r|Ag~5C#=`<_pvF<k zfB<m04mXc-l$@ExGD``)$n6r<{F5LQIs;&dlA1^d9?+VN^1!W4>eoz!SAaT(@=MYc z0ty&+$F~F;9GV200i!QNs5s9X+yL)DYJstN21nP}1#iA9n}nqqqY`?le^Dhf!W)!m zYd`t|5C$9<>CiGjek8>C0#p_doXn9jZABXps~dsdzXT#d&-8WD8wSkiE@&qin7N8~ zoExD27N>&ywCS9iQLHylxMLeUUx1upGM{{m)`)uJ`Uf<_o;20SQ-`kwcne}+XI9kv znExL<`$IPx$ctu@f|UJAF}A{{Y!EjHjJpnBG{!YtDN_4rHM|_fQ&a!_M1t*^v6B5b z@|43hX8_^JKx*kQ5S$t_8DX7dBAqvw#VB>wm@r>o1IfH&fM2+1Hb0p7f!FgQV`3+c zqyuSkZZWxpCGYIq1~IWp+nqr>i;SnHnU1HubiqW-T$p^Sp64GPO5BBgX?!xW0dBM& z4wc@8&RtkBC^qD^pv-x{l7bJxGASdwE|x4?tOL+%fO6F;i4R1@+5o)o;=N+61K1UY zz1840;26SjbGUsw?}4B!QS~DvId1mjL^kETk*PFfoDEYknGoL+CWM+(lrhyXPIP~w zm1%dV>C1v@UI~iH9sh5bS6p+V{lLWaf)mCl1(jBqY4luXy!rz&*~I0haWkZa<GhU} s=MyHMf?S6C^<!Ryoh`U93FPN|dbI(<{SsfRE^7R>%A#)7ilv+X0P%q}<^TWy literal 0 HcmV?d00001 diff --git a/web/warpfood/__init__.py b/www/web/warpfood/__init__.py similarity index 100% rename from web/warpfood/__init__.py rename to www/web/warpfood/__init__.py diff --git a/www/web/warpfood/__init__.pyc b/www/web/warpfood/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c65345c94329120f3084f41a0ba644b90d7a254 GIT binary patch literal 122 zcmZSn%*)kxw=gW30SXv_v;z<qvjB+{28Lh_kcgiKkYGR~ij{$4`uPPV`sIm51(|ti qMTuZmT7G_tetdjpUS>&ryk0?N2?tP}O>TZlX-=vg$h2Z0W&i;Gxfn43 literal 0 HcmV?d00001 diff --git a/www/web/warpfood/__pycache__/__init__.cpython-34.pyc b/www/web/warpfood/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfe5e7759e507bf8d766db3d26244c9a402a2623 GIT binary patch literal 105 zcmaFI!^_oow=j$W2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUt)Ut<%vZFY5Dmn g`tk9Zd6^~g@p=W7w>WHa^HWN5Qtd$Mi-DK{0PZdos{jB1 literal 0 HcmV?d00001 diff --git a/www/web/warpfood/__pycache__/admin.cpython-34.pyc b/www/web/warpfood/__pycache__/admin.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b82e36e23068e2ab30950519eec6f93691d626a9 GIT binary patch literal 778 zcmb7Cy-veG4EE)xP18b)n0SORq%VLF2ni-Cq#}kar;t0UR%uf%DX4Q9nb~*%Ug<W( z#KHqGVc(I`fu*O|vh#hhKl}34*$H3YpKmw=_<)V$V|;>EzMvEMFvtO>3=#&6atCq; zt|fzs3(|uXgA3t;@ZbqS4+!vK<r0uIOp3gw<@q2QhG&5_FQ|Df%WHxN49@~<UI?NE z!zlbjZ4fc-r(!yuVZaVEdQ~4B$_~-PKmut;>4`(r3?oPP&Wl0}rFs}=@{~#pB3B2T z&(f*nT!)-b3$e&4?r?s;NOOz4feNsqao_uK|1nkbJ1o^VI^y|Kc?dVrN(WuXG5J=~ z_DI@UTFFtNmbErTx1t*4sQ8}<8@1?Nh^~!Rccy%+&SoiB3J1@sZ5mV4?nYzE2T?oO z6_a!}D&nk|Rcd^zXd_9tURjJAmU*cIB}e13l1jHXE=7lz1REJ<hq|-57c;E=;8(Ds auK(>t2S@fUkLjl<chU7&=pV4IYwZWV^p;To literal 0 HcmV?d00001 diff --git a/www/web/warpfood/__pycache__/models.cpython-34.pyc b/www/web/warpfood/__pycache__/models.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d0a419f1c2fcee583131687a457f4b82a750500 GIT binary patch literal 4022 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 literal 0 HcmV?d00001 diff --git a/www/web/warpfood/__pycache__/urls.cpython-34.pyc b/www/web/warpfood/__pycache__/urls.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f2625960a07455918026b70baf233d0d45b8e6b GIT binary patch literal 626 zcmaJ<!A^rf5S^vamX_A0iF)+XsAvK|&{Qv8jfutsF%r_9B8IZKP+K{8@oW4guEv8G zKfsf_l(ra+%kHrAcr){6*-xX>I(vV(CJMkCRE940r(z|~!cZ{@gaA_l4gn&41wsX` zkN~X#)_|%&HF!~oMCyRT6|=EInt)n?=qscJSTB(F3NZj11=5j-uYuD9+J#GV>qBS& zljOA-55<cdWzE|-$TH6!<Z9$i(b4A~kKGAlX|`8>dJJ%GAD&zclRL!J4e01*er(zU zr@Q95l9L^j0V(tS5Z!|QXW;H8u;h+ImLSdce`biifEEcDr^qXnw|^y&)U^Oy#Ehr^ z2-w-gSGnh=p7-dz7x~N@vuI+8V@kOAqp<8%91FE%t4Xc}5yeHWO3&&1=)!52uGHih z)dG22WQ@HuMII%uz~$vA%vayCr6yUymQ}6zDQ^y^jLt$F5kX4~VS1#c_Q~@31_{o$ AEdT%j literal 0 HcmV?d00001 diff --git a/www/web/warpfood/__pycache__/util.cpython-34.pyc b/www/web/warpfood/__pycache__/util.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ede0a54b49b25d9e922cba2ca4b5c8bfb9e08e10 GIT binary patch literal 586 zcmYjNzi-qq6n@UHUhl3@5IqTXz99oCVz>zq6)UQcPGZP{+_RG!;`neJRYYYf9r;7} zm%K9F!i<p6@g*mn>b&<o`+Gl}&%dWf<3FcAKHM>)UvzIBVE+c*d;tg;ql!o~${8`m zNChNdAuU8iBBn)8Bs=0@PmFfN;hq@ph{-^d=$z6bN9PfV2lSmN4@o?vWqQ29wUjbH zQngzdt+|ias_VFqDph~><M;hxc_pRuQO&jVF~2me^YQr*lFF1g=E=JuA}h42^Z2|E z7{yE3te|;V0WgNYg*UGN4#wz)=$7@uZv*;<O+XG7(hZowpdR}f)Z>Bf0(x2mG+U<0 z#ipOwMe}Cfbn*Oo_M+H?U^f4@+ie>8*qXK$J}xT5o$YIV2$^Z%6RwehB-vW?lk5}Z z{yxsmuDM+o#)z}lsVZB4^^?L_&E3bo?hr*y1R!?8><sZDjq+#W6R%5?txWB#y3DRx z&1==k%t^hjxRZ{T&7K|p!cNdT3>YrH2Pa7Q(MxSaTglh`yERk5F$>wF;X4ig1H4^} A=>Px# literal 0 HcmV?d00001 diff --git a/www/web/warpfood/__pycache__/views.cpython-34.pyc b/www/web/warpfood/__pycache__/views.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d987143db0ea4cfe524b3ca7d08191879da8f98 GIT binary patch literal 3590 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 literal 0 HcmV?d00001 diff --git a/web/warpfood/admin.py b/www/web/warpfood/admin.py similarity index 100% rename from web/warpfood/admin.py rename to www/web/warpfood/admin.py diff --git a/www/web/warpfood/admin.pyc b/www/web/warpfood/admin.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a833aade996ae75ef5ca22f12013cef216bbd45f GIT binary patch literal 882 zcmcgqxlY4C5S_JSCoxAtNk?f>BtL)<heQWL4niW0W$aDl$VaqZK&eAXO~=Ra4SWE+ zStr3QDOh=C=XmRVGqd*Bp7-(jb|2GfwXmN-s&}XapP-B=7c>?m*taON=uQfn*(6)E z6qLY#>(B&ti(ZMAL=Q-eU6Vk%ZE#Kl=QeSjHLh!L?FO#X#Ceo-Y2<sLmVRUT0+x25 zq9jj?+U3}>?n7UdWipcLIgRBx=Ql+%<N{K4pd@i^!N`YAz6GT@9EL@d%P`b@TNvhL z@|3}?Q3#Q-sv}s#a;}Fjk(#H)L`BA$;Oe0vHJC2~{%IRhvEf?!02`CLjI^AVYVjv_ zfsNAv&uJ?z+^rqRn#;OTw+a=;`ah|-pwauKa^o{Ey$_YlqGDPO;<C^xeGCvG%}8!C zw|0PW$gDDhQgWJBS}M(_8zVP^yJnoJ$qYg7t}yG)2i%U$$yE;mCbms;4WE<xshsj7 PtGJlH@SL7Fv}^eR#T~5r literal 0 HcmV?d00001 diff --git a/www/web/warpfood/migrations/0001_initial.py b/www/web/warpfood/migrations/0001_initial.py new file mode 100644 index 0000000..b058e2f --- /dev/null +++ b/www/web/warpfood/migrations/0001_initial.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-18 15:07 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='FoodCategory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=250)), + ], + ), + migrations.CreateModel( + name='FoodOrder', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user', models.CharField(max_length=100, null=True)), + ('article', models.CharField(max_length=100, null=True)), + ('size', models.CharField(max_length=100, null=True)), + ('comment', models.CharField(max_length=100, null=True)), + ('price', models.FloatField()), + ('paid', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='FoodProduct', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=250)), + ('size', models.CharField(max_length=100, null=True)), + ('price', models.FloatField()), + ('food_category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='warpfood.FoodCategory')), + ], + ), + migrations.CreateModel( + name='FoodService', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=250)), + ('phone', models.CharField(max_length=250)), + ], + ), + migrations.CreateModel( + name='FoodSheet', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateTimeField(default=django.utils.timezone.now)), + ('estimated_order_time', models.DateTimeField()), + ('closed', models.BooleanField(default=False)), + ('order_user', models.CharField(max_length=100, null=True)), + ('order_time', models.DateTimeField(null=True)), + ('food_service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='warpfood.FoodService')), + ], + ), + migrations.AddField( + model_name='foodproduct', + name='food_service', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='warpfood.FoodService'), + ), + migrations.AddField( + model_name='foodorder', + name='sheet', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='warpfood.FoodSheet'), + ), + ] diff --git a/www/web/warpfood/migrations/0001_initial.pyc b/www/web/warpfood/migrations/0001_initial.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c994dba5382374745ddf790c4a230c9cd8d1b5d GIT binary patch literal 2392 zcmbtWZEqVz5T3j9ThgRS)3`5$mX{W4KsbTV2$4EOLZ}qkl>qbMbh%wSXU@0Q-EK?z zwTK^t#4qC;LV{=J&URb~RlsMhcV>2Ho_S_&*THX_>wo<6>o+k~p8&s~kx#|<m?(Tb zN{OZ(4L$N$_9^vg8qhGHX^n=pQX5cOr(r{OVBVB@jdVbh7L7bob^3|u1<`lI7O8*+ zod*0Tf8x{eFtghjT$aQ}=`c;K&ZD&G_-t9nFipmJWD}DWmiJAuDlNXUYnVTpn-(eT zLi><Y_!-G)V&vLqykpFPsZNs;C}8;vMmHIyf(c?>#s=v%QcY4VfUb?8Uz26)r0~50 zr3dBM$HZSc+_;Rx&2tW~lG@_9@W!#WFE(Af*tB!8>AIL0HnIO*5rMYNX;!&3S97^> znOy#f9Q7|yU&3=!@NAO0MfxgDwrGNiY}4c#soSJpt7sY5R}t?0Z-lR(V{B2=U^U8} z%S5>=4tIoDByyc5yEJLTA$N;<qq0_2cvHmHDyX;4L3*hx-kv+JT19-`6XiwJ-Jesp zC@#wS4ykwLMZHJr!K=5wpnyBP+}M$g@4af{`y3Y=$2bUXQh(6-0Pm!&VaTGXb{m)+ z8>4!W)nk*N$xA&-bgBx+?|h;xFNvHrVVrBMQuYcIvpktb`C0gbK9hI9(0LN2$#X5s zpX&U?6grd;?B<IjHxF5!BGHdws<W{@O@4>j@$tbh9_LEuvedChoN^Ubm!_@>DavgU zr&^X22q((eOs6`tu8su&7MJE(1n|5^=~3iT>lil&`8qes#nx>?9zhP{dGZXyWFd|; zZMBs%&$u>}&!T+BOS`;(&eg)<K<7_6s>DAvnO@{GIMvz;ScMpl&qG~UPzN4E!^wt_ zwBw^RPC=P+e8`p-rr?|?3%MAA88(T@E?3Z1U`m?#bS|sF$@9ipnY?AJQfI-+76~dj z6oPu^Z=PA*xdpXtVF<->7)qot#7*E*4Ur4|BzIc4PqM_KF{CS$p6N{KEKYRMm#c<B z^`xsFG19&;&P6yxza4WI3eIEPKw8?YcN*oTo@qKxO=L@vd3k6|s-x_j-Q+qMXJ4X6 znP4@Evayk}suM{;3XQu=p!N<2y~Cr=Ew{xH3iJepSz>TDNekJ;b$E^<Tij`snP;Lr zRB9R5%y4PS9ofMWS`Nj>5ckc@?sLhKY?MbbWBT`(H|zev!NEsiMO}Ax*5^o^aPcjM zhL5MV<~95W-d<4sdVBJ0Ei`S&Ti%D29a1&B3oYB)rOj)2_kH-l(_!MPVvd}3If~hb ziiG)+yskQt%9WM64dX)JE&mF1=bZNM@K%0#swKi;cg~*Vv}8tR|B)Ukz$az@eaci7 OEezZK4R6ES2>t>*(E2z4 literal 0 HcmV?d00001 diff --git a/web/warpfood/migrations/__init__.py b/www/web/warpfood/migrations/__init__.py similarity index 100% rename from web/warpfood/migrations/__init__.py rename to www/web/warpfood/migrations/__init__.py diff --git a/www/web/warpfood/migrations/__init__.pyc b/www/web/warpfood/migrations/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c25abb283230cfa09dcaf642eb31d30b1383cfdf GIT binary patch literal 133 zcmZSn%*)kxw=gW30SXv_v;z<qvjB+{28Lh_kcgiKkYGR~iuHhE`uPPV`sIm51(|ti zMTuZmT7G_ter{%ZQDRAEeqOPDe0*kJW=VX!UO{CE2T+SmZhlH>PO2Tq;9?+V003VY B9H;;Q literal 0 HcmV?d00001 diff --git a/www/web/warpfood/migrations/__pycache__/0001_initial.cpython-34.pyc b/www/web/warpfood/migrations/__pycache__/0001_initial.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e39c4a63cb265b0bca1271f1d39233ab9fb0e44 GIT binary patch literal 2125 zcmbtVUvt|;5MTYZWy?)S?Sv926k3XbI)MkC7$(Lc48ycAlg^Ye4;n>xc4TCoIY}+a zYk1~+@XElKxmTX@!UyQ^!0t(M;trvc!M4tOySKmH{q5=QFTd0J`?o)y{O$w%370-L z%6s@^-{ZjWXFvilH(+dlL30xl6Xq6-EtuOdwo9!Ai34L-d!XDP`AcR4bKqxma)4Vf zYr+}&HGx@h*mut{0Q3#DUZim(7!Q&-=Q2#PzNuRCcq+p@7HOv3IU1AfQAF$OPZxzf ze6n9G01lKLCO0-IU(9TZvJKpU8K#6v3(8!0gR)?##Ptn5;?x7y0@j8zuqU|K1X_kl zA6N&K1}di}3g!jijq3oeT>@MO_6o&CG>Wxxwdv;7rta0Io;I}*9|(U_Pusw@sLZOC z#%e9EUZ<9SBZvJ*sxRboOXq{cz6QJlvl}o&s@GtKv}^-=y`p96tY-Me|IYCCCB~LL zwN|6Nd7UV4X+Uh{mM&xiW;bEhML^mu>`rB^y70E1u6BXFb19`4cE#NqyxJ-n^PW~- zMcunKb<5`VfZYf7p5FiWfc0PQeg+op@Y3;p?fAjV96zME=s3k!eiPUOe6t72dsx4| zkCmN<bFTaYA=oI)`Bcag<xXOruuPdTQ+`<FB8VhMBU9~#jOU>|34Y)w%FDQn!z4cC z2g-lS<&nsEpyAA~_VJ7ee+m+wPV?jQ=Xew-k79fy8JEf~(DfWo1i<)3lBh-~^EgVl zvNMEJjY!PrJk6DZ@gmeNLQJK>_#`ZnT(t@5TPau(<*GBmNf6b!dm;_+JmNW5W-d;9 z&qBGN6$A2FR;UpUxqM3K&f-|4yv*<LnDboO4B=FlXE|1jbq9jd4sgbm8zopLQ>{`* zmDIAf`#K-g6833#C4L>TrO!;w)woUT7gaHiW`69EPU9;lql`{BR&hx8sK2F}fd&Zz z)d~UxEfS8h9|S)ZVM49IStCy49Q&kv#uq$gJdI+WNj#WAwMV+K59tV(w(imp`+Y$D zSKjD2l%?1@NJN;Ivj4dd2@liSA|#Ke>DRa+Ts8~SsZb_6Qcc|iydhL$G&~#)_rFk` zedO{na#(sgMII-aY7%Rw)Br0L&s1~BScNPWc;Dzt=2wt=n4BJ-f4n0W`3~_BrxO`! ziTK*NxRiEwcXvMus=5b@6X~FL3!m&e9DLI?UE4EU^S-fdRsY7e{;n-GJ)Ex@4=Ov( zD(N<A$<`}vhHKn45d*(EO5dYaOp3gaNWL^Np7Kgw2JA?)UJ`w4sT`Cy=%8jyenL*Y k%C1=&)FkN`7i5&ukk&UpE&Kl&H8yMFux@S|zTsQ{05#hNdjJ3c literal 0 HcmV?d00001 diff --git a/www/web/warpfood/migrations/__pycache__/__init__.cpython-34.pyc b/www/web/warpfood/migrations/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09b0e1a4a1532dfec165e4b806eb7a75771f4237 GIT binary patch literal 129 zcmaFI!^_oow=j$W2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUwZoa1tt3BiA4pO zd1*z7U{+dweu{o>W_nR#NoIatv3`7fW?p7Ve7s&k<t+}I-29Z%oK!oIImJNC007X9 BAAA4+ literal 0 HcmV?d00001 diff --git a/web/warpfood/models.py b/www/web/warpfood/models.py similarity index 100% rename from web/warpfood/models.py rename to www/web/warpfood/models.py diff --git a/www/web/warpfood/models.pyc b/www/web/warpfood/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe285b0be441ac3df4e2cc1c0bab81023d06b8af GIT binary patch literal 4454 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 literal 0 HcmV?d00001 diff --git a/web/warpfood/templates/warpfood/main.html b/www/web/warpfood/templates/warpfood/main.html similarity index 100% rename from web/warpfood/templates/warpfood/main.html rename to www/web/warpfood/templates/warpfood/main.html diff --git a/web/warpfood/templates/warpfood/view.html b/www/web/warpfood/templates/warpfood/view.html similarity index 100% rename from web/warpfood/templates/warpfood/view.html rename to www/web/warpfood/templates/warpfood/view.html diff --git a/web/warpfood/tests.py b/www/web/warpfood/tests.py similarity index 100% rename from web/warpfood/tests.py rename to www/web/warpfood/tests.py diff --git a/web/warpfood/urls.py b/www/web/warpfood/urls.py similarity index 100% rename from web/warpfood/urls.py rename to www/web/warpfood/urls.py diff --git a/www/web/warpfood/urls.pyc b/www/web/warpfood/urls.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bddbc967f9d63e88f5a80544736c0dc64f3eb91 GIT binary patch literal 715 zcmaJ;%}&EG40hK2|1lu}M=l5oNb3tsg9}%L0CAWQRke7fsB21-v9SXeo|Pxy0l>~S zR>VY_y7AY~_7~gvY}GG5p6`aRTs8Wh)2rXeNZJBofU$sq0Kt9%;sV^F0O<faAd4VN z@Lmv%lmW@5U0ESjz>-C3E2Iuswn$@zGyy9XX)zL(U{D3wh8uT_Bt&1dTtO$}keOuh z!eQh@SIIu4(R?0w2c}3)5{%LC9i~B+`Xi-`-d}TGBAj~e*;P+JA{sxE{rl<ZF@?7C z5kAxO(K^hiFpSZ+K^w#OeuXdT!&qsQ`tVPlG>D{4qcVwEPQ}iqG|bM6!C9&@^N*O_ zUs>|>OP4!iI%MQikc6r`RLQ7IJ=NEQ!A~2gZ?bE<U`m8XiNu+0FJq>~)J01ccQlPP z!g5WM{Cr_cpfYJ-3}%UT=|8NE9g(L}<MGs@WRwN=#4<cq*G*pykGeNjauQ>ohp)Lv LN7RekV)1+fr#rhp literal 0 HcmV?d00001 diff --git a/web/warpfood/util.py b/www/web/warpfood/util.py similarity index 100% rename from web/warpfood/util.py rename to www/web/warpfood/util.py diff --git a/www/web/warpfood/util.pyc b/www/web/warpfood/util.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6f7e86988674bd26070996e45148576c06dc7ca GIT binary patch literal 689 zcma)&J#X7E5QdLZJ{%`$o1s}UWHO+oa*)AYilRZ+ASi4ggO`FaDTS>_3L=G|MmnWy ze{Gj8LGm6|xNE56>E(mF<MHx8hvUB|zpq#HZ|&m$2|GAA1ryW|SwTxd!U!@MDOgT3 zwMA;1W(;-)u)6`H0qkwScmVqe)W|%b*%FzD^owYjlX^vq;x(=`PgsS3iX%R{xboJ@ zxQ#<=)@vEJpc>=8$1%hgMvGgmW8zL)okHb}?_*LIN$qfwuNktu93&T&%Hk4M7aP^e zT89-kkzw<NpRvPxxCj$;PxK&oHV+y7gvcnua=Hgeh5<nzV@9V{M#qbSFSx?2P=@PG z!XyM{le6-?GLQUd=Bbg+_f92MHD1O!I2TXTD7Zv=gR}@6o~`@N7aWybIE9+}Hcszk z*BV!KGO5aYHSMEm%JxUxM@;2AO!g~h@8OslBk@*T4XwNbQ{SYkeYx^3cIKwM?X7fX wt;?uw+sLS+tiy(;M(134egyZwqnEceLf!}KRp023JpXV2_eSL6D19gSGodGvVgLXD literal 0 HcmV?d00001 diff --git a/web/warpfood/views.py b/www/web/warpfood/views.py similarity index 99% rename from web/warpfood/views.py rename to www/web/warpfood/views.py index c9e77d4..e7f5bb2 100644 --- a/web/warpfood/views.py +++ b/www/web/warpfood/views.py @@ -61,7 +61,7 @@ def view(request, sheet_id=0): if product.food_category.name not in pages['food_products']: pages['food_products'][product.food_category.name] = [] pages['food_products'][product.food_category.name].append(product) - print pages['food_products'] + print (pages['food_products']) return HttpResponse(render(request, 'warpfood/view.html', pages)) @login_required(login_url='/login/', redirect_field_name=None) diff --git a/www/web/warpfood/views.pyc b/www/web/warpfood/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..469f7f68a221f1c7abf113b25027e4299b3571b8 GIT binary patch literal 4108 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 literal 0 HcmV?d00001 diff --git a/web/warpmain/__init__.py b/www/web/warpmain/__init__.py similarity index 100% rename from web/warpmain/__init__.py rename to www/web/warpmain/__init__.py diff --git a/www/web/warpmain/__init__.pyc b/www/web/warpmain/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c218eb2ee213553a85a669c8552205540262bd5d GIT binary patch literal 122 zcmZSn%*%CEr8g{@0SXv_v;z<qvjB+{28Lh_kcgiKkYGR~ij{$4`uPPV`sIm51(|ti qMTuZmZenJhetdjpUS>&ryk0?N2?tP}O>TZlX-=vg$h2Z0W&i-!AQ#vG literal 0 HcmV?d00001 diff --git a/www/web/warpmain/__pycache__/__init__.cpython-34.pyc b/www/web/warpmain/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bb97336e622902aa44c1127a11ffe67df05c916 GIT binary patch literal 105 zcmaFI!^?G5r8kTL2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUt)Ut<%vZFxrv#1 g`tk9Zd6^~g@p=W7w>WHa^HWN5Qtd$Mi-DK{0L)YsQUCw| literal 0 HcmV?d00001 diff --git a/www/web/warpmain/__pycache__/admin.cpython-34.pyc b/www/web/warpmain/__pycache__/admin.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2876193affb82e9d3f92fda42b5b5e7d20f5fc23 GIT binary patch literal 404 zcmYLEu};G<5Ix69nnnR4G4Tmm(uEPBGO<9GN(>&bOl?)E;-uKED(15C7cBgeS0)xd zfQhrCg5`U9zIS);{9T;nkC$%`?*Q<L@plqra}0ZjAn_9D05kzcfcSR=T?Co}qd*ja zbqtEafxxY#AY*vN5=^0xz##}M1)0F2O22R-RKz7h>b6G`H)?N}K6^X_$sEI$2nxI@ zda}r`v8W<9^&L09y{V|nIPZm4oV%QJJ;+_>dBOSfPIRO40Vcyy0e;Tw*<P597HvNZ zJJg#O6QexwmJvb`g?Cd;*r{BLel^s~q2HSJ$#|Ka9s6svQ=K&wvo14g)!MBxF2DEb buwWSUZ$7eVD8Cwaz4pJgDMCq0dO>~x-o;k2 literal 0 HcmV?d00001 diff --git a/www/web/warpmain/__pycache__/models.cpython-34.pyc b/www/web/warpmain/__pycache__/models.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18024819281970ffe5aca591855ab604a21e5b0c GIT binary patch literal 1064 zcmZuwO>Yx15FPJ#!UjSFQV}=cvX}J2u|koGnp1OW#9=R%iJdf+cT?<LrBvL)l^?=i z@|9CB`~XhOI7t;st@Z5q*`9ghXaCN7-FNSQd~yun7aX(*{SkIMLnHBHpaCidB?Cs| z0CWIV2xYh(hoB><Vkl!^V;O;r;X5viL4|OYzy?>QFqR3()K8?KVvlAZGq@-^cbEtY z=K5{DoUNqddf6x=v_&kb5b$2-oV>G@sfgHpi_sflw@3{X5KHvRz-LD?I1E6BfW$Ts zAV*@g$2Y*r#3L!rLYaBLL*)H>R(9c@c==?<*F_Vxwys-=8?IHoXfE$4xr^#n>#55{ z+pKuKT5}=g43F10`cpr}Zc{Yh0ImSbXA>+lZkCN!=tNfO`A;x8uK4p}c)S+ox)RI! zczX`R>#r{5+%|^u9z_b!0K3hJ(Qr30DRP%_UW-a`?z)`g-d2;JbN;0jdOKr6-0C`~ zm%^Mam6k4Qtum(T(W$y=wrE-@YsEsj-bc}>>9SHgd}b5^(mcftp6`JnZib|xN-c%V z*%2GCoDBkx|Dz!h8PUSGXbv?TZ{?%w6u>5+D~D2E6p_oQ;QuZIorVwe=0PA7z1)kw zz&NO{k8|7G#~GfhM)=~*OWZsu67vlIrcdTM87jxcUI&-V>BQ_o#Uz-avRy=x2I$!c zP0kW#UZXQ9qK6R)ek_DJ!U@Xh<;|HNPl^s{Id7ZRpq7Sebsc#n>cwg(KYKOHd^eus kGqHy9yV$=Q&)&y*ETPLzws+(MT~V8%=?8t*4_|fv0&*$TivR!s literal 0 HcmV?d00001 diff --git a/www/web/warpmain/__pycache__/urls.cpython-34.pyc b/www/web/warpmain/__pycache__/urls.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5029dd040622b0fe55efdc62e0fa573e221181cc GIT binary patch literal 501 zcmZ9JJx;?w5QX2`UdM3~2q?)3(ztO-8ie2iX^<$k2->hqaO9t8?GQ*yO~)bNN^YrW zH~<y1j)H)dcRcgW)AN)3+3kgcljo~f2E60f38+7(TfR_H^f07A#vmA&ogJhOG8e+# z%`Q?88HeD=d<Y**Gbj(*#j*v(p?o|!4Qw?qXkf61ZD_t%hI`n7_ObLEW!J)m2hoP= z;W9e-pk#<x?XFEqFE5ix9yxVe$?|SqNTX^m*PC+d%*NEoOxNDj&cRI1i*+>_3w~jn z?a@rCEXk9yGO|jFoHmCIx&E=*j{a+`H3`F=&`#4Rtov#y^F<Ng6!~pTxk}?uNO7={ zW@Yom_X#PDYvJH8j2kE8(aLZtHBWM-9|UjG)*W(N$*R&OFW+D~R%XlBaXi@@P3#xr c)ngr;W`$a(`iy=n$}W{Y>$4FbIzu*O-@#XZa{vGU literal 0 HcmV?d00001 diff --git a/web/warpmain/admin.py b/www/web/warpmain/admin.py similarity index 100% rename from web/warpmain/admin.py rename to www/web/warpmain/admin.py diff --git a/www/web/warpmain/admin.pyc b/www/web/warpmain/admin.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9546890eaa7477c0276adaae4f591ccf2fceec8 GIT binary patch literal 463 zcmbVI!A^rf5Pi!6Y7=cg!6PTQcr->mYY#LrDF?|~w#_!M5Oz)DxnBKRKR{=e#t(4A zJl>munKvuHFK4eeUoRV+PE7B63im|N&?C?Soj@fZSVw3hbP|<>&;t7yTH+|sNU%(> zB_87wI09=bR4JMSt1P94=7&xui1~y-HJ!1O<he_IaQ@;%9=P^ri+_2faOVUX?5130 z#F0e=p3`-0Rj2FP&w}Xs=Dj63eMKn*=B|kq{osp(8V6&yqYA83#umX)K75qi^o+tW zNuy=P!e0?Idu4ZhzUi$W&09$s_&EW0;~qK9)vYVTl5A_#JL9|_gRN&ShSkD||9A_# R-cH-y@f625yO0Yx7r(elT}l7| literal 0 HcmV?d00001 diff --git a/web/warpmain/apps.py b/www/web/warpmain/apps.py similarity index 100% rename from web/warpmain/apps.py rename to www/web/warpmain/apps.py diff --git a/www/web/warpmain/migrations/0001_initial.py b/www/web/warpmain/migrations/0001_initial.py new file mode 100644 index 0000000..e9f0080 --- /dev/null +++ b/www/web/warpmain/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-18 15:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='News', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user', models.CharField(max_length=100, null=True)), + ('title', models.CharField(max_length=100)), + ('message', models.TextField()), + ('created', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/www/web/warpmain/migrations/0001_initial.pyc b/www/web/warpmain/migrations/0001_initial.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47087c65e3f582cebce7e20fb9ef2591517b306f GIT binary patch literal 1006 zcmbVKOK%e~5FYO%@3a94F8l!Y)CA556;f5=&>qrAh+I}~JlQ(zBeK1u;TnDoM<jk3 zS0tG6rj5AbU5#hP<MH>+O!#Zq`~BnR$0ZzANc%YiV5g)g`UT_wg@A<s!FB+707VFk z5Q+#E5qU$v5Y{oQ1gHqU0qg-jEn-kH+$1f^qyNxK1Zi$WqAvBaQkdr2p^>>w0zT=H zD0F6|(^Y95-zz98x2{X-)x*gn(i8H&XQbarL12IwFszL92r!0q>%f3OGsrfqJB*OR z2pY>4U>8&yREID}EAn)GSPvBaeNY1q+e5%d!+(zUAlP~0oqeXv=BYOaphnF_j>%%q zkWmSTFuO^f5L_3LC}n{)E7!Pf_^veO%GO*Ct=xb%S-UD-8k7!|>yu++bRo?y{fs+b z7mG&ATz^F${sql#Wij=sIn9R)|3Xb+O@ZZonq!%{J59|z;HdMwj@i;K$GS~gf!4~b z(H~xagi}`AR4SEl16+qh>fcLK|3aEl*XkU}WNvd)qvMpi)Q*sPm<l&oDlC^8?aYq_ zQ=594SKRZNp9t>zJ1W2>m&Gx{OPUt+yr*~4G=7en<GpLFAz2qxt+_6+@$g(#8yYk} zR|#2g6!tZl<7(r^TWL1BTp8)LLh5pSoW}8FGI^CAD4cC}vyiSab^DY=E1)mxidOJa zyb#aCskruIf2hZ*cD12;%qSE*c(s;gR-LI^Pu`RD8IQQU_MhN<Pu?_Lc*{U7H)0e# G5B~xO1K=$H literal 0 HcmV?d00001 diff --git a/web/warpmain/migrations/__init__.py b/www/web/warpmain/migrations/__init__.py similarity index 100% rename from web/warpmain/migrations/__init__.py rename to www/web/warpmain/migrations/__init__.py diff --git a/www/web/warpmain/migrations/__init__.pyc b/www/web/warpmain/migrations/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd4b65679be5fa51559303fd3de449997d87fa08 GIT binary patch literal 133 zcmZSn%*%CEr8g{@0SXv_v;z<qvjB+{28Lh_kcgiKkYGR~iuHhE`uPPV`sIm51(|ti zMTuZmZenJher{%ZQDRAEeqOPDe0*kJW=VX!UO{CE2T+SmZhlH>PO2Tq;9?+V001+r B98UlM literal 0 HcmV?d00001 diff --git a/www/web/warpmain/migrations/__pycache__/0001_initial.cpython-34.pyc b/www/web/warpmain/migrations/__pycache__/0001_initial.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d46674b73e867e0b3fde052036b6879904f7dae GIT binary patch literal 856 zcmY*YO>Yx15S?{4o3Bk93gyBL4k(u<a7L)8RS}2wLM5bJEH|EP9lX22-X$&9@MpMI z;?MYoIQ7C0KpYr*8x>aZ=*`Sq&wF0yS32zfx%vL#2Lt#C|2#3_Lt6HTf}~#r8X%8g z7D4252AV<Mf>{gl7-lg<Z)FQ)3}2}k1GZq<h7I-GAlvYMoZQkzFpk`)F4Vk~$hE4_ z2yMsA^>dXOQK_=9F3G8>?cCG1&klh@TK0wlf)_y=X3WbX0U2Q$*@k7}g*7^8Dt2Jm z1xZEXcS5AJ2eJ=x02_!GL{0;ZibIe)Aa^}&1I)KZ|Ft#{`Qn36>=Orkx);&`$cN2~ zo|BPtU>RvkK|Uh$`>uDob$IULLgeV;GhCC~g+eW@V@kSI)K$sn21SL^4OT|w!d&x@ zc<p)?jS^aY!4sE$MsrbG<Y623?%2gOwdoMW71vl~)#WXn4$z!hYuBz+rO|bAv{qyU zwgZ}RMY-le%Cqs%b$Qs5bJypbzCx{$aLW0oT4+CvvW_ZLMM_*MafOA%Vy@7dmY+8` z3er#g_cO7t^xlx86YtRVjxL3{gXefvHE?)LUe8sIP1-M4bS1()_y*=FZ4tunmy>c; zP1eG!RIxB3pj@b8a({0o)9LgDzf*Uxx;AZkyGzUNQAk<BlDHQo?0NJg+K+al&_5d| w-s_^SYD4Y}{R>F6T#6zq59CF#6`Tb2y`Tm?^X%@c=A>TxBe34}h&^uo1qI>YnE(I) literal 0 HcmV?d00001 diff --git a/www/web/warpmain/migrations/__pycache__/__init__.cpython-34.pyc b/www/web/warpmain/migrations/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36db2cd627cec7a5cdbc8b5e03dd737a8a6d6faf GIT binary patch literal 129 zcmaFI!^?G5r8kTL2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUwZoa1tt3BiA4pO zd1*z7U{-EoW}bd-W_nR#NoIatv3`7fW?p7Ve7s&k<t+}I-29Z%oK!oIImJNC005?f BA0q$& literal 0 HcmV?d00001 diff --git a/web/warpmain/models.py b/www/web/warpmain/models.py similarity index 100% rename from web/warpmain/models.py rename to www/web/warpmain/models.py diff --git a/www/web/warpmain/models.pyc b/www/web/warpmain/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f92532a73b3fb2bc0a324d602d79c1b3924f50a6 GIT binary patch literal 1246 zcmbVLJ#X7E5Ist^>^KSFx*hs473kn8UOE;<&=lF?K`{zg3&C2HBZHCxk%Cj8Te|kw z_6M}@NXPM73nF!QyyM-wdy4;@k3M|-{cT0NC&u@ZBC>4B@d`3Tm7q+JU_BxeQ591b z2R$a!qpD9?A9{~;Oq+xXL3y8k5j_$uvjOD^>AtrP_SPZgL%N-wAW!)h&s0EiV{Bbr zu9{p+Q##!$W5Y>;lM3c1oda)Jzi!&f^`Oo5)|U;DsE_r9fh-|t;`((&n|KEbICKx? zMX3AG{zxK2vG5#l@!8PJCzQv*Ut}W!OhC&{DZQO?8aKjLsRwCvy>@pc+C;vfx--U| zK~tS;WZi6~%JUWDd|Fpr;Q)r8L>odo_+TCY`>RW5bWj<g)ux!@OMbKOA<de5H`}WA zzO0K@d8txmJqxY6xc}k!dMT}Ir96jdBWxt5T$dYSld@KomeRwJ5`mq8nsO<QyL@%0 z+UruA+=E)Qo%TX!b(`|#-f5v9TySDjrL9$K?Kt6A<@BPg^z-Se)v)C$U;Yf|KQN_C zQ_f?#^@(^bCgMy?B9Dh@z?@(P`-h!972ZJzRKSS90FWDl#F&>^#KUAq5A8-fwGZch z`S7><aPR~C=Su{wA@?|%{kr|ox`Q@&mZV&2ddi#6!=8Rfj+tF>f9-M2c!l^0mSu`0 zA`#&l&T^2Hy^g#8B_dy7dFCWy?*G{xTZ+zgEwcsZfe86V)$8UW{~id$G~1a948^A0 iCdc6Y&+B`Ua)zU7^8^1BDEpZSYlqmz(O8V*H=}=xaqY7J literal 0 HcmV?d00001 diff --git a/web/warpmain/templates/warpmain/about.html b/www/web/warpmain/templates/warpmain/about.html similarity index 100% rename from web/warpmain/templates/warpmain/about.html rename to www/web/warpmain/templates/warpmain/about.html diff --git a/web/warpmain/templates/warpmain/admin/dashboard.html b/www/web/warpmain/templates/warpmain/admin/dashboard.html similarity index 100% rename from web/warpmain/templates/warpmain/admin/dashboard.html rename to www/web/warpmain/templates/warpmain/admin/dashboard.html diff --git a/web/warpmain/templates/warpmain/admin/news.html b/www/web/warpmain/templates/warpmain/admin/news.html similarity index 100% rename from web/warpmain/templates/warpmain/admin/news.html rename to www/web/warpmain/templates/warpmain/admin/news.html diff --git a/web/warpmain/templates/warpmain/main.html b/www/web/warpmain/templates/warpmain/main.html similarity index 100% rename from web/warpmain/templates/warpmain/main.html rename to www/web/warpmain/templates/warpmain/main.html diff --git a/web/warpmain/tests.py b/www/web/warpmain/tests.py similarity index 100% rename from web/warpmain/tests.py rename to www/web/warpmain/tests.py diff --git a/web/warpmain/urls.py b/www/web/warpmain/urls.py similarity index 100% rename from web/warpmain/urls.py rename to www/web/warpmain/urls.py diff --git a/www/web/warpmain/urls.pyc b/www/web/warpmain/urls.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bf73eb9ef3a92ff5faa3de8ff5102b704ce759c GIT binary patch literal 587 zcmZutyHdk25Ip&nH-woaElmnnPD#Ts@B=B#426p@N~8p3EZJiz1ZrwJ{*(`ZJB5S- zJofr__w2h>_&Ml~uHGM3@N>2CeT$F%KoEE{C;>Esf&n8QKpB7zp$HE=gfaphLlJ{c zph$p81|k9(!nOq>29dy9;Kh~~+g@xR#SX~$*x5abJ&*}(6W`e<aT7t&0WpC4^b8kM zUwEYqD;FZ{n({y*B$_Le24r;*1h-GiiZ{ZMXXM^m@)pwr=UVz=P6lOP@MX1gv#E=b z+)-^Wyezab%DRR-RT=cpQRO5)o<`WoKb<rZ+q<WB66Ps!H$)IyZZ=i6s?0jW95zP{ z9EIHTrlv62v%*hupLX;|&-@ZOh05tH{Nl<8`Qj@d$Mw*_pV!<u*%+H5g<r6jNM}{; pW;9Znb;Er{!)LTpR=+wroNHZ)T`6y9728J`vLTzq<6z9j>>C_Bfnfju literal 0 HcmV?d00001 diff --git a/web/warpmain/views/__init__.py b/www/web/warpmain/views/__init__.py similarity index 100% rename from web/warpmain/views/__init__.py rename to www/web/warpmain/views/__init__.py diff --git a/www/web/warpmain/views/__init__.pyc b/www/web/warpmain/views/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0145608a8f0d55a7b176ddbdfad1e2753ab09ea3 GIT binary patch literal 159 zcmZSn%*)j@D<dqK0SXv_v;z<qa{-AI28Jjg$;c3_!35-%umXwXjH1k9KMjz&5|Ens z_{7qZjQpbbcnu(r0YMaN0=fG61tt3BiA4pOd1*z7U{-EoW}bdoW@>q{etdjpUS>&r ayk0?N2?tQMO>TZlX-=vg$natyW&i*-J0c$d literal 0 HcmV?d00001 diff --git a/www/web/warpmain/views/__pycache__/__init__.cpython-34.pyc b/www/web/warpmain/views/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7303296abddaf3b5997fd2682fa71c5ed2b3124 GIT binary patch literal 133 zcmaFI!^_n)D<e#dfq~&M5W@i@kmUfx#auulg@GXoNHQ`6YcfT#CTA377W-*3-r|an zPb@9T$S;bIU&&C!1XKtne#z+RmnRk#<R)h3>6c}umKW>C$7kkcmc+;F6;$5hu*uC& ODa}c>16ffF#0&s18y~X( literal 0 HcmV?d00001 diff --git a/www/web/warpmain/views/__pycache__/main.cpython-34.pyc b/www/web/warpmain/views/__pycache__/main.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4a1a19ac952e496a58f037f2f8946e406bac56d GIT binary patch literal 804 zcmZuuyN(kv6uq8zo*P(cMTJC}6`K6O3L()@r2s@RO*9#sWFpTvTzgnH&}G~G5Pr!m z6%8Li1J|A<Y=LKd?ECQbIoChOli|(f-TU7R;5$4RG3{T{)L#fV{R|{P!=PZmoE?A+ zpb4P}dpiUfK@&p}_jUv_fp;!52AM*WL6HFyG4KR<3OoZofFlHa2z&&$07t4l06qpj zab`jO0lb}0e-HtfGn=4jxj@>DUmLT3BlKRiT97@JYE!o>6d$`91t$-?B#4&cTH8S% z>`)%kh2JmiIb~61WmX?*A^EB;8?mgY1%9~I$$v#tKPNB%I|jSJHGx=~(5b&N5ttah zlEBcpj`TC)8!c^Gp(u^u#h@hyD_LuEczj*rzA5W=;UM3dM$QvVsJczndPiKe%@mTr z)%wQ9`*I^Rh7`ttfYhW;p3vqS;FLVSp5%*D$xk)i(-+>;;hOsNIin;U5kPRka7OF@ z1zu2u1RCb0kh<U`C0HKLPj{4S)tR1m_>UNl>G+)Cgci@Mhchy5?2ovJb{c@;Bf|N} z&iJluH!9a#g{JC^_8RTz-o2&Q^*7k3_nu0%2J3ZRc4nJ%Q7J5qLXA#dF>w@qq%*ZF r&i*pa8^wjxzQ<m_zy1M9*GBYAvn$H&q<G<;UOP!M=Ds1Dh0o$YF;uzX literal 0 HcmV?d00001 diff --git a/web/warpmain/views/admin/__init__.py b/www/web/warpmain/views/admin/__init__.py similarity index 100% rename from web/warpmain/views/admin/__init__.py rename to www/web/warpmain/views/admin/__init__.py diff --git a/www/web/warpmain/views/admin/__init__.pyc b/www/web/warpmain/views/admin/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..733dd27545037f0086c86e0b8e9cbbc1217fe6cc GIT binary patch literal 134 zcmZSn%*%B`t~V^10SXv_v;z<qvjB+{28Lh_kcgiKkYGR~iuHkF`uPPV`sIm51(|ti zMTuZmZenJhepzN}d9i+CN-mHcAD@|*SrQ+wS5R5P0n}rYo1apelWGStxfqBU07DEM AW&i*H literal 0 HcmV?d00001 diff --git a/www/web/warpmain/views/admin/__pycache__/__init__.cpython-34.pyc b/www/web/warpmain/views/admin/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c91374a6a7d46e22f3deb309de4dca70116fa0b8 GIT binary patch literal 117 zcmaFI!^?F-t~ZPU2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CUrKuV<%vZFxrv#1 r`em7^<;D7mDY-y)e0*kJW=VX!UP0w84x8Nkl+v73JCNRDAZ7pn2hbVd literal 0 HcmV?d00001 diff --git a/www/web/warpmain/views/admin/__pycache__/dashboard.cpython-34.pyc b/www/web/warpmain/views/admin/__pycache__/dashboard.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9aaf8c9d0b1aef0158b3d2202394829086d19bc GIT binary patch literal 557 zcmZWlJ5R$f5I!eOlfF<TBsN%>!jOs`AtV+SDnt=Om&%Pz6Xe9fc6d~5W#xzPm%K8u z@B^4QrxmJ%eg1qe-+kxr{-Aq#{C;~y06t-B1*o6l(K7^wLO=i%1f~Rtvpo<V6h2J- zwe5pwK@q?-SlcZSZMfk9FqAg15Lg5&@K^^}7v2C?SgUbP;@%fFftc8~;w9q>wf==M z)iu|ZEHy`aN61B9&J=&BbHy2Y$dT==owX9naMb7{yNglGNX_gn=Yq{jTJUj-<2B3O zZnSeedJn;%5O{3{G#;#c$7>RM<K_MnRaHUrazt5y$f(Zdk}8&DrVz2Oe0;7v1RGRz z!8LLU9Y3zk2dFLveh!n-UzNw4Kk0w9suvsNIP-Ie`Px+jPxTSw$PU>(Ef+G;nN%jN zjb3-_ZQL3DP(#8VY&@wfjmqZ<txc9No=QcHR9dyLo*g(QO{6xtXnHgxx1i_pqLV_h QTJTf%S2{u%61ThlF9V{AegFUf literal 0 HcmV?d00001 diff --git a/www/web/warpmain/views/admin/__pycache__/news.cpython-34.pyc b/www/web/warpmain/views/admin/__pycache__/news.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a7f552cba68e46cd2e80edcd33ece681be27458 GIT binary patch literal 1177 zcmZuwy>8nu5I#z>WyyAIBxsucW$303_SzvR3Ir%RxosR2s1`vnnOKT`T#`<Zz?s~& zFVU?}(5L7NaP8Ek574Q1loMpABp!~(?~Wh8qyF^zVfW?Nk4GNBFSz%#(0`3XeM7_X zV^9E;3}ObQ1F-{)q7D=;lpe%hGk2kALD`15-ON2Gd^jd#3yKbu0mK26A;cjt(FTs6 z54;0BfHgRT3xRjx3xhRo)rJ3Kdcga)81w^}Mq9s;Cq#~EOHpwlO-BlzNiowAGrhN3 zFOGy-)RhuA-zw^}tV*Q#yhI4c2z!C4-b7p~(;@q&mZb?A*ishP{@D6svvXTEIn6}D zlPWF6WaiN3_;@%-xkDW4Cz=&NZpAxyK%RnTHsa9fZX8%Skh^$rke{sYk$>Y_ObhZh ztXxQ1WOKX3G>T=Dr<kfyHWv=651<3cL&&?p5ytF73l4BIEVn_e7>RxEg8V@&HW?_M z54f}jw#lP{nA8WoMKrKASYVAL8HyZCjQ9TC^!WP0IOSzlWlGCbXLU8MP_uD7oJo;t zk<ctTB?<i|!cAaf1!XYQ#W)$i-n&fYqD-@@sb-6e=DIARfoYdQ&ucC_2$o&S=wvFn zNQ;acPo)>acuOT@+%I^#NXVs5NSBbUMS3Qb^vU<@lN>JrwzZacEs~Qf<DLmEsZ)~L z7J0^}iy)LXz9pIQxM6Eg;8E;5$j6BNyFVJ=alXjt%vOhn`Ql1GLQsH15gMEU8?YX} z0~WH->ASnEkF)2F#ob*RVnLc5;!wm3e}ienCU(onkq<E>_sCGy#ymmKbS+&j3Zca_ z3@CdI9r+afsBeZmPph+fq~^8Mv!zz{yp2TN&DtD)46B9N-$Z70rDb+9N|$;*;$l`~ zhij=MU2D^))7zD$&Wd<&E5@j-kwznV(=t-R61hj((znbz2bi!d#49?t8lu@{LwrNF L>us~`oo)6HHGdQ& literal 0 HcmV?d00001 diff --git a/web/warpmain/views/admin/dashboard.py b/www/web/warpmain/views/admin/dashboard.py similarity index 100% rename from web/warpmain/views/admin/dashboard.py rename to www/web/warpmain/views/admin/dashboard.py diff --git a/www/web/warpmain/views/admin/dashboard.pyc b/www/web/warpmain/views/admin/dashboard.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5cb038f79c21cc76099bbe248cb79b26bc09f7db GIT binary patch literal 688 zcmbtQxlY6|5S=7@a|j8E4(f<v13f}WG&F1x5XA~<Wn!~2a_nGFI3&8I<!ku>m`M;@ zP~v!A=CGgNO!B!kxjg>3Dd1=I>3>ERZV4pq2n;|K!90S9;}}c~RRZ&*ixV(CsQNJP zcX1EQ0IpRZB<%snA;>YTAeJL|2Uro&h%;B|gdWgew9<$?91wVArSe_8N$~|@ovTng z8&sFwrmS&GZ5LiWHrgxM<(c9T$G_Fan=qs(YY%6*OFkW@3k5FjwK8&HMWqV9$Hr}+ zlZ8D3q#eOq+dRgwN?7()8dGT&_6eVbuPdQ#CS*k@MJVr_@N!yWWzvLB<V>2A0Wx(h zmMU~gSruzn0aLEG5RS;pT#Xr1YkTiS>$Q(OY4sfbJXOE8%$g?l!kmHSK|D)&2)IKa zAB0`HX(*k?qQTI~*;rRf9xn^UgLSfS7QMckiU!N6RE6^boew$F;}!ucY>N$QgFVX3 eoK^XVoOMJ0=!%I>DkmGGPFY;w#7@NDB>4t$*qwU- literal 0 HcmV?d00001 diff --git a/web/warpmain/views/admin/news.py b/www/web/warpmain/views/admin/news.py similarity index 100% rename from web/warpmain/views/admin/news.py rename to www/web/warpmain/views/admin/news.py diff --git a/www/web/warpmain/views/admin/news.pyc b/www/web/warpmain/views/admin/news.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c29314a61e93ec97f0ac3dfa1611005c9d255a0 GIT binary patch literal 1411 zcmbVL&2G~`5T3P@v~iNAYDGaHIB<$UO0FC#gj5M}3gA{q<YKwmO|q_k(%ng`O6e(F zc>~^qr{HOL0GJu4^unqBS<lYj&V2JZ{N0N>Z@zz-!uD#?_Z_|d2Q8W&1vx;WV4|Q1 zU=o00Z2)-)MFS>{dLKgGgrWtLR=saPz5{3M*@S!-iZ)EzP((0^K$#Y3dUinXg6_fw z0^J53!8ZjPI;RW&cj(+X^f>Bt(4zwFAG!tsN!X&rnNk~vyCQ1q%oGQTja^zkATDF$ zmsROat=%JSUd?TpICHrocU|i_<W-%uLE_k4d&$Yd`^pvA{uj7%x!<APNb-#EkYvgu zM<+9Da-EcEVJxX(%5`!=#`uI@|BIG2KqfF>1mI?XN;CmOaT~xofGi}4z<m|D!SZb= zK26A4unr+<@|uZBA;BuarxZ$6>ky91&p;(-5o8_E<fg>Xgkw64(rvxgipO#hg8Ru; zY$LinC^Bt8ZR0p01@!>;xC|O1CD>4riiX0-jFFrC^zrn}KO$k2>cW=Rqf60N<)|bS zN4QUxsWT~>gcZq*ab+ZHr523El2fSQhm4=q{t11qQ@1QqTh_@X=Wu~VKIoHCxKJ2e zR61r_#9Wn3(E8*m&8?OSeR^d?Sa~81(<#^KGT|N1EEeYQtd{BA_?RWBusY9(ST!Xo zM}$kxZ!je5++fT##`MB~K@fi?m+>gFbVTQKMfZKPEAIyM1zG%Sl19}MN8G6`XD$^< zdcLv@p}<;qzPyQ_l0PT)EI`m#ebuGAuObx%z3@o&X!kM@4swm$+zGv&&(=VrW6ij( zK$>_=`<StQcvaY;aA{MU+@N_*ThGZM7!UaG6B_6&E$7wHFDi%A6?%cMMxW!i<^})0 z9E&gRmD8$3XU~V}3Kv6drWJ9laz5s1$V3@EF|N?&$mF<V&akMcsCulz5~0GlDve+n lKO^7!&L1=sq1-W@v&zj|hSxLekJLWhkveJ|sQ%%B`U{eDEL{Kq literal 0 HcmV?d00001 diff --git a/web/warpmain/views/main.py b/www/web/warpmain/views/main.py similarity index 100% rename from web/warpmain/views/main.py rename to www/web/warpmain/views/main.py diff --git a/www/web/warpmain/views/main.pyc b/www/web/warpmain/views/main.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99bca5f4d8cdf1a4c4969efd0c8e8680cedd0315 GIT binary patch literal 985 zcmbVK&5qMB5FRH@+ih8>K-%Npkg64GUSNfgxNzzrAP%`yY3yxXId-roEGuy<SDuy! zfEl}L51b&4r}LAUZ{{24zpiIbcRxS3aC!>*e@7<_BqY583_vHK79iNpz+}+nQ0K|c z!Hl3Qpe~X<0yBnB{AB@V0^JnqDF{`79D|&IoPwOg5i)rNKLCzYcm{IDdOhdR$K^9Z z*1zdl3es>)!YeD4Pd0}?Aoi6Cy|Y0j?{o4Rx6^jx)t5ngC6k{^+$D8H>RLSpygGk7 zcoQaMl`*x%SEN%arMI|w(8|b-Z93I*6+X<)dph9_2?RI@IAqKb&4D?SbB`my0>0Dy zIlGSZ3K}YcBV)B*HK=6l!csdMqXUMQ6nSiX-!<BnELMB$%#w$%I5(!c?SUE#I3<Vk z#K>m*L|_1Yvs0ns4l6p4=4CJ@Lj_z$FN^S+MCp1g8BN;<-$X6qe$~`ZLhn;yO}u|& zxWG+7b|e1g;)Vjm1&TN|5s{sz&M34F%<6fzX6pt_!{y|^G+oWfjGb4!;{R?r0$fvt zz~~^>@j~H(ba`m(&aJ}Ud29y^kt}4~Q)JKgifP2#i?ekWz22^x0rxAZTIU;dK2%&D z8Hi_#!2z|w7bj0#V&|kXA#E^T0cTakITc^n%ZyR`hu!c>?y2}-)LZU1Fl7tDznNI% Gx5XbW9@0$! literal 0 HcmV?d00001 diff --git a/web/warpzone/__init__.py b/www/web/warppay/__init__.py similarity index 100% rename from web/warpzone/__init__.py rename to www/web/warppay/__init__.py diff --git a/www/web/warppay/__init__.pyc b/www/web/warppay/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16f89f48ff48257f6b0142a8d3225e80fb3235bc GIT binary patch literal 121 zcmZSn%*%CEr8g{@0SXv_v;z<qvjB+{28Lh_kcgiKkYGR~ij{z3`uPPV`sIm51(|ti pMTuZmL1LwTe0*kJW=VX!UO{CE2T++!ZhlH>PO2Tquwo!)006sn7kmH! literal 0 HcmV?d00001 diff --git a/www/web/warppay/__pycache__/__init__.cpython-34.pyc b/www/web/warppay/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..530a95887c5e73f9be10fc5465b9a14814fc9be6 GIT binary patch literal 104 zcmaFI!^?G5r8kTL2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CU!r>Y<%vZF1&NjV f@$s2?nI-Y@dIgoYIBatBQ%ZAE?Lf+lftUdRw7C@a literal 0 HcmV?d00001 diff --git a/www/web/warppay/__pycache__/admin.cpython-34.pyc b/www/web/warppay/__pycache__/admin.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ff9d6ab81addbdc0ef4300e05cce83b22e2cfd8 GIT binary patch literal 101 zcmaFI!^@R6cUl+&5IhDEFu(|8H~?`m3y?@*U<lS^^jpbL1QJFNzl8Mk%M*(V3KA>z c6H{_C^YjWTZ*kb<=BJeAq}qYh76UN@0CYSP-v9sr literal 0 HcmV?d00001 diff --git a/www/web/warppay/__pycache__/models.cpython-34.pyc b/www/web/warppay/__pycache__/models.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efb08a5357d7a0d053fd4b2877f8007332b2b085 GIT binary patch literal 1460 zcma)6J#QR05FOrr-fAUXWIKuS0S8HS&ACY#1OjAOF5*J~$tkv3Y>t$)GWYIG?nai7 zPWcUP+#B$p@DE|@%8h?Os=VQz;<KQ_i{l(QL%y9ie6t_&&Fuc`mw&t+5WS<dC&YXY z!@h!%_zBWPji5r1;Prs?fSQ1cpkD{1Luw)_B5GnPVrmj9l0FuaPN^AEF(h#yBa$)w z1BjSZKxY|U0cC>@WI{6afpjg9BQPYH`9MZ0rn60dVvFPk9gg$&NRY<Djk<X~TS!&v zx>csq7QVQF1GB&-X3@cI-G)`Bu5^9Li}bHrom<uN-t;$FEuSJfW5DYt!ekG_f-@;% z`j{01pJB*lK_z5BGNdaSfIL&W_Fs`eA=r~3N=45LY)}H;FN%z-0OBYIN&xzY<DpA_ zHw)R#T9-A|i&CrkNqhR9-|xbCr}dG`tFB#?^Tl~tNjVdU@WcN+_AzV%^Ec5M0Z~jr zFKX*nD@;PG^zj=q+t~5%oymjq$}E@F#e=?7ljVg=%F?!`EVmd4!T{{$_9~~zDmESG zE-lM>)u^&`Sy|$Er+J>2<@2u6eZ&Mf?S}iOm3dSvEnV25!e-NZkJO8{_a=?9wmMO6 z^I_Ghqq<Qm|I8>jr1=5|e8y{L#J&`Uhs|Je@wM0yx!4(a|Lqs~Gd6ziMaKTxpvwql zj9td^*f&bntr-Hw@Jn3`;XUuv(R7@e9roT~bC(UXH}_y%(ACmqkMyEiQI0{4arhe6 zj3@Oie9YK}Figs@=My@NyoX_bf?20?&`T16f-tWJ+@CT)_MyA`G5f>+d*BmLzH1Nq z;|)+qxVRSe2{55wk9oO!8|LJRYAf?SFwA|J={UYw7pCJPuQ(SUvoP#h4SY$s5H4h- zuP|FxA{K`EPRHR*M0Vc>VSYg1OAIgMT=?~Lyv>q5?%K{kvW9uPp**YRCyR;vvls1_ zQMN6Q4HSO9FwYF%h2hVEiD8Ou?i=*s>7;KQ!yV_MC;Y+j>hpJ2eDnBXsf@1Y&y@7B hkEQpi+?KOTe*q@C=~r%No5PF-Bk`RW1-rxD=s(zjFs%Rp literal 0 HcmV?d00001 diff --git a/www/web/warppay/__pycache__/urls.cpython-34.pyc b/www/web/warppay/__pycache__/urls.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21504f04e46c16db9408888b0d082feaf809b583 GIT binary patch literal 270 zcmX|5F;2uV5S(=!a=;-S4KKJRP4WQ*ynqIYA_d4g`%XDIiDf68j+Q^rQBYFz8@E(6 zJb>!f5@NM8+Fi|z_Gf-}^7j6E{|VrW@n0EFH;i!2q`3(e=m-s=6KDh|T?K50PNI<@ zL(mzF#5Tu^z=pL)&=PlL{>>pMMa(8|W6}02J84r=%%57b3(xZh<=T1*#)o=&TNZJl zx2oR^)oSS16?=jg9N^PavDhi^oZ5TITXURTkG2hCJY}I%<7j*zKHz7`k?8lls{cH7 X%BtKx&Mvz_Pu5%!3qne|poKgDf;~a* literal 0 HcmV?d00001 diff --git a/www/web/warppay/__pycache__/views.cpython-34.pyc b/www/web/warppay/__pycache__/views.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f820fac8caa6b850f9b7f3c14097fd923384350f GIT binary patch literal 1447 zcmZ8g&2Aev5dOHk`djPIa-zaT<2J}i7v%w31TAc%2+%q~rPRp+g|HDBW##=*NGgsB z`;@*+A0RK0qNg4Tu*aNo=>zoCnUx&>P&=cUkHaBnKJwpYD?EJv?)c9N@Bvo_`S_N^ z{6k98Cy)Y}KqMg8_mFzXd_?}*_mKw3Du^n`s)(v<G(cKIR!3A{`xT@OWFew(?N^a* zA!{OPuKgO)7P2;?_S&zP>pO@#$hwHS5ULK@fD9qGF!S+NKy{#+cp*x=3)SA(vI*J3 zZ(w}=Mca^V$PR;153-BVVEZE#h=FkJhq+ZVo!Hf()`cdd{)3DcPmIz7&xQQIua!)! zyLD-gluqI_`ITZQK3*h~*NHl1`zK`<MQ#+?JLBR+<=-vsOO@MX8r!7E3GO^JS1=`M zmwtRLXfjP>W0Y~dh0<AK3@!YG`QIOoUGVtPXzcvQPsUThb<hY%wn+9#%-^KWfO$#a zi3fcEOWgp3^)UA_57;>uuoavMW>s=e#kmJt#TmuaxObyXjsTn^;yGG&fmTZNuZzs9 zJ#3N_Rg{Fbud%WF7D627UnAh@22MigKM3NZT#J(wUZ)Mbb024P#*jA?&vJpMn~muL zjs}e*-K6qdkj43GtXpL3HUs`Lk*+!|$(j*Rj=`3zX3D-Sqzla|pH7xUsL|XlS1X>+ z)zlj2$7!nh>gyWgfsAeJ{F$<@c~B^GRM^8eiLov)@oO~*TurN2OGQAX%to0%-3KR@ zzeDd)n*Vyk`=_y9EaKIDz8z+`Sh)r-n52}9k8C&&K}Xa?NAyHXbUe0d!WVm@E50CG ze?<{f4&&jGaPj*j=4VoG9>G$h1?C=i>)@9MI0shuV10hOM8bw!>MFSuS28b-Uv-HO zVvxxAk;!;Qz*Carvd6)Z?oxKWP3p3hRqZo)i`8vb+(o_1iVsE?IpFg29Y(mcwfd5+ z9a8s53?Cn&PbJ<KZ7R8(IU4M^hMdRwtQgAYWwxlp&EtnL%nGSeQ*Iu$H!ZyY%Ofy# z(XJ*&CNFfHsnbHA45gYDI<^I|U8Q;V*^PN}%a>Ym9^JVyd;LY~I`8oLjhM^VX>@}E ubjXSyVaZxq*_A$&9pPrU`ZrY4GF1=w@tQuVF45g5S^xUgo@k1@JO2YFtU}ZP literal 0 HcmV?d00001 diff --git a/ldap/data/ldap_conf/schema/fusiondirectory/openssh-lpk.ldif b/www/web/warppay/admin.py similarity index 100% rename from ldap/data/ldap_conf/schema/fusiondirectory/openssh-lpk.ldif rename to www/web/warppay/admin.py diff --git a/www/web/warppay/admin.pyc b/www/web/warppay/admin.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7724210874d8d81a948189dc115430c2e82c80a GIT binary patch literal 118 zcmZSn%*&NFcUo970~9a<X$K%KW&si@3=F{<AQ3+eAi;n}6w3p}^z#c!^ve^A3NrK3 miW0%Bg2YPw#FX63JiUU-5)Pmmo80`A(wtN~kV(Zr%m4sy$rfb* literal 0 HcmV?d00001 diff --git a/www/web/warppay/apps.py b/www/web/warppay/apps.py new file mode 100644 index 0000000..bf3dff3 --- /dev/null +++ b/www/web/warppay/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class WarpmainConfig(AppConfig): + name = 'warppay' diff --git a/www/web/warppay/migrations/0001_initial.py b/www/web/warppay/migrations/0001_initial.py new file mode 100644 index 0000000..8bb050b --- /dev/null +++ b/www/web/warppay/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-18 15:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Product', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user', models.CharField(max_length=100, null=True)), + ('title', models.CharField(max_length=100)), + ('message', models.TextField()), + ('created', models.DateTimeField(auto_now_add=True)), + ], + ), + migrations.CreateModel( + name='UserCredit', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uid', models.CharField(max_length=100, unique=True)), + ('credit', models.FloatField()), + ], + ), + ] diff --git a/www/web/warppay/migrations/0001_initial.pyc b/www/web/warppay/migrations/0001_initial.pyc new file mode 100644 index 0000000000000000000000000000000000000000..272f8ba2ae0dc6d316ebd016ac21f350530fa904 GIT binary patch literal 1179 zcmbVLOK%fF4E8>fCT-J(N4b<cIW_GaA)r+y4n-&pLgccVW}NMW*$4BW4cGFEkoaX> zk-(naHuQ$rU3qPf$Nv0{C;2(p{Pq3EhdH!QLjRW#gFPli(iedSC?c3e5V0MDj-g0k zmOzohEG2IOn830FiwI;2-vDj^KF&HIJ8(YgQXci2o>4@a8<Oy)npYAttsEMm?I`Az zO%jF5jc}?et>b+KMQQ8$q@LZb+#%g1?`uXnq{Ije5Mzdwlb!;0VA*XuAkYkQ1C~8T zNMQtxWf!myasy<KFsBRh^h4MtNcy%wZgbcT#Jn`Pw{!y$J9mO}i(6)MH<;TXhs{Qg z$vd23jpqTADE|@9!+S;LqrdPx4oic!be?dPoEX@F$@yrH*l{U|QWWSnNO@-}>E|vG zyHKd5^~}4HZkv9>yDFO-6b_}^B1dghA<QcKgsX4>7L5{GeZ>&|1<gfeF$>u_&6^X? z)jWkYCn>Hojb-jG6-`YG#cS<5Y$>N3Pz72m@<zX{eg~(lt}-E|=gD|aiH{9R<$S_* z2sTd$jnZe2o>kgTt0Nu@*CUYya9I}MWEstp*GMMAoEndgNl~S8)K=(8VvVK5a<0%$ z!mu(ARFpV5<4K%^Ipt}5MQoiihmPAhr5VOR(($D*jh~~Yc<mZ%K-LMRnW_RC5BGGc zE71n9S=DqK!tjsCg0-+mWR9!ajjx2MRk<)CXth|4*EeQ-czAe}wGAEAs|oYOMA)Y! zx-q?JKkCNMqWx$u+Ku*;TkCDOq%BVi@4O+NCbS7cQ*tTFygHB<fs{Z($h`&_wEsgH Sj_P@HI4>Bn<?|WFPm({&#Q+!p literal 0 HcmV?d00001 diff --git a/www/web/warppay/migrations/__init__.py b/www/web/warppay/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/www/web/warppay/migrations/__init__.pyc b/www/web/warppay/migrations/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d71e2c0b74d218b974de63901461b1947a2468b GIT binary patch literal 132 zcmZSn%*%CEr8g{@0SXv_v;z<qvjB+{28Lh_kcgiKkYGR~igkfv`uPPV`sIm51(|ti zMTuZmL1LwTZf1H>Vo7FxUa@|Bd}dx|NqoFsL1hUCP=`%!eoARhsvXGOVjyM!02Bfn A^8f$< literal 0 HcmV?d00001 diff --git a/www/web/warppay/migrations/__pycache__/0001_initial.cpython-34.pyc b/www/web/warppay/migrations/__pycache__/0001_initial.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85b16a74a977e8795c0d748c91e8a341ec318e72 GIT binary patch literal 1015 zcma)4%TC-d6uogWnMo!*`hZf=J)I2$`wCHksJZ}EDpjS~SZ3@A9-IeGQkZV1Khtfc z{*1R>vFQg?UG&<S5wL3%TlaD7bME#1ovg%vfBgJ>5CHsw2Os)yh^sonjpOfu0?0fV zdEi-}fFh9jF!CV_U=)D&j{Cp^_=d><gb&jW%rV~q-hq#U@D4A6foIm6T#gGasFJnN zOjQG7;!LKR)w0Md6K0rH)!4$9-x?Z+xT-A=K!6p28b-v*LIEk-NZEmDXoa;pkX3YH z+5?V3#CP3}ZUj6A-iJ8^69gv?hQSr!tH9SRY!1Yx)*q$j;Mw347mN`D)_v;SKJaJl zL5oSTav=A5p4*Q6ubz!Zq<r&%o)<2aET~i8vZMq?sC)}s{L)0H%RZi)AZM8{-4D9p z&A2w<L<+?#LnJo|YwCiIwP3a2reA8AF+HPKVrHUBXvviPDo#xDMd*v764c#9-XEKw z!8E=WyQNCxX?=Nz&j3i(C}ldetQ9h5qN-Sm#*(0=%ZnSzI5+VpyyHj<E^FgAs3ydL zxNd|A5s$&M!K&#|$4RM)DaCnclt4S7^txfnszI+Sb6KNQlW<XroQr%cMWuZ!sE_w! zZKrmUbYLUVTP*p+w!lP3mrO6rb8%a@=E^Z1IG34d-S|WmY>|qK5(m{y=XcOMc%9q+ z><^2w9^Nor%6y`kvr0A_-VgI|Z*Om(E`;uuGu^?%JzUi*+!7L!Fo?X6?0DPWhPUQz z`%BLu&jz7wz@(`gjU{V>hfKt$EKiGFe&K3$<vH}dvetTS(Y-fq`wnbhD%*;6vg!W= D+i(JR literal 0 HcmV?d00001 diff --git a/www/web/warppay/migrations/__pycache__/__init__.cpython-34.pyc b/www/web/warppay/migrations/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69c15552fa851669701a45d325218223d280aff9 GIT binary patch literal 128 zcmaFI!^?G5r8kTL2p)q77+?f49Dul(1xTbYFa&Ed`mJOr0tq9CU%LAF1tt3BiA4pO zd1*z7U{*n5rG9Q^dQoCYW`16=etdjpUS>&ryk0@&Ee@O9{FKt1R6CF{#X!se0EK}b A#{d8T literal 0 HcmV?d00001 diff --git a/www/web/warppay/models.py b/www/web/warppay/models.py new file mode 100644 index 0000000..c462cfa --- /dev/null +++ b/www/web/warppay/models.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +from django.db import models +from rest_framework import routers, serializers, viewsets +from warpauth.models import LdapUser + + +class Product(models.Model): + user = models.CharField(max_length=100, null=True) + title = models.CharField(max_length=100) + message = models.TextField() + created = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.title + +class UserCredit(models.Model): + uid = models.CharField(max_length=100,unique=True) + credit = models.FloatField() + + +class UserCreditSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = UserCredit + fields = ['uid', 'credit'] diff --git a/www/web/warppay/models.pyc b/www/web/warppay/models.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c63c8a4e58777e7c5ca6845d012d73ac9cd0e4d3 GIT binary patch literal 1672 zcmbVM&2G~`5T3OY=cg@%3IT;maLfU<FMtrDsNz5?<QAm*VlCNC>U3=fdrexzt$hYA z+<8GB0Onh}Ne)P$MA`N1&dlz7-^{H4YpehC=l72zYJNU{Uy(=U4;B>v1sS4LP$WoT z?UC^)^(pe}wNIu+X`7-pr2$0&r5%bowXQ{`OKFdy9<SS^eVX=ZEJy`(Lv&4a7HyE~ ztSGt*#U`m9>42tN&ZECj+#$6=C&NvSFZs>Cp<u}lc&f5wlq(&Z#OgwtvepEwNqL*s z0B1Wq6?w%brQKk;)I}mq@)heYufHUEUTWKTW9OZcvkz?MT;CVDsz!D}Sep%AgRnCe zG=V4W(bR9qW4?5Yp?b{E>i#te<_bF<5D|5q+#}`J_9E(&Y5_D;6rK!mjqUT4%FEd3 zY+}z7P6yc*Pg!M*1tGGsd7S0*SSmFFFSp|W5d!%)qA4+bP#o6;xuX+nbiKrZr8eUs zf5}bdGnV%AncbhuVwPm%LON+Cul8$Z_hwg)oH#CR5yyAfzVvt^;qv5ojpIzFI*uKR zIA+Jn@G^Ai>#^;@xhxJ7ZIr`wT2$Hz6*C_KxrNcGzO=Ow(4@L7<wV;pmfuLLPm@$H zwWC7wo(jRt63zcZ3Q;;;9wn|1#3QjSHpRB*5TGCq3aygAl)`g1|92?_F7X{?7lj!D zP@PlU%f<Y;(nDMy0$vDG9a-UBNGNy<zba8KphJ_(h8p-Yc#dr?*bmtK9*+{G0ND0E z3roN!i;h`z0RnMd@PvgLI#(wbKffP0O{;siNL^Zww3Q2Y)QWR|ym05%;3o!$2%50m zf;a4{26VN85+%IC5&&52x$3kq9HX$xwdmMo_lG<hIs#Fjf-qL@gw<NdgE0i`8YU3O zL!`H9l5u6L0!_kOb^WWU%qIDs`c(G~ilWe^jkzaNJ<p4a5FCXrIHb?wG_);04d;7x zw}zm`@pFWC(Up1VI0OA}uV%V1Np_)?Q!ld}BGh#-y8eH`mvhIzM8B74$$>WzyJFz) I^mf{R0P-3|PXGV_ literal 0 HcmV?d00001 diff --git a/www/web/warppay/templates/warppay/main.html b/www/web/warppay/templates/warppay/main.html new file mode 100644 index 0000000..5a036cd --- /dev/null +++ b/www/web/warppay/templates/warppay/main.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% load humanize %} +{% load i18n %} +{% block content %} + + <h2>{% block title %}{% trans "News" %}{% endblock %}</h2> + + {% for news in news_list %} + <div class="panel panel-primary"> + <div class="panel-heading"> + <span class="lead">{{ news.title }}</span> + </div> + <div class="panel-body"> + {{ news.message }} + </div> + <div class="panel-footer"> + {% trans "Created by" %} {{ news.user }} {{ news.created | naturaltime }} + </div> + </div> + {% endfor %} +{% endblock %} \ No newline at end of file diff --git a/www/web/warppay/tests.py b/www/web/warppay/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/www/web/warppay/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/www/web/warppay/urls.py b/www/web/warppay/urls.py new file mode 100644 index 0000000..157ac62 --- /dev/null +++ b/www/web/warppay/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url, include +from warppay import views + +urlpatterns = [ + #url(r'^api/', include(router.urls)), + url(r'^api/users/$', views.user_list), +] diff --git a/www/web/warppay/urls.pyc b/www/web/warppay/urls.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1ee28f72c47f59eeecdf7670490b677c7f86e02 GIT binary patch literal 320 zcmYLCyH3O~5F9%`-bhzbQc<Lee*ghrKoKO06d)`1oqTc<%XT<j%|Fml@Qr)`>_$ke z?D6dEc((e!Jp26mc<%966}=C1^F4v3BM^W=pc5D*Itjt5M5r(*bPB==*a}Wzx5B%` zmb^!>3QzTlGW-u!Er}J*o>M5tERTJdt*ZqO*!Sk$KIaQ!FD80DXP2_Rd92x7)&zEE z#_iPf)3|9UCAXxZUH-FYZ&Hlr&@P)!N#KOn;BzVG+@%mrDK3q<rWXH@uc_5jESe+y fxJhPV6sCDk6A$HtEVsjC=iu&mV^#!LVy%7wQE5cL literal 0 HcmV?d00001 diff --git a/www/web/warppay/views.py b/www/web/warppay/views.py new file mode 100644 index 0000000..42db93a --- /dev/null +++ b/www/web/warppay/views.py @@ -0,0 +1,41 @@ +from django.db import IntegrityError +from warpauth.models import LdapUser +from warppay.models import UserCredit, UserCreditSerializer +from rest_framework.decorators import api_view +from rest_framework.response import Response +from rest_framework.authentication import TokenAuthentication +from rest_framework.permissions import IsAuthenticated +from rest_framework.decorators import authentication_classes, permission_classes + +# from rest_framework.authtoken.models import Token +# token = Token.objects.create(user=request.user) +# logging.getLogger('main').info(token.key) + +@api_view(['GET', 'POST', 'PUT']) +@authentication_classes((TokenAuthentication,)) +@permission_classes((IsAuthenticated,)) +def user_list(request): + if request.method == 'GET': + sync_users() + users = UserCredit.objects.all() + serializer = UserCreditSerializer(users, many=True) + return Response(serializer.data) + elif request.method == 'POST': + + return Response() + elif request.method == 'PUT': + sync_users() + try: + UserCredit.objects.get(uid=request.data['uid']) + except UserCredit.DoesNotExist: + u = UserCredit(uid=request.data['uid'], credit=0.0) + u.save() + return Response() + +def sync_users(): + for user in LdapUser.objects.all(): + try: + u = UserCredit(uid=user, credit=0.0) + u.save() + except IntegrityError: + pass diff --git a/www/web/warppay/views.pyc b/www/web/warppay/views.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75727c888b360b57ecb3f0305b5c898eeeaea43d GIT binary patch literal 1376 zcma)5O-~$05PdzfUo6I;IChL|;e#)Gg1ePOmH<VT(AsJsSR+|zyxm@Anb}!pdV!7L z5aHk8AK{<kV-EQvKIN3Wss$sIi$~kFT_0Ut^<H)Sb*cN$=TE;6aQ!v-|B|czlfv<5 zkOPH5Vqip%kVhzDB=KC2kvC8@ku*`XkhJF32J$wF4wBAXZz5kn(M8gQ@g2ApTpO-~ zVT>ySw}6k3O|l5rm3?v#ZV|h^d#ob+mtW6t7w%KM8V5hDvM}4Os<N8fJGAe(bh2Oj zsuxLQmqN77%DXItAMdEUzRJ=(`-8!nR*t8W?C>=6XSWvX>q$ATeTeD)ZF?^?`2Xhh z?w%Un?C%Zauo#<Mn_TtZ6c@lqaXXGsZ6O$30VYHk#TYe2xikn(T(Iv5p~b$<B{ywc zFs36g>|W=HAvqH9@z{;Eq1L}{GSAj<oqPd~X?Z;XZesNc#vF`apds!qj=QM7&?KeY ziJOygh3GQI1#4W?g2x7LukUrdyC)d+ZHrQIDAMuFwy9ZhC?eC$u^V8ZkPo@jPdQXa z;loksl$v@r9vn`|Pi>Vh$yB}{`9Y{PSDNQGrcLkKtES!x#;UnAq#85yA;^4emA>wm zVf#F*gGSWpsqYCdtRJZS$<)&$3G~K!0pCV|1kur>fQtGVcN^s-Y@DUlBpZLIQr%6` z*@g^Ay*`<R1v$g=4|85B2-Is7h?Y&;ESn$9l39*q*EX?PGb`q)xo-v<K_MV*a@G43 z=Y0fHW-y8b_pNuo;1ZZU7fkv1NGGSn@tKexs*KYaG6yFsWVWfa?g*{a-*O!&The{s z$|JCg6t`r^-Bvob@|Ntf2w}j=3$a|7zaL2;4cf<IQoD%n0mm*e@QDNqJ1~!k!9(`H zWcodEDR^#_j)&#Cd#`r}sYBpSr{QS5D4ox1tx{jSIEem@UCY(sSmmjT+#Zsn!k?AZ z@w)SavPwhA!O{u%>Hi@-q3>Ep%1REc__oRK9|K|jXO=t7{jUP5cDzEqA91b3YY+Yd D1?2{r literal 0 HcmV?d00001 diff --git a/web/warpzone.db b/www/web/warpzone.db similarity index 78% rename from web/warpzone.db rename to www/web/warpzone.db index 78dd10507129506c71c68a61acebc501d04b4b27..81069c749d4e6fcb5e38e98ea3925bf3623b89e0 100644 GIT binary patch delta 3120 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 UuX4`)Yx>$mt9J)94B$fYU-d|9Z~y=R delta 941 zcmZ{iT}TvB6vyv5XLeWH-ArvY#Z-tQqS<C=clKi-Xe%Y6?Ij}62N~S$3$%}2?Sr7S z0)vR``Vc`+1yQ|JL#-I(gBoaHL0Uc-RD=daQPw{6VV%{7K<L6bocW*Mx%WSF=hTF9 z>Y{S7vP66qLTuzPIDq4L_gX!#s#ECTM>h>~7VEnYmf6KhJ)ybF9;L8S?ZF`zU7-eA zNhanfO?RmiCuoYeL1WBzph7#u^6q$rgSaS{LyPLcD?M%%V$yV1s$;^%JC{2t2+93c z>z)Hm%?DaDsn$$W=Gehhsi&A~3az%x-ln#6>agr^uY)pq*S)H!ByZ^7vZvhDwIwdB z6Vyk?*~|~@!?Re&7S^F%=kNECiaF`p+{j7~+PV70Kt*^{y0+A?avJTMTO0GrE$P~p zSI(e)YkNbg%0s<CKj|BNqWAQcCg}w|qY)aUN7T#MWs<$wZA=XcrgHR!KGHOEuV{jv z(<lwoAXC@L9(=e#aRPM;>SW<46`lZ(Xo?qlz4F9BXjwqj!nFaz)WfC`^9O^`fELcA z(i!=3KrKM%5jX-pJlF+x&rl1x`OT5Cg0eKp>TQzQCy4^20l{Yvu#zREn&KeuJg$^) zp4QxeC7@iYQmQ<V0Je3WuWU7b#eVF<1Qx+#xBv+rQ^8J*XECdI;1}JSR0<XmGz(~k zKX`@PJHdYW?ke7U4+UQG3B+>(&rt<caIXUtmVU@$B_}h}=M{FS$bDa?YrR}~U`Eh5 zUFScfo=WjG-p4bz10(2z8J>L(_RRNUCzZjhbp29U838%_`x-3kjxV(z%x-rqaf&Vh zEwBm7#Rt(Zy7-*TNyF(BD=Ol?v}GmJNh_VtoUF921;VN}|53wcC~9iDKcE{SEtWiN z9b4mYiqg`!&q^l)DSZJOG!4VA85+}btnz<$cPMD;nqP}XA~9nQrg`{K^2m|op#>Z3 oc{Zd)LcwUBU5!rR^TmbLo_F4!TtI7PAm)!4QQe4TTO1(qFO1au%K!iX diff --git a/www/web/warpzone/__init__.py b/www/web/warpzone/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/www/web/warpzone/__init__.pyc b/www/web/warpzone/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85f0d771363145672c1bda68c36924f583717d89 GIT binary patch literal 122 zcmZSn%**8_q!*UV00oRd+5w1*S%5?e14FO|NW@PANHCxg#mYc2{rrLw{qn@3g3P?M qqC_yODnBn(KR!M)FS8^*Uaz3CgafF~CO1E&G$+*#WLhy0GXMZ(T^8>E literal 0 HcmV?d00001 diff --git a/www/web/warpzone/__pycache__/__init__.cpython-34.pyc b/www/web/warpzone/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6fd584da929f7c3b91cfffaa9696b889c90a2f8 GIT binary patch literal 105 zcmaFI!^`C+q!-2j1dl-k3@`#24nSPY0whux7=kq!{Z=v*frJsnFEKs+^2DNos{FiE g{rLFIyv&mLc)fzkTO2mI`6;D2sdgas#X!se0BcMXX#fBK literal 0 HcmV?d00001 diff --git a/www/web/warpzone/__pycache__/settings.cpython-34.pyc b/www/web/warpzone/__pycache__/settings.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdef308fe1ce0859bfa725172bab3596d0ea00e6 GIT binary patch literal 4639 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 SS%?xh;**4NJsR51ME?yX`-TVr literal 0 HcmV?d00001 diff --git a/www/web/warpzone/__pycache__/urls.cpython-34.pyc b/www/web/warpzone/__pycache__/urls.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3ff95294a6079db4b6741a73754d1a2f27a9f07 GIT binary patch literal 598 zcmZXSy>8S%5Xb-PkMn)_!s&z%=_xRUucL|rNKjBf5FiQ{7cIAYmpysy)9yM^++N26 z(D48~2#-LsEfoz9kcwS9QclWxJ(~Y-W;`>J|E1IMw;$iX{3gI39GsE!U%FTSa)!A} zPy$8o2Pg?-fFghlQG_5qBSaZN#wg-mM<@r735o=ShhQ;y03KsI#CC)|!QM&72Ve;V z0Z*_UgAMU~A9jI}FJR+?)SgW4k@Oy!-jdA##l%nlDLeY>R>Au$u!*QvWy81)8&zh+ z#*|4>IcKQ3F{0Y&Hd%IT(LP*C&IDaNeevOBN6p1){w#aa9<wd2Hg$d}_?6DJp+>B7 z&DABhQ&z7U$t!cN>e}3pWjnp1YA30va@S7xk~ZezK(6bW^)mIzJ9^!zEVYBalbzjm zT-DXOi>bhEqe5qjqq~?<;;V`rw39oyR<S3M7KYo%4`Ije-n@SM>ipx`*=IX(#I0ty zs`O8&2mZU>+|2WZpQf!VzVKD~?%EDdWX+nApSnK=dhSe09+4TDg^$TGnRm~BvSXRI literal 0 HcmV?d00001 diff --git a/www/web/warpzone/__pycache__/wsgi.cpython-34.pyc b/www/web/warpzone/__pycache__/wsgi.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0410249c7df1fea5b2550cf3b443a8ee1b51f252 GIT binary patch literal 530 zcmYjN!EO^V5S`s^lWHkaDOJzDMuN4tA%qa1wrLQghZK<ZvN7w)#*x?F+D<}q?Pv50 z_@%vo#EA<Zz==tsO0n#x(agMg&-3^2ar*Pu&6oQK;5Y1?gyOgK{CffkkP}8AW6%-g z6wpmT$51DbClFx-vptyYgWLnT4|g%861XE?XH6RQI;%GQI_eKtY0X4cY+@a|(4xAW zn}Cir&d#t5S(*+4!|#pt=vkN|+j4}~;+sY$JQJ+8a<1{Y#szA&5Ke7MM${<Tcr2Pm zt5O7I&3H`nE=Z`h4w*8fS#Ju=8XB%Vn<$OXm`6;fAvFFK=hBuwlQUr|`{1dxHAll= zWH0&DE`#L~8*OiEG=VRDrFi;>b_By-)Sgrrigm8ov5}vieRwzQUlpVC>+8X=KPo<5 zoqhgzzIw70u31@wna2>6seG^7c8h{M6h#|bpC4_VWF>tdThDbdDYacR3+1e7QzA;7 th`A2=qaDc~;JVbffq%yte-PUE&6?Zx;PrNkZw{!<ub~qk#z*nf_&*SapN;?k literal 0 HcmV?d00001 diff --git a/web/warpzone/settings.py b/www/web/warpzone/settings.py similarity index 81% rename from web/warpzone/settings.py rename to www/web/warpzone/settings.py index 1cc6017..9b68203 100644 --- a/web/warpzone/settings.py +++ b/www/web/warpzone/settings.py @@ -56,6 +56,10 @@ INSTALLED_APPS = ( 'warpmain', 'warpauth', 'warpfood', + # WARPPAY + 'rest_framework', + 'rest_framework.authtoken', + 'warppay' ) MIDDLEWARE_CLASSES = ( @@ -105,7 +109,7 @@ DATABASES = { 'ENGINE': 'ldapdb.backends.ldap', 'NAME': 'ldap://ldap/', 'USER': 'cn=admin,dc=warpzone,dc=ms', - 'PASSWORD': '12345', + 'PASSWORD': 'k7dAw8j2', } } DATABASE_ROUTERS = ['ldapdb.router.Router'] @@ -142,16 +146,16 @@ AUTHENTICATION_BACKENDS = ( AUTH_LDAP_SERVER_URI = "ldap://ldap" AUTH_LDAP_BIND_DN = "cn=admin,dc=warpzone,dc=ms" -AUTH_LDAP_BIND_PASSWORD = "12345" +AUTH_LDAP_BIND_PASSWORD = "k7dAw8j2" -AUTH_LDAP_USER_SEARCH_PATH = "ou=people,dc=warpzone,dc=ms" +AUTH_LDAP_USER_SEARCH_PATH = "ou=users,dc=warpzone,dc=ms" AUTH_LDAP_USER_SEARCH_FILTER = "(uid=%(user)s)" AUTH_LDAP_USER_SEARCH = LDAPSearch(AUTH_LDAP_USER_SEARCH_PATH, ldap.SCOPE_SUBTREE, AUTH_LDAP_USER_SEARCH_FILTER) -AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn", "email": "description"} +AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn", "email": "mail"} AUTH_LDAP_PROFILE_ATTR_MAP = {"home_directory": "homeDirectory"} AUTH_LDAP_GROUP_SEARCH_PATH = "dc=warpzone,dc=ms" @@ -175,11 +179,36 @@ AUTH_LDAP_GROUP_CACHE_TIMEOUT = 10 logger = logging.getLogger('django_auth_ldap') logger.addHandler(logging.StreamHandler()) +hdlr = logging.FileHandler('/tmp/ldap.log') +formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') +hdlr.setFormatter(formatter) +logger.addHandler(hdlr) logger.setLevel(logging.DEBUG) +logger1 = logging.getLogger('main') +hdlr = logging.FileHandler('/tmp/main.log') +formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') +hdlr.setFormatter(formatter) +logger1.addHandler(hdlr) +logger1.setLevel(logging.DEBUG) + # # MISC # # Lifetime of Password Reset Token in Minutes PW_RESET_TOKEN_LIFETIME = 5 + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, "static") + +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': [ + 'rest_framework.authentication.BasicAuthentication', + 'rest_framework.authentication.SessionAuthentication', + 'rest_framework.authentication.TokenAuthentication' + ], + 'DEFAULT_PERMISSION_CLASSES': [ +# 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' + ] +} diff --git a/www/web/warpzone/settings.pyc b/www/web/warpzone/settings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc578008ae4126e34ca88bf7ada8cbc801e679a1 GIT binary patch literal 5109 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 literal 0 HcmV?d00001 diff --git a/web/warpzone/urls.py b/www/web/warpzone/urls.py similarity index 91% rename from web/warpzone/urls.py rename to www/web/warpzone/urls.py index 43d6230..d45c333 100644 --- a/web/warpzone/urls.py +++ b/www/web/warpzone/urls.py @@ -9,4 +9,5 @@ urlpatterns = [ url(r'^', include('warpmain.urls')), url(r'^', include('warpauth.urls')), url(r'^', include('warpfood.urls')), + url(r'^', include('warppay.urls')), ] diff --git a/www/web/warpzone/urls.pyc b/www/web/warpzone/urls.pyc new file mode 100644 index 0000000000000000000000000000000000000000..737f379b07d3d43684be9c2971f0973df413b2f0 GIT binary patch literal 690 zcmZXQzi!k(5XNWi^ZEXwQ-lzyXebPY-BCpWBq%6CkU<nK5-r}n%bx6A%R5dK+Us}# zIv$57$^#@b_9+l$ZI8e2H#_$1gg49CuRp)Pm#|+`dcUK`|D~Yl7El2cgASk)PzO*1 zP=`>2Ab3Xz)d=bcifHg7sK!voP{bf~2r2>{fR120f$bD_0(NAHk3q#?1n3yHGf)$F zvkUvglnd1CzpVqAKO&1qWVt7sF%)y|{%i7tPGW9peNF<B7_+x!)hUf3>8`C3!HI~1 zRJE~#osjh!(b$dmTy)kaGyjxzt(B2k^7hM7Bk|%mef{dCKcs}(O1p9CrO{VD^(fJl zsn_kL#wBN6+11+OdFvb^|Mko>zmjcJOJh@N#@`d!;l)F;c1{gsv9D_6bq^8-IHoXk zfUA3%md>vGO*t{h`@`~7_PtUXTk|9Dr!#-R*EvrJM-;q4-3x9JXGBgue)#nMJU>1C zhFnFQMuEDuJ|PSLf`36aa}8#EPGi@t?A1?ab;h4dn``88AJtBEl|JSU{Q-rAcqUe2 M6+Rb-;-J6o0QDQ0ApigX literal 0 HcmV?d00001 diff --git a/web/warpzone/wsgi.py b/www/web/warpzone/wsgi.py similarity index 100% rename from web/warpzone/wsgi.py rename to www/web/warpzone/wsgi.py diff --git a/www/web/warpzone/wsgi.pyc b/www/web/warpzone/wsgi.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d3a5230fff80a80c4c75d4a2bb32d822eda4e87 GIT binary patch literal 570 zcmYjNO>Yx15cTf10WBbv4{`P}2Ux2&gb)JMHl(7d)D)0%*|_V;#*x>vtS1TO+JDJ~ z{s(?QJ5H#mwfj7t=XvwS+21GmpX(prD)Db+yno<7d}1&{Oc)bkQsELY;efwPxKuQm zm}DY>L@aj1Vpo_QVRpq;%Bf6Taa}JKjr+Z*^_wC8J{}BZg??shIm1pKIbDBVdV)^2 z9WJ1vBF~2;;b)5hf}}afZH;zLUpSCDNG%&QO9!tVtiZ{Y?(By0x&b4nQ{A@CR+=pO z>6G=3xKV>0Nb9+0vmqpU7Pmpptb<oF0OWI`HoR5JU=<3p(7whyPZc%_yxK3`s5!0) zm4VjbWdoknI@DI>_J-G}pYV|Mf}sW~BU9cpLob;)IQ}>qoR;Im^Yh_oFfLC{559gm z3{RO_>#qHU9*O`&*4Lr`Aj(B3OLkS3lyZ!L_ITSmEGizXh@H+jx4jI0WjpkgbAqJ| v%=FR`J>ug%H~o13KZIv|EYzKc%~(ZyNe?;wZu{QvV;my%(#Ppu`aHb_A2OZy literal 0 HcmV?d00001 -- GitLab