From 3f402642437c8d4d1233ecaa318c16a4b9946b09 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Tue, 2 May 2017 15:57:25 -0700 Subject: [PATCH] initial commit --- .gitignore | 11 + AUTHORS.md | 8 + CONTRIBUTING.md | 27 + LICENSE | 25 + Makefile | 16 + NOTICE | 121 + README.md | 36 + __main__.py | 20 + configs/config.yaml | 60 + docs/.gitignore | 1 + docs/make.bat | 36 + docs/source/api.rst | 4 + docs/source/conf.py | 165 + docs/source/index.rst | 21 + e2e/conftest.py | 242 + e2e/test_audit.py | 103 + e2e/test_events.py | 295 ++ e2e/test_login.py | 155 + e2e/test_notification.py | 240 + e2e/test_override.py | 194 + e2e/test_populate.py | 124 + e2e/test_roles.py | 30 + e2e/test_rosters.py | 199 + e2e/test_schedules.py | 163 + e2e/test_services.py | 112 + e2e/test_teams.py | 354 ++ e2e/test_users.py | 74 + e2e/testutils.py | 11 + requirements.txt | 25 + setup.py | 25 + src/oncall/__init__.py | 1 + src/oncall/api/__init__.py | 16 + src/oncall/api/v0/__init__.py | 73 + src/oncall/api/v0/event.py | 215 + src/oncall/api/v0/event_link.py | 136 + src/oncall/api/v0/event_override.py | 195 + src/oncall/api/v0/event_swap.py | 88 + src/oncall/api/v0/events.py | 240 + src/oncall/api/v0/notification_types.py | 12 + src/oncall/api/v0/notifications.py | 30 + src/oncall/api/v0/populate.py | 63 + src/oncall/api/v0/role.py | 21 + src/oncall/api/v0/roles.py | 75 + src/oncall/api/v0/roster.py | 172 + src/oncall/api/v0/roster_user.py | 73 + src/oncall/api/v0/roster_users.py | 89 + src/oncall/api/v0/rosters.py | 116 + src/oncall/api/v0/schedule.py | 105 + src/oncall/api/v0/schedules.py | 253 + src/oncall/api/v0/search.py | 44 + src/oncall/api/v0/service.py | 59 + src/oncall/api/v0/service_oncall.py | 39 + src/oncall/api/v0/service_teams.py | 21 + src/oncall/api/v0/services.py | 71 + src/oncall/api/v0/team.py | 133 + src/oncall/api/v0/team_admin.py | 44 + src/oncall/api/v0/team_admins.py | 80 + src/oncall/api/v0/team_changes.py | 18 + src/oncall/api/v0/team_oncall.py | 93 + src/oncall/api/v0/team_service.py | 32 + src/oncall/api/v0/team_services.py | 75 + src/oncall/api/v0/team_summary.py | 79 + src/oncall/api/v0/team_user.py | 32 + src/oncall/api/v0/team_users.py | 73 + src/oncall/api/v0/teams.py | 100 + src/oncall/api/v0/upcoming_shifts.py | 35 + src/oncall/api/v0/user.py | 84 + src/oncall/api/v0/user_notification.py | 90 + src/oncall/api/v0/user_notifications.py | 104 + src/oncall/api/v0/user_teams.py | 25 + src/oncall/api/v0/users.py | 138 + src/oncall/app.py | 136 + src/oncall/auth/__init__.py | 263 + src/oncall/auth/login.py | 46 + src/oncall/auth/logout.py | 16 + src/oncall/auth/modules/__init__.py | 0 src/oncall/auth/modules/debug.py | 10 + src/oncall/bin/__init__.py | 0 src/oncall/bin/build_assets.py | 15 + src/oncall/bin/notifier.py | 277 ++ src/oncall/bin/scheduler.py | 341 ++ src/oncall/constants.py | 40 + src/oncall/db.py | 22 + src/oncall/doc_helper.py | 13 + src/oncall/healthcheck.py | 34 + src/oncall/messengers/__init__.py | 40 + src/oncall/messengers/dummy.py | 14 + src/oncall/messengers/iris_messenger.py | 18 + src/oncall/metrics/__init__.py | 36 + src/oncall/metrics/dummy.py | 16 + src/oncall/metrics/influx.py | 55 + src/oncall/metrics/prometheus.py | 42 + src/oncall/sphinx_extension.py | 88 + src/oncall/ui/__init__.py | 121 + src/oncall/ui/static/css/bootstrap.min.css | 5 + src/oncall/ui/static/css/incalendar.css | 546 +++ src/oncall/ui/static/css/oncall.css | 2017 ++++++++ .../ui/static/fonts/Source-Sans-Pro.css | 18 + .../ui/static/images/chevron-bottom.svg | 3 + src/oncall/ui/static/images/favicon.png | Bin 0 -> 5364 bytes .../ui/static/images/headshot-blank.jpg | Bin 0 -> 1571 bytes src/oncall/ui/static/images/inbug.png | Bin 0 -> 279 bytes .../ui/static/images/oncall_logo_blue.png | Bin 0 -> 5013 bytes .../ui/static/images/oncall_logo_white.png | Bin 0 -> 3394 bytes src/oncall/ui/static/js/bootstrap.min.js | 7 + src/oncall/ui/static/js/handlebars.min.js | 29 + src/oncall/ui/static/js/incalendar.js | 1738 +++++++ src/oncall/ui/static/js/jquery-2.1.4.min.js | 4 + src/oncall/ui/static/js/moment-timezone.js | 601 +++ src/oncall/ui/static/js/moment-tz-data.js | 29 + src/oncall/ui/static/js/moment.js | 4303 +++++++++++++++++ src/oncall/ui/static/js/navigo.js | 3 + src/oncall/ui/static/js/oncall.js | 2453 ++++++++++ src/oncall/ui/static/js/typeahead.js | 2451 ++++++++++ src/oncall/ui/templates/base.html | 225 + src/oncall/ui/templates/index.html | 1295 +++++ src/oncall/utils.py | 136 + src/oncall/wrappers/__init__.py | 0 src/oncall/wrappers/gunicorn.py | 9 + src/oncall/wrappers/uwsgi.py | 17 + test/test_notifier.py | 28 + test/test_scheduler.py | 263 + 122 files changed, 24162 insertions(+) create mode 100644 .gitignore create mode 100644 AUTHORS.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 NOTICE create mode 100644 README.md create mode 100644 __main__.py create mode 100644 configs/config.yaml create mode 100644 docs/.gitignore create mode 100644 docs/make.bat create mode 100644 docs/source/api.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst create mode 100644 e2e/conftest.py create mode 100644 e2e/test_audit.py create mode 100644 e2e/test_events.py create mode 100644 e2e/test_login.py create mode 100644 e2e/test_notification.py create mode 100644 e2e/test_override.py create mode 100644 e2e/test_populate.py create mode 100644 e2e/test_roles.py create mode 100644 e2e/test_rosters.py create mode 100644 e2e/test_schedules.py create mode 100644 e2e/test_services.py create mode 100644 e2e/test_teams.py create mode 100644 e2e/test_users.py create mode 100644 e2e/testutils.py create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 src/oncall/__init__.py create mode 100644 src/oncall/api/__init__.py create mode 100644 src/oncall/api/v0/__init__.py create mode 100644 src/oncall/api/v0/event.py create mode 100644 src/oncall/api/v0/event_link.py create mode 100644 src/oncall/api/v0/event_override.py create mode 100644 src/oncall/api/v0/event_swap.py create mode 100644 src/oncall/api/v0/events.py create mode 100644 src/oncall/api/v0/notification_types.py create mode 100644 src/oncall/api/v0/notifications.py create mode 100644 src/oncall/api/v0/populate.py create mode 100644 src/oncall/api/v0/role.py create mode 100644 src/oncall/api/v0/roles.py create mode 100644 src/oncall/api/v0/roster.py create mode 100644 src/oncall/api/v0/roster_user.py create mode 100644 src/oncall/api/v0/roster_users.py create mode 100644 src/oncall/api/v0/rosters.py create mode 100644 src/oncall/api/v0/schedule.py create mode 100644 src/oncall/api/v0/schedules.py create mode 100644 src/oncall/api/v0/search.py create mode 100644 src/oncall/api/v0/service.py create mode 100644 src/oncall/api/v0/service_oncall.py create mode 100644 src/oncall/api/v0/service_teams.py create mode 100755 src/oncall/api/v0/services.py create mode 100644 src/oncall/api/v0/team.py create mode 100644 src/oncall/api/v0/team_admin.py create mode 100644 src/oncall/api/v0/team_admins.py create mode 100644 src/oncall/api/v0/team_changes.py create mode 100644 src/oncall/api/v0/team_oncall.py create mode 100644 src/oncall/api/v0/team_service.py create mode 100644 src/oncall/api/v0/team_services.py create mode 100644 src/oncall/api/v0/team_summary.py create mode 100644 src/oncall/api/v0/team_user.py create mode 100644 src/oncall/api/v0/team_users.py create mode 100755 src/oncall/api/v0/teams.py create mode 100644 src/oncall/api/v0/upcoming_shifts.py create mode 100644 src/oncall/api/v0/user.py create mode 100644 src/oncall/api/v0/user_notification.py create mode 100644 src/oncall/api/v0/user_notifications.py create mode 100644 src/oncall/api/v0/user_teams.py create mode 100644 src/oncall/api/v0/users.py create mode 100644 src/oncall/app.py create mode 100644 src/oncall/auth/__init__.py create mode 100644 src/oncall/auth/login.py create mode 100644 src/oncall/auth/logout.py create mode 100644 src/oncall/auth/modules/__init__.py create mode 100644 src/oncall/auth/modules/debug.py create mode 100644 src/oncall/bin/__init__.py create mode 100644 src/oncall/bin/build_assets.py create mode 100644 src/oncall/bin/notifier.py create mode 100644 src/oncall/bin/scheduler.py create mode 100644 src/oncall/constants.py create mode 100644 src/oncall/db.py create mode 100644 src/oncall/doc_helper.py create mode 100644 src/oncall/healthcheck.py create mode 100644 src/oncall/messengers/__init__.py create mode 100644 src/oncall/messengers/dummy.py create mode 100644 src/oncall/messengers/iris_messenger.py create mode 100644 src/oncall/metrics/__init__.py create mode 100644 src/oncall/metrics/dummy.py create mode 100644 src/oncall/metrics/influx.py create mode 100644 src/oncall/metrics/prometheus.py create mode 100644 src/oncall/sphinx_extension.py create mode 100644 src/oncall/ui/__init__.py create mode 100644 src/oncall/ui/static/css/bootstrap.min.css create mode 100644 src/oncall/ui/static/css/incalendar.css create mode 100644 src/oncall/ui/static/css/oncall.css create mode 100644 src/oncall/ui/static/fonts/Source-Sans-Pro.css create mode 100755 src/oncall/ui/static/images/chevron-bottom.svg create mode 100644 src/oncall/ui/static/images/favicon.png create mode 100644 src/oncall/ui/static/images/headshot-blank.jpg create mode 100644 src/oncall/ui/static/images/inbug.png create mode 100644 src/oncall/ui/static/images/oncall_logo_blue.png create mode 100644 src/oncall/ui/static/images/oncall_logo_white.png create mode 100644 src/oncall/ui/static/js/bootstrap.min.js create mode 100644 src/oncall/ui/static/js/handlebars.min.js create mode 100644 src/oncall/ui/static/js/incalendar.js create mode 100644 src/oncall/ui/static/js/jquery-2.1.4.min.js create mode 100644 src/oncall/ui/static/js/moment-timezone.js create mode 100644 src/oncall/ui/static/js/moment-tz-data.js create mode 100644 src/oncall/ui/static/js/moment.js create mode 100644 src/oncall/ui/static/js/navigo.js create mode 100644 src/oncall/ui/static/js/oncall.js create mode 100644 src/oncall/ui/static/js/typeahead.js create mode 100644 src/oncall/ui/templates/base.html create mode 100644 src/oncall/ui/templates/index.html create mode 100644 src/oncall/utils.py create mode 100644 src/oncall/wrappers/__init__.py create mode 100644 src/oncall/wrappers/gunicorn.py create mode 100644 src/oncall/wrappers/uwsgi.py create mode 100644 test/test_notifier.py create mode 100644 test/test_scheduler.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..654a5c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +env/ +venv/ +*.egg-info +*.pyc +.cache +.swp +.swo +build +dist +src/oncall/ui/static/.webassets-cache/ +src/oncall/ui/static/bundles diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 0000000..3b3352f --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,8 @@ +Core Contributors +== + +- Saif Ebrahim +- Joe Gillotti +- Qingping Hou +- Fellyn Silliman +- Daniel Wang diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..88e915f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,27 @@ +Contribution Agreement +====================== + +As a contributor, you represent that the code you submit is your +original work or that of your employer (in which case you represent you +have the right to bind your employer). By submitting code, you (and, if +applicable, your employer) are licensing the submitted code to LinkedIn +and the open source community subject to the BSD 2-Clause license. + +Responsible Disclosure of Security Vulnerabilities +================================================== + +Please do not file reports on Github for security issues. +Please review the guidelines on at (link to more info). +Reports should be encrypted using PGP (link to PGP key) and sent to +security@linkedin.com preferably with the title "Github linkedin/ - ". + +Tips for Getting Your Pull Request Accepted +=========================================== + +*Note: These are suggestions. Customize as needed.* + +1. Make sure all new features are tested and the tests pass. +2. Bug fixes must include a test case demonstrating the error that it fixes. +3. Open an issue first and seek advice for your change before submitting + a pull request. Large features which have never been discussed are + unlikely to be accepted. **You have been warned.** diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c2887bb --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +BSD 2-CLAUSE LICENSE + +Copyright 2017 LinkedIn Corporation. +All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8f98bad --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +all: serve + +serve: + @# python . ./configs/config.yaml + gunicorn --reload --access-logfile=- -b '0.0.0.0:8080' --worker-class gevent \ + -w 4 -e CONFIG=./configs/config.yaml -t 500 \ + oncall.wrappers.gunicorn:application + +test: + py.test -v ./e2e + py.test -v ./test + +check: + pyflakes test src + +.PHONY: test diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..3e087de --- /dev/null +++ b/NOTICE @@ -0,0 +1,121 @@ +Copyright 2017 LinkedIn Corporation +All Rights Reserved. +Licensed under the BSD 2-Clause License (the "License"). See License in the project root for license information. + +Oncall uses several third-party OSS libraries listed in +`src/oncall/ui/static/js` directory: + +# Jquery +https://jquery.com +Copyright JS Foundation and other contributors +License: Apache 2.0 (https://js.foundation/pdf/ip-policy.pdf) + +# handlebars +https://github.com/wycats/handlebars.js +Copyright (C) 2011-2016 by Yehuda Katz +License: MIT (https://github.com/wycats/handlebars.js/blob/master/LICENSE) + +# bootstrap +https://github.com/twbs/bootstrap +Copyright (c) 2011-2016 Twitter, Inc. +Copyright (c) 2011-2016 The Bootstrap Authors +License: MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + +# moment.js +https://momentjs.com/ +Copyright (c) JS Foundation and other contributors +License: MIT (https://github.com/moment/moment/blob/develop/LICENSE) + +# navigo +https://github.com/krasimir/navigo +Copyright (c) 2015 Krasimir Tsonev +License: MIT (https://github.com/krasimir/navigo/blob/master/LICENSE) + +# typeahead.js +https://twitter.github.io/typeahead.js/ +Copyright (c) 2013-2014 Twitter, Inc +License: MIT (https://github.com/twitter/typeahead.js/blob/master/LICENSE) + +# iconic +https://www.useiconic.com/open +License: MIT (https://useiconic.com/open#icons) + +OPEN SOURCE LICENSES: + +The MIT License (MIT) + +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. + + +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: + + You must give any other recipients of the Work or Derivative Works a copy of this License; and + You must cause any modified files to carry prominent notices stating that You changed the files; and + 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 + 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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..cc1c951 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +Oncall +====== + +Initial setup +------------- + +Install dependencies: + +``` +pip install -r requirements.txt +python setup.py develop +``` + +Setup mysql schema: + +``` +mysql -u root -p < ./db/schema.v0.sql +``` + +Setup app config by editing configs/config.yaml. + + +Run +--- + +``` +make serve +``` + + +Test +--- + +``` +make test +``` diff --git a/__main__.py b/__main__.py new file mode 100644 index 0000000..0e5de6b --- /dev/null +++ b/__main__.py @@ -0,0 +1,20 @@ +from gevent.pywsgi import WSGIServer, WSGIHandler +import sys +from oncall import utils +from oncall.app import get_wsgi_app + + +class RawURIWSGIHandler(WSGIHandler): + def get_environ(self): + env = super(RawURIWSGIHandler, self).get_environ() + env['RAW_URI'] = self.path + return env + + +if __name__ == '__main__': + application = get_wsgi_app() + config = utils.read_config(sys.argv[1]) + addr = (config['server']['host'], config['server']['port']) + print 'Listening on %s...' % (addr,) + WSGIServer.handler_class = RawURIWSGIHandler + WSGIServer(addr, application).serve_forever() diff --git a/configs/config.yaml b/configs/config.yaml new file mode 100644 index 0000000..743e996 --- /dev/null +++ b/configs/config.yaml @@ -0,0 +1,60 @@ +server: + host: 0.0.0.0 + port: 8080 +debug: True +oncall_host: http://localhost:8080 +metrics: dummy +db: + conn: + kwargs: + scheme: mysql+pymysql + user: root + host: 127.0.0.1 + database: oncall-api + charset: utf8 + echo: True + str: "%(scheme)s://%(user)s@%(host)s/%(database)s?charset=%(charset)s" + kwargs: + pool_recycle: 3600 +session: + encrypt_key: 'abc' + sign_key: '123' +auth: + debug: True + module: 'oncall.auth.modules.debug' +notifier: + skipsend: True +healthcheck_path: /tmp/status +messengers: + - type: dummy + application: oncall + iris_api_key: magic + +# allow_origins_list: +# - http://www.example.com + +index_content_setting: + footer: | +
    +
  • Oncall © LinkedIn 2017
  • +
  • Feedback
  • +
+ +notifications: + default_roles: + - "primary" + - "secondary" + - "shadow" + - "manager" + default_times: + - 86400 + - 604800 + default_modes: + - "email" + +reminder: + polling_interval: 360 + default_timezone: 'US/Pacific' + +slack_instance: foobar +header_color: '#3a3a3a' diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +build diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..f48c83e --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build +set SPHINXPROJ=Oncall + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/docs/source/api.rst b/docs/source/api.rst new file mode 100644 index 0000000..bbbea44 --- /dev/null +++ b/docs/source/api.rst @@ -0,0 +1,4 @@ +API +======== + +.. autofalcon:: oncall.doc_helper:app diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..29c44cc --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# +# Oncall documentation build configuration file, created by +# sphinx-quickstart on Mon May 1 10:06:23 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) +import oncall +import sphinx_rtd_theme + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.autodoc', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinxcontrib.httpdomain', + 'oncall.sphinx_extension'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Oncall' +copyright = u'2017, The Iris team' +author = u'Daniel Wang, Qingping Hou, Joe Gillotti, Fellyn Silliman' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = oncall.__version__ +# The full version, including alpha/beta/rc tags. +release = oncall.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' +html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Oncalldoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'Oncall.tex', u'Oncall Documentation', + u'Daniel Wang, Qingping Hou, Joe Gillotti, Fellyn Silliman', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'oncall', u'Oncall Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'Oncall', u'Oncall Documentation', + author, 'Oncall', 'One line description of project.', + 'Miscellaneous'), +] + + + diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..b47adc9 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,21 @@ +.. Oncall documentation master file, created by + sphinx-quickstart on Mon May 1 10:06:23 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Oncall's documentation! +================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + api + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/e2e/conftest.py b/e2e/conftest.py new file mode 100644 index 0000000..ebde295 --- /dev/null +++ b/e2e/conftest.py @@ -0,0 +1,242 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +#!/usr/bin/env python + +import pytest +import requests +from uuid import uuid4 +from oncall import db +from testutils import api_v0 + +db_config = {'conn': {'kwargs': {'charset': 'utf8', + 'database': 'oncall-api', + 'host': '127.0.0.1', + 'scheme': 'mysql+pymysql', + 'user': 'root'}, + 'str': '%(scheme)s://%(user)s@%(host)s/%(database)s?charset=%(charset)s'}, + 'kwargs': {'pool_recycle': 3600}} + + +@pytest.fixture(scope="session", autouse=True) +def require_db(): + db.init(db_config) + +@pytest.fixture(scope="session", autouse=True) +def require_test_user(): + re = requests.post(api_v0('users'), json={'name': 'test_user'}) + assert re.status_code in [422, 201] + +@pytest.fixture(scope="function") +def user(request): + + class UserFactory(object): + + def __init__(self, prefix): + self.prefix = prefix + self.created = [] + + def create(self): + name = '_'.join([self.prefix, 'user', str(len(self.created))]) + re = requests.post(api_v0('users'), json={'name': name}) + assert re.status_code in [201, 422] + self.created.append(name) + return name + + def add_to_team(self, user, team): + re = requests.post(api_v0('teams/%s/users' % team), json={'name': user}) + assert re.status_code == 201 + + def add_to_roster(self, user, team, roster): + re = requests.post(api_v0('teams/%s/rosters/%s/users' % (team, roster)), + json={'name': user}) + assert re.status_code == 201 + + def cleanup(self): + for user in self.created: + requests.delete(api_v0('users/' + user)) + + factory = UserFactory(request.function.prefix) + yield factory + factory.cleanup() + + +@pytest.fixture(scope="function") +def team(request, user): + + class TeamFactory(object): + + def __init__(self, prefix): + self.prefix = prefix + self.created = set() + self.connection = db.connect() + self.cursor = self.connection.cursor() + + def create(self): + name = '_'.join([self.prefix, 'team', str(len(self.created))]) + re = requests.post(api_v0('teams'), json={'name': name, 'scheduling_timezone': 'utc'}) + assert re.status_code in [201, 422] + self.created.add(name) + return name + + def mark_for_cleaning(self, team_name): + self.created.add(team_name) + + def cleanup(self): + for team in self.created: + requests.delete(api_v0('teams/' + team)) + if self.created: + self.cursor.execute('DELETE FROM team WHERE name IN %s', (self.created,)) + self.connection.commit() + self.cursor.close() + self.connection.close() + + factory = TeamFactory(request.function.prefix) + yield factory + factory.cleanup() + + +@pytest.fixture(scope="function") +def roster(request, team): + + class RosterFactory(object): + + def __init__(self, prefix): + self.prefix = prefix + self.created = [] + + def init(self, prefix): + self.prefix = prefix + + def create(self, team_name): + roster_name = '_'.join([self.prefix, 'roster', str(len(self.created))]) + re = requests.post(api_v0('teams/%s/rosters' % team_name), + json={'name': roster_name}) + assert re.status_code in [201, 422] + self.created.append((roster_name, team_name)) + return roster_name + + def cleanup(self): + for roster_name, team_name in self.created: + requests.delete(api_v0('teams/%s/rosters/%s' % (team_name, roster_name))) + + factory = RosterFactory(request.function.prefix) + yield factory + factory.cleanup() + + +@pytest.fixture(scope="function") +def schedule(roster, role): + + class ScheduleFactory(object): + def __init__(self): + self.created = [] + + def create(self, team_name, roster_name, json): + re = requests.post(api_v0('teams/%s/rosters/%s/schedules' % (team_name, roster_name)), json=json) + assert re.status_code == 201 + schedule_id = re.json()['id'] + self.created.append(schedule_id) + return schedule_id + + def cleanup(self): + for schedule_id in self.created: + requests.delete(api_v0('schedules/%d' % schedule_id)) + + factory = ScheduleFactory() + yield factory + factory.cleanup() + + +@pytest.fixture(scope="function") +def event(team, role): + + class EventFactory(object): + + def __init__(self, ): + self.created = [] + self.teams = set() + + def create(self, json): + re = requests.post(api_v0('events'), json=json) + assert re.status_code == 201 + ev_id = re.json() + self.created.append(ev_id) + self.teams.add(json['team']) + return ev_id + + def link(self, ids): + connection = db.connect() + cursor = connection.cursor() + link_id = uuid4().hex + cursor.execute('UPDATE `event` SET `link_id` = %s WHERE `id` IN %s', (link_id, ids)) + connection.commit() + cursor.close() + connection.close() + return link_id + + def cleanup(self): + for ev in self.created: + requests.delete(api_v0('events/%d' % ev)) + for t in self.teams: + re = requests.get(api_v0('events?team=' + t)) + for ev in re.json(): + requests.delete(api_v0('events/%d' % ev['id'])) + + factory = EventFactory() + yield factory + factory.cleanup() + + +@pytest.fixture(scope="function") +def role(request, roster): + class RoleFactory(object): + def __init__(self, prefix): + self.prefix = prefix + self.created = [] + + def create(self): + name = '_'.join([self.prefix, 'role', str(len(self.created))]) + re = requests.post(api_v0('roles'), json={'name': name}) + assert re.status_code in [201, 422] + self.created.append(name) + return name + + def cleanup(self): + for role_name in self.created: + requests.delete(api_v0('roles/' + role_name)) + + factory = RoleFactory(request.function.prefix) + yield factory + factory.cleanup() + + +@pytest.fixture(scope="function") +def service(request): + class ServiceFactory(object): + def __init__(self, prefix): + self.prefix = prefix + self.created = [] + self.mappings = [] + + def create(self): + name = '_'.join([self.prefix, 'service', str(len(self.created))]) + re = requests.post(api_v0('services'), json={'name': name}) + assert re.status_code in [201, 422] + self.created.append(name) + return name + + def associate_team(self, service_name, team_name): + requests.post(api_v0('teams/%s/services' % team_name), + json={'name': service_name}) + self.mappings.append((team_name, service_name)) + + def cleanup(self): + for team_name, service_name in self.mappings: + requests.delete(api_v0('teams/%s/services/%s' % (team_name, service_name))) + for service in self.created: + requests.delete(api_v0('services/' + service)) + + factory = ServiceFactory(request.function.prefix) + yield factory + factory.cleanup() \ No newline at end of file diff --git a/e2e/test_audit.py b/e2e/test_audit.py new file mode 100644 index 0000000..541ebb9 --- /dev/null +++ b/e2e/test_audit.py @@ -0,0 +1,103 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +import requests +import time +from testutils import prefix, api_v0 +from oncall.constants import (EVENT_CREATED, EVENT_EDITED, EVENT_SWAPPED, EVENT_DELETED, EVENT_SUBSTITUTED, + TEAM_CREATED, TEAM_EDITED, TEAM_DELETED, ROSTER_EDITED, ROSTER_USER_ADDED, + ROSTER_CREATED, ROSTER_USER_EDITED, ROSTER_USER_DELETED, ROSTER_DELETED, ADMIN_DELETED, + ADMIN_CREATED) +from oncall import db + +def get_audit_log(start, end): + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT action_name FROM audit WHERE timestamp BETWEEN %s AND %s', (int(start), int(end) + 1)) + ret = {row[0] for row in cursor} + cursor.close() + connection.close() + return ret + + +@prefix('test_audit') +def test_audit(team, user, role, roster, event): + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + team_name = team.create() + + # test team actions + start = time.time() + team_name_2 = team.create() + requests.put(api_v0('teams/'+team_name_2), json={'email': 'foo', 'slack_channel': 'bar'}) + requests.delete(api_v0('teams/%s' % team_name_2)) + end = time.time() + audit = get_audit_log(start, end) + assert {TEAM_CREATED, TEAM_DELETED, TEAM_EDITED} <= audit + + # test roster actions + start = time.time() + roster_name = roster.create(team_name) + requests.put(api_v0('teams/%s/rosters/%s' % (team_name, roster_name)), json={'name': 'foo'}) + requests.put(api_v0('teams/%s/rosters/foo' % team_name), json={'name': roster_name}) + # roster user actions + requests.post(api_v0('teams/%s/rosters/%s/users' % (team_name, roster_name)), + json={'name': user_name}) + requests.put(api_v0('teams/%s/rosters/%s/users/%s' % (team_name, roster_name, user_name)), + json={'in_rotation': False}) + requests.delete(api_v0('teams/%s/rosters/%s/users/%s' % (team_name, roster_name, user_name))) + # delete roster + requests.delete(api_v0('teams/%s/rosters/%s' % (team_name, roster_name))) + end = time.time() + audit = get_audit_log(start, end) + assert {ROSTER_CREATED, ROSTER_DELETED, ROSTER_USER_ADDED, ROSTER_USER_DELETED, + ROSTER_EDITED, ROSTER_USER_EDITED} <= audit + + # test event actions + start = time.time() + ev_start, ev_end = int(time.time()) + 100, int(time.time()) + 36000 + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + # create event + ev_id = event.create({ + 'start': ev_start, + 'end': ev_end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + ev_id_2 = event.create({ + 'start': ev_start, + 'end': ev_end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + # edit event + re = requests.put(api_v0('events/%d' % ev_id), json={'start': ev_start + 5, 'end': ev_end - 5}) + assert re.status_code == 200 + # swap events + requests.post(api_v0('events/swap'), json={'events': [{'id': ev_id, 'linked': False}, + {'id': ev_id_2, 'linked': False}]}) + # override event + requests.post(api_v0('events/override'), + json={'start': ev_start, + 'end': ev_end, + 'event_ids': [ev_id], + 'user': user_name_2}) + # delete event + requests.delete(api_v0('events/%d' % ev_id_2)) + end = time.time() + audit = get_audit_log(start, end) + assert {EVENT_DELETED, EVENT_CREATED, EVENT_EDITED, EVENT_SWAPPED, EVENT_SUBSTITUTED} \ + <= audit + + # add/delete admin + start = time.time() + requests.post(api_v0('teams/%s/admins' % team_name), json={'name': user_name}) + requests.delete(api_v0('teams/%s/admins/%s' % (team_name, user_name))) + end = time.time() + + audit = get_audit_log(start, end) + assert {ADMIN_CREATED, ADMIN_DELETED} <= audit diff --git a/e2e/test_events.py b/e2e/test_events.py new file mode 100644 index 0000000..37bae85 --- /dev/null +++ b/e2e/test_events.py @@ -0,0 +1,295 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import time +import requests +from testutils import prefix, api_v0 + + +def test_invalid_events(): + re = requests.get(api_v0('events/undefined')) + assert re.status_code != 200 + + +@prefix('test_events') +def test_events(team, user, role): + team_name = team.create() + team_name_2 = team.create() + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + role_name_2 = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + user.add_to_team(user_name_2, team_name_2) + + start, end = int(time.time()) + 100, int(time.time()+36000) + + def clean_up(): + re = requests.get(api_v0('events?team='+team_name)) + for ev in re.json(): + requests.delete(api_v0('events/%d' % ev['id'])) + + clean_up() + + # test create event + re = requests.post(api_v0('events'), json={ + 'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + assert re.status_code == 201 + ev_id = re.json() + assert isinstance(ev_id, int) + + re = requests.post(api_v0('events'), json={ + 'start': end, + 'end': start, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + assert re.status_code == 400 + + re = requests.post(api_v0('events'), json={ + 'start': start - 10000, + 'end': start - 5000, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + assert re.status_code == 400 + + sample_ev = { + 'end': end, + 'start': start, + 'id': ev_id, + 'user': user_name, + 'team': team_name, + 'role': role_name, + 'schedule_id': None, + 'link_id': None, + 'full_name': None + } + + # test get events by team + re = requests.get(api_v0('events?team__eq='+team_name)) + assert re.status_code == 200 + events = re.json() + assert isinstance(events, list) + assert len(events) == 1 + assert events[0] == sample_ev + + # test get events by users + re = requests.get(api_v0('events?user__eq='+user_name)) + assert re.status_code == 200 + events = re.json() + assert isinstance(events, list) + assert len(events) == 1 + assert events[0] == sample_ev + + # test swap events + re = requests.post(api_v0('events'), json={ + 'start': start + 5, + 'end': end + 5, + 'user': user_name_2, + 'team': team_name, + 'role': role_name, + }) + ev_id2 = re.json() + re = requests.post(api_v0('events/swap'), json={'events': [{'id': ev_id, 'linked': False}, + {'id': ev_id2, 'linked': False}]}) + assert re.status_code == 200 + # verify users swapped + re = requests.get(api_v0('events?id__eq=%d' % ev_id)) + assert re.status_code == 200 + assert re.json()[0]['user'] == user_name_2 + + # test update event + re = requests.put(api_v0('events/%d' % ev_id), json={'start': start - 5, 'end': end - 5, 'user': user_name_2, + 'role': role_name_2}) + assert re.status_code == 200 + re = requests.get(api_v0('events/%d' % ev_id)) + assert re.status_code == 200 + new_event = re.json() + assert new_event['start'] == start - 5 + assert new_event['end'] == end - 5 + assert new_event['user'] == user_name_2 + assert new_event['role'] == role_name_2 + + # test invalid event update + re = requests.put(api_v0('events/%d' % ev_id), json={'start': end, 'end': start, 'user': user_name_2, + 'role': role_name_2, 'team': team_name_2}) + assert re.status_code == 400 + + # test delete event + re = requests.delete(api_v0('events/%d' % ev_id)) + assert re.status_code == 200 + # verify event is deleted + re = requests.get(api_v0('events?id__eq=%d' % ev_id)) + assert re.status_code == 200 + assert set(re.json()) == set([]) + + clean_up() + + +@prefix('test_v0_linked_swap') +def test_api_v0_linked_swap(team, user, role, event): + team_name = team.create() + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + start = time.time() + 100 + end = start + 50000 + + # User 1 linked events + ev1 = event.create({'start': start, + 'end': start+1000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + ev2 = event.create({'start': start+1000, + 'end': start+2000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + # User 2 linked events + ev3 = event.create({'start': start+2000, + 'end': end-1000, + 'user': user_name_2, + 'team': team_name, + 'role': role_name}) + ev4 = event.create({'start': end-1000, + 'end': end+1000, + 'user': user_name_2, + 'team': team_name, + 'role': role_name}) + + link_id_1 = event.link([ev1, ev2]) + link_id_2 = event.link([ev3, ev4]) + + re = requests.post(api_v0('events/swap'), json={'events': [{'id': link_id_1, 'linked': True}, + {'id': link_id_2, 'linked': True}]}) + assert re.status_code == 200 + + # Check users have swappec + for ev_id in [ev1, ev2]: + re = requests.get(api_v0('events?id__eq=%d' % ev_id)) + assert re.status_code == 200 + assert re.json()[0]['user'] == user_name_2 + + for ev_id in [ev3, ev4]: + re = requests.get(api_v0('events?id__eq=%d' % ev_id)) + assert re.status_code == 200 + assert re.json()[0]['user'] == user_name + + +@prefix('test_v0_link_ev_swap') +def test_api_v0_link_event_swap(team, user, role, event): + team_name = team.create() + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + start = time.time() + 100 + end = start + 50000 + + # User 1 linked events + ev1 = event.create({'start': start, + 'end': start+1000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + ev2 = event.create({'start': start+1000, + 'end': start+2000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + # User 2 single event + ev3 = event.create({'start': start+2000, + 'end': end-1000, + 'user': user_name_2, + 'team': team_name, + 'role': role_name}) + + link_id = event.link([ev1, ev2]) + + re = requests.post(api_v0('events/swap'), json={'events': [{'id': link_id, 'linked': True}, + {'id': ev3, 'linked': False}]}) + assert re.status_code == 200 + + # Check users have swapped + for ev_id in [ev1, ev2]: + re = requests.get(api_v0('events?id__eq=%d' % ev_id)) + assert re.status_code == 200 + assert re.json()[0]['user'] == user_name_2 + + re = requests.get(api_v0('events?id__eq=%d' % ev3)) + assert re.status_code == 200 + assert re.json()[0]['user'] == user_name + + +@prefix('test_events_link') +def test_events_link(team, user, role): + team_name = team.create() + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + role_name_2 = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + start, end = int(time.time()), int(time.time()+36000) + + def clean_up(): + re = requests.get(api_v0('events?team='+team_name)) + for ev in re.json(): + requests.delete(api_v0('events/%d' % ev['id'])) + + clean_up() + + # test create linked events + re = requests.post(api_v0('events/link'), json=[ + { + 'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }, + { + 'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name_2, + } + ]) + assert re.status_code == 201 + ev_ids = re.json() + assert isinstance(ev_ids, list) + for eid in ev_ids: + assert isinstance(eid, int) + evs = [requests.get(api_v0('events/%d' % eid)).json() for eid in ev_ids] + assert len(evs) == len(ev_ids) + link_id = evs[0]['link_id'] + for ev in evs: + assert ev['team'] == team_name + assert ev['user'] == user_name + assert ev['start'] == start + assert ev['end'] == end + assert ev['link_id'] == link_id + + clean_up() diff --git a/e2e/test_login.py b/e2e/test_login.py new file mode 100644 index 0000000..3c53d82 --- /dev/null +++ b/e2e/test_login.py @@ -0,0 +1,155 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from beaker.middleware import SessionMiddleware +from falcon.testing import TestCase +from oncall.app import ReqBodyMiddleware +import falcon + +from oncall import db +from oncall.auth import ( + login, logout, login_required, check_user_auth, check_team_auth +) + + +class TestLogin(TestCase): + config = {'auth': {'ldap_cert_path': 'ldap_cert.pem', + 'ldap_url': 'ldaps://lca1-ldap-vip.corp.linkedin.com', + 'ldap_user_suffix': '@linkedin.biz', + 'module': 'ldap'}, + 'db': {'conn': {'kwargs': {'charset': 'utf8', + 'database': 'oncall-api', + 'echo': True, + 'host': '127.0.0.1', + 'scheme': 'mysql+pymysql', + 'user': 'root'}, + 'str': '%(scheme)s://%(user)s@%(host)s/%(database)s?charset=%(charset)s'}, + 'kwargs': {'pool_recycle': 3600}}, + 'server': {'host': '0.0.0.0', 'port': 8080}, + 'debug': True, + 'session': {'encrypt_key': 'abc', 'sign_key': '123'}} + + session_opts = { + 'session.type': 'cookie', + 'session.key': 'oncall-auth', + # 'session.httponly': True, + 'session.encrypt_key': config['session']['encrypt_key'], + 'session.validate_key': config['session']['sign_key'] + } + + class UserDummy(object): + @login_required + def on_get(self, req, resp, user): + check_user_auth(user, req) + + class TeamDummy(object): + @login_required + def on_get(self, req, resp, team): + check_team_auth(team, req) + + class DummyAuthenticator(object): + def authenticate(self, username, password): + return True + + def setUp(self): + super(TestLogin, self).setUp() + login.auth_manager = self.DummyAuthenticator() + api = falcon.API(middleware=[ + ReqBodyMiddleware(), + ]) + api.req_options.auto_parse_form_urlencoded = False + self.api = api + self.api.add_route('/login', login) + self.api.add_route('/logout', logout) + self.api.add_route('/dummy/{user}', self.UserDummy()) + self.api.add_route('/dummy2/{team}', self.TeamDummy()) + self.api = SessionMiddleware(self.api, self.session_opts) + + self.user_name = 'test_login_user' + self.admin_name = 'test_login_admin' + self.team_name = 'test_login_team' + + connection = db.connect() + cursor = connection.cursor() + # Create users + cursor.execute("INSERT INTO `user` (`name`, `active`) VALUES (%s, 1)", self.user_name) + self.user_id = cursor.lastrowid + cursor.execute("INSERT INTO `user` (`name`, `active`) VALUES (%s, 1)", self.admin_name) + self.admin_id = cursor.lastrowid + + # Set up team + cursor.execute("INSERT INTO `team` (`name`) VALUES (%s)", self.team_name) + self.team_id = cursor.lastrowid + cursor.execute("INSERT INTO `team_user` VALUES (%s, %s)", (self.team_id, self.user_id)) + cursor.execute("INSERT INTO `team_user` VALUES (%s, %s)", (self.team_id, self.admin_id)) + cursor.execute("INSERT INTO `team_admin` VALUES (%s, %s)", (self.team_id, self.admin_id)) + + connection.commit() + cursor.close() + connection.close() + + def tearDown(self): + connection = db.connect() + cursor = connection.cursor() + + cursor.execute("DELETE FROM `team` WHERE `name` = %s", self.team_name) + cursor.execute("DELETE FROM `user` WHERE `name` IN %s", ([self.user_name, self.admin_name],)) + + connection.commit() + cursor.close() + connection.close() + + def test_user_auth(self): + # Test no login + re = self.simulate_get('/dummy/'+self.user_name) + assert re.status_code == 401 + + # For tests below, put username/password into query string to + # simulate a xxx-form-urlencoded form post + # Test good login, auth check on self + re = self.simulate_post('/login', body='username=%s&password=abc' % self.user_name) + assert re.status_code == 200 + cookies = re.headers['set-cookie'] + token = str(re.json['csrf_token']) + re = self.simulate_get('/dummy/'+self.user_name, headers={'X-CSRF-TOKEN': token, 'Cookie': cookies}) + assert re.status_code == 200 + + # Test good login, auth check on manager + re = self.simulate_post('/login', body='username=%s&password=abc' % self.admin_name) + assert re.status_code == 200 + cookies = re.headers['set-cookie'] + token = str(re.json['csrf_token']) + re = self.simulate_get('/dummy/'+self.user_name, headers={'X-CSRF-TOKEN': token, 'Cookie': cookies}) + assert re.status_code == 200 + + def test_team_auth(self): + # Test good login, auth check on manager + re = self.simulate_post('/login', body='username=%s&password=abc' % self.admin_name) + assert re.status_code == 200 + cookies = re.headers['set-cookie'] + token = str(re.json['csrf_token']) + re = self.simulate_get('/dummy2/'+self.team_name, headers={'X-CSRF-TOKEN': token, 'Cookie': cookies}) + assert re.status_code == 200 + + def test_logout(self): + re = self.simulate_post('/login', body='username=%s&password=abc' % self.user_name) + cookies = re.headers['set-cookie'] + assert re.status_code == 200 + token = str(re.json['csrf_token']) + try: + re = self.simulate_post('/logout', headers={'X-CSRF-TOKEN': token, 'Cookie': cookies}) + except KeyError: + # FIXME: remove this try except after + # https://github.com/falconry/falcon/pull/957 is merged + pass + assert re.status_code == 200 + re = self.simulate_get('/dummy/'+self.user_name, headers={'X-CSRF-TOKEN': token, 'Cookie': cookies}) + assert re.status_code == 401 + + def test_csrf(self): + # Test good login, auth check on manager + re = self.simulate_post('/login', body='username=%s&password=abc' % self.admin_name) + assert re.status_code == 200 + cookies = re.headers['set-cookie'] + re = self.simulate_get('/dummy2/'+self.team_name, headers={'X-CSRF-TOKEN': 'foo', 'Cookie': cookies}) + assert re.status_code == 401 diff --git a/e2e/test_notification.py b/e2e/test_notification.py new file mode 100644 index 0000000..8c20301 --- /dev/null +++ b/e2e/test_notification.py @@ -0,0 +1,240 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +import requests +import time +from testutils import prefix, api_v0 +from oncall.constants import EVENT_CREATED, EVENT_DELETED, EVENT_SUBSTITUTED, EVENT_SWAPPED, EVENT_EDITED +from oncall import db + + +def get_notifications(usernames, type_name): + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute('''SELECT user.name AS user + FROM notification_queue JOIN user ON user_id = user.id + JOIN notification_type ON notification_queue.type_id = notification_type.id + WHERE user_id IN (SELECT id FROM user WHERE name IN %s) + AND notification_type.name = %s''', + (usernames, type_name)) + ret = cursor.fetchall() + cursor.close() + connection.close() + return ret + + +@prefix('test_v0_notification') +def test_notification_settings(team, user, role): + team_name = team.create() + team_name_2 = team.create() + user_name = user.create() + role_name = role.create() + role_name_2 = role.create() + + def clean_up(): + re = requests.get(api_v0('events?team='+team_name)) + for ev in re.json(): + requests.delete(api_v0('events/%d' % ev['id'])) + + clean_up() + + # test get notification settings, make sure there are none + re = requests.get(api_v0('users/%s/notifications' % user_name)) + assert re.status_code == 200 + assert re.json() == [] + + # test adding notification setting + notification = {'team': team_name, 'roles': [role_name, role_name_2], 'mode': 'email', 'type': EVENT_CREATED, + 'only_if_involved': True} + re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification) + assert re.status_code == 201 + setting_id = re.json()['id'] + + # check that setting values are correct + re = requests.get(api_v0('users/%s/notifications' % user_name)) + assert re.status_code == 200 + data = re.json() + assert len(data) == 1 + assert all([notification[key] == data[0][key] for key in notification]) + + # test editing setting + new_setting = {'team': team_name_2, 'roles': [role_name_2], 'mode': 'sms', 'type': EVENT_DELETED, + 'only_if_involved': False} + re = requests.put(api_v0('notifications/%s' % setting_id), json=new_setting) + assert re.status_code == 200 + + # check that setting now has new values + re = requests.get(api_v0('users/%s/notifications' % user_name)) + assert re.status_code == 200 + data = re.json() + assert len(data) == 1 + assert all([new_setting[key] == data[0][key] for key in new_setting]) + + # test deleting setting + re = requests.delete(api_v0('notifications/%s' % setting_id)) + assert re.status_code == 200 + + # make sure it was deleted + re = requests.get(api_v0('users/%s/notifications' % user_name)) + assert re.status_code == 200 + assert re.json() == [] + + +@prefix('v0_test_notify_on_ev_actions') +def test_notify_on_ev_actions(user, team, role, event): + user_name = user.create() + user_name_2 = user.create() + user_name_3 = user.create() + + team_name = team.create() + team_name_2 = team.create() + role_name = role.create() + role_name_2 = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + + start, end = int(time.time() + 100), int(time.time() + 36000) + + # For each type, create settings + for type_name in (EVENT_CREATED, EVENT_EDITED, EVENT_DELETED): + notification = {'team': team_name, 'roles': [role_name], 'mode': 'email', 'type': type_name, + 'only_if_involved': True} + re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification) + assert re.status_code == 201 + + # create identical setting for user_2 + re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=notification) + assert re.status_code == 201 + + # make setting where only_if_involved is False + new_notification = notification.copy() + new_notification['only_if_involved'] = False + re = requests.post(api_v0('users/%s/notifications' % user_name_3), json=new_notification) + assert re.status_code == 201 + + # make settings for user_2 with different team/role + new_notification = notification.copy() + new_notification['team'] = team_name_2 + re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=new_notification) + assert re.status_code == 201 + + new_notification = notification.copy() + new_notification['roles'] = [role_name_2] + re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=new_notification) + assert re.status_code == 201 + + # create event + ev_id = event.create({ + 'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + + # Check that notifications were created for users 1 and 3 (not 2) + notifications = get_notifications([user_name, user_name_2, user_name_3], EVENT_CREATED) + assert len(notifications) == 2 + assert {n['user'] for n in notifications} == {user_name, user_name_3} + + # Edit event + re = requests.put(api_v0('events/%d' % ev_id), json={'start': start + 5, 'end': end - 5, 'user': user_name_2, + 'role': role_name_2}) + assert re.status_code == 200 + # Check that each user got a notification + notifications = get_notifications([user_name, user_name_2, user_name_3], EVENT_EDITED) + assert len(notifications) == 3 + assert {n['user'] for n in notifications} == {user_name, user_name_2, user_name_3} + + # Delete event + re = requests.delete(api_v0('events/%d' % ev_id)) + assert re.status_code == 200 + # Check that user 2 got a notification + notifications = get_notifications([user_name, user_name_2, user_name_3], EVENT_DELETED) + assert len(notifications) == 1 + assert {n['user'] for n in notifications} == {user_name_2} + + +@prefix('v0_test_notify_on_swap') +def test_notify_on_swap(user, role, team, event): + user_name = user.create() + user_name_2 = user.create() + team_name = team.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + start, end = int(time.time() + 100), int(time.time() + 36000) + + ev_id = event.create({ + 'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + + ev_id_2 = event.create({ + 'start': start + 100, + 'end': end + 100, + 'user': user_name_2, + 'team': team_name, + 'role': role_name, + }) + + # set up notification settings + notification = {'team': team_name, 'roles': [role_name], 'mode': 'email', 'type': EVENT_SWAPPED, + 'only_if_involved': True} + re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification) + assert re.status_code == 201 + re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=notification) + assert re.status_code == 201 + + # Swap these events + re = requests.post(api_v0('events/swap'), json={'events': [{'id': ev_id, 'linked': False}, + {'id': ev_id_2, 'linked': False}]}) + assert re.status_code == 200 + + notifications = get_notifications([user_name, user_name_2], EVENT_SWAPPED) + assert len(notifications) == 2 + assert {n['user'] for n in notifications} == {user_name, user_name_2} + + +@prefix('v0_test_notify_on_override') +def test_notify_on_override(user, role, team, event): + user_name = user.create() + user_name_2 = user.create() + team_name = team.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + start, end = int(time.time() + 100), int(time.time() + 36000) + + ev_id = event.create({ + 'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name, + }) + + # set up notification settings + notification = {'team': team_name, 'roles': [role_name], 'mode': 'email', 'type': EVENT_SUBSTITUTED, + 'only_if_involved': True} + re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification) + assert re.status_code == 201 + re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=notification) + assert re.status_code == 201 + + re = requests.post(api_v0('events/override'), + json={'start': start + 200, + 'end': end - 200, + 'event_ids': [ev_id], + 'user': user_name_2}) + assert re.status_code == 200 + + notifications = get_notifications([user_name, user_name_2], EVENT_SUBSTITUTED) + assert len(notifications) == 2 + assert {n['user'] for n in notifications} == {user_name, user_name_2} diff --git a/e2e/test_override.py b/e2e/test_override.py new file mode 100644 index 0000000..bb05664 --- /dev/null +++ b/e2e/test_override.py @@ -0,0 +1,194 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +import requests +import time +from testutils import prefix,api_v0 + +start, end = int(time.time()), int(time.time() + 36000) +start = start / 1000 * 1000 +end = end / 1000 * 1000 + + +# Helper function to send an override request +def override(start_time, end_time, ev_ids, user): + re = requests.post(api_v0('events/override'), + json={'start': start_time, + 'end': end_time, + 'event_ids': ev_ids, + 'user': user}) + assert re.status_code == 200 + return re + + +# Test override when events need to be split +@prefix('test_v0_override_split') +def test_api_v0_override_split(team, user, role, event): + team_name = team.create() + user_name = user.create() + override_user = user.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(override_user, team_name) + + ev_id = event.create({'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + re = override(start + 100, end - 100, [ev_id], override_user) + data = re.json() + assert len(data) == 3 + + re = requests.get(api_v0('events?user=' + user_name)) + events = sorted(re.json(), key=lambda x: x['start']) + assert len(events) == 2 + assert events[0]['end'] == start + 100 + assert events[1]['start'] == end - 100 + + re = requests.get(api_v0('events?user=' + override_user)) + events = re.json() + assert events[0]['start'] == start + 100 + assert events[0]['end'] == end - 100 + + +# Test override when an event's start needs to be edited +@prefix('test_v0_override_edit_start') +def test_api_v0_override_edit_start(team, user, role, event): + team_name = team.create() + user_name = user.create() + override_user = user.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(override_user, team_name) + + ev_id = event.create({'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + re = override(start, end - 100, [ev_id], override_user) + data = re.json() + assert len(data) == 2 + + re = requests.get(api_v0('events?user=' + user_name)) + events = re.json() + assert len(events) == 1 + assert events[0]['end'] == end + assert events[0]['start'] == end - 100 + + re = requests.get(api_v0('events?user=' + override_user)) + events = re.json() + assert events[0]['start'] == start + assert events[0]['end'] == end - 100 + + +# Test override when an event's end needs to be edited +@prefix('test_api_v0_override_edit_end') +def test_api_v0_override_edit_end(team, user, role, event): + team_name = team.create() + user_name = user.create() + override_user = user.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(override_user, team_name) + + ev_id = event.create({'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + re = override(start + 100, end, [ev_id], override_user) + data = re.json() + assert len(data) == 2 + + re = requests.get(api_v0('events?user=' + user_name)) + events = re.json() + assert len(events) == 1 + assert events[0]['end'] == start + 100 + assert events[0]['start'] == start + + re = requests.get(api_v0('events?user=' + override_user)) + events = re.json() + assert events[0]['start'] == start + 100 + assert events[0]['end'] == end + + +# Test override when an event needs to be deleted +@prefix('test_api_v0_override_delete') +def test_api_v0_override_delete(team, user, role, event): + team_name = team.create() + user_name = user.create() + override_user = user.create() + role_name = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(override_user, team_name) + + ev_id = event.create({'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + re = override(start - 10, end + 10, [ev_id], override_user) + assert len(re.json()) == 1 + + re = requests.get(api_v0('events?user=' + user_name)) + events = re.json() + assert len(events) == 0 + + re = requests.get(api_v0('events?user=' + override_user)) + events = re.json() + assert events[0]['start'] == start + assert events[0]['end'] == end + + +# Test combination of above cases +@prefix('test_api_v0_override_multiple') +def test_api_v0_override_multiple(team, user, role, event): + team_name = team.create() + role_name = role.create() + user_name = user.create() + override_user = user.create() + user.add_to_team(user_name, team_name) + user.add_to_team(override_user, team_name) + + ev1 = event.create({'start': start-1000, + 'end': start+1000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + ev2 = event.create({'start': start+1000, + 'end': start+2000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + ev3 = event.create({'start': start+2000, + 'end': end-1000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + ev4 = event.create({'start': end-1000, + 'end': end+1000, + 'user': user_name, + 'team': team_name, + 'role': role_name}) + + re = override(start, end, [ev1, ev2, ev3, ev4], override_user) + assert len(re.json()) == 3 + + re = requests.get(api_v0('events?user=' + user_name)) + events = sorted(re.json(), key=lambda x: x['start']) + assert len(events) == 2 + assert events[0]['start'] == start - 1000 + assert events[0]['end'] == start + assert events[1]['start'] == end + assert events[1]['end'] == end + 1000 + + re = requests.get(api_v0('events?user=' + override_user)) + events = re.json() + assert events[0]['start'] == start + assert events[0]['end'] == end diff --git a/e2e/test_populate.py b/e2e/test_populate.py new file mode 100644 index 0000000..5264ad7 --- /dev/null +++ b/e2e/test_populate.py @@ -0,0 +1,124 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from testutils import prefix, api_v0 +import time +import requests + + +@prefix('test_v0_populate_new') +def test_api_v0_populate_new(user, team, roster, role, schedule): + user_name = user.create() + user_name_2 = user.create() + team_name = team.create() + role_name = role.create() + roster_name = roster.create(team_name) + schedule_id = schedule.create(team_name, + roster_name, + {'role': role_name, + 'events': [{'start': 0, 'duration': 604800}], + 'advanced_mode': 0, + 'auto_populate_threshold': 14}) + user.add_to_roster(user_name, team_name, roster_name) + user.add_to_roster(user_name_2, team_name, roster_name) + + def clean_up(): + re = requests.get(api_v0('events?team='+team_name)) + for ev in re.json(): + requests.delete(api_v0('events/%d' % ev['id'])) + + clean_up() + + re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': time.time()}) + assert re.status_code == 200 + + re = requests.get(api_v0('events?team=%s' % team_name)) + assert re.status_code == 200 + events = re.json() + assert len(events) == 2 + users = set([ev['user'] for ev in events]) + assert user_name in users + assert user_name_2 in users + + clean_up() + + +@prefix('test_v0_populate_over') +def test_api_v0_populate_over(user, team, roster, role, schedule): + user_name = user.create() + team_name = team.create() + role_name = role.create() + roster_name = roster.create(team_name) + schedule_id = schedule.create(team_name, + roster_name, + {'role': role_name, + 'events': [{'start': 0, 'duration': 604800}], + 'advanced_mode': 0, + 'auto_populate_threshold': 14}) + user.add_to_roster(user_name, team_name, roster_name) + + def clean_up(): + re = requests.get(api_v0('events?team='+team_name)) + for ev in re.json(): + requests.delete(api_v0('events/%d' % ev['id'])) + + clean_up() + + now = time.time() + re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': now}) + assert re.status_code == 200 + + re = requests.get(api_v0('events?team=%s' % team_name)) + assert re.status_code == 200 + events = re.json() + assert len(events) == 2 + # Weekly 12-hour schedule + new_events = [{'start': 0, 'duration': 43200}, + {'start': 86400, 'duration': 43200}, + {'start': 172800, 'duration': 43200}, + {'start': 259200, 'duration': 43200}, + {'start': 345600, 'duration': 43200}, + {'start': 432000, 'duration': 43200}, + {'start': 518400, 'duration': 43200}] + re = requests.put(api_v0('schedules/%s' % schedule_id), json={'events': new_events}) + assert re.status_code == 200 + + re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': now}) + assert re.status_code == 200 + + re = requests.get(api_v0('events?team=%s' % team_name)) + assert re.status_code == 200 + events = re.json() + + assert len(events) == 14 + clean_up() + + +@prefix('test_v0_populate_invalid') +def test_api_v0_populate_invalid(user, team, roster, role, schedule): + user_name = user.create() + team_name = team.create() + role_name = role.create() + roster_name = roster.create(team_name) + schedule_id = schedule.create(team_name, + roster_name, + {'role': role_name, + 'events': [{'start': 0, 'duration': 604800}], + 'advanced_mode': 0, + 'auto_populate_threshold': 14}) + user.add_to_roster(user_name, team_name, roster_name) + + + re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json={'start': time.time() - 14 * 24 * 3600}) + assert re.status_code == 400 + + # Check this is a no-op + re = requests.get(api_v0('schedules/%s' % schedule_id)) + assert re.status_code == 200 + schedule_json = re.json() + re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json={'start': time.time() + 21 * 3600 * 24}) + assert re.status_code == 200 + re = requests.get(api_v0('schedules/%s' % schedule_id)) + assert re.status_code == 200 + re = requests.get(api_v0('schedules/%s' % schedule_id)) + assert re.json() == schedule_json diff --git a/e2e/test_roles.py b/e2e/test_roles.py new file mode 100644 index 0000000..bce820c --- /dev/null +++ b/e2e/test_roles.py @@ -0,0 +1,30 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import requests +from testutils import api_v0 + +role_name = 'test_role' + + +def teardown_function(): + requests.delete(api_v0('roles/' + role_name)) + +def test_roles(): + # test adding role type + re = requests.post(api_v0('roles'), json={'name': role_name}) + assert re.status_code == 201 + + # test getting all roles + re = requests.get(api_v0('roles')) + assert re.status_code == 200 + roles = re.json() + assert isinstance(roles, list) + assert set([r['name'] for r in roles]) >= set([role_name]) + + # test delete + re = requests.delete(api_v0('roles/'+role_name)) + assert re.status_code == 200 diff --git a/e2e/test_rosters.py b/e2e/test_rosters.py new file mode 100644 index 0000000..5f2bad5 --- /dev/null +++ b/e2e/test_rosters.py @@ -0,0 +1,199 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import requests +import ujson +from testutils import prefix, api_v0 + + +@prefix('test_v0_rosters') +def test_api_v0_rosters(team): + team_name = team.create() + roster_name = 'test_v0_rosters_roster_0' + roster_name2 = 'test_v0_rosters_roster_1' + + def clean_up(): + requests.delete(api_v0('teams/%s/rosters/%s' % (team_name, roster_name))) + requests.delete(api_v0('teams/%s/rosters/%s' % (team_name, roster_name2))) + + clean_up() + + # test create rosters + re = requests.post(api_v0('teams/%s/rosters' % team_name), + json={'name': roster_name}) + assert re.status_code == 201 + re = requests.post(api_v0('teams/%s/rosters' % team_name), + json={'name': roster_name2}) + assert re.status_code == 201 + + # test fetch rosters + re = requests.get(api_v0('teams/%s/rosters' % team_name)) + assert re.status_code == 200 + rosters = re.json() + assert roster_name in rosters + assert roster_name2 in rosters + + re = requests.get(api_v0('teams/%s/rosters?name__contains=%s&name__startswith=%s&name__endswith=%s' + % (team_name, roster_name, roster_name, roster_name))) + assert re.status_code == 200 + rosters = re.json() + assert roster_name in rosters + + roster_id = rosters[roster_name]['id'] + re = requests.get(api_v0('teams/%s/rosters?id=%s' % (team_name, roster_id))) + assert re.status_code == 200 + rosters = re.json() + assert roster_name in rosters + + # test fetch single roster + re = requests.get(api_v0('teams/%s/rosters/%s' % (team_name, roster_name))) + assert re.status_code == 200 + roster = re.json() + assert set(['users', 'schedules']) == set(roster.keys()) + + # test rename roster to an existing roster + re = requests.put(api_v0('teams/%s/rosters/%s' % (team_name, roster_name)), + json={'name': roster_name2}) + assert re.status_code == 422 + assert re.json() == { + 'title': 'IntegrityError', + 'description': "roster '%s' already existed for team '%s'" % (roster_name2, team_name), + } + + # test delete rosters + re = requests.delete(api_v0('teams/%s/rosters/%s' % (team_name, roster_name))) + assert re.status_code == 200 + + re = requests.get(api_v0('teams/%s/rosters' % team_name)) + assert re.status_code == 200 + rosters = re.json() + assert roster_name not in rosters + assert roster_name2 in rosters + + re = requests.delete(api_v0('teams/%s/rosters/%s' % (team_name, roster_name2))) + assert re.status_code == 200 + + re = requests.get(api_v0('teams/%s/rosters' % team_name)) + assert re.status_code == 200 + rosters = re.json() + assert len(rosters.keys()) == 0 + + clean_up() + + +@prefix('test_v0_create_invalid_roster') +def test_api_v0_create_invalid_roster(team, roster): + team_name = team.create() + roster_name = "v0_create_= 1 + assert team_name in teams + + +@prefix('test_v0_get_team') +def test_api_v0_get_team(team, role, roster, schedule): + team_name = team.create() + role_name = role.create() + roster_name = roster.create(team_name) + schedule.create(team_name, roster_name, {'role': role_name, + 'events': [{'start': 0, 'duration': 60*60*24*7}], + 'advanced_mode': 0}) + + # by default, it should return everything + re = requests.get(api_v0('teams/'+team_name)) + assert re.status_code == 200 + team = re.json() + assert isinstance(team, dict) + expected_set = {'users', 'admins', 'services', 'rosters', 'name', 'id', 'slack_channel', 'email', 'scheduling_timezone'} + assert expected_set == set(team.keys()) + + # it should also support filter by fields + re = requests.get(api_v0('teams/%s?fields=users&fields=services&fields=admins' % team_name)) + assert re.status_code == 200 + team = re.json() + assert isinstance(team, dict) + expected_set = {'users', 'admins', 'services', 'name', 'id', 'slack_channel', 'email', 'scheduling_timezone'} + assert expected_set == set(team.keys()) + + +@prefix('test_v0_delete_team') +def test_api_v0_delete_team(team): + team_name = team.create() + requests.post(api_v0('teams'), json={"name": team_name}) + re = requests.delete(api_v0('teams/'+team_name)) + assert re.status_code == 200 + re = requests.get(api_v0('teams/'+team_name)) + assert re.status_code == 404 + + +@prefix('test_v0_update_team') +def test_api_v0_update_team(team): + team_name = team.create() + new_team_name = "new-moninfra-update" + email = 'abc@gmail.com' + slack = '#slack' + + # setup DB state + requests.delete(api_v0('teams/'+new_team_name)) + re = requests.get(api_v0('teams/'+new_team_name)) + assert re.status_code == 404 + + re = requests.get(api_v0('teams/'+team_name)) + assert re.status_code == 200 + # edit team name/email/slack + re = requests.put(api_v0('teams/'+team_name), json={'name': new_team_name, 'email': email, 'slack_channel': slack}) + assert re.status_code == 200 + team.mark_for_cleaning(new_team_name) + # verify result + re = requests.get(api_v0('teams/'+team_name)) + assert re.status_code == 404 + re = requests.get(api_v0('teams/'+new_team_name)) + assert re.status_code == 200 + data = re.json() + assert data['email'] == email + assert data['slack_channel'] == slack + + +@prefix('test_v0_team_admin') +def test_api_v0_team_admin(team, user): + + team_name = team.create() + re = requests.get(api_v0('teams/%s/admins') % team_name) + assert re.status_code == 200 + # Make sure the test user was made an admin after making the team + assert len(re.json()) == 1 + admin_user = user.create() + + # test create admin + re = requests.post(api_v0('teams/%s/admins' % team_name), + json={'name': admin_user}) + assert re.status_code == 201 + # verify result + re = requests.get(api_v0('teams/%s/admins' % team_name)) + assert re.status_code == 200 + assert admin_user in set(re.json()) + # user should be also added to team automatically + re = requests.get(api_v0('teams/%s' % team_name)) + assert re.status_code == 200 + assert admin_user in re.json()['users'] + + # test delete admin + re = requests.delete(api_v0('teams/%s/admins/%s' % (team_name, admin_user))) + # verify result + re = requests.get(api_v0('teams/%s/admins' % team_name)) + assert re.status_code == 200 + assert admin_user not in set(re.json()) + + +@prefix('test_v0_team_members') +def test_api_v0_team_members(team, user, roster): + team_name = team.create() + roster_name = roster.create(team_name) + user_name = user.create() + user_name_2 = user.create() + user_name_3 = user.create() + none_exist_user = 'team_users_test_random1231_user' + + # make sure we start with an empty team + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert len(users) == 1 + + # test add invalid user to the team + re = requests.post(api_v0('teams/%s/users') % team_name, json={'name': none_exist_user}) + assert re.status_code == 422 + re.json() == { + 'title': 'IntegrityError', + 'description': 'user %s not found' % none_exist_user + } + + # test add user to team + re = requests.post(api_v0('teams/%s/users') % team_name, json={'name': user_name}) + assert re.status_code == 201 + # verify team members + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([user_name, test_user]) + + # test duplicate user creation + re = requests.post(api_v0('teams/%s/users') % team_name, json={'name': user_name}) + assert re.status_code == 422 + assert re.json() == { + 'title': 'IntegrityError', + 'description': 'user name "%s" is already in team %s' % (user_name, team_name) + } + + # test delete user from team + re = requests.delete(api_v0('teams/%s/users/%s' % (team_name, user_name))) + assert re.status_code == 200 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user]) + + # test create admin + re = requests.post(api_v0('teams/%s/admins' % team_name), + json={'name': user_name_2}) + assert re.status_code == 201 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user, user_name_2]) + + # test add user to roster + re = requests.post(api_v0('teams/%s/rosters/%s/users' % (team_name, roster_name)), + json={'name': user_name_3}) + assert re.status_code == 201 + re = requests.post(api_v0('teams/%s/rosters/%s/users' % (team_name, roster_name)), + json={'name': user_name_2}) + assert re.status_code == 201 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user, user_name_2, user_name_3]) + + # delete admin/roster-member from team admins, check that they're not removed from team + re = requests.post(api_v0('teams/%s/admins' % team_name), + json={'name': user_name_3}) + assert re.status_code == 201 + re = requests.delete(api_v0('teams/%s/admins/%s' % (team_name, user_name_3))) + assert re.status_code == 200 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user, user_name_2, user_name_3]) + + # delete from roster too, check they're removed + re = requests.delete( + api_v0('teams/%s/rosters/%s/users/%s' % (team_name, roster_name, user_name_3))) + assert re.status_code == 200 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user, user_name_2]) + + # make sure roster but no admin stays in team + re = requests.delete(api_v0('teams/%s/admins/%s' % (team_name, user_name_2))) + assert re.status_code == 200 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user, user_name_2]) + + # delete from roster too, check that they're removed + re = requests.delete( + api_v0('teams/%s/rosters/%s/users/%s' % (team_name, roster_name, user_name_2))) + assert re.status_code == 200 + re = requests.get(api_v0('teams/%s/users' % team_name)) + assert re.status_code == 200 + users = re.json() + assert isinstance(users, list) + assert set(users) == set([test_user]) + + + +@prefix('test_v0_summary') +def test_api_v0_team_summary(team, user, role, event): + team_name = team.create() + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + role_name_2 = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + start, end = int(time.time()), int(time.time()+36000) + + event_data_1 = {'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name} + event_data_2 = {'start': start - 5, + 'end': end - 5, + 'user': user_name_2, + 'team': team_name, + 'role': role_name_2} + event_data_3 = {'start': start + 50000, + 'end': end + 50000, + 'user': user_name, + 'team': team_name, + 'role': role_name} + event_data_4 = {'start': start + 50005, + 'end': end + 50005, + 'user': user_name_2, + 'team': team_name, + 'role': role_name_2} + event_data_5 = {'start': start + 50001, + 'end': end + 50001, + 'user': user_name, + 'team': team_name, + 'role': role_name} + + # Create current events + event.create(event_data_1) + event.create(event_data_2) + # Create next events + event.create(event_data_3) + event.create(event_data_4) + # Create extra future event that isn't the next event + event.create(event_data_5) + + re = requests.get(api_v0('teams/%s/summary' % team_name)) + assert re.status_code == 200 + results = re.json() + keys = ['start', 'end', 'role'] + + assert all(results['current'][role_name][0][key] == event_data_1[key] for key in keys) + assert all(results['current'][role_name_2][0][key] == event_data_2[key] for key in keys) + assert all(results['next'][role_name][0][key] == event_data_3[key] for key in keys) + assert all(results['next'][role_name_2][0][key] == event_data_4[key] for key in keys) + + +@prefix('test_v0_summary') +def test_api_v0_non_exist_team_summary(team, user, role, event): + re = requests.get(api_v0('teams/fobar123bac-n-o-t-found/summary')) + assert re.status_code == 404 + + +@prefix('test_v0_team_oncall') +def test_api_v0_team_current_oncall(team, user, role, event): + team_name = team.create() + user_name = user.create() + user_name_2 = user.create() + role_name = role.create() + role_name_2 = role.create() + user.add_to_team(user_name, team_name) + user.add_to_team(user_name_2, team_name) + + + start, end = int(time.time()), int(time.time()+36000) + + event_data_1 = {'start': start, + 'end': end, + 'user': user_name, + 'team': team_name, + 'role': role_name} + event_data_2 = {'start': start - 5, + 'end': end - 5, + 'user': user_name_2, + 'team': team_name, + 'role': role_name_2} + event.create(event_data_1) + event.create(event_data_2) + + re = requests.get(api_v0('teams/%s/oncall/%s' % (team_name, role_name))) + assert re.status_code == 200 + results = re.json() + assert results[0]['start'] == start + assert results[0]['end'] == end + diff --git a/e2e/test_users.py b/e2e/test_users.py new file mode 100644 index 0000000..0ceba41 --- /dev/null +++ b/e2e/test_users.py @@ -0,0 +1,74 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import requests +import json +from testutils import prefix, api_v0 + + +def test_api_v0_users(): + user_name = 'test_v0_users_user' + + def clean_up(): + requests.delete(api_v0('users/'+user_name)) + + clean_up() + + # test adding user + re = requests.post(api_v0('users'), json={'name': user_name}) + assert re.status_code == 201 + + re = requests.get(api_v0('users/'+user_name)) + assert re.status_code == 200 + response = json.loads(re.text) + assert 'contacts' in response + assert response['full_name'] != 'John Doe' + + # test updating user + re = requests.put(api_v0('users/'+user_name), json={'full_name': 'John Doe', 'time_zone': 'PDT'}) + assert re.status_code == 204 + + # make sure update has gone through, test get + re = requests.get(api_v0('users/'+user_name)) + assert re.status_code == 200 + response = re.json() + assert response['full_name'] == 'John Doe' + + user_id = response['id'] + re = requests.get(api_v0('users?id=%s' % user_id)) + assert re.status_code == 200 + response = re.json() + assert response[0]['full_name'] == 'John Doe' + + re = requests.get(api_v0('users'), params={'name': user_name, 'fields': ['full_name', 'time_zone']}) + assert re.status_code == 200 + response = json.loads(re.text) + assert response[0]['full_name'] == 'John Doe' + assert response[0]['time_zone'] == 'PDT' + + clean_up() + + +@prefix('test_v0_user_teams') +def test_api_v0_user_teams(team, user): + team_name = team.create() + user_name = user.create() + + # should get an empty team list + re = requests.get(api_v0('users/%s/teams' % user_name)) + assert re.status_code == 200 + assert re.json() == [] + + # should not get an empty team list + re = requests.post(api_v0('teams/%s/users' % team_name), json={'name': user_name}) + assert re.status_code == 201 + re = requests.get(api_v0('users/%s/teams' % user_name)) + assert re.status_code == 200 + assert team_name in re.json() + + # should get 404 on invalid user + re = requests.get(api_v0('users/invalid_user_foobar-123/teams')) + assert re.status_code == 404 diff --git a/e2e/testutils.py b/e2e/testutils.py new file mode 100644 index 0000000..5830753 --- /dev/null +++ b/e2e/testutils.py @@ -0,0 +1,11 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +def prefix(prefix_str): + def wrapper(function): + function.prefix = prefix_str + return function + return wrapper + +def api_v0(path): + return 'http://localhost:8080/api/v0/%s' % path \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4817253 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,25 @@ +falcon==1.1.0 +falcon-cors +gevent +ujson +sqlalchemy +PyYAML +PyMYSQL +phonenumbers +jinja2 +streql +webassets +beaker +pycrypto +importlib +python-ldap +ordereddict # for 26 +pytz +icalendar + +# for dev, also yum install sqlite-devel +pytest +pytest-mock +requests +gunicorn +flake8 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..4d2abda --- /dev/null +++ b/setup.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +try: + from setuptools import setup +except ImportError: + from distutils.core import setup +import re +o +with open('src/oncall/__init__.py', 'r') as fd: + version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) + +setup( + name='oncall', + version=version, + packages=['oncall'], + package_dir={'': 'src'}, + entry_points={ + 'console_scripts': [ + 'build_assets = oncall.bin.build_assets:main', + 'oncall-scheduler = oncall.bin.scheduler:main', + 'oncall-notifier = oncall.bin.notifier:main' + ] + } +) diff --git a/src/oncall/__init__.py b/src/oncall/__init__.py new file mode 100644 index 0000000..b8023d8 --- /dev/null +++ b/src/oncall/__init__.py @@ -0,0 +1 @@ +__version__ = '0.0.1' diff --git a/src/oncall/api/__init__.py b/src/oncall/api/__init__.py new file mode 100644 index 0000000..a8ce63b --- /dev/null +++ b/src/oncall/api/__init__.py @@ -0,0 +1,16 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +from falcon import HTTPNotFound + + +def api_not_found(req, resp): + raise HTTPNotFound + + +def init(application, config): + application.add_sink(api_not_found, '/api/') + from .v0 import init as init_v0 + init_v0(application, config) diff --git a/src/oncall/api/v0/__init__.py b/src/oncall/api/v0/__init__.py new file mode 100644 index 0000000..db7665a --- /dev/null +++ b/src/oncall/api/v0/__init__.py @@ -0,0 +1,73 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + + +def init(application, config): + from . import teams, team, team_summary, team_oncall, team_changes + application.add_route('/api/v0/teams', teams) + application.add_route('/api/v0/teams/{team}', team) + application.add_route('/api/v0/teams/{team}/summary', team_summary) + application.add_route('/api/v0/teams/{team}/oncall/{role}', team_oncall) + application.add_route('/api/v0/teams/{team}/changes', team_changes) + + from . import team_admins, team_admin + application.add_route('/api/v0/teams/{team}/admins', team_admins) + application.add_route('/api/v0/teams/{team}/admins/{user}', team_admin) + + from . import team_users, team_user + application.add_route('/api/v0/teams/{team}/users', team_users) + application.add_route('/api/v0/teams/{team}/users/{user}', team_user) + + from . import rosters, roster + application.add_route('/api/v0/teams/{team}/rosters', rosters) + application.add_route('/api/v0/teams/{team}/rosters/{roster}', roster) + + from . import roster_users, roster_user + application.add_route('/api/v0/teams/{team}/rosters/{roster}/users', roster_users) + application.add_route('/api/v0/teams/{team}/rosters/{roster}/users/{user}', roster_user) + + from . import schedules, schedule + application.add_route('/api/v0/teams/{team}/rosters/{roster}/schedules', schedules) + application.add_route('/api/v0/schedules/{schedule_id}', schedule) + + from . import populate + application.add_route('/api/v0/schedules/{schedule_id}/populate', populate) + + from . import services, service, service_oncall + application.add_route('/api/v0/services', services) + application.add_route('/api/v0/services/{service}', service) + application.add_route('/api/v0/services/{service}/oncall/{role}', service_oncall) + + from . import team_services, team_service, service_teams + application.add_route('/api/v0/teams/{team}/services', team_services) + application.add_route('/api/v0/teams/{team}/services/{service}', team_service) + application.add_route('/api/v0/services/{service}/teams', service_teams) + + from . import roles, role + application.add_route('/api/v0/roles', roles) + application.add_route('/api/v0/roles/{role}', role) + + from . import events, event, event_swap, event_override, event_link + application.add_route('/api/v0/events', events) + application.add_route('/api/v0/events/{event_id}', event) + application.add_route('/api/v0/events/swap', event_swap) + application.add_route('/api/v0/events/override', event_override) + application.add_route('/api/v0/events/link', event_link) + + from . import users, user, user_teams, user_notifications + application.add_route('/api/v0/users', users) + application.add_route('/api/v0/users/{user_name}', user) + application.add_route('/api/v0/users/{user_name}/teams', user_teams) + application.add_route('/api/v0/users/{user_name}/notifications', user_notifications) + + from . import user_notification + application.add_route('/api/v0/notifications/{notification_id}', user_notification) + + from . import notification_types + application.add_route('/api/v0/notification_types', notification_types) + + from . import search + application.add_route('/api/v0/search', search) + + from . import upcoming_shifts + application.add_route('/api/v0/users/{user_name}/upcoming', upcoming_shifts) diff --git a/src/oncall/api/v0/event.py b/src/oncall/api/v0/event.py new file mode 100644 index 0000000..6311855 --- /dev/null +++ b/src/oncall/api/v0/event.py @@ -0,0 +1,215 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +import time +from ujson import dumps as json_dumps +from falcon import HTTPNotFound, HTTPBadRequest, HTTPForbidden + +from ...auth import login_required, check_calendar_auth +from ... import db +from ...utils import load_json_body, user_in_team_by_name, create_notification, create_audit +from ...constants import EVENT_DELETED, EVENT_EDITED + +from events import columns, all_columns + +update_columns = { + 'start': '`start`=%(start)s', + 'end': '`end`=%(end)s', + 'role': '`role_id`=(SELECT `id` FROM `role` WHERE `name`=%(role)s)', + 'user': '`user_id`=(SELECT `id` FROM `user` WHERE `name`=%(user)s)' +} + + +def on_get(req, resp, event_id): + ''' + Get event by id. + + **Example request:** + + .. sourcecode:: http + + GET /api/v0/events/1234 HTTP/1.1 + Host: example.com + + **Example response:** + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "end": 1428336000, + "full_name": "John Doe", + "id": 1234, + "link_id": null, + "role": "primary", + "schedule_id": 4321, + "start": 1427731200, + "team": "team-foo", + "user": "jdoe" + } + + :statuscode 200: no error + :statuscode 404: Event not found + ''' + fields = req.get_param_as_list('fields', transform=columns.__getitem__) + cols = ', '.join(fields) if fields else all_columns + query = '''SELECT %s FROM `event` + JOIN `user` ON `user`.`id` = `event`.`user_id` + JOIN `team` ON `team`.`id` = `event`.`team_id` + JOIN `role` ON `role`.`id` = `event`.`role_id` + WHERE `event`.`id` = %%s''' % cols + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(query, event_id) + data = cursor.fetchone() + num_found = cursor.rowcount + cursor.close() + connection.close() + if num_found == 0: + raise HTTPNotFound() + resp.body = json_dumps(data) + + +@login_required +def on_put(req, resp, event_id): + """ + Update an event by id; anyone can update any event within the team + + **Example request:** + + .. sourcecode:: http + + PUT /api/v0/events/1234 HTTP/1.1 + Content-Type: application/json + + { + "start": 1428336000, + "end": 1428338000, + "user": "asmith", + "role": "secondary" + } + + :statuscode 200: Successful update + + """ + data = load_json_body(req) + + if 'end' in data and 'start' in data and data['start'] >= data['end']: + raise HTTPBadRequest('Invalid event update', 'Event must start before it ends') + + try: + update_cols = ', '.join(update_columns[col] for col in data) + except KeyError: + raise HTTPBadRequest('Invalid event update', 'Invalid column') + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + try: + cursor.execute('''SELECT + `event`.`start`, + `event`.`end`, + `event`.`user_id`, + `event`.`role_id`, + `event`.`id`, + `team`.`name` AS `team`, + `role`.`name` AS `role`, + `user`.`name` AS `user`, + `user`.`full_name`, + `event`.`team_id` + FROM `event` + JOIN `team` ON `event`.`team_id` = `team`.`id` + JOIN `role` ON `event`.`role_id` = `role`.`id` + JOIN `user` ON `event`.`user_id` = `user`.`id` + WHERE `event`.`id`=%s''', event_id) + event_data = cursor.fetchone() + if not event_data: + raise HTTPNotFound() + new_event = {} + for col in update_columns: + new_event[col] = data.get(col, event_data[col]) + now = time.time() + if event_data['start'] < now or data['start'] < now: + # Make an exception for editing event end times + if not (all(event_data[key] == new_event[key] for key in ('role', 'start', 'user')) and + data['end'] > now): + raise HTTPBadRequest('Invalid event update', + 'Editing events in the past not allowed') + + check_calendar_auth(event_data['team'], req) + if not user_in_team_by_name(cursor, new_event['user'], event_data['team']): + raise HTTPBadRequest('Invalid event update', 'Event user must be part of the team') + + update_cols += ', `link_id` = NULL' + update = 'UPDATE `event` SET ' + update_cols + (' WHERE `id`=%d' % int(event_id)) + cursor.execute(update, data) + + # create audit log + new_event = ', '.join('%s: %s' % (key, data[key]) for key in data) + create_audit({'old_event': event_data, 'request_body': data}, + event_data['team'], EVENT_EDITED, req, cursor) + + cursor.execute('SELECT `user_id`, role_id FROM `event` WHERE `id` = %s', event_data['id']) + new_ev_data = cursor.fetchone() + context = {'full_name': event_data['full_name'], 'role': event_data['role'], 'team': event_data['team'], + 'new_event': new_event} + create_notification(context, event_data['team_id'], {event_data['role_id'], new_ev_data['role_id']}, + EVENT_EDITED, {event_data['user_id'], new_ev_data['user_id']}, cursor, + start_time=event_data['start']) + except: + raise + else: + connection.commit() + finally: + cursor.close() + connection.close() + + +@login_required +def on_delete(req, resp, event_id): + """ + Delete an event by id, anyone on the team can delete that team's events + **Example request:** + + .. sourcecode:: http + + DELETE /api/v0/events/1234 HTTP/1.1 + + :statuscode 200: Successful delete + :statuscode 403: Delete not allowed; logged in user is not a team member + :statuscode 404: Event not found + """ + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + cursor.execute('''SELECT `team`.`name` AS `team`, `event`.`team_id`, `role`.`name` AS `role`, + `event`.`role_id`, `event`.`start`, `user`.`full_name`, `event`.`user_id` + FROM `event` + JOIN `team` ON `event`.`team_id` = `team`.`id` + JOIN `role` ON `event`.`role_id` = `role`.`id` + JOIN `user` ON `event`.`user_id` = `user`.`id` + WHERE `event`.`id` = %s''', event_id) + if cursor.rowcount == 0: + cursor.close() + connection.close() + raise HTTPNotFound() + ev = cursor.fetchone() + try: + check_calendar_auth(ev['team'], req) + except HTTPForbidden: + cursor.close() + connection.close() + raise + + cursor.execute('DELETE FROM `event` WHERE `id`=%s', event_id) + + context = {'team': ev['team'], 'full_name': ev['full_name'], 'role': ev['role']} + create_notification(context, ev['team_id'], [ev['role_id']], EVENT_DELETED, [ev['user_id']], cursor, + start_time=ev['start']) + create_audit({'old_event': ev}, ev['team'], EVENT_DELETED, req, cursor) + + connection.commit() + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/event_link.py b/src/oncall/api/v0/event_link.py new file mode 100644 index 0000000..c806f77 --- /dev/null +++ b/src/oncall/api/v0/event_link.py @@ -0,0 +1,136 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTP_201, HTTPError, HTTPBadRequest +import time + +from ujson import dumps as json_dumps +from ... import db +from ...utils import ( + load_json_body, gen_link_id, user_in_team_by_name +) +from ...auth import login_required, check_calendar_auth + + +@login_required +def on_post(req, resp): + """ + Endpoint for creating linked events. Responds with event ids for created events. + Linked events can be swapped in a group, and users are reminded only on the first event of a + linked series. Linked events have a link_id attribute containing a uuid. All events + with an equivalent link_id are considered "linked together" in a single set. Editing any single event + in the set will break the link for that event, clearing the link_id field. Otherwise, linked events behave + the same as any non-linked event. + + **Example request:** + + .. sourcecode:: http + + POST /api/v0/events/link HTTP/1.1 + Content-Type: application/json + + [ + { + "start": 1493667700, + "end": 149368700, + "user": "jdoe", + "team": "team-foo", + "role": "primary", + }, + { + "start": 1493677700, + "end": 149387700, + "user": "jdoe", + "team": "team-foo", + "role": "primary", + } + ] + + **Example response:** + + .. sourcecode:: http + + HTTP/1.1 201 Created + Content-Type: application/json + + [1, 2] + + :statuscode 201: Event created + :statuscode 400: Event validation checks failed + :statuscode 422: Event creation failed: nonexistent role/event/team + """ + events = load_json_body(req) + if not isinstance(events, list): + raise HTTPBadRequest('Invalid argument', + 'events argument needs to be a list') + if not events: + raise HTTPBadRequest('Invalid argument', 'events list cannot be empty') + + now = time.time() + team = events[0].get('team') + if not team: + raise HTTPBadRequest('Invalid argument', + 'event missing team attribute') + check_calendar_auth(team, req) + + event_values = [] + link_id = gen_link_id() + + connection = db.connect() + cursor = connection.cursor() + + columns = ('`start`', '`end`', '`user_id`', '`team_id`', '`role_id`', '`link_id`') + + try: + cursor.execute('SELECT `id` FROM `team` WHERE `name`=%s', team) + team_id = cursor.fetchone() + if not team_id: + raise HTTPBadRequest('Invalid event', + 'Invalid team name: %s' % team) + + values = [ + '%s', + '%s', + '(SELECT `id` FROM `user` WHERE `name`=%s)', + '%s', + '(SELECT `id` FROM `role` WHERE `name`=%s)', + '%s' + ] + + for ev in events: + if ev['end'] < now: + raise HTTPBadRequest('Invalid event', + 'Creating events in the past not allowed') + if ev['start'] >= ev['end']: + raise HTTPBadRequest('Invalid event', + 'Event must start before it ends') + ev_team = ev.get('team') + if not ev_team: + raise HTTPBadRequest('Invalid event', 'Missing team for event') + if team != ev_team: + raise HTTPBadRequest('Invalid event', 'Events can only be submitted to one team') + if not user_in_team_by_name(cursor, ev['user'], team): + raise HTTPBadRequest('Invalid event', + 'User %s must be part of the team %s' % (ev['user'], team)) + event_values.append((ev['start'], ev['end'], ev['user'], team_id, ev['role'], link_id)) + + insert_query = 'INSERT INTO `event` (%s) VALUES (%s)' % (','.join(columns), ','.join(values)) + cursor.executemany(insert_query, event_values) + connection.commit() + cursor.execute('SELECT `id` FROM `event` WHERE `link_id`=%s', link_id) + ev_ids = [row[0] for row in cursor] + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if err_msg == 'Column \'role_id\' cannot be null': + err_msg = 'role not found' + elif err_msg == 'Column \'user_id\' cannot be null': + err_msg = 'user not found' + elif err_msg == 'Column \'team_id\' cannot be null': + err_msg = 'team "%s" not found' % team + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 + resp.body = json_dumps(ev_ids) diff --git a/src/oncall/api/v0/event_override.py b/src/oncall/api/v0/event_override.py new file mode 100644 index 0000000..bbe8435 --- /dev/null +++ b/src/oncall/api/v0/event_override.py @@ -0,0 +1,195 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPError, HTTPBadRequest +from ujson import dumps as json_dumps +import time + +from ...auth import login_required, check_calendar_auth_by_id +from ... import db +from ...utils import load_json_body, user_in_team, create_notification, create_audit +from ...constants import EVENT_SUBSTITUTED + + +@login_required +def on_post(req, resp): + """ + Override/substitute existing events. For example, if the current on-call is unexpectedly busy from 3-4, another + user can override that event for that time period and take over the shift. Override may delete or edit + existing events, and may create new events. The API's response contains the information for all undeleted + events that were passed in the event_ids param, along with the events created by the override. + + Params: + - **start**: Start time for the event substitution + - **end**: End time for event substitution + - **event_ids**: List of event ids to override + - **user**: User who will be taking over + + **Example request:** + + .. sourcecode:: http + + POST /v0/events HTTP/1.1 + Content-Type: application/json + + { + "start": 1493677400, + "end": 1493678400, + "event_ids": [1], + "user": "jdoe" + } + + **Example response:** + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "end": 1493678400, + "full_name": "John Doe", + "id": 3, + "role": "primary", + "start": 1493677400, + "team": "team-foo", + "user": "jdoe" + } + ] + + """ + data = load_json_body(req) + event_ids = data['event_ids'] + start = data['start'] + end = data['end'] + user = data['user'] + + get_events_query = '''SELECT `start`, `end`, `id`, `schedule_id`, `user_id`, `role_id`, `team_id` + FROM `event` WHERE `id` IN %s''' + insert_event_query = 'INSERT INTO `event`(`start`, `end`, `user_id`, `team_id`, `role_id`)' \ + 'VALUES (%(start)s, %(end)s, %(user_id)s, %(team_id)s, %(role_id)s)' + event_return_query = '''SELECT `event`.`start`, `event`.`end`, `event`.`id`, `role`.`name` AS `role`, + `team`.`name` AS `team`, `user`.`name` AS `user`, `user`.`full_name` + FROM `event` JOIN `role` ON `event`.`role_id` = `role`.`id` + JOIN `team` ON `event`.`team_id` = `team`.`id` + JOIN `user` ON `event`.`user_id` = `user`.`id` + WHERE `event`.`id` IN %s''' + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + try: + cursor.execute(get_events_query, (event_ids,)) + events = cursor.fetchall() + now = time.time() + + cursor.execute('SELECT `id` FROM `user` WHERE `name` = %s', user) + user_id = cursor.fetchone()['id'] + team_id = events[0]['team_id'] + + check_calendar_auth_by_id(team_id, req) + # Check that events are not in the past + if any([ev['end'] < now for ev in events]): + raise HTTPBadRequest('Invalid override request', 'Cannot edit events in the past') + # Check that events are from the same team + if any([ev['team_id'] != team_id for ev in events]): + raise HTTPBadRequest('Invalid override request', 'Events must be from the same team') + # Check override user's membership in the team + if not user_in_team(cursor, user_id, team_id): + raise HTTPBadRequest('Invalid override request', 'Substituting user must be part of the team') + # Check events have the same role + if len(set([ev['role_id'] for ev in events])) > 1: + raise HTTPBadRequest('Invalid override request', 'events must have the same role') + # Check events have same user + if len(set([ev['user_id'] for ev in events])) > 1: + raise HTTPBadRequest('Invalid override request', 'events must have the same role') + + edit_start = [] + edit_end = [] + delete = [] + split = [] + events = sorted(events, key=lambda x: x['start']) + + # Truncate start/end if needed + start = max(events[0]['start'], start) + end = min(max(e['end'] for e in events), end) + + for idx, e in enumerate(events): + # Check for consecutive events + if idx != 0 and e['start'] != events[idx - 1]['end']: + raise HTTPBadRequest('Invalid override request', 'events must be consecutive') + + # Sort events into lists according to how they need to be edited + if start <= e['start'] and end >= e['end']: + delete.append(e) + elif start > e['start'] and start < e['end'] <= end: + edit_end.append(e) + elif start <= e['start'] < end and end < e['end']: + edit_start.append(e) + elif start > e['start'] and end < e['end']: + split.append(e) + else: + raise HTTPBadRequest('Invalid override request', 'events must overlap with override time range') + + # Edit events + if edit_start: + ids = [e['id'] for e in edit_start] + cursor.execute('UPDATE `event` SET `start` = %s WHERE `id` IN %s', (end, ids)) + if edit_end: + ids = [e['id'] for e in edit_end] + cursor.execute('UPDATE `event` SET `end` = %s WHERE `id` IN %s', (start, ids)) + if delete: + ids = [e['id'] for e in delete] + cursor.execute('DELETE FROM `event` WHERE `id` IN %s', (ids,)) + if split: + create = [] + for e in split: + left_event = e.copy() + right_event = e.copy() + left_event['end'] = start + right_event['start'] = end + create.append(left_event) + create.append(right_event) + + ids = [] + # Create left/right events + for e in create: + cursor.execute(insert_event_query, e) + ids.append(cursor.lastrowid) + event_ids.append(cursor.lastrowid) + + # Delete the split event + ids = [e['id'] for e in split] + cursor.execute('DELETE FROM `event` WHERE `id` IN %s', (ids,)) + + # Insert new override event + override_event = { + 'start': start, + 'end': end, + 'role_id': events[0]['role_id'], + 'team_id': events[0]['team_id'], + 'user_id': user_id + } + cursor.execute('''INSERT INTO `event`(`start`, `end`, `user_id`, `team_id`, `role_id`) + VALUES (%(start)s, %(end)s, %(user_id)s, %(team_id)s, %(role_id)s)''', + override_event) + event_ids.append(cursor.lastrowid) + + cursor.execute(event_return_query, (event_ids,)) + ret_data = cursor.fetchall() + cursor.execute('SELECT full_name, id FROM user WHERE id IN %s', ((user_id, events[0]['user_id']),)) + full_names = {row['id']: row['full_name'] for row in cursor} + context = {'full_name_0': full_names[user_id], 'full_name_1': full_names[events[0]['user_id']], + 'role': ret_data[0]['role'], 'team': ret_data[0]['team']} + create_notification(context, events[0]['team_id'], [events[0]['role_id']], EVENT_SUBSTITUTED, + [user_id, events[0]['user_id']], cursor, start_time=start, end_time=end) + create_audit({'new_events': ret_data, 'request_body': data}, ret_data[0]['team'], + EVENT_SUBSTITUTED, req, cursor) + resp.body = json_dumps(ret_data) + except HTTPError: + raise + else: + connection.commit() + finally: + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/event_swap.py b/src/oncall/api/v0/event_swap.py new file mode 100644 index 0000000..a1ed61b --- /dev/null +++ b/src/oncall/api/v0/event_swap.py @@ -0,0 +1,88 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPError, HTTPBadRequest, HTTPNotFound +import time + +from ... import db +from ...utils import load_json_body, create_notification, create_audit +from ...auth import login_required, check_calendar_auth_by_id +from ...constants import EVENT_SWAPPED + + +@login_required +def on_post(req, resp): + data = load_json_body(req) + + try: + ev_0, ev_1 = data['events'] + except ValueError: + raise HTTPBadRequest('Invalid event swap request', 'Must provide 2 events') + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + try: + # Accumulate event info for each link/event id + events = [None, None] + for i, ev in enumerate([ev_0, ev_1]): + if ev['linked']: + cursor.execute('SELECT `id`, `start`, `end`, `team_id`, `user_id`, `role_id`, ' + '`link_id` FROM `event` WHERE `link_id` = %s', ev['id']) + if cursor.rowcount == 0: + raise HTTPNotFound() + events[i] = cursor.fetchall() + else: + cursor.execute('SELECT `id`, `start`, `end`, `team_id`, `user_id`, `role_id`, ' + '`link_id` FROM `event` WHERE `id` = %s', ev['id']) + if cursor.rowcount == 0: + raise HTTPNotFound() + events[i] = cursor.fetchall() + + events_0, events_1 = events + events = events_0 + events_1 + # Validation checks + now = time.time() + if any(map(lambda ev: ev['start'] < now, events)): + raise HTTPBadRequest('Invalid event swap request', 'Cannot edit events in the past') + if len(set(ev['team_id'] for ev in events)) > 1: + raise HTTPBadRequest('Event swap not allowed', 'Swapped events must come from the same team') + for ev_list in [events_0, events_1]: + if len(set([ev['user_id'] for ev in ev_list])) != 1: + raise HTTPBadRequest('', 'all linked events must have the same user') + + check_calendar_auth_by_id(events[0]['team_id'], req) + + # Swap event users + change_queries = [] + for ev in (ev_0, ev_1): + if not ev['linked']: + # Break link if swapping a single event in a linked chain + change_queries.append('UPDATE `event` SET `user_id` = %s, `link_id` = NULL WHERE `id` IN %s') + else: + change_queries.append('UPDATE `event` SET `user_id` = %s WHERE `id` IN %s') + user_0 = events_0[0]['user_id'] + user_1 = events_1[0]['user_id'] + first_event_0 = min(events_0, key=lambda ev: ev['start']) + first_event_1 = min(events_1, key=lambda ev: ev['start']) + cursor.execute(change_queries[0], (user_1, [e0['id'] for e0 in events_0])) + cursor.execute(change_queries[1], (user_0, [e1['id'] for e1 in events_1])) + + cursor.execute('SELECT id, full_name FROM user WHERE id IN %s', ([user_0, user_1],)) + full_names = {row['id']: row['full_name'] for row in cursor} + cursor.execute('SELECT name FROM team WHERE id = %s', events[0]['team_id']) + team_name = cursor.fetchone()['name'] + context = {'full_name_0': full_names[user_0], 'full_name_1': full_names[user_1], 'team': team_name} + create_notification(context, events[0]['team_id'], {events_0[0]['role_id'], events_1[0]['role_id']}, + EVENT_SWAPPED, [user_0, user_1], cursor, start_time_0=first_event_0['start'], + start_time_1=first_event_1['start']) + create_audit({'request_body': data, 'events_swapped': (events_0, events_1)}, + team_name, EVENT_SWAPPED, req, cursor) + connection.commit() + + except HTTPError: + raise + else: + connection.commit() + finally: + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/events.py b/src/oncall/api/v0/events.py new file mode 100644 index 0000000..d349c4e --- /dev/null +++ b/src/oncall/api/v0/events.py @@ -0,0 +1,240 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +import time +from falcon import HTTP_201, HTTPError, HTTPBadRequest +from ujson import dumps as json_dumps +from ...auth import login_required, check_calendar_auth +from ... import db +from ...utils import load_json_body, user_in_team_by_name, create_notification, create_audit +from ...constants import EVENT_CREATED + +columns = { + 'id': '`event`.`id` as `id`', + 'start': '`event`.`start` as `start`', + 'end': '`event`.`end` as `end`', + 'role': '`role`.`name` as `role`', + 'team': '`team`.`name` as `team`', + 'user': '`user`.`name` as `user`', + 'full_name': '`user`.`full_name` as `full_name`', + 'schedule_id': '`event`.`schedule_id`', + 'link_id': '`event`.`link_id`' +} + +all_columns = ', '.join(columns.values()) + +constraints = { + 'id': '`event`.`id` = %s', + 'id__eq': '`event`.`id` = %s', + 'id__ne': '`event`.`id` != %s', + 'id__gt': '`event`.`id` > %s', + 'id__ge': '`event`.`id` >= %s', + 'id__lt': '`event`.`id` < %s', + 'id__le': '`event`.`id` <= %s', + 'start': '`event`.`start` = %s', + 'start__eq': '`event`.`start` = %s', + 'start__ne': '`event`.`start` != %s', + 'start__gt': '`event`.`start` > %s', + 'start__ge': '`event`.`start` >= %s', + 'start__lt': '`event`.`start` < %s', + 'start__le': '`event`.`start` <= %s', + 'end': '`event`.`end` = %s', + 'end__eq': '`event`.`end` = %s', + 'end__ne': '`event`.`end` != %s', + 'end__gt': '`event`.`end` > %s', + 'end__ge': '`event`.`end` >= %s', + 'end__lt': '`event`.`end` < %s', + 'end__le': '`event`.`end` <= %s', + 'role': '`role`.`name` = %s', + 'role__eq': '`role`.`name` = %s', + 'role__contains': '`role`.`name` LIKE CONCAT("%%", %s, "%%")', + 'role__startswith': '`role`.`name` LIKE CONCAT(%s, "%%")', + 'role__endswith': '`role`.`name` LIKE CONCAT("%%", %s)', + 'team': '`team`.`name` = %s', + 'team__eq': '`team`.`name` = %s', + 'team__contains': '`team`.`name` LIKE CONCAT("%%", %s, "%%")', + 'team__startswith': '`team`.`name` LIKE CONCAT(%s, "%%")', + 'team__endswith': '`team`.`name` LIKE CONCAT("%%", %s)', + 'user': '`user`.`name` = %s', + 'user__eq': '`user`.`name` = %s', + 'user__contains': '`user`.`name` LIKE CONCAT("%%", %s, "%%")', + 'user__startswith': '`user`.`name` LIKE CONCAT(%s, "%%")', + 'user__endswith': '`user`.`name` LIKE CONCAT("%%", %s)' +} + + +def on_get(req, resp): + """ + http:get:: /api/v0/events + + Search for events. + + **Example request**: + + .. sourcecode:: http + + GET /api/v0/events?team=foo-sre&end__gt=1487466146&role=primary HTTP/1.1 + Host: example.com + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "start": 1488441600, + "end": 1489132800, + "team": "foo-sre", + "link_id": null, + "schedule_id": null, + "role": "primary", + "user": "foo", + "full_name": "Foo Icecream", + "id": 187795 + }, + { + "start": 1488441600, + "end": 1489132800, + "team": "foo-sre", + "link_id": "8a8ae77b8c52448db60c8a701e7bffc2", + "schedule_id": 123, + "role": "primary", + "user": "bar", + "full_name": "Bar Apple", + "id": 187795 + } + ] + + :query team: team name + :query user: user name + :query role: role name + :query id: id of the event + :query start__gt: start time (unix timestamp) greater than + :query start__ge: start time (unix timestamp) greater than or equal + :query start__lt: start time (unix timestamp) less than + :query start__le: start time (unix timestamp) less than or equal + :query end__gt: end time (unix timestamp) greater than + :query end__ge: end time (unix timestamp) greater than or equal + :query end__lt: end time (unix timestamp) less than + :query end__le: end time (unix timestamp) less than or equal + + :statuscode 200: no error + :statuscode 400: bad request + """ + fields = req.get_param_as_list('fields', transform=columns.__getitem__) + req.params.pop('fields', None) + cols = ', '.join(fields) if fields else all_columns + if any(key not in constraints for key in req.params): + raise HTTPBadRequest('Bad constraint param') + query = '''SELECT %s FROM `event` + JOIN `user` ON `user`.`id` = `event`.`user_id` + JOIN `team` ON `team`.`id` = `event`.`team_id` + JOIN `role` ON `role`.`id` = `event`.`role_id`''' % cols + + where_params = [] + where_vals = [] + for key in req.params: + val = req.get_param(key) + if key in constraints: + where_params.append(constraints[key]) + where_vals.append(val) + where_query = ' AND '.join(where_params) + if where_query: + query = '%s WHERE %s' % (query, where_query) + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(query, where_vals) + data = cursor.fetchall() + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@login_required +def on_post(req, resp): + """ + Endpoint for creating event. Responds with event id for created event + + **Example request:** + + .. sourcecode:: http + + POST /v0/events HTTP/1.1 + Content-Type: application/json + + { + "start": 1493667700, + "end": 149368700, + "user": "jdoe", + "team": "team-foo", + "role": "primary", + } + + **Example response:** + + .. sourcecode:: http + + HTTP/1.1 201 Created + Content-Type: application/json + + 1 + + + :statuscode 201: Event created + :statuscode 400: Event validation checks failed + :statuscode 422: Event creation failed: nonexistent role/event/team + """ + data = load_json_body(req) + if data['end'] < time.time(): + raise HTTPBadRequest('Invalid event', 'Creating events in the past not allowed') + if data['start'] >= data['end']: + raise HTTPBadRequest('Invalid event', 'Event must start before it ends') + check_calendar_auth(data['team'], req) + + columns = ['`start`', '`end`', '`user_id`', '`team_id`', '`role_id`'] + values = ['%(start)s', '%(end)s', '(SELECT `id` FROM `user` WHERE `name`=%(user)s)', + '(SELECT `id` FROM `team` WHERE `name`=%(team)s)', + '(SELECT `id` FROM `role` WHERE `name`=%(role)s)'] + + if 'schedule_id' in data: + columns.append('`schedule_id`') + values.append('%(schedule_id)s') + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + if not user_in_team_by_name(cursor, data['user'], data['team']): + raise HTTPBadRequest('Invalid event', 'User must be part of the team') + + try: + query = 'INSERT INTO `event` (%s) VALUES (%s)' % (','.join(columns), ','.join(values)) + cursor.execute(query, data) + event_id = cursor.lastrowid + + cursor.execute('SELECT team_id, role_id, user_id, start, full_name ' + 'FROM event JOIN user ON user.`id` = user_id WHERE event.id=%s', event_id) + ev_info = cursor.fetchone() + context = {'team': data['team'], 'role': data['role'], 'full_name': ev_info['full_name']} + create_notification(context, ev_info['team_id'], [ev_info['role_id']], EVENT_CREATED, + [ev_info['user_id']], cursor, start_time=ev_info['start']) + create_audit({'new_event_id': event_id, 'request_body': data}, data['team'], EVENT_CREATED, req, cursor) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if err_msg == 'Column \'role_id\' cannot be null': + err_msg = 'role "%s" not found' % data['role'] + elif err_msg == 'Column \'user_id\' cannot be null': + err_msg = 'user "%s" not found' % data['user'] + elif err_msg == 'Column \'team_id\' cannot be null': + err_msg = 'team "%s" not found' % data['team'] + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 + resp.body = json_dumps(event_id) diff --git a/src/oncall/api/v0/notification_types.py b/src/oncall/api/v0/notification_types.py new file mode 100644 index 0000000..d72e4e9 --- /dev/null +++ b/src/oncall/api/v0/notification_types.py @@ -0,0 +1,12 @@ +from ... import db +from ujson import dumps as json_dumps + + +def on_get(req, resp): + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute('SELECT `name`, `is_reminder` FROM `notification_type`') + data = cursor.fetchall() + cursor.close() + connection.close() + resp.body = json_dumps(data) diff --git a/src/oncall/api/v0/notifications.py b/src/oncall/api/v0/notifications.py new file mode 100644 index 0000000..2ca5efa --- /dev/null +++ b/src/oncall/api/v0/notifications.py @@ -0,0 +1,30 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ujson import dumps as json_dumps +from ... import db + +columns = { + 'id': '`notification`.`id` = %s', + 'event_id': '`notification`.`event_id` = %s', + 'active': '`notification`.`active` = %s' +} + + +def on_get(req, resp): + query = 'SELECT * FROM `notification`' + where = [] + where_vals = [] + for col in req.params: + if col in columns: + where.append(columns[col]) + where_vals.append(req.get_param(col)) + if where: + query += 'WHERE %s' % ', '.join(where) + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(query, where_vals) + data = cursor.fetchall() + cursor.close() + connection.close() + resp.body = json_dumps(data) \ No newline at end of file diff --git a/src/oncall/api/v0/populate.py b/src/oncall/api/v0/populate.py new file mode 100644 index 0000000..6c184e7 --- /dev/null +++ b/src/oncall/api/v0/populate.py @@ -0,0 +1,63 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ... import db +from ...utils import load_json_body +from ...auth import check_team_auth, login_required +from schedules import get_schedules +from ...bin.scheduler import calculate_future_events, epoch_from_datetime, \ + create_events, find_least_active_available_user_id, get_period_len, set_last_epoch +from datetime import datetime, timedelta +from falcon import HTTPBadRequest +from pytz import timezone, utc + + +@login_required +def on_post(req, resp, schedule_id): + data = load_json_body(req) + start_time = data['start'] + start_dt = datetime.fromtimestamp(start_time, utc) + start_epoch = epoch_from_datetime(start_dt) + + # Get schedule info + schedule = get_schedules({'id': schedule_id})[0] + role_id = schedule['role_id'] + team_id = schedule['team_id'] + roster_id = schedule['roster_id'] + first_event_start = min(schedule['events'], key=lambda x: x['start'])['start'] + period = get_period_len(schedule) + handoff = start_epoch + timedelta(seconds=first_event_start) + handoff = timezone(schedule['timezone']).localize(handoff) + + # Start scheduling from the next occurrence of the hand-off time. + if start_dt > handoff: + start_epoch += timedelta(weeks=period) + handoff += timedelta(weeks=period) + if handoff < utc.localize(datetime.utcnow()): + raise HTTPBadRequest('Invalid populate request', 'cannot populate starting in the past') + + check_team_auth(schedule['team'], req) + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + future_events, last_epoch = calculate_future_events(schedule, cursor, start_epoch) + set_last_epoch(schedule_id, last_epoch, cursor) + + # Delete existing events from the start of the first event + future_events = [filter(lambda x: x['start'] >= start_time, evs) for evs in future_events] + future_events = filter(lambda x: x != [], future_events) + if future_events: + first_event_start = min(future_events[0], key=lambda x: x['start'])['start'] + cursor.execute('DELETE FROM event WHERE schedule_id = %s AND start >= %s', (schedule_id, first_event_start)) + + # Create events in the db, associating a user to them + for epoch in future_events: + user_id = find_least_active_available_user_id(team_id, role_id, roster_id, epoch, cursor) + if not user_id: + continue + create_events(team_id, schedule['id'], user_id, epoch, role_id, cursor) + + connection.commit() + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/role.py b/src/oncall/api/v0/role.py new file mode 100644 index 0000000..694ed8a --- /dev/null +++ b/src/oncall/api/v0/role.py @@ -0,0 +1,21 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound +from ... import db +from ...auth import debug_only + + +@debug_only +def on_delete(req, resp, role): + connection = db.connect() + cursor = connection.cursor() + # TODO: also remove any schedule and event that references the role? + cursor.execute('DELETE FROM `role` WHERE `name`=%s', role) + deleted = cursor.rowcount + connection.commit() + cursor.close() + connection.close() + + if deleted == 0: + raise HTTPNotFound() diff --git a/src/oncall/api/v0/roles.py b/src/oncall/api/v0/roles.py new file mode 100644 index 0000000..3e5634c --- /dev/null +++ b/src/oncall/api/v0/roles.py @@ -0,0 +1,75 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTP_201, HTTPError +from ujson import dumps as json_dumps +from ... import db +from ...auth import debug_only +from ...utils import load_json_body + +columns = { + 'id': '`role`.`id` as `id`', + 'name': '`role`.`name` as `name`' +} + +all_columns = ', '.join(columns.values()) + +constraints = { + 'id': '`role`.`id` = %s', + 'id__eq': '`role`.`id` = %s', + 'id__ne': '`role`.`id` != %s', + 'id__lt': '`role`.`id` < %s', + 'id__le': '`role`.`id` <= %s', + 'id__gt': '`role`.`id` > %s', + 'id__ge': '`role`.`id` >= %s', + 'name': '`role`.`name` = %s', + 'name__eq': '`role`.`name` = %s', + 'name__contains': '`role`.`name` LIKE CONCAT("%%", %s, "%%")', + 'name__startswith': '`role`.`name` LIKE CONCAT(%s, "%%")', + 'name__endswith': '`role`.`name` LIKE CONCAT("%%", %s)' +} + + +def on_get(req, resp): + fields = req.get_param_as_list('fields', transform=columns.__getitem__) + cols = ', '.join(fields) if fields else all_columns + query = 'SELECT %s FROM `role`' % cols + where_params = [] + where_vals = [] + for key in req.params: + val = req.get_param(key) + if key in constraints: + where_params.append(constraints[key]) + where_vals.append(val) + where_queries = ' AND '.join(where_params) + if where_queries: + query = '%s WHERE %s' % (query, where_queries) + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(query, where_vals) + data = cursor.fetchall() + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@debug_only +def on_post(req, resp): + data = load_json_body(req) + new_role = data['name'] + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute('INSERT INTO `role` (`name`) VALUES (%s)', new_role) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if 'Duplicate entry' in err_msg: + err_msg = 'role "%s" already existed' % new_role + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 diff --git a/src/oncall/api/v0/roster.py b/src/oncall/api/v0/roster.py new file mode 100644 index 0000000..13fb607 --- /dev/null +++ b/src/oncall/api/v0/roster.py @@ -0,0 +1,172 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPError, HTTPNotFound, HTTPBadRequest +from ujson import dumps as json_dumps + +from ...auth import login_required, check_team_auth +from ... import db +from ...utils import load_json_body, invalid_char_reg +from .schedules import get_schedules +from ...constants import ROSTER_DELETED, ROSTER_EDITED +from ...utils import create_audit + + +def on_get(req, resp, team, roster): + """ + http:get:: /api/v0/teams/(str:team_name)/rosters + + Get user and schedule info for a roster + + **Example request**: + + .. sourcecode:: http + + GET /api/v0/teams/foo-sre/rosters HTTP/1.1 + Host: example.com + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Managers": { + "id": 2730, + "users": [ + { + "in_rotation": true, + "name": "foo" + } + ], + "schedules": [ + { + "auto_populate_threshold": 0, + "roster": "Managers", + "advanced_mode": 0, + "role": "manager", + "team": "foo-sre", + "events": [ + { + "duration": 604800, + "start": 367200 + } + ], + "id": 1704 + } + ] + } + } + + :statuscode 200: no error + """ + team, roster = unquote(team), unquote(roster) + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + cursor.execute('''SELECT `roster`.`id` AS `roster`, `team`.`id` AS `team` FROM `roster` + JOIN `team` ON `team`.`id`=`roster`.`team_id` + WHERE `team`.`name`=%s AND `roster`.`name`=%s''', + (team, roster)) + results = cursor.fetchall() + if not results: + raise HTTPNotFound() + team_id = results[0]['team'] + roster_id = results[0]['roster'] + # get list of users in the roster + cursor.execute('''SELECT `user`.`name` as `name`, + `roster_user`.`in_rotation` AS `in_rotation` + FROM `roster_user` + JOIN `user` ON `roster_user`.`user_id`=`user`.`id` + WHERE `roster_user`.`roster_id`=%s''', roster_id) + users = [user for user in cursor] + # get list of schedule in the roster + schedules = get_schedules({'team_id': team_id}, dbinfo=(connection, cursor)) + + cursor.close() + connection.close() + resp.body = json_dumps({'users': users, 'schedules': schedules}) + + +@login_required +def on_put(req, resp, team, roster): + """ + Change roster name + """ + team, roster = unquote(team), unquote(roster) + data = load_json_body(req) + + check_team_auth(team, req) + if data['name'] == roster: + return + invalid_char = invalid_char_reg.search(data['name']) + if invalid_char: + raise HTTPBadRequest('invalid team name', + 'team name contains invalid character "%s"' % invalid_char.group()) + + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute( + '''UPDATE `roster` SET `name`=%s + WHERE `team_id`=(SELECT `id` FROM `team` WHERE `name`=%s) + AND `name`=%s''', + (data['name'], team, roster)) + create_audit({'old_name': roster, 'new_name': data['name']}, team, ROSTER_EDITED, req, cursor) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if 'Duplicate entry' in err_msg: + err_msg = "roster '%s' already existed for team '%s'" % (data['name'], team) + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + +@login_required +def on_delete(req, resp, team, roster): + """ + Delete roster + """ + team, roster = unquote(team), unquote(roster) + check_team_auth(team, req) + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('SELECT `user_id` FROM `roster_user` JOIN `roster` ON `roster_user`.`roster_id` = `roster`.`id` ' + 'WHERE `roster`.`name` = %s AND `team_id` = (SELECT `id` FROM `team` WHERE `name` = %s)', + (roster, team)) + user_ids = cursor.fetchall() + cursor.execute('DELETE FROM `roster_user` WHERE `roster_id` = (SELECT `id` FROM `roster` WHERE `name` = %s ' + 'AND `team_id` = (SELECT `id` FROM `team` WHERE `name` = %s))', (roster, team)) + + if user_ids: + # Remove users from the team if needed + query = '''DELETE FROM `team_user` WHERE `user_id` IN %s AND `user_id` NOT IN + (SELECT `roster_user`.`user_id` + FROM `roster_user` JOIN `roster` ON `roster`.`id` = `roster_user`.`roster_id` + WHERE team_id = (SELECT `id` FROM `team` WHERE `name`=%s) + UNION + (SELECT `user_id` FROM `team_admin` + WHERE `team_id` = (SELECT `id` FROM `team` WHERE `name`=%s))) + AND `team_user`.`team_id` = (SELECT `id` FROM `team` WHERE `name` = %s)''' + cursor.execute(query, (user_ids, team, team, team)) + + cursor.execute('''DELETE FROM `roster` + WHERE `team_id`=(SELECT `id` FROM `team` WHERE `name`=%s) + AND `name`=%s''', + (team, roster)) + deleted = cursor.rowcount + if deleted: + create_audit({'name': roster}, team, ROSTER_DELETED, req, cursor) + + connection.commit() + cursor.close() + connection.close() + + if deleted == 0: + raise HTTPNotFound() diff --git a/src/oncall/api/v0/roster_user.py b/src/oncall/api/v0/roster_user.py new file mode 100644 index 0000000..ae52dc4 --- /dev/null +++ b/src/oncall/api/v0/roster_user.py @@ -0,0 +1,73 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPNotFound, HTTPBadRequest + +from ...auth import login_required, check_team_auth +from ...utils import load_json_body, unsubscribe_notifications, create_audit +from ... import db +from ...constants import ROSTER_USER_DELETED, ROSTER_USER_EDITED + + +@login_required +def on_delete(req, resp, team, roster, user): + """ + Delete user from a roster for a team + """ + team, roster = unquote(team), unquote(roster) + check_team_auth(team, req) + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('''DELETE FROM `roster_user` + WHERE `roster_id`=( + SELECT `roster`.`id` FROM `roster` + JOIN `team` ON `team`.`id`=`roster`.`team_id` + WHERE `team`.`name`=%s AND `roster`.`name`=%s) + AND `user_id`=(SELECT `id` FROM `user` WHERE `name`=%s)''', + (team, roster, user)) + deleted = cursor.rowcount + if deleted == 0: + raise HTTPNotFound() + create_audit({'roster': roster, 'user': user}, team, ROSTER_USER_DELETED, req, cursor) + + # Remove user from the team if needed + query = '''DELETE FROM `team_user` WHERE `user_id` = (SELECT `id` FROM `user` WHERE `name`=%s) AND `user_id` NOT IN + (SELECT `roster_user`.`user_id` + FROM `roster_user` JOIN `roster` ON `roster`.`id` = `roster_user`.`roster_id` + WHERE team_id = (SELECT `id` FROM `team` WHERE `name`=%s) + UNION + (SELECT `user_id` FROM `team_admin` + WHERE `team_id` = (SELECT `id` FROM `team` WHERE `name`=%s))) + AND `team_user`.`team_id` = (SELECT `id` FROM `team` WHERE `name` = %s)''' + cursor.execute(query, (user, team, team, team)) + if cursor.rowcount != 0: + unsubscribe_notifications(team, user, cursor) + connection.commit() + cursor.close() + connection.close() + + +@login_required +def on_put(req, resp, team, roster, user): + """ + Put a user into/out of rotation + """ + team, roster = unquote(team), unquote(roster) + check_team_auth(team, req) + data = load_json_body(req) + + in_rotation = data.get('in_rotation') + if in_rotation is None: + raise HTTPBadRequest('incomplete data', 'missing field "in_rotation"') + in_rotation = int(in_rotation) + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('UPDATE `roster_user` SET `in_rotation`=%s ' + 'WHERE `user_id` = (SELECT `id` FROM `user` WHERE `name`=%s)', (in_rotation, user)) + create_audit({'user': user, 'roster': roster, 'request_body': data}, team, ROSTER_USER_EDITED, req, cursor) + connection.commit() + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/roster_users.py b/src/oncall/api/v0/roster_users.py new file mode 100644 index 0000000..d5941df --- /dev/null +++ b/src/oncall/api/v0/roster_users.py @@ -0,0 +1,89 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPError, HTTP_201, HTTPBadRequest +from ujson import dumps as json_dumps + +from ...auth import login_required, check_team_auth +from .users import get_user_data +from ... import db +from ...utils import load_json_body, subscribe_notifications, create_audit +from ...constants import ROSTER_USER_ADDED + + +def on_get(req, resp, team, roster): + """ + Get all users for a team roster + """ + team, roster = unquote(team), unquote(roster) + connection = db.connect() + cursor = connection.cursor() + query = '''SELECT `user`.`name` FROM `user` + JOIN `roster_user` ON `roster_user`.`user_id`=`user`.`id` + JOIN `roster` ON `roster`.`id`=`roster_user`.`roster_id` + JOIN `team` ON `team`.`id`=`roster`.`team_id` + WHERE `roster`.`name`=%s AND `team`.`name`=%s''' + if req.get_param_as_bool('in_rotation'): + query += ' AND `roster_user`.`in_rotation` = 1' + cursor.execute(query, (roster, team)) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@login_required +def on_post(req, resp, team, roster): + """ + Add user to a roster for a team + """ + team, roster = unquote(team), unquote(roster) + data = load_json_body(req) + + user_name = data.get('name') + in_rotation = int(data.get('in_rotation', True)) + if not user_name: + raise HTTPBadRequest('incomplete data', 'missing field "name"') + check_team_auth(team, req) + + connection = db.connect() + cursor = connection.cursor() + cursor.execute('''(SELECT `id` FROM `team` WHERE `name`=%s) + UNION + (SELECT `id` FROM `user` WHERE `name`=%s)''', (team, user_name)) + results = [r[0] for r in cursor] + if len(results) < 2: + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', 'invalid team or user') + + # TODO: validate roster + (team_id, user_id) = results + try: + # also make sure user is in the team + cursor.execute('''INSERT IGNORE INTO `team_user` (`team_id`, `user_id`) VALUES (%r, %r)''', + (team_id, user_id)) + cursor.execute('''INSERT INTO `roster_user` (`user_id`, `roster_id`, `in_rotation`) + VALUES ( + %r, + (SELECT `roster`.`id` FROM `roster` + JOIN `team` ON `team`.`id`=`roster`.`team_id` + WHERE `team`.`name`=%s AND `roster`.`name`=%s), + %s + )''', + (user_id, team, roster, in_rotation)) + # subscribe user to notifications + subscribe_notifications(team, user_name, cursor) + + create_audit({'roster': roster, 'user': user_name, 'request_body': data}, team, + ROSTER_USER_ADDED, req, cursor) + connection.commit() + except db.IntegrityError: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'user "%(name)s" is already in the roster' % data) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 + resp.body = json_dumps(get_user_data(None, {'name': user_name})[0]) diff --git a/src/oncall/api/v0/rosters.py b/src/oncall/api/v0/rosters.py new file mode 100644 index 0000000..af74e37 --- /dev/null +++ b/src/oncall/api/v0/rosters.py @@ -0,0 +1,116 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPError, HTTP_201, HTTPBadRequest +from ujson import dumps as json_dumps +from ...utils import load_json_body, invalid_char_reg, create_audit +from ...constants import ROSTER_CREATED +from ...auth import login_required, check_team_auth +from ... import db +from .schedules import get_schedules + +constraints = { + 'name': '`roster`.`name` = %s', + 'name__eq': '`roster`.`name` = %s', + 'name__contains': '`roster`.`name` LIKE CONCAT("%%", %s, "%%")', + 'name__startswith': '`roster`.`name` LIKE CONCAT(%s, "%%")', + 'name__endswith': '`roster`.`name` LIKE CONCAT("%%", %s)', + 'id': '`roster`.`id` = %s', + 'id__eq': '`roster`.`id` = %s', +} + + +def get_roster_by_team_id(cursor, team_id, params=None): + # get all rosters for a team + query = 'SELECT `id`, `name` from `roster`' + where_params = [] + where_vals = [] + if params: + for key, val in params.iteritems(): + if key in constraints: + where_params.append(constraints[key]) + where_vals.append(val) + where_params.append('`roster`.`team_id`= %s') + where_vals.append(team_id) + where_clause = ' WHERE %s' % ' AND '.join(where_params) + + cursor.execute(query + where_clause, where_vals) + rosters = dict((row['name'], {'users': [], 'schedules': [], 'id': row['id']}) + for row in cursor) + # get users for each roster + query = '''SELECT `roster`.`name` AS `roster`, + `user`.`name` AS `user`, + `roster_user`.`in_rotation` AS `in_rotation` + FROM `roster_user` + JOIN `roster` ON `roster_user`.`roster_id`=`roster`.`id` + JOIN `user` ON `roster_user`.`user_id`=`user`.`id`''' + cursor.execute(query + where_clause, where_vals) + for row in cursor: + rosters[row['roster']]['users'].append( + {'name': row['user'], 'in_rotation': bool(row['in_rotation'])}) + # get all schedules for a team + data = get_schedules({'team_id': team_id}) + for schedule in data: + if schedule['roster'] in rosters: + rosters[schedule['roster']]['schedules'].append(schedule) + + return rosters + + +def on_get(req, resp, team): + """ + Get roster info(including schedules) for a team + """ + team = unquote(team) + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + cursor.execute('SELECT `id` FROM `team` WHERE `name`=%s', team) + if cursor.rowcount != 1: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'team "%s" not found' % team) + + team_id = cursor.fetchone()['id'] + rosters = get_roster_by_team_id(cursor, team_id, req.params) + + cursor.close() + connection.close() + resp.body = json_dumps(rosters) + + +@login_required +def on_post(req, resp, team): + """ + Create a roster for a team + """ + team = unquote(team) + data = load_json_body(req) + + roster_name = data.get('name') + if not roster_name: + raise HTTPBadRequest('name attribute missing from request', '') + invalid_char = invalid_char_reg.search(roster_name) + if invalid_char: + raise HTTPBadRequest('invalid roster name', + 'roster name contains invalid character "%s"' % invalid_char.group()) + + check_team_auth(team, req) + + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute('''INSERT INTO `roster` (`name`, `team_id`) + VALUES (%s, (SELECT `id` FROM `team` WHERE `name`=%s))''', + (roster_name, team)) + except db.IntegrityError: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'roster name "%s" already exists for team %s' % (roster_name, team)) + create_audit({'roster_id': cursor.lastrowid, 'request_body': data}, team, ROSTER_CREATED, req, cursor) + connection.commit() + cursor.close() + connection.close() + + resp.status = HTTP_201 diff --git a/src/oncall/api/v0/schedule.py b/src/oncall/api/v0/schedule.py new file mode 100644 index 0000000..f7769e8 --- /dev/null +++ b/src/oncall/api/v0/schedule.py @@ -0,0 +1,105 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound, HTTPBadRequest, HTTPForbidden + +from ...auth import login_required, check_team_auth +from .schedules import insert_schedule_events +from ... import db +from ...utils import load_json_body +from json import dumps as json_dumps +from .schedules import validate_simple_schedule, get_schedules + +columns = { + 'role': '`role_id`=(SELECT `id` FROM `role` WHERE `name`=%(role)s)', + 'team': '`team_id`=(SELECT `id` FROM `team` WHERE `name`=%(team)s)', + 'roster': '`roster_id`=(SELECT `roster`.`id` FROM `roster` JOIN `team` ON `roster`.`team_id` = `team`.`id` ' + 'WHERE `roster`.`name`=%(roster)s AND `team`.`name`=%(team)s)', + 'auto_populate_threshold': '`auto_populate_threshold`=%(auto_populate_threshold)s', + 'advanced_mode': '`advanced_mode` = %(advanced_mode)s' +} + + +def verify_auth(req, schedule_id, connection, cursor): + team_query = ('SELECT `team`.`name` FROM `schedule` JOIN `team` ' + 'ON `schedule`.`team_id` = `team`.`id` WHERE `schedule`.`id` = %s') + cursor.execute(team_query, schedule_id) + if cursor.rowcount == 0: + cursor.close() + connection.close() + raise HTTPNotFound() + try: + check_team_auth(cursor.fetchone()[0], req) + except HTTPForbidden: + cursor.close() + connection.close() + raise + + +def on_get(req, resp, schedule_id): + resp.body = json_dumps(get_schedules({'schedule_id': schedule_id}, fields=req.get_param_as_list('fields'))[0]) + + +@login_required +def on_put(req, resp, schedule_id): + """ + Update a schedule + """ + data = load_json_body(req) + + # Get rid of extraneous column data (so pymysql doesn't try to escape it) + events = data.pop('events', None) + + data = dict((k, data[k]) for k in data if k in columns) + if 'roster' in data and 'team' not in data: + raise HTTPBadRequest('Invalid edit', 'team must be specified with roster') + cols = ', '.join(columns[col] for col in data) + + update = 'UPDATE `schedule` SET ' + cols + ' WHERE `id`=%d' % int(schedule_id) + connection = db.connect() + cursor = connection.cursor() + verify_auth(req, schedule_id, connection, cursor) + + # Validate simple schedule events + if events: + simple = validate_simple_schedule(events) + else: + cursor.execute('SELECT duration FROM schedule_event WHERE schedule_id = %s', schedule_id) + existing_events = [{'duration': row[0]} for row in cursor.fetchall()] + simple = validate_simple_schedule(existing_events) + + # Get advanced mode value (existing or new) + advanced_mode = data.get('advanced_mode') + if advanced_mode is None: + cursor.execute('SELECT advanced_mode FROM schedule WHERE id = %s', schedule_id) + advanced_mode = cursor.fetchone()[0] + # if advanced mode is 0 and the events cannot exist as a simple schedule, raise an error + if not advanced_mode and not simple: + raise HTTPBadRequest('Invalid edit', 'schedule cannot be represented in simple mode') + + if cols: + cursor.execute(update, data) + if events: + cursor.execute('DELETE FROM `schedule_event` WHERE `schedule_id` = %s', schedule_id) + insert_schedule_events(schedule_id, events, cursor) + connection.commit() + cursor.close() + connection.close() + + +@login_required +def on_delete(req, resp, schedule_id): + """ + Delete a schedule + """ + connection = db.connect() + cursor = connection.cursor() + verify_auth(req, schedule_id, connection, cursor) + cursor.execute('DELETE FROM `schedule` WHERE `id`=%s', int(schedule_id)) + deleted = cursor.rowcount + connection.commit() + cursor.close() + connection.close() + + if deleted == 0: + raise HTTPNotFound() diff --git a/src/oncall/api/v0/schedules.py b/src/oncall/api/v0/schedules.py new file mode 100644 index 0000000..26ecd3b --- /dev/null +++ b/src/oncall/api/v0/schedules.py @@ -0,0 +1,253 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTP_201, HTTPError, HTTPBadRequest +from ujson import dumps as json_dumps + +from ...utils import load_json_body +from ...auth import login_required, check_team_auth +from ... import db + +HOUR = 60 * 60 +WEEK = 24 * HOUR * 7 +simple_ev_lengths = set([WEEK, 2 * WEEK]) +simple_12hr_num_events = set([7, 14]) + +columns = { + 'id': '`schedule`.`id` as `id`', + 'roster': '`roster`.`name` as `roster`, `roster`.`id` AS `roster_id`', + 'auto_populate_threshold': '`schedule`.`auto_populate_threshold` as `auto_populate_threshold`', + 'role': '`role`.`name` as `role`, `role`.`id` AS `role_id`', + 'team': '`team`.`name` as `team`, `team`.`id` AS `team_id`', + 'events': '`schedule_event`.`start`, `schedule_event`.`duration`, `schedule`.`id` AS `schedule_id`', + 'advanced_mode': '`schedule`.`advanced_mode` AS `advanced_mode`', + 'timezone': '`team`.`scheduling_timezone` AS `timezone`' +} + +all_columns = columns.keys() + +constraints = { + 'id': '`schedule`.`id` = %s', + 'id__eq': '`schedule`.`id` = %s', + 'id__ge': '`schedule`.`id` >= %s', + 'id__gt': '`schedule`.`id` > %s', + 'id__le': '`schedule`.`id` <= %s', + 'id__lt': '`schedule`.`id` < %s', + 'id__ne': '`schedule`.`id` != %s', + 'name': '`roster`.`name` = %s', + 'name__contains': '`roster`.`name` LIKE CONCAT("%%", %s, "%%")', + 'name__endswith': '`roster`.`name` LIKE CONCAT("%%", %s)', + 'name__eq': '`roster`.`name` = %s', + 'name__startswith': '`roster`.`name` LIKE CONCAT(%s, "%%")', + 'role': '`role`.`name` = %s', + 'role__contains': '`role`.`name` LIKE CONCAT("%%", %s, "%%")', + 'role__endswith': '`role`.`name` LIKE CONCAT("%%", %s)', + 'role__eq': '`role`.`name` = %s', + 'role__startswith': '`role`.`name` LIKE CONCAT(%s, "%%")', + 'team': '`team`.`name` = %s', + 'team__contains': '`team`.`name` LIKE CONCAT("%%", %s, "%%")', + 'team__endswith': '`team`.`name` LIKE CONCAT("%%", %s)', + 'team__eq': '`team`.`name` = %s', + 'team__startswith': '`team`.`name` LIKE CONCAT(%s, "%%")', + 'team_id': '`schedule`.`team_id` = %s', + 'roster_id': '`schedule`.`roster_id` = %s' +} + + +def validate_simple_schedule(events): + ''' + Return boolean whether a schedule can be represented in simple mode. Simple schedules can have: + 1. One event that is one week long + 2. One event that is two weeks long + 3. Seven events that are 12 hours long + 4. Fourteen events that are 12 hours long + ''' + if len(events) == 1 and events[0]['duration'] in simple_ev_lengths: + return True + else: + return len(events) in simple_12hr_num_events and all([ev['duration'] == 12 * HOUR for ev in events]) + + +def get_schedules(filter_params, dbinfo=None, fields=None): + """ + Get schedule data for a request + """ + events = False + from_clause = ['`schedule`'] + + if fields is None: + fields = columns.keys() + if any(f not in columns for f in fields): + raise HTTPBadRequest('Bad fields', 'One or more invalid fields') + if 'roster' in fields: + from_clause.append('JOIN `roster` ON `roster`.`id` = `schedule`.`roster_id`') + if 'team' in fields or 'timezone' in fields: + from_clause.append('JOIN `team` ON `team`.`id` = `schedule`.`team_id`') + if 'role' in fields: + from_clause.append('JOIN `role` ON `role`.`id` = `schedule`.`role_id`') + if 'events' in fields: + from_clause.append('LEFT JOIN `schedule_event` ON `schedule_event`.`schedule_id` = `schedule`.`id`') + events = True + + fields = map(columns.__getitem__, fields) + cols = ', '.join(fields) + from_clause = ' '.join(from_clause) + + connection_opened = False + if dbinfo is None: + connection = db.connect() + connection_opened = True + cursor = connection.cursor(db.DictCursor) + else: + connection, cursor = dbinfo + + where = ' AND '.join(constraints[key] % connection.escape(value) + for key, value in filter_params.iteritems() + if key in constraints) + query = 'SELECT %s FROM %s' % (cols, from_clause) + if where: + query = '%s WHERE %s' % (query, where) + + cursor.execute(query) + data = cursor.fetchall() + if connection_opened: + cursor.close() + connection.close() + + # Format schedule events + if events: + # end result accumulator + ret = {} + for row in data: + schedule_id = row.pop('schedule_id') + # add data row into accumulator only if not already there + if schedule_id not in ret: + ret[schedule_id] = row + ret[schedule_id]['events'] = [] + start = row.pop('start') + duration = row.pop('duration') + ret[schedule_id]['events'].append({'start': start, 'duration': duration}) + data = ret.values() + return data + + +def insert_schedule_events(schedule_id, events, cursor): + insert_events = '''INSERT INTO `schedule_event` (`schedule_id`, `start`, `duration`) + VALUES (%(schedule)s, %(start)s, %(duration)s)''' + # Merge consecutive events for db storage + raw_events = sorted(events, key=lambda e: e['start']) + new_events = [] + for e in raw_events: + if len(new_events) > 0 and e['start'] == new_events[-1]['start'] + new_events[-1]['duration']: + new_events[-1]['duration'] += e['duration'] + else: + new_events.append(e) + for e in new_events: + e['schedule'] = schedule_id + cursor.executemany(insert_events, new_events) + + +def on_get(req, resp, team, roster): + team = unquote(team) + roster = unquote(roster) + fields = req.get_param_as_list('fields') + if not fields: + fields = all_columns + + params = req.params + params['team'] = team + params['roster'] = roster + data = get_schedules(params, fields=fields) + + resp.body = json_dumps(data) + + +required_params = frozenset(['events', 'role', 'advanced_mode']) + + +@login_required +def on_post(req, resp, team, roster): + ''' + See below for sample JSON requests. + + Weekly 7*24 shift that starts at Monday 6PM PST: + + .. code-block:: javascript + + { + 'role': 'primary' + 'auto_populate_threshold': 21, + 'events':[ + {'start': SECONDS_IN_A_DAY + 18 * SECONDS_IN_AN_HOUR, + 'duration': SECONDS_IN_A_WEEK} + ], + 'advanced_mode': 0 + } + + Weekly 7*12 shift that starts at Monday 8AM PST: + + .. code-block:: javascript + + { + 'role': 'oncall', + 'events':[ + {'start': SECONDS_IN_A_DAY + 8 * SECONDS_IN_AN_HOUR, + 'duration': 12 * SECONDS_IN_AN_HOUR}, + {'start': 2 * SECONDS_IN_A_DAY + 8 * SECONDS_IN_AN_HOUR, + 'duration': 12 * SECONDS_IN_AN_HOUR} ... *5 more* + ], + 'advanced_mode': 1 + } + ''' + data = load_json_body(req) + data['team'] = unquote(team) + data['roster'] = unquote(roster) + check_team_auth(data['team'], req) + + missing_params = required_params - set(data.keys()) + if missing_params: + raise HTTPBadRequest('invalid schedule', + 'missing required parameters: %s' % ', '.join(missing_params)) + + schedule_events = data.pop('events') + for sev in schedule_events: + if 'start' not in sev or 'duration' not in sev: + raise HTTPBadRequest('invalid schedule', + 'schedule event requires both start and duration fields') + + if 'auto_populate_threshold' not in data: + # default to autopopulate 3 weeks forward + data['auto_populate_threshold'] = 21 + + if not data['advanced_mode']: + if not validate_simple_schedule(schedule_events): + raise HTTPBadRequest('invalid schedule', 'invalid advanced mode setting') + + insert_schedule = '''INSERT INTO `schedule` (`roster_id`,`team_id`,`role_id`, + `auto_populate_threshold`, `advanced_mode`) + VALUES ((SELECT `roster`.`id` FROM `roster` + JOIN `team` ON `roster`.`team_id` = `team`.`id` + WHERE `roster`.`name` = %(roster)s AND `team`.`name` = %(team)s), + (SELECT `id` FROM `team` WHERE `name` = %(team)s), + (SELECT `id` FROM `role` WHERE `name` = %(role)s), + %(auto_populate_threshold)s, + %(advanced_mode)s)''' + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + try: + cursor.execute(insert_schedule, data) + schedule_id = cursor.lastrowid + insert_schedule_events(schedule_id, schedule_events, cursor) + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if err_msg == 'Column \'roster_id\' cannot be null': + err_msg = 'roster "%s" not found' % roster + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + + connection.commit() + cursor.close() + connection.close() + + resp.status = HTTP_201 + resp.body = json_dumps({'id': schedule_id}) diff --git a/src/oncall/api/v0/search.py b/src/oncall/api/v0/search.py new file mode 100644 index 0000000..fb1c3b3 --- /dev/null +++ b/src/oncall/api/v0/search.py @@ -0,0 +1,44 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ... import db +from ujson import dumps + + +def on_get(req, resp): + keyword = req.get_param('keyword', required=True) + fields = req.get_param_as_list('fields') + if not fields: + fields = ['teams', 'services'] + + connection = db.connect() + cursor = connection.cursor() + + data = {} + if 'teams' in fields: + query = 'SELECT `name` FROM `team` WHERE `team`.`name` LIKE CONCAT("%%", %s, "%%") ' \ + 'AND `active` = TRUE' + cursor.execute(query, keyword) + data['teams'] = [r[0] for r in cursor] + + if 'services' in fields: + query = '''SELECT `service`.`name` as `service`, `team`.`name` as `team` FROM `service` + JOIN `team_service` ON `service`.`id` = `team_service`.`service_id` + JOIN `team` ON `team`.`id` = `team_service`.`team_id` + WHERE `service`.`name` LIKE CONCAT("%%", %s, "%%") AND `team`.`active` = TRUE''' + cursor.execute(query, keyword) + services = {} + for row in cursor: + serv, team = row + services[serv] = team + data['services'] = services + + if 'users' in fields: + query = '''SELECT `full_name`, `name` FROM `user` + WHERE `active` = TRUE AND (`name` LIKE CONCAT(%s, "%%") OR `full_name` LIKE CONCAT(%s, "%%"))''' + cursor.execute(query, (keyword, keyword)) + data['users'] = [{'full_name': r[0], 'name': r[1]} for r in cursor] + + cursor.close() + connection.close() + resp.body = dumps(data) diff --git a/src/oncall/api/v0/service.py b/src/oncall/api/v0/service.py new file mode 100644 index 0000000..8e260e4 --- /dev/null +++ b/src/oncall/api/v0/service.py @@ -0,0 +1,59 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound +from ujson import dumps +from ...utils import load_json_body + +from ... import db +from ...auth import debug_only + + +def on_get(req, resp, service): + """ + Get service id by name + """ + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute('SELECT `id`, `name` FROM `service` WHERE `name`=%s', service) + results = cursor.fetchall() + if not results: + raise HTTPNotFound() + [service] = results + cursor.close() + connection.close() + resp.body = dumps(service) + + +@debug_only +def on_put(req, resp, service): + """ + Change name for a service + """ + data = load_json_body(req) + connection = db.connect() + cursor = connection.cursor() + cursor.execute('UPDATE `service` SET `name`=%s WHERE `name`=%s', + (data['name'], service)) + connection.commit() + cursor.close() + connection.close() + + +@debug_only +def on_delete(req, resp, service): + """ + Delete a service + """ + connection = db.connect() + cursor = connection.cursor() + + # FIXME: also delete team service mappings? + cursor.execute('DELETE FROM `service` WHERE `name`=%s', service) + deleted = cursor.rowcount + connection.commit() + cursor.close() + connection.close() + + if deleted == 0: + raise HTTPNotFound() diff --git a/src/oncall/api/v0/service_oncall.py b/src/oncall/api/v0/service_oncall.py new file mode 100644 index 0000000..45ed77c --- /dev/null +++ b/src/oncall/api/v0/service_oncall.py @@ -0,0 +1,39 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ujson import dumps as json_dumps +from ... import db + + +def on_get(req, resp, service, role): + get_oncall_query = '''SELECT `user`.`full_name` AS `user`, `event`.`start`, `event`.`end`, + `contact_mode`.`name` AS `mode`, `user_contact`.`destination` + FROM `service` JOIN `team_service` ON `service`.`id` = `team_service`.`service_id` + JOIN `event` ON `event`.`team_id` = `team_service`.`team_id` + JOIN `user` ON `user`.`id` = `event`.`user_id` + JOIN `role` ON `role`.`id` = `event`.`role_id` AND `role`.`name` = %s + LEFT JOIN `user_contact` ON `user`.`id` = `user_contact`.`user_id` + LEFT JOIN `contact_mode` ON `contact_mode`.`id` = `user_contact`.`mode_id` + WHERE UNIX_TIMESTAMP() BETWEEN `event`.`start` AND `event`.`end` + AND `service`.`name` = %s''' + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(get_oncall_query, (role, service)) + data = cursor.fetchall() + ret = {} + for row in data: + user = row['user'] + # add data row into accumulator only if not already there + if user not in ret: + ret[user] = row + ret[user]['contacts'] = {} + mode = row.pop('mode') + if not mode: + continue + dest = row.pop('destination') + ret[user]['contacts'][mode] = dest + data = ret.values() + + cursor.close() + connection.close() + resp.body = json_dumps(data) diff --git a/src/oncall/api/v0/service_teams.py b/src/oncall/api/v0/service_teams.py new file mode 100644 index 0000000..c0b2e14 --- /dev/null +++ b/src/oncall/api/v0/service_teams.py @@ -0,0 +1,21 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ujson import dumps +from ... import db + + +def on_get(req, resp, service): + """ + Get list of team mapped to a service + """ + connection = db.connect() + cursor = connection.cursor() + cursor.execute('''SELECT `team`.`name` FROM `service` + JOIN `team_service` ON `team_service`.`service_id`=`service`.`id` + JOIN `team` ON `team`.`id`=`team_service`.`team_id` + WHERE `service`.`name`=%s''', service) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = dumps(data) diff --git a/src/oncall/api/v0/services.py b/src/oncall/api/v0/services.py new file mode 100755 index 0000000..3d67590 --- /dev/null +++ b/src/oncall/api/v0/services.py @@ -0,0 +1,71 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPError, HTTP_201 +from ujson import dumps as json_dumps + +from ... import db +from ...utils import load_json_body +from ...auth import debug_only + +constraints = { + 'id': '`service`.`id` = %s', + 'id__eq': '`service`.`id` = %s', + 'id__ne': '`service`.`id` != %s', + 'id__lt': '`service`.`id` < %s', + 'id__le': '`service`.`id` <= %s', + 'id__gt': '`service`.`id` > %s', + 'id__ge': '`service`.`id` >= %s', + 'name': '`service`.`name` = %s', + 'name__eq': '`service`.`name` = %s', + 'name__contains': '`service`.`name` LIKE CONCAT("%%", %s, "%%")', + 'name__startswith': '`service`.`name` LIKE CONCAT(%s, "%%")', + 'name__endswith': '`service`.`name` LIKE CONCAT("%%", %s)' +} + + +def on_get(req, resp): + """ + Search for services + """ + query = 'SELECT `name` FROM `service`' + + where_params = [] + where_vals = [] + for key in req.params: + val = req.get_param(key) + if key in constraints: + where_params.append(constraints[key]) + where_vals.append(val) + where_query = ' AND '.join(where_params) + + if where_query: + query = '%s WHERE %s' % (query, where_query) + + connection = db.connect() + cursor = connection.cursor() + cursor.execute(query, where_vals) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@debug_only +def on_post(req, resp): + data = load_json_body(req) + + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute('INSERT INTO `service` (`name`) VALUES (%(name)s)', data) + connection.commit() + except db.IntegrityError: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'service name "%(name)s" already exists' % data) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 diff --git a/src/oncall/api/v0/team.py b/src/oncall/api/v0/team.py new file mode 100644 index 0000000..a370f72 --- /dev/null +++ b/src/oncall/api/v0/team.py @@ -0,0 +1,133 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPNotFound, HTTPBadRequest, HTTPError +from ujson import dumps as json_dumps + +from ... import db +from .users import get_user_data +from .rosters import get_roster_by_team_id +from ...auth import login_required, check_team_auth +from ...utils import load_json_body, invalid_char_reg, create_audit +from ...constants import TEAM_DELETED, TEAM_EDITED + + +cols = set(['name', 'slack_channel', 'email', 'scheduling_timezone']) + + +def populate_team_users(cursor, team_dict): + cursor.execute('''SELECT `user`.`name` FROM `team_user` + JOIN `user` ON `team_user`.`user_id`=`user`.`id` + WHERE `team_id`=%s''', + team_dict['id']) + team_dict['users'] = dict((r['name'], get_user_data(None, {'name__eq': r['name']})[0]) + for r in cursor) + + +def populate_team_admins(cursor, team_dict): + cursor.execute('''SELECT `user`.`name` FROM `team_admin` + JOIN `user` ON `team_admin`.`user_id`=`user`.`id` + WHERE `team_id`=%s''', + team_dict['id']) + team_dict['admins'] = [{'name': r['name']} for r in cursor] + + +def populate_team_services(cursor, team_dict): + cursor.execute('''SELECT `service`.`name` FROM `team_service` + JOIN `service` ON `team_service`.`service_id`=`service`.`id` + WHERE `team_id`=%s''', + team_dict['id']) + team_dict['services'] = [r['name'] for r in cursor] + + +def populate_team_rosters(cursor, team_dict): + team_dict['rosters'] = get_roster_by_team_id(cursor, team_dict['id']) + + +populate_map = { + 'users': populate_team_users, + 'admins': populate_team_admins, + 'services': populate_team_services, + 'rosters': populate_team_rosters +} + + +def on_get(req, resp, team): + team = unquote(team) + fields = req.get_param_as_list('fields') + active = req.get_param('active', default=True) + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute('SELECT `id`, `name`, `email`, `slack_channel`, `scheduling_timezone` ' + 'FROM `team` WHERE `name`=%s AND `active` = %s', (team, active)) + results = cursor.fetchall() + if not results: + raise HTTPNotFound() + [team_info] = results + + if not fields: + # default to get all data + fields = populate_map.keys() + for field in fields: + populate = populate_map.get(field) + if not populate: + continue + populate(cursor, team_info) + + cursor.close() + connection.close() + resp.body = json_dumps(team_info) + + +@login_required +def on_put(req, resp, team): + team = unquote(team) + check_team_auth(team, req) + data = load_json_body(req) + + connection = db.connect() + cursor = connection.cursor() + + data_cols = data.keys() + if 'name' in data: + invalid_char = invalid_char_reg.search(data['name']) + if invalid_char: + raise HTTPBadRequest('invalid team name', + 'team name contains invalid character "%s"' % invalid_char.group()) + set_clause = ', '.join(['`{0}`=%s'.format(d) for d in data_cols if d in cols]) + query_params = tuple(data[d] for d in data_cols) + (team,) + try: + update_query = 'UPDATE `team` SET {0} WHERE name=%s'.format(set_clause) + cursor.execute(update_query, query_params) + create_audit({'request_body': data}, team, TEAM_EDITED, req, cursor) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if 'Duplicate entry' in err_msg: + err_msg = "A team named '%s' already exists" % (data['name']) + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + +@login_required +def on_delete(req, resp, team): + team = unquote(team) + check_team_auth(team, req) + connection = db.connect() + cursor = connection.cursor() + # Soft delete: set team inactive, delete future events for it + cursor.execute('UPDATE `team` SET `active` = FALSE WHERE `name`=%s', team) + cursor.execute('DELETE FROM `event` WHERE `team_id` = (SELECT `id` FROM `team` WHERE `name` = %s) ' + 'AND `start` > UNIX_TIMESTAMP()', team) + create_audit({}, team, TEAM_DELETED, req, cursor) + deleted = cursor.rowcount + connection.commit() + cursor.close() + connection.close() + + if deleted == 0: + raise HTTPNotFound() diff --git a/src/oncall/api/v0/team_admin.py b/src/oncall/api/v0/team_admin.py new file mode 100644 index 0000000..b20c88b --- /dev/null +++ b/src/oncall/api/v0/team_admin.py @@ -0,0 +1,44 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound + +from ...auth import login_required, check_team_auth +from ... import db +from ...utils import unsubscribe_notifications, create_audit +from ...constants import ADMIN_DELETED + + +@login_required +def on_delete(req, resp, team, user): + """ + Delete team admin user + """ + check_team_auth(team, req) + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('''DELETE FROM `team_admin` + WHERE `team_id`=(SELECT `id` FROM `team` WHERE `name`=%s) + AND `user_id`=(SELECT `id` FROM `user` WHERE `name`=%s)''', + (team, user)) + deleted = cursor.rowcount + if deleted == 0: + raise HTTPNotFound() + create_audit({'user': user}, team, ADMIN_DELETED, req, cursor) + + # Remove user from the team if needed + query = '''DELETE FROM `team_user` WHERE `user_id` = (SELECT `id` FROM `user` WHERE `name`=%s) AND `user_id` NOT IN + (SELECT `roster_user`.`user_id` + FROM `roster_user` JOIN `roster` ON `roster`.`id` = `roster_user`.`roster_id` + WHERE team_id = (SELECT `id` FROM `team` WHERE `name`=%s) + UNION + (SELECT `user_id` FROM `team_admin` + WHERE `team_id` = (SELECT `id` FROM `team` WHERE `name`=%s))) + AND `team_user`.`team_id` = (SELECT `id` FROM `team` WHERE `name` = %s)''' + cursor.execute(query, (user, team, team, team)) + if cursor.rowcount != 0: + unsubscribe_notifications(team, user, cursor) + connection.commit() + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/team_admins.py b/src/oncall/api/v0/team_admins.py new file mode 100644 index 0000000..f6e2e41 --- /dev/null +++ b/src/oncall/api/v0/team_admins.py @@ -0,0 +1,80 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPError, HTTP_201, HTTPBadRequest +from ujson import dumps as json_dumps +from ... import db +from .users import get_user_data +from ...auth import login_required, check_team_auth +from ...utils import load_json_body, subscribe_notifications, create_audit +from ...constants import ADMIN_CREATED + + +def on_get(req, resp, team): + """ + Get list of admin users for a team + """ + team = unquote(team) + connection = db.connect() + cursor = connection.cursor() + cursor.execute('''SELECT `user`.`name` FROM `user` + JOIN `team_admin` ON `team_admin`.`user_id`=`user`.`id` + JOIN `team` ON `team`.`id`=`team_admin`.`team_id` + WHERE `team`.`name`=%s''', + team) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@login_required +def on_post(req, resp, team): + """ + Add user as team admin + """ + team = unquote(team) + check_team_auth(team, req) + data = load_json_body(req) + + user_name = data.get('name') + if not user_name: + raise HTTPBadRequest('name attribute missing from request') + + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('''(SELECT `id` FROM `team` WHERE `name`=%s) + UNION + (SELECT `id` FROM `user` WHERE `name`=%s)''', (team, user_name)) + results = [r[0] for r in cursor] + if len(results) < 2: + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', 'invalid team or user') + (team_id, user_id) = results + + try: + # also make sure user is in the team + cursor.execute('''INSERT IGNORE INTO `team_user` (`team_id`, `user_id`) VALUES (%r, %r)''', + (team_id, user_id)) + cursor.execute('''INSERT INTO `team_admin` (`team_id`, `user_id`) VALUES (%r, %r)''', + (team_id, user_id)) + # subscribe user to team notifications + subscribe_notifications(team, user_name, cursor) + create_audit({'user': user_name}, team, ADMIN_CREATED, req, cursor) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if err_msg == "Column 'team_id' cannot be null": + err_msg = 'team %s not found' % team + if err_msg == "Column 'user_id' cannot be null": + err_msg = 'user %s not found' % data['name'] + else: + err_msg = 'user name "%s" is already an admin of team %s' % (data['name'], team) + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 + resp.body = json_dumps(get_user_data(None, {'name': user_name})[0]) diff --git a/src/oncall/api/v0/team_changes.py b/src/oncall/api/v0/team_changes.py new file mode 100644 index 0000000..66c187e --- /dev/null +++ b/src/oncall/api/v0/team_changes.py @@ -0,0 +1,18 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ujson import dumps as json_dumps +from ... import db + + +def on_get(req, resp, team): + audit_query = '''SELECT `audit_log`.`description`, `audit_log`.`timestamp`, + `audit_log`.`owner_name`, `audit_log`.`action_name` + FROM `audit_log` WHERE `team_name` = %s''' + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(audit_query, team) + data = cursor.fetchall() + cursor.close() + connection.close() + resp.body = json_dumps(data) diff --git a/src/oncall/api/v0/team_oncall.py b/src/oncall/api/v0/team_oncall.py new file mode 100644 index 0000000..5e7b511 --- /dev/null +++ b/src/oncall/api/v0/team_oncall.py @@ -0,0 +1,93 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ujson import dumps as json_dumps +from ... import db + + +get_oncall_query = ''' + SELECT `user`.`full_name` AS `full_name`, + `event`.`start`, `event`.`end`, + `contact_mode`.`name` AS `mode`, + `user_contact`.`destination`, + `user`.`name` as `user` + FROM `event` + JOIN `user` ON `event`.`user_id` = `user`.`id` + JOIN `team` ON `event`.`team_id` = `team`.`id` + JOIN `role` ON `role`.`id` = `event`.`role_id` AND `role`.`name` = %s + LEFT JOIN `user_contact` ON `user`.`id` = `user_contact`.`user_id` + LEFT JOIN `contact_mode` ON `contact_mode`.`id` = `user_contact`.`mode_id` + WHERE UNIX_TIMESTAMP() BETWEEN `event`.`start` AND `event`.`end` + AND `team`.`name` = %s''' + + +def on_get(req, resp, team, role): + """ + http:get:: /api/v0/teams/(str:team_name)/oncall/(str:role) + + Get current active event for team based on given role. + + **Example request**: + + .. sourcecode:: http + + GET /api/v0/teams/team_ops/oncall/primary HTTP/1.1 + Host: example.com + + **Example response**: + + .. sourcecode:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "user": "foo", + "start": 1487426400, + "end": 1487469600, + "full_name": "Foo Icecream", + "contacts": { + "im": "foo", + "sms": "+1 123-456-7890", + "email": "foo@example.com", + "call": "+1 123-456-7890" + } + }, + { + "user": "bar", + "start": 1487426400, + "end": 1487469600, + "full_name": "Bar Dog", + "contacts": { + "im": "bar", + "sms": "+1 123-456-7890", + "email": "bar@example.com", + "call": "+1 123-456-7890" + } + } + ] + + :statuscode 200: no error + """ + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(get_oncall_query, (role, team)) + data = cursor.fetchall() + ret = {} + for row in data: + user = row['user'] + # add data row into accumulator only if not already there + if user not in ret: + ret[user] = row + ret[user]['contacts'] = {} + mode = row.pop('mode') + if not mode: + continue + dest = row.pop('destination') + ret[user]['contacts'][mode] = dest + data = ret.values() + + cursor.close() + connection.close() + resp.body = json_dumps(data) diff --git a/src/oncall/api/v0/team_service.py b/src/oncall/api/v0/team_service.py new file mode 100644 index 0000000..abcc3f0 --- /dev/null +++ b/src/oncall/api/v0/team_service.py @@ -0,0 +1,32 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote + +from falcon import HTTPNotFound + +from ...auth import login_required, check_team_auth +from ... import db + + +@login_required +def on_delete(req, resp, team, service): + """ + Delete service team mapping + """ + team = unquote(team) + check_team_auth(team, req) + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('''DELETE FROM `team_service` + WHERE `team_id`=(SELECT `id` FROM `team` WHERE `name`=%s) + AND `service_id`=(SELECT `id` FROM `service` WHERE `name`=%s)''', + (team, service)) + deleted = cursor.rowcount + if deleted == 0: + raise HTTPNotFound() + + connection.commit() + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/team_services.py b/src/oncall/api/v0/team_services.py new file mode 100644 index 0000000..d4e980f --- /dev/null +++ b/src/oncall/api/v0/team_services.py @@ -0,0 +1,75 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPError, HTTP_201 +from ujson import dumps as json_dumps +from ...auth import login_required, check_team_auth +from ...utils import load_json_body + +from ... import db + + +def on_get(req, resp, team): + """ + Get list of services mapped to a team + """ + team = unquote(team) + connection = db.connect() + cursor = connection.cursor() + cursor.execute('''SELECT `service`.`name` FROM `service` + JOIN `team_service` ON `team_service`.`service_id`=`service`.`id` + JOIN `team` ON `team`.`id`=`team_service`.`team_id` + WHERE `team`.`name`=%s''', + team) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@login_required +def on_post(req, resp, team): + """ + Create team to service mapping + """ + team = unquote(team) + check_team_auth(team, req) + data = load_json_body(req) + + service = data['name'] + connection = db.connect() + cursor = connection.cursor() + try: + # TODO: allow many to many mapping for team/service? + cursor.execute('''SELECT `team`.`name` from `team_service` + JOIN `team` ON `team`.`id` = `team_service`.`team_id` + JOIN `service` ON `service`.`id` = `team_service`.`service_id` + WHERE `service`.`name` = %s''', service) + claimed_team = [r[0] for r in cursor] + if claimed_team: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'service "%s" alread claimed by team "%s"' % (service, claimed_team[0])) + + cursor.execute('''INSERT INTO `team_service` (`team_id`, `service_id`) + VALUES ( + (SELECT `id` FROM `team` WHERE `name`=%s), + (SELECT `id` FROM `service` WHERE `name`=%s) + )''', + (team, service)) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if err_msg == 'Column \'service_id\' cannot be null': + err_msg = 'service "%s" not found' % service + elif err_msg == 'Column \'team_id\' cannot be null': + err_msg = 'team "%s" not found' % team + elif 'Duplicate entry' in err_msg: + err_msg = 'service name "%s" is already associated with team %s' % (service, team) + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 diff --git a/src/oncall/api/v0/team_summary.py b/src/oncall/api/v0/team_summary.py new file mode 100644 index 0000000..3201526 --- /dev/null +++ b/src/oncall/api/v0/team_summary.py @@ -0,0 +1,79 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ... import db +from ujson import dumps +from collections import defaultdict +from falcon import HTTPNotFound + + +def on_get(req, resp, team): + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + cursor.execute('SELECT `id` FROM `team` WHERE `name` = %s', team) + if cursor.rowcount < 1: + raise HTTPNotFound() + team_id = cursor.fetchone()['id'] + + current_query = ''' + SELECT `role`.`name` AS `role`, `user`.`full_name` AS `full_name`, + `event`.`start`, `event`.`end`, `user`.`photo_url`, `event`.`user_id` + FROM `event` + JOIN `role` ON `event`.`role_id` = `role`.`id` + JOIN `user` ON `event`.`user_id` = `user`.`id` + WHERE `event`.`team_id` = %s + AND UNIX_TIMESTAMP() >= `event`.`start` + AND UNIX_TIMESTAMP() < `event`.`end`''' + cursor.execute(current_query, team_id) + payload = {} + users = set([]) + payload['current'] = defaultdict(list) + for event in cursor: + payload['current'][event['role']].append(event) + users.add(event['user_id']) + + next_query = ''' + SELECT `role`.`name` AS `role`, `user`.`full_name` AS `full_name`, + `event`.`start`, `event`.`end`, `user`.`photo_url`, `event`.`user_id` + FROM `event` + JOIN `role` ON `event`.`role_id` = `role`.`id` + JOIN `user` ON `event`.`user_id` = `user`.`id` + JOIN (SELECT `role_id`, `team_id`, MIN(`start` - UNIX_TIMESTAMP()) AS dist + FROM `event` + WHERE `start` > UNIX_TIMESTAMP() AND `event`.`team_id` = %s + GROUP BY role_id) AS t1 + ON `event`.`role_id` = `t1`.`role_id` + AND `event`.`start` - UNIX_TIMESTAMP() = `t1`.dist + AND `event`.`team_id` = `t1`.`team_id`''' + cursor.execute(next_query, team_id) + payload['next'] = defaultdict(list) + for event in cursor: + payload['next'][event['role']].append(event) + users.add(event['user_id']) + + if users: + # TODO: write a test for empty users + contacts_query = ''' + SELECT `contact_mode`.`name` AS `mode`, + `user_contact`.`destination`, + `user_contact`.`user_id` + FROM `user` + JOIN `user_contact` ON `user`.`id` = `user_contact`.`user_id` + JOIN `contact_mode` ON `contact_mode`.`id` = `user_contact`.`mode_id` + WHERE `user`.`id` IN %s''' + + cursor.execute(contacts_query, (users,)) + contacts = cursor.fetchall() + + for part in payload.values(): + for event_list in part.values(): + for event in event_list: + event['user_contacts'] = dict((c['mode'], c['destination']) + for c in contacts + if c['user_id'] == event['user_id']) + + cursor.close() + connection.close() + + resp.body = dumps(payload) diff --git a/src/oncall/api/v0/team_user.py b/src/oncall/api/v0/team_user.py new file mode 100644 index 0000000..5fd8e0f --- /dev/null +++ b/src/oncall/api/v0/team_user.py @@ -0,0 +1,32 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote + +from falcon import HTTPNotFound + +from ...auth import login_required, check_team_auth +from ... import db + + +@login_required +def on_delete(req, resp, team, user): + """ + Delete user from a team + """ + team = unquote(team) + check_team_auth(team, req) + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('''DELETE FROM `team_user` + WHERE `team_id`=(SELECT `id` FROM `team` WHERE `name`=%s) + AND `user_id`=(SELECT `id` FROM `user` WHERE `name`=%s)''', + (team, user)) + deleted = cursor.rowcount + if deleted == 0: + raise HTTPNotFound() + + connection.commit() + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/team_users.py b/src/oncall/api/v0/team_users.py new file mode 100644 index 0000000..02d7f6f --- /dev/null +++ b/src/oncall/api/v0/team_users.py @@ -0,0 +1,73 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPError, HTTP_201 +from ujson import dumps as json_dumps +from .users import get_user_data +from ... import db +from ...auth import login_required, check_team_auth +from ...utils import load_json_body + +constraints = {'active': '`team`.`active` = %s'} + + +def on_get(req, resp, team): + """ + Get list of users for a team + """ + query = '''SELECT `user`.`name` FROM `user` + JOIN `team_user` ON `team_user`.`user_id`=`user`.`id` + JOIN `team` ON `team`.`id`=`team_user`.`team_id` + WHERE `team`.`name`=%s''' + active = req.get_param('active') + query_params = [team] + if active: + query += ' AND `team`.`active` = %s' + query_params.append(active) + + connection = db.connect() + cursor = connection.cursor() + cursor.execute(query, query_params) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@login_required +def on_post(req, resp, team): + """ + Add user to a team + """ + check_team_auth(team, req) + data = load_json_body(req) + + user_name = data.get('name') + if not user_name: + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', 'name missing for user') + + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute('''INSERT INTO `team_user` (`team_id`, `user_id`) + VALUES ( + (SELECT `id` FROM `team` WHERE `name`=%s), + (SELECT `id` FROM `user` WHERE `name`=%s) + )''', + (team, user_name)) + connection.commit() + except db.IntegrityError as e: + err_msg = str(e.args[1]) + if err_msg == 'Column \'user_id\' cannot be null': + err_msg = 'user %s not found' % user_name + elif err_msg == 'Column \'team_id\' cannot be null': + err_msg = 'team %s not found' % team + elif 'Duplicate entry' in err_msg: + err_msg = 'user name "%s" is already in team %s' % (user_name, team) + raise HTTPError('422 Unprocessable Entity', 'IntegrityError', err_msg) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 + resp.body = json_dumps(get_user_data(None, {'name': user_name})[0]) diff --git a/src/oncall/api/v0/teams.py b/src/oncall/api/v0/teams.py new file mode 100755 index 0000000..73448b0 --- /dev/null +++ b/src/oncall/api/v0/teams.py @@ -0,0 +1,100 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from urllib import unquote +from falcon import HTTPError, HTTP_201, HTTPBadRequest +from ujson import dumps as json_dumps +from ...utils import load_json_body, invalid_char_reg, subscribe_notifications, create_audit +from ...constants import TEAM_CREATED + +from ... import db +from ...auth import login_required + +constraints = { + 'name': '`team`.`name` = %s', + 'name__eq': '`team`.`name` = %s', + 'name__contains': '`team`.`name` LIKE CONCAT("%%", %s, "%%")', + 'name__startswith': '`team`.`name` LIKE CONCAT(%s, "%%")', + 'name__endswith': '`team`.`name` LIKE CONCAT("%%", %s)', + 'id': '`team`.`id` = %s', + 'id__eq': '`team`.`id` = %s', + 'active': '`team`.`active` = %s' +} + + +def on_get(req, resp): + query = 'SELECT `name`, `email`, `slack_channel`, `scheduling_timezone` FROM `team`' + if 'active' not in req.params: + req.params['active'] = True + + connection = db.connect() + cursor = connection.cursor() + keys = [] + query_values = [] + for key in req.params: + value = req.get_param(key) + if key in constraints: + keys.append(key) + query_values.append(value) + where_query = ' AND '.join(constraints[key]for key in keys) + if where_query: + query = '%s WHERE %s' % (query, where_query) + + cursor.execute(query, query_values) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = json_dumps(data) + + +@login_required +def on_post(req, resp): + if 'user' not in req.context: + # ban API auth because we don't know who to set as team admin + raise HTTPBadRequest('invalid login', 'API key auth is not allowed for team creation') + + data = load_json_body(req) + if not data.get('name'): + raise HTTPBadRequest('', 'name attribute missing from request') + if not data.get('scheduling_timezone'): + raise HTTPBadRequest('', 'scheduling_timezone attribute missing from request') + team_name = unquote(data['name']) + invalid_char = invalid_char_reg.search(team_name) + if invalid_char: + raise HTTPBadRequest('invalid team name', + 'team name contains invalid character "%s"' % invalid_char.group()) + + scheduling_timezone = unquote(data['scheduling_timezone']) + slack = data.get('slack_channel') + if slack and slack[0] != '#': + raise HTTPBadRequest('invalid slack channel', + 'slack channel name needs to start with #') + email = data.get('email') + + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute(''' + INSERT INTO `team` (`name`, `slack_channel`, `email`, `scheduling_timezone`) + VALUES (%s, %s, %s, %s)''', (team_name, slack, email, scheduling_timezone)) + team_id = cursor.lastrowid + query = ''' + INSERT INTO `team_user` (`team_id`, `user_id`) + VALUES (%s, (SELECT `id` FROM `user` WHERE `name` = %s))''' + cursor.execute(query, (team_id, req.context['user'])) + query = ''' + INSERT INTO `team_admin` (`team_id`, `user_id`) + VALUES (%s, (SELECT `id` FROM `user` WHERE `name` = %s))''' + cursor.execute(query, (team_id, req.context['user'])) + subscribe_notifications(team_name, req.context['user'], cursor) + create_audit({'team_id': team_id}, data['name'], TEAM_CREATED, req, cursor) + connection.commit() + except db.IntegrityError: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'team name "%s" already exists' % team_name) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 diff --git a/src/oncall/api/v0/upcoming_shifts.py b/src/oncall/api/v0/upcoming_shifts.py new file mode 100644 index 0000000..a546f2a --- /dev/null +++ b/src/oncall/api/v0/upcoming_shifts.py @@ -0,0 +1,35 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ... import db +from .events import all_columns +from ujson import dumps as json_dumps + + +def on_get(req, resp, user_name): + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + role = req.get_param('role', None) + limit = req.get_param_as_int('limit', None) + query_end = ' ORDER BY `event`.`start` ASC' + query = '''SELECT %s, (SELECT COUNT(*) FROM `event` `counter` + WHERE `counter`.`link_id` = `event`.`link_id`) AS num_events + FROM `event` + JOIN `user` ON `user`.`id` = `event`.`user_id` + JOIN `team` ON `team`.`id` = `event`.`team_id` + JOIN `role` ON `role`.`id` = `event`.`role_id` + LEFT JOIN `event` `e2` ON `event`.link_id = `e2`.`link_id` AND `e2`.`start` < `event`.`start` + WHERE `user`.`id` = (SELECT `id` FROM `user` WHERE `name` = %%s) + AND `event`.`start` > UNIX_TIMESTAMP() + AND `e2`.`start` IS NULL''' % all_columns + + query_params = [user_name] + if role: + query_end = ' AND `role`.`name` = %s' + query_end + query_params.append(role) + if limit: + query_end += ' LIMIT %s' + query_params.append(limit) + cursor.execute(query + query_end, query_params) + data = cursor.fetchall() + resp.body = json_dumps(data) diff --git a/src/oncall/api/v0/user.py b/src/oncall/api/v0/user.py new file mode 100644 index 0000000..38f57f4 --- /dev/null +++ b/src/oncall/api/v0/user.py @@ -0,0 +1,84 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound, HTTP_204, HTTPBadRequest +from ujson import dumps as json_dumps +from ... import db +from ...auth import login_required, check_user_auth +from ...utils import load_json_body +from .users import columns, get_user_data + + +def on_get(req, resp, user_name): + """ + Get user info by name + """ + # Format request to filter query on user name + req.params['name'] = user_name + data = get_user_data(req.get_param_as_list('fields'), req.params) + if not data: + raise HTTPNotFound() + resp.body = json_dumps(data[0]) + + +@login_required +def on_delete(req, resp, user_name): + """ + Delete user by name + """ + check_user_auth(user_name, req) + connection = db.connect() + cursor = connection.cursor() + cursor.execute('DELETE FROM `user` WHERE `name`=%s', user_name) + connection.commit() + cursor.close() + connection.close() + + +@login_required +def on_put(req, resp, user_name): + """ + Update user info + """ + contacts_query = '''INSERT INTO user_contact (`user_id`, `mode_id`, `destination`) VALUES + ((SELECT `id` FROM `user` WHERE `name` = %(user)s), + (SELECT `id` FROM `contact_mode` WHERE `name` = %(mode)s), + %(destination)s) + ''' + check_user_auth(user_name, req) + data = load_json_body(req) + + set_contacts = False + set_columns = [] + for field in data: + if field == 'contacts': + set_contacts = True + elif field in columns: + set_columns.append('`{0}` = %s'.format(field)) + set_clause = ', '.join(set_columns) + + connection = db.connect() + cursor = connection.cursor() + if set_clause: + query = 'UPDATE `user` SET {0} WHERE `name` = %s'.format(set_clause) + query_data = tuple(data[field] for field in data) + (user_name,) + + cursor.execute(query, query_data) + if cursor.rowcount != 1: + cursor.close() + connection.close() + raise HTTPBadRequest('No User Found', 'no user exists with given name') + + if set_contacts: + contacts = [] + for mode, dest in data['contacts'].iteritems(): + contact = {} + contact['mode'] = mode + contact['destination'] = dest + contact['user'] = user_name + contacts.append(contact) + cursor.executemany(contacts_query, contacts) + connection.commit() + cursor.close() + connection.close() + resp.status = HTTP_204 diff --git a/src/oncall/api/v0/user_notification.py b/src/oncall/api/v0/user_notification.py new file mode 100644 index 0000000..65cef38 --- /dev/null +++ b/src/oncall/api/v0/user_notification.py @@ -0,0 +1,90 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound, HTTPBadRequest +from ... import db +from ...auth import login_required, check_user_auth +from ...utils import load_json_body + +columns = {'team': '`team_id` = (SELECT `id` FROM `team` WHERE `name` = %s)', + 'mode': '`mode_id` = (SELECT `id` FROM `contact_mode` WHERE `name` = %s)', + 'type': '`type_id` = (SELECT `id` FROM `notification_type` WHERE `name` = %s)', + 'time_before': '`time_before` = %s', + 'only_if_involved': '`only_if_involved` = %s'} + + +@login_required +def on_delete(req, resp, notification_id): + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute('SELECT `user`.`name` FROM `notification_setting` ' + 'JOIN `user` ON `notification_setting`.`user_id` = `user`.`id` ' + 'WHERE `notification_setting`.`id` = %s', notification_id) + username = cursor.fetchone()[0] + check_user_auth(username, req) + cursor.execute('DELETE FROM notification_setting WHERE `id` = %s', notification_id) + num_deleted = cursor.rowcount + except: + raise + else: + connection.commit() + finally: + cursor.close() + connection.close() + if num_deleted != 1: + raise HTTPNotFound() + + +@login_required +def on_put(req, resp, notification_id): + data = load_json_body(req) + params = data.keys() + roles = data.pop('roles') + + cols = [columns[c] for c in data if c in columns] + query_params = [data[c] for c in params if c in columns] + query = 'UPDATE notification_setting SET %s WHERE id = %%s' % ', '.join(cols) + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + try: + notification_type = data.get('type') + cursor.execute('''SELECT `is_reminder`, `time_before`, `only_if_involved` FROM `notification_setting` + JOIN `notification_type` ON `notification_setting`.`type_id` = `notification_type`.`id` + WHERE `notification_setting`.`id` = %s''', notification_id) + current_setting = cursor.fetchone() + is_reminder = current_setting['is_reminder'] + if notification_type: + cursor.execute('SELECT is_reminder FROM notification_type WHERE name = %s', notification_type) + is_reminder = cursor.fetchone()['is_reminder'] + time_before = data.get('time_before', current_setting['time_before']) + only_if_involved = data.get('only_if_involved', current_setting['only_if_involved']) + + if is_reminder and only_if_involved is not None: + raise HTTPBadRequest('invalid setting update', + 'reminder setting must define only time_before') + elif not is_reminder and time_before is not None: + raise HTTPBadRequest('invalid setting update', + 'notification setting must define only only_if_involved') + + if cols: + cursor.execute('SELECT `user`.`name` FROM `notification_setting` ' + 'JOIN `user` ON `notification_setting`.`user_id` = `user`.`id` ' + 'WHERE `notification_setting`.`id` = %s', notification_id) + username = cursor.fetchone()['name'] + check_user_auth(username, req) + cursor.execute(query, query_params + [notification_id]) + if roles: + cursor.execute('DELETE FROM `setting_role` WHERE `setting_id` = %s', notification_id) + query_vals = ', '.join(['(%s, (SELECT `id` FROM `role` WHERE `name` = %%s))' + % notification_id] * len(roles)) + cursor.execute('INSERT INTO `setting_role`(`setting_id`, `role_id`) VALUES ' + query_vals, + roles) + except: + raise + else: + connection.commit() + finally: + cursor.close() + connection.close() diff --git a/src/oncall/api/v0/user_notifications.py b/src/oncall/api/v0/user_notifications.py new file mode 100644 index 0000000..ade6ac5 --- /dev/null +++ b/src/oncall/api/v0/user_notifications.py @@ -0,0 +1,104 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPBadRequest, HTTP_201 +from ujson import dumps as json_dumps +from ... import db +from ...auth import login_required, check_user_auth +from ...utils import load_json_body + +required_params = {'team', 'roles', 'mode', 'type'} +other_params = {'time_before', 'only_if_involved'} +all_params = required_params | other_params + + +def on_get(req, resp, user_name): + query = '''SELECT `team`.`name` AS `team`, `role`.`name` AS `role`, `contact_mode`.`name` AS `mode`, + `notification_type`.`name` AS `type`, `notification_setting`.`time_before`, + `notification_setting`.`only_if_involved`, `notification_setting`.`id` + FROM `notification_setting` JOIN `user` ON `notification_setting`.`user_id` = `user`.`id` + JOIN `team` ON `notification_setting`.`team_id` = `team`.`id` + JOIN `contact_mode` ON `notification_setting`.`mode_id` = `contact_mode`.`id` + JOIN `notification_type` ON `notification_setting`.`type_id` = `notification_type`.`id` + JOIN `setting_role` ON `notification_setting`.`id` = `setting_role`.`setting_id` + JOIN `role` ON `setting_role`.`role_id` = `role`.`id` + WHERE `user`.`name` = %s''' + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(query, user_name) + data = {} + # Format roles + for row in cursor: + setting_id = row['id'] + if setting_id not in data: + role = row.pop('role') + row['roles'] = [role] + data[setting_id] = row + else: + data[setting_id]['roles'].append(row['role']) + + cursor.close() + connection.close() + resp.body = json_dumps(data.values()) + + +@login_required +def on_post(req, resp, user_name): + check_user_auth(user_name, req) + data = load_json_body(req) + + params = set(data.keys()) + missing_params = required_params - params + if missing_params: + raise HTTPBadRequest('invalid notification setting', + 'missing required parameters: %s' % ', '.join(missing_params)) + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT is_reminder FROM notification_type WHERE name = %s', data['type']) + + # Validation checks: notification type must exist + # only one of time_before and only_if_involved can be defined + # reminder notifications must define time_before + # other notifications must define only_if_involved + if cursor.rowcount != 1: + raise HTTPBadRequest('invalid notification setting', + 'notification type %s does not exist' % data['type']) + is_reminder = cursor.fetchone()[0] + extra_cols = params & other_params + if len(extra_cols) != 1: + raise HTTPBadRequest('invalid notification setting', + 'settings must define exactly one of %s' % other_params) + extra_col = next(iter(extra_cols)) + if is_reminder and extra_col != 'time_before': + raise HTTPBadRequest('invalid notification setting', + 'reminder setting must define time_before') + elif not is_reminder and extra_col != 'only_if_involved': + raise HTTPBadRequest('invalid notification setting', + 'notification setting must define only_if_involved') + + roles = data.pop('roles') + data['user'] = user_name + + query = '''INSERT INTO `notification_setting` (`user_id`, `team_id`, `mode_id`, `type_id`, {0}) + VALUES ((SELECT `id` FROM `user` WHERE `name`= %(user)s), + (SELECT `id` FROM `team` WHERE `name` = %(team)s), + (SELECT `id` FROM `contact_mode` WHERE `name` = %(mode)s), + (SELECT `id` FROM `notification_type` WHERE `name` = %(type)s), + %({0})s)'''.format(extra_col) + + cursor.execute(query, data) + if cursor.rowcount != 1: + raise HTTPBadRequest('invalid request', 'unable to create notification with provided settings') + setting_id = cursor.lastrowid + + query_vals = ', '.join(['(%d, (SELECT `id` FROM `role` WHERE `name` = %%s))' % setting_id] * len(roles)) + + try: + cursor.execute('INSERT INTO `setting_role`(`setting_id`, `role_id`) VALUES ' + query_vals, roles) + except db.IntegrityError: + raise HTTPBadRequest('invalid request', 'unable to create notification: invalid roles') + connection.commit() + cursor.close() + connection.close() + resp.body = json_dumps({'id': setting_id}) + resp.status = HTTP_201 diff --git a/src/oncall/api/v0/user_teams.py b/src/oncall/api/v0/user_teams.py new file mode 100644 index 0000000..b3bf44b --- /dev/null +++ b/src/oncall/api/v0/user_teams.py @@ -0,0 +1,25 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from ujson import dumps +from ... import db +from falcon import HTTPNotFound + + +def on_get(req, resp, user_name): + """ + Get active teams by user name + """ + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT `id` FROM `user` WHERE `name` = %s', user_name) + if cursor.rowcount < 1: + raise HTTPNotFound() + user_id = cursor.fetchone()[0] + cursor.execute('''SELECT `team`.`name` FROM `team` + JOIN `team_user` ON `team_user`.`team_id` = `team`.`id` + WHERE `team_user`.`user_id` = %s AND `team`.`active` = TRUE''', user_id) + data = [r[0] for r in cursor] + cursor.close() + connection.close() + resp.body = dumps(data) diff --git a/src/oncall/api/v0/users.py b/src/oncall/api/v0/users.py new file mode 100644 index 0000000..a73e097 --- /dev/null +++ b/src/oncall/api/v0/users.py @@ -0,0 +1,138 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPError, HTTPBadRequest, HTTP_201 +from ujson import dumps as json_dumps +from ... import db +from ... import auth +from ...utils import load_json_body + + +JOIN_CONTACT_TABLES = (' LEFT JOIN `user_contact` ON `user`.`id` = `user_contact`.`user_id`' + ' LEFT JOIN `contact_mode` ON `user_contact`.`mode_id` = `contact_mode`.`id`') + +columns = { + 'id': '`user`.`id` as `id`', + 'name': '`user`.`name` as `name`', + 'full_name': '`user`.`full_name` as `full_name`', + 'time_zone': '`user`.`time_zone` as `time_zone`', + 'photo_url': '`user`.`photo_url` as `photo_url`', + 'contacts': ('`contact_mode`.`name` AS `mode`, ' + '`user_contact`.`destination` AS `destination`, ' + '`user`.`id` AS `contact_id`'), + 'active': '`user`.`active` as `active`', +} + +all_columns = ', '.join(columns.values()) + +constraints = { + 'id': '`user`.`id` = %s', + 'id__eq': '`user`.`id` = %s', + 'id__ne': '`user`.`id` != %s', + 'id__lt': '`user`.`id` < %s', + 'id__le': '`user`.`id` <= %s', + 'id__gt': '`user`.`id` > %s', + 'id__ge': '`user`.`id` >= %s', + 'name': '`user`.`name` = %s', + 'name__eq': '`user`.`name` = %s', + 'name__contains': '`user`.`name` LIKE CONCAT("%%", %s, "%%")', + 'name__startswith': '`user`.`name` LIKE CONCAT(%s, "%%")', + 'name__endswith': '`user`.`name` LIKE CONCAT("%%", %s)', + 'full_name': '`user`.`full_name` = %s', + 'full_name__eq': '`user`.`full_name` = %s', + 'full_name__contains': '`user`.`full_name` LIKE CONCAT("%%", %s, "%%")', + 'full_name__startswith': '`user`.`full_name` LIKE CONCAT(%s, "%%")', + 'full_name__endswith': '`user`.`full_name` LIKE CONCAT("%%", %s)', + 'active': '`user`.`active` = %s' +} + + +def get_user_data(fields, filter_params, dbinfo=None): + """ + Get user data for a request + """ + contacts = False + from_clause = '`user`' + + if fields: + if 'contacts' in fields: + from_clause += JOIN_CONTACT_TABLES + contacts = True + + if any(f not in columns for f in fields): + raise HTTPBadRequest('Bad fields', 'One or more invalid fields') + + fields = map(columns.__getitem__, fields) + cols = ', '.join(fields) + else: + from_clause += JOIN_CONTACT_TABLES + cols = all_columns + contacts = True + + connection_opened = False + if dbinfo is None: + connection = db.connect() + connection_opened = True + cursor = connection.cursor(db.DictCursor) + else: + connection, cursor = dbinfo + + where = ' AND '.join(constraints[key] % connection.escape(value) + for key, value in filter_params.iteritems() + if key in constraints) + query = 'SELECT %s FROM %s' % (cols, from_clause) + if where: + query = '%s WHERE %s' % (query, where) + + cursor.execute(query) + data = cursor.fetchall() + if connection_opened: + cursor.close() + connection.close() + + # Format contact info + if contacts: + # end result accumulator + ret = {} + for row in data: + user_id = row.pop('contact_id') + # add data row into accumulator only if not already there + if user_id not in ret: + ret[user_id] = row + ret[user_id]['contacts'] = {} + mode = row.pop('mode') + if not mode: + continue + dest = row.pop('destination') + ret[user_id]['contacts'][mode] = dest + data = ret.values() + return data + + +def on_get(req, resp): + """ + Search users + """ + resp.body = json_dumps(get_user_data(req.get_param_as_list('fields'), req.params)) + + +@auth.debug_only +def on_post(req, resp): + """ + Create user + """ + data = load_json_body(req) + connection = db.connect() + cursor = connection.cursor() + try: + cursor.execute('INSERT INTO `user` (`name`) VALUES (%(name)s)', data) + connection.commit() + except db.IntegrityError: + raise HTTPError('422 Unprocessable Entity', + 'IntegrityError', + 'user name "%(name)s" already exists' % data) + finally: + cursor.close() + connection.close() + + resp.status = HTTP_201 diff --git a/src/oncall/app.py b/src/oncall/app.py new file mode 100644 index 0000000..88f5698 --- /dev/null +++ b/src/oncall/app.py @@ -0,0 +1,136 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +from urllib import unquote_plus +from importlib import import_module + +import falcon +import re +from beaker.middleware import SessionMiddleware +from falcon_cors import CORS + +from . import db, constants + +import logging +logger = logging.getLogger('oncall.app') + +security_headers = [ + ('X-Frame-Options', 'SAMEORIGIN'), + ('X-Content-Type-Options', 'nosniff'), + ('X-XSS-Protection', '1; mode=block'), + ('Strict-Transport-Security', 'max-age=31536000; includeSubDomains'), +] + + +def json_error_serializer(req, resp, exception): + resp.body = exception.to_json() + resp.content_type = 'application/json' + + +class SecurityHeaderMiddleware(object): + def process_request(self, req, resp): + resp.set_headers(security_headers) + + +class ReqBodyMiddleware(object): + ''' + Falcon's req object has a stream that we read to obtain the post body. However, we can only read this once, and + we often need the post body twice (once for authentication and once in the handler method). To avoid this + problem, we read the post body into the request context and access it from there. + + IMPORTANT NOTE: Because we use stream.read() here, all other uses of this method will return '', not the post body. + ''' + + def process_request(self, req, resp): + req.context['body'] = req.stream.read() + + +application = None + + +def init_falcon_api(config): + global application + cors = CORS(allow_origins_list=config.get('allow_origins_list', [])) + application = falcon.API(middleware=[ + SecurityHeaderMiddleware(), + ReqBodyMiddleware(), + cors.middleware + ]) + application.req_options.auto_parse_form_urlencoded = False + application.set_error_serializer(json_error_serializer) + from .auth import init as init_auth + init_auth(application, config['auth']) + + from .ui import init as init_ui + init_ui(application, config) + + from .api import init as init_api + init_api(application, config) + + from .healthcheck import init as init_hc + init_hc(application, config) + + for hook in config.get('post_init_hook', []): + try: + logger.debug('loading post init hook <%s>', hook) + getattr(import_module(hook), 'init')(application, config) + except: + logger.exception('Failed loading post init hook <%s>', hook) + + return application + + +class RawPathPatcher(object): + slash_re = re.compile(r'%2[Ff]') + + def __init__(self, app): + self.app = app + + def __call__(self, env, start_response): + """ + Patch PATH_INFO wsgi variable so that '/api/v0/teams/foo%2Fbar' is not + treated as '/api/v0/teams/foo/bar' + + List of extensions for raw URI: + * REQUEST_URI (uwsgi) + * RAW_URI (gunicorn) + """ + raw_path = env.get('REQUEST_URI', env.get('RAW_URI')).split('?', 1)[0] + env['PATH_INFO'] = unquote_plus(self.slash_re.sub('%252F', raw_path)) + return self.app(env, start_response) + + +def init(config): + logging.basicConfig(level=logging.INFO) + db.init(config['db']) + constants.init(config) + init_falcon_api(config) + + global application + session_opts = { + 'session.type': 'cookie', + 'session.cookie_expires': True, + 'session.key': 'oncall-auth', + 'session.encrypt_key': config['session']['encrypt_key'], + 'session.validate_key': config['session']['sign_key'], + 'session.secure': not config.get('debug', False), + 'session.httponly': True + } + application = SessionMiddleware(application, session_opts) + application = RawPathPatcher(application) + + if not config.get('debug', False): + security_headers.append( + ('Content-Security-Policy', + # unsafe-eval is required for handlebars without precompiled templates + 'default-src \'self\' \'unsafe-eval\'; font-src \'self\' data: blob; img-src data:' + ' uri https: http:; style-src \'unsafe-inline\' https: http:;')) + + +def get_wsgi_app(): + import sys + from . import utils + init(utils.read_config(sys.argv[1])) + return application diff --git a/src/oncall/auth/__init__.py b/src/oncall/auth/__init__.py new file mode 100644 index 0000000..83504d7 --- /dev/null +++ b/src/oncall/auth/__init__.py @@ -0,0 +1,263 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +import logging +import time +import hmac +import hashlib +import base64 +from streql import equals +import importlib +from falcon import HTTPUnauthorized, HTTPForbidden, Request +from .. import db + +logger = logging.getLogger('oncall.auth') +auth_manager = None +app_key_cache = {} + + +def debug_only(function): + def wrapper(*args, **kwargs): + raise HTTPForbidden('', 'Admin only action') + return wrapper + + +def is_god(challenger): + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT `id` FROM `user` WHERE `god` = TRUE AND `name` = %s', challenger) + is_god = cursor.rowcount + cursor.close() + connection.close() + return is_god != 0 + + +def check_user_auth(user, req): + """ + Check to see if current user is user or admin of team where user is in + """ + if 'app' in req.context: + return + challenger = req.context['user'] + if user == challenger: + return + connection = db.connect() + cursor = connection.cursor() + get_allowed_query = '''SELECT DISTINCT(`user`.`name`) + FROM `team_admin` + JOIN `team_user` ON `team_admin`.`team_id` = `team_user`.`team_id` + JOIN `user` ON `user`.`id` = `team_user`.`user_id` + JOIN `user` AS `admin` ON `admin`.`id` = `team_admin`.`user_id` + WHERE `admin`.`name` = %s''' + cursor.execute(get_allowed_query, challenger) + allowed = (user,) in cursor + cursor.close() + connection.close() + if allowed or is_god(challenger): + return + raise HTTPForbidden('Unauthorized', 'Action not allowed for "%s"' % challenger) + + +def check_team_auth(team, req): + """ + Check to see if the current user is admin of the team + """ + if 'app' in req.context: + return + challenger = req.context['user'] + connection = db.connect() + cursor = connection.cursor() + get_allowed_query = '''SELECT `team`.`name` + FROM `team_admin` + JOIN `team` ON `team_admin`.`team_id` = `team`.`id` + JOIN `user` ON `team_admin`.`user_id` = `user`.`id` + WHERE `user`.`name` = %s''' + cursor.execute(get_allowed_query, challenger) + allowed = (team,) in cursor + cursor.close() + connection.close() + if allowed or is_god(challenger): + return + raise HTTPForbidden( + 'Unauthorized', + 'Action not allowed: "%s" is not an admin for "%s"' % (challenger, team)) + + +def check_calendar_auth(team, req, user=None): + if 'app' in req.context: + return + challenger = user if (user is not None) else req.context['user'] + connection = db.connect() + cursor = connection.cursor() + cursor.execute('''SELECT `user`.`name` + FROM `team_user` + JOIN `user` ON `team_user`.`user_id` = `user`.`id` + WHERE `team_user`.`team_id` = (SELECT `id` FROM `team` WHERE `name` = %s) + AND `user`.`name` = %s''', (team, challenger)) + user_in_team = cursor.rowcount + cursor.close() + connection.close() + if user_in_team != 0 or is_god(challenger): + return + raise HTTPForbidden('Unauthorized', 'Action not allowed: "%s" is not part of "%s"' % (challenger, team)) + + +def check_calendar_auth_by_id(team_id, req): + if 'app' in req.context: + return + challenger = req.context['user'] + query = '''SELECT `user`.`name` + FROM `team_user` + JOIN `user` ON `team_user`.`user_id` = `user`.`id` + WHERE `team_user`.`team_id` = %s + AND `user`.`name` = %s''' + connection = db.connect() + cursor = connection.cursor() + cursor.execute(query, (team_id, challenger)) + user_in_team = cursor.rowcount + cursor.close() + connection.close() + if user_in_team != 0 or is_god(challenger): + return + raise HTTPForbidden('Unauthorized', 'Action not allowed: "%s" is not a team member' % (challenger)) + + +def is_client_digest_valid(client_digest, api_key, window, method, path, body): + text = '%s %s %s %s' % (window, method, path, body) + HMAC = hmac.new(api_key, text, hashlib.sha512) + digest = base64.urlsafe_b64encode(HMAC.digest()) + if equals(client_digest, digest): + return True + return False + + +def authenticate_application(auth_token, req): + if not auth_token.startswith('hmac '): + raise HTTPUnauthorized('Authentication failure', 'Invalid digest format', '') + method = req.method + path = req.env['PATH_INFO'] + qs = req.env['QUERY_STRING'] + if qs: + path = path + '?' + qs + body = req.context['body'] + try: + app_name, client_digest = auth_token[5:].split(':', 1) + if app_name not in app_key_cache: + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT `key` FROM `application` WHERE `name` = %s', app_name) + if cursor.rowcount > 0: + app_key_cache[app_name] = cursor.fetchone()[0] + cursor.close() + connection.close() + else: + cursor.close() + connection.close() + raise HTTPUnauthorized('Authentication failure', 'Application not found', '') + api_key = str(app_key_cache[app_name]) + window = int(time.time()) // 5 + if is_client_digest_valid(client_digest, api_key, window, method, path, body): + req.context['app'] = app_name + return + elif is_client_digest_valid(client_digest, api_key, window-1, method, path, body): + req.context['app'] = app_name + return + else: + raise HTTPUnauthorized('Authentication failure', 'Wrong digest', '') + except (ValueError, KeyError): + raise HTTPUnauthorized('Authentication failure', 'Wrong digest', '') + + +def _authenticate_user(req): + session = req.env['beaker.session'] + try: + req.context['user'] = session['user'] + + connection = db.connect() + cursor = connection.cursor() + + cursor.execute('SELECT `csrf_token` FROM `session` WHERE `id` = %s', session['_id']) + if cursor.rowcount != 1: + cursor.close() + connection.close() + raise HTTPUnauthorized('Invalid Session', 'CSRF token missing', '') + + token = cursor.fetchone()[0] + if req.get_header('X-CSRF-TOKEN') != token: + cursor.close() + connection.close() + raise HTTPUnauthorized('Invalid Session', 'CSRF validation failed', '') + + cursor.close() + connection.close() + except KeyError: + raise HTTPUnauthorized('Unauthorized', 'User must be logged in', '') + + +authenticate_user = _authenticate_user + + +def login_required(function): + def wrapper(*args, **kwargs): + for i, arg in enumerate(args): + if isinstance(arg, Request): + idx = i + break + req = args[idx] + auth_token = req.get_header('AUTHORIZATION') + if auth_token: + authenticate_application(auth_token, req) + else: + authenticate_user(req) + return function(*args, **kwargs) + + return wrapper + + +def init(application, config): + global check_team_auth + global check_user_auth + global check_calendar_auth + global check_calendar_auth_by_id + global debug_only + global auth_manager + global authenticate_user + + if config.get('debug', False): + def authenticate_user_test_wrapper(req): + try: + _authenticate_user(req) + except HTTPUnauthorized: + # avoid login for e2e tests + req.context['user'] = 'test_user' + + logger.info('Auth debug turned on.') + authenticate_user = authenticate_user_test_wrapper + check_team_auth = lambda x, y: True + check_user_auth = lambda x, y: True + check_calendar_auth = lambda x, y, **kwargs: True + check_calendar_auth_by_id = lambda x, y: True + debug_only = lambda function: function + + if config.get('docs'): + # Replace login_required decorator with identity function for autodoc generation + global login_required + login_required = lambda x: x + else: + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT `name`, `key` FROM `application`') + for row in cursor: + app_key_cache[row[0]] = row[1] + cursor.close() + connection.close() + logger.debug('loaded applications: %s', app_key_cache.keys()) + + auth = importlib.import_module(config['module']) + auth_manager = getattr(auth, 'Authenticator')(config) + + from . import login, logout + application.add_route('/login', login) + application.add_route('/logout', logout) diff --git a/src/oncall/auth/login.py b/src/oncall/auth/login.py new file mode 100644 index 0000000..987f117 --- /dev/null +++ b/src/oncall/auth/login.py @@ -0,0 +1,46 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +from falcon import HTTPNotFound, HTTPUnauthorized, HTTPBadRequest +from falcon.util import uri +from oncall.api.v0.users import get_user_data +from ujson import dumps +from oncall import db +from random import SystemRandom +from . import auth_manager + + +def on_post(req, resp): + login_info = uri.parse_query_string(req.context['body']) + + user = login_info.get('username') + password = login_info.get('password') + if user is None or password is None: + raise HTTPBadRequest('Invalid login attempt', 'Missing user/password') + + if not auth_manager.authenticate(user, password): + raise HTTPUnauthorized('Authentication failure', 'bad login credentials', '') + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + data = get_user_data(None, {'name': user}, dbinfo=(connection, cursor)) + if not data: + cursor.close() + connection.close() + raise HTTPNotFound() + + session = req.env['beaker.session'] + session['user'] = user + session.save() + csrf_token = '%x' % SystemRandom().getrandbits(128) + cursor.execute('INSERT INTO `session` (`id`, `csrf_token`) VALUES (%s, %s)', + (req.env['beaker.session']['_id'], csrf_token)) + connection.commit() + cursor.close() + connection.close() + + # TODO: purge out of date csrf token + data[0]['csrf_token'] = csrf_token + resp.body = dumps(data[0]) diff --git a/src/oncall/auth/logout.py b/src/oncall/auth/logout.py new file mode 100644 index 0000000..3caa9c1 --- /dev/null +++ b/src/oncall/auth/logout.py @@ -0,0 +1,16 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from .. import db + + +def on_post(req, resp): + session = req.env['beaker.session'] + connection = db.connect() + cursor = connection.cursor() + cursor.execute('DELETE FROM `session` WHERE `id` = %s', session['_id']) + connection.commit() + cursor.close() + connection.close() + + session.delete() diff --git a/src/oncall/auth/modules/__init__.py b/src/oncall/auth/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/oncall/auth/modules/debug.py b/src/oncall/auth/modules/debug.py new file mode 100644 index 0000000..c2390af --- /dev/null +++ b/src/oncall/auth/modules/debug.py @@ -0,0 +1,10 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + + +class Authenticator(object): + def __init__(self, config): + pass + + def authenticate(self, username, password): + return True diff --git a/src/oncall/bin/__init__.py b/src/oncall/bin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/oncall/bin/build_assets.py b/src/oncall/bin/build_assets.py new file mode 100644 index 0000000..693c426 --- /dev/null +++ b/src/oncall/bin/build_assets.py @@ -0,0 +1,15 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from webassets import script +import sys + +from oncall.ui import assets_env + + +def main(): + script.main(sys.argv[1:], env=assets_env) + + +if __name__ == '__main__': + main() diff --git a/src/oncall/bin/notifier.py b/src/oncall/bin/notifier.py new file mode 100644 index 0000000..ad6fb65 --- /dev/null +++ b/src/oncall/bin/notifier.py @@ -0,0 +1,277 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +import sys +import yaml +import logging +import time +from importlib import import_module +from pytz import timezone +from ujson import loads as json_loads, dumps as json_dumps +from datetime import datetime +from gevent import queue, spawn, sleep + +from oncall import db, metrics, constants +from oncall.messengers import init_messengers, send_message + +HOUR = 60 * 60 +DAY = HOUR * 24 +WEEK = DAY * 7 + +# logging +logger = logging.getLogger() +formatter = logging.Formatter('%(asctime)s %(levelname)s %(name)s %(message)s') +ch = logging.StreamHandler(sys.stdout) +ch.setLevel(logging.DEBUG) +ch.setFormatter(formatter) +logger.setLevel(logging.INFO) + +root = logging.getLogger() +root.setLevel(logging.DEBUG) + +ch = logging.StreamHandler(sys.stdout) +ch.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +ch.setFormatter(formatter) +root.addHandler(ch) + +# queue for messages entering the system +send_queue = queue.Queue() + +default_timezone = None + + +def create_reminder(user_id, mode, send_time, context, type_name, cursor): + context = json_dumps(context) + cursor.execute('''INSERT INTO `notification_queue`(`user_id`, `send_time`, `mode_id`, `active`, `context`, `type_id`) + VALUES (%s, + %s, + (SELECT `id` FROM `contact_mode` WHERE `name` = %s), + 1, + %s, + (SELECT `id` FROM `notification_type` WHERE `name` = %s))''', + (user_id, send_time, mode, context, type_name)) + + +def timestamp_to_human_str(timestamp, tz): + dt = datetime.fromtimestamp(timestamp, timezone(tz)) + return ' '.join([dt.strftime('%Y-%m-%d %H:%M:%S'), tz]) + + +def sec_to_human_str(seconds): + if seconds % WEEK == 0: + return '%d weeks' % (seconds / WEEK) + elif seconds % DAY == 0: + return '%d days' % (seconds / DAY) + else: + return '%d hours' % (seconds / HOUR) + + +def load_config_file(config_path): + with open(config_path) as h: + config = yaml.load(h) + + if 'init_config_hook' in config: + try: + module = config['init_config_hook'] + logging.info('Bootstrapping config using %s' % module) + getattr(import_module(module), module.split('.')[-1])(config) + except ImportError: + logger.exception('Failed loading config hook %s' % module) + + return config + + +def init_notifier(config): + db.init(config['db']) + global default_timezone + default_timezone = config['notifier'].get('default_timezone', 'US/Pacific') + if config['notifier']['skipsend']: + global send_message + send_message = blackhole + + +def blackhole(msg): + logger.info('Sent message %s' % msg) + metrics.stats['message_blackhole_cnt'] += 1 + + +def mark_message_as_sent(msg_info): + connection = db.connect() + cursor = connection.cursor() + cursor.execute('UPDATE `notification_queue` SET `active` = 0, `sent` = 1 WHERE `id` = %s', + msg_info['id']) + connection.commit() + connection.close() + cursor.close() + + +def mark_message_as_unsent(msg_info): + connection = db.connect() + cursor = connection.cursor() + cursor.execute('UPDATE `notification_queue` SET `active` = 0, `sent` = 0 WHERE `id` = %s', + msg_info['id']) + connection.commit() + connection.close() + cursor.close() + + +def poll(): + query = '''SELECT `user`.`name` AS `user`, `contact_mode`.`name` AS `mode`, `notification_queue`.`send_time`, + `user`.`time_zone`,`notification_type`.`subject`, `notification_queue`.`context`, + `notification_type`.`body`, `notification_queue`.`id` + FROM `notification_queue` JOIN `user` ON `notification_queue`.`user_id` = `user`.`id` + JOIN `contact_mode` ON `notification_queue`.`mode_id` = `contact_mode`.`id` + JOIN `notification_type` ON `notification_queue`.`type_id` = `notification_type`.`id` + WHERE `notification_queue`.`active` = 1 AND `notification_queue`.`send_time` <= UNIX_TIMESTAMP()''' + logger.info('[-] start send task...') + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + cursor.execute(query) + for row in cursor: + send_queue.put(row) + cursor.close() + connection.close() + + +def worker(): + while 1: + format_and_send_message() + + +def format_and_send_message(): + msg_info = send_queue.get() + msg = {} + msg['user'] = msg_info['user'] + msg['mode'] = msg_info['mode'] + context = json_loads(msg_info['context']) + msg['subject'] = msg_info['subject'] % context + msg['body'] = msg_info['body'] % context + try: + send_message(msg) + except: + logger.exception('Failed to send message %s', msg) + mark_message_as_unsent(msg_info) + metrics.stats['message_fail_cnt'] += 1 + else: + mark_message_as_sent(msg_info) + metrics.stats['message_sent_cnt'] += 1 + + +def metrics_sender(): + while True: + metrics.emit_metrics() + sleep(60) + + +def reminder(config): + interval = config['polling_interval'] + default_timezone = config['default_timezone'] + + connection = db.connect() + cursor = connection.cursor() + cursor.execute('SELECT `last_window_end` FROM `notifier_state`') + if cursor.rowcount != 1: + window_start = int(time.time() - interval) + logger.warning('Corrupted/missing notifier state; unable to determine last window. Guessing %s', + window_start) + else: + window_start = cursor.fetchone()[0] + + cursor.close() + connection.close() + + query = ''' + SELECT `user`.`name`, `user`.`id` AS `user_id`, `time_before`, `contact_mode`.`name` AS `mode`, + `team`.`name` AS `team`, `event`.`start`, `event`.`id`, `role`.`name` AS `role`, `user`.`time_zone` + FROM `user` JOIN `notification_setting` ON `notification_setting`.`user_id` = `user`.`id` + AND `notification_setting`.`type_id` = (SELECT `id` FROM `notification_type` + WHERE `name` = %s) + JOIN `setting_role` ON `notification_setting`.`id` = `setting_role`.`setting_id` + JOIN `event` ON `event`.`start` >= `time_before` + %s AND `event`.`start` < `time_before` + %s + AND `event`.`user_id` = `user`.`id` + AND `event`.`role_id` = `setting_role`.`role_id` + AND `event`.`team_id` = `notification_setting`.`team_id` + JOIN `contact_mode` ON `notification_setting`.`mode_id` = `contact_mode`.`id` + JOIN `team` ON `event`.`team_id` = `team`.`id` + JOIN `role` ON `event`.`role_id` = `role`.`id` + LEFT JOIN `event` AS `e` ON `event`.`link_id` = `e`.`link_id` AND `e`.`start` < `event`.`start` + WHERE `e`.`id` IS NULL + ''' + + while(1): + logger.info('Reminder polling loop started') + window_end = int(time.time()) + + connection = db.connect() + cursor = connection.cursor(db.DictCursor) + + cursor.execute(query, (constants.ONCALL_REMINDER, window_start, window_end)) + notifications = cursor.fetchall() + + for row in notifications: + context = {'team': row['team'], + 'start_time': timestamp_to_human_str(row['start'], + row['time_zone'] if row['time_zone'] else default_timezone), + 'time_before': sec_to_human_str(row['time_before']), + 'role': row['role']} + create_reminder(row['user_id'], row['mode'], row['start'] - row['time_before'], + context, 'oncall_reminder', cursor) + logger.info('Created reminder with context %s for %s', context, row['name']) + + cursor.execute('UPDATE `notifier_state` SET `last_window_end` = %s', window_end) + connection.commit() + logger.info('Created reminders for window [%s, %s), sleeping for %s s', window_start, window_end, interval) + window_start = window_end + + cursor.close() + connection.close() + sleep(interval) + + +def main(): + with open(sys.argv[1], 'r') as config_file: + config = yaml.safe_load(config_file) + + init_notifier(config) + if 'metrics' in config: + metrics.init(config, 'oncall-notifier', {'message_blackhole_cnt': 0, 'message_sent_cnt': 0, 'message_fail_cnt': 0}) + spawn(metrics_sender) + else: + logger.warning('Not running with metrics') + + init_messengers(config.get('messengers', [])) + + worker_tasks = [spawn(worker) for x in xrange(100)] + spawn(reminder, config['reminder']) + + interval = 60 + + logger.info('[*] notifier bootstrapped') + while True: + runtime = int(time.time()) + logger.info('--> notifier loop started.') + poll() + + # check status for all background greenlets and respawn if necessary + bad_workers = [] + for i, task in enumerate(worker_tasks): + if not bool(task): + logger.error("worker task failed, %s", task.exception) + bad_workers.append(i) + for i in bad_workers: + worker_tasks[i] = spawn(worker) + + now = time.time() + elapsed_time = now - runtime + nap_time = max(0, interval - elapsed_time) + logger.info('--> notifier loop finished in %s seconds - sleeping %s seconds', + elapsed_time, nap_time) + sleep(nap_time) + + +if __name__ == '__main__': + main() diff --git a/src/oncall/bin/scheduler.py b/src/oncall/bin/scheduler.py new file mode 100644 index 0000000..121695c --- /dev/null +++ b/src/oncall/bin/scheduler.py @@ -0,0 +1,341 @@ +#!/usr/bin/env python + +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +# -*- coding:utf-8 -*- + +from __future__ import print_function + +import sys +import time +from oncall.utils import gen_link_id +from datetime import datetime, timedelta +from pytz import timezone, utc + +from oncall import db, utils +from oncall.api.v0.schedules import get_schedules + +import logging +logger = logging.getLogger() +handler = logging.StreamHandler() +formatter = logging.Formatter('%(asctime)s %(name)-6s %(levelname)-8s %(message)s') +handler.setFormatter(formatter) +logger.addHandler(handler) +logger.setLevel(logging.DEBUG) + +logging.getLogger('requests').setLevel(logging.WARN) + +UNIX_EPOCH = datetime(1970, 1, 1, tzinfo=utc) +SECONDS_IN_A_DAY = 24 * 60 * 60 +SECONDS_IN_A_WEEK = SECONDS_IN_A_DAY * 7 + + +def get_role_id(role_name, cursor): + cursor.execute('SELECT `id` FROM `role` WHERE `name` = %s', role_name) + role_id = cursor.fetchone()['id'] + return role_id + + +def get_schedule_last_event_end(schedule, cursor): + cursor.execute('SELECT `end` FROM `event` WHERE `schedule_id` = %r ORDER BY `end` DESC LIMIT 1', + schedule['id']) + if cursor.rowcount != 0: + return cursor.fetchone()['end'] + else: + return None + + +def get_schedule_last_epoch(schedule, cursor): + cursor.execute('SELECT `last_epoch_scheduled` FROM `schedule` WHERE `id` = %s', + schedule['id']) + if cursor.rowcount != 0: + return cursor.fetchone()['last_epoch_scheduled'] + else: + return None + + +def get_roster_user_ids(roster_id, cursor): + cursor.execute(''' + SELECT `roster_user`.`user_id` FROM `roster_user` + JOIN `user` ON `user`.`id` = `roster_user`.`user_id` + WHERE `roster_user`.`in_rotation` = 1 AND `roster_user`.`roster_id` = %r + AND `user`.`active` = TRUE''', roster_id) + return [r['user_id'] for r in cursor] + + +def get_busy_user_by_event_range(user_ids, team_id, start, end, cursor): + ''' Find which users have overlapping events for the same team in this time range''' + cursor.execute(''' + SELECT `user_id`, COUNT(`id`) as `conflict_count` FROM `event` + WHERE `user_id` in %s AND %r < `end` AND `start` < %r AND team_id = %s + GROUP BY `user_id` + ''', (user_ids, start, end, team_id)) + return [r['user_id'] for r in cursor.fetchall() if r['conflict_count'] > 0] + + +def find_least_active_user_id_by_team(user_ids, team_id, start_time, role_id, cursor): + ''' + Of the people who have been oncall before, finds those who haven't been oncall for the longest. Start + time refers to the start time of the event being created, so we don't accidentally look at future + events when determining who was oncall in the past. Done on a per-role basis, so we don't take manager + or vacation shifts into account + ''' + cursor.execute(''' + SELECT `user_id`, MAX(`end`) AS `last_end` FROM `event` + WHERE `team_id` = %s AND `user_id` IN %s AND `end` <= %s + AND `role_id` = %s + GROUP BY `user_id` + ''', (team_id, user_ids, start_time, role_id)) + if cursor.rowcount != 0: + # Grab user id with lowest last scheduled time + return min(cursor.fetchall(), key=lambda x: x['last_end'])['user_id'] + else: + return None + + +def find_new_user_in_roster(roster_id, team_id, start_time, role_id, cursor): + ''' + Return roster users who haven't been scheduled for any event on this team's calendar for this schedule's role. + Ignores events from other teams. + ''' + query = ''' + SELECT DISTINCT `user`.`id` FROM `roster_user` + JOIN `user` ON `user`.`id` = `roster_user`.`user_id` AND `roster_user`.`roster_id` = %s + LEFT JOIN `event` ON `event`.`user_id` = `user`.`id` AND `event`.`team_id` = %s AND `event`.`end` <= %s + AND `event`.`role_id` = %s + WHERE `roster_user`.`in_rotation` = 1 AND `event`.`id` IS NULL + ''' + cursor.execute(query, (roster_id, team_id, start_time, role_id)) + if cursor.rowcount != 0: + logger.debug('Found new guy') + return set(row['id'] for row in cursor) + + +def create_events(team_id, schedule_id, user_id, events, role_id, cursor): + if len(events) == 1: + [event] = events + event_args = (team_id, schedule_id, event['start'], event['end'], user_id, role_id) + logger.debug('inserting event: %s', event_args) + query = ''' + INSERT INTO `event` ( + `team_id`, `schedule_id`, `start`, `end`, `user_id`, `role_id` + ) VALUES ( + %s, %s, %s, %s, %s, %s + )''' + cursor.execute(query, event_args) + else: + link_id = gen_link_id() + for event in events: + event_args = (team_id, schedule_id, event['start'], event['end'], user_id, role_id, link_id) + logger.debug('inserting event: %s', event_args) + query = ''' + INSERT INTO `event` ( + `team_id`, `schedule_id`, `start`, `end`, `user_id`, `role_id`, `link_id` + ) VALUES ( + %s, %s, %s, %s, %s, %s, %s + )''' + cursor.execute(query, event_args) + + +def set_last_epoch(schedule_id, last_epoch, cursor): + cursor.execute('UPDATE `schedule` SET `last_epoch_scheduled` = %s WHERE `id` = %s', + (last_epoch, schedule_id)) + + +# End of DB interactions + +def weekday_from_schedule_time(schedule_time): + '''Returns 0 for Monday, 1 for Tuesday...''' + return (schedule_time / SECONDS_IN_A_DAY - 1) % 7 + + +def epoch_from_datetime(dt): + ''' + Given timezoned or naive datetime, returns a naive datetime for 00:00:00 on the + first Sunday before the given date + ''' + sunday = dt + timedelta(days=(-(dt.isoweekday() % 7))) + epoch = sunday.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) + return epoch + + +def get_closest_epoch(dt): + ''' + Given naive datetime, returns naive datetime of the closest epoch (Sunday midnight) + ''' + dt = dt.replace(tzinfo=None) + before_sunday = dt + timedelta(days=(-(dt.isoweekday() % 7))) + before = before_sunday.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) + + after_sunday = dt + timedelta(days=7 - dt.isoweekday()) + after = after_sunday.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) + + before_diff = dt - before + after_diff = after - dt + if before_diff < after_diff: + return before + else: + return after + + +def utc_from_naive_date(date, schedule): + tz = timezone(schedule['timezone']) + # Arbitrarily choose ambiguous/nonexistent dates to be in DST. Results in no gaps in a schedule given + # a consistent arbitrary choice. + date = (tz.localize(date, is_dst=1)).astimezone(utc) + td = date - UNIX_EPOCH + # Convert timedelta to seconds + return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 + + +def generate_events(schedule, schedule_events, epoch): + generated = [] + for event in schedule_events: + start = timedelta(seconds=event['start']) + epoch + # Need to calculate naive end date to correct for DST + end = timedelta(seconds=event['start'] + event['duration']) + epoch + start = utc_from_naive_date(start, schedule) + end = utc_from_naive_date(end, schedule) + generated.append({'start': start, 'end': end}) + return generated + + +def get_period_len(schedule): + ''' + Find schedule rotation period in weeks, rounded up + ''' + events = schedule['events'] + first_event = min(events, key=lambda x: x['start']) + end = max(e['start'] + e['duration'] for e in events) + period = end - first_event['start'] + return ((period + SECONDS_IN_A_WEEK - 1) / SECONDS_IN_A_WEEK) + + +def calculate_future_events(schedule, cursor, start_epoch=None): + period = get_period_len(schedule) + + # DEFINITION: + # epoch: Sunday at 00:00:00 in the schedule's local timezone. This is our point of reference when + # populating events. Why not UTC? DST. + + # Find where to start scheduling + if start_epoch is None: + last_epoch_timestamp = get_schedule_last_epoch(schedule, cursor) + + # Handle new schedules, start scheduling from current week + if last_epoch_timestamp is None: + start_dt = datetime.fromtimestamp(time.time(), utc).astimezone(timezone(schedule['timezone'])) + next_epoch = epoch_from_datetime(start_dt) + else: + # Otherwise, find the next epoch (NOTE: can't assume that last_epoch_timestamp is Sunday 00:00:00 in the + # schedule's timezone, because the scheduling timezone might have changed. Instead, find the closest + # epoch and work from there) + last_epoch_dt = datetime.fromtimestamp(last_epoch_timestamp, utc) + localized_last_epoch = last_epoch_dt.astimezone(timezone(schedule['timezone'])) + next_epoch = get_closest_epoch(localized_last_epoch) + timedelta(days=7 * period) + else: + next_epoch = start_epoch + + cutoff_date = datetime.fromtimestamp(time.time(), utc) + timedelta(days=schedule['auto_populate_threshold']) + cutoff_date = cutoff_date.replace(tzinfo=None) + future_events = [] + # Start scheduling from the next epoch + while cutoff_date > next_epoch: + epoch_events = generate_events(schedule, schedule['events'], next_epoch) + next_epoch += timedelta(days=7 * period) + if epoch_events: + future_events.append(epoch_events) + # Return future events and the last epoch events were scheduled for. + return future_events, utc_from_naive_date(next_epoch - timedelta(days=7 * period), schedule) + + +def find_least_active_available_user_id(team_id, role_id, roster_id, future_events, cursor): + # find people without conflicting events + # TODO: finer grain conflict checking + user_ids = set(get_roster_user_ids(roster_id, cursor)) + if not user_ids: + logger.info('Empty roster, skipping') + return None + logger.debug('filtering users: %s', user_ids) + start = min([e['start'] for e in future_events]) + end = max([e['end'] for e in future_events]) + for uid in get_busy_user_by_event_range(user_ids, team_id, start, end, cursor): + user_ids.remove(uid) + if not user_ids: + logger.info('All users have conflicting events, skipping...') + return None + new_user_ids = find_new_user_in_roster(roster_id, team_id, start, role_id, cursor) + available_and_new = new_user_ids & user_ids + if available_and_new: + logger.info('Picking new and available user from %s', available_and_new) + return available_and_new.pop() + + logger.debug('picking user between: %s, team: %s', user_ids, team_id) + return find_least_active_user_id_by_team(user_ids, team_id, start, role_id, cursor) + + +def main(): + config = utils.read_config(sys.argv[1]) + db.init(config['db']) + + cycle_time = config.get('scheduler_cycle_time', 3600) + + while 1: + connection = db.connect() + db_cursor = connection.cursor(db.DictCursor) + + start = time.time() + # Iterate through all teams + db_cursor.execute('SELECT id, name, scheduling_timezone FROM team WHERE active = TRUE') + teams = db_cursor.fetchall() + for team in teams: + team_id = team['id'] + # Get rosters for team + db_cursor.execute('SELECT `id`, `name` FROM `roster` WHERE `team_id` = %s', team_id) + rosters = db_cursor.fetchall() + if db_cursor.rowcount == 0: + continue + logger.info('scheduling for team: %s', team['name']) + events = [] + for roster in rosters: + roster_id = roster['id'] + # Get schedules for each roster + schedules = get_schedules({'team_id': team_id, 'roster_id': roster_id}) + for schedule in schedules: + if schedule['auto_populate_threshold'] <= 0: + continue + logger.info('\t\tschedule: %s', str(schedule['id'])) + schedule['timezone'] = team['scheduling_timezone'] + # Calculate events for schedule + future_events, last_epoch = calculate_future_events(schedule, db_cursor) + role_id = get_role_id(schedule['role'], db_cursor) + for epoch in future_events: + # Add (start_time, schedule_id, role_id, roster_id, epoch_events) to events + events.append((min([ev['start'] for ev in epoch]), schedule['id'], role_id, roster_id, epoch)) + set_last_epoch(schedule['id'], last_epoch, db_cursor) + # Create events in the db, associating a user to them + # Iterate through events in order of start time to properly assign users + for event_info in sorted(events, key=lambda x: x[0]): + _, schedule_id, role_id, roster_id, epoch = event_info + user_id = find_least_active_available_user_id(team_id, role_id, roster_id, epoch, db_cursor) + if not user_id: + logger.info('Failed to find available user') + continue + logger.info('Found user: %s', user_id) + create_events(team_id, schedule_id, user_id, epoch, role_id, db_cursor) + connection.commit() + # Sleep until next time + sleep_time = cycle_time - (time.time() - start) + if sleep_time > 0: + logger.info('Sleeping for %s seconds' % sleep_time) + time.sleep(cycle_time - (time.time() - start)) + else: + logger.info('Schedule loop took %s seconds, skipping sleep' % (time.time() - start)) + + db_cursor.close() + connection.close() + + +if __name__ == '__main__': + main() diff --git a/src/oncall/constants.py b/src/oncall/constants.py new file mode 100644 index 0000000..2a96888 --- /dev/null +++ b/src/oncall/constants.py @@ -0,0 +1,40 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +EMAIL_SUPPORT = 'email' +SMS_SUPPORT = 'sms' +CALL_SUPPORT = 'call' +IM_SUPPORT = 'im' + +ONCALL_REMINDER = 'oncall_reminder' +OFFCALL_REMINDER = 'offcall_reminder' +EVENT_CREATED = 'event_created' +EVENT_EDITED = 'event_edited' +EVENT_DELETED = 'event_deleted' +EVENT_SWAPPED = 'event_swapped' +EVENT_SUBSTITUTED = 'event_substituted' + +TEAM_CREATED = 'team_created' +TEAM_EDITED = 'team_edited' +TEAM_DELETED = 'team_deleted' +ROSTER_CREATED = 'roster_created' +ROSTER_EDITED = 'roster_edited' +ROSTER_USER_ADDED = 'roster_user_added' +ROSTER_USER_EDITED = 'roster_user_edited' +ROSTER_USER_DELETED = 'roster_user_deleted' +ROSTER_DELETED = 'roster_deleted' +ADMIN_CREATED = 'admin_created' +ADMIN_DELETED = 'admin_deleted' + +DEFAULT_ROLES = None +DEFAULT_MODES = None +DEFAULT_TIMES = None + + +def init(config): + global DEFAULT_ROLES + global DEFAULT_MODES + global DEFAULT_TIMES + DEFAULT_ROLES = config['notifications']['default_roles'] + DEFAULT_MODES = config['notifications']['default_modes'] + DEFAULT_TIMES = config['notifications']['default_times'] \ No newline at end of file diff --git a/src/oncall/db.py b/src/oncall/db.py new file mode 100644 index 0000000..a6a1db3 --- /dev/null +++ b/src/oncall/db.py @@ -0,0 +1,22 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from sqlalchemy import create_engine + +connect = None +DictCursor = None +IntegrityError = None + + +def init(config): + global connect + global DictCursor + global IntegrityError + + engine = create_engine(config['conn']['str'] % config['conn']['kwargs'], + **config['kwargs']) + dbapi = engine.dialect.dbapi + IntegrityError = dbapi.IntegrityError + + DictCursor = dbapi.cursors.DictCursor + connect = engine.raw_connection diff --git a/src/oncall/doc_helper.py b/src/oncall/doc_helper.py new file mode 100644 index 0000000..8472f2c --- /dev/null +++ b/src/oncall/doc_helper.py @@ -0,0 +1,13 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from oncall.app import init_falcon_api + +config = {'auth': {'debug': True, 'module': 'oncall.auth.modules.debug', 'docs': True}, + 'debug': True, + 'header_color': '#3a3a3a', + 'healthcheck_path': '/tmp/status', + 'index_content_setting': {'footer': ''}, + 'session': {'encrypt_key': 'abc', 'sign_key': '123'}} + +app = init_falcon_api(config) # noqa \ No newline at end of file diff --git a/src/oncall/healthcheck.py b/src/oncall/healthcheck.py new file mode 100644 index 0000000..d1539b8 --- /dev/null +++ b/src/oncall/healthcheck.py @@ -0,0 +1,34 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from falcon import HTTPNotFound + + +class HealthCheck(object): + + def __init__(self, config): + if config.get('debug') or config.get('auth').get('debug'): + self.dummy_status = 'DEBUG' + else: + self.dummy_status = None + path = config.get('healthcheck_path') + if not path: + self.dummy_status = 'BAD' + else: + self.path = path + + def on_get(self, req, resp): + if self.dummy_status: + status = self.dummy_status + else: + try: + with open(self.path) as f: + status = f.readline().strip() + except: + raise HTTPNotFound() + resp.content_type = 'text/plain' + resp.body = status + + +def init(application, config): + application.add_route('/healthcheck', HealthCheck(config)) diff --git a/src/oncall/messengers/__init__.py b/src/oncall/messengers/__init__.py new file mode 100644 index 0000000..d411740 --- /dev/null +++ b/src/oncall/messengers/__init__.py @@ -0,0 +1,40 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +from collections import defaultdict +import logging +import importlib + +logger = logging.getLogger() +_active_messengers = defaultdict(list) + + +class OncallMessengerException(Exception): + pass + + +def init_messengers(messengers): + for messenger in messengers: + if '.' in messenger['type']: + module_path = messenger['type'] + messenger['type'] = messenger['type'].split('.')[-1] + else: + module_path = 'oncall.messengers.' + messenger['type'] + + instance = getattr(importlib.import_module(module_path), messenger['type'])(messenger) + for transport in instance.supports: + _active_messengers[transport].append(instance) + + +def send_message(message): + for messenger in _active_messengers[message['mode']]: + logger.debug('Attempting %s send using messenger %s', message['mode'], messenger) + try: + return messenger.send(message) + except Exception: + logger.exception('Sending %s with messenger %s failed', message, messenger) + continue + + raise OncallMessengerException('All %s messengers failed for %s' % (message['mode'], message)) diff --git a/src/oncall/messengers/dummy.py b/src/oncall/messengers/dummy.py new file mode 100644 index 0000000..004d2bb --- /dev/null +++ b/src/oncall/messengers/dummy.py @@ -0,0 +1,14 @@ +from oncall.constants import EMAIL_SUPPORT, SMS_SUPPORT, CALL_SUPPORT +import logging + +logger = logging.getLogger('dummy_messenger') + + +class dummy(object): + supports = frozenset([EMAIL_SUPPORT, SMS_SUPPORT, CALL_SUPPORT]) + + def __init__(self, config): + pass + + def send(self, message): + logger.info('sent message %s' % message) \ No newline at end of file diff --git a/src/oncall/messengers/iris_messenger.py b/src/oncall/messengers/iris_messenger.py new file mode 100644 index 0000000..ab49437 --- /dev/null +++ b/src/oncall/messengers/iris_messenger.py @@ -0,0 +1,18 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + + +from oncall.constants import EMAIL_SUPPORT, SMS_SUPPORT, CALL_SUPPORT +from iris.client import IrisClient + + +class iris_messenger(object): + supports = frozenset([EMAIL_SUPPORT, SMS_SUPPORT, CALL_SUPPORT]) + + def __init__(self, config): + self.config = config + self.iris_client = IrisClient(config['application'], config['iris_api_key']) + + def send(self, message): + self.iris_client.notification(role='user', target=message['user'], priority=message.get('priority'), + mode=message.get('mode'), subject=message['subject'], body=message['body']) diff --git a/src/oncall/metrics/__init__.py b/src/oncall/metrics/__init__.py new file mode 100644 index 0000000..ee885b1 --- /dev/null +++ b/src/oncall/metrics/__init__.py @@ -0,0 +1,36 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from oncall.utils import import_custom_module +from collections import defaultdict +import logging +logger = logging.getLogger(__name__) + +stats_reset = {} + +# defaultdict so stats updates don't break if metrics haven't been initialized +stats = defaultdict(int) + +metrics_provider = None + + +def get_metrics_provider(config, app_name): + return import_custom_module('oncall.metrics', + config['metrics'])(config, app_name) + + +def emit_metrics(): + if metrics_provider: + metrics_provider.send_metrics(stats) + stats.update(stats_reset) + + +def init(config, app_name, default_stats): + global metrics_provider + metrics_provider = get_metrics_provider(config, app_name) + logger.info('Loaded metrics handler %s', config['metrics']) + stats_reset.update(default_stats) + stats.update(stats_reset) diff --git a/src/oncall/metrics/dummy.py b/src/oncall/metrics/dummy.py new file mode 100644 index 0000000..4f8ada7 --- /dev/null +++ b/src/oncall/metrics/dummy.py @@ -0,0 +1,16 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +import logging +logger = logging.getLogger(__name__) + + +class dummy(object): + def __init__(self, config, appname): + self.appname = appname + + def send_metrics(self, metrics): + logger.debug('sending metrics: %s', metrics) diff --git a/src/oncall/metrics/influx.py b/src/oncall/metrics/influx.py new file mode 100644 index 0000000..cfdfcd6 --- /dev/null +++ b/src/oncall/metrics/influx.py @@ -0,0 +1,55 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +# This is named 'influx' to avoid conflicting with the influxdb module + +from datetime import datetime +import logging +from influxdb import InfluxDBClient +from influxdb.exceptions import InfluxDBClientError, InfluxDBServerError +from requests.exceptions import RequestException + +logger = logging.getLogger() + + +# pip install influxdb==3.0.0 +class influx(object): + def __init__(self, config, appname): + try: + self.client = InfluxDBClient(**config['influxdb']['connect']) + self.enable_metrics = True + except KeyError: + logger.warning('Missing connect arguments for influxdb. Running with no metrics.') + self.enable_metrics = False + return + try: + self.extra_tags = config['influxdb']['tags'] + except KeyError: + self.extra_tags = {} + self.appname = appname + + def send_metrics(self, metrics): + if not self.enable_metrics: + return + now = str(datetime.now()) + payload = [] + for metric, value in metrics.iteritems(): + data = { + 'measurement': self.appname + '_' + metric, + 'tags': {}, + 'time': now, + 'fields': { + 'value': value + } + } + if self.extra_tags: + data['tags'].update(self.extra_tags) + payload.append(data) + + try: + self.client.write_points(payload) + except (RequestException, InfluxDBClientError, InfluxDBServerError): + logger.exception('Failed to send metrics to influxdb') diff --git a/src/oncall/metrics/prometheus.py b/src/oncall/metrics/prometheus.py new file mode 100644 index 0000000..4509b68 --- /dev/null +++ b/src/oncall/metrics/prometheus.py @@ -0,0 +1,42 @@ +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from prometheus_client import Gauge, start_http_server +import re +import logging + +logger = logging.getLogger() + + +# pip install prometheus_client +# Docs at https://github.com/prometheus/client_python +class prometheus(object): + def __init__(self, config, appname): + try: + port = int(config['prometheus'][appname]['server_port']) + except (ValueError, KeyError): + logger.warning('prometheus server_port not present in config. running without metrics.') + self.enable_metrics = False + return + + self.gauges = {} + + # per docs, app name in metric prefix needs to be one word + self.appname = re.sub('[^a-zA-Z0-9]+', '', appname) + + logger.info('Starting prometheus metrics web server at %s', port) + start_http_server(port) + self.enable_metrics = True + + def send_metrics(self, metrics): + if not self.enable_metrics: + return + for metric, value in metrics.iteritems(): + if metric not in self.gauges: + self.gauges[metric] = Gauge(self.appname + '_' + metric, '') + logger.info('Setting metrics gauge %s to %s', metric, value) + self.gauges[metric].set_to_current_time() + self.gauges[metric].set(value) diff --git a/src/oncall/sphinx_extension.py b/src/oncall/sphinx_extension.py new file mode 100644 index 0000000..1292dbe --- /dev/null +++ b/src/oncall/sphinx_extension.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +from __future__ import print_function + +from docutils import nodes +from docutils.statemachine import ViewList + +from sphinx.util import force_decode +from sphinx.util.compat import Directive +from sphinx.util.nodes import nested_parse_with_titles +from sphinx.util.docstrings import prepare_docstring +from sphinx.pycode import ModuleAnalyzer + +from sphinxcontrib import httpdomain +from sphinxcontrib.autohttp.common import ( + import_object as autohttp_import_object, + http_directive as autohttp_http_directive +) + + +def get_routes(app): + # deep first tree walk on routing tree + walk_queue = [node for node in app._router._roots] + while walk_queue: + curr_node = walk_queue.pop(0) + + if curr_node.method_map: + for method in curr_node.method_map: + handler = curr_node.method_map[method] + try: + if handler.__getattribute__('func_name') == 'method_not_allowed': + # method not defined for route + continue + except: + pass + yield method, curr_node.uri_template, handler + + if curr_node.children: + walk_queue = [chl_node for chl_node in curr_node.children] + walk_queue + + +class AutofalconDirective(Directive): + has_content = True + required_arguments = 1 + + def make_rst(self, section_title_set): + # print('importing falcon app %s...' % self.arguments[0]) + app = autohttp_import_object(self.arguments[0]) + for method, path, handler in get_routes(app): + docstring = handler.__doc__ + if not isinstance(docstring, unicode): + analyzer = ModuleAnalyzer.for_module(handler.__module__) + docstring = force_decode(docstring, analyzer.encoding) + if not docstring and 'include-empty-docstring' not in self.options: + continue + if not docstring: + continue + docstring = prepare_docstring(docstring) + + # generate section title if needed + if path.startswith('/api'): + section_title = '/'.join(path.split('/')[0:4]) + else: + section_title = path + if section_title not in section_title_set: + section_title_set.add(section_title) + yield section_title + yield '_' * len(section_title) + + for line in autohttp_http_directive(method, path, docstring): + yield line + + def run(self): + node = nodes.section() + node.document = self.state.document + result = ViewList() + section_title_set = set() + for line in self.make_rst(section_title_set): + result.append(line, '') + nested_parse_with_titles(self.state, result, node) + return node.children + + +def setup(app): + if 'http' not in app.domains: + httpdomain.setup(app) + app.add_directive('autofalcon', AutofalconDirective) diff --git a/src/oncall/ui/__init__.py b/src/oncall/ui/__init__.py new file mode 100644 index 0000000..8ae4288 --- /dev/null +++ b/src/oncall/ui/__init__.py @@ -0,0 +1,121 @@ +# -*- coding:utf-8 -*- + +# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license. +# See LICENSE in the project root for license information. + +from __future__ import absolute_import + +import logging +import re +from os import path, environ +from falcon import HTTPNotFound +from jinja2 import FileSystemLoader +from jinja2.environment import Environment as Jinja2Environment +from webassets import Environment as AssetsEnvironment, Bundle +from webassets.ext.jinja2 import AssetsExtension +from webassets.script import CommandLineEnvironment + +STATIC_ROOT = environ.get('STATIC_ROOT', path.abspath(path.dirname(__file__))) +assets_env = AssetsEnvironment(path.join(STATIC_ROOT, 'static'), + url='/static') + +assets_env.register('libs', Bundle( + 'js/jquery-2.1.4.min.js', 'js/handlebars.min.js', 'js/bootstrap.min.js', 'js/moment.js', 'js/moment-timezone.js', 'js/moment-tz-data.js', 'js/typeahead.js', + output='bundles/libs.js')) +assets_env.register('oncall_js', Bundle( + 'js/navigo.js', 'js/incalendar.js', 'js/oncall.js', + output='bundles/oncall.bundle.js')) +assets_env.register('css_libs', Bundle( + 'css/bootstrap.min.css', 'fonts/Source-Sans-Pro.css', + output='bundles/libs.css')) +assets_env.register('oncall_css', Bundle( + 'css/oncall.css', 'css/incalendar.css', output='bundles/oncall.css')) + +log = logging.getLogger('webassets') +log.addHandler(logging.StreamHandler()) + +jinja2_env = Jinja2Environment(extensions=[AssetsExtension], autoescape=True) +jinja2_env.loader = FileSystemLoader(path.join(STATIC_ROOT, 'templates')) +jinja2_env.assets_environment = assets_env + +_filename_ascii_strip_re = re.compile(r'[^A-Za-z0-9_.-]') + +mimes = {'.css': 'text/css', + '.jpg': 'image/jpeg', + '.js': 'text/javascript', + '.png': 'image/png', + '.svg': 'image/svg+xml', + '.ttf': 'application/octet-stream', + '.woff': 'application/font-woff'} + + +INDEX_CONTENT_SETTING = { + 'user_setting_note': '', + 'footer': '
  • Oncall © LinkedIn 2017
'.decode('utf-8'), +} + +SLACK_INSTANCE = None +HEADER_COLOR = None + + +def index(req, resp): + user = req.env.get('beaker.session', {}).get('user') + resp.content_type = 'text/html' + resp.body = jinja2_env.get_template('index.html').render( + user=user, + slack_instance=SLACK_INSTANCE, + user_setting_note=INDEX_CONTENT_SETTING['user_setting_note'], + header_color=HEADER_COLOR, + footer=INDEX_CONTENT_SETTING['footer'] + ) + + +def build_assets(): + CommandLineEnvironment(assets_env, log).build() + + +def secure_filename(filename): + for sep in path.sep, path.altsep: + if sep: + filename = filename.replace(sep, ' ') + filename = str(_filename_ascii_strip_re.sub('', '_'.join( + filename.split()))).strip('._') + return filename + + +class StaticResource(object): + def __init__(self, path): + self.path = path.lstrip('/') + + def on_get(self, req, resp, filename): + suffix = path.splitext(req.path)[1] + resp.content_type = mimes.get(suffix, 'application/octet-stream') + + filepath = path.join(STATIC_ROOT, self.path, secure_filename(filename)) + try: + resp.stream = open(filepath, 'rb') + resp.stream_len = path.getsize(filepath) + except IOError: + raise HTTPNotFound() + + +def init(application, config): + # Only build assets in debug mode. For production, assets needs to be + # handled out of band to avoid race condition between python workers. + if config.get('debug'): + build_assets() + + index_content_cfg = config.get('index_content_setting') + if index_content_cfg: + for k in index_content_cfg: + INDEX_CONTENT_SETTING[k] = index_content_cfg[k] + + global SLACK_INSTANCE + global HEADER_COLOR + SLACK_INSTANCE = config.get('slack_instance') + HEADER_COLOR = config.get('header_color', '#3a3a3a') + + application.add_sink(index, '/') + application.add_route('/static/bundles/{filename}', StaticResource('/static/bundles')) + application.add_route('/static/images/{filename}', StaticResource('/static/images')) + application.add_route('/static/fonts/{filename}', StaticResource('/static/fonts')) diff --git a/src/oncall/ui/static/css/bootstrap.min.css b/src/oncall/ui/static/css/bootstrap.min.css new file mode 100644 index 0000000..d65c66b --- /dev/null +++ b/src/oncall/ui/static/css/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 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:"\2a"}.glyphicon-plus:before{content:"\2b"}.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:thin dotted;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:thin dotted;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[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:14.33px;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:thin dotted;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,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,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,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,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,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,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,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,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,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,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,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,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-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-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-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:3;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:2;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{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{min-height:16.43px;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);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:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.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,.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,.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}} \ No newline at end of file diff --git a/src/oncall/ui/static/css/incalendar.css b/src/oncall/ui/static/css/incalendar.css new file mode 100644 index 0000000..49cfd62 --- /dev/null +++ b/src/oncall/ui/static/css/incalendar.css @@ -0,0 +1,546 @@ +/* [IN]Calendar */ + +#calendar-container { + padding: 20px; + padding-right: 21px; +} + +.inc-toolbar { + border-bottom: 1px solid #dddedf; + color: #a5a9ab; + font-weight: 100; + position: relative; + padding: 7px 0 10px 0; +} + +.inc-toolbar-title { + text-align: center; + font-size: 16px; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inc-toolbar-controls { + position: absolute; + left: 10px; + margin-top: 2px; +} + +.inc-toolbar-controls > li { + float: left; + cursor: pointer; + padding: 0 8px 10px 8px; + margin-right: 10px; + text-transform: capitalize; +} + +.inc-toolbar-controls > li.active, +.inc-toolbar-controls > li:hover { + box-shadow: inset 0 -5px 0 -2px #0092d7; +} + +.inc-controls-title { + min-width: 160px; + position: relative; + display: inline-block; +} + +.inc-toolbar .loader { + display: none; + position: absolute; + top: 0; + right: 0; +} + +.loading-events .inc-toolbar .loader { + display: inline-block; +} + +.inc-controls-prev, +.inc-controls-next { + padding: 10px; + margin: 0 10px; + line-height: 1; + cursor: pointer; +} + +.inc-controls-prev:hover, +.inc-controls-next:hover { + background: #f0f3f6; +} + +.inc-toolbar #inc-controls-today { + float: right; + padding: 0 10px; + margin: 0; +} + +.inc-calendar { + width: 100%; + table-layout: fixed; + border-collapse: collapse; + border-spacing: 0; + font-size: 1em; + color: #a5a9ab; + position: relative; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inc-calendar table { + position: relative; + table-layout: fixed; + width: 100%; + border-top: none; + border-bottom: 1px solid #ddddef; +} + +.inc-calendar th { + text-align: left; + font-weight: 100; + padding: 15px 0 7px 10px; +} + +.inc-calendar td.inc-node { + border-left: 1px solid #ddddef; + border-right: 1px solid #ddddef; + height: 100px; + padding: 0 0 0 5px; + vertical-align: top; + text-align: left; + cursor: crosshair; +} + +.inc-calendar[data-view="template"] td.inc-node { + cursor: default; +} + +.inc-calendar .inc-week-row.today td, +.inc-calendar td.inc-day.today { + background: #fff4d1; +} + +.inc-calendar .today td.current-hour { + background: #f5e79d; +} + +.inc-calendar td.inc-node:hover { + background: #f0f3f6; +} + +.inc-calendar td.inc-node.selecting { + color: #005188; + position: relative; +} + +.inc-calendar td.inc-node.selecting:after { + content: ""; + width: 101%; + height: 100%; + display: block; + position: absolute; + top: 0; + left: 0; + background: rgba(123, 185, 217, .7); + border: 1px solid rgba(123, 185, 217, .7); + z-index: 2; +} + +.inc-calendar td.inc-day-out { + background: #f0f3f6; +} + +.inc-calendar .inc-week-day { + width: 6em; + font-weight: 100; + background: #fff; +} + +.inc-calendar .inc-week-header { + padding-left: 0; +} + +.inc-calendar td.inc-week-hour { + height: 6em; +} + +/* Events */ +.inc-calendar .inc-month-row, +.inc-calendar .inc-week-row { + position: relative; +} + +.inc-calendar .inc-event { + background: #FDE3D2; + color: #6A2300; + position: absolute; + width: 100%; + height: 20px; + top: 0; + left: 0; + padding: 0 5px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border: 1px solid #F6A16C; + cursor: pointer; + transition: background-color, color .2s; +} + +.inc-calendar .inc-event[data-display="false"] { + display: none; +} + +.inc-calendar .inc-event .inc-event-date { + display: none; +} + +.inc-calendar .inc-event[data-highlighted="true"] .inc-event-date { + display: inline; +} + +.inc-calendar .inc-event[data-type="primary"] { + top: 18px; +} + +.inc-calendar .inc-event[data-type="secondary"] { + background: #E6E6FF; + color: #2C2B9D; + border-color: #B2B0FA; +} + +.inc-calendar .inc-event[data-type="shadow"] { + background: #E1E9EE; + color: #283E4A; + border-color: #ACB9C2; +} + +.inc-calendar .inc-event[data-type="manager"] { + background: #CAEDFF; + color: #003F67; + border-color: #65C3E8; +} + +.inc-calendar .inc-event[data-type="vacation"] { + background: #DCF0CB; + color: #0E4507; + border-color: #91C475; +} + +.inc-calendar .inc-event[data-type="primary"][data-force-highlighted="true"], +.inc-calendar .inc-event[data-type="primary"][data-highlighted="true"] { + background: #EF7E37; + border-color: #993A00; + color: rgba(255,255,255,.9); +} + +.inc-calendar .inc-event[data-type="manager"][data-force-highlighted="true"], +.inc-calendar .inc-event[data-type="manager"][data-highlighted="true"] { + background: #0091CA; + border-color: #006097; + color: rgba(255,255,255,.9); +} + +.inc-calendar .inc-event[data-type="secondary"][data-force-highlighted="true"], +.inc-calendar .inc-event[data-type="secondary"][data-highlighted="true"] { + background: #827BE9; + border-color: #544BC2; + color: rgba(255,255,255,.9); +} + +.inc-calendar .inc-event[data-type="shadow"][data-force-highlighted="true"], +.inc-calendar .inc-event[data-type="shadow"][data-highlighted="true"] { + background: #7A8B98; + border-color: #485D69; + color: rgba(255,255,255,.9); +} + +.inc-calendar .inc-event[data-type="vacation"][data-force-highlighted="true"], +.inc-calendar .inc-event[data-type="vacation"][data-highlighted="true"] { + background: #469A1F; + border-color: #22670F; + color: rgba(255,255,255,.9); +} + +.inc-calendar[data-selecting="true"] .inc-event { + pointer-events: none; + opacity: .5; +} + +.inc-calendar[data-view="template"] .inc-event { + cursor: default; +} + +.inc-modal { + background: #FFF; + width: 400px; + padding: 20px; + border: 1px solid #dddedf; + -webkit-box-shadow: 0 2px 6px rgba(75,75,75,0.3); + -moz-box-shadow: 0 2px 6px rgba(75,75,75,0.3); + box-shadow: 0 2px 6px rgba(75,75,75,0.3); + position: absolute; + top: 0; + z-index: 10; +} + +.inc-modal > h4 { + color: #5c5b5c; +} + +.inc-modal .divider-text { + text-align: center; + overflow: hidden; + text-transform: uppercase; + font-weight: bold; + color: #d9d9d9; + position: relative; +} + +.inc-modal .divider-text:after, +.inc-modal .divider-text:before { + border: 1px solid #d9d9d9; + width: 50%; + top: 45%; + position: absolute; + display: block; + content: ""; +} + +.inc-modal .divider-text:before { + right: 55%; + margin-right: 30px; +} + +.inc-modal .divider-text:after { + left: 55%; + margin-left: 30px; +} + +.inc-modal[data-role="primary"] .inc-event-details { + border-color: #F6A16C; +} + +.inc-modal[data-role="secondary"] .inc-event-details { + border-color: #B2B0FA; +} + +.inc-modal[data-role="shadow"] .inc-event-details { + border-color: #ACB9C2; +} + +.inc-modal[data-role="manager"] .inc-event-details { + border-color: #65C3E8; +} + +.inc-modal[data-role="vacation"] .inc-event-details { + border-color: #91C475; +} + +.inc-modal-top-actions { + float: right; + cursor: pointer; +} + +.inc-modal-actions { + border-top: 1px solid #dddedf; + text-align: right; + padding-top: 10px; + margin-top: 10px; +} + +.inc-modal-actions .error-text { + text-align: left; +} + +.inc-modal .label-col { + vertical-align: top; + width: 25%; +} + +.inc-modal .label-col.label-swap-linked { + width: 35%; + line-height: 28px; +} + +.inc-modal .label-col.label-swap-linked-to { + width: 41%; + line-height: 28px; +} + +.inc-modal .data-col { + color: rgba(0,0,0,.85); +} + +.inc-modal .input-col { + display: inline-block; + width: 75%; +} + +.inc-modal input[type="text"] { + padding: 4px 5px; + margin: 0 5px 0 0; + color: rgba(0,0,0,.85); + font-size: 14px; + line-height: 1.42857143; + 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; +} + +.inc-modal input[type="radio"], +.inc-modal input[type="checkbox"] { + margin-right: 5px; + vertical-align: top; +} + +.inc-toolbar select, +.inc-modal select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-clip: content-box; + box-sizing: border-box; + border: 1px solid rgba(0,0,0,.25); + border-radius: 4px; + -webkit-transition: box-shadow .15s; + transition: box-shadow .15s; + color: rgba(0,0,0,.85); + padding: 4px 25px 4px 5px; + width: 100%; + background: url('../images/chevron-bottom.svg') right 9px top 13px no-repeat transparent; +} + +.inc-create-event-modal .inc-event-override { + display: none; +} + +.inc-create-event-modal[data-override="true"] .inc-event-override { + display: block; +} + +.inc-event-details-modal .inc-event-details { + display: none; +} + +.inc-event-details-modal[data-mode="swap"] .inc-event-details-swap, +.inc-event-details-modal[data-mode="view"] .inc-event-details-view, +.inc-event-details-modal[data-mode="edit"] .inc-event-details-edit { + display: block; +} + +.inc-event-details-modal[data-mode="swap"] .inc-modal-swap .inc-icon, +.inc-event-details-modal[data-mode="edit"] .inc-modal-edit .inc-icon { + fill: #0084bf; +} + +.inc-event-details-modal .inc-event-details-swap { + display: none; +} + +.inc-event-details-modal[data-swap="true"] .inc-event-details-swap { + display: block; +} + +.inc-event-details { + border-top: 5px solid #dddedf; + margin-top: 10px; + padding-top: 10px; +} + +.inc-event-user { + display: none; + border-bottom: 1px solid #dddedf; + margin-bottom: 10px; + padding-bottom: 10px; +} + +.inc-event-details li { + margin-bottom: 8px; +} + +.inc-event-details .toggle-input label[for="toggle-swap-mode"] { + padding-right: 40px; +} + +.inc-event-details .label-override { + margin-top: 3px; +} + +#inc-override-event-list [data-type="primary"], +.inc-event-details-swap [data-type="primary"] { + color: #F6A16C; +} + +#inc-override-event-list [data-type="manager"], +.inc-event-details-swap [data-type="manager"] { + color: #65C3E8; +} + +#inc-override-event-list [data-type="secondary"], +.inc-event-details-swap [data-type="secondary"] { + color: #B2B0FA; +} + +#inc-override-event-list [data-type="shadow"], +.inc-event-details-swap [data-type="shadow"] { + color: #ACB9C2; +} + +#inc-override-event-list [data-type="vacation"], +.inc-event-details-swap [data-type="vacation"] { + color: #91C475; +} + +/* Read Only Overrides */ + +.inc-calendar[data-read-only="true"] .inc-edit-action { + display: none; +} + +.inc-calendar[data-read-only="true"] td.inc-node { + cursor: default; + pointer-events: none; +} + +/* Icons */ + +.inc-icon { + display: inline-block; + padding: 2px; + color: #a5a9ab; + fill: #a5a9ab; +} + +.inc-icon svg { + vertical-align: top; +} + +.inc-icon-close svg { + position: relative; + top: 3px; +} + +.inc-icon-question-circle { + position: relative; + top: 5px; + cursor: pointer; +} + +.inc-icon-question-circle:hover { + fill: #91C475; +} + + diff --git a/src/oncall/ui/static/css/oncall.css b/src/oncall/ui/static/css/oncall.css new file mode 100644 index 0000000..03dd10f --- /dev/null +++ b/src/oncall/ui/static/css/oncall.css @@ -0,0 +1,2017 @@ +/* + * Base structure + */ + +h3, h4 { + font-weight: 100; + margin: 0; + padding: 0; +} + +ul { + list-style-type: none; + padding: 0; + margin: 0; +} + +body { + font-family: "Source Sans Pro", Helvetica, Arial, sans-serif; + background: #F6F8FA; + font-weight: 400; +} + +body a { + color: #00b0e3; +} + +header { + height: 53px; + position: relative; +} + +.content-wrapper { + min-height: calc(100vh - 150px); /* 100% minus header and footer heights */ +} + +.container-fluid { + max-width: 1180px; + margin: 0 auto; +} + +.navbar { + color: #fff; + font-size: 14px; + font-weight: 200; +} + +.navbar-inverse { + border: none; +} + +nav.navbar { + border-bottom: 1px solid rgba(250, 250, 250, 0.5); + box-shadow: none; +} + +.navbar-nav li { + text-transform: uppercase; + font-size: 14px; + letter-spacing: 1px; +} + +.nav-actions { + padding: 10px 15px; +} + +.navbar-nav > li > a { + padding-top: 18px; + padding-bottom: 17px; +} + +.navbar .navbar-form { + margin: 0; +} + +.navbar .btn { + vertical-align: top; +} + +.navbar .navbar-input { + color: #333; + padding: 0 10px; + height: 32px; + border: none; + border-radius: 2px; +} + +body[data-authenticated="false"] #create-btn { + display: none; +} + +body[data-authenticated="false"] #upcoming-shifts { + display: none; +} + +body[data-authenticated="true"] .user-info-container .user-info { + cursor: pointer; +} + +body[data-authenticated="true"] .user-info-container .user-info, +body[data-authenticated="false"] .user-info-container form { + display: block; +} + +body[data-authenticated="false"] .user-info-container .user-info, +body[data-authenticated="true"] .user-info-container form { + display: none; + padding: 5px 15px; +} + +.navbar #upcoming-shifts { + cursor: pointer; +} + +.navbar #upcoming-shifts svg { + position: relative; + top: 2px; +} + +.navbar #upcoming-shifts .dropdown-menu { + counter-reset: list-counter; + padding: 10px 15px; + width: 285px; + margin-left: -50px; + right: auto; + cursor: initial; +} + +.navbar #upcoming-shifts .dropdown-menu li, +.navbar #upcoming-shifts .dropdown-menu { + color: #333; + font-size: 12px; + letter-spacing: initial; + text-transform: none; +} + +.navbar #upcoming-shifts .dropdown-menu h4 { + margin-bottom: 10px; +} + +.navbar #upcoming-shifts .dropdown-menu li { + border-bottom: 1px solid #dddedf; + margin: 5px; + padding: 5px; +} + +.navbar #upcoming-shifts .dropdown-menu li:last-child { + border-bottom: none; +} + +/*.navbar #upcoming-shifts .dropdown-menu li:before { + content: counter(list-counter); + counter-increment: list-counter; + float: left; + width: 25px; + height: 25px; + padding: 2px; + background: #e9e9e9; + text-align: center; + border-radius: 2px; + margin-left: -35px; +} +*/ +.navbar #upcoming-shifts .dropdown-menu h4 { + font-size: 18px; +} + +.navbar #upcoming-shifts .dropdown-menu p { + margin: 0; +} + +.navbar #upcoming-shift-info { + display: inline-block; + font-size: 12px; + margin-left: 10px; +} + +.navbar .upcoming-shift-role { + text-transform: capitalize; +} + +.navbar .profile-picture { + width: 35px; + height: 35px; + border-radius: 50%; + vertical-align: top; +} + +.navbar .svg-icon-chevron-down { + position: relative; + top: 12px; + margin-left: 8px; +} + +.navbar .dropdown-menu > li > a:focus, +.navbar .dropdown-menu > li > a:hover { + background: #00b0e3; + color: #fff; +} + +.navbar-nav.navbar-left .user-dashboard-link { + display: none; +} + +body[data-user] .navbar-nav.navbar-left .user-dashboard-link { + display: block; +} + +.subnav li:after, +.navbar .user-info-container[data-authenticated="true"]:after, +.navbar-nav li:after { + background: #FFF; + bottom: 0; + content: ''; + display: block; + height: 3px; + left: 50%; + position: absolute; + right: 50%; + -webkit-transition: left 334ms cubic-bezier(0.4, 0, 1, 1),right 334ms cubic-bezier(0.4, 0, 1, 1); + transition: left 334ms cubic-bezier(0.4, 0, 1, 1),right 334ms cubic-bezier(0.4, 0, 1, 1); +} + +.subnav li:hover:after, +.navbar .user-info-container[data-authenticated="true"]:hover:after, +.navbar-nav li:hover:after { + left: 5px; + right: 5px; + -webkit-transition: left 334ms cubic-bezier(0, 0, 0.2, 1),right 334ms cubic-bezier(0, 0, 0.2, 1); + transition: left 334ms cubic-bezier(0, 0, 0.2, 1),right 334ms cubic-bezier(0, 0, 0.2, 1); +} + +.navbar-inverse .navbar-brand { + letter-spacing: 2px; +} + +#logo { + margin-top: -12px; + padding: 5px; + width: 45px; +} + +.navbar-brand { + padding: 13px 9px; + font-size: 16px; + line-height: 28px; + margin-right: 50px; +} + +.navbar-inverse .navbar-nav > li > a, +.navbar-inverse .navbar-brand { + color: #fff; +} +.navbar-inverse .navbar-nav > .active > a { + box-shadow: inset 0 -5px 0 -2px #FFF; + background: none; +} + +.navbar-inverse .navbar-nav > .active > a:hover { + background: none; +} + +nav.subnav { + background: #FFF; +} + +nav.subnav li { + color: gray; + display: inline-block; + padding: 10px 13px; + font-size: 15px; + font-weight: 500; + cursor: pointer; + transition: all .3s; + position: relative; +} + +nav.subnav li:after { + background: #0084bf; +} + +nav.subnav li:hover { + color: black; +} + +nav.subnav li.active { + color: #0084bf; + box-shadow: inset 0 -5px 0 -2px #0084bf; +} + +.subheader { + padding: 20px; + height: 100px; + color: #fff; +} + +.subheader .headshot-large { + border-radius: 50%; + width: 65px; + margin: -5px 15px 0 0; + display: inline-block; +} + +.subheader .headshot-large.placeholder { + width: 65px; + height: 65px; +} + +.subheader h3 { + margin-top: 0; + letter-spacing: 1px; +} + +.subheader a { + color: #fff; +} + +.subheader a:hover { + text-decoration: underline; +} + +.main { + margin-top: 10px; +} + +.floating-module { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + margin: 0; +} + +.floating-module .module { + position: relative; + width: 250px; + height: 300px; + top: 45%; + border: none; + background: none; + margin: auto; + margin-top: -200px; +} + +/* + * Error page + */ + +.error-page { + text-align: center; +} + +.error-page .error-code { + margin: 0 0 5px 0; + font-size: 72px; + color: #f26c5f; +} + +.error-page .error-status { + font-size: 26px; + margin-bottom: 15px; + font-weight: 100; +} + +/* + * Dashboard page + */ + +.dashboard-card { + min-height: 210px; +} + +.dashboard-card-inner .subheading { + font-size: 12px; + text-transform: uppercase; + letter-spacing: 1px; +} + +/* + * Search page + */ + +.subheader.search { + text-align: center; + font-weight: 100; + height: 200px; +} + +.subheader.search h1 { + font-weight: 100; +} + +.subheader.search .search-wrapper { + margin-top: 30px; + text-align: center; +} + +.subheader.search .search-input-wrapper { + position: relative; +} + +.subheader.search .main-search .loader { + display: none; + right: 10px; + top: 7px; + position: absolute; +} + +.subheader.search .main-search.loading .loader { + display: inline-block; +} + +.subheader.search select, +.subheader.search input[type="text"], +.subheader.search button { + display: inline-block; + height: 40px; + vertical-align: top; + font-size: 18px; + font-weight: 100; + border-radius: 1px; +} + +.subheader.search select { + width: 150px; + text-transform: capitalize; + background-color: #fff; + padding: 0 15px; + text-indent: 3px; + border: 1px solid #ccc; +} + +.subheader.search input[type="text"] { + width: 600px; + padding: 10px 15px; + background: #fff; + margin: auto; + color: #333; + border-radius: 1px; +} + +.subheader.search .twitter-typeahead { + width: 600px; + color: #333; + font-size: 16px; + text-align: left; +} + +.subheader.search .twitter-typeahead h4 { + color: #a5a9ab; + margin: 5px 10px; + padding-bottom: 5px; + letter-spacing: 1px; +} + +.subheader.search .twitter-typeahead a { + color: #333; + line-height: 26px; + display: block; +} + +.subheader.search .twitter-typeahead .tt-see-all a { + color: #00b0e3; + display: block; + font-weight: bold; + margin: 0 10px; +} + +.subheader.search .twitter-typeahead .tt-menu { + border-radius: 0; + border-top: none; +} + +.subheader.search .twitter-typeahead .tt-dataset { + border-top: 2px solid #ccc; + padding-bottom: 10px; + margin-bottom: 10px; +} + +.subheader.search .twitter-typeahead .tt-dataset:empty ~ .tt-dataset, +.subheader.search .twitter-typeahead .tt-dataset:first-child { + border-top: none; + margin-bottom: 0; +} + +.subheader.search .twitter-typeahead .tt-dataset:last-child h4 { + padding-top: 5px; +} + +.subheader.search .twitter-typeahead .tt-dataset:empty { + display: none; +} + +.subheader.search .twitter-typeahead .tt-hint { + color: #b0b2b5; +} + +.subheader.search .tt-cursor a, +.subheader.search .tt-selectable:hover a { + color: #FFF; + text-decoration: none; +} + +.subheader.search button { + width: 100px; +} + +.search-results ul { + width: 100%; + background: #fff; + border: 1px solid #dddedf; + padding: 25px; + margin: auto; +} + +.search-results h3 { + margin: 10px 0; +} + +.search-results .result { + border-bottom: 1px solid #dddedf; + background-clip: padding-box; + position: relative; + transition: background-color .2s; +} + +.search-results .result:hover { + background: #F3F6F8; +} + +.search-results .result:first-child { + border-top: 1px solid #dddedf; +} + +.search-results .result a { + display: block; + padding: 16px; +} + +.recently-viewed h3 { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid #dddedf; +} + +.module-card .recently-viewed-name { + width: calc(100% - 60px); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; + line-height: 20px; +} + +/*.card-wrap { + -webkit-columns: 3; + -moz-columns: 3; + -ms-columns: 3; + -o-columns: 3; + columns: 3; + clear: right; +}*/ + +.card-wrap .card-column { + width: 32%; + margin-right: 1%; + float: left; +} + +/* .card-wrap.col-2 { + -webkit-columns: 2; + -moz-columns: 2; + -ms-columns: 2; + -o-columns: 2; + columns: 2; +}*/ + +.card-wrap.col-2 .card-column { + width: 49%; + margin-right: 1%; +} + +.card-wrap-alt.col-4 { + -webkit-columns: 4; + -moz-columns: 4; + -ms-columns: 4; + -o-columns: 4; + columns: 4; +} + +.module-card { + background-color: #f9f9f9; + border-radius: 1px; + border: 1px solid #e2e2e2; + display: inline-block; + margin-top: 15px; + padding: 16px; + width: 100%; + box-sizing: border-box; + vertical-align: top; + position: relative; +} + +.module-card .remove-card-column { + position: absolute; + top: 13px; + right: 10px; +} + +.module-card-heading { + padding-bottom: 5px; + margin-bottom: 10px; +} + +.module-card-heading h4 a { + margin-top: 3px; +} + +.module-card-heading .edit-card-heading { + cursor: pointer; +} + +.module-card-heading .edit-card-heading .pencil-icon:before { + font-size: 15px; +} + +.module-card .card-inner { + position: relative; + padding: 10px 0 10px 60px; + margin-bottom: 10px; + transition: background-color .3s; +} + +.module-card .card-inner:hover { + background-color: #F3F6F8; +} + +.module-card .card-inner .remove-card-item { + position: absolute; + top: 50%; + margin-top: -12px; + right: 0; + display: none; +} + +.module-card .card-inner:hover .remove-card-item { + display: block; +} + +.module-card .card-inner-slim { + padding-left: 50px; + margin-bottom: 0; +} + +.module-card .card-inner-user { + width: 53%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + display: inline-block; +} + +.module-card .card-inner-extra { + display: none; +} + +.module-card .card-inner .svg-icon-chevron { + cursor: pointer; +} + +.module-card .card-inner[data-collapsed="false"] .svg-icon-chevron-down, +.module-card .card-inner .svg-icon-chevron-up { + display: none; +} + +.module-card .card-inner[data-collapsed="false"] .svg-icon-chevron-up, +.module-card .card-inner[data-collapsed="false"] .card-inner-extra { + display: block; +} + +.module-card .services-inner { + margin-bottom: 10px; + padding-bottom: 10px; +} + +.module-card .add-item-wrapper[data-view="button"] .add-item-form, +.module-card .add-item-wrapper[data-view="form"] .add-card-item { + display: none; +} + +.module-card .add-item-form { + padding: 0; +} + +.module-card .add-item-form input[type="text"] { + border-radius: 2px; +} + +.module-card .add-item-form .add-item-actions { + text-align: right; + margin-top: 10px; +} + +.module-card .card-picture { + width: 50px; + height: 50px; + border: 1px solid #b9b9b9; + border-radius: 50%; + margin-right: 20px; + position: absolute; + left: 0; + top: 13px; +} + +.module-card .card-picture-small { + width: 40px; + height: 40px; + border: 1px solid #b9b9b9; + border-radius: 50%; + position: absolute; + left: 0; + top: 7px; +} + +.module-card .card-content { + margin-top: 5px; + padding-top: 5px; + position: relative; +} + +.module-card .card-content li { + overflow: hidden; + text-overflow: ellipsis; +} + +.module-card a { + color: #333; +} + +.module-card .btn.card-btn { + width: 100%; + margin: 0; +} + +/* + * Teams page + */ + +.subheader .edit-team-name { + cursor: pointer; +} + +.subheader .edit-team-name .pencil-icon:before { + color: #FFF; + opacity: .8; + } + + .subheader .edit-team-name:hover .pencil-icon:before { + opacity: 1; + } + +.team-name-input { + background: none; + color: #FFF; + padding: 0; + font-size: 24px; + text-transform: uppercase; + border: none; + font-weight: 100; +} + +.subnav .timezone-display-container { + padding: 10px 13px; + color: gray; + float: right; +} + +.calendar-types label { + -webkit-user-select: none; + user-select: none; + text-transform: capitalize; + width: 70px; +} + +.calendar-types .color-swatch { + width: 12px; + height: 12px; + background: #69cded; + display: inline-block; + position: relative; + top: 2px; +} + +.calendar-types .color-swatch[data-type="primary"] { + background: #F6A16C; +} + +.calendar-types .color-swatch[data-type="secondary"] { + background: #B2B0FA; +} + +.calendar-types .color-swatch[data-type="shadow"] { + background: #ACB9C2; +} + +.calendar-types .color-swatch[data-type="manager"] { + background: #65C3E8; +} + +.calendar-types .color-swatch[data-type="vacation"] { + background: #91C475; +} + +.calendar-tip { + line-height: 28px; + margin-bottom: 30px; + text-align: center; + font-style: italic; +} + +/* Teams.info */ + +.module-card .badge.toggle-rotation { + background: white; + color: #00b0e3; + border: 1px solid #00b0e3; + cursor: pointer; + transition: border-color, background .15s; +} + +.module-card .badge.toggle-rotation:hover { + color: #0077B5; + border-color: #0077B5; + background: rgba(0,115,177,.1); +} + +.module-card .badge.toggle-rotation[data-in-rotation="false"] .active-text, +.module-card .badge.toggle-rotation .inactive-text { + display: none; +} + +.module-card .badge.toggle-rotation[data-in-rotation="false"] .inactive-text { + display: block; +} + +.module-card .badge.toggle-rotation[data-in-rotation="false"] { + border-color: rgba(0,0,0,.55); + color: rgba(0,0,0,.55); +} + +.module-card .badge.toggle-rotation[data-in-rotation="false"]:hover { + border-color: rgba(0,0,0,.85); + color: rgba(0,0,0,.85); + background: rgba(0,0,0,.1); +} + +.module-card[data-col-name="services"] .services-inner { + max-height: 490px; + overflow-y: auto; +} + +/* Teams.info non-admin state */ + +div[data-admin="true"] [data-admin-action="true"] { + display: initial; +} + +div[data-admin="false"] [data-admin-action="true"] { + display: none !important; +} + +div[data-admin="false"] .team-info .toggle-rotation { + pointer-events: none; +} + +/* Teams.schedules */ + +.schedule-container[data-collapsed="true"] .module-schedule-wrapper { + display: none; +} + +.schedule-container[data-collapsed="true"] .module-heading { + margin: 0; + padding: 0; + border: none; +} + +.schedule-container[data-collapsed="false"] .svg-icon-chevron-up, +.schedule-container[data-collapsed="true"] .svg-icon-chevron-down { + display: none; +} + +.schedule-container[data-collapsed="false"] .svg-icon-chevron-down, +.schedule-container[data-collapsed="true"] .svg-icon-chevron-up { + display: initial; +} + +.module-schedule-wrapper .timezone-display { + margin-left: .5%; +} + +.schedule-container .toggle-schedule-view { + position: relative; + top: 3px; + cursor: pointer; +} + +.module-schedule-create .form-control { + width: 230px; + display: inline-block; +} + +.module-schedule-create .schedule-details > li { + margin: 10px 0; +} + +.module-schedule-create .schedule-role { + text-transform: capitalize; +} + +.module-schedule-create .auto-populate-threshold { + width: 60px; +} + +.module-schedule-create .rotation-item { + margin: 14px 0 8px 0; +} + +.module-schedule-create .glyph { + position: relative; + top: 3px; +} + +.module-schedule-create .rotation-start-day, +.module-schedule-create .rotation-start-time { + width: 115px; +} + +.module-schedule-create .remove-rotation-item .svg-icon-close { + top: 1px; +} + +.module-schedule-create .remove-rotation-item svg { + vertical-align: baseline; + margin-left: 3px; +} + +.module-schedule-create .add-rotation-item { + cursor: pointer; +} + +.module-schedule-create .schedule-actions { + margin-top: 20px; + padding-top: 15px; + text-align: right; +} + +.module-schedule-create .border-bottom { + border-bottom: 5px solid #FDE3D2; +} + +.module-schedule-create[data-role="secondary"] .border-bottom { + border-color: #E6E6FF; +} + +.module-schedule-create[data-role="shadow"] .border-bottom { + border-color: #ACB9C2; +} + +.module-schedule-create[data-role="manager"] .border-bottom { + border-color: #CAEDFF; +} + +.module-schedule-create[data-role="director"] .border-bottom { + border-color: #FFC100; +} + +.module-schedule-create[data-role="vacation"] .border-bottom { + border-color: #91C475; +} + +.module-schedule { + width: 24%; + margin: 0 .5%; + float: left; + transition: box-shadow .15s; +} + +.module-schedule .schedule-actions { + border-top: 5px solid #FDE3D2; + padding-top: 10px; + margin-top: 10px; +} + +.module-schedule .schedule-actions > span { + cursor: pointer; + color: #000; + opacity: .3; + font-weight: bold; +} + +.module-schedule .schedule-actions > span .grey-icon { + opacity: 1; +} + +.module-schedule .schedule-actions > span:hover { + opacity: .5; +} + +.module-schedule[data-role="secondary"] .schedule-actions { + border-color: #E6E6FF; +} + +.module-schedule[data-role="shadow"] .schedule-actions { + border-color: #ACB9C2; +} + +.module-schedule[data-role="manager"] .schedule-actions { + border-color: #CAEDFF; +} + +.module-schedule[data-role="director"] .schedule-actions { + border-color: #FFC100; +} + +.module-schedule[data-role="vacation"] .schedule-actions { + border-color: #91C475; +} + +.module-schedule[data-highlighted="true"] { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.2); +} + +.module-schedule[data-role="primary"][data-highlighted="true"] .schedule-actions { + border-color: #EF7E37; +} + +.module-schedule[data-role="secondary"][data-highlighted="true"] .schedule-actions { + border-color: #827BE9; +} + +.module-schedule[data-role="shadow"][data-highlighted="true"] .schedule-actions { + border-color: #7A8B98; +} + +.module-schedule[data-role="manager"][data-highlighted="true"] .schedule-actions { + border-color: #0091CA; +} + +.module-schedule[data-role="director"][data-highlighted="true"] .schedule-actions { + border-color: #C89B1C; +} + +.module-schedule[data-role="vacation"][data-highlighted="true"] .schedule-actions { + border-color: #469A1F; +} + +.module-schedule .label-col { + width: 27%; + max-width: 110px; + vertical-align: top; +} + +.module-schedule .data-col { + text-transform: capitalize; + display: inline-block; +} + +.module-schedule .data-col.schedule-roster { + text-transform: none +} + +.module-schedule-create[data-advanced="1"] .schedule-basic, +.module-schedule-create[data-advanced="0"] .schedule-advanced { + display: none; +} + +.module-schedule-create[data-advanced="0"] .schedule-basic, +.module-schedule-create[data-advanced="1"] .schedule-advanced { + display: block; +} + +.module-schedule-create label { + min-width: 40px; + margin: 0 15px; +} + +.module-schedule-create label:first-child { + margin-left: 0; +} + +.module-schedule-create #twelve-hour { + margin: 0 0 0 15px; +} + +.module-schedule-create label[for="twelve-hour"] { + margin: 4px; + position: relative; + top: 1px; +} + +#populate-schedule-date { + width: 100px; + margin-left: 10px; + display: inline-block; +} + +#populate-schedule-threshold { + margin-left: 10px; +} + +#populate-schedule-btn { + margin-top: -1px; +} + +#modal-calendar-container { + margin-top: 10px; + padding-top: 10px; +} + +#modal-calendar-container .inc-calendar { + pointer-events: none; +} + +/* + * User settings page + */ + +#user-settings-form td:first-child { + width: 15%; +} + +#user-settings-form td { + padding: 10px 0; +} + +#user-settings-form .profile-picture { + position: relative; + display: inline-block; + border: 1px solid #dddedf; +} + +/*#user-settings-form .profile-picture:hover:after { + content: "Edit"; + display: block; + text-align: center; + position: absolute; + bottom: 0; + background: rgba(0, 0, 0, .6); + width: 100%; + height: 18px; + color: #fff; +}*/ + +#user-settings-form .profile-picture img { + width: 60px; + height: 60px; +} + +#user-settings-form input, +#user-settings-form select { + width: 20%; + max-width: 200px; + display: inline-block; +} + +#user-settings-form button { + min-width: 95px; +} + +/* + * User notifications page + */ + +.notification-create-body { + margin: 20px 0; +} + +.notification-create-body input.form-control, +.notification-create-body select.form-control { + display: inline-block; + width: 150px; + margin: 0 5px; +} + +.notification-create-body select.multi-select-initial { + margin: 0; +} + +.notification-create-body input.notification-create-time { + width: 75px; +} + +.notification-actions { + padding-top: 10px; +} + +.module-notification { + width: 24%; + margin: 0 .5%; + float: left; + transition: box-shadow .15s; +} + +.module-notification .notification-actions { + border-top: 5px solid #FDE3D2; + padding-top: 10px; + margin-top: 10px; +} + +.module-notification .notification-actions > span { + cursor: pointer; + color: #000; + opacity: .3; + font-weight: bold; +} + +.module-notification .notification-actions > span .grey-icon { + opacity: 1; +} + +.module-notification .notification-actions > span:hover { + opacity: .5; +} + +.module-notification .label-col { + width: 27%; + max-width: 110px; + vertical-align: top; +} + +.module-notification .data-col { + text-transform: capitalize; + display: inline-block; +} + +.module-notification .data-col.notification-role { + display: inline-block; + width: 167px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.module-notification .data-col.notification-roster { + text-transform: none +} + +.module-notification .notification-actions { + border-top: 5px solid #CCC; + padding-top: 10px; + margin-top: 10px; +} + +.module-notification .notification-event { + text-transform: initial; +} + +/* + * Modal + */ + +#input-modal .create-input { + width: 100%; +} + +/* + * Footer + */ + +footer { + height: 20px; + width: 100%; + text-align: center; +} + +footer li { + list-style-type: none; + display: inline-block; + border-left: 1px solid #333; + padding: 0 8px; + line-height: 1; + color: rgba(0,0,0,0.55); + font-size: 14px; +} + +footer li a { + color: rgba(0,0,0,0.55); +} + +footer li:first-child { + border-left: none; +} + +/* + * Global add-ons + */ + +.loader-li { + width: 200px; + margin: 25px auto; + position: relative; + top: 50%; +} + +.loader-li .logo { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG8AAABvCAYAAADixZ5gAAAM7klEQVR4nO2deXQTxx3Hxxcx1ATHAdLQAqGQEEgIfS3kKEehhbqhNFdpSPteSBO/ACUG0gTCFagJV6AhAZxAAgnPFj6wYgwmIb6wjf0Qxlg2tkE+sFarwytZ0mql1WmDYfsHDXWMd3YlrbReZz7v/f7b/c1vft/V7MzszAgABAKBQCAQCAQCgUAgEAgEAoFA3IVczkQpSM/01CZ6xcqL5P7EYqJwYp6ueVSOlhiagTkj0rCbIE3NSM0GH9N4Rubg5vF5OvXMAqIySWE5svsKtbaIcM83Go1DxM57wOB2e/yhVsebC8+aTg/L0jjETnS4LTpdfX3GGeL8tgZqU4vDN05sPXhRYnLNWXTOJL9HpvGJncB+Y+nYrRlniPNpanpJeTkTLbZGd/GNwbPgmTPtCtET1c9tbK5We6CZTm5rY+4RWzPQSHY9OreIKBU7KVKz8Sd0bfntnj+JIppSycRsrCW3xxxTd4mdCCnb86XGk7jdHh824TDKN+apM4YqsSs+UGzCCf01la1rcsiFKyTc8+KzcCrQQBOycXJWIVGRpDAf3lxn27rnimPNwRbH8i+aHUulZIeaHcv2XrW/vbXetnnlRXJ/YomxYGyuVhtoXoZmYM5c3PlCyITLVNOvBNJMTszTNa9TkrvOd3ifBgwTEbIA+wEqunPCXpX9ndkF7eciZVi3X7lKx25trrNtFTxHB1scy0E6dotvILEZGu86Jbmr2dr5iKCBSAgDTSekNtErRuVoCX9EXFJpThMsiEw1/Qpf4SJlWHeSwnJE7/GMEiwAiWMwGAbvaqTW+fO62Vpv2xx0wYWEex7fpjKxmCgMy4tXouB2e/zqGuvHvH4I6ditTDX9SsCFYZRvDN+nZWMtuX2gv8+EIkfr+ktcJubiyuk9Mo1PYfY+43cBSiUTw2c4EJuh8Qb1hPxIaaBcj4/P06m58jviuMbi99zoxlpyO5fjB3JwU7XVMy1E9Rvw6ByO+2acIc5z5XlmAVHJu1VrJLse5XrPxWZovEi44Gl3Ou+fcEJ/jUvAQ62ON3k55DNXGc6mMoVhIo9ec77+aqVZlqQwH87XO58Tynd5ORN9qNmx7O8VHRnLLlgPfad3/0Eo33xpojsfvi8bt8HyPSwTt7c7nfdDHX1j8Czg1TkJE3I5EzW/mCjqHUNylSU1WN8qFTOory8h4azf95SZfL/lau3eU5IfQp1wfdZJLCYKw9mrTG2iV7DFcrbdNTcY3zsaqA1s3fSLVs+vhaoDX7Y1UJtguR+SoXF3uFwj+7y5xOSaA7s5UoZ1h3sc93yp8SRbPOvryJ3B+J5T2F7G5vvDq9R7QtWBLziOx3LNj7K2CovOmeSwG5MUliNhrg+ADVdeV3QcDcb3xDxdM5vv1ZesnwhVB3/Ixl2LYRqMytEScjkT9YObcLs9HrZ0ITZD4w33lJfW43lw8imdii2mKfn6xjU1tj2BWkIWTrL5XlBi+rbO7J4qxhdvruHDKZ3zzz+44VCr403YDeuU5K6QR80wEdVWz7SNteT2x0/pr8DiCZcNydC4XywznZC10a8aaDoh5DkAABS3u38Pi2lxhen4D25YeNZ0GnZDKL8OGAyGwTsbqfU/k2vbxRYLZlEy9Y3EYqLwgsn7ZKhyAcDtodHI43gHWxzxWTh1p+mUy5ko2PK8iXm65lAEKZczUV+2Od/o76L1ZYvOmeRNdOfDocgLAAAsr7J8Biv/zpznBZP3SdiFoWgya83uJybn666KLUIwFp2uvr62htx9VwdCAEqNvtmwsnc0UBsAAPCxFEhTM1Ud3qeEDCwXd77AZ1ZdKja/mCgSehFRCsNE/lSuNbKVeee9t/IiuZ/tooRsnBRyUP5BPfm+P1/kpWKP5Olbhe4XvFRmymUrb9JJXRMAAIDEYqKQ7aJZhUSFUMGsukTuEzJhcVka1+ivtbpALTpdfV3IeO7Lxm1CCphSb9vCVlakDOtOYZhIMPGkroXtoiSF+bAQgXANRXrbz+W4PrnKkgqbBQl2qcCzZ43fsfneUEvuSG2iV8wvJor8EfmRPH2rUE1olsb1Mqwso9M5HMAWyGy5bEsJNohzRt8svgmYetpQf8bg/iNXBSJlWPcli/uXwcTF9kANkqk7VXTnhO+vM9B0whql9T9891/MLyaKhOjEnG13zYWVc4XsmgSGZmBOtgv2XHGsCSYArcfz4PBsjZWrwkMzMOfRVudrKQwT2dtHcpUltee1UTL1jf0qemUwcQEAAGCYiCWV5rTewh295ny9r8sxyjfmuVJTPh8B19aQu4MNr5FyT4GVUW70zQSwDsSBZjo5mACSFJYjXBUdl6vD6m1dj8H8nO/wPr2jgdrw0VX7v66QXZOCiak3pUbf7G0N1KZ9Kvuqnr+4PmGYiE11tm1cdYqSqW8EOw7U2H1jYWUU6N2JANZtX3rB+nmghV8huyZxLTydetpQz/mRsR9ytNX5GpeAi8pNXwdTBtc0WZnJ91swNd9wme2CsblaXKViBgVSOFcTMzIHN2OUb0wwFRQTPr/AYMbIvV8XvU1t844GSQrzYdhFKy+S+/0tuNrqmQbzGSnDuivN3hmBVqxfwDARXA9oYjFRGIjronbX72DbvUcc11gAw0SA0zrPQq4naEGJ6dtqq2ca31/h2hpyN8yfUEMQsVHbvKNhvdBIGdbtz9eIFodv3JbLthSuJRH//5bJMBGwprOnRaerrw+SqTv5XMtmg49pPANpOfyaGtueYPIB0tRMRBp2c/AxjYfPtXetaPjO4Hk22AD4WiDNcH/GQNMJ4dxk+sZ5y5d3BQGbJhPSSo2+2XySonJcX5Zv8FT5Y0bfjVls/io6fF/564/vl/S+VriFwoZl4vY+Wy2LxRIX6h2vw7M1Vr6zD9Wkb8eRay7GH9M4u1nXdJ7Se6r99Wc0MrzOU/m0yfHPUAt3byZGQ3uvuN0e/6vT+tpQBfBimekEn2RITbxGsuvRUAoXl4m5ePXOcRyP3Vpv28z3BeqPJVdbDgxE8axW69CQPfDlHXnXHJ2/4Js3AMDtbnCSwnx4xHGNRahAdjZS6/mWLyXxAADQmSp/LeaYumt+MVEU7MJikMIwkQrSMz1L43p5n8q+6uMm+2q2jfYHWxzLYUEdaXMk8S1XauI9lKvVsNU7sZgohB1Q8GkT/dZHKvu7aWp6SSHhnmexWOL4lisYSiUTAxOPbca+L6QmHmy/3Zoa2x6+fkQDiYfEAwAg8cIOEg+JBwBA4oUdJB4SDwCAxAs7QoqnYphBHR3MT/wxOcM+b2owMIP99edP3ZF4EgaJJ2GQeBIGiSdhkHgSBonXAxV1ffkpvafaH4Mtg6js8B311x+OM7F840Xi9QCN88IMEg+JBwBA4oUdJJ6ExSsvZ6Jh4n3Z5nyDry+piTcuV4ex1VuI/XphAbYLdlcjtY6vH6mJB9ukuuWy7d98/YgK7OBPf5a6S0k8i8USB2tx9qrs7/Ctt6hMOaVvZKvES2WmXL5+pCRei7VzIky8bNy1mG+9RWVRuelrtkqMzMHNfe077wspifdFs2MpTLxgDz8IG6wnyP7P+G6qlJJ4sGNBYjM0XhzHec/UiEq9resxmHjv1Fj38vEjFfEoihoG27P4XJnxlD/5Ex3YmCcuE3OxnpXcA6mIx/UfFJKbjH/3kvUjWIWWV1k+4/KhZJgYo5EZ4o/BlkHgOBPrrz+uGPUezyjYhpyINOymyeUa4W/+ROV8h/dpmHjR6errCtIzXew4g4XrXO65RUSp2DEGBOwlDtJuH3Yt5b3p2xuojbD6gbTvTymSILVm9xOw4yhAmpqZ9o3hEkVRw8SO1V+yNK6XuY6elFxHpTe9z/bqyybm6ZpDeeSv0OxspNZzPZSRMqxb6GO2wo7a5h3N5z/44rNw6rjG9Vex44WhcbsfWFxhOs5VF5CmZlZdIveJHa8gFBLueVEy9Q0+lX7qW8NFvqdFhAuLxRK35bIthe/O19kF7eeUSiZG7LgF40Azncyn4nea0pO6lrU15O4Ks/c3Yf0TeHD7sxZG+cYcbXW+9nyp8aQ/e/MfytVqjE7n8HDGGxaWXrB+7o+APS02Q+Mdn6dTT8k3NITKJufrro7Mwc2BnoF9byZGN1Cux8XOc2hgmIj1deTOQAXszzY2V4s3Uu4pYqc45BzD6L/xPfJXCjarkKgYkE0lGwrSM53PH972Z4tIw24mV1lSB1TnhC9KJROzX0WvFPKcl3DZsyXGMz+KZpILq9U69P062wcJ2ex/idYvLB27NbOAqCwxueaInbN+h1zORJUafbNX11g/hq3ECqfFHFN3JZYYCw62OJZLeR427LQ5Osef1nkW7r1qf/v9OtsHqy9ZP3nrouXTUFlylSX1PSX54bYGatNX15z/UJi9z4hyEhECgUAgEAgEAoFAIBAIBAKBQAxw/gvxOS6m0C7wOgAAAABJRU5ErkJggg=='); + background-size: 90px; + background-repeat: no-repeat; + height: 90px; + width: 90px; + margin: 0 auto 32px; + transform: translate(0,0); + opacity: 1; + transition: all .5s ease-out; +} + +.loader-li .bar { + width: 130px; + height: 2px; + margin: 0 auto; + border-radius: 2px; + background-color: #CFCFCF; + position: relative; + overflow: hidden; + z-index: 1; + transform: rotateY(0); + transition: transform .3s ease-in; +} + +.loader-li .bar-inner { + height: 100%; + width: 68px; + position: absolute; + transform: translate(-34px,0); + background-color: #0073B1; + border-radius: 2px; + animation: initial-loading 1.5s infinite ease; +} + +@keyframes icon-rotate { + 0%, 100% { + transform: rotate(0deg) + } + + 2% { + transform: rotate(-15deg) + } + + 3% { + transform: rotate(15deg) + } + + 4% { + transform: rotate(-15deg); + } + + 5% { + transform: rotate(15deg); + } + + 6% { + transform: rotate(-15deg); + } + + 7% { + transform: rotate(15deg); + } + + 8% { + transform: rotate(-15deg); + } + + 9% { + transform: rotate(15deg); + } + + 10% { + transform: rotate(0deg); + } +} + +.icon-rotate:hover { + -webkit-animation-duration: 10s; + -moz-animation-duration: 10s; + animation-duration: 10s; + -webkit-animation-name: icon-rotate; + -moz-animation-name: icon-rotate; + animation-name: icon-rotate; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -moz-animation-timing-function: linear; + animation-timing-function: linear; +} + +@keyframes initial-loading { + 0%,100% { + transform: translate(-34px,0) + } + + 50% { + transform: translate(96px,0) + } +} + +.loader { + border-width: 3px; + margin-left: -10px; + top: 25px; + -webkit-animation-duration: 1s; + -moz-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-name: pulsate; + -moz-animation-name: pulsate; + animation-name: pulsate; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + animation-timing-function: ease-out; + border-radius: 30px; + filter: alpha(opacity=0); + opacity: 1; + border: 3px solid #008cc9; + display: block; + height: 30px; + margin: 0 auto; + width: 30px; +} + +.loader.loader-small { + width: 20px; + height: 20px; +} + +@keyframes pulsate { + from { + transform: scale(0.1,0.1); + opacity: .0 + } + + 50% { + opacity: 1.0 + } + + 100% { + transform: scale(1.2,1.2); + opacity: .0 + } +} + +@-webkit-keyframes pulsate { + from { + -webkit-transform: scale(0.1,0.1); + opacity: .0 + } + + 50% { + opacity: 1.0 + } + + 100% { + -webkit-transform: scale(1.2,1.2); + opacity: .0 + } +} + +.view-loader { + display: none; + position: absolute; + bottom: 0; + left: 0; + width: 100%; +} + +.view-loader-inner { + position: relative; + top: 2px; + visibility: hidden; + z-index: 10; + transition: visibility 0s .6s; + opacity: 1; + visibility: visible; + transition-delay: 0s; + bottom: 0; + right: 0; + left: 0; +} + +.view-loader-inner:before { + display: block; + background: #0073B1; + opacity: 0; + transform: scaleX(1); + transition: transform .4s linear,opacity .6s; + opacity: 1; + animation: loading-bar 5s cubic-bezier(.1,.55,.15,.5); + content: ''; + width: 100%; + height: 2px; +} + +@keyframes loading-bar { + from { + transform: scaleX(.01); + } + + to { + transform: scaleX(1); + opacity: 0; + } +} + +.loading-view .view-loader { + display: block; +} + +.placeholder { + display: inline-block; + width: 150px; + height: 10px; + -webkit-animation-duration: 2s; + -moz-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-name: fade; + -moz-animation-name: fade; + animation-name: fade; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + background: -webkit-linear-gradient(90deg, #e1e9ee, #d3dce2 50%); + background: -moz-linear-gradient(90deg, #e1e9ee, #d3dce2 50%); + background: -o-linear-gradient(90deg, #e1e9ee, #d3dce2 50%); + background: linear-gradient(90deg, #e1e9ee, #d3dce2 50%); +} + +@keyframes fade { + from { + opacity: .7 + } + + 50% { + opacity: 1 + } + + 100% { + opacity: .7 + } +} + +@-webkit-keyframes fade { + from { + opacity: .7 + } + + 50% { + opacity: 1 + } + + 100% { + opacity: .7 + } +} + +.icon-plus { + border: 1px solid #b0b2b5; + border-radius: 50%; + font-size: 32px; + color: #b0b2b5; + line-height: 43px; + width: 50px; + height: 50px; + margin-bottom: 10px; + display: block; + margin: auto; + font-style: normal; +} + +.badge { + background: #FDE3D2; + color: #6A2300; + font-size: 10px; + font-weight: normal; + text-transform: capitalize; + min-width: 60px; + margin-top: 2px; +} + +.badge.badge-gray { + border: 1px solid rgba(0,0,0,.55); + background: #FFF; + color: rgba(0,0,0,.55); +} + +.badge[data-role="secondary"] { + background: #E6E6FF; + color: #2C2B9D; +} + +.badge[data-role="shadow"] { + background: #E1E9EE; + color: #283E4A; +} + +.badge[data-role="manager"] { + background: #CAEDFF; + color: #2B7EAC; +} + +.badge[data-role="director"] { + background: #FFEEAD; + color: #5E480B; +} + +.badge[data-role="vacation"] { + background: #DCF0CB; + color: #0E4507; +} + +.module { + border: 1px solid #dddedf; + background: #FFF; + padding: 15px; + margin-bottom: 10px; + color: #5c5b5c; +} + +.module-top-edge { + margin-top: 0; +} + +.module-bottom-edge { + margin-bottom: 0; +} + +.module-heading { + margin-bottom: 10px; + padding-bottom: 10px; +} + +.col-left-edge { + padding-left: 0; + margin-left: 0; +} + +.col-right-edge { + padding-right: 0; + margin-right: 0; +} + +.striped:nth-child(even) { + background: #f6f6f6; +} + +.module h4 { + margin-top: 0; +} + +.light { + color: #b0b2b5; +} + +.dark { + color: #333; +} + +.italic { + font-style: italic; +} + +.uppercase { + text-transform: uppercase; +} + +.error-text { + color: #FF2C33; +} + +.btn { + box-shadow: none; + border-radius: 2px; + text-shadow: none; + background-image: none; +} + +.btn .loader { + display: none; + border: 3px solid white; +} + +.btn.loading .loader { + display: block; +} + +.btn.loading .btn-text { + display: none; +} + +.btn.btn-white { + background: none; + padding: 6px 15px; + border: none; + box-shadow: inset 0 0 0 1px #FFF; + color: #FFF; + font-weight: 100; + letter-spacing: 1px; +} + +.btn.btn-white:hover { + color: #FFF; + box-shadow: inset 0 0 0 2px #FFF; +} + +.btn.btn-blue { + color: #00b0e3; + border-color: #00b0e3; + margin: 0 3px; + background: #fff; +} + +.btn.btn-blue:focus, +.btn.btn-blue:active, +.btn.btn-blue:hover { + color: #0077B5; + border-color: #0077B5; + background: #fff; +} + +.module-gray { + border: 1px solid #dddedf; + background: #f0f3f6; +} + +.border-all { + border: 1px solid #dddedf; +} + +.border-bottom { + border-bottom: 1px solid #dddedf; +} + +.border-top { + border-top: 1px solid #dddedf; +} + +.invalid-input { + border: 1px solid red !important; +} + +.form-control.border-bottom { + display: inline-block; + -webkit-appearance: none; + -moz-appearance: none; + border-radius: 0; + border: none; + border-bottom: 1px solid #ccc; + box-shadow: none; +} + +input[type="number"].form-control.border-bottom { + /* Fix for chrome bug where input shakes on focus */ + line-height: 1; +} + +.form-control.border-bottom:focus { + outline: none; + box-shadow: none; + border-bottom: 1px solid #008CC9; +} + +select.form-control { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-clip: content-box; + box-sizing: border-box; + border: 1px solid rgba(0,0,0,.25); + -webkit-transition: box-shadow .15s; + transition: box-shadow .15s; + color: rgba(0,0,0,.85); + padding: 4px 12px; + width: 100%; + background: url('../images/chevron-bottom.svg') right 9px top 13px no-repeat transparent; +} + +label { + font-weight: normal; +} + +.pill { + border-radius: 15px; + background-color: #cfedfb; + color: #333; + padding: 3px 10px; + margin: 5px; + width: 100px; + text-align: center; + display: inline-block; + position: relative; + border: 1px solid transparent; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.pill.removable { + padding-right: 25px; +} + +.pill.removable .close-icon { + position: absolute; + right: 4px; + top: 0; + padding: 2px 0 0 2px; + cursor: pointer; + color: #34b3e4; +} + +.pill.removable:hover { + border: 1px solid #005e93; +} + +.pill.removable:hover .close-icon { + border-left: 1px solid #005e93; + color: #005e93; +} + +.toggle-input { + font-size: 14px; + height: 32px; + -webkit-user-select: none; + user-select: none; +} + +.toggle-input input[type="checkbox"] { + opacity: 0; + position: absolute; +} + +.toggle-input input[type="checkbox"]+label { + position: relative; + padding: 8px 50px 0 0; + line-height: 10px; + color: #b0b2b5; +} + +.toggle-input input[type="checkbox"]+label:before { + content: ""; + display: block; + position: absolute; + width: 40px; + height: 24px; + top: 0; + right: 0; + left: auto; + border-radius: 16px; + transition: background-color .2s ease-out; + background-color: #d0d3d6; + border: 1px solid #a0a3a6; + box-shadow: none; +} + +.toggle-input input[type="checkbox"]:checked+label:before { + background-color: #0084bf; + border-color: transparent; + box-shadow: 0 0 0 10px #0084BF inset; +} + +.toggle-input input[type="checkbox"]+label:after { + display: block; + content: ""; + background-color: white; + height: 20px; + width: 20px; + margin: 2px; + position: absolute; + top: 0px; + right: 16px; + left: auto; + background-image: none; + transform: scale(1); + box-shadow: rgba(0, 0, 0, 0.0980392) 0px 0px 0px 1px, rgba(0, 0, 0, 0.2) 0px 2px 3px; + border-radius: 13px; + transition: all 0.3s ease; +} + +.toggle-input input[type="checkbox"]:checked+label:after { + transform: translateX(16px); +} + +.multi-select { + display: inline-block; + position: relative; + margin: 0 5px; +} + +.multi-select-overlay { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +.multi-select-options { + position: absolute; + background: #fff; + width: 100%; + border: 1px solid #ccc; + padding: 5px; + border-radius: 4px; + z-index: 1; + display: none; +} + +.multi-select-options.visible { + display: block; +} + +.multi-select-options label { + margin-left: 5px; +} + +/* Typeahead CSS */ +span.twitter-typeahead { + width: 100%; +} + +.twitter-typeahead .tt-hint, +.twitter-typeahead .tt-input { + width: 100%; +} + +.twitter-typeahead .tt-cursor { + background: #00b0e3; + color: #fff; +} + +.twitter-typeahead .tt-suggestion { + padding-left: 10px; +} + +.twitter-typeahead .tt-suggestion:hover { + cursor: pointer; + background: #00b0e3; + color: #fff; +} + +.twitter-typeahead .tt-menu { + background: #fff; + border: 1px solid #ccc; + border-radius: 5px; + padding: 10px 0; + width: 100%; +} + +.input-group span.twitter-typeahead { + display: block !important; +} + +.input-group span.twitter-typeahead .tt-dropdown-menu { + top: 32px !important; +} + +.input-group.input-group-lg span.twitter-typeahead .tt-dropdown-menu { + top: 44px !important; +} + +.input-group.input-group-sm span.twitter-typeahead .tt-dropdown-menu { + top: 28px !important; +} + +/* Icon font */ + +.svg-icon { + position: relative; + top: 4px; +} + +.svg-icon > svg { + vertical-align: top; +} + +.grey-icon { + color: #000; + opacity: .2; + cursor: pointer; + transition: opacity .3s; +} + +.grey-icon:hover { + opacity: .5; +} + +.svg-icon-question { + display: inline-block; + border: 1px solid; + width: 15px; + height: 15px; + border-radius: 50%; + top: 5px; + padding: 2px; + cursor: pointer; +} + +.svg-icon-question:hover { + border-color: #91C475; + fill: #91C475; +} + + diff --git a/src/oncall/ui/static/fonts/Source-Sans-Pro.css b/src/oncall/ui/static/fonts/Source-Sans-Pro.css new file mode 100644 index 0000000..e644e1a --- /dev/null +++ b/src/oncall/ui/static/fonts/Source-Sans-Pro.css @@ -0,0 +1,18 @@ +@font-face { + font-family: 'Source Sans Pro'; + font-weight: 400; + font-style: normal; + src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQAABAAwQkFTRYsZlLEAAbVEAAAAOkRTSUfGOnsmAAG1gAAAG6hHREVGPkM/lAABYGQAAAD+R1BPU+XRHC8AAWFkAABHUEdTVUIZLU2qAAGotAAADI5PUy8yWrSQVAAAAbgAAABgY21hcGTgLZkAAA8gAAAJ4GN2dCALkwDuAAAawAAAACRmcGdtBlmcNwAAGQAAAAFzZ2FzcP//AAMAAWBcAAAACGdseWa7gQltAAAhbAAA5wRoZWFk+9KM0wAAATwAAAA2aGhlYQejBfIAAAF0AAAAJGhtdHiqlXI4AAACGAAADQhsb2Nhc/07YgAAGuQAAAaGbWF4cAVcAkAAAAGYAAAAIG5hbWVEBq1yAAEIcAAAPHZwb3N0NUCH1wABROgAABtxcHJlcJYE+esAABp0AAAASwABAAAAAQk3ArpeCl8PPPUACQPoAAAAAMx2bugAAAAAzHbRWf9A/r0EiAO4AAAACQACAAAAAAAAAAEAAAPY/u8AAASq/0D/FgSIAAEAAAAAAAAAAAAAAAAAAANCAAEAAANCAFoABwBxAAUAAQAAAAAACgAAAgABcwADAAEAAwG9AZAABQAAAooCWAAAAEsCigJYAAABXgAyASAAAAILBQMDBAMCAgQgAAAHAAAAAQAAAAAAAAAAQURCRQBAAAD7AgLu/wYAAAPYAREgAAGTAAAAAAHgApQAAAAgAAMCjQBZAAAAAADKAAAAygAAAhoAAAJHAFcCNgAxAmQAVwIKAFcB6QBXAmQAMQKHAFcBAgBXAdoAHQI+AFcB4QBXAtIAVwKCAFcCkwAxAjsAVwKTADACQABXAhEAKAITABkCgABUAf7//gMNABQB/AANAdf//AIWACoCAAA6AisAUgHIAC4CKwAvAfAALgEkAB4B+AAtAiAAUgD2AEMA9//YAe8AUgD/AFIDPQBSAiMAUgIeAC4CKwBSAiYALwFbAFIBowAcAVIAGAIgAEsB0wAMAs4AGAG+AA4B0wAMAakAHwIaAAACGgAAAhoAAAIaAAACGgAAAhoAAAIaAAACGgAAAhoAAAIaAAACGgAAAhoAAAIaAAACGgAAAhoAAAIaAAACGgAAAhoAAAIaAAACGgAAAhoAAAIaAAADMQAGAjYAMQI2ADECNgAxAjYAMQI2ADECZABXAmQAVwJkAFcCdwAeAgoAVwIKAFcCCgBXAgoAVwIKAFcCCgBXAgoAVwIKAFcCCgBXAgoAVwIKAFcCCgBXAgoAVwIKAFcCCgBXAgoAVwIKAFcCZAAxAmQAMQJkADECZAAxAmQAMQJkADECZAAxAocAVwKHAFcChwBXAqoAHgEC//4BAgBOAQL/+QEC//ABAv/6AQIABQECAEgBAv/5AQIAQQECAEwBAgApAdoAHQI+AFcB4QBQAeEAVwHhAFcB4QBXAeEAVwHhAAcB4QBXAeQACgLSAFcCggBXAoIAVwKCAFcCggBXAoIAVwKCAFcCggBXApMAMQKTADECkwAxApMAMQKTADECkwAxApMAMQKTADECkwAxApMAMQKTADECkwAxApMAMQKTADECkwAxApMALwNKADECkwAxApMAMQKTADECkwAxApMAMQKTADECkwAxAkAAVwJAAFcCQABXAkAAVwJAAFcCQABXAhEAKAIRACgCEQAoAhEAKAIRACgCEQAoAhEAKAKWAFkCEwAZAhMAGQITABkCEwAZAhMAGQKAAFQCgABUAoAAVAKAAFQCgABUAoAAVAKAAFQCgABUAoAAVAKAAFQCgABUAoAAVAKAAFQCgABUAoAAVAKAAFQCgABUAo4AVAKOAFQCjgBUAo4AVAKOAFQCjgBUAw0AFAMNABQDDQAUAw0AFAHX//wB1//8Adf//AHX//wB1//8Adf//AHX//wB1//8AhYAKgIWACoCFgAqAhYAKgJ3AB4CRwBZApgAQAIAADoCAAA6AgAAOgIAADoCAAA6AgAAOgIAADoCAAA6AgAAOgIAADoCAAA6AgAAOgIAADoCAAA6AgAAOgIAADoCAAA6AgAAOgIAADoCAAA6AgAAOgIAADoDEQA6AcgALgHIAC4ByAAuAcgALgHIAC4CPQAvAisALwIrAC8CKwAvAfAALgHwAC4B8AAuAfAALgHwAC4B8AAuAfAALgHwAC4B8AAuAfAALgHwAC4B8AAuAfAALgHwAC4B8AAuAfAALgHwAC4B+AAtAfgALQH4AC0B+AAtAfgALQH4AC0B+AAtAiD/9AIgAFICIABSAiAACAD2AAwA9gA6APb/+gD2//AA9v/0APYAAAD2//oA9gA7APYAQwD2ACYA9gAmAPYAUgD3/9gB7wBSAe8AUgD/AEQBCABSAWoAUgD/AFIA/wBSAP///wD/AC4BBgAXAz0AUgIjAFICIwBSAiMAUgIjAFICIwBSAiMAUgIjAFIDBwA/Ah4ALgIeAC4CHgAuAh4ALgIeAC4CHgAuAh4ALgIeAC4CHgAuAh4ALgIeAC4CHgAuAh4ALgIeAC4CHgAuAh4ALgNHAC4CHgAuAh4ALgIeAC4CHgAuAh4ALgIeAC4CHgAuAVsAUgFbACQBWwBSAVsAQwFbAEMBW//9AaMAHAGjABwBowAcAaMAHAGjABwBowAcAaMAHAJAAFIBUgAYAVIAGAFSABgBUgAYAVIAGAFSAAkCIABLAiAASwIgAEsCIABLAiAASwIgAEsCIABLAiAASwIgAEsCIABLAiAASwIgAEsCIABLAiAASwIgAEsCIABLAiAASwIgAEsCIABLAiAASwIgAEsCIABLAiAASwLOABgCzgAYAs4AGALOABgB0wAMAdMADAHTAAwB0wAMAdMADAHTAAwB0wAMAdMADAGpAB8BqQAfAakAHwGpAB8CIQA1AisAUgD3/9gCKwAvAfAAJQIvADICPgAeAiwAHgIjAB4CUgAeAVgALgFYACkBWAAuAVgAJAFYABsBWAAlAVgALgFYAC4BWAAkAVgALgFYAC4BWAAuAisALwIrAC8CKwAvAisALwIrAC8CKwAvAisALwIrAC8CKwAvAisALwIrAC8CKwAvAisALwIrAC8CKwAvAisALwIrAC8CKwAvAisALwIrAC8CKwAvAisALwIrAC8CLwAyAi8AMgIvADICLwAyAi8AMgIvADICLwAyAi8AMgD2AFIA9gBFAQgAUgFqAFIA9gAmAPYARQD2AAAA9v//AQEAFwIsAB4CYQAgAfEALAHxAE8B8QAkAfEAGgHxABEB8QAZAfEAMAHxACwB8QApAfEAKAIaADcBcQAyAfUAJQHxABoCBwAiAfEAGQINAD0B6wAsAg0ANwINADQB8QAsAfEATwHxACQB8QAaAfEAEQHxABkB8QAxAfEALAHxACkB8QAeAgYANAFxADIB8QApAfEAGgIGABkB8QAZAgYAOQHpACwCBwAxAgYAJgD5AEEA+QAvAPkAQQD5AC8DtABeASEAVQEhAFUBqQAmAakAMAD5AFABqQBQAPkAOQD5AD8BqQA5AakAPwD5AD8BqQA/AQ8ALQEPADYBrQAtAa0ANgE3ACkBNwApAeAAKQMgACkB8QApAyAAKQD5AEEBMAAoAfQADAEvAFIBLwAmAS8AXgEvAB8BLwAiAS8AHwFeAAoA8QBcAV4ADgDxAFwBogA6AcYANgHGADYB8QAtAjAAKQLoADEC5wAxAacAFwJ9AAMCfQAbA08AMwMOADMB8QAjAW8AIwFvAFcBbwAoAW8AIwFvACoBbwAjAW8ALQFvADIBbwAtAW8AJwDtAEEA7QAnALEAKwCxACEBbwAjAW8AVwFvACgBbwAjAW8AKgFvACMBbwAtAW8AMgFvAC0BbwAnAO0AQQDtACcAsQArALEAIQFvACMBbwBXAW8AKAFvACMBbwAqAW8AIwFvAC0BbwAyAW8ALQFvACcA7QBBAO0AJwCxACsAsQAhAW8AIwFvAFcBbwAoAW8AIwFvACoBbwAjAW8ALQFvADIBbwAtAW8AJwDtAEEA7QAnALEAKwCxACEBWQAlAXYAIQFtAB4BWQAlAXYANAEyAB4BdgAhAVAAHADJABMBVwAeAW4ANACmACoAqf/mAVEANACuADQCLwA0AXEANAFtAB4BdgA0AXYAIQDwADQBGwATAOgAEAFyADIBQQAIAecAEAEzAAgBPwAIASIAFQFQABwBUAAcAVAAGQF2ACEBeQAiAKYANAFLACkB8QAaAfEANAHxADUB8QAXAfEAFwHxAD0B8QASAfEAPQHxADUB8QALAfEACgHxAEQB8QAKAfEALwHxAD0B8QBIAfEAFwBW/1kAVv9ZAFb/WQM4ACMEqgAjAw0AQAMoAEADHAAjAyQAQAM1ACkDJABAAzUAIwM1ACMDIQAfAfEAIgHxACIB8QAyAfEAIgH2ALwB8QAiAfEAIgHxACIB8QAiAfEAIgHxACIB8QA8AfEAIgHxACQB8QAkAfEAIgIxABgDDgAoAiYAUgIQACgBTAA0Ai0AKQJQAB4CrgArAfgAFgKhAFkBmQAVAyAALgJrABoCawAqAmsAJwJrACoBMgA2ATIADAG8ACkBeAA2AjsAFwI7ABcCOwA5AjsAOQI7ABcCOwAXAjsAEgI7ABIDHwBKAx8ASgJkAAAB9wAdAgUAOAD5AFEBqgBRAPkAOQD5AD8AlgAeAKIAFAIeAKACHgDOAh4AjgIeAI4AcgAWARUAEADhAC4A4QAAAHIAFgIeAIQCHgCIAh4AlAIeAJECHgCyAh4ArQIeANkCHgDAAh4AzQAA/5EAAP99AAD/vwAA/80AAP9/AAD/eAAA/3UAAP9v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AAAAAAAAAAAAAAPOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7IAAAOyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeAAAAAAAAAAAAAAAAAAMCAgIHAjECjwKiAdQCBgIbAhwCJQKtAf4CEgH9AiEB/wIAArMCsgK0AgQCLwIdAiMCHgK4AhoC5AIfAiICIAK6AzYCAwKTApACjgKRAiQCKALuAioCagIQArwCEwIsAu8CjQK3AjQCNQLlAr8CKQIYAvQCMwJsAhECpAKlAqYCBQA/AE4ATwBYAFkAWgBcAHQAdQB2AHgA4wCMAq8AoAC8AL0AvgDAANgA5AFnAO0A/AD9AQYBBwEIAQoBIgEjASQBJgGVATwCsAFRAW4BbwFwAXIBigGWAYwAPQDrAD4A7ABNAPsAUAD+AFEA/wBTAQEAUgEAAFQBAgBXAQUAXQELAF4BDABfAQ0AaAEWAFsBCQBpARcAagEYAGsBGQBsARoAcAEeAHMBIQB3ASUAeQEnAzsDPgB+ASsAegEtAH8BLgCAAS8BMACBATEAgwE0AIIBMgCEATMAiAE4AIoBOgCNAT0AiwE7AUEAlgFHAzwDPwCXAUgAoQFSAKkBWgCrAVsAqgFcAK8BYACwAWEAsgFjALEBYgC4AWkAtwFoAL8BcQDBAXMAwgF0AMMBdQDEAXYAzAF+ANUBhwDZAYsA2gDfAZEA4QGTAOABkgCiAVMAzQF/AEAA7gB7ASgAmAFJAMUBdwDGAXgAxwF5AMgBegDJAXsAbQEbAKgBWQCzAWQAuQFqAnYCfgKDAoUC8ALzAvEC9QLtAvICeAJ/AoQC9gL4AvoC/AL+AwADAgMEAwYDCAMKAwwDFQMWAxgCbgJwAnECdwJ5AnwCgAKBAFUBAwBWAQQAbgEcAHEBHwByASAAhQE1AIYBNgCHATcAiQE5AI4BPgCPAT8AkAFAAKwBXQCtAV4ArgFfALQBZQC1AWYAugFrALsBbADTAYUA1AGGANYBiADbAY0A4gGUAEEA7wBCAPAAQwDxAEQA8gBFAPMARgD0AEcA9QBIAPYASQD3AEoA+ABLAPkATAD6AGABDgBhAQ8AYgEQAGMBEQBkARIAZQETAGYBFABnARUAfAEpAH0BKgCZAUoAmgFLAJsBTACcAU0AnQFOAJ4BTwCfAVAAowFUAKQBVQClAVYApgFXAKcBWADKAXwAywF9AM4BgADPAYEA0AGCANEBgwDSAYQA1wGJANwBjgDdAY8A3gGQAhYCFAIVAhcCCAIJAgwCCgILAg0CJgInAhkCMgJ1AjwCPQJ6ApkCkgLFAq4CsQLCAs8C3bgAACxLuAAJUFixAQGOWbgB/4W4AEQduQAJAANfXi24AAEsICBFaUSwAWAtuAACLLgAASohLbgAAywgRrADJUZSWCNZIIogiklkiiBGIGhhZLAEJUYgaGFkUlgjZYpZLyCwAFNYaSCwAFRYIbBAWRtpILAAVFghsEBlWVk6LbgABCwgRrAEJUZSWCOKWSBGIGphZLAEJUYgamFkUlgjilkv/S24AAUsSyCwAyZQWFFYsIBEG7BARFkbISEgRbDAUFiwwEQbIVlZLbgABiwgIEVpRLABYCAgRX1pGESwAWAtuAAHLLgABiotuAAILEsgsAMmU1iwQBuwAFmKiiCwAyZTWCMhsICKihuKI1kgsAMmU1gjIbgAwIqKG4ojWSCwAyZTWCMhuAEAioobiiNZILADJlNYIyG4AUCKihuKI1kguAADJlNYsAMlRbgBgFBYIyG4AYAjIRuwAyVFIyEjIVkbIVlELbgACSxLU1hFRBshIVktALAAKwCyAQECKwGyAgICKwG3AkQ2KiEUAAgrtwNANiohFAAIKwC3AVFDNCQXAAgrALIEBwcrsAAgRX1pGERLsGBSWLABG7AAWbABjgAAFABEAFIAVgAAAAz/MwAMAeYADAI+AAwCfgAMApAADALIAAwAAABiAGIAYgBiALABFgFmAaIB4AIWAnQCsALQAwIDQgNoA8IECARcBKQFFgVqBdgGBAZGBoAG5gc4B3IHqAgUCHwIzAkwCZIJ4AqQCtQLCAtQC5ALwgwkDGgMvA0iDYQNwg4uDngOvg72D14Prg/+EDQQQBBMEFgQZBBwEHwQiBCUEKAQrBC4EMQQ0BDcEOgQ+BEEERARHBEoETgRrBISEh4SKhI2EkISThJaEmYSchJ6EoYSkhKeEqoSthLCEs4S2hLmEvIS/hMKExYTIhMuEz4TnhOqE7YTwhPOE9oT5hPyE/4UChQWFH4UihSWFKIUrhS6FMYU0hTeFOoU9hU6FUYVUhVeFWoVdhWCFY4VnhWqFeoV9hYCFg4WGhYmFjIWPhZKFlYWYhZuFnoWhhaSFp4Wqha2FsIWzhbaFuYW8hcCF24XxBgyGD4YShhWGGIYbhjkGPAY/BkIGRQZJBkwGTwZSBlUGWAZbBl4GYQZ7hn6GgYaEhoeGioaNhpCGk4aWhpmGnIafhqKGpYaohquGroaxhrSGt4a6htSG7IbvhvKG9Yb4hvuG/ocBhwSHB4cKhw2HEIcThxaHGYcchx+HIoclhyiHK4dCB1MHawduB3EHdAd3B3oHfQeAB4MHhgeJB4wHjweSB5UHmAecB58HogelB6gHrAfPB/yH/4gCiAWICIgLiA6IEYgUiDKINYg4iDuIPohBiESIR4hKiE2IUIhTiFaIWYhciF+IY4iECIcIigiNCJAIkwiWCJkInAifCKIIuAi7CL4IwQjECMcIygjNCNAI0wjoCPgJAAkDCQYJFwkaCR0JIAkjCSYJKgktCUCJQ4lGiUmJTIlPiVKJVYlYiVuJXolhiWSJZ4lqiW2JcIlziXaJeYl8iX+JgomFiYmJpInKieWJ6Inrie6J8Yn0ihMKFgoZChwKHwojCiYKKQosCi8KMgo1CjgKOwpail2KYIpjimaKaYpsim+Kcop1iniKe4p+ioGKhIqHioqKjYqQipOKloqZipyKtgrPCtIK1QrYCtsK3grhCuQK5wrqCu0K8ArzCvYK+Qr8Cv8LAgsFCwgLCwsOCywLRYtSC2kLgQudi7uLvovBi+IL74vyi/WL+Iv7i/6MAYwEjAeMCowNjCUMJwwqDC0MMAwzDDYMOQw8DD8MQgxFDEgMSwxODFEMVAxYDFsMXgxhDGQMaAyGjIiMi4yOjJGMlIyXjJqMnYyljKiMq4yujLGMtIy4jLuMygzNDPoNDA0ZjSyNSQ1dDXSNjg2bjb6N2A3pjfQOBw4JDgsODQ4PDhyOHo4gjjCOPg5RDmqOfA6SDpQOnw6hDrgOug7EjtgO2g7cDt4O4A7rDu0O7w73jwIPBQ8IDwwPF48ijzYPSg9Pj1KPXA9lj2iPa49uD3GPd499j4CPg4+Ij4qPj4+Uj5mPm4+eD6ePrI+1D72PxI/Lj+MP+Q//kAQQCpAREBsQKBA7kFeQZBCDEKMQw5DakQCRJRFLEWqRbRFvkXIRdJF3EXmRfBF+kYERg5GGEYiRixGNkZARkpGVEZeRmhGckZ8RoZGkEaaRqRGrka4RsJG/EcgR2BHvEf+SExIokjQSUhJnknASeJKBko6SkRKTkpY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G7kACgAEPlm4AABFWLgABy8buQAHAAQ+WboACQAKABEREjm4AAkvuQACAAH0uAAB3LgABdC4AAEQuAAM0LgAARC5ABIAAfS4AA/QuAASELgAFtAwMQEhFSE3IxEjESERIxEjNTc1MxUhNTMVMwHt/s8BMZ9LVP7PU0tLUwExVEsB7G9v/hQBNf7LAewqBXV1dXUAAP////4AAAC0AzICJgAMAAAABwL3AIEAAP//AE4AAAEEAzICJgAMAAAABwL5AIEAAP////kAAAEJAzICJgAMAAAABwL7AIEAAP////AAAAESAzMCJgAMAAAABwL9AIEAAP////oAAAEIAy0CJgAMAAAABwMFAIEAAP//AAUAAAD9AxICJgAMAAAABwL/AIEAAP//AEgAAAC6AzUCJgAMAAAABwMDAIEAAP////kAAAEJAzICJgAMAAAABwMNAIEAAP//AEEAAADUA2gCJgAMAAAABwMHAIEAAP//AEz/MgC4ApACJgAMAAAABwMTAIIAAAABACn/LADYApAAFgA+ALgAAEVYuAAALxu5AAAADj5ZuAAARVi4AAIvG7kAAgAEPlm4AABFWLgAFi8buQAWAAQ+WboADwAIAAMrMDETMxEOARUUFjMyNjcXDgEjIiY1NDY3I1dUICIeEgwTCRcOLhQoNyoYFAKQ/XAYNB8XFwcHLQsRLCsrPBb//wAd//QB4QMyAiYADQAAAAcC+wFZAAD//wBX/ygCPAKQAiYADgAAAAcDFQFDAAD//wBQAAAByQMyAiYADwAAAAcC+QCDAAD//wBXAAAByQLXAiYADwAAAAcDNAFk/9///wBX/ygByQKQAiYADwAAAAcDFQEdAAD//wBXAAAByQKQAiYADwAAAAcB/QD6ARP//wBX/zIByQKQAiYADwAAAAcDEwEdAAD//wAH/zIByQMSAiYADwAAACcC/wCDAAAABwMTAR0AAP//AFf/VQHJApACJgAPAAAABwMbAR0AAAABAAoAAAHMApAADQBNALgAAEVYuAAILxu5AAgADj5ZuAAARVi4AAIvG7kAAgAEPlm6AAMAAgAIERI5uAADL7gABty4AAnQuAADELgADNC4AAIQuQANAAH0MDElFSE1BzU3ETMRNxUHFQHM/o5QUFS8vEdH7CpDKgFh/shlRGTO//8AV/8yAnoCkAImABAAAAAHAxMBagAA//8AVwAAAioDMgImABEAAAAHAvkBRAAA//8AVwAAAioDMgImABEAAAAHAw0BRAAA//8AVwAAAioDMwImABEAAAAHAv0BRAAA//8AV/8oAioCkAImABEAAAAHAxUBRgAA//8AVwAAAioDNQImABEAAAAHAwMBRAAA//8AV/8yAioCkAImABEAAAAHAxMBRgAA//8AV/9VAioCkAImABEAAAAHAxsBRgAA//8AMf/0AmIDMgImABIAAAAHAvcBSQAA//8AMf/0AmIDMgImABIAAAAHAvkBSQAA//8AMf/0AmIDMgImABIAAAAHAvsBSQAA//8AMf/0AmIDMwImABIAAAAHAv0BSQAA//8AMf/0AmIDLQImABIAAAAHAwUBSQAA//8AMf/0AmIDEgImABIAAAAHAv8BSQAA//8AMf/0AmIDMgImABIAAAAHAwsBSQAA//8AMf/0AmIDMgImABIAAAAHAw0BSQAA//8AMf8yAmICnAImABIAAAAHAxMBSQAA//8AMf/0AmIDaAImABIAAAAHAwcBSQAA//8AMf/0AmIDcQImABIAAAAHAyUBSQAA//8AMf/0AmIDcQImABIAAAAHAycBSQAA//8AMf/0AmIDigImABIAAAAHAykBSQAA//8AMf/0AmIDqwImABIAAAAHAysBSQAA//8AMf8yAmIDMgImABIAAAAnAvsBSQAAAAcDEwFJAAAAAwAv/+ICaQKuAAkAEwAuAEkAuAAARVi4ACkvG7kAKQAOPlm4AABFWLgAHC8buQAcAAQ+WboAAAAcACkREjm5AAIAAfS6AAoAHAApERI5uAApELkADAAB9DAxNxYzMj4CNTQvASYjIg4CFRQXAR4BFRQOAiMiJwcnNy4BNTQ+AjMyFhc3F80ySyxHMxwgIjJOLEgzHCMBeB8hKUtnPWZIPi9FICMpS2c+NFojPy9yNSZHYz5eQDM3JURiPWNDAYorckdPf1kwP1EkWix2SU99Vy4hIFMjAAAAAgAxAAADHAKQABIAGwBVALgAAEVYuAADLxu5AAMADj5ZuAAARVi4AA4vG7kADgAEPlm4AAMQuQAYAAH0uAAF0LoACgADAA4REjm4AAovuQAIAAH0uAAOELkAFwAB9LgADNAwMRM0NjMhFSEVMxUjFSEVISIuAjcUFjsBESMiBjGomQGg/uro6AEg/lJLdVIrVnp3MDB3egFLnahGzkfuRy1Ve05+iQIIhAAAAAIAMf/0AmIDBQATADQAQQC4AABFWLgALC8buQAsAA4+WbgAAEVYuAAiLxu5ACIABD5ZugAaAC4AAyu4ACIQuQAAAAH0uAAsELkACgAB9DAxJTI+AjU0LgIjIg4CFRQeAgEeARUUBgceARUUDgIjIi4CNTQ+AjMyFz4BNTQmJwFKLEczHBwzRywsSDMcHDNIASwKDTcvMDcpS2c9PmdLKSlLZz5IOionCAY9JkdjPj1iRCUlRGI9PmNHJgLIDiATKzMLLIlbT39ZMDBZf09PfVcuIAgfHAsUCgAAAP//ADH/9AJiAzICJgCiAAAABwL5AUkAAP//ADH/9AJiAzICJgCiAAAABwL3AUkAAP//ADH/9AJiA2gCJgCiAAAABwMHAUkAAP//ADH/9AJiAzMCJgCiAAAABwL9AUkAAP//ADH/MgJiAwUCJgCiAAAABwMTAUkAAAACADH/LAJiApwAJQA5AEkAuAAARVi4AA0vG7kADQAOPlm4AABFWLgAAy8buQADAAQ+WboAHQAjAAMruAADELgAF9C4AAMQuQAmAAH0uAANELkAMAAB9DAxBTQ2Ny4DNTQ+AjMyHgIVFA4CBw4BFRQWMzI3Fw4BIyImNzI+AjU0LgIjIg4CFRQeAgEHIxs/ZkgnKUtnPj1nSykbNEwxKSUeERYTFg4tFCg4QyxHMxwcM0csLEgzHBwzSH0hOxYBMll9TU99Vy4vV31OQ2pSPRYSOBoXFw4tCxEs5SZHYz49YkQlJURiPT5jRyYA//8AVwAAAh4DMgImABUAAAAHAvkBJAAA//8AVwAAAh4DMgImABUAAAAHAw0BJAAA//8AV/8oAh4CkAImABUAAAAHAxUBMwAA//8AV/8yAh4CkAImABUAAAAHAxMBMwAA//8AV/8yAh4DEgImABUAAAAnAv8BJAAAAAcDEwEzAAD//wBX/1UCHgKQAiYAFQAAAAcDGwEzAAD//wAo//QB7QMyAiYAFgAAAAcC+QEUAAD//wAo//QB7QMyAiYAFgAAAAcC+wEUAAD//wAo//QB7QMyAiYAFgAAAAcDDQEUAAD//wAo/ysB7QKcAiYAFgAAAAcDFwEOAAD//wAo/ygB7QKcAiYAFgAAAAcDFQEOAAD//wAo//QB7QM1AiYAFgAAAAcDAwEUAAD//wAo/zIB7QKcAiYAFgAAAAcDEwEOAAAAAQBZ//QCbQKcACoAVAC4AABFWLgABS8buQAFAA4+WbgAAEVYuAARLxu5ABEABD5ZuAAARVi4ACovG7kAKgAEPlm6AAkAEQAFERI5uAARELkAGAAB9LgABRC5ACUAAfQwMRM0PgIzMhYXBx4BFRQOAiMiJic3HgEzMjY1NC4CLwE3LgEjIgYVESNZHz9hQVRqG4ppXBsyRis5XR4vHT0kNToRK0s5BokRQDNQWlMBoTVcQydURpgVYkgnQzEcKiI2IBw/MhcqJBwKNpkiMF9m/m4AAP//ABkAAAH6AzICJgAXAAAABwMNAQgAAP//ABn/KwH6ApACJgAXAAAABwMXAQUAAP//ABn/KAH6ApACJgAXAAAABwMVAQoAAP//ABn/MgH6ApACJgAXAAAABwMTAQoAAP//ABn/VQH6ApACJgAXAAAABwMbAQoAAP//AFT/9AIsAzICJgAYAAAABwL3AUAAAP//AFT/9AIsAzICJgAYAAAABwL5AUAAAP//AFT/9AIsAzICJgAYAAAABwL7AUAAAP//AFT/9AIsAzMCJgAYAAAABwL9AUAAAP//AFT/9AIsAy0CJgAYAAAABwMFAUAAAP//AFT/9AIsAxICJgAYAAAABwL/AUAAAP//AFT/9AIsAzICJgAYAAAABwMBAUAAAP//AFT/9AIsA2sCJgAYAAAABwMJAUAAAP//AFT/9AIsAzICJgAYAAAABwMLAUAAAP//AFT/9AIsAzICJgAYAAAABwMNAUAAAP//AFT/9AIsA4sCJgAYAAAABwMdAUAAAP//AFT/9AIsA7YCJgAYAAAABwMfAUAAAP//AFT/9AIsA7YCJgAYAAAABwMhAUAAAP//AFT/9AIsA7YCJgAYAAAABwMjAUAAAP//AFT/MgIsApACJgAYAAAABwMTAUAAAP//AFT/9AIsA2gCJgAYAAAABwMHAUAAAAABAFT/LAIsApAALgBHALgAAEVYuAAALxu5AAAADj5ZuAAARVi4ACkvG7kAKQAEPlm6ABoAIQADK7gAKRC5AAcAAfS4AAAQuAAN0LgAKRC4ABTQMDETMxEUHgIzMj4CNREzERQOAgcOARUUFjMyNjcXDgEjIiY1ND4CNy4DNVRUGCk3ICE5KhhQFyo7JCcpHhIMEwkXDi4UJzgNExcJNFU9IgKQ/n07UDAVFTBQOwGD/n9CWz8pERM4GRcXBwctCxEsKxUhHBcJASBDakwAAAAAAQBU//QCmgMZACgASAC4AABFWLgAFC8buQAUAA4+WbgAAEVYuAAhLxu5ACEADj5ZuAAARVi4AA4vG7kADgAEPlm4ACEQuAAI3LgADhC5ABsAAfQwMQEeARUUDgIHERQOAiMiLgI1ETMRFB4CMzI+AjURMz4BNTQmJwKDCg0SHigWJD9XMjJXPyRUGCk3ICE5KhgjKC8IBwMZDiATGSQaEAX+o09sQx0dQ2xPAYH+fTtQMBUVMFA7AYMFGyMLFAr//wBU//QCmgMyAiYAzQAAAAcC+QFAAAD//wBU//QCmgMyAiYAzQAAAAcC9wFAAAD//wBU//QCmgNoAiYAzQAAAAcDBwFAAAD//wBU//QCmgMzAiYAzQAAAAcC/QFAAAD//wBU/zICmgMZAiYAzQAAAAcDEwFAAAD//wAUAAAC+AMyAiYAGgAAAAcC9wGGAAD//wAUAAAC+AMyAiYAGgAAAAcC+QGGAAD//wAUAAAC+AMyAiYAGgAAAAcC+wGGAAD//wAUAAAC+AMtAiYAGgAAAAcDBQGGAAD////8AAAB2gMyAiYAHAAAAAcC9wDrAAD////8AAAB2gMyAiYAHAAAAAcC+QDrAAD////8AAAB2gMyAiYAHAAAAAcC+wDrAAD////8AAAB2gMtAiYAHAAAAAcDBQDrAAD////8AAAB2gM1AiYAHAAAAAcDAwDrAAD////8/zIB2gKQAiYAHAAAAAcDEwDtAAD////8AAAB2gNoAiYAHAAAAAcDBwDrAAD////8AAAB2gMzAiYAHAAAAAcC/QDrAAD//wAqAAAB7gMyAiYAHQAAAAcC+QEWAAD//wAqAAAB7gMyAiYAHQAAAAcDDQEWAAD//wAqAAAB7gM1AiYAHQAAAAcDAwEWAAD//wAq/zIB7gKQAiYAHQAAAAcDEwEXAAAAAgAeAAACRQKQAAwAGwBdALgAAEVYuAAbLxu5ABsADj5ZuAAARVi4ABYvG7kAFgAEPlm4ABsQuQAHAAH0ugALABYAGxESObgACy+5AAgAAfS4ABYQuQAMAAH0uAALELgAF9C4AAgQuAAa0DAxJTI2NTQmKwEVMxUjFRMyFhUUDgIrAREjNTcRAQlzc3NzS5iYUZieKE5ySqhNTUSKfX2E3C/9AkyonU57VS0BQSsEASAAAAAAAgBZAAACFAKQABAAGQA5ALgAAEVYuAAALxu5AAAADj5ZuAAARVi4ABAvG7kAEAAEPlm7ABkAAQAOAAQruwACAAEAGAAEKzAxEzMVMzIeAhUUDgIrARUjNzI2NTQmKwERWVN2Nlo/IyNAWTZ2U79WU1RVbAKQbhQuSTY0TTIYltpAR0c2/vwAAAIAQP/0AmUCnAAIACUASQC4AABFWLgADC8buQAMAA4+WbgAAEVYuAAWLxu5ABYABD5ZuQADAAH0ugAIABYADBESObgACC+5AB8AAfS4AAwQuQAiAAH0MDETHgEzMj4CNwE+ATMyHgIVFA4CIyIuAjU0NjchLgEjIgYHlQdkTihDMyAF/nQjZ0M/ZkcnKUpnPT1kRicBAQHRBWZcMVIdAR5qeSA6VDUBMSIrL1d9T09+WTAwWXxMBQ0HdIMjHAAA//8AOv/0AbcCygImAB4AAAAHAvYBDQAA//8AOv/0AbcCygImAB4AAAAHAvgBDQAA//8AOv/0AbcCygImAB4AAAAHAvoBDQAA//8AOv/0AbcCrQImAB4AAAAHAvwBDQAA//8AOv/0AbcCrgImAB4AAAAHAwQBDQAA//8AOv/0AbcCkgImAB4AAAAHAv4BDQAA//8AOv/0AbcCvgImAB4AAAAHAwABDQAA//8AOv/0AbcC1wImAB4AAAAHAwgBDQAA//8AOv/0AbcCygImAB4AAAAHAwwBDQAA//8AOv8yAbcB8gImAB4AAAAHAxMA/QAA//8AOv/0AbcC1wImAB4AAAAHAwYBDQAA//8AOv/0AfUC8gImAB4AAAAHAyQBDQAA//8AOv/0AdYC8gImAB4AAAAHAyYBDQAA//8AOv/0Ad4DEAImAB4AAAAHAygBDQAA//8AOv/0AbcDIgImAB4AAAAHAyoBDQAA//8AOv8yAbcCygImAB4AAAAnAvoBDQAAAAcDEwD9AAD//wA6//QBtwMVAiYAHgAAAAcDLAENAAD//wA6//QBtwMVAiYAHgAAAAcDLgENAAD//wA6//QBtwNHAiYAHgAAAAcDMAENAAD//wA6//QBtwMiAiYAHgAAAAcDMgENAAD//wA6/zIBtwK+AiYAHgAAACcDAAENAAAABwMTAP0AAAACADr/MgHMAfIACwA7AGwAuAAARVi4ABsvG7kAGwAIPlm4AABFWLgAOS8buQA5AAQ+WbgAAEVYuAAfLxu5AB8ABD5ZugAlACwAAyu4ADkQuQADAAH0ugAPABsAORESObgADy+4AAfQuAAbELkAFAAB9LgAHxC4ADTQMDE3FBYzMjY3NQ4DBzQ2NzQuAiMiBgcnPgEzMhYVEQ4BFRQWMzI2NxcOASMiJjU0PgI3JyMOASMiJosxJCM/Iz1UMxZRj5wJFyYeK0kdISJiO1lQKi0dEgwTCRUOLRMmNA4XHA8IAiNRLT5RhCokISCHCBYeJx1QVREXLCIVIBQ5FiltW/7WETsdFxcHBikLECsqFCUgGwk2HSlIAAAAAwA6//QC6wHyAA4AQABHAJsAuAAARVi4ABIvG7kAEgAIPlm4AABFWLgAGC8buQAYAAg+WbgAAEVYuAAyLxu5ADIABD5ZuAAARVi4ACwvG7kALAAEPlm4ADIQuQADAAH0ugA4ADIAEhESObgAOC+5AAoAAfS6AB8AGAAsERI5uAAfL7gALBC5ACUAAfS4ABIQuQA9AAH0uAAYELkARAAB9LgAHxC5AEcAAfQwMTcUFjMyNjcuASc1DgMDPgEzMhYXPgEzMh4CFRQHIR4DMzI2NxcOASMiJicOASMiJjU0Njc0LgIjIgYHBTQmIyIGB4sxJCJQIQgKATpRMxc8ImA2NkYPHVEyLUUvGAP+xQEZKDYfIzgbHiBMMj1SHDJlLz5RjpgIFyYeKEgdAjM7ODNJB4QqJCckEzUcGQgWHicBGBYpNzAwNyA8VTQcEiY+LBgXETkUHjckLS5IQlBVERcsIhUgFGRLUFNIAAAA//8ALv8rAbAB8gImACAAAAAHAxYBEAAA//8ALv/0AbACygImACAAAAAHAvgBFwAA//8ALv/0AbACygImACAAAAAHAvoBFwAA//8ALv/0AbACygImACAAAAAHAwwBFwAA//8ALv/0AbACtgImACAAAAAHAwIBFwAA//8AL//0AkkC+AAmACEAAAAHAzQCKwAA//8AL/8yAdkCyAImACEAAAAHAxMBLgAA//8AL/9VAdkCyAImACEAAAAHAxsBLQAAAAIAL//0AiECyAAOACsAbgC4AB8vuAAARVi4ACgvG7kAKAAQPlm4AABFWLgAFy8buQAXAAQ+WbgAAEVYuAASLxu5ABIABD5ZuAAfELkAAwAB9LgAFxC5AAsAAfS6ACQAEgAoERI5uAAkL7gAENC4ACQQuQAnAAH0uAAq0DAxAS4BIyIOAhUUFjMyNjcTBxEjJyMOASMiJjU0PgIzMhYXJzUjNTM1MxUzAYYfOR4dMyYWRkAiPB6bSEYGAxxKLFxtIzpMKio+IAShoVNIAWYcFxkvQSdUXCEiAcQF/cU3HCd+djlbQCIeGlNCMF1dAAAA//8ALv/0AcoCygImACIAAAAHAvYBCQAA//8ALv/0AcoCygImACIAAAAHAvgBCQAA//8ALv/0AcoCygImACIAAAAHAvoBCQAA//8ALv/0AcoCygImACIAAAAHAwwBCQAA//8ALv/0AcoCrgImACIAAAAHAwQBCQAA//8ALv/0AcoCkgImACIAAAAHAv4BCQAA//8ALv/0AcoCvgImACIAAAAHAwABCQAA//8ALv/0AcoCtgImACIAAAAHAwIBCQAA//8ALv8yAcoB8gImACIAAAAHAxMBBwAA//8ALv/0AcoC1wImACIAAAAHAwYBCQAA//8ALv/0AcoCrQImACIAAAAHAvwBCQAA//8ALv/0AfEC8gImACIAAAAHAyQBCQAA//8ALv/0AdIC8gImACIAAAAHAyYBCQAA//8ALv/0AdoDEAImACIAAAAHAygBCQAA//8ALv/0AcoDIgImACIAAAAHAyoBCQAA//8ALv8yAcoCygImACIAAAAnAvoBCQAAAAcDEwEGAAAAAgAu/zIBygHyADIAOwBZALgAAEVYuAAFLxu5AAUACD5ZuAAARVi4AC4vG7kALgAEPlm6ABwAIwADK7oADAAFAC4REjm4AAwvuAAuELkAEAAB9LgABRC5ADYAAfS4AAwQuQA7AAH0MDE3ND4CMzIeAhUUByEeATMyNjcXDgMVFBYzMjY3Fw4BIyImNTQ+AjcOASMiLgIlNCYjIg4CBy4lPU4qLkkxGgP+uAVXRiM7Gx0hKhoKHBMMEwkVDi0TJjQLEhUKDRgMMVU/JAFUPjoaLyYZBPI8X0IjIDxUNBsST1wVETYXJyIfEBcXBwYpCxArKhMiHhgJBQIjQV5hS08VJzklAP//AC3/IAHsAsoCJgAkAAAABwL6AO8AAP//AC3/IAHsAr4CJgAkAAAABwMAAO8AAP//AC3/IAHsArYCJgAkAAAABwMCAO8AAP//AC3/IAHsAsYCJgAkAAAABwM1AO8AAP//AC3/IAHsAsoCJgAkAAAABwMMAO8AAP//AC3/IAHsApICJgAkAAAABwL+AO8AAP//AC3/IAHsAq0CJgAkAAAABwL8AO8AAP////QAAAHXA1wCJgAlAAAABgL7fCoAAP//AFL/MgHXAsgCJgAlAAAABwMTAR4AAP//AFL/MgHXAsgCJgAlAAAABwMaAR0AAAABAAgAAAHXAsgAHABZALgAAEVYuAAWLxu5ABYAED5ZuAAARVi4ABEvG7kAEQAEPlm4ABYQuAAV0LgAFS+5ABIAAfS4ABrQuAAD0LgAERC4AAjQuAADELkADAAB9LgAFRC4ABnQMDETPgEzMhYVESMRNCYjIgYHESMRIzU3NTMVMxUjFaEjTDNNR1IsMCY6JVJKSlK2tgGOIS9gXv7gARVFPSYl/rQCOysFXV0wSQAA//8ADAAAALwCygImAS0AAAAGAvZ7AAAA//8AOgAAAOoCygImAS0AAAAGAvh7AAAA////+gAAAPwCygImAS0AAAAGAvp7AAAA////8AAAAQYCrQImAS0AAAAGAvx7AAAA////9AAAAQICrgImAS0AAAAGAwR7AAAA//8AAAAAAPYCkgImAS0AAAAGAv57AAAA////+gAAAPwCygImAS0AAAAGAwx7AAAA//8AOwAAAM4C1wImAS0AAAAGAwZ7AAAA//8AQ/8yALUCtAImACYAAAAGAxN8AAAAAAIAJv8yAM8CtAAWACIAPQC4AABFWLgAAC8buQAAAAg+WbgAAEVYuAAWLxu5ABYABD5ZugAXAB0AAyu6AAgADwADK7gAFhC4AALQMDETMxEOARUUFjMyNjcXDgEjIiY1NDY3IxMiJjU0NjMyFhUUBlJSHiMcEwsTChUOLRMmNSsVFCkYISEYFyEhAeb+GhY2HRcXBwYpCxArKig8FQJKHhcYHR0YFx4AAAEAJv8yAM8B5gAWADUAuAAARVi4AAAvG7kAAAAIPlm4AABFWLgAFi8buQAWAAQ+WboACAAPAAMruAAWELgAAtAwMRMzEQ4BFRQWMzI2NxcOASMiJjU0NjcjUlIeIxwTCxMKFQ4tEyY1KxUUAeb+GhY2HRcXBwYpCxArKig8FQAAAQBSAAAApAHmAAMAJQC4AABFWLgAAC8buQAAAAg+WbgAAEVYuAACLxu5AAIABD5ZMDETMxEjUlJSAeb+GgAA////2P8nAPwCygImAZcAAAAGAvp7AAAA//8AUv8oAeYCyAImACgAAAAHAxUBDwAAAAEAUgAAAeYB5gAMAFMAuAAARVi4AAAvG7kAAAAIPlm4AABFWLgADC8buQAMAAQ+WboAAgAAAAwREjm4AAAQuAAE0LgADBC4AAjQugAGAAAACBESOboACQAAAAwREjkwMRMzETMTMwcTIycHFSNSUgPOW6G3Wo5aUgHm/v4BAsP+3edqfQAAAP//AET/9AD6A2YCJgApAAAABgL5dzQAAP//AFL/9AEUAvgAJgApAAAABwM0APYAAP//AFL/9AFrAsgAJgApAAAABwH9ALMBE///AFL/KADuAsgCJgApAAAABwMVAKoAAP//AFL/MgDgAsgCJgApAAAABwMTAKoAAP//////MgD1A28CJgApAAAAJwL+AHoA3QAHAxMAqgAA//8ALv9VASUCyAImACkAAAAHAxsAqgAAAAEAF//0AO8CyAAXAE0AuAAARVi4ABMvG7kAEwAQPlm4AABFWLgACy8buQALAAQ+WboADwALABMREjm4AA8vuAAA0LgACxC5AAQAAfS4AA8QuAAS3LgAFdAwMRMRFBYzOgE3Fw4BIyImPQEHNTcRMxE3FakOCQMHCAsJFhEuKT8/U0YBdv7mFBACPgQEODbpKEYoATf+9C1GAAAA//8AUv8yAvEB8gImACoAAAAHAxMBqgAA//8AUgAAAdcCygImACsAAAAHAvgBJAAA//8AUgAAAdcCygImACsAAAAHAwwBJAAA//8AUgAAAdcCrQImACsAAAAHAvwBJAAA//8AUv8oAdcB8gImACsAAAAHAxUBFwAA//8AUgAAAdcCtgImACsAAAAHAwIBJAAA//8AUv8yAdcB8gImACsAAAAHAxMBFwAA//8AUv9VAdcB8gImACsAAAAHAxsBFwAA//8APwAAArUCuwAmAgkAAAAHACsA3gAA//8ALv/0AfACygImACwAAAAHAvYBDwAA//8ALv/0AfACygImACwAAAAHAvgBDwAA//8ALv/0AfACygImACwAAAAHAvoBDwAA//8ALv/0AfACrQImACwAAAAHAvwBDwAA//8ALv/0AfACrgImACwAAAAHAwQBDwAA//8ALv/0AfACkgImACwAAAAHAv4BDwAA//8ALv/0AfACygImACwAAAAHAwoBDwAA//8ALv/0AfACygIm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AAEQuAAI3LkAEQAB9DAxAzMXIycjByM3Ii4CJzMeATMyNjczDgMmTFY6QARAOnwdKR0PAS0EISEhIQQtAg4dKgKjaEFBhhAbIxMWHh4WEyMbEAAAAAL/gALCAIADqgAHABUAIwC7AAEAAQADAAQruAADELgABtC4AAEQuAAI3LkADwAB9DAxAzMXIycjByM3IiYnMx4BMzI2NzMOASRIXD8/BD8/gDo7BS0GIyQkIwYtBTsDLGo+Poc5KBceHhcoOQAAAAAAACIBngABAAAAAAAAAEUAAAABAAAAAAABAA8ARQABAAAAAAACAAcAVAABAAAAAAADACYAWwABAAAAAAAEAA8ARQABAAAAAAAFAEEAgQABAAAAAAAGABUAwgABAAAAAAAHAGAA1wABAAAAAAAIABoBNwABAAAAAAAJAAwBUQABAAAAAAALABkBXQABAAAAAAANEdkBdgABAAAAAAAOACQTTwABAAAAAAEAAAoTcwABAAAAAAEBAAsTfQABAAAAAAECAAsTiAABAAAAAAEDAAkTkwADAAEECQAAAIoTnAADAAEECQABAB4UJgADAAEECQACAA4URAADAAEECQADAEwUUgADAAEECQAEAB4UJgADAAEECQAFAIIUngADAAEECQAGACoVIAADAAEECQAHAMAVSgADAAEECQAIADQWCgADAAEECQAJABgWPgADAAEECQALADIWVgADAAEECQANI7YWiAADAAEECQAOAEg6PgADAAEECQEAABQ6hgADAAEECQEBABY6mgADAAEECQECABY6sAADAAEECQEDABI6xkNvcHlyaWdodCAyMDEwLCAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgUmlnaHRzIFJlc2VydmVkLlNvdXJjZSBTYW5zIFByb1JlZ3VsYXIxLjAzNjtBREJFO1NvdXJjZVNhbnNQcm8tUmVndWxhcjtBRE9CRVZlcnNpb24gMS4wMzY7UFMgVmVyc2lvbiAxLjAwMDtob3Rjb252IDEuMC43MDttYWtlb3RmLmxpYjIuNS41OTAwU291cmNlU2Fuc1Byby1SZWd1bGFyU291cmNlIGlzIGEgdHJhZGVtYXJrIG9mIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZC9vciBvdGhlciBjb3VudHJpZXMuQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWRQYXVsIEQuIEh1bnRodHRwOi8vd3d3LmFkb2JlLmNvbS90eXBlQ29weXJpZ2h0IDIwMTAsIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgKGh0dHA6Ly93d3cuYWRvYmUuY29tLyksIHdpdGggUmVzZXJ2ZWQgRm9udCBOYW1lICdTb3VyY2UnLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBTb3VyY2UgaXMgYSB0cmFkZW1hcmsgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kL29yIG90aGVyIGNvdW50cmllcy4NCg0KVGhpcyBGb250IFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBTSUwgT3BlbiBGb250IExpY2Vuc2UsIFZlcnNpb24gMS4xLg0KDQpUaGlzIGxpY2Vuc2UgaXMgY29waWVkIGJlbG93LCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgd2l0aCBhIEZBUSBhdDogaHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClNJTCBPUEVOIEZPTlQgTElDRU5TRSBWZXJzaW9uIDEuMSAtIDI2IEZlYnJ1YXJ5IDIwMDcNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClBSRUFNQkxFDQpUaGUgZ29hbHMgb2YgdGhlIE9wZW4gRm9udCBMaWNlbnNlIChPRkwpIGFyZSB0byBzdGltdWxhdGUgd29ybGR3aWRlIGRldmVsb3BtZW50IG9mIGNvbGxhYm9yYXRpdmUgZm9udCBwcm9qZWN0cywgdG8gc3VwcG9ydCB0aGUgZm9udCBjcmVhdGlvbiBlZmZvcnRzIG9mIGFjYWRlbWljIGFuZCBsaW5ndWlzdGljIGNvbW11bml0aWVzLCBhbmQgdG8gcHJvdmlkZSBhIGZyZWUgYW5kIG9wZW4gZnJhbWV3b3JrIGluIHdoaWNoIGZvbnRzIG1heSBiZSBzaGFyZWQgYW5kIGltcHJvdmVkIGluIHBhcnRuZXJzaGlwIHdpdGggb3RoZXJzLg0KDQpUaGUgT0ZMIGFsbG93cyB0aGUgbGljZW5zZWQgZm9udHMgdG8gYmUgdXNlZCwgc3R1ZGllZCwgbW9kaWZpZWQgYW5kIHJlZGlzdHJpYnV0ZWQgZnJlZWx5IGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IHNvbGQgYnkgdGhlbXNlbHZlcy4gVGhlIGZvbnRzLCBpbmNsdWRpbmcgYW55IGRlcml2YXRpdmUgd29ya3MsIGNhbiBiZSBidW5kbGVkLCBlbWJlZGRlZCwgcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSBwcm92aWRlZCB0aGF0IGFueSByZXNlcnZlZCBuYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywgaG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyIGFueSBvdGhlciB0eXBlIG9mIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgZm9udHMgb3IgdGhlaXIgZGVyaXZhdGl2ZXMuDQoNCkRFRklOSVRJT05TDQoiRm9udCBTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heSBpbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi4NCg0KIlJlc2VydmVkIEZvbnQgTmFtZSIgcmVmZXJzIHRvIGFueSBuYW1lcyBzcGVjaWZpZWQgYXMgc3VjaCBhZnRlciB0aGUgY29weXJpZ2h0IHN0YXRlbWVudChzKS4NCg0KIk9yaWdpbmFsIFZlcnNpb24iIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMgYXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykuDQoNCiJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLCBvciBzdWJzdGl0dXRpbmcgLS0gaW4gcGFydCBvciBpbiB3aG9sZSAtLSBhbnkgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlIE9yaWdpbmFsIFZlcnNpb24sIGJ5IGNoYW5naW5nIGZvcm1hdHMgb3IgYnkgcG9ydGluZyB0aGUgRm9udCBTb2Z0d2FyZSB0byBhIG5ldyBlbnZpcm9ubWVudC4NCg0KIkF1dGhvciIgcmVmZXJzIHRvIGFueSBkZXNpZ25lciwgZW5naW5lZXIsIHByb2dyYW1tZXIsIHRlY2huaWNhbCB3cml0ZXIgb3Igb3RoZXIgcGVyc29uIHdobyBjb250cmlidXRlZCB0byB0aGUgRm9udCBTb2Z0d2FyZS4NCg0KUEVSTUlTU0lPTiAmIENPTkRJVElPTlMNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhlIEZvbnQgU29mdHdhcmUsIHRvIHVzZSwgc3R1ZHksIGNvcHksIG1lcmdlLCBlbWJlZCwgbW9kaWZ5LCByZWRpc3RyaWJ1dGUsIGFuZCBzZWxsIG1vZGlmaWVkIGFuZCB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNCjEpIE5laXRoZXIgdGhlIEZvbnQgU29mdHdhcmUgbm9yIGFueSBvZiBpdHMgaW5kaXZpZHVhbCBjb21wb25lbnRzLCBpbiBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucywgbWF5IGJlIHNvbGQgYnkgaXRzZWxmLg0KDQoyKSBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgYnVuZGxlZCwgcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCBlYWNoIGNvcHkgY29udGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbGljZW5zZS4gVGhlc2UgY2FuIGJlIGluY2x1ZGVkIGVpdGhlciBhcyBzdGFuZC1hbG9uZSB0ZXh0IGZpbGVzLCBodW1hbi1yZWFkYWJsZSBoZWFkZXJzIG9yIGluIHRoZSBhcHByb3ByaWF0ZSBtYWNoaW5lLXJlYWRhYmxlIG1ldGFkYXRhIGZpZWxkcyB3aXRoaW4gdGV4dCBvciBiaW5hcnkgZmlsZXMgYXMgbG9uZyBhcyB0aG9zZSBmaWVsZHMgY2FuIGJlIGVhc2lseSB2aWV3ZWQgYnkgdGhlIHVzZXIuDQoNCjMpIE5vIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IHVzZSB0aGUgUmVzZXJ2ZWQgRm9udCBOYW1lKHMpIHVubGVzcyBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBDb3B5cmlnaHQgSG9sZGVyLiBUaGlzIHJlc3RyaWN0aW9uIG9ubHkgYXBwbGllcyB0byB0aGUgcHJpbWFyeSBmb250IG5hbWUgYXMgcHJlc2VudGVkIHRvIHRoZSB1c2Vycy4NCg0KNCkgVGhlIG5hbWUocykgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIocykgb3IgdGhlIEF1dGhvcihzKSBvZiB0aGUgRm9udCBTb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCB0byBwcm9tb3RlLCBlbmRvcnNlIG9yIGFkdmVydGlzZSBhbnkgTW9kaWZpZWQgVmVyc2lvbiwgZXhjZXB0IHRvIGFja25vd2xlZGdlIHRoZSBjb250cmlidXRpb24ocykgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIocykgYW5kIHRoZSBBdXRob3Iocykgb3Igd2l0aCB0aGVpciBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24uDQoNCjUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLCBtdXN0IGJlIGRpc3RyaWJ1dGVkIGVudGlyZWx5IHVuZGVyIHRoaXMgbGljZW5zZSwgYW5kIG11c3Qgbm90IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlLiBUaGUgcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvIHJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQgdXNpbmcgdGhlIEZvbnQgU29mdHdhcmUuDQoNClRFUk1JTkFUSU9ODQpUaGlzIGxpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIGlmIGFueSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4NCg0KRElTQ0xBSU1FUg0KVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBDT1BZUklHSFQsIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00gT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUuaHR0cDovL3d3dy5hZG9iZS5jb20vdHlwZS9sZWdhbC5odG1sU3RyYWlnaHQgbEFsdGVybmF0ZSBhQWx0ZXJuYXRlIGdTZXJpZmVkIEkAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQAwACwAIAAyADAAMQAyACAAQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUwBvAHUAcgBjAGUAIABTAGEAbgBzACAAUAByAG8AUgBlAGcAdQBsAGEAcgAxAC4AMAAzADYAOwBBAEQAQgBFADsAUwBvAHUAcgBjAGUAUwBhAG4AcwBQAHIAbwAtAFIAZQBnAHUAbABhAHIAOwBBAEQATwBCAEUAVgBlAHIAcwBpAG8AbgAgADEALgAwADMANgA7AFAAUwAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADAAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADkAMAAwAFMAbwB1AHIAYwBlAFMAYQBuAHMAUAByAG8ALQBSAGUAZwB1AGwAYQByAFMAbwB1AHIAYwBlACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAAQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAaQBuACAAdABoAGUAIABVAG4AaQB0AGUAZAAgAFMAdABhAHQAZQBzACAAYQBuAGQALwBvAHIAIABvAHQAaABlAHIAIABjAG8AdQBuAHQAcgBpAGUAcwAuAEEAZABvAGIAZQAgAFMAeQBzAHQAZQBtAHMAIABJAG4AYwBvAHIAcABvAHIAYQB0AGUAZABQAGEAdQBsACAARAAuACAASAB1AG4AdABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBkAG8AYgBlAC4AYwBvAG0ALwB0AHkAcABlAEMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADEAMAAsACAAMgAwADEAMgAgAEEAZABvAGIAZQAgAFMAeQBzAHQAZQBtAHMAIABJAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgACgAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAZABvAGIAZQAuAGMAbwBtAC8AKQAsACAAdwBpAHQAaAAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACAAJwBTAG8AdQByAGMAZQAnAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AIABTAG8AdQByAGMAZQAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEEAZABvAGIAZQAgAFMAeQBzAHQAZQBtAHMAIABJAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGkAbgAgAHQAaABlACAAVQBuAGkAdABlAGQAIABTAHQAYQB0AGUAcwAgAGEAbgBkAC8AbwByACAAbwB0AGgAZQByACAAYwBvAHUAbgB0AHIAaQBlAHMALgANAAoADQAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ADQAKAA0ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGkAcwAgAGMAbwBwAGkAZQBkACAAYgBlAGwAbwB3ACwAIABhAG4AZAAgAGkAcwAgAGEAbABzAG8AIABhAHYAYQBpAGwAYQBiAGwAZQAgAHcAaQB0AGgAIABhACAARgBBAFEAIABhAHQAOgAgAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAANAAoADQAKAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQANAAoAUwBJAEwAIABPAFAARQBOACAARgBPAE4AVAAgAEwASQBDAEUATgBTAEUAIABWAGUAcgBzAGkAbwBuACAAMQAuADEAIAAtACAAMgA2ACAARgBlAGIAcgB1AGEAcgB5ACAAMgAwADAANwANAAoALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAA0ACgANAAoAUABSAEUAQQBNAEIATABFAA0ACgBUAGgAZQAgAGcAbwBhAGwAcwAgAG8AZgAgAHQAaABlACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACAAKABPAEYATAApACAAYQByAGUAIAB0AG8AIABzAHQAaQBtAHUAbABhAHQAZQAgAHcAbwByAGwAZAB3AGkAZABlACAAZABlAHYAZQBsAG8AcABtAGUAbgB0ACAAbwBmACAAYwBvAGwAbABhAGIAbwByAGEAdABpAHYAZQAgAGYAbwBuAHQAIABwAHIAbwBqAGUAYwB0AHMALAAgAHQAbwAgAHMAdQBwAHAAbwByAHQAIAB0AGgAZQAgAGYAbwBuAHQAIABjAHIAZQBhAHQAaQBvAG4AIABlAGYAZgBvAHIAdABzACAAbwBmACAAYQBjAGEAZABlAG0AaQBjACAAYQBuAGQAIABsAGkAbgBnAHUAaQBzAHQAaQBjACAAYwBvAG0AbQB1AG4AaQB0AGkAZQBzACwAIABhAG4AZAAgAHQAbwAgAHAAcgBvAHYAaQBkAGUAIABhACAAZgByAGUAZQAgAGEAbgBkACAAbwBwAGUAbgAgAGYAcgBhAG0AZQB3AG8AcgBrACAAaQBuACAAdwBoAGkAYwBoACAAZgBvAG4AdABzACAAbQBhAHkAIABiAGUAIABzAGgAYQByAGUAZAAgAGEAbgBkACAAaQBtAHAAcgBvAHYAZQBkACAAaQBuACAAcABhAHIAdABuAGUAcgBzAGgAaQBwACAAdwBpAHQAaAAgAG8AdABoAGUAcgBzAC4ADQAKAA0ACgBUAGgAZQAgAE8ARgBMACAAYQBsAGwAbwB3AHMAIAB0AGgAZQAgAGwAaQBjAGUAbgBzAGUAZAAgAGYAbwBuAHQAcwAgAHQAbwAgAGIAZQAgAHUAcwBlAGQALAAgAHMAdAB1AGQAaQBlAGQALAAgAG0AbwBkAGkAZgBpAGUAZAAgAGEAbgBkACAAcgBlAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGYAcgBlAGUAbAB5ACAAYQBzACAAbABvAG4AZwAgAGEAcwAgAHQAaABlAHkAIABhAHIAZQAgAG4AbwB0ACAAcwBvAGwAZAAgAGIAeQAgAHQAaABlAG0AcwBlAGwAdgBlAHMALgAgAFQAaABlACAAZgBvAG4AdABzACwAIABpAG4AYwBsAHUAZABpAG4AZwAgAGEAbgB5ACAAZABlAHIAaQB2AGEAdABpAHYAZQAgAHcAbwByAGsAcwAsACAAYwBhAG4AIABiAGUAIABiAHUAbgBkAGwAZQBkACwAIABlAG0AYgBlAGQAZABlAGQALAAgAHIAZQBkAGkAcwB0AHIAaQBiAHUAdABlAGQAIABhAG4AZAAvAG8AcgAgAHMAbwBsAGQAIAB3AGkAdABoACAAYQBuAHkAIABzAG8AZgB0AHcAYQByAGUAIABwAHIAbwB2AGkAZABlAGQAIAB0AGgAYQB0ACAAYQBuAHkAIAByAGUAcwBlAHIAdgBlAGQAIABuAGEAbQBlAHMAIABhAHIAZQAgAG4AbwB0ACAAdQBzAGUAZAAgAGIAeQAgAGQAZQByAGkAdgBhAHQAaQB2AGUAIAB3AG8AcgBrAHMALgAgAFQAaABlACAAZgBvAG4AdABzACAAYQBuAGQAIABkAGUAcgBpAHYAYQB0AGkAdgBlAHMALAAgAGgAbwB3AGUAdgBlAHIALAAgAGMAYQBuAG4AbwB0ACAAYgBlACAAcgBlAGwAZQBhAHMAZQBkACAAdQBuAGQAZQByACAAYQBuAHkAIABvAHQAaABlAHIAIAB0AHkAcABlACAAbwBmACAAbABpAGMAZQBuAHMAZQAuACAAVABoAGUAIAByAGUAcQB1AGkAcgBlAG0AZQBuAHQAIABmAG8AcgAgAGYAbwBuAHQAcwAgAHQAbwAgAHIAZQBtAGEAaQBuACAAdQBuAGQAZQByACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABkAG8AZQBzACAAbgBvAHQAIABhAHAAcABsAHkAIAB0AG8AIABhAG4AeQAgAGQAbwBjAHUAbQBlAG4AdAAgAGMAcgBlAGEAdABlAGQAIAB1AHMAaQBuAGcAIAB0AGgAZQAgAGYAbwBuAHQAcwAgAG8AcgAgAHQAaABlAGkAcgAgAGQAZQByAGkAdgBhAHQAaQB2AGUAcwAuAA0ACgANAAoARABFAEYASQBOAEkAVABJAE8ATgBTAA0ACgAiAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIgAgAHIAZQBmAGUAcgBzACAAdABvACAAdABoAGUAIABzAGUAdAAgAG8AZgAgAGYAaQBsAGUAcwAgAHIAZQBsAGUAYQBzAGUAZAAgAGIAeQAgAHQAaABlACAAQwBvAHAAeQByAGkAZwBoAHQAIABIAG8AbABkAGUAcgAoAHMAKQAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYQBuAGQAIABjAGwAZQBhAHIAbAB5ACAAbQBhAHIAawBlAGQAIABhAHMAIABzAHUAYwBoAC4AIABUAGgAaQBzACAAbQBhAHkAIABpAG4AYwBsAHUAZABlACAAcwBvAHUAcgBjAGUAIABmAGkAbABlAHMALAAgAGIAdQBpAGwAZAAgAHMAYwByAGkAcAB0AHMAIABhAG4AZAAgAGQAbwBjAHUAbQBlAG4AdABhAHQAaQBvAG4ALgANAAoADQAKACIAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIgAgAHIAZQBmAGUAcgBzACAAdABvACAAYQBuAHkAIABuAGEAbQBlAHMAIABzAHAAZQBjAGkAZgBpAGUAZAAgAGEAcwAgAHMAdQBjAGgAIABhAGYAdABlAHIAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAcwB0AGEAdABlAG0AZQBuAHQAKABzACkALgANAAoADQAKACIATwByAGkAZwBpAG4AYQBsACAAVgBlAHIAcwBpAG8AbgAiACAAcgBlAGYAZQByAHMAIAB0AG8AIAB0AGgAZQAgAGMAbwBsAGwAZQBjAHQAaQBvAG4AIABvAGYAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAYwBvAG0AcABvAG4AZQBuAHQAcwAgAGEAcwAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGIAeQAgAHQAaABlACAAQwBvAHAAeQByAGkAZwBoAHQAIABIAG8AbABkAGUAcgAoAHMAKQAuAA0ACgANAAoAIgBNAG8AZABpAGYAaQBlAGQAIABWAGUAcgBzAGkAbwBuACIAIAByAGUAZgBlAHIAcwAgAHQAbwAgAGEAbgB5ACAAZABlAHIAaQB2AGEAdABpAHYAZQAgAG0AYQBkAGUAIABiAHkAIABhAGQAZABpAG4AZwAgAHQAbwAsACAAZABlAGwAZQB0AGkAbgBnACwAIABvAHIAIABzAHUAYgBzAHQAaQB0AHUAdABpAG4AZwAgAC0ALQAgAGkAbgAgAHAAYQByAHQAIABvAHIAIABpAG4AIAB3AGgAbwBsAGUAIAAtAC0AIABhAG4AeQAgAG8AZgAgAHQAaABlACAAYwBvAG0AcABvAG4AZQBuAHQAcwAgAG8AZgAgAHQAaABlACAATwByAGkAZwBpAG4AYQBsACAAVgBlAHIAcwBpAG8AbgAsACAAYgB5ACAAYwBoAGEAbgBnAGkAbgBnACAAZgBvAHIAbQBhAHQAcwAgAG8AcgAgAGIAeQAgAHAAbwByAHQAaQBuAGcAIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIAB0AG8AIABhACAAbgBlAHcAIABlAG4AdgBpAHIAbwBuAG0AZQBuAHQALgANAAoADQAKACIAQQB1AHQAaABvAHIAIgAgAHIAZQBmAGUAcgBzACAAdABvACAAYQBuAHkAIABkAGUAcwBpAGcAbgBlAHIALAAgAGUAbgBnAGkAbgBlAGUAcgAsACAAcAByAG8AZwByAGEAbQBtAGUAcgAsACAAdABlAGMAaABuAGkAYwBhAGwAIAB3AHIAaQB0AGUAcgAgAG8AcgAgAG8AdABoAGUAcgAgAHAAZQByAHMAbwBuACAAdwBoAG8AIABjAG8AbgB0AHIAaQBiAHUAdABlAGQAIAB0AG8AIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUALgANAAoADQAKAFAARQBSAE0ASQBTAFMASQBPAE4AIAAmACAAQwBPAE4ARABJAFQASQBPAE4AUwANAAoAUABlAHIAbQBpAHMAcwBpAG8AbgAgAGkAcwAgAGgAZQByAGUAYgB5ACAAZwByAGEAbgB0AGUAZAAsACAAZgByAGUAZQAgAG8AZgAgAGMAaABhAHIAZwBlACwAIAB0AG8AIABhAG4AeQAgAHAAZQByAHMAbwBuACAAbwBiAHQAYQBpAG4AaQBuAGcAIABhACAAYwBvAHAAeQAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAsACAAdABvACAAdQBzAGUALAAgAHMAdAB1AGQAeQAsACAAYwBvAHAAeQAsACAAbQBlAHIAZwBlACwAIABlAG0AYgBlAGQALAAgAG0AbwBkAGkAZgB5ACwAIAByAGUAZABpAHMAdAByAGkAYgB1AHQAZQAsACAAYQBuAGQAIABzAGUAbABsACAAbQBvAGQAaQBmAGkAZQBkACAAYQBuAGQAIAB1AG4AbQBvAGQAaQBmAGkAZQBkACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUALAAgAHMAdQBiAGoAZQBjAHQAIAB0AG8AIAB0AGgAZQAgAGYAbwBsAGwAbwB3AGkAbgBnACAAYwBvAG4AZABpAHQAaQBvAG4AcwA6AA0ACgANAAoAMQApACAATgBlAGkAdABoAGUAcgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAG4AbwByACAAYQBuAHkAIABvAGYAIABpAHQAcwAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABjAG8AbQBwAG8AbgBlAG4AdABzACwAIABpAG4AIABPAHIAaQBnAGkAbgBhAGwAIABvAHIAIABNAG8AZABpAGYAaQBlAGQAIABWAGUAcgBzAGkAbwBuAHMALAAgAG0AYQB5ACAAYgBlACAAcwBvAGwAZAAgAGIAeQAgAGkAdABzAGUAbABmAC4ADQAKAA0ACgAyACkAIABPAHIAaQBnAGkAbgBhAGwAIABvAHIAIABNAG8AZABpAGYAaQBlAGQAIABWAGUAcgBzAGkAbwBuAHMAIABvAGYAIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABtAGEAeQAgAGIAZQAgAGIAdQBuAGQAbABlAGQALAAgAHIAZQBkAGkAcwB0AHIAaQBiAHUAdABlAGQAIABhAG4AZAAvAG8AcgAgAHMAbwBsAGQAIAB3AGkAdABoACAAYQBuAHkAIABzAG8AZgB0AHcAYQByAGUALAAgAHAAcgBvAHYAaQBkAGUAZAAgAHQAaABhAHQAIABlAGEAYwBoACAAYwBvAHAAeQAgAGMAbwBuAHQAYQBpAG4AcwAgAHQAaABlACAAYQBiAG8AdgBlACAAYwBvAHAAeQByAGkAZwBoAHQAIABuAG8AdABpAGMAZQAgAGEAbgBkACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUALgAgAFQAaABlAHMAZQAgAGMAYQBuACAAYgBlACAAaQBuAGMAbAB1AGQAZQBkACAAZQBpAHQAaABlAHIAIABhAHMAIABzAHQAYQBuAGQALQBhAGwAbwBuAGUAIAB0AGUAeAB0ACAAZgBpAGwAZQBzACwAIABoAHUAbQBhAG4ALQByAGUAYQBkAGEAYgBsAGUAIABoAGUAYQBkAGUAcgBzACAAbwByACAAaQBuACAAdABoAGUAIABhAHAAcAByAG8AcAByAGkAYQB0AGUAIABtAGEAYwBoAGkAbgBlAC0AcgBlAGEAZABhAGIAbABlACAAbQBlAHQAYQBkAGEAdABhACAAZgBpAGUAbABkAHMAIAB3AGkAdABoAGkAbgAgAHQAZQB4AHQAIABvAHIAIABiAGkAbgBhAHIAeQAgAGYAaQBsAGUAcwAgAGEAcwAgAGwAbwBuAGcAIABhAHMAIAB0AGgAbwBzAGUAIABmAGkAZQBsAGQAcwAgAGMAYQBuACAAYgBlACAAZQBhAHMAaQBsAHkAIAB2AGkAZQB3AGUAZAAgAGIAeQAgAHQAaABlACAAdQBzAGUAcgAuAA0ACgANAAoAMwApACAATgBvACAATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAG0AYQB5ACAAdQBzAGUAIAB0AGgAZQAgAFIAZQBzAGUAcgB2AGUAZAAgAEYAbwBuAHQAIABOAGEAbQBlACgAcwApACAAdQBuAGwAZQBzAHMAIABlAHgAcABsAGkAYwBpAHQAIAB3AHIAaQB0AHQAZQBuACAAcABlAHIAbQBpAHMAcwBpAG8AbgAgAGkAcwAgAGcAcgBhAG4AdABlAGQAIABiAHkAIAB0AGgAZQAgAGMAbwByAHIAZQBzAHAAbwBuAGQAaQBuAGcAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByAC4AIABUAGgAaQBzACAAcgBlAHMAdAByAGkAYwB0AGkAbwBuACAAbwBuAGwAeQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAHAAcgBpAG0AYQByAHkAIABmAG8AbgB0ACAAbgBhAG0AZQAgAGEAcwAgAHAAcgBlAHMAZQBuAHQAZQBkACAAdABvACAAdABoAGUAIAB1AHMAZQByAHMALgANAAoADQAKADQAKQAgAFQAaABlACAAbgBhAG0AZQAoAHMAKQAgAG8AZgAgAHQAaABlACAAQwBvAHAAeQByAGkAZwBoAHQAIABIAG8AbABkAGUAcgAoAHMAKQAgAG8AcgAgAHQAaABlACAAQQB1AHQAaABvAHIAKABzACkAIABvAGYAIAB0AGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAHUAcwBlAGQAIAB0AG8AIABwAHIAbwBtAG8AdABlACwAIABlAG4AZABvAHIAcwBlACAAbwByACAAYQBkAHYAZQByAHQAaQBzAGUAIABhAG4AeQAgAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4ALAAgAGUAeABjAGUAcAB0ACAAdABvACAAYQBjAGsAbgBvAHcAbABlAGQAZwBlACAAdABoAGUAIABjAG8AbgB0AHIAaQBiAHUAdABpAG8AbgAoAHMAKQAgAG8AZgAgAHQAaABlACAAQwBvAHAAeQByAGkAZwBoAHQAIABIAG8AbABkAGUAcgAoAHMAKQAgAGEAbgBkACAAdABoAGUAIABBAHUAdABoAG8AcgAoAHMAKQAgAG8AcgAgAHcAaQB0AGgAIAB0AGgAZQBpAHIAIABlAHgAcABsAGkAYwBpAHQAIAB3AHIAaQB0AHQAZQBuACAAcABlAHIAbQBpAHMAcwBpAG8AbgAuAA0ACgANAAoANQApACAAVABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACwAIABtAG8AZABpAGYAaQBlAGQAIABvAHIAIAB1AG4AbQBvAGQAaQBmAGkAZQBkACwAIABpAG4AIABwAGEAcgB0ACAAbwByACAAaQBuACAAdwBoAG8AbABlACwAIABtAHUAcwB0ACAAYgBlACAAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAZQBuAHQAaQByAGUAbAB5ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUALAAgAGEAbgBkACAAbQB1AHMAdAAgAG4AbwB0ACAAYgBlACAAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAdQBuAGQAZQByACAAYQBuAHkAIABvAHQAaABlAHIAIABsAGkAYwBlAG4AcwBlAC4AIABUAGgAZQAgAHIAZQBxAHUAaQByAGUAbQBlAG4AdAAgAGYAbwByACAAZgBvAG4AdABzACAAdABvACAAcgBlAG0AYQBpAG4AIAB1AG4AZABlAHIAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGQAbwBlAHMAIABuAG8AdAAgAGEAcABwAGwAeQAgAHQAbwAgAGEAbgB5ACAAZABvAGMAdQBtAGUAbgB0ACAAYwByAGUAYQB0AGUAZAAgAHUAcwBpAG4AZwAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAuAA0ACgANAAoAVABFAFIATQBJAE4AQQBUAEkATwBOAA0ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGIAZQBjAG8AbQBlAHMAIABuAHUAbABsACAAYQBuAGQAIAB2AG8AaQBkACAAaQBmACAAYQBuAHkAIABvAGYAIAB0AGgAZQAgAGEAYgBvAHYAZQAgAGMAbwBuAGQAaQB0AGkAbwBuAHMAIABhAHIAZQAgAG4AbwB0ACAAbQBlAHQALgANAAoADQAKAEQASQBTAEMATABBAEkATQBFAFIADQAKAFQASABFACAARgBPAE4AVAAgAFMATwBGAFQAVwBBAFIARQAgAEkAUwAgAFAAUgBPAFYASQBEAEUARAAgACIAQQBTACAASQBTACIALAAgAFcASQBUAEgATwBVAFQAIABXAEEAUgBSAEEATgBUAFkAIABPAEYAIABBAE4AWQAgAEsASQBOAEQALAAgAEUAWABQAFIARQBTAFMAIABPAFIAIABJAE0AUABMAEkARQBEACwAIABJAE4AQwBMAFUARABJAE4ARwAgAEIAVQBUACAATgBPAFQAIABMAEkATQBJAFQARQBEACAAVABPACAAQQBOAFkAIABXAEEAUgBSAEEATgBUAEkARQBTACAATwBGACAATQBFAFIAQwBIAEEATgBUAEEAQgBJAEwASQBUAFkALAAgAEYASQBUAE4ARQBTAFMAIABGAE8AUgAgAEEAIABQAEEAUgBUAEkAQwBVAEwAQQBSACAAUABVAFIAUABPAFMARQAgAEEATgBEACAATgBPAE4ASQBOAEYAUgBJAE4ARwBFAE0ARQBOAFQAIABPAEYAIABDAE8AUABZAFIASQBHAEgAVAAsACAAUABBAFQARQBOAFQALAAgAFQAUgBBAEQARQBNAEEAUgBLACwAIABPAFIAIABPAFQASABFAFIAIABSAEkARwBIAFQALgAgAEkATgAgAE4ATwAgAEUAVgBFAE4AVAAgAFMASABBAEwATAAgAFQASABFACAAQwBPAFAAWQBSAEkARwBIAFQAIABIAE8ATABEAEUAUgAgAEIARQAgAEwASQBBAEIATABFACAARgBPAFIAIABBAE4AWQAgAEMATABBAEkATQAsACAARABBAE0AQQBHAEUAUwAgAE8AUgAgAE8AVABIAEUAUgAgAEwASQBBAEIASQBMAEkAVABZACwAIABJAE4AQwBMAFUARABJAE4ARwAgAEEATgBZACAARwBFAE4ARQBSAEEATAAsACAAUwBQAEUAQwBJAEEATAAsACAASQBOAEQASQBSAEUAQwBUACwAIABJAE4AQwBJAEQARQBOAFQAQQBMACwAIABPAFIAIABDAE8ATgBTAEUAUQBVAEUATgBUAEkAQQBMACAARABBAE0AQQBHAEUAUwAsACAAVwBIAEUAVABIAEUAUgAgAEkATgAgAEEATgAgAEEAQwBUAEkATwBOACAATwBGACAAQwBPAE4AVABSAEEAQwBUACwAIABUAE8AUgBUACAATwBSACAATwBUAEgARQBSAFcASQBTAEUALAAgAEEAUgBJAFMASQBOAEcAIABGAFIATwBNACwAIABPAFUAVAAgAE8ARgAgAFQASABFACAAVQBTAEUAIABPAFIAIABJAE4AQQBCAEkATABJAFQAWQAgAFQATwAgAFUAUwBFACAAVABIAEUAIABGAE8ATgBUACAAUwBPAEYAVABXAEEAUgBFACAATwBSACAARgBSAE8ATQAgAE8AVABIAEUAUgAgAEQARQBBAEwASQBOAEcAUwAgAEkATgAgAFQASABFACAARgBPAE4AVAAgAFMATwBGAFQAVwBBAFIARQAuAA0ACgBoAHQAdABwADoALwAvAHcAdwB3AC4AYQBkAG8AYgBlAC4AYwBvAG0ALwB0AHkAcABlAC8AbABlAGcAYQBsAC4AaAB0AG0AbABTAHQAcgBhAGkAZwBoAHQAIABsAEEAbAB0AGUAcgBuAGEAdABlACAAYQBBAGwAdABlAHIAbgBhAHQAZQAgAGcAUwBlAHIAaQBmAGUAZAAgAEkAAAACAAAAAAAA/7UAMgAAAAAAAAAAAAAAAAAAAAAAAAAAA0IAAAECAQMAAwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0ARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAK0AyQDHAK4AYgEEAQUAYwEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMAkABkAP0BFAD/ARUBFgEXARgBGQDLAGUAyAEaAMoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwD4ASgBKQEqASsBLAEtAS4BLwEwAM8AzADNATEAzgEyAPoBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwDiAUABQQFCAGYBQwFEAUUBRgDTANAA0QCvAGcBRwFIAUkBSgFLAUwBTQFOAU8BUACRALABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8A5AFgAWEBYgFjAWQBZQFmAWcBaAFpANYA1ADVAWoAaAFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEA6wGCALsBgwGEAYUBhgGHAOYBiAGJAOkA7QGKAGoAaQBrAG0AbAGLAYwAbgGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoAoABvAP4BmwEAAZwBnQGeAZ8BAQBxAHAAcgGgAHMBoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQD5Aa4BrwGwAbEBsgGzAbQBtQG2AHUAdAB2AbcAdwG4AbkBugG7AbwBvQDXAb4BvwHAAcEBwgHDAcQBxQHGAccA4wHIAckBygB4AcsBzAHNAc4BzwB6AHkAewB9AHwB0AHRAdIB0wHUAdUB1gHXAdgB2QChALEB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegA5QHpAeoB6wHsAIkB7QHuAe8B8AHxAfIAfwB+AIAB8wCBAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgDsAgsAugIMAg0CDgIPAhAA5wIRAhIA6gDuAhMCFAIVAhYCFwDAAMECGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0ACQATABQAFQAWABcAGAAZABoAGwAcAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrABEADwAdAB4AqwAEAKMAIgCiAAoABQC2ALcAtAC1AMQAxQC+AL8AqQCqABACbACyALMCbQJuAMMAhwBCAAsADAA+AEAAXgBgABIAXwA/AOgADQCCAMIAhgCIAIsCbwCKAIwCcAAjAnEABgJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkAnQKqAJ4CqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAIMAvQAHAIUAlgLLAIQCzALNAs4CzwLQAtEC0gLTAtQC1QLWALwC1wLYAAgAxgD1APQA9gLZAtoC2wLcAt0C3gAOAO8A8AC4At8AIAAfACEAlACVAJMAQQCPAGEApwCkAJsAkgLgAJgAnAClAuEC4gCZAJoC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AC5AvkC+gL7AvwC/QL+AEMAjQDYAOEC/wMAAwEDAgMDANkAjgDaANsA3QDfANwA3gDgAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08ETlVMTAJDUgdBbWFjcm9uBkFicmV2ZQd1bmkwMUNEB3VuaTFFQTAHdW5pMUVBMgd1bmkxRUE0B3VuaTFFQTYHdW5pMUVBOAd1bmkxRUFBB3VuaTFFQUMHdW5pMUVBRQd1bmkxRUIwB3VuaTFFQjIHdW5pMUVCNAd1bmkxRUI2B0FvZ29uZWsLQ2NpcmN1bWZsZXgKQ2RvdGFjY2VudAZEY2Fyb24HdW5pMUUwQwd1bmkxRTBFBkRjcm9hdAZFY2Fyb24HRW1hY3JvbgZFYnJldmUKRWRvdGFjY2VudAd1bmkxRUI4B3VuaTFFQkEHdW5pMUVCQwd1bmkxRUJFB3VuaTFFQzAHdW5pMUVDMgd1bmkxRUM0B3VuaTFFQzYHRW9nb25lawtHY2lyY3VtZmxleApHZG90YWNjZW50B3VuaTAxMjIGR2Nhcm9uB3VuaTFFMjALdW5pMDA0NzAzMDMLSGNpcmN1bWZsZXgHdW5pMUUyNAd1bmkxRTJBBEhiYXIGSXRpbGRlB0ltYWNyb24HdW5pMDFDRgd1bmkxRUM4B3VuaTFFQ0EHSW9nb25lawtKY2lyY3VtZmxleAd1bmkwMTM2BkxhY3V0ZQZMY2Fyb24HdW5pMDEzQgRMZG90B3VuaTFFMzYHdW5pMUUzOAd1bmkxRTNBB3VuaTFFNDIGTmFjdXRlBk5jYXJvbgd1bmkwMTQ1B3VuaTFFNDQHdW5pMUU0Ngd1bmkxRTQ4B09tYWNyb24NT2h1bmdhcnVtbGF1dAd1bmkwMUQxB3VuaTFFQ0MHdW5pMUVDRQd1bmkxRUQwB3VuaTFFRDIHdW5pMUVENAd1bmkxRUQ2B3VuaTFFRDgFT2hvcm4HdW5pMUVEQQd1bmkxRURDB3VuaTFFREUHdW5pMUVFMAd1bmkxRUUyB3VuaTAxRUEGUmFjdXRlBlJjYXJvbgd1bmkwMTU2B3VuaTFFNUEHdW5pMUU1Qwd1bmkxRTVFBlNhY3V0ZQtTY2lyY3VtZmxleAd1bmkwMTVFB3VuaTAyMTgHdW5pMUU2MAd1bmkxRTYyB3VuaTFFOUUGVGNhcm9uB3VuaTAxNjIHdW5pMDIxQQd1bmkxRTZDB3VuaTFFNkUGVXRpbGRlB1VtYWNyb24GVWJyZXZlBVVyaW5nDVVodW5nYXJ1bWxhdXQHdW5pMDFEMwd1bmkwMUQ1B3VuaTAxRDcHdW5pMDFEOQd1bmkwMURCB3VuaTFFRTQHdW5pMUVFNgdVb2dvbmVrBVVob3JuB3VuaTFFRTgHdW5pMUVFQQd1bmkxRUVDB3VuaTFFRUUHdW5pMUVGMAZXZ3JhdmUGV2FjdXRlC1djaXJjdW1mbGV4CVdkaWVyZXNpcwZZZ3JhdmULWWNpcmN1bWZsZXgHdW5pMUU4RQd1bmkxRUY0B3VuaTFFRjYHdW5pMUVGOAZaYWN1dGUKWmRvdGFjY2VudAd1bmkxRTkyB3VuaTAxOEYHYW1hY3JvbgZhYnJldmUHdW5pMDFDRQd1bmkxRUExB3VuaTFFQTMHdW5pMUVBNQd1bmkxRUE3B3VuaTFFQTkHdW5pMUVBQgd1bmkxRUFEB3VuaTFFQUYHdW5pMUVCMQd1bmkxRUIzB3VuaTFFQjUHdW5pMUVCNwdhb2dvbmVrC2NjaXJjdW1mbGV4CmNkb3RhY2NlbnQGZGNhcm9uB3VuaTFFMEQHdW5pMUUwRgZlY2Fyb24HZW1hY3JvbgZlYnJldmUKZWRvdGFjY2VudAd1bmkxRUI5B3VuaTFFQkIHdW5pMUVCRAd1bmkxRUJGB3VuaTFFQzEHdW5pMUVDMwd1bmkxRUM1B3VuaTFFQzcHZW9nb25lawtnY2lyY3VtZmxleApnZG90YWNjZW50B3VuaTAxMjMGZ2Nhcm9uB3VuaTFFMjELdW5pMDA2NzAzMDMLaGNpcmN1bWZsZXgHdW5pMUUyNQd1bmkxRTJCBGhiYXIGaXRpbGRlB2ltYWNyb24HdW5pMDFEMAd1bmkxRUM5B3VuaTFFQ0IHaW9nb25lawlpb2dvbmVrLmQLamNpcmN1bWZsZXgHdW5pMDEzNwxrZ3JlZW5sYW5kaWMGbGFjdXRlBmxjYXJvbgRsZG90B3VuaTAxM0MHdW5pMUUzNwd1bmkxRTM5B3VuaTFFM0IHdW5pMUU0MwZuYWN1dGUGbmNhcm9uB3VuaTAxNDYHdW5pMUU0NQd1bmkxRTQ3B3VuaTFFNDkLbmFwb3N0cm9waGUHb21hY3Jvbg1vaHVuZ2FydW1sYXV0B3VuaTAxRDIHdW5pMUVDRAd1bmkxRUNGB3VuaTFFRDEHdW5pMUVEMwd1bmkxRUQ1B3VuaTFFRDcHdW5pMUVEOQVvaG9ybgd1bmkxRURCB3VuaTFFREQHdW5pMUVERgd1bmkxRUUxB3VuaTFFRTMHdW5pMDFFQgZyYWN1dGUHdW5pMDE1NwZyY2Fyb24HdW5pMUU1Qgd1bmkxRTVEB3VuaTFFNUYGc2FjdXRlC3NjaXJjdW1mbGV4B3VuaTAxNUYHdW5pMDIxOQd1bmkxRTYxB3VuaTFFNjMGdGNhcm9uB3VuaTAxNjMHdW5pMDIxQgd1bmkxRTZEB3VuaTFFNkYHdW5pMUU5NwZ1dGlsZGUHdW1hY3JvbgZ1YnJldmUFdXJpbmcNdWh1bmdhcnVtbGF1dAd1bmkwMUQ0B3VuaTAxRDYHdW5pMDFEOAd1bmkwMURBB3VuaTAxREMHdW5pMUVFNQd1bmkxRUU3B3VvZ29uZWsFdWhvcm4HdW5pMUVFOQd1bmkxRUVCB3VuaTFFRUQHdW5pMUVFRgd1bmkxRUYxBndncmF2ZQZ3YWN1dGULd2NpcmN1bWZsZXgJd2RpZXJlc2lzBnlncmF2ZQt5Y2lyY3VtZmxleAd1bmkxRThGB3VuaTFFRjUHdW5pMUVGNwd1bmkxRUY5BnphY3V0ZQp6ZG90YWNjZW50B3VuaTFFOTMHdW5pMDIzNwd1bmkwMjUxB3VuaTAyNTkHdW5pMDI2MQNmX2YDZl90A0kuYQhJZ3JhdmUuYQhJYWN1dGUuYQ1JY2lyY3VtZmxleC5hCEl0aWxkZS5hC0lkaWVyZXNpcy5hCUltYWNyb24uYQxJZG90YWNjZW50LmEJdW5pMDFDRi5hCXVuaTFFQzguYQl1bmkxRUNBLmEJSW9nb25lay5hA2EuYQhhZ3JhdmUuYQhhYWN1dGUuYQ1hY2lyY3VtZmxleC5hCGF0aWxkZS5hC2FkaWVyZXNpcy5hCWFtYWNyb24uYQhhYnJldmUuYQdhcmluZy5hCXVuaTAxQ0UuYQl1bmkxRUExLmEJdW5pMUVBMy5hCXVuaTFFQTUuYQl1bmkxRUE3LmEJdW5pMUVBOS5hCXVuaTFFQUIuYQl1bmkxRUFELmEJdW5pMUVBRi5hCXVuaTFFQjEuYQl1bmkxRUIzLmEJdW5pMUVCNS5hCXVuaTFFQjcuYQlhb2dvbmVrLmEDZy5hDWdjaXJjdW1mbGV4LmEIZ2JyZXZlLmEMZ2RvdGFjY2VudC5hCXVuaTAxMjMuYQhnY2Fyb24uYQl1bmkxRTIxLmENdW5pMDA2NzAzMDMuYQNsLmEIbGFjdXRlLmEIbGNhcm9uLmEGbGRvdC5hCXVuaTAxM0MuYQl1bmkxRTM3LmEJdW5pMUUzOS5hCXVuaTFFM0IuYQhsc2xhc2guYQRmbC5hCXplcm8ucG51bQhvbmUucG51bQh0d28ucG51bQp0aHJlZS5wbnVtCWZvdXIucG51bQlmaXZlLnBudW0Ic2l4LnBudW0Kc2V2ZW4ucG51bQplaWdodC5wbnVtCW5pbmUucG51bQl6ZXJvLnRudW0Ib25lLnRudW0IdHdvLnRudW0KdGhyZWUudG51bQlmb3VyLnRudW0JZml2ZS50bnVtCHNpeC50bnVtCnNldmVuLnRudW0KZWlnaHQudG51bQluaW5lLnRudW0JemVyby5vbnVtCG9uZS5vbnVtCHR3by5vbnVtCnRocmVlLm9udW0JZm91ci5vbnVtCWZpdmUub251bQhzaXgub251bQpzZXZlbi5vbnVtCmVpZ2h0Lm9udW0JbmluZS5vbnVtB3VuaTAwQUQKZmlndXJlZGFzaAd1bmkyMDE1B3VuaTIxMTcHdW5pMjEyMAdhdC5jYXNlCXplcm8uc3VwcwhvbmUuc3Vwcwh0d28uc3Vwcwp0aHJlZS5zdXBzCWZvdXIuc3VwcwlmaXZlLnN1cHMIc2l4LnN1cHMKc2V2ZW4uc3VwcwplaWdodC5zdXBzCW5pbmUuc3Vwcw5wYXJlbmxlZnQuc3Vwcw9wYXJlbnJpZ2h0LnN1cHMLcGVyaW9kLnN1cHMKY29tbWEuc3Vwcwl6ZXJvLnN1YnMIb25lLnN1YnMIdHdvLnN1YnMKdGhyZWUuc3Vicwlmb3VyLnN1YnMJZml2ZS5zdWJzCHNpeC5zdWJzCnNldmVuLnN1YnMKZWlnaHQuc3VicwluaW5lLnN1YnMOcGFyZW5sZWZ0LnN1YnMPcGFyZW5yaWdodC5zdWJzC3BlcmlvZC5zdWJzCmNvbW1hLnN1YnMJemVyby5kbm9tCG9uZS5kbm9tCHR3by5kbm9tCnRocmVlLmRub20JZm91ci5kbm9tCWZpdmUuZG5vbQhzaXguZG5vbQpzZXZlbi5kbm9tCmVpZ2h0LmRub20JbmluZS5kbm9tDnBhcmVubGVmdC5kbm9tD3BhcmVucmlnaHQuZG5vbQtwZXJpb2QuZG5vbQpjb21tYS5kbm9tCXplcm8ubnVtcghvbmUubnVtcgh0d28ubnVtcgp0aHJlZS5udW1yCWZvdXIubnVtcglmaXZlLm51bXIIc2l4Lm51bXIKc2V2ZW4ubnVtcgplaWdodC5udW1yCW5pbmUubnVtcg5wYXJlbmxlZnQubnVtcg9wYXJlbnJpZ2h0Lm51bXILcGVyaW9kLm51bXIKY29tbWEubnVtcg1vcmRmZW1pbmluZS5hBmEuc3VwcwZiLnN1cHMGYy5zdXBzBmQuc3VwcwZlLnN1cHMGZi5zdXBzBmcuc3VwcwZoLnN1cHMGaS5zdXBzBmouc3VwcwZrLnN1cHMGbC5zdXBzBm0uc3VwcwZuLnN1cHMGby5zdXBzBnAuc3VwcwZxLnN1cHMGci5zdXBzBnMuc3VwcwZ0LnN1cHMGdS5zdXBzBnYuc3VwcwZ3LnN1cHMGeC5zdXBzBnkuc3VwcwZ6LnN1cHMLZWdyYXZlLnN1cHMLZWFjdXRlLnN1cHMMdW5pMDI1OS5zdXBzBmEuc3VwYQZnLnN1cGEGbC5zdXBhBEV1cm8HdW5pMDE5Mg1jb2xvbm1vbmV0YXJ5BGxpcmEHdW5pMjBBNgZwZXNldGEEZG9uZwd1bmkyMEIxB3VuaTIwQjIHdW5pMjBCNQd1bmkyMEI5B3VuaTIwQkEHdW5pMjIxNQpzbGFzaC5mcmFjCG9uZXRoaXJkCXR3b3RoaXJkcwlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwd1bmkyMjE5B3VuaTAwQjUHdW5pMjIwNgd1bmkyMTI2B3VuaTIxMTMJZXN0aW1hdGVkB3VuaTIxOTAHYXJyb3d1cAd1bmkyMTkyCWFycm93ZG93bgd1bmkyNUEwB3VuaTI1QzYHdW5pMjVDOQd1bmkyNzUyB3RyaWFndXAHdW5pMjVCMwd1bmkyNUI2B3VuaTI1QjcHdHJpYWdkbgd1bmkyNUJEB3VuaTI1QzAHdW5pMjVDMQd1bmkyNjEwB3VuaTI2MTEHdW5pMjcxMwd1bmkyNjZBB3VuaTIwMzIHdW5pMjAzMwd1bmkwMkJCB3VuaTAyQkMHdW5pMDJCRQd1bmkwMkJGB3VuaTAyQzgHdW5pMDJDOQd1bmkwMkNBB3VuaTAyQ0IHdW5pMDJDQwd1bmkwMzAwC3VuaTAzMDAuY2FwB3VuaTAzMDELdW5pMDMwMS5jYXAHdW5pMDMwMgt1bmkwMzAyLmNhcAd1bmkwMzAzC3VuaTAzMDMuY2FwB3VuaTAzMDQLdW5pMDMwNC5jYXAHdW5pMDMwNgt1bmkwMzA2LmNhcAd1bmkwMzA3C3VuaTAzMDcuY2FwB3VuaTAzMDgLdW5pMDMwOC5jYXAHdW5pMDMwOQt1bmkwMzA5LmNhcAd1bmkwMzBBC3VuaTAzMEEuY2FwB3VuaTAzMEILdW5pMDMwQi5jYXAHdW5pMDMwQwt1bmkwMzBDLmNhcAd1bmkwMzBGC3VuaTAzMEYuY2FwB3VuaTAzMTIHdW5pMDMxMwd1bmkwMzFCB3VuaTAzMjMHdW5pMDMyNAd1bmkwMzI2B3VuaTAzMjcLdW5pMDMyNy5jYXAHdW5pMDMyOAt1bmkwMzI4LmNhcAd1bmkwMzJFB3VuaTAzMzELdW5pMDMwODAzMDQPdW5pMDMwODAzMDQuY2FwC3VuaTAzMDgwMzAxD3VuaTAzMDgwMzAxLmNhcAt1bmkwMzA4MDMwQw91bmkwMzA4MDMwQy5jYXALdW5pMDMwODAzMDAPdW5pMDMwODAzMDAuY2FwC3VuaTAzMDIwMzAxD3VuaTAzMDIwMzAxLmNhcAt1bmkwMzAyMDMwMA91bmkwMzAyMDMwMC5jYXALdW5pMDMwMjAzMDkPdW5pMDMwMjAzMDkuY2FwC3VuaTAzMDIwMzAzD3VuaTAzMDIwMzAzLmNhcAt1bmkwMzA2MDMwMQ91bmkwMzA2MDMwMS5jYXALdW5pMDMwNjAzMDAPdW5pMDMwNjAzMDAuY2FwC3VuaTAzMDYwMzA5D3VuaTAzMDYwMzA5LmNhcAt1bmkwMzA2MDMwMw91bmkwMzA2MDMwMy5jYXAJdW5pMDMwQy5hCXVuaTAzMjYuYQd1bmkwMEEwB3VuaTIwMDcKc3BhY2UuZnJhYwxuYnNwYWNlLmZyYWMHdW5pMDI0Mwd1bmkwMTJDB3VuaTAxNEUHdW5pMDE4MAd1bmkwMTJEB3VuaTAxNEYLdW5pMDMwMjAzMDYPdW5pMDMwMjAzMDYuY2FwAAAAAAAAAf//AAIAAQAAAAwAAAAAAOIAAgAjAAQANwABAE0ATgABAGgAaAABAG8AbwACAH4AfgABAKAAogABAKgAqAABAMwAzQABAOUA5QABAPsA+wABAQIBAgACARYBFgABARoBGgACAR0BHQACASsBKwACASwBLQABATIBMgACAVEBUwABAVkBWQABAWgBaAACAX4BfwABAZYBmgABAZsBmwACAZ4BngACAZ8BnwABAaoBqwABAbcBtwABAcEBwgABAcYBxgACAcoBygABAuYC5gABAvAC8AABAvYDMwADAzUDNQADA0ADQQADAAIABAL2AxEAAQMcAzMAAQM1AzUAAQNAA0EAAQAAAAEAAAAKADwAqgACREZMVAAObGF0bgAgAAQAAAAA//8ABAAAAAIABAAGAAQAAAAA//8ABAABAAMABQAHAAhrZXJuADJrZXJuADhtYXJrAD5tYXJrAExta21rAFpta21rAGBzaXplAGZzaXplAGoAAAABAAYAAAABAAYAAAAFAAAAAQACAAMABAAAAAUAAAABAAIAAwAEAAAAAQAFAAAAAQAFAFIAAABOAAAABwAQABgAIAAoADAAOABAAAQAAAABAEQABAAAAAEDdAAEAAAAAQO6AAQAAAABBaQABAAAAAEF1gAGAQAAAQZQAAIAAAACB1Iu2ABkAAAAAAAAAAAAAT5wPowAAQAMAOoANwAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAY4AAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABlAAAAY4AAAGUAAABjgAAAZQAAAGOAAABjgAAAZQAVwC8AMIAyADOANQAwgDaAOAA5gDsAPIA+AD+AQQBCgEQARYBHAEiASgBLgE0AToBQAFGAUwBUgFYAV4BZAFqAXABdgF8AYIBiAFYAY4BlAGaAaABmgGmAawBsgG4Ab4BxAHKAdAB1gHcAeIB6ADUAOYB7gH0AfoB+gEuAS4CAAFSAWoCBgIGAaACDAGgAaACEgGgAVgCGAIeAiQCKgIwAjACHgI2Ah4CPAF8AkICSAABAAAB/AABAAACpgABAQwCpgABARwCpgABAUcCpgABATICpgABARoCpgABAV8CpgABAUICpgABAIECpgABAVkCpgABATQCpgABAIICpgABAWgCpgABAUUCpgABAUoCpgABASwCpgABAUsCrgABASQCpgABARQCpgABAQgCpgABAUACpgABAP4CpgABAYcCpgABAP8CpgABAOsCpgABARYCpgABAQ0B/AABAH4C2gABARQB/AABAYkC2gABAQgB/AABANsC5AABAQIB/AABAHsC2gABAHsCtgABAH0CtgABAHoC2gABAaMB/AABASMB/AABAQ8B/AABARYB/AABANgB/AABANsB/AABAI8CgwABARAB/AABAOsB/AABAWgB/AABAN8B/AABAPMB/AABAOUB/AABAQ0CpgABAjECtgABAUwCpgABAhECpgABAUgCpgABAV0CpgABAHwB/AABAbgB/AABAQ0B9gABAH0B/AABARoB/AABAPIB/AABAR4B/AABAKsCpgABAQwB9AABAR8B/AABAQ8CzwABAQ8CwgABO9w75AABAAwAFgACAAAAGAAAABgABgAUABoAIAAmACwAMgABAAAAAAABAVUAAAABAQ8AAAABAQoAAAABAQ4AAAABAN8AAAABANkAAAABO6Y7tAABAAwAIgAFAAAAnAAAAJwAAACcAAAAnAAAAJwAQgCMAJIAmACeAKQAqgCwALYAvADCAMgAzgDUAMgA2gDgAOYA7ADyAPgA/gEEAQoBEAEWARwBIgEoAS4BNAE6AUABRgFMAVIA7AFYAV4BZADsAWoBcAFMAXYBfAGCAYgBjgF2AZQBmgGgAPgBpgFMAOwBrAEiAbIBuAG+AcQBsgCMAcoBTAABAAD/6gABAQz/6gABASz/6gABAVX/6gABAS7/6gABASf/6gABAIX/6gABAVn/6gABAUL/6gABAIH/6gABAPv/6gABAUX/6gABAR//6gABAWr/6gABAUr/6gABAIf/6gABATP/6gABAQ//6gABAQr/6gABAUD/6gABAP//6gABAYr/6gABAPn/6gABAO3/6gABARf/6gABAPz/6gABARz/6gABAQ7/6gABAS3/6gABAQb/6gABAIn/6gABAPr/GgABAR7/6gABAHv/6gABADv/GQABAHr/6gABAan/6gABARb/6gABAHX/JgABAar/JgABAN//6gABANT/6gABASL/6gABAOv/6gABAWj/6gABAMj/DgABAOT/6gABAUj/6gABAWH/6gABASH/6gABARv/6gABAPD/6gABARL/IwABAK3/6gABAbj/JgABOiA6JgABAAwAEgABAAAAEAAEABAAFgAcACIAAQAAAeYAAQHSAoYAAQILApoAAQFsAeYAAQGbAfAAATn4OgAAAQAMABYAAgAAACgAAAAoAA4AJAAqADAANgA8AEIASABOADwAVABOAFoAYABmAAEAAAAAAAEB0AAAAAEBggAAAAEAagAAAAEBSgAAAAEBQAAAAAEBngAAAAEBhQAAAAEAmAAAAAEBrAAAAAEA8AAAAAEAlAAAAAEBiQAAAAE4PDmeAAEADADqADcAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADmAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOwAAADmAAAA7AAAAOYAAADsAAAA5gAAAOYAAADsAAMAFAAaABoAAQAAAfwAAQAAAqYAAQAAAtwAAQAAArcAATieAAQAAAGXAzgDUgNgA24DgAOyA8AD0gPsA/4EFAQmBDQEQgRkBGoEnATCBNwFCgUYBSIFMAU6BVAFhgWcBaoFwAXOBdwF6gX4Bf4GEAYaBiwGMgZIBloGdAaCBpAGqgbEBt4G+AcSBywHRgdgB3oHlAeuB8gH4gf8CBYIMAhKCGQIfgiYCLIIzAjaCOgI9gkECRIJJAk2CUgJWgloCXYJhAmSCaAJrgm8CcoJ3An2ChAKKgpECl4KeAqSCqQKtgrICtoK7Ar+CxALIgs0C0YLWAtqC3wLjgugC7ILwAvOC9wL6gv4DAYMGAwmDDQMQgxQDF4MbAx6DIgMlgykDLIMwAzODNgM+g0cDT4NYA2CDYgNjg2UDZoNoA2mDawNsg24Db4NxA3KDdAN1g3cDeIN6A3+DhQOKg5ADlYObA6SDrgO3g8EDzIPYA+OD7wP6hAYEEYQdBCCEJAQnhCsEL4Q0BDiEOwQ9hEAEQoRFBEeESgRMhE8EUYRUBFaEWQRbhF4EYIRjBGWEaARqhG0Eb4R1BHeEegR8hH8EgYSEBImEjwSUhJoEn4SlBKqEsAS1hLsEwITGBMuE0QTWhNwE4YTnBOyE8gT3hP0FAoUIBQuFDwUShRYFF4UdBSKFJQUohSwFL4UzBTaFOgU9hUEFRIVIBUuFTwVShVYFWYVdBWCFZAVnhWsFboVyBXWFeQV8hYIFhIWHBYmFjAWOhZEFlIWZBZ2FogWmhasFr4WyBbSFtwW5hbwFvoXBBcaFywXPhdQF2IXdBeGF4wXkheYF54XpBeqF7AXthe8F8IXyBfOF9QX2hfgF+YX7BgCGBgYLhhEGFoYcBiCGJQYphi4GMYY1BjiGPAY/hkMGRoZKBk2GUQZUhlgGW4ZdBmCGYgZvhnQGdYZ3BniGegZ7hn0GfoaABoGGgwaEhoYGh4aJBoqGjAaNho8GkIaSBpOGlQaWhpgGmYabBpyGngafhqEGooalBqmGqwa1hr0Gw4bLBtKG4QbmhusG8Ib0Bv2HBQcMhxQHGocpBy+HNQc+h0UHRodIB1GHVQdnh2sIW4heCGCIlwlNiZkJpYm4Cb+J0AnSidYJ2oneAAGAgT/5gIY/+gCI//YAiX/ogIs/7ACLf/MAAMCGP/sAiX/4gIt/+wAAwIY/8wCLAAOAi0AFAAEAiH/8gIl/94CLAAGAi3/5gAMABkABAAb/+gAM//sADX/5gEkABIBJQAmASYAJAEnAB8CGP/yAiH/uwIsABQCLQAjAAMCJf/kAiwACAItAA8ABAIE//oCGP/SAiX/7AItAA8ABgIE/+ACGP+kAiP/sAIl/2gCLP+kAi3/ngAEAiH/8gIl/94CLAAGAi3/5gAF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AiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YABAIh//ICJf/eAiwABgIt/+YAAwIh//ICLAAGAi0ACgADAiH/8gIsAAYCLQAKAAMCIf/yAiwABgItAAoAAwIh//ICLAAGAi0ACgADAiH/8gIsAAYCLQAKAAMCIf/yAiwABgItAAoABAIh//ICJf/eAiwABgIt/+YAAwIY//YCJf/2AiwADgADAhj/9gIl//YCLAAOAAMCGP/2AiX/9gIsAA4AAwIY//YCJf/2AiwADgADAhj/9gIl//YCLAAOAAMCGP/2AiX/9gIsAA4AAwIY//gCJf/uAiwABAADAhj/+AIl/+4CLAAEAAMCGP/4AiX/7gIsAAQAAwIY//gCJf/uAiwABAADAhj/+AIl/+4CLAAEAAMCGP/4AiX/7gIsAAQAAwIY//gCJf/uAiwABAACAiX/uAIt/+gACAEkAAoBJQAlASYAJQEnACECGP/AAiH/pwIsABQCLQAiAAgBJAAKASUAJQEmACUBJwAhAhj/wAIh/6cCLAAUAi0AIgAIASQACgElACUBJgAlAScAIQIY/8ACIf+nAiwAFAItACIACAEkAAoBJQAlASYAJQEnACECGP/AAiH/pwIsABQCLQAiAAgBJAAKASUAJQEmACUBJwAhAhj/wAIh/6cCLAAUAi0AIgABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QABAiH/4QAFAiH/zwIjADUCJf/6AiwAFAItAC8ABQIh/88CIwA1AiX/+gIsABQCLQAvAAUCIf/PAiMANQIl//oCLAAUAi0ALwAFAiH/zwIjADUCJf/6AiwAFAItAC8ABQIh/88CIwA1AiX/+gIsABQCLQAvAAUCIf/PAiMANQIl//oCLAAUAi0ALwAJASL/8AEj//ABJAAUASUAKQEmACkBJwAaAiH/4wIsACcCLQAiAAkBIv/wASP/8AEkABQBJQApASYAKQEnABoCIf/jAiwAJwItACIACQEi//ABI//wASQAFAElACkBJgApAScAGgIh/+MCLAAnAi0AIgAJASL/8AEj//ABJAAUASUAKQEmACkBJwAaAiH/4wIsACcCLQAiAAsBIv/2ASP/8gEkABsBJQApASYAKQEnACICBP/6Ahj/0gIh/70CLAAhAi0ALgALASL/9gEj//IBJAAbASUAKQEmACkBJwAiAgT/+gIY/9ICIf+9AiwAIQItAC4ACwEi//YBI//yASQAGwElACkBJgApAScAIgIE//oCGP/SAiH/vQIsACECLQAuAAsBIv/2ASP/8gEkABsBJQApASYAKQEnACICBP/6Ahj/0gIh/70CLAAhAi0ALgALASL/9gEj//IBJAAbASUAKQEmACkBJwAiAgT/+gIY/9ICIf+9AiwAIQItAC4ACwEi//YBI//yASQAGwElACkBJgApAScAIgIE//oCGP/SAiH/vQIsACECLQAuAAsBIv/2ASP/8gEkABsBJQApASYAKQEnACICBP/6Ahj/0gIh/70CLAAhAi0ALgALASL/9gEj//IBJAAbASUAKQEmACkBJwAiAgT/+gIY/9ICIf+9AiwAIQItAC4AAwIY/8QCLAAUAi0AFAADAhj/xAIsABQCLQAUAAMCGP/EAiwAFAItABQAAwIY/8QCLAAUAi0AFAAEAiH/8gIl/94CLAAGAi3/5gAEAiH/xgIj/9gCJf+/Ai3/6AAEAiH/8gIl/94CLAAGAi3/5gACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oAAgIE//QCJf/KAAICBP/0AiX/ygACAgT/9AIl/8oABQIE//oCGP/8AiP/7AIl/94CLf/vAAICGP/yAiwAFAACAhj/8gIsABQAAgIY//ICLAAUAAICGP/yAiwAFAACAhj/8gIsABQAAgIh//ICIwA1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AgH/ugKT/+YABgH0/+gB9f/8Afb/9gH4//YB+v/oAfz//AAFAfT/7AH1//YB9v/2Afj/9gH6/+IACQAnAAQBLgAEAZcABAHg/+IB5v/cAfT/4gH6/9wB/P/5AiX/dgAGAeD/4gHm/9wB9P/iAfr/3AH8//kCJf92AAECJf/PAAECJf/PAAkAJwADAS4AAwGXAAMB4P/iAeb/3AH0/+IB+v/cAfz/+QIl/3YAAwIJ/+ACC//gAuH/4AASABn/4AAa//AAHP/TACcAIQDT//AA1P/wANX/8ADW//AA1//TANj/0wDZ/9MA2v/TANv/0wDc/9MA3f/TAN7/0wEuACEBlwAhAAMCCf/rAgv/6wLh/+sA8AAE/8IABv/UAAr/1AAS/9QAFP/UABb/3QAX/6kAGP/YABn/xgAa/9gAG//WABz/pwAe/90AIP/rACH/6wAi/+sAI//CACcAOwAs/+sALv/rADj/wgA5/8IAOv/CADv/wgA8/8IAPf/CAD7/wgA//8IAQP/CAEH/wgBC/8IAQ//CAET/wgBF/8IARv/CAEf/wgBI/8IASf/CAEr/wgBL/8IATP/CAE3/wgBP/9QAUP/UAFH/1ABS/9QAU//UAGn/1ABq/9QAa//UAGz/1ABt/9QAbv/UAG//1ACR/9QAkv/UAJP/1ACU/9QAlf/UAJb/1ACX/9QAmP/UAJn/1ACa/9QAm//UAJz/1ACd/9QAnv/UAJ//1ACg/9QAof/UAKL/1ACj/9QApP/UAKX/1ACm/9QAp//UAKj/1ACv/90AsP/dALH/3QCy/90As//dALT/3QC1/90At/+pALj/qQC5/6kAuv+pALv/qQC8/9gAvf/YAL7/2AC//9gAwP/YAMH/2ADC/9gAw//YAMT/2ADF/9gAxv/YAMf/2ADI/9gAyf/YAMr/2ADL/9gAzP/YAM3/2ADO/9gAz//YAND/2ADR/9gA0v/YANP/2ADU/9gA1f/YANb/2ADX/6cA2P+nANn/pwDa/6cA2/+nANz/pwDd/6cA3v+nAOb/3QDn/90A6P/dAOn/3QDq/90A6//dAOz/3QDt/90A7v/dAO//3QDw/90A8f/dAPL/3QDz/90A9P/dAPX/3QD2/90A9//dAPj/3QD5/90A+v/dAPv/3QD8/90A/f/rAP7/6wD//+sBAP/rAQH/6wEC/+sBA//rAQT/6wEF/+sBBv/rAQf/6wEI/+sBCf/rAQr/6wEL/+sBDP/rAQ3/6wEO/+sBD//rARD/6wER/+sBEv/rARP/6wEU/+sBFf/rARb/6wEuADsBQv/rAUP/6wFE/+sBRf/rAUb/6wFH/+sBSP/rAUn/6wFK/+sBS//rAUz/6wFN/+sBTv/rAU//6wFQ/+sBUf/rAVL/6wFT/+sBVP/rAVX/6wFW/+sBV//rAVj/6wFZ/+sBlwA7AZj/6wGa/+sBm//CAZz/wgGd/8IBnv/CAav/6wGs/+sBrf/rAa7/6wGv/+sBsP/rAbH/6wGy/+sBs//rAbT/6wG1/+sBtv/rAbf/6wG4/+sBuf/rAbr/6wG7/+sBvP/rAb3/6wG+/+sBv//rAcD/6wHB/+sBwv/rAcP/6wHE/+sBxf/rAcb/6wHH/+sByP/rAcn/6wHT/8IDPP/UAz//6wACAgP/ywIF/3sAAgID/8sCBf97ADYABP/oABb/6AAX/8AAGf/mABv/5gAc/8YAHf/aADX/7AA4/+gAOf/oADr/6AA7/+gAPP/oAD3/6AA+/+gAP//oAED/6ABB/+gAQv/oAEP/6ABE/+gARf/oAEb/6ABH/+gASP/oAEn/6ABK/+gAS//oAEz/6ABN/+gAr//oALD/6ACx/+gAsv/oALP/6AC0/+gAtf/oALf/wAC4/8AAuf/AALr/wAC7/8AA1//GANj/xgDZ/8YA2v/GANv/xgDc/8YA3f/GAN7/xgDf/9oA4P/aAOH/2gDi/9oAtgAE/9gADf+wAB7/6AAg/+EAIf/hACL/4QAk//YALP/hAC7/4QAxAAkAMv/sADj/2AA5/9gAOv/YADv/2AA8/9gAPf/YAD7/2AA//9gAQP/YAEH/2ABC/9gAQ//YAET/2ABF/9gARv/YAEf/2ABI/9gASf/YAEr/2ABL/9gATP/YAE3/2AB//7AA5f/yAOb/6ADn/+gA6P/oAOn/6ADq/+gA6//oAOz/6ADt/+gA7v/oAO//6ADw/+gA8f/oAPL/6ADz/+gA9P/oAPX/6AD2/+gA9//oAPj/6AD5/+gA+v/oAPv/6AD8/+gA/f/hAP7/4QD//+EBAP/hAQH/4QEC/+EBA//hAQT/4QEF/+EBBv/hAQf/4QEI/+EBCf/hAQr/4QEL/+EBDP/hAQ3/4QEO/+EBD//hARD/4QER/+EBEv/hARP/4QEU/+EBFf/hARb/4QEX//YBGP/2ARn/9gEa//YBG//2ARz/9gEd//YBJAAnASYALQEoACcBLgAnAUL/4QFD/+EBRP/hAUX/4QFG/+EBR//hAUj/4QFJ/+EBSv/hAUv/4QFM/+EBTf/hAU7/4QFP/+EBUP/hAVH/4QFS/+EBU//hAVT/4QFV/+EBVv/hAVf/4QFY/+EBWf/hAWgACQFpAAkBagAJAWsACQFsAAkBbQAJAW7/7AFv/+wBcP/sAXH/7AFy/+wBc//sAXT/7AF1/+wBdv/sAXf/7AF4/+wBef/sAXr/7AF7/+wBfP/sAX3/7AF+/+wBf//sAYD/7AGB/+wBgv/sAYP/7AGE/+wBmP/hAZr/4QGr/+EBrP/hAa3/4QGu/+EBr//hAbD/4QGx/+EBsv/hAbP/4QG0/+EBtf/hAbb/4QG3/+EBuP/hAbn/4QG6/+EBu//hAbz/4QG9/+EBvv/hAb//4QHA/+EBwf/hAcL/4QHD/+EBxP/hAcX/4QHG/+EBx//hAcj/4QHJ/+EDP//hAEsAF/+rABj/4wAZ/8sAGv/nABz/twAkACEAJwBJADP/7AA0//oANgANAFf/5wBz//MAt/+rALj/qwC5/6sAuv+rALv/qwC8/+MAvf/jAL7/4wC//+MAwP/jAMH/4wDC/+MAw//jAMT/4wDF/+MAxv/jAMf/4wDI/+MAyf/jAMr/4wDL/+MAzP/jAM3/4wDO/+MAz//jAND/4wDR/+MA0v/jANP/5wDU/+cA1f/nANb/5wDX/7cA2P+3ANn/twDa/7cA2/+3ANz/twDd/7cA3v+3AOP/5wEXACEBGAAhARkAIQEaACEBGwAhARwAIQEdACEBLgBJAYX/+gGG//oBh//6AYj/+gGJAA0BigANAYsADQGMAA0BjQANAY4ADQGPAA0BkAANAZcASQM6/+cADAHg/+UB4f/2AeL//AHk//kB5v/oAej/6wH0/9wB9f/vAfb/6wH4/+sB+v/GAfz/7wASAdj/+gHa//oB3//2AeD/8AHh//UB4v/1AeP/swHk//UB5f/pAeb/7AHn//MB6P/2AfP/7gH0/+IB+f/oAfr/5AH7//IB/P/2AAcB4f/8AeL//AHo//wB9f/2Afb/7gH4//YB+v/uABAB4AAMAeEAHgHiAB4B4//sAeQAHgHl//wB5gAGAfP//AH0//YB9QAa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ACUAFwAoACgAGwAqAE0AHABPAFcAQABpAG8ASQBzAHMAUACAAIEAUQCDAIgAUwCRAKAAWQCiAQIAaQEGASEAygEtAS0A5gEvATAA5wEyATIA6QE5AZQA6gGWAZYBRgGYAZsBRwGeAZ4BSwGrAckBTAHMAcwBawHfAegBbAHzAgUBdgIIAggBiQIKAgoBigIYAhgBiwIhAiEBjAIjAiMBjQKPApIBjgLgAuABkgM6AzoBkwM8Az0BlAM/Az8BlgACACAABAAHAAAACQAKAAQADQAPAAYAEgAgAAkAIgAlABgAKAAoABwAKgBNAB0ATwBXAEEAaQBvAEoAfwCIAFEAkQCgAFsAogC1AGsAtwECAH8BBgEhAMsBLQEtAOcBLwEwAOgBMgEyAOoBOQGUAOsBlgGWAUcBmAGbAUgBngHJAUwBzAHMAXgB/QIBAXkCBgILAX4CDgIXAYQCGwIbAY4CHQIdAY8CHwIfAZAC4ALhAZEDOgM6AZMDPAM9AZQDPwM/AZYAAgB1AAUABQABAAYABgACAAcABwAKAAkACQADAAoACgAEAA0ADQAGAA4ADgAHAA8ADwAIABIAEgAKABMAEwAMABQAFAAKABUAFQANABYAFgAOABcAFwAPABgAGAARABkAGQATABoAGgAUABsAGwAVABwAHAAWAB0AHQAXAB4AHgAYAB8AHwAnACAAIAAaACIAIgAdACMAIwAfACQAJAAgACUAJQAmACgAKAAkACoAKwAmACwALQAnAC4ALgAvAC8ALwAsADAAMAAtADEAMQAuADIAMgAvADMAMwAxADQANAAyADUANQAzADYANgA0ADcANwA1AE8AUwACAFQAVwAKAGkAbwAEAH8AfwAGAIAAgAAHAIEAgQAIAIIAggAJAIMAiAAIAJEAoAAKAKIApwALAKgAqAAKAKkArgANAK8AtQAOALcAuwAPALwAzAARAM0A0gASANMA1gAUANcA3gAWAN8A4gAXAOMA4wAKAOQA5AAQAOUA5QAKAOYA+wAYAPwA/AAdAP0BAQAaAQIBAgAlAQYBFgAdARcBHQAgAR4BIQAmAS0BLQAvAS8BMAAkATIBMgAlATkBQQAmAUIBUQAnAVIBUgAdAVMBWAAoAVkBWQAnAVoBXwAsAWABZgAtAWcBZwAhAWgBbQAuAW4BfgAvAX8BhAAwAYUBiAAyAYkBkAA0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) format('truetype') +} +@font-face { + font-family: 'Source Sans Pro'; + font-weight: 300; + font-style: normal; + src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQAABAAwQkFTRYsZlLEAAbQ8AAAAOkRTSUfjPtbqAAG0eAAAG6hHREVGPkM/lAABYswAAAD+R1BPU2mPSCwAAWPMAABD4EdTVUIZLU2qAAGnrAAADI5PUy8yWlCPBAAAAbgAAABgY21hcGTgLZkAAA8gAAAJ4GN2dCALYwCsAAAawAAAACRmcGdtBlmcNwAAGQAAAAFzZ2FzcP//AAMAAWLEAAAACGdseWZdJxIXAAAhbAAA6PxoZWFk+8OM5wAAATwAAAA2aGhlYQeUBfMAAAF0AAAAJGhtdHh4koHpAAACGAAADQhsb2Nh+gXBEAAAGuQAAAaGbWF4cAVcAkkAAAGYAAAAIG5hbWVQPiYrAAEKaAAAPOhwb3N0NUCH1wABR1AAABtxcHJlcC1of3kAABp0AAAASwABAAAAAQk3kAwRVl8PPPUACQPoAAAAAMx2buYAAAAAzHbRV/9X/uIEYgOrAAAACQACAAAAAAAAAAEAAAPY/u8AAASK/1f/NwRiAAEAAAAAAAAAAAAAAAAAAANCAAEAAANCAFwABwB4AAUAAQAAAAAACgAAAgABcwADAAEAAwGtASwABQAAAooCWAAAAEsCigJYAAABXgAyASAAAAILBAMDBAMCAgQgAAAHAAAAAQAAAAAAAAAAQURCRQAAAAD7AgLu/wYAAAPYAREgAAGTAAAAAAHgApQAAAAgAAMCeABeAAAAAADHAAAAxwAAAgcABAI7AF4CLQAzAlcAXgH7AF4B1QBeAlUAMwJ4AF4A6QBeAccAJQInAF4BzABeArsAXgJ1AF4ChQAzAicAXgKFADMCKQBeAgIAKwIFABoCcwBbAeQAAQL7ABgB2wAOAbj//wITAC4B8wBBAiAAXAHBADQCIAA0AeMANAEHACEB5wA0AhAAXADlAEsA5f/fAdAAXADtAFwDLABcAhQAXAIXADQCIABcAhkANAE9AFwBlQAgATgAHAIRAFUBsgAMAq0AGAGXAA4BtAAMAZQAGwIHAAQCBwAEAgcABAIHAAQCBwAEAgcABAIHAAQCBwAEAgcABAIHAAQCBwAEAgcABAIHAAQCBwAEAgcABAIHAAQCBwAEAgcABAIHAAQCBwAEAgcABAIHAAQDIgASAi0AMwItADMCLQAzAi0AMwItADMCVwBeAlcAXgJXAF4CaAAhAfsAXgH7AF4B+wBeAfsAXgH7AF4B+wBeAfsAXgH7AF4B+wBeAfsAXgH7AF4B+wBeAfsAXgH7AF4B+wBeAfsAXgH7AF4CVQAzAlUAMwJVADMCVQAzAlUAMwJVADMCVQAzAngAXgJ4AF4CeABeApgAIQDpAAMA6QBPAOn//wDp//IA6QABAOkAAgDpAEwA6f//AOkAPgDpAE8A6QAoAccAJQInAF4BzABSAcwAXgHMAF4BzABeAcwAXgHMAAUBzABeAc0ACgK7AF4CdQBeAnUAXgJ1AF4CdQBeAnUAXgJ1AF4CdQBeAoUAMwKFADMChQAzAoUAMwKFADMChQAzAoUAMwKFADMChQAzAoUAMwKFADMChQAzAoUAMwKFADMChQAzAoUAMwM6ADMChQAzAoUAMwKFADMChQAzAoUAMwKFADMChQAzAikAXgIpAF4CKQBeAikAXgIpAF4CKQBeAgIAKwICACsCAgArAgIAKwICACsCAgArAgIAKwJ9AF4CBQAaAgUAGgIFABoCBQAaAgUAGgJzAFsCcwBbAnMAWwJzAFsCcwBbAnMAWwJzAFsCcwBbAnMAWwJzAFsCcwBbAnMAWwJzAFsCcwBbAnMAWwJzAFsCcwBbAn4AWwJ+AFsCfgBbAn4AWwJ+AFsCfgBbAvsAGAL7ABgC+wAYAvsAGAG4//8BuP//Abj//wG4//8BuP//Abj//wG4//8BuP//AhMALgITAC4CEwAuAhMALgJoACECMgBeAoQAPQHzAEEB8wBBAfMAQQHzAEEB8wBBAfMAQQHzAEEB8wBBAfMAQQHzAEEB8wBBAfMAQQHzAEEB8wBBAfMAQQHzAEEB8wBBAfMAQQHzAEEB8wBBAfMAQQHzAEEDEABBAcEANAHBADQBwQA0AcEANAHBADQCJQA0AiAANAIgADQCIAA0AeMANAHjADQB4wA0AeMANAHjADQB4wA0AeMANAHjADQB4wA0AeMANAHjADQB4wA0AeMANAHjADQB4wA0AeMANAHjADQB5wA0AecANAHnADQB5wA0AecANAHnADQB5wA0AhD//wIQAFwCEABcAhAADwDlABoA5QA6AOUAAADl//YA5f//AOUAAQDlAAAA5QA8AOUASwDlACUA5QAlAOUAXADl/98B0ABcAdAAXADtAEUA6gBcATQAXADtAFQA7QBcAO0AAADtACsA7wAcAywAXAIUAFwCFABcAhQAXAIUAFwCFABcAhQAXAIUAFwC2QA6AhcANAIXADQCFwA0AhcANAIXADQCFwA0AhcANAIXADQCFwA0AhcANAIXADQCFwA0AhcANAIXADQCFwA0AhcALgNQADQCFwA0AhcANAIXADQCFwA0AhcANAIXADQCFwA0AT0AXAE9ACUBPQBWAT0ASgE9AEoBPf/8AZUAIAGVACABlQAgAZUAIAGVACABlQAgAZUAIAIeAFwBOAAcATgAHAE4ABwBOAAcATgAHAE4AA8CEQBVAhEAVQIRAFUCEQBVAhEAVQIRAFUCEQBVAhEAVQIRAFUCEQBVAhEAVQIRAFUCEQBVAhEAVQIRAFUCEQBVAhEAVQIRAFUCEQBVAhEAVQIRAFUCEQBVAhEAVQKtABgCrQAYAq0AGAKtABgBtAAMAbQADAG0AAwBtAAMAbQADAG0AAwBtAAMAbQADAGUABsBlAAbAZQAGwGUABsCFwA8AiAAXADl/98CIAA0AeMAJgIhADUCDgAiAf4AIQH0ACECGwAhATkAKwE5ACsBOQArATkAJwE5ABoBOQApATkAKgE5ACsBOQAnATkAKwE5ACsBOQArAiAANAIgADQCIAA0AiAANAIgADQCIAA0AiAANAIgADQCIAA0AiAANAIgADQCIAA0AiAANAIgADQCIAA0AiAANAIgADQCIAA0AiAANAIgADQCIAA0AiAANAIgADQCIQA1AiEANQIhADUCIQA1AiEANQIhADUCIQA1AiEANQDlAFwA5QBHAOoAXAE0AFwA5QAoAOUATQDlAAEA5f//AOcAHAH+ACECPwAkAd8AMAHfAFQB3wAnAd8AHQHfABAB3wAaAd8ANAHfACwB3wAoAd8AKwIBADgBWQA5AeYAJwHfAB0B7wAgAd8AGgH4AD8B3AAsAf8AOQH4ADQB3wAwAd8AVAHfACcB3wAdAd8AEAHfABoB3wA2Ad8ALAHfACgB3wAhAfYAOAFZADkB5QAuAd8AHQH2ABgB3wAaAfYAPgHaACwB9gAwAfYAKQDbAEMA2wAwANsAQwDbADADogBoAQMAVwEDAFcBkgAlAZIAMwDbAFMBaABTANsAOgDbADoBaAA6AWgAOgDbADoBaAA6AQMAKwEDADYBkAArAZAANgErACgBKwAoAeAAKAMgACgB3wAoAyAAKADbAEMBGQAoAfQADAEXAFgBFwAgARcAYgEXABUBFwAjARcAFQFlAAkA4gBfAWUABQDiAF8BiwBGAaQAPAGkADwB3wAyAgMAKgLlADMC4wAzAZEAEgJiAAICYgAgAy4ANALyADQB3wAkAWoAKAFqAF4BagAvAWoAKAFqAC4BagAoAWoAMgFqADIBagAxAWoAKQDbAEIA2wApAJ8ALACfACIBagAoAWoAXgFqAC8BagAoAWoALgFqACgBagAyAWoAMgFqADEBagApANsAQgDbACkAnwAsAJ8AIgFqACgBagBeAWoALwFqACgBagAuAWoAKAFqADIBagAyAWoAMQFqACkA2wBCANsAKQCfACwAnwAiAWoAKAFqAF4BagAvAWoAKAFqAC4BagAoAWoAMgFqADIBagAxAWoAKQDbAEIA2wApAJ8ALACfACIBUQAqAW8AJQFoACEBUQAqAW8AOgEuACEBbwAlAUoAHwC3ABUBTAAiAWQAOgCZAC4Anf/qAT0AOgCiADoCJAA6AWcAOgFoACEBbwA6AW8AJQDdADoBEwAVANgAEgFrADkBLQAIAdIAEAEbAAgBKwAIARUAEwFKAB8BSgAfAUoAGwFvACUBbwAlAJkAOgE3ACoB3wAeAd8AOwHfADYB3wAeAd8AGAHfAD4B3wALAd8AQQHfADYB3wAQAd8ADgHfAEUB3wAOAd8ANAHfAEEB3wBJAd8AHABQ/1sAUP9bAFD/WwMlACgEigAoAvwASgMSAEoDDwAoAxEASgMkAC8DEQBKAyQAKAMkACgDEAAfAd8AIgHfACIB3wAzAd8AIgHmAMMB3wAiAd8AIgHfACIB3wAiAd8AIgHfACIB3wBCAd8AIgHfACgB3wAoAd8AIgIWABsC+wApAhkAXAHzACQBKwA6AhsAMQIvABsClQAsAecAEwKMAF4BdQAcAyAALgJsAB0CbAArAmwAJgJsACsBGwA2ARsADwGlACoBYQA2Ai8AGQIvABkCLwA7Ai8AOwIvABkCLwAZAi8AFQIvABUDGgBKAxoASgJQ//wB3wAfAfMAOwDbAFIBaABSANsAOgDbADoAjQAhAJ8AGAIXALMCFwDTAhcAmQIXAJkAXwAaAQMAEADaADMA2gATAF8AGgIXAI8CFwCYAhcAmgIXAJQCFwC5AhcAuQIXAOUCFwDKAhcA1QAA/6gAAP+PAAD/yAAA/9sAAP+OAAD/iwAA/4QAAP9+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AAAAAAAAAAAAAAPOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7IAAAOyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeAAAAAAAAAAAAAAAAAAMCAgIHAjECjwKiAdQCBgIbAhwCJQKtAf4CEgH9AiEB/wIAArMCsgK0AgQCLwIdAiMCHgK4AhoC5AIfAiICIAK6AzYCAwKTApACjgKRAiQCKALuAioCagIQArwCEwIsAu8CjQK3AjQCNQLlAr8CKQIYAvQCMwJsAhECpAKlAqYCBQA/AE4ATwBYAFkAWgBcAHQAdQB2AHgA4wCMAq8AoAC8AL0AvgDAANgA5AFnAO0A/AD9AQYBBwEIAQoBIgEjASQBJgGVATwCsAFRAW4BbwFwAXIBigGWAYwAPQDrAD4A7ABNAPsAUAD+AFEA/wBTAQEAUgEAAFQBAgBXAQUAXQELAF4BDABfAQ0AaAEWAFsBCQBpARcAagEYAGsBGQBsARoAcAEeAHMBIQB3ASUAeQEnAzsDPgB+ASsAegEtAH8BLgCAAS8BMACBATEAgwE0AIIBMgCEATMAiAE4AIoBOgCNAT0AiwE7AUEAlgFHAzwDPwCXAUgAoQFSAKkBWgCrAVsAqgFcAK8BYACwAWEAsgFjALEBYgC4AWkAtwFoAL8BcQDBAXMAwgF0AMMBdQDEAXYAzAF+ANUBhwDZAYsA2gDfAZEA4QGTAOABkgCiAVMAzQF/AEAA7gB7ASgAmAFJAMUBdwDGAXgAxwF5AMgBegDJAXsAbQEbAKgBWQCzAWQAuQFqAnYCfgKDAoUC8ALzAvEC9QLtAvICeAJ/AoQC9gL4AvoC/AL+AwADAgMEAwYDCAMKAwwDFQMWAxgCbgJwAnECdwJ5AnwCgAKBAFUBAwBWAQQAbgEcAHEBHwByASAAhQE1AIYBNgCHATcAiQE5AI4BPgCPAT8AkAFAAKwBXQCtAV4ArgFfALQBZQC1AWYAugFrALsBbADTAYUA1AGGANYBiADbAY0A4gGUAEEA7wBCAPAAQwDxAEQA8gBFAPMARgD0AEcA9QBIAPYASQD3AEoA+ABLAPkATAD6AGABDgBhAQ8AYgEQAGMBEQBkARIAZQETAGYBFABnARUAfAEpAH0BKgCZAUoAmgFLAJsBTACcAU0AnQFOAJ4BTwCfAVAAowFUAKQBVQClAVYApgFXAKcBWADKAXwAywF9AM4BgADPAYEA0AGCANEBgwDSAYQA1wGJANwBjgDdAY8A3gGQAhYCFAIVAhcCCAIJAgwCCgILAg0CJgInAhkCMgJ1AjwCPQJ6ApkCkgLFAq4CsQLCAs8C3bgAACxLuAAJUFixAQGOWbgB/4W4AEQduQAJAANfXi24AAEsICBFaUSwAWAtuAACLLgAASohLbgAAywgRrADJUZSWCNZIIogiklkiiBGIGhhZLAEJUYgaGFkUlgjZYpZLyCwAFNYaSCwAFRYIbBAWRtpILAAVFghsEBlWVk6LbgABCwgRrAEJUZSWCOKWSBGIGphZLAEJUYgamFkUlgjilkv/S24AAUsSyCwAyZQWFFYsIBEG7BARFkbISEgRbDAUFiwwEQbIVlZLbgABiwgIEVpRLABYCAgRX1pGESwAWAtuAAHLLgABiotuAAILEsgsAMmU1iwQBuwAFmKiiCwAyZTWCMhsICKihuKI1kgsAMmU1gjIbgAwIqKG4ojWSCwAyZTWCMhuAEAioobiiNZILADJlNYIyG4AUCKihuKI1kguAADJlNYsAMlRbgBgFBYIyG4AYAjIRuwAyVFIyEjIVkbIVlELbgACSxLU1hFRBshIVktALAAKwCyAQECKwGyAgICKwG3An1jUTojAAgrtwNzY1E6IwAIKwC3AYpxUTomAAgrALIEBwcrsAAgRX1pGERLsGBSWLABG7AAWbABjgAAFAAoACwAMAAAAAz/JwAMAeAADAI7AAwCfwAMApMADALPAAwAAABiAGIAYgBiALABFAFkAagB5gIeAn4CugLaAw4DTgN0A84EFARoBLAFIgV4BeYGEgZUBo4G9AdGB4AHtggqCJAI4AlGCagJ+AqqCu4LIgtqC6wL3Aw8DIAM1A04DZwN3A5KDpgO3g8WD34PzhAeEFQQYBBsEHgQhBCQEJwQqBC0EMAQzBDYEOQQ8BD8EQgRGBEkETARPBFIEVgRyhIwEjwSSBJUEmASbBJ4EoQSkBKYEqQSsBK8EsgS1BLgEuwS+BMEExATHBMoEzQTQBNME1wTvBPIE9QT4BPsE/gUBBQQFBwUKBQ0FJwUqBS0FMAUzBTYFOQU8BT8FQgVFBVYFWQVcBV8FYgVlBWgFawVvBXIFggWFBYgFiwWOBZEFlAWXBZoFnQWgBaMFpgWpBawFrwWyBbUFuAW7Bb4FwQXEBcgF5IX8BhaGGYYchh+GIoYlhkKGRYZIhkuGToZShlWGWIZbhl6GYYZkhmeGaoaFhoiGi4aOhpGGlIaXhpqGnYaghqOGpoaphqyGr4ayhrWGuIa7hr6GwYbEht4G9gb5BvwG/wcCBwUHCAcLBw4HEQcUBxcHGgcdByAHIwcmBykHLAcvBzIHNQdNh14Hdod5h3yHf4eCh4WHiIeLh46HkYeUh5eHmoedh6CHo4enh6qHrYewh7OHt4fbiAwIDwgSCBUIGAgbCB4IIQgkCEIIRQhICEsITghRCFQIVwhaCF0IYAhjCGYIaQhsCG8IcwiTiJaImYiciJ+IooiliKiIq4iuiLGIx4jKiM2I0IjTiNaI2YjciN+I4oj3CQaJDokRiRSJJYkoiSuJLokxiTSJOIk7iU4JUQlUCVcJWgldCWAJYwlmCWkJbAlvCXIJdQl4CXsJfgmBCYQJhwmKCY0JkAmTCZcJsgnYifMJ9gn5CfwJ/woCCiAKIwomCikKLAowCjMKNgo5CjwKPwpCCkUKSApoCmsKbgpxCnQKdwp6Cn0KgAqDCoYKiQqMCo8KkgqVCpgKmwqeCqEKpAqnCqoKwwrbit6K4YrkiueK6ortivCK84r2ivmK/Ir/iwKLBYsIiwuLDosRixSLF4saizmLUwtfi3eLkAuri8oLzQvQC/GL/wwCDAUMCAwLDA4MEQwUDBcMGgwdDDQMNgw5DDwMPwxCDEUMSAxLDE4MUQxUDFcMWgxdDGAMYwxnDGoMbQxwDHMMdwyVjJeMmoydjKCMo4ymjKmMrIy0jLeMuoy9jMCMw4zHjMqM2QzcDQmNGY0nDToNV41sDYQNng2rjdEN6w37DgWOGQ4bDh0OHw4hDi6OMI4yjkKOUA5jjn4OkA6mjqiOs461js0Ozw7Zju0O7w7xDvMO9Q8ADwIPBA8MjxcPGg8dDyEPLg85D02PYg9nj2qPdA99j4CPg4+GD4mPj4+Vj5iPm4+gj6KPp4+sj7GPs4+2D7+PxI/OD9eP3o/lj/uQEZAWkBsQIBAmkC+QOhBLkGgQdJCTkLIQ05DqEQ8RM5FaEXkRe5F+EYCRgxGFkYgRipGNEY+RkhGUkZcRmZGcEZ6RoRGjkaYRqJGrEa2RsBGykbURt5G6EbyRvxHNkdaR5pH9kg4SIZI4EkOSYZJ3koASiJKRkp6SoRKjkqY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AAIAIQAAAngCkwADABcAgQC4AABFWLgAES8buQARAA4+WbgAAEVYuAAULxu5ABQADj5ZuAAARVi4AAovG7kACgAEPlm4AABFWLgABy8buQAHAAQ+WboACQAKABEREjm4AAkvuQACAAH0uAAB3LgABdC4AAEQuAAM0LgAARC5ABIAAfS4AA/QuAASELgAFtAwMQEhFSE3IxEjESERIxEjNTc1MxUhNTMVMwH8/qABYHxOLv6gLk1NLgFgLk4B7319/hEBSv62Ae8dBIODg4MAAP//AAMAAACZAy8CJgAMAAAABgL3dAAAAP//AE8AAADlAy8CJgAMAAAABgL5dAAAAP////8AAADpAy8CJgAMAAAABgL7dAAAAP////IAAAD2AygCJgAMAAAABgL9dAAAAP//AAEAAADnAx4CJgAMAAAABgMFdAAAAP//AAIAAADmAwICJgAMAAAABgL/dAAAAP//AEwAAACcAyECJgAMAAAABgMDdAAAAP////8AAADpAy8CJgAMAAAABgMNdAAAAP//AD4AAAC7A18CJgAMAAAABgMHdAAAAP//AE//PgCbApMCJgAMAAAABgMTdQAAAAABACj/MwC+ApMAFQA+ALgAAEVYuAAALxu5AAAADj5ZuAAARVi4AAIvG7kAAgAEPlm4AABFWLgAFS8buQAVAAQ+WboADgAIAAMrMDETMxEOARUUFjMyNxcOASMiJjU0NjcjXi4aIh8TGRIRDCURIzElGQgCk/1tHTYhGhoOGwoOKCopOBoAAAD//wAl//QBxQMvAiYADQAAAAcC+wFQAAD//wBe/y8CIAKTAiYADgAAAAcDFQE+AAD//wBSAAABuwMvAiYADwAAAAYC+XcAAAD//wBeAAABuwLUAiYADwAAAAcDNAFZ/+L//wBe/y8BuwKTAiYADwAAAAcDFQEbAAD//wBeAAABuwKTAiYADwAAAAcB/QD0ASL//wBe/z4BuwKTAiYADwAAAAcDEwEbAAD//wAF/z4BuwMCAiYADwAAACYC/3cAAAcDEwEbAAAAAP//AF7/YAG7ApMCJgAPAAAABwMbARsAAAABAAoAAAG8ApMADQBNALgAAEVYuAAILxu5AAgADj5ZuAAARVi4AAIvG7kAAgAEPlm6AAMAAgAIERI5uAADL7gABty4AAnQuAADELgADNC4AAIQuQANAAH0MDEl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//8AK/8wAdwCnwImABYAAAAHAxcBCQAA//8AK/8vAdwCnwImABYAAAAHAxUBCQAA//8AK//0AdwDIQImABYAAAAHAwMBDAAA//8AK/8+AdwCnwImABYAAAAHAxMBCQAAAAEAXv/0AlQCnwAsAFQAuAAARVi4AAUvG7kABQAOPlm4AABFWLgAEy8buQATAAQ+WbgAAEVYuAAsLxu5ACwABD5ZugAJABMABRESObgAExC5ABoAAfS4AAUQuQAnAAH0MDETND4CMzIWFwceAxUUDgIjIiYnNx4BMzI2NTQuAi8BNy4BIyIGFREjXh88WjxMXh2bPVMzFhwxQyc1XCAeIEUtQUYRMFRDA5kTSDlYaS4BpjVbQyZLP6oKJTM/IyZCMBspJiAkIk08HDMqIAsjqig3anP+ZwAA//8AGgAAAesDLwImABcAAAAHAw0BAQAA//8AGv8wAesCkwImABcAAAAHAxcA+wAA//8AGv8vAesCkwImABcAAAAHAxUBAwAA//8AGv8+AesCkwImABcAAAAHAxMBAwAA//8AGv9gAesCkwImABcAAAAHAxsBAwAA//8AW//0AhgDLwImABgAAAAHAvcBOQAA//8AW//0AhgDLwImABgAAAAHAvkBOQAA//8AW//0AhgDLwImABgAAAAHAvsBOQAA//8AW//0AhgDKAImABgAAAAHAv0BOQAA//8AW//0AhgDHgImABgAAAAHAwUBOQAA//8AW//0AhgDAgImABgAAAAHAv8BOQAA//8AW//0AhgDLwImABgAAAAHAwEBOQAA//8AW//0AhgDYAImABgAAAAHAwkBOQAA//8AW//0AhgDLwImABgAAAAHAwsBOQAA//8AW//0AhgDLwImABgAAAAHAw0BOQAA//8AW//0AhgDdwImABgAAAAHAx0BOQAA//8AW//0AhgDpwImABgAAAAHAx8BOQAA//8AW//0AhgDpwImABgAAAAHAyEBOQAA//8AW//0AhgDpwImABgAAAAHAyMBOQAA//8AW/8+AhgCkwImABgAAAAHAxMBOQAA//8AW//0AhgDXwImABgAAAAHAwcBOQAAAAEAW/8zAhgCkwAtAEcAuAAARVi4AAAvG7kAAAAOPlm4AABFWLgAKC8buQAoAAQ+WboAGgAgAAMruAAoELkABwAB9LgAABC4AA3QuAAoELgAFNAw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AAAAAAEBAAsTkwABAAAAAAECAAsTngABAAAAAAEDAAkTqQADAAEECQAAAIoTsgADAAEECQABACoUPAADAAEECQACAA4UZgADAAEECQADAEgUdAADAAEECQAEACoUPAADAAEECQAFAIIUvAADAAEECQAGACYVPgADAAEECQAHAMAVZAADAAEECQAIADQWJAADAAEECQAJABgWWAADAAEECQALADIWcAADAAEECQANI7YWogADAAEECQAOAEg6WAADAAEECQAQAB46oAADAAEECQARAAo6vgADAAEECQEAABQ6yAADAAEECQEBABY63AADAAEECQECABY68gADAAEECQEDABI7CENvcHlyaWdodCAyMDEwLCAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgUmlnaHRzIFJlc2VydmVkLlNvdXJjZSBTYW5zIFBybyBMaWdodFJlZ3VsYXIxLjAzNjtBREJFO1NvdXJjZVNhbnNQcm8tTGlnaHQ7QURPQkVWZXJzaW9uIDEuMDM2O1BTIFZlcnNpb24gMS4wMDA7aG90Y29udiAxLjAuNzA7bWFrZW90Zi5saWIyLjUuNTkwMFNvdXJjZVNhbnNQcm8tTGlnaHRTb3VyY2UgaXMgYSB0cmFkZW1hcmsgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kL29yIG90aGVyIGNvdW50cmllcy5BZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZFBhdWwgRC4gSHVudGh0dHA6Ly93d3cuYWRvYmUuY29tL3R5cGVDb3B5cmlnaHQgMjAxMCwgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCAoaHR0cDovL3d3dy5hZG9iZS5jb20vKSwgd2l0aCBSZXNlcnZlZCBGb250IE5hbWUgJ1NvdXJjZScuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFNvdXJjZSBpcyBhIHRyYWRlbWFyayBvZiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQvb3Igb3RoZXIgY291bnRyaWVzLg0KDQpUaGlzIEZvbnQgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSwgVmVyc2lvbiAxLjEuDQoNClRoaXMgbGljZW5zZSBpcyBjb3BpZWQgYmVsb3csIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OiBodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KU0lMIE9QRU4gRk9OVCBMSUNFTlNFIFZlcnNpb24gMS4xIC0gMjYgRmVicnVhcnkgMjAwNw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KUFJFQU1CTEUNClRoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUgZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBmb250IHByb2plY3RzLCB0byBzdXBwb3J0IHRoZSBmb250IGNyZWF0aW9uIGVmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQgb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAgd2l0aCBvdGhlcnMuDQoNClRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQgcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUgZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkIG5hbWVzIGFyZSBub3QgdXNlZCBieSBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgZm9udHMgYW5kIGRlcml2YXRpdmVzLCBob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy4NCg0KREVGSU5JVElPTlMNCiJGb250IFNvZnR3YXJlIiByZWZlcnMgdG8gdGhlIHNldCBvZiBmaWxlcyByZWxlYXNlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSB1bmRlciB0aGlzIGxpY2Vuc2UgYW5kIGNsZWFybHkgbWFya2VkIGFzIHN1Y2guIFRoaXMgbWF5IGluY2x1ZGUgc291cmNlIGZpbGVzLCBidWlsZCBzY3JpcHRzIGFuZCBkb2N1bWVudGF0aW9uLg0KDQoiUmVzZXJ2ZWQgRm9udCBOYW1lIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50KHMpLg0KDQoiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cyBhcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKS4NCg0KIk1vZGlmaWVkIFZlcnNpb24iIHJlZmVycyB0byBhbnkgZGVyaXZhdGl2ZSBtYWRlIGJ5IGFkZGluZyB0bywgZGVsZXRpbmcsIG9yIHN1YnN0aXR1dGluZyAtLSBpbiBwYXJ0IG9yIGluIHdob2xlIC0tIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEgbmV3IGVudmlyb25tZW50Lg0KDQoiQXV0aG9yIiByZWZlcnMgdG8gYW55IGRlc2lnbmVyLCBlbmdpbmVlciwgcHJvZ3JhbW1lciwgdGVjaG5pY2FsIHdyaXRlciBvciBvdGhlciBwZXJzb24gd2hvIGNvbnRyaWJ1dGVkIHRvIHRoZSBGb250IFNvZnR3YXJlLg0KDQpQRVJNSVNTSU9OICYgQ09ORElUSU9OUw0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksIHJlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250IFNvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsIGluIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuDQoNCjIpIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weSBjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUgaW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci4NCg0KMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250IE5hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIENvcHlyaWdodCBIb2xkZXIuIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHRoZSBwcmltYXJ5IGZvbnQgbmFtZSBhcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLg0KDQo0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250IFNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueSBNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbi4NCg0KNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsIG11c3QgYmUgZGlzdHJpYnV0ZWQgZW50aXJlbHkgdW5kZXIgdGhpcyBsaWNlbnNlLCBhbmQgbXVzdCBub3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgRm9udCBTb2Z0d2FyZS4NCg0KVEVSTUlOQVRJT04NClRoaXMgbGljZW5zZSBiZWNvbWVzIG51bGwgYW5kIHZvaWQgaWYgYW55IG9mIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZSBub3QgbWV0Lg0KDQpESVNDTEFJTUVSDQpUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS5odHRwOi8vd3d3LmFkb2JlLmNvbS90eXBlL2xlZ2FsLmh0bWxTb3VyY2UgU2FucyBQcm9MaWdodFN0cmFpZ2h0IGxBbHRlcm5hdGUgYUFsdGVybmF0ZSBnU2VyaWZlZCBJAEMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADEAMAAsACAAMgAwADEAMgAgAEEAZABvAGIAZQAgAFMAeQBzAHQAZQBtAHMAIABJAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAuACAAQQBsAGwAIABSAGkAZwBoAHQAcwAgAFIAZQBzAGUAcgB2AGUAZAAuAFMAbwB1AHIAYwBlACAAUwBhAG4AcwAgAFAAcgBvACAATABpAGcAaAB0AFIAZQBnAHUAbABhAHIAMQAuADAAMwA2ADsAQQBEAEIARQA7AFMAbwB1AHIAYwBlAFMAYQBuAHMAUAByAG8ALQBMAGkAZwBoAHQAOwBBAEQATwBCAEUAVgBlAHIAcwBpAG8AbgAgADEALgAwADMANgA7AFAAUwAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADAAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADkAMAAwAFMAbwB1AHIAYwBlAFMAYQBuAHMAUAByAG8ALQBMAGkAZwBoAHQAUwBvAHUAcgBjAGUAIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABBAGQAbwBiAGUAIABTAHkAcwB0AGUAbQBzACAASQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAFUAbgBpAHQAZQBkACAAUwB0AGEAdABlAHMAIABhAG4AZAAvAG8AcgAgAG8AdABoAGUAcgAgAGMAbwB1AG4AdAByAGkAZQBzAC4AQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkAFAAYQB1AGwAIABEAC4AIABIAHUAbgB0AGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAGQAbwBiAGUALgBjAG8AbQAvAHQAeQBwAGUAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQAwACwAIAAyADAAMQAyACAAQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAKABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBkAG8AYgBlAC4AYwBvAG0ALwApACwAIAB3AGkAdABoACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIAAnAFMAbwB1AHIAYwBlACcALgAgAEEAbABsACAAUgBpAGcAaAB0AHMAIABSAGUAcwBlAHIAdgBlAGQALgAgAFMAbwB1AHIAYwBlACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAAQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAaQBuACAAdABoAGUAIABVAG4AaQB0AGUAZAAgAFMAdABhAHQAZQBzACAAYQBuAGQALwBvAHIAIABvAHQAaABlAHIAIABjAG8AdQBuAHQAcgBpAGUAcwAuAA0ACgANAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgANAAoADQAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAaQBzACAAYwBvAHAAaQBlAGQAIABiAGUAbABvAHcALAAgAGEAbgBkACAAaQBzACAAYQBsAHMAbwAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6ACAAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAA0ACgANAAoALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAA0ACgBTAEkATAAgAE8AUABFAE4AIABGAE8ATgBUACAATABJAEMARQBOAFMARQAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAgAC0AIAAyADYAIABGAGUAYgByAHUAYQByAHkAIAAyADAAMAA3AA0ACgAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ADQAKAA0ACgBQAFIARQBBAE0AQgBMAEUADQAKAFQAaABlACAAZwBvAGEAbABzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUAIAAoAE8ARgBMACkAIABhAHIAZQAgAHQAbwAgAHMAdABpAG0AdQBsAGEAdABlACAAdwBvAHIAbABkAHcAaQBkAGUAIABkAGUAdgBlAGwAbwBwAG0AZQBuAHQAIABvAGYAIABjAG8AbABsAGEAYgBvAHIAYQB0AGkAdgBlACAAZgBvAG4AdAAgAHAAcgBvAGoAZQBjAHQAcwAsACAAdABvACAAcwB1AHAAcABvAHIAdAAgAHQAaABlACAAZgBvAG4AdAAgAGMAcgBlAGEAdABpAG8AbgAgAGUAZgBmAG8AcgB0AHMAIABvAGYAIABhAGMAYQBkAGUAbQBpAGMAIABhAG4AZAAgAGwAaQBuAGcAdQBpAHMAdABpAGMAIABjAG8AbQBtAHUAbgBpAHQAaQBlAHMALAAgAGEAbgBkACAAdABvACAAcAByAG8AdgBpAGQAZQAgAGEAIABmAHIAZQBlACAAYQBuAGQAIABvAHAAZQBuACAAZgByAGEAbQBlAHcAbwByAGsAIABpAG4AIAB3AGgAaQBjAGgAIABmAG8AbgB0AHMAIABtAGEAeQAgAGIAZQAgAHMAaABhAHIAZQBkACAAYQBuAGQAIABpAG0AcAByAG8AdgBlAGQAIABpAG4AIABwAGEAcgB0AG4AZQByAHMAaABpAHAAIAB3AGkAdABoACAAbwB0AGgAZQByAHMALgANAAoADQAKAFQAaABlACAATwBGAEwAIABhAGwAbABvAHcAcwAgAHQAaABlACAAbABpAGMAZQBuAHMAZQBkACAAZgBvAG4AdABzACAAdABvACAAYgBlACAAdQBzAGUAZAAsACAAcwB0AHUAZABpAGUAZAAsACAAbQBvAGQAaQBmAGkAZQBkACAAYQBuAGQAIAByAGUAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAZgByAGUAZQBsAHkAIABhAHMAIABsAG8AbgBnACAAYQBzACAAdABoAGUAeQAgAGEAcgBlACAAbgBvAHQAIABzAG8AbABkACAAYgB5ACAAdABoAGUAbQBzAGUAbAB2AGUAcwAuACAAVABoAGUAIABmAG8AbgB0AHMALAAgAGkAbgBjAGwAdQBkAGkAbgBnACAAYQBuAHkAIABkAGUAcgBpAHYAYQB0AGkAdgBlACAAdwBvAHIAawBzACwAIABjAGEAbgAgAGIAZQAgAGIAdQBuAGQAbABlAGQALAAgAGUAbQBiAGUAZABkAGUAZAAsACAAcgBlAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGEAbgBkAC8AbwByACAAcwBvAGwAZAAgAHcAaQB0AGgAIABhAG4AeQAgAHMAbwBmAHQAdwBhAHIAZQAgAHAAcgBvAHYAaQBkAGUAZAAgAHQAaABhAHQAIABhAG4AeQAgAHIAZQBzAGUAcgB2AGUAZAAgAG4AYQBtAGUAcwAgAGEAcgBlACAAbgBvAHQAIAB1AHMAZQBkACAAYgB5ACAAZABlAHIAaQB2AGEAdABpAHYAZQAgAHcAbwByAGsAcwAuACAAVABoAGUAIABmAG8AbgB0AHMAIABhAG4AZAAgAGQAZQByAGkAdgBhAHQAaQB2AGUAcwAsACAAaABvAHcAZQB2AGUAcgAsACAAYwBhAG4AbgBvAHQAIABiAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAHQAeQBwAGUAIABvAGYAIABsAGkAYwBlAG4AcwBlAC4AIABUAGgAZQAgAHIAZQBxAHUAaQByAGUAbQBlAG4AdAAgAGYAbwByACAAZgBvAG4AdABzACAAdABvACAAcgBlAG0AYQBpAG4AIAB1AG4AZABlAHIAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGQAbwBlAHMAIABuAG8AdAAgAGEAcABwAGwAeQAgAHQAbwAgAGEAbgB5ACAAZABvAGMAdQBtAGUAbgB0ACAAYwByAGUAYQB0AGUAZAAgAHUAcwBpAG4AZwAgAHQAaABlACAAZgBvAG4AdABzACAAbwByACAAdABoAGUAaQByACAAZABlAHIAaQB2AGEAdABpAHYAZQBzAC4ADQAKAA0ACgBEAEUARgBJAE4ASQBUAEkATwBOAFMADQAKACIARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAiACAAcgBlAGYAZQByAHMAIAB0AG8AIAB0AGgAZQAgAHMAZQB0ACAAbwBmACAAZgBpAGwAZQBzACAAcgBlAGwAZQBhAHMAZQBkACAAYgB5ACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAdQBuAGQAZQByACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAG4AZAAgAGMAbABlAGEAcgBsAHkAIABtAGEAcgBrAGUAZAAgAGEAcwAgAHMAdQBjAGgALgAgAFQAaABpAHMAIABtAGEAeQAgAGkAbgBjAGwAdQBkAGUAIABzAG8AdQByAGMAZQAgAGYAaQBsAGUAcwAsACAAYgB1AGkAbABkACAAcwBjAHIAaQBwAHQAcwAgAGEAbgBkACAAZABvAGMAdQBtAGUAbgB0AGEAdABpAG8AbgAuAA0ACgANAAoAIgBSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAiACAAcgBlAGYAZQByAHMAIAB0AG8AIABhAG4AeQAgAG4AYQBtAGUAcwAgAHMAcABlAGMAaQBmAGkAZQBkACAAYQBzACAAcwB1AGMAaAAgAGEAZgB0AGUAcgAgAHQAaABlACAAYwBvAHAAeQByAGkAZwBoAHQAIABzAHQAYQB0AGUAbQBlAG4AdAAoAHMAKQAuAA0ACgANAAoAIgBPAHIAaQBnAGkAbgBhAGwAIABWAGUAcgBzAGkAbwBuACIAIAByAGUAZgBlAHIAcwAgAHQAbwAgAHQAaABlACAAYwBvAGwAbABlAGMAdABpAG8AbgAgAG8AZgAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABjAG8AbQBwAG8AbgBlAG4AdABzACAAYQBzACAAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAYgB5ACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApAC4ADQAKAA0ACgAiAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AIgAgAHIAZQBmAGUAcgBzACAAdABvACAAYQBuAHkAIABkAGUAcgBpAHYAYQB0AGkAdgBlACAAbQBhAGQAZQAgAGIAeQAgAGEAZABkAGkAbgBnACAAdABvACwAIABkAGUAbABlAHQAaQBuAGcALAAgAG8AcgAgAHMAdQBiAHMAdABpAHQAdQB0AGkAbgBnACAALQAtACAAaQBuACAAcABhAHIAdAAgAG8AcgAgAGkAbgAgAHcAaABvAGwAZQAgAC0ALQAgAGEAbgB5ACAAbwBmACAAdABoAGUAIABjAG8AbQBwAG8AbgBlAG4AdABzACAAbwBmACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABWAGUAcgBzAGkAbwBuACwAIABiAHkAIABjAGgAYQBuAGcAaQBuAGcAIABmAG8AcgBtAGEAdABzACAAbwByACAAYgB5ACAAcABvAHIAdABpAG4AZwAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAHQAbwAgAGEAIABuAGUAdwAgAGUAbgB2AGkAcgBvAG4AbQBlAG4AdAAuAA0ACgANAAoAIgBBAHUAdABoAG8AcgAiACAAcgBlAGYAZQByAHMAIAB0AG8AIABhAG4AeQAgAGQAZQBzAGkAZwBuAGUAcgAsACAAZQBuAGcAaQBuAGUAZQByACwAIABwAHIAbwBnAHIAYQBtAG0AZQByACwAIAB0AGUAYwBoAG4AaQBjAGEAbAAgAHcAcgBpAHQAZQByACAAbwByACAAbwB0AGgAZQByACAAcABlAHIAcwBvAG4AIAB3AGgAbwAgAGMAbwBuAHQAcgBpAGIAdQB0AGUAZAAgAHQAbwAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAuAA0ACgANAAoAUABFAFIATQBJAFMAUwBJAE8ATgAgACYAIABDAE8ATgBEAEkAVABJAE8ATgBTAA0ACgBQAGUAcgBtAGkAcwBzAGkAbwBuACAAaQBzACAAaABlAHIAZQBiAHkAIABnAHIAYQBuAHQAZQBkACwAIABmAHIAZQBlACAAbwBmACAAYwBoAGEAcgBnAGUALAAgAHQAbwAgAGEAbgB5ACAAcABlAHIAcwBvAG4AIABvAGIAdABhAGkAbgBpAG4AZwAgAGEAIABjAG8AcAB5ACAAbwBmACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACwAIAB0AG8AIAB1AHMAZQAsACAAcwB0AHUAZAB5ACwAIABjAG8AcAB5ACwAIABtAGUAcgBnAGUALAAgAGUAbQBiAGUAZAAsACAAbQBvAGQAaQBmAHkALAAgAHIAZQBkAGkAcwB0AHIAaQBiAHUAdABlACwAIABhAG4AZAAgAHMAZQBsAGwAIABtAG8AZABpAGYAaQBlAGQAIABhAG4AZAAgAHUAbgBtAG8AZABpAGYAaQBlAGQAIABjAG8AcABpAGUAcwAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAsACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAHQAaABlACAAZgBvAGwAbABvAHcAaQBuAGcAIABjAG8AbgBkAGkAdABpAG8AbgBzADoADQAKAA0ACgAxACkAIABOAGUAaQB0AGgAZQByACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAbgBvAHIAIABhAG4AeQAgAG8AZgAgAGkAdABzACAAaQBuAGQAaQB2AGkAZAB1AGEAbAAgAGMAbwBtAHAAbwBuAGUAbgB0AHMALAAgAGkAbgAgAE8AcgBpAGcAaQBuAGEAbAAgAG8AcgAgAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AcwAsACAAbQBhAHkAIABiAGUAIABzAG8AbABkACAAYgB5ACAAaQB0AHMAZQBsAGYALgANAAoADQAKADIAKQAgAE8AcgBpAGcAaQBuAGEAbAAgAG8AcgAgAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AcwAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAG0AYQB5ACAAYgBlACAAYgB1AG4AZABsAGUAZAAsACAAcgBlAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGEAbgBkAC8AbwByACAAcwBvAGwAZAAgAHcAaQB0AGgAIABhAG4AeQAgAHMAbwBmAHQAdwBhAHIAZQAsACAAcAByAG8AdgBpAGQAZQBkACAAdABoAGEAdAAgAGUAYQBjAGgAIABjAG8AcAB5ACAAYwBvAG4AdABhAGkAbgBzACAAdABoAGUAIABhAGIAbwB2AGUAIABjAG8AcAB5AHIAaQBnAGgAdAAgAG4AbwB0AGkAYwBlACAAYQBuAGQAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAuACAAVABoAGUAcwBlACAAYwBhAG4AIABiAGUAIABpAG4AYwBsAHUAZABlAGQAIABlAGkAdABoAGUAcgAgAGEAcwAgAHMAdABhAG4AZAAtAGEAbABvAG4AZQAgAHQAZQB4AHQAIABmAGkAbABlAHMALAAgAGgAdQBtAGEAbgAtAHIAZQBhAGQAYQBiAGwAZQAgAGgAZQBhAGQAZQByAHMAIABvAHIAIABpAG4AIAB0AGgAZQAgAGEAcABwAHIAbwBwAHIAaQBhAHQAZQAgAG0AYQBjAGgAaQBuAGUALQByAGUAYQBkAGEAYgBsAGUAIABtAGUAdABhAGQAYQB0AGEAIABmAGkAZQBsAGQAcwAgAHcAaQB0AGgAaQBuACAAdABlAHgAdAAgAG8AcgAgAGIAaQBuAGEAcgB5ACAAZgBpAGwAZQBzACAAYQBzACAAbABvAG4AZwAgAGEAcwAgAHQAaABvAHMAZQAgAGYAaQBlAGwAZABzACAAYwBhAG4AIABiAGUAIABlAGEAcwBpAGwAeQAgAHYAaQBlAHcAZQBkACAAYgB5ACAAdABoAGUAIAB1AHMAZQByAC4ADQAKAA0ACgAzACkAIABOAG8AIABNAG8AZABpAGYAaQBlAGQAIABWAGUAcgBzAGkAbwBuACAAbwBmACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAbQBhAHkAIAB1AHMAZQAgAHQAaABlACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAKABzACkAIAB1AG4AbABlAHMAcwAgAGUAeABwAGwAaQBjAGkAdAAgAHcAcgBpAHQAdABlAG4AIABwAGUAcgBtAGkAcwBzAGkAbwBuACAAaQBzACAAZwByAGEAbgB0AGUAZAAgAGIAeQAgAHQAaABlACAAYwBvAHIAcgBlAHMAcABvAG4AZABpAG4AZwAgAEMAbwBwAHkAcgBpAGcAaAB0ACAASABvAGwAZABlAHIALgAgAFQAaABpAHMAIAByAGUAcwB0AHIAaQBjAHQAaQBvAG4AIABvAG4AbAB5ACAAYQBwAHAAbABpAGUAcwAgAHQAbwAgAHQAaABlACAAcAByAGkAbQBhAHIAeQAgAGYAbwBuAHQAIABuAGEAbQBlACAAYQBzACAAcAByAGUAcwBlAG4AdABlAGQAIAB0AG8AIAB0AGgAZQAgAHUAcwBlAHIAcwAuAA0ACgANAAoANAApACAAVABoAGUAIABuAGEAbQBlACgAcwApACAAbwBmACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAbwByACAAdABoAGUAIABBAHUAdABoAG8AcgAoAHMAKQAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAHMAaABhAGwAbAAgAG4AbwB0ACAAYgBlACAAdQBzAGUAZAAgAHQAbwAgAHAAcgBvAG0AbwB0AGUALAAgAGUAbgBkAG8AcgBzAGUAIABvAHIAIABhAGQAdgBlAHIAdABpAHMAZQAgAGEAbgB5ACAATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgAsACAAZQB4AGMAZQBwAHQAIAB0AG8AIABhAGMAawBuAG8AdwBsAGUAZABnAGUAIAB0AGgAZQAgAGMAbwBuAHQAcgBpAGIAdQB0AGkAbwBuACgAcwApACAAbwBmACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAYQBuAGQAIAB0AGgAZQAgAEEAdQB0AGgAbwByACgAcwApACAAbwByACAAdwBpAHQAaAAgAHQAaABlAGkAcgAgAGUAeABwAGwAaQBjAGkAdAAgAHcAcgBpAHQAdABlAG4AIABwAGUAcgBtAGkAcwBzAGkAbwBuAC4ADQAKAA0ACgA1ACkAIABUAGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUALAAgAG0AbwBkAGkAZgBpAGUAZAAgAG8AcgAgAHUAbgBtAG8AZABpAGYAaQBlAGQALAAgAGkAbgAgAHAAYQByAHQAIABvAHIAIABpAG4AIAB3AGgAbwBsAGUALAAgAG0AdQBzAHQAIABiAGUAIABkAGkAcwB0AHIAaQBiAHUAdABlAGQAIABlAG4AdABpAHIAZQBsAHkAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAsACAAYQBuAGQAIABtAHUAcwB0ACAAbgBvAHQAIABiAGUAIABkAGkAcwB0AHIAaQBiAHUAdABlAGQAIAB1AG4AZABlAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGwAaQBjAGUAbgBzAGUALgAgAFQAaABlACAAcgBlAHEAdQBpAHIAZQBtAGUAbgB0ACAAZgBvAHIAIABmAG8AbgB0AHMAIAB0AG8AIAByAGUAbQBhAGkAbgAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAZABvAGUAcwAgAG4AbwB0ACAAYQBwAHAAbAB5ACAAdABvACAAYQBuAHkAIABkAG8AYwB1AG0AZQBuAHQAIABjAHIAZQBhAHQAZQBkACAAdQBzAGkAbgBnACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlAC4ADQAKAA0ACgBUAEUAUgBNAEkATgBBAFQASQBPAE4ADQAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYgBlAGMAbwBtAGUAcwAgAG4AdQBsAGwAIABhAG4AZAAgAHYAbwBpAGQAIABpAGYAIABhAG4AeQAgAG8AZgAgAHQAaABlACAAYQBiAG8AdgBlACAAYwBvAG4AZABpAHQAaQBvAG4AcwAgAGEAcgBlACAAbgBvAHQAIABtAGUAdAAuAA0ACgANAAoARABJAFMAQwBMAEEASQBNAEUAUgANAAoAVABIAEUAIABGAE8ATgBUACAAUwBPAEYAVABXAEEAUgBFACAASQBTACAAUABSAE8AVgBJAEQARQBEACAAIgBBAFMAIABJAFMAIgAsACAAVwBJAFQASABPAFUAVAAgAFcAQQBSAFIAQQBOAFQAWQAgAE8ARgAgAEEATgBZACAASwBJAE4ARAAsACAARQBYAFAAUgBFAFMAUwAgAE8AUgAgAEkATQBQAEwASQBFAEQALAAgAEkATgBDAEwAVQBEAEkATgBHACAAQgBVAFQAIABOAE8AVAAgAEwASQBNAEkAVABFAEQAIABUAE8AIABBAE4AWQAgAFcAQQBSAFIAQQBOAFQASQBFAFMAIABPAEYAIABNAEUAUgBDAEgAQQBOAFQAQQBCAEkATABJAFQAWQAsACAARgBJAFQATgBFAFMAUwAgAEYATwBSACAAQQAgAFAAQQBSAFQASQBDAFUATABBAFIAIABQAFUAUgBQAE8AUwBFACAAQQBOAEQAIABOAE8ATgBJAE4ARgBSAEkATgBHAEUATQBFAE4AVAAgAE8ARgAgAEMATwBQAFkAUgBJAEcASABUACwAIABQAEEAVABFAE4AVAAsACAAVABSAEEARABFAE0AQQBSAEsALAAgAE8AUgAgAE8AVABIAEUAUgAgAFIASQBHAEgAVAAuACAASQBOACAATgBPACAARQBWAEUATgBUACAAUwBIAEEATABMACAAVABIAEUAIABDAE8AUABZAFIASQBHAEgAVAAgAEgATwBMAEQARQBSACAAQgBFACAATABJAEEAQgBMAEUAIABGAE8AUgAgAEEATgBZACAAQwBMAEEASQBNACwAIABEAEEATQBBAEcARQBTACAATwBSACAATwBUAEgARQBSACAATABJAEEAQgBJAEwASQBUAFkALAAgAEkATgBDAEwAVQBEAEkATgBHACAAQQBOAFkAIABHAEUATgBFAFIAQQBMACwAIABTAFAARQBDAEkAQQBMACwAIABJAE4ARABJAFIARQBDAFQALAAgAEkATgBDAEkARABFAE4AVABBAEwALAAgAE8AUgAgAEMATwBOAFMARQBRAFUARQBOAFQASQBBAEwAIABEAEEATQBBAEcARQBTACwAIABXAEgARQBUAEgARQBSACAASQBOACAAQQBOACAAQQBDAFQASQBPAE4AIABPAEYAIABDAE8ATgBUAFIAQQBDAFQALAAgAFQATwBSAFQAIABPAFIAIABPAFQASABFAFIAVwBJAFMARQAsACAAQQBSAEkAUwBJAE4ARwAgAEYAUgBPAE0ALAAgAE8AVQBUACAATwBGACAAVABIAEUAIABVAFMARQAgAE8AUgAgAEkATgBBAEIASQBMAEkAVABZACAAVABPACAAVQBTAEUAIABUAEgARQAgAEYATwBOAFQAIABTAE8ARgBUAFcAQQBSAEUAIABPAFIAIABGAFIATwBNACAATwBUAEgARQBSACAARABFAEEATABJAE4ARwBTACAASQBOACAAVABIAEUAIABGAE8ATgBUACAAUwBPAEYAVABXAEEAUgBFAC4ADQAKAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAGQAbwBiAGUALgBjAG8AbQAvAHQAeQBwAGUALwBsAGUAZwBhAGwALgBoAHQAbQBsAFMAbwB1AHIAYwBlACAAUwBhAG4AcwAgAFAAcgBvAEwAaQBnAGgAdABTAHQAcgBhAGkAZwBoAHQAIABsAEEAbAB0AGUAcgBuAGEAdABlACAAYQBBAGwAdABlAHIAbgBhAHQAZQAgAGcAUwBlAHIAaQBmAGUAZAAgAEkAAgAAAAAAAP+1ADIAAAAAAAAAAAAAAAAAAAAAAAAAAANCAAABAgEDAAMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQCtAMkAxwCuAGIBBAEFAGMBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETAJAAZAD9ARQA/wEVARYBFwEYARkAywBlAMgBGgDKARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScA+AEoASkBKgErASwBLQEuAS8BMADPAMwAzQExAM4BMgD6ATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8A4gFAAUEBQgBmAUMBRAFFAUYA0wDQANEArwBnAUcBSAFJAUoBSwFMAU0BTgFPAVAAkQCwAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAOQBYAFhAWIBYwFkAWUBZgFnAWgBaQDWANQA1QFqAGgBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAOsBggC7AYMBhAGFAYYBhwDmAYgBiQDpAO0BigBqAGkAawBtAGwBiwGMAG4BjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAKAAbwD+AZsBAAGcAZ0BngGfAQEAcQBwAHIBoABzAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0A+QGuAa8BsAGxAbIBswG0AbUBtgB1AHQAdgG3AHcBuAG5AboBuwG8Ab0A1wG+Ab8BwAHBAcIBwwHEAcUBxgHHAOMByAHJAcoAeAHLAcwBzQHOAc8AegB5AHsAfQB8AdAB0QHSAdMB1AHVAdYB1wHYAdkAoQCxAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAOUB6QHqAesB7ACJAe0B7gHvAfAB8QHyAH8AfgCAAfMAgQH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoA7AILALoCDAINAg4CDwIQAOcCEQISAOoA7gITAhQCFQIWAhcAwADBAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAAkAEwAUABUAFgAXABgAGQAaABsAHAJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawARAA8AHQAeAKsABACjACIAogAKAAUAtgC3ALQAtQDEAMUAvgC/AKkAqgAQAmwAsgCzAm0CbgDDAIcAQgALAAwAPgBAAF4AYAASAF8APwDoAA0AggDCAIYAiACLAm8AigCMAnAAIwJxAAYCcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAJ0CqgCeAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygCDAL0ABwCFAJYCywCEAswCzQLOAs8C0ALRAtIC0wLUAtUC1gC8AtcC2AAIAMYA9QD0APYC2QLaAtsC3ALdAt4ADgDvAPAAuALfACAAHwAhAJQAlQCTAEEAjwBhAKcApACbAJIC4ACYAJwApQLhAuIAmQCaAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgAuQL5AvoC+wL8Av0C/gBDAI0A2ADhAv8DAAMBAwIDAwDZAI4A2gDbAN0A3wDcAN4A4AMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPBE5VTEwCQ1IHQW1hY3JvbgZBYnJldmUHdW5pMDFDRAd1bmkxRUEwB3VuaTFFQTIHdW5pMUVBNAd1bmkxRUE2B3VuaTFFQTgHdW5pMUVBQQd1bmkxRUFDB3VuaTFFQUUHdW5pMUVCMAd1bmkxRUIyB3VuaTFFQjQHdW5pMUVCNgdBb2dvbmVrC0NjaXJjdW1mbGV4CkNkb3RhY2NlbnQGRGNhcm9uB3VuaTFFMEMHdW5pMUUwRQZEY3JvYXQGRWNhcm9uB0VtYWNyb24GRWJyZXZlCkVkb3RhY2NlbnQHdW5pMUVCOAd1bmkxRUJBB3VuaTFFQkMHdW5pMUVCRQd1bmkxRUMwB3VuaTFFQzIHdW5pMUVDNAd1bmkxRUM2B0VvZ29uZWsLR2NpcmN1bWZsZXgKR2RvdGFjY2VudAd1bmkwMTIyBkdjYXJvbgd1bmkxRTIwC3VuaTAwNDcwMzAzC0hjaXJjdW1mbGV4B3VuaTFFMjQHdW5pMUUyQQRIYmFyBkl0aWxkZQdJbWFjcm9uB3VuaTAxQ0YHdW5pMUVDOAd1bmkxRUNBB0lvZ29uZWsLSmNpcmN1bWZsZXgHdW5pMDEzNgZMYWN1dGUGTGNhcm9uB3VuaTAxM0IETGRvdAd1bmkxRTM2B3VuaTFFMzgHdW5pMUUzQQd1bmkxRTQyBk5hY3V0ZQZOY2Fyb24HdW5pMDE0NQd1bmkxRTQ0B3VuaTFFNDYHdW5pMUU0OAdPbWFjcm9uDU9odW5nYXJ1bWxhdXQHdW5pMDFEMQd1bmkxRUNDB3VuaTFFQ0UHdW5pMUVEMAd1bmkxRUQyB3VuaTFFRDQHdW5pMUVENgd1bmkxRUQ4BU9ob3JuB3VuaTFFREEHdW5pMUVEQwd1bmkxRURFB3VuaTFFRTAHdW5pMUVFMgd1bmkwMUVBBlJhY3V0ZQZSY2Fyb24HdW5pMDE1Ngd1bmkxRTVBB3VuaTFFNUMHdW5pMUU1RQZTYWN1dGULU2NpcmN1bWZsZXgHdW5pMDE1RQd1bmkwMjE4B3VuaTFFNjAHdW5pMUU2Mgd1bmkxRTlFBlRjYXJvbgd1bmkwMTYyB3VuaTAyMUEHdW5pMUU2Qwd1bmkxRTZFBlV0aWxkZQdVbWFjcm9uBlVicmV2ZQVVcmluZw1VaHVuZ2FydW1sYXV0B3VuaTAxRDMHdW5pMDFENQd1bmkwMUQ3B3VuaTAxRDkHdW5pMDFEQgd1bmkxRUU0B3VuaTFFRTYHVW9nb25lawVVaG9ybgd1bmkxRUU4B3VuaTFFRUEHdW5pMUVFQwd1bmkxRUVFB3VuaTFFRjAGV2dyYXZlBldhY3V0ZQtXY2lyY3VtZmxleAlXZGllcmVzaXMGWWdyYXZlC1ljaXJjdW1mbGV4B3VuaTFFOEUHdW5pMUVGNAd1bmkxRUY2B3VuaTFFRjgGWmFjdXRlClpkb3RhY2NlbnQHdW5pMUU5Mgd1bmkwMThGB2FtYWNyb24GYWJyZXZlB3VuaTAxQ0UHdW5pMUVBMQd1bmkxRUEzB3VuaTFFQTUHdW5pMUVBNwd1bmkxRUE5B3VuaTFFQUIHdW5pMUVBRAd1bmkxRUFGB3VuaTFFQjEHdW5pMUVCMwd1bmkxRUI1B3VuaTFFQjcHYW9nb25lawtjY2lyY3VtZmxleApjZG90YWNjZW50BmRjYXJvbgd1bmkxRTBEB3VuaTFFMEYGZWNhcm9uB2VtYWNyb24GZWJyZXZlCmVkb3RhY2NlbnQHdW5pMUVCOQd1bmkxRUJCB3VuaTFFQkQHdW5pMUVCRgd1bmkxRUMxB3VuaTFFQzMHdW5pMUVDNQd1bmkxRUM3B2VvZ29uZWsLZ2NpcmN1bWZsZXgKZ2RvdGFjY2VudAd1bmkwMTIzBmdjYXJvbgd1bmkxRTIxC3VuaTAwNjcwMzAzC2hjaXJjdW1mbGV4B3VuaTFFMjUHdW5pMUUyQgRoYmFyBml0aWxkZQdpbWFjcm9uB3VuaTAxRDAHdW5pMUVDOQd1bmkxRUNCB2lvZ29uZWsJaW9nb25lay5kC2pjaXJjdW1mbGV4B3VuaTAxMzcMa2dyZWVubGFuZGljBmxhY3V0ZQZsY2Fyb24EbGRvdAd1bmkwMTNDB3VuaTFFMzcHdW5pMUUzOQd1bmkxRTNCB3VuaTFFNDMGbmFjdXRlBm5jYXJvbgd1bmkwMTQ2B3VuaTFFNDUHdW5pMUU0Nwd1bmkxRTQ5C25hcG9zdHJvcGhlB29tYWNyb24Nb2h1bmdhcnVtbGF1dAd1bmkwMUQyB3VuaTFFQ0QHdW5pMUVDRgd1bmkxRUQxB3VuaTFFRDMHdW5pMUVENQd1bmkxRUQ3B3VuaTFFRDkFb2hvcm4HdW5pMUVEQgd1bmkxRUREB3VuaTFFREYHdW5pMUVFMQd1bmkxRUUzB3VuaTAxRUIGcmFjdXRlB3VuaTAxNTcGcmNhcm9uB3VuaTFFNUIHdW5pMUU1RAd1bmkxRTVGBnNhY3V0ZQtzY2lyY3VtZmxleAd1bmkwMTVGB3VuaTAyMTkHdW5pMUU2MQd1bmkxRTYzBnRjYXJvbgd1bmkwMTYzB3VuaTAyMUIHdW5pMUU2RAd1bmkxRTZGB3VuaTFFOTcGdXRpbGRlB3VtYWNyb24GdWJyZXZlBXVyaW5nDXVodW5nYXJ1bWxhdXQHdW5pMDFENAd1bmkwMUQ2B3VuaTAxRDgHdW5pMDFEQQd1bmkwMURDB3VuaTFFRTUHdW5pMUVFNwd1b2dvbmVrBXVob3JuB3VuaTFFRTkHdW5pMUVFQgd1bmkxRUVEB3VuaTFFRUYHdW5pMUVGMQZ3Z3JhdmUGd2FjdXRlC3djaXJjdW1mbGV4CXdkaWVyZXNpcwZ5Z3JhdmULeWNpcmN1bWZsZXgHdW5pMUU4Rgd1bmkxRUY1B3VuaTFFRjcHdW5pMUVGOQZ6YWN1dGUKemRvdGFjY2VudAd1bmkxRTkzB3VuaTAyMzcHdW5pMDI1MQd1bmkwMjU5B3VuaTAyNjEDZl9mA2ZfdANJLmEISWdyYXZlLmEISWFjdXRlLmENSWNpcmN1bWZsZXguYQhJdGlsZGUuYQtJZGllcmVzaXMuYQlJbWFjcm9uLmEMSWRvdGFjY2VudC5hCXVuaTAxQ0YuYQl1bmkxRUM4LmEJdW5pMUVDQS5hCUlvZ29uZWsuYQNhLmEIYWdyYXZlLmEIYWFjdXRlLmENYWNpcmN1bWZsZXguYQhhdGlsZGUuYQthZGllcmVzaXMuYQlhbWFjcm9uLmEIYWJyZXZlLmEHYXJpbmcuYQl1bmkwMUNFLmEJdW5pMUVBMS5hCXVuaTFFQTMuYQl1bmkxRUE1LmEJdW5pMUVBNy5hCXVuaTFFQTkuYQl1bmkxRUFCLmEJdW5pMUVBRC5hCXVuaTFFQUYuYQl1bmkxRUIxLmEJdW5pMUVCMy5hCXVuaTFFQjUuYQl1bmkxRUI3LmEJYW9nb25lay5hA2cuYQ1nY2lyY3VtZmxleC5hCGdicmV2ZS5hDGdkb3RhY2NlbnQuYQl1bmkwMTIzLmEIZ2Nhcm9uLmEJdW5pMUUyMS5hDXVuaTAwNjcwMzAzLmEDbC5hCGxhY3V0ZS5hCGxjYXJvbi5hBmxkb3QuYQl1bmkwMTNDLmEJdW5pMUUzNy5hCXVuaTFFMzkuYQl1bmkxRTNCLmEIbHNsYXNoLmEEZmwuYQl6ZXJvLnBudW0Ib25lLnBudW0IdHdvLnBudW0KdGhyZWUucG51bQlmb3VyLnBudW0JZml2ZS5wbnVtCHNpeC5wbnVtCnNldmVuLnBudW0KZWlnaHQucG51bQluaW5lLnBudW0JemVyby50bnVtCG9uZS50bnVtCHR3by50bnVtCnRocmVlLnRudW0JZm91ci50bnVtCWZpdmUudG51bQhzaXgudG51bQpzZXZlbi50bnVtCmVpZ2h0LnRudW0JbmluZS50bnVtCXplcm8ub251bQhvbmUub251bQh0d28ub251bQp0aHJlZS5vbnVtCWZvdXIub251bQlmaXZlLm9udW0Ic2l4Lm9udW0Kc2V2ZW4ub251bQplaWdodC5vbnVtCW5pbmUub251bQd1bmkwMEFECmZpZ3VyZWRhc2gHdW5pMjAxNQd1bmkyMTE3B3VuaTIxMjAHYXQuY2FzZQl6ZXJvLnN1cHMIb25lLnN1cHMIdHdvLnN1cHMKdGhyZWUuc3Vwcwlmb3VyLnN1cHMJZml2ZS5zdXBzCHNpeC5zdXBzCnNldmVuLnN1cHMKZWlnaHQuc3VwcwluaW5lLnN1cHMOcGFyZW5sZWZ0LnN1cHMPcGFyZW5yaWdodC5zdXBzC3BlcmlvZC5zdXBzCmNvbW1hLnN1cHMJemVyby5zdWJzCG9uZS5zdWJzCHR3by5zdWJzCnRocmVlLnN1YnMJZm91ci5zdWJzCWZpdmUuc3VicwhzaXguc3VicwpzZXZlbi5zdWJzCmVpZ2h0LnN1YnMJbmluZS5zdWJzDnBhcmVubGVmdC5zdWJzD3BhcmVucmlnaHQuc3VicwtwZXJpb2Quc3Vicwpjb21tYS5zdWJzCXplcm8uZG5vbQhvbmUuZG5vbQh0d28uZG5vbQp0aHJlZS5kbm9tCWZvdXIuZG5vbQlmaXZlLmRub20Ic2l4LmRub20Kc2V2ZW4uZG5vbQplaWdodC5kbm9tCW5pbmUuZG5vbQ5wYXJlbmxlZnQuZG5vbQ9wYXJlbnJpZ2h0LmRub20LcGVyaW9kLmRub20KY29tbWEuZG5vbQl6ZXJvLm51bXIIb25lLm51bXIIdHdvLm51bXIKdGhyZWUubnVtcglmb3VyLm51bXIJZml2ZS5udW1yCHNpeC5udW1yCnNldmVuLm51bXIKZWlnaHQubnVtcgluaW5lLm51bXIOcGFyZW5sZWZ0Lm51bXIPcGFyZW5yaWdodC5udW1yC3BlcmlvZC5udW1yCmNvbW1hLm51bXINb3JkZmVtaW5pbmUuYQZhLnN1cHMGYi5zdXBzBmMuc3VwcwZkLnN1cHMGZS5zdXBzBmYuc3VwcwZnLnN1cHMGaC5zdXBzBmkuc3VwcwZqLnN1cHMGay5zdXBzBmwuc3VwcwZtLnN1cHMGbi5zdXBzBm8uc3VwcwZwLnN1cHMGcS5zdXBzBnIuc3VwcwZzLnN1cHMGdC5zdXBzBnUuc3VwcwZ2LnN1cHMGdy5zdXBzBnguc3VwcwZ5LnN1cHMGei5zdXBzC2VncmF2ZS5zdXBzC2VhY3V0ZS5zdXBzDHVuaTAyNTkuc3VwcwZhLnN1cGEGZy5zdXBhBmwuc3VwYQRFdXJvB3VuaTAxOTINY29sb25tb25ldGFyeQRsaXJhB3VuaTIwQTYGcGVzZXRhBGRvbmcHdW5pMjBCMQd1bmkyMEIyB3VuaTIwQjUHdW5pMjBCOQd1bmkyMEJBB3VuaTIyMTUKc2xhc2guZnJhYwhvbmV0aGlyZAl0d290aGlyZHMJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMHdW5pMjIxOQd1bmkwMEI1B3VuaTIyMDYHdW5pMjEyNgd1bmkyMTEzCWVzdGltYXRlZAd1bmkyMTkwB2Fycm93dXAHdW5pMjE5MglhcnJvd2Rvd24HdW5pMjVBMAd1bmkyNUM2B3VuaTI1QzkHdW5pMjc1Mgd0cmlhZ3VwB3VuaTI1QjMHdW5pMjVCNgd1bmkyNUI3B3RyaWFnZG4HdW5pMjVCRAd1bmkyNUMwB3VuaTI1QzEHdW5pMjYxMAd1bmkyNjExB3VuaTI3MTMHdW5pMjY2QQd1bmkyMDMyB3VuaTIwMzMHdW5pMDJCQgd1bmkwMkJDB3VuaTAyQkUHdW5pMDJCRgd1bmkwMkM4B3VuaTAyQzkHdW5pMDJDQQd1bmkwMkNCB3VuaTAyQ0MHdW5pMDMwMAt1bmkwMzAwLmNhcAd1bmkwMzAxC3VuaTAzMDEuY2FwB3VuaTAzMDILdW5pMDMwMi5jYXAHdW5pMDMwMwt1bmkwMzAzLmNhcAd1bmkwMzA0C3VuaTAzMDQuY2FwB3VuaTAzMDYLdW5pMDMwNi5jYXAHdW5pMDMwNwt1bmkwMzA3LmNhcAd1bmkwMzA4C3VuaTAzMDguY2FwB3VuaTAzMDkLdW5pMDMwOS5jYXAHdW5pMDMwQQt1bmkwMzBBLmNhcAd1bmkwMzBCC3VuaTAzMEIuY2FwB3VuaTAzMEMLdW5pMDMwQy5jYXAHdW5pMDMwRgt1bmkwMzBGLmNhcAd1bmkwMzEyB3VuaTAzMTMHdW5pMDMxQgd1bmkwMzIzB3VuaTAzMjQHdW5pMDMyNgd1bmkwMzI3C3VuaTAzMjcuY2FwB3VuaTAzMjgLdW5pMDMyOC5jYXAHdW5pMDMyRQd1bmkwMzMxC3VuaTAzMDgwMzA0D3VuaTAzMDgwMzA0LmNhcAt1bmkwMzA4MDMwMQ91bmkwMzA4MDMwMS5jYXALdW5pMDMwODAzMEMPdW5pMDMwODAzMEMuY2FwC3VuaTAzMDgwMzAwD3VuaTAzMDgwMzAwLmNhcAt1bmkwMzAyMDMwMQ91bmkwMzAyMDMwMS5jYXALdW5pMDMwMjAzMDAPdW5pMDMwMjAzMDAuY2FwC3VuaTAzMDIwMzA5D3VuaTAzMDIwMzA5LmNhcAt1bmkwMzAyMDMwMw91bmkwMzAyMDMwMy5jYXALdW5pMDMwNjAzMDEPdW5pMDMwNjAzMDEuY2FwC3VuaTAzMDYwMzAwD3VuaTAzMDYwMzAwLmNhcAt1bmkwMzA2MDMwOQ91bmkwMzA2MDMwOS5jYXALdW5pMDMwNjAzMDMPdW5pMDMwNjAzMDMuY2FwCXVuaTAzMEMuYQl1bmkwMzI2LmEHdW5pMDBBMAd1bmkyMDA3CnNwYWNlLmZyYWMMbmJzcGFjZS5mcmFjB3VuaTAyNDMHdW5pMDEyQwd1bmkwMTRFB3VuaTAxODAHdW5pMDEyRAd1bmkwMTRGC3VuaTAzMDIwMzA2D3VuaTAzMDIwMzA2LmNhcAAAAAAAAAH//wACAAEAAAAMAAAAAADiAAIAIwAEADcAAQBNAE4AAQBoAGgAAQBvAG8AAgB+AH4AAQCgAKIAAQCoAKgAAQDMAM0AAQDlAOUAAQD7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Afr/4gAIACcABAEuAAQBlwAEAeD/4gHm/+IB9P/iAfr/4gIl/4cABQHg/+IB5v/iAfT/4gH6/+ICJf+HAAECJf/DAAECJf/DAAgAJwADAS4AAwGXAAMB4P/iAeb/4gH0/+IB+v/iAiX/hwADAgn/7AIL/+wC4f/sABIAGf/sABr/9gAc/+IAJwAmANP/9gDU//YA1f/2ANb/9gDX/+IA2P/iANn/4gDa/+IA2//iANz/4gDd/+IA3v/iAS4AJgGXACYAAwIJ//MCC//zAuH/8wDwAAT/0gAG/+sACv/rABL/6wAU/+sAFv/sABf/rgAY/+EAGf/XABr/4QAb/+YAHP+8AB7/6AAg//MAIf/zACL/8wAj/9IAJwBDACz/8wAu//MAOP/SADn/0gA6/9IAO//SADz/0gA9/9IAPv/SAD//0gBA/9IAQf/SAEL/0gBD/9IARP/SAEX/0gBG/9IAR//SAEj/0gBJ/9IASv/SAEv/0gBM/9IATf/SAE//6wBQ/+sAUf/rAFL/6wBT/+sAaf/rAGr/6wBr/+sAbP/rAG3/6wBu/+sAb//rAJH/6wCS/+sAk//rAJT/6wCV/+sAlv/rAJf/6wCY/+sAmf/rAJr/6wCb/+sAnP/rAJ3/6wCe/+sAn//rAKD/6wCh/+sAov/rAKP/6wCk/+sApf/rAKb/6wCn/+sAqP/rAK//7ACw/+wAsf/sALL/7ACz/+wAtP/sALX/7AC3/64AuP+uALn/rgC6/64Au/+uALz/4QC9/+EAvv/hAL//4QDA/+EAwf/hAML/4QDD/+EAxP/hAMX/4QDG/+EAx//hAMj/4QDJ/+EAyv/hAMv/4QDM/+EAzf/hAM7/4QDP/+EA0P/hANH/4QDS/+EA0//hANT/4QDV/+EA1v/hANf/vADY/7wA2f+8ANr/vADb/7wA3P+8AN3/vADe/7wA5v/oAOf/6ADo/+gA6f/oAOr/6ADr/+gA7P/oAO3/6ADu/+gA7//oAPD/6ADx/+gA8v/oAPP/6AD0/+gA9f/oAPb/6AD3/+gA+P/oAPn/6AD6/+gA+//oAPz/6AD9//MA/v/zAP//8wEA//MBAf/zAQL/8wED//MBBP/zAQX/8wEG//MBB//zAQj/8wEJ//MBCv/zAQv/8wEM//MBDf/zAQ7/8wEP//MBEP/zARH/8wES//MBE//zART/8wEV//MBFv/zAS4AQwFC//MBQ//zAUT/8wFF//MBRv/zAUf/8wFI//MBSf/zAUr/8wFL//MBTP/zAU3/8wFO//MBT//zAVD/8wFR//MBUv/zAVP/8wFU//MBVf/zAVb/8wFX//MBWP/zAVn/8wGXAEMBmP/zAZr/8wGb/9IBnP/SAZ3/0gGe/9IBq//zAaz/8wGt//MBrv/zAa//8wGw//MBsf/zAbL/8wGz//MBtP/zAbX/8wG2//MBt//zAbj/8wG5//MBuv/zAbv/8wG8//MBvf/zAb7/8wG///MBwP/zAcH/8wHC//MBw//zAcT/8wHF//MBxv/zAcf/8wHI//MByf/zAdP/0gM8/+sDP//zAAICA//GAgX/dgACAgP/xgIF/3YANgAE/+sAFv/rABf/wwAZ/+wAG//sABz/1wAd/9cANf/sADj/6wA5/+sAOv/rADv/6wA8/+sAPf/rAD7/6wA//+sAQP/rAEH/6wBC/+sAQ//rAET/6wBF/+sARv/rAEf/6wBI/+sASf/rAEr/6wBL/+sATP/rAE3/6wCv/+sAsP/rALH/6wCy/+sAs//rALT/6wC1/+sAt//DALj/wwC5/8MAuv/DALv/wwDX/9cA2P/XANn/1wDa/9cA2//XANz/1wDd/9cA3v/XAN//1wDg/9cA4f/XAOL/1wC2AAT/2AAN/7AAHv/rACD/1wAh/9cAIv/XACT/9gAs/9cALv/XADEAEQAy/+wAOP/YADn/2AA6/9gAO//YADz/2AA9/9gAPv/YAD//2ABA/9gAQf/YAEL/2ABD/9gARP/YAEX/2ABG/9gAR//YAEj/2ABJ/9gASv/YAEv/2ABM/9gATf/YAH//sADl//UA5v/rAOf/6wDo/+sA6f/rAOr/6wDr/+sA7P/rAO3/6wDu/+sA7//rAPD/6wDx/+sA8v/rAPP/6wD0/+sA9f/rAPb/6wD3/+sA+P/rAPn/6wD6/+sA+//rAPz/6wD9/9cA/v/XAP//1wEA/9cBAf/XAQL/1wED/9cBBP/XAQX/1wEG/9cBB//XAQj/1wEJ/9cBCv/XAQv/1wEM/9cBDf/XAQ7/1wEP/9cBEP/XARH/1wES/9cBE//XART/1wEV/9cBFv/XARf/9gEY//YBGf/2ARr/9gEb//YBHP/2AR3/9gEkADYBJgA4ASgANgEuADYBQv/XAUP/1wFE/9cBRf/XAUb/1wFH/9cBSP/XAUn/1wFK/9cBS//XAUz/1wFN/9cBTv/XAU//1wFQ/9cBUf/XAVL/1wFT/9cBVP/XAVX/1wFW/9cBV//XAVj/1wFZ/9cBaAARAWkAEQFqABEBawARAWwAEQFtABEBbv/sAW//7AFw/+wBcf/sAXL/7AFz/+wBdP/sAXX/7AF2/+wBd//sAXj/7AF5/+wBev/sAXv/7AF8/+wBff/sAX7/7AF//+wBgP/sAYH/7AGC/+wBg//sAYT/7AGY/9cBmv/XAav/1wGs/9cBrf/XAa7/1wGv/9cBsP/XAbH/1wGy/9cBs//XAbT/1wG1/9cBtv/XAbf/1wG4/9cBuf/XAbr/1wG7/9cBvP/XAb3/1wG+/9cBv//XAcD/1wHB/9cBwv/XAcP/1wHE/9cBxf/XAcb/1wHH/9cByP/XAcn/1wM//9cASwAX/6AAGP/bABn/xgAa/9wAHP+yACQAJgAnAE4AM//sADT/9wA2ABIAV//cAHP/7gC3/6AAuP+gALn/oAC6/6AAu/+gALz/2wC9/9sAvv/bAL//2wDA/9sAwf/bAML/2wDD/9sAxP/bAMX/2wDG/9sAx//bAMj/2wDJ/9sAyv/bAMv/2wDM/9sAzf/bAM7/2wDP/9sA0P/bANH/2wDS/9sA0//cANT/3ADV/9wA1v/cANf/sgDY/7IA2f+yANr/sgDb/7IA3P+yAN3/sgDe/7IA4//cARcAJgEYACYBGQAmARoAJgEbACYBHAAmAR0AJgEuAE4Bhf/3AYb/9wGH//cBiP/3AYkAEgGKABIBiwASAYwAEgGNABIBjgASAY8AEgGQABIBlwBOAzr/3AAKAeD/6gHh//YB5v/rAej/8wH0/9kB9f/0Afb/8wH4//MB+v/XAfz/9AASAdj/9wHa//cB3//2AeD/7QHh/+sB4v/rAeP/mwHk/+sB5f/kAeb/7AHn/+4B6P/2AfP/6wH0/+IB+f/iAfr/4QH7/+wB/P/2AAQB9f/2Afb/6wH4//YB+v/rAAwB4AAJAeEAHgHiAB4B4//sAeQAHgH0//YB9QAdAfYAFAH3ABQB+AAUAfsACgH8//YAAgID/8YCBf92AAMCGP/sAiX/4gIt/+wABAIh/+wCJf/YAiwACQIt/+wAAQIj/+wAAQIj/+wAAhFmAAQAABIwFOYANAAlAAD/9v/Y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AFsAqAC1AGsAtwECAHkBBgEhAMUBLQEtAOEBLwEwAOIBMgEyAOQBOQFSAOUBWQGUAP8BlgGWATsBmAGbATwBngHJAUABzAHMAWwB/QIBAW0CBgILAXICDgIXAXgCGwIbAYICHQIdAYMCHwIfAYQC4ALhAYUDOgM6AYcDPAM9AYgDPwM/AYoAAgBzAAUABQABAAYABgACAAcABwAKAAkACQADAAoACgAEAA0ADQAGAA4ADgAHAA8ADwAIABIAEgAKABMAEwALABQAFAAKABUAFQAMABYAFgANABcAFwAOABgAGAAQABkAGQASABoAGgATABsAGwAUABwAHAAVAB0AHQAWAB4AHgAXAB8AHwAmACAAIAAZACIAIgAcACMAIwAeACQAJAAfACUAJQAlACgAKAAjACoAKwAlACwALQAmAC4ALgAtAC8ALwAqADAAMAArADEAMQAsADIAMgAtADMAMwAvADQANAAwADUANQAxADYANgAyADcANwAzAE8AUwACAFQAVwAKAGkAbwAEAH8AfwAGAIAAgAAHAIEAgQAIAIIAggAJAIMAiAAIAJEAoAAKAKgAqAAKAKkArgAMAK8AtQANALcAuwAOALwAzAAQAM0A0gARANMA1gATANcA3gAVAN8A4gAWAOMA4wAKAOQA5AAPAOUA5QAKAOYA+wAXAPwA/AAcAP0BAQAZAQIBAgAkAQYBFgAcARcBHQAfAR4BIQAlAS0BLQAtAS8BMAAjATIBMgAkATkBQQAlAUIBUQAmAVIBUgAcAVkBWQAmAVoBXwAqAWABZgArAWcBZwAgAWgBbQAsAW4BfgAtAX8BhAAuAYUBiAAwAYkBkAAyAZEBlAAzAZYBlgAmAZgBmAAtAZkBmQAmAZoBmgAtAZsBmwAeAZ4BngAsAZ8BqgAFAasByQAtAcwBzAAkAf0B/gAbAf8CAAAaAgECAQAbAgYCBwAnAggCCAAoAgkCCQApAgoCCgAoAgsCCwApAg4CDgAhAg8CDwAiAhACEAAhAhECEQAiAhICFwAdAhsCGwAYAh0CHQAYAh8CHwAYAuAC4AAoAuEC4QApAzoDOgABAzwDPAAKAz0DPQAmAz8DPwAmAAIAWAAEAAQAFwAGAAYAAQAKAAoAAQANAA0AEAASABIAAQAUABQAAQAWABYAEQAXABcAAgAYABgAAwAZABkABAAaABoAGAAb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) format('truetype') +} +@font-face { + font-family: 'Source Sans Pro'; + font-weight: 700; + font-style: normal; + src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQAABAAwQkFTRYsZlLEAAbQwAAAAOkRTSUcwog5VAAG0bAAAG6hHREVGPkM/lAABX1QAAAD+R1BPU8d8/CYAAWBUAABHTEdTVUIZLU2qAAGnoAAADI5PUy8yW3yRIQAAAbgAAABgY21hcGTgLZkAAA8gAAAJ4GN2dCALvQEqAAAawAAAACRmcGdtBlmcNwAAGQAAAAFzZ2FzcP//AAMAAV9MAAAACGdseWZtfIIvAAAhbAAA5WBoZWFk+96MxAAAATwAAAA2aGhlYQevBe8AAAF0AAAAJGhtdHjWWWS7AAACGAAADQhsb2NhwfCJpAAAGuQAAAaGbWF4cAVcAjMAAAGYAAAAIG5hbWXjWoyIAAEGzAAAPQxwb3N0NUCH1wABQ9gAABtxcHJlcF7cy7YAABp0AAAASwABAAAAAQk3QMKrTF8PPPUACQPoAAAAAMx2buoAAAAAzHbRW/8s/p8EqAPDAAAACQACAAAAAAAAAAEAAAPY/u8AAATG/yz+9wSoAAEAAAAAAAAAAAAAAAAAAANCAAEAAANCAFUABwBpAAUAAQAAAAAACgAAAgABcwADAAEAAwHKAlgABQAAAooCWAAAAEsCigJYAAABXgAyASAAAAILBgMDBAMCAgQgAAAHAAAAAQAAAAAAAAAAQURCRQAAAAD7AgLu/wYAAAPYAREgAAGTAAAAAAHgApQAAAAgAAMCoABUAAAAAADNAAAAzQAAAiv//AJSAFICPQAvAm8AUgIWAFIB+gBSAnAALwKUAFIBFwBSAesAFgJSAFIB8wBSAuYAUgKNAFICnwAvAkwAUgKfAC0CVABSAh4AJQIfABkCjABOAhX/+wMdABACGgAMAfL/+gIZACYCCwA0AjQASQHOACkCNAArAfsAKQE9ABsCCAAoAi4ASQEGADwBB//SAgoASQEPAEkDSwBJAjAASQIlACkCNABJAjEAKwF1AEkBrwAYAWkAFAIsAEQB7wAMAuwAGAHhAA4B7wAMAbsAIgIr//wCK//8Aiv//AIr//wCK//8Aiv//AIr//wCK//8Aiv//AIr//wCK//8Aiv//AIr//wCK//8Aiv//AIr//wCK//8Aiv//AIr//wCK//8Aiv//AIr//wDP//8Aj0ALwI9AC8CPQAvAj0ALwI9AC8CbwBSAm8AUgJvAFIChQAcAhYAUgIWAFICFgBSAhYAUgIWAFICFgBSAhYAUgIWAFICFgBSAhYAUgIWAFICFgBSAhYAUgIWAFICFgBSAhYAUgIWAFICcAAvAnAALwJwAC8CcAAvAnAALwJwAC8CcAAvApQAUgKUAFIClABSArgAGwEX//gBFwBMARf/8wEX/+0BF//zARcABgEXAEQBF//zARcAQgEXAEcBFwApAesAFgJSAFIB8wBPAfMAUgHzAFIB8wBSAfMAUgHzAAkB8wBSAfgACgLmAFICjQBSAo0AUgKNAFICjQBSAo0AUgKNAFICjQBSAp8ALwKfAC8CnwAvAp8ALwKfAC8CnwAvAp8ALwKfAC8CnwAvAp8ALwKfAC8CnwAvAp8ALwKfAC8CnwAvAp8AKwNYAC8CnwAvAp8ALwKfAC8CnwAvAp8ALwKfAC8CnwAvAlQAUgJUAFICVABSAlQAUgJUAFICVABSAh4AJQIeACUCHgAlAh4AJQIeACUCHgAlAh4AJQKrAFQCHwAZAh8AGQIfABkCHwAZAh8AGQKMAE4CjABOAowATgKMAE4CjABOAowATgKMAE4CjABOAowATgKMAE4CjABOAowATgKMAE4CjABOAowATgKMAE4CjABOApwATgKcAE4CnABOApwATgKcAE4CnABOAx0AEAMdABADHQAQAx0AEAHy//oB8v/6AfL/+gHy//oB8v/6AfL/+gHy//oB8v/6AhkAJgIZACYCGQAmAhkAJgKFABwCWgBUAqoAQwILADQCCwA0AgsANAILADQCCwA0AgsANAILADQCCwA0AgsANAILADQCCwA0AgsANAILADQCCwA0AgsANAILADQCCwA0AgsANAILADQCCwA0AgsANAILADQDEQA0Ac4AKQHOACkBzgApAc4AKQHOACkCUgArAjQAKwI0ACsCNAArAfsAKQH7ACkB+wApAfsAKQH7ACkB+wApAfsAKQH7ACkB+wApAfsAKQH7ACkB+wApAfsAKQH7ACkB+wApAfsAKQH7ACkCCAAoAggAKAIIACgCCAAoAggAKAIIACgCCAAoAi7/6gIuAEkCLgBJAi4AAgEGAAEBBgA5AQb/9QEG/+oBBv/rAQYAAQEG//UBBgA6AQYAPAEGACgBBgAoAQYASQEH/9ICCgBJAgoASQEPAEMBJABJAZgASQEPAEkBDwBJAQ///wEPADEBGwATA0sASQIwAEkCMABJAjAASQIwAEkCMABJAjAASQIwAEkDLgBDAiUAKQIlACkCJQApAiUAKQIlACkCJQApAiUAKQIlACkCJQApAiUAKQIlACkCJQApAiUAKQIlACkCJQApAiUAKQM+ACkCJQApAiUAKQIlACkCJQApAiUAKQIlACkCJQApAXUASQF1ACMBdQBJAXUAPQF1AD0Bdf/+Aa8AGAGvABgBrwAYAa8AGAGvABgBrwAYAa8AGAJcAEkBaQAUAWkAFAFpABQBaQAUAWkAFAFpAAMCLABEAiwARAIsAEQCLABEAiwARAIsAEQCLABEAiwARAIsAEQCLABEAiwARAIsAEQCLABEAiwARAIsAEQCLABEAiwARAIsAEQCLABEAiwARAIsAEQCLABEAiwARALsABgC7AAYAuwAGALsABgB7wAMAe8ADAHvAAwB7wAMAe8ADAHvAAwB7wAMAe8ADAG7ACIBuwAiAbsAIgG7ACICKAAwAjQASQEH/9ICNAArAfsAJQI7AC8CaAAbAlUAGwJMABsCggAbAXIAMQFyACYBcgAxAXIAIQFyABsBcgAhAXIAMQFyADEBcgAhAXIAMQFyADEBcgAxAjQAKwI0ACsCNAArAjQAKwI0ACsCNAArAjQAKwI0ACsCNAArAjQAKwI0ACsCNAArAjQAKwI0ACsCNAArAjQAKwI0ACsCNAArAjQAKwI0ACsCNAArAjQAKwI0ACsCOwAvAjsALwI7AC8COwAvAjsALwI7AC8COwAvAjsALwEGAEkBBgBEASQASQGYAEkBBgAkAQYAPwEGAAABBv//ARYAEwJVABsCfwAcAgEAKAIBAEoCAQAhAgEAGAIBABICAQAYAgEALAIBACwCAQApAgEAJQIvADYBhgAsAgIAIwIBABgCHAAjAgEAGAIgADsB+AAsAhkANQIgADMCAQAoAgEASgIBACECAQAYAgEAEgIBABgCAQAtAgEALAIBACkCAQAcAhQAMAGGACwB/AAkAgEAGAIUABoCAQAYAhQANQH3ACwCFQAxAhQAJAETAD8BEwAvARMAPwETAC8DwwBVATsAUwE7AFMBvAAoAbwALQETAE4B4gBOARMAOAETAEMB4gA4AeIAQwETAEMB4gBDARoALwEaADYByAAvAcgANgFCACoBQgAqAeAAKgMgACoCAQAqAyAAKgETAD8BRQAoAfQADAFEAE0BRAArAUQAWgFEACYBRAAgAUQAJgFYAAwA/wBZAVgAFQD/AFkBtgAwAeIAMQHiADECAQApAlcAKALrAC8C6gAvAbsAHAKUAAMClAAWA2sAMgMmADICAQAjAXQAHgF0AFIBdAAhAXQAHwF0ACYBdAAfAXQAKAF0ADIBdAAqAXQAJQD9AEAA/QAlAMEAKgDBACABdAAeAXQAUgF0ACEBdAAfAXQAJgF0AB8BdAAoAXQAMgF0ACoBdAAlAP0AQAD9ACUAwQAqAMEAIAF0AB4BdABSAXQAIQF0AB8BdAAmAXQAHwF0ACgBdAAyAXQAKgF0ACUA/QBAAP0AJQDBACoAwQAgAXQAHgF0AFIBdAAhAXQAHwF0ACYBdAAfAXQAKAF0ADIBdAAqAXQAJQD9AEAA/QAlAMEAKgDBACABYAAhAXwAHgFxABsBYAAhAXwALwE2ABsBfAAeAVUAGgDZABEBYAAaAXcALwCxACYAtP/iAWIALwC4AC8COAAvAXgALwFxABsBfAAvAXwAHgEAAC8BIgARAPYADgF5ACwBUgAIAfkAEAFIAAgBUAAIAS0AFwFVABoBVQAaAVUAFwF8AB4BgAAgALEALwFcACgCAQAXAgEALQIBADMCAQASAgEAFgIBAD0CAQAYAgEAOgIBADMCAQAHAgEABgIBAEICAQAGAgEAKgIBADoCAQBGAgEAEgBb/1cAW/9XAFv/VwNJAB4ExgAeAxsAOAM7ADgDJwAeAzUAOANDACIDNQA4A0MAHwNDAB8DLwAfAgEAIgIBACICAQAxAgEAIgIEALUCAQAiAgEAIgIBACICAQAiAgEAIgIBACICAQA3AgEAIgIBACACAQAgAgEAIgJIABUDHgAmAjIASQIpACwBagAvAj0AIgJuACACwwArAggAGAK0AFQBuAAQAyAALgJqABgCagAoAmoAJwJqACgBRgA2AUYACgHRACkBjAA2AkYAFQJGABUCRgA3AkYANwJGABUCRgAVAkYAEAJGABADIwBKAyMASgJ2AAQCDAAbAhUANgETAFAB4gBQARMAOAETAEMAnQAcAKUAEAIlAJACJQDIAiUAhAIlAIQAgwASASUAEADmACgA5v/wAIMAEgIlAHkCJQB6AiUAkAIlAI0CJQCrAiUAogIlAM4CJQC4AiUAxgAA/34AAP9tAAD/tgAA/8EAAP9yAAD/aAAA/2cAAP9i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AAAAAAAAAAAAAAPOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7IAAAOyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeAAAAAAAAAAAAAAAAAAMCAgIHAjECjwKiAdQCBgIbAhwCJQKtAf4CEgH9AiEB/wIAArMCsgK0AgQCLwIdAiMCHgK4AhoC5AIfAiICIAK6AzYCAwKTApACjgKRAiQCKALuAioCagIQArwCEwIsAu8CjQK3AjQCNQLlAr8CKQIYAvQCMwJsAhECpAKlAqYCBQA/AE4ATwBYAFkAWgBcAHQAdQB2AHgA4wCMAq8AoAC8AL0AvgDAANgA5AFnAO0A/AD9AQYBBwEIAQoBIgEjASQBJgGVATwCsAFRAW4BbwFwAXIBigGWAYwAPQDrAD4A7ABNAPsAUAD+AFEA/wBTAQEAUgEAAFQBAgBXAQUAXQELAF4BDABfAQ0AaAEWAFsBCQBpARcAagEYAGsBGQBsARoAcAEeAHMBIQB3ASUAeQEnAzsDPgB+ASsAegEtAH8BLgCAAS8BMACBATEAgwE0AIIBMgCEATMAiAE4AIoBOgCNAT0AiwE7AUEAlgFHAzwDPwCXAUgAoQFSAKkBWgCrAVsAqgFcAK8BYACwAWEAsgFjALEBYgC4AWkAtwFoAL8BcQDBAXMAwgF0AMMBdQDEAXYAzAF+ANUBhwDZAYsA2gDfAZEA4QGTAOABkgCiAVMAzQF/AEAA7gB7ASgAmAFJAMUBdwDGAXgAxwF5AMgBegDJAXsAbQEbAKgBWQCzAWQAuQFqAnYCfgKDAoUC8ALzAvEC9QLtAvICeAJ/AoQC9gL4AvoC/AL+AwADAgMEAwYDCAMKAwwDFQMWAxgCbgJwAnECdwJ5AnwCgAKBAFUBAwBWAQQAbgEcAHEBHwByASAAhQE1AIYBNgCHATcAiQE5AI4BPgCPAT8AkAFAAKwBXQCtAV4ArgFfALQBZQC1AWYAugFrALsBbADTAYUA1AGGANYBiADbAY0A4gGUAEEA7wBCAPAAQwDxAEQA8gBFAPMARgD0AEcA9QBIAPYASQD3AEoA+ABLAPkATAD6AGABDgBhAQ8AYgEQAGMBEQBkARIAZQETAGYBFABnARUAfAEpAH0BKgCZAUoAmgFLAJsBTACcAU0AnQFOAJ4BTwCfAVAAowFUAKQBVQClAVYApgFXAKcBWADKAXwAywF9AM4BgADPAYEA0AGCANEBgwDSAYQA1wGJANwBjgDdAY8A3gGQAhYCFAIVAhcCCAIJAgwCCgILAg0CJgInAhkCMgJ1AjwCPQJ6ApkCkgLFAq4CsQLCAs8C3bgAACxLuAAJUFixAQGOWbgB/4W4AEQduQAJAANfXi24AAEsICBFaUSwAWAtuAACLLgAASohLbgAAywgRrADJUZSWCNZIIogiklkiiBGIGhhZLAEJUYgaGFkUlgjZYpZLyCwAFNYaSCwAFRYIbBAWRtpILAAVFghsEBlWVk6LbgABCwgRrAEJUZSWCOKWSBGIGphZLAEJUYgamFkUlgjilkv/S24AAUsSyCwAyZQWFFYsIBEG7BARFkbISEgRbDAUFiwwEQbIVlZLbgABiwgIEVpRLABYCAgRX1pGESwAWAtuAAHLLgABiotuAAILEsgsAMmU1iwQBuwAFmKiiCwAyZTWCMhsICKihuKI1kgsAMmU1gjIbgAwIqKG4ojWSCwAyZTWCMhuAEAioobiiNZILADJlNYIyG4AUCKihuKI1kguAADJlNYsAMlRbgBgFBYIyG4AYAjIRuwAyVFIyEjIVkbIVlELbgACSxLU1hFRBshIVktALAAKwCyAQECKwGyAgICKwG3AjAmHhcOAAgrtwMuJh4XDgAIKwC3ATswJhwSAAgrALIEBwcrsAAgRX1pGERLsGBSWLABG7AAWbABjgAAFABeAHQAeAAAAAz/PgAMAesADAJAAAwCfAAMAo4ADALCAAwAAABiAGIAYgBiALABFgFkAaAB3gIUAnICrgLOAwIDQANmA8YEDARcBKQFEgVmBdQGAAZCBnoG4AcyB2wHoggOCHAIugkaCXgJyApuCrIK5gswC3ALoAwCDEYMkAzwDU4NjA30DjwOgg66DyAPcA/AD/QQABAMEBgQJBAwEDwQSBBUEGAQbBB4EIQQkBCcEKgQuBDEENAQ3BDoEPgRbhHUEeAR7BH4EgQSEBIcEigSNBI8EkgSVBJgEmwSeBKEEpASnBKoErQSwBLMEtgS5BLwEwATZBNwE3wTiBOUE6ATrBO4E8QT0BPcFEQUUBRcFGgUdBSAFIwUmBSkFLAUvBUEFRAVHBUoFTQVQBVMFVgVaBV0FbQVwBXMFdgV5BXwFfwWCBYUFiAWLBY4FkQWUBZcFmgWdBaAFowWmBakFrAWvBbMFzQXjBf0GAAYDBgYGCQYMBikGLAYvBjIGNQY5BjwGPwZCBkUGSAZLBk4GUQZrhm6GcYZ0hneGeoZ9hoCGg4aGhomGjIaPhpKGlYaYhpuGnoahhqSGp4aqhsSG3QbgBuMG5gbpBuwG7wbyBvUG+Ab7Bv4HAQcEBwcHCgcNBxAHEwcWBxkHHAcyh0OHWoddh2CHY4dmh2mHbIdvh3KHdYd4h3uHfoeBh4SHh4eLh46HkYeUh5eHm4e+B+qH7Yfwh/OH9of5h/yH/4gCiCAIIwgmCCkILAgvCDIINQg4CDsIPghBCEQIRwhKCE0IUQhwCHMIdgh5CHwIfwiCCIUIiAiLCI4IpAinCKoIrQiwCLMItgi5CLwIvwjUiOUI7QjwCPMJA4kGiQmJDIkPiRKJFokZiSyJL4kyiTWJOIk7iT6JQYlEiUeJSolNiVCJU4lWiVmJXIlfiWKJZYloiWuJbolxiXWJjwmzCcwJzwnSCdUJ2AnbCfaJ+Yn8if+KAooGigmKDIoPihKKFYoYihuKHoo+CkEKRApHCkoKTQpQClMKVgpZClwKXwpiCmUKaAprCm4KcQp0CncKegp9CoAKmgqziraKuYq8ir+KworFisiKy4rOitGK1IrXitqK3YrgiuOK5orpiuyK74ryixALKAs1C0sLYot/C56LoYuki8UL0ovVi9iL24vei+GL5Ivni+qL7YvwjAiMCowNjBCME4wWjBmMHIwfjCKMJYwojCuMLowxjDSMN4w7jD6MQYxEjEeMS4xpjGuMboxxjHSMd4x6jH2MgIyIjIuMjoyRjJSMl4ybjJ6MrQywDNuM7gz7jQ8NKo0+jVSNbg17jZ4Nt43LjdYN6Y3rje2N743xjf8OAQ4DDhWOIw42jk+OYY52DngOgw6FDpsOnQ6njrsOvQ6/DsEOww7ODtAO0g7ajuSO547qju6O+g8FDxkPLY8zDzYPPw9ID0sPTg9Qj1QPWg9gD2MPZg9rD20Pcg93D3wPfg+Aj4oPjw+Xj6APqY+zD8wP5Y/sD/CP9w/9kAeQFBAgEDuQSBBnEIkQqhDAkOWRCZEvkUqRTRFPkVIRVJFXEVmRXBFekWERY5FmEWiRaxFtkXARcpF1EXeRehF8kX8RgZGEEYaRiRGLkY4RkJGfEagRt5HOkd8R8pIHkhMSMBJFEk2SVhJfEmmSbBJuknE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MRMzFx4BFzM+AT8BMxceARczPgE/ATMDIycuAScjDgEPASMYdDsICwcEBw8JQGlBCRAIBAcMBztsfYk5CA4IBAcOCDiEAev/I0YkJEYj//8jRiQkRiP//hXlI0UnJ0Yj5AAAAAABAA4AAAHTAesAGQBJALgAAEVYuAABLxu5AAEACD5ZuAAARVi4ABkvG7kAGQAEPlm4AAEQuAAL0LgAGRC4AA/QugAGAAsADxESOboAFAABABkREjkwMRMnMxceARczPgE/ATMHFyMnLgEnIw4BDwEjqpJ8NwsXCwQJFAkvd5GcfDwMGQ0ECxULNHgBAOtdFCsUFCsUXfjzYRYsFRUrF2EAAQAM/zYB4wHrAB0APQC4AABFWLgACC8buQAIAAg+WbgAAEVYuAAZLxu5ABkABj5ZuQADAAH0ugANAAgAGRESObgACBC4ABLQMDEXHgEzMjY/AQMzFx4BFzM+AT8BMwMOAyMiJic3PwcTCScvDAnBdVULFQsECRMJSm+yDyQvPSgUHg4VZgIFLyUfAeXxIEcjIkch8f3/KkIvGQUFWgAAAAEAIgAAAaIB6wAJAD0AuAAARVi4AAMvG7kAAwAIPlm4AABFWLgACC8buQAIAAQ+WbkABgAB9LgAANC4AAMQuQABAAH0uAAF0DAxNxMjNSEVAzMVISLozgFe5+/+gD4BUls9/q5cAAD////8AAACLwM0AiYABAAAAAcC9wETAAD////8AAACLwM0AiYABAAAAAcC+QETAAD////8AAACLwM0AiYABAAAAAcC+wETAAD////8AAACLwM9AiYABAAAAAcC/QETAAD////8AAACLwM7AiYABAAAAAcDBQETAAD////8AAACLwMgAiYABAAAAAcC/wETAAD////8AAACLwM0AiYABAAAAAcDAQETAAD////8AAACLwN0AiYABAAAAAcDCQETAAD////8AAACLwM0AiYABAAAAAcDDQETAAD////8/ygCLwKOAiYABAAAAAcDEwETAAD////8AAACLwNvAiYABAAAAAcDBwETAAD////8AAACLwN2AiYABAAAAAcDJQETAAD////8AAACLwN2AiYABAAAAAcDJwETAAD////8AAACLwOQAiYABAAAAAcDKQETAAD////8AAACLwO5AiYABAAAAAcDKwETAAD////8/ygCLwM0AiYABAAAACcC+wETAAAABwMTARMAAP////wAAAIvA5UCJgAEAAAABwMtARMAAP////wAAAIvA5UCJgAEAAAABwMvARMAAP////wAAAIvA8MCJgAEAAAABwMxARMAAP////wAAAIvA7kCJgAEAAAABwMzARMAAP////z/KAIvAzQCJgAEAAAAJwMBARMAAAAHAxMBEwAAAAL//P8mAkkCjgAJACcAbQC4AABFWLgAGy8buQAbAA4+WbgAAEVYuAAVLxu5ABUABD5ZuAAARVi4ABkvG7kAGQAEPlm4AABFWLgAHS8buQAdAAQ+WboAJQANAAMrugAFABkAGxESOboAGAAZABsREjm4ABgvuQAJAAH0MDEBJy4BJyMOAQ8BAQ4BIyImNTQ+AjcjJyMHIxMzEw4DFRQWMzI3AWcXDx4OBA4cEBcBiRE1Fyw9DxccDR4z2zN31ojVEx8XDBkRFxEBDFA0bjY3bTRQ/joOEi4tFichGQixsQKO/XIFFBsfDxUVDgAAAv/8AAADDgKOAAYAFgB8ALgAAEVYuAAOLxu5AA4ADj5ZuAAARVi4AAwvG7kADAAEPlm4AABFWLgACC8buQAIAAQ+WboAAgAMAA4REjm6AAsADAAOERI5uAALL7kABgAB9LgADhC5ABEAAfS6ABUACAAOERI5uAAVL7kAEgAB9LgACBC5ABYAAfQwMQERIw4BDwEFFSE1IwcjASEVIRUzFSMVAYgEFzAXMwIb/nrBU3gBRgHC/vjd3QEFATAzZDBpo2KqqgKOYqdiwQD//wAv/ycCJAKaAiYABgAAAAcDFwFYAAD//wAv//QCJAM0AiYABgAAAAcC+QFPAAD//wAv//QCJAM0AiYABgAAAAcC+wFPAAD//wAv//QCJAM0AiYABgAAAAcDDQFPAAD//wAv//QCJANGAiYABgAAAAcDAwFPAAD//wBSAAACPwM0AiYABwAAAAcDDQE3AAD//wBS/ygCPwKOAiYABwAAAAcDEwEzAAD//wBS/0wCPwKOAiYABwAAAAcDGwEzAAD//wAcAAACVQKOAgYA4wAA//8AUgAAAeUDNAImAAgAAAAHAvcBHQAA//8AUgAAAeUDNAImAAgAAAAHAvkBHQAA//8AUgAAAeUDNAImAAgAAAAHAvsBHQAA//8AUgAAAeUDNAImAAgAAAAHAw0BHQAA//8AUgAAAeUDOwImAAgAAAAHAwUBHQAA//8AUgAAAeUDIAImAAgAAAAHAv8BHQAA//8AUgAAAeUDNAImAAgAAAAHAwEBHQAA//8AUgAAAeUDRgImAAgAAAAHAwMBHQAA//8AUv8oAeUCjgImAAgAAAAHAxMBJQAA//8AUgAAAeUDbwImAAgAAAAHAwcBHQAA//8AUgAAAeUDPQImAAgAAAAHAv0BHQAA//8AUgAAAiYDdgImAAgAAAAHAyUBHQAA//8AUgAAAfADdgImAAgAAAAHAycBHQAA//8AUgAAAgMDkAImAAgAAAAHAykBHQAA//8AUgAAAeUDuQImAAgAAAAHAysBHQAA//8AUv8oAeUDNAImAAgAAAAnAvsBHQAAAAcDEwElAAAAAQBS/yYB9wKOACMAXQC4AABFWLgAAC8buQAAAA4+WbgAAEVYuAAjLxu5ACMABD5ZugATABoAAyu4AAAQuQACAAH0ugAHAAAAIxESObgABy+5AAUAAfS4ACMQuQAJAAH0uAAjELgACtAwMRMhFSEVMxUjFSEVIw4DFRQWMzI2NxcOASMiJjU0PgI3IVIBif7r6+sBHwQRIBkPHBELEwgcETQXLTwOFhsN/tQCjmKnYsFiAhEbIhIWFAgGPA4SLi0WJyAaCAAAAP//AC//9AI0AzQCJgAKAAAABwL7AWcAAP//AC//9AI0AzQCJgAKAAAABwMBAWcAAP//AC//9AI0A0YCJgAKAAAABwMDAWcAAP//AC//IQI0ApoCJgAKAAAABwMVAWIAAP//AC//9AI0AzQCJgAKAAAABwMNAWcAAP//AC//9AI0AyACJgAKAAAABwL/AWcAAP//AC//9AI0Az0CJgAKAAAABwL9AWcAAP//AFIAAAJCAzQCJgALAAAABwL7AUkAAP//AFL/KAJCAo4CJgALAAAABwMTAUkAAP//AFL/MAJCAo4CJgALAAAABwMaAUkAAAACABsAAAKeAo4AAwAXAIEAuAAARVi4ABEvG7kAEQAOPlm4AABFWLgAFC8buQAUAA4+WbgAAEVYuAAKLxu5AAoABD5ZuAAARVi4AAcvG7kABwAEPlm6AAkACgARERI5uAAJL7kAAgAB9LgAAdy4AAXQuAABELgADNC4AAEQuQASAAH0uAAP0LgAEhC4ABbQMDEBIRUhNyMRIxEhESMRIzU3NTMVITUzFTMB4P74AQi+SnT++HRJSXQBCHRKAeliYv4XASL+3gHpNgVqampqAAD////4AAAAygM0AiYADAAAAAcC9wCLAAD//wBMAAABHgM0AiYADAAAAAcC+QCLAAD////zAAABIwM0AiYADAAAAAcC+wCLAAD////tAAABKQM9AiYADAAAAAcC/QCLAAD////zAAABIwM7AiYADAAAAAcDBQCLAAD//wAGAAABEAMgAiYADAAAAAcC/wCLAAD//wBEAAAA0gNGAiYADAAAAAcDAwCLAAD////zAAABIwM0AiYADAAAAAcDDQCLAAD//wBCAAAA6QNvAiYADAAAAAcDBwCLAAD//wBH/ygAzwKOAiYADAAAAAcDEwCLAAAAAQAp/yYA7wKOABgAPgC4AABFWLgAAC8buQAAAA4+WbgAAEVYuAACLxu5AAIABD5ZuAAARVi4ABgvG7kAGAAEPlm6AA8ACAADKzAxEzMRDgEVFBYzMjY3Fw4BIyImNTQ+AjcjUnQkIhsRCxMIHRE1Fyw9DRUZCx0Cjv1yFDIcFhQIBjwOEi4tFyYgGQkAAAD//wAW//QB9wM0AiYADQAAAAcC+wFfAAD//wBS/yECVAKOAiYADgAAAAcDFQFHAAD//wBPAAAB1QM0AiYADwAAAAcC+QCOAAD//wBSAAAB1QLaAiYADwAAAAcDNAFs/93//wBS/yEB1QKOAiYADwAAAAcDFQEfAAD//wBSAAAB1QKOAiYADwAAAAcB/QD/AQX//wBS/ygB1QKOAiYADwAAAAcDEwEfAAD//wAJ/ygB1QMgAiYADwAAACcC/wCOAAAABwMTAR8AAP//AFL/TAHVAo4CJgAPAAAABwMbAR8AAAABAAoAAAHaAo4ADQBNALgAAEVYuAAILxu5AAgADj5ZuAAARVi4AAIvG7kAAgAEPlm6AAMAAgAIERI5uAADL7gABty4AAnQuAADELgADNC4AAIQuQANAAH0MDElFSE1BzU3ETMRNxUHFQHa/nxMTHS1tWJi3ChbKAFX/uJiW2Kz//8AUv8oApQCjgImABAAAAAHAxMBdQAA//8AUgAAAjsDNAImABEAAAAHAvkBSAAA//8AUgAAAjsDNAImABEAAAAHAw0BSAAA//8AUgAAAjsDPQImABEAAAAHAv0BSAAA//8AUv8hAjsCjgImABEAAAAHAxUBTgAA//8AUgAAAjsDRgImABEAAAAHAwMBSAAA//8AUv8oAjsCjgImABEAAAAHAxMBTgAA//8AUv9MAjsCjgImABEAAAAHAxsBTgAA//8AL//0AnADNAImABIAAAAHAvcBTwAA//8AL//0AnADNAImABIAAAAHAvkBTwAA//8AL//0AnADNAImABIAAAAHAvsBTwAA//8AL//0AnADPQImABIAAAAHAv0BTwAA//8AL//0AnADOwImABIAAAAHAwUBTwAA//8AL//0AnADIAImABIAAAAHAv8BTwAA//8AL//0AnADNAImABIAAAAHAwsBTwAA//8AL//0AnADNAImABIAAAAHAw0BTwAA//8AL/8oAnACmgImABIAAAAHAxMBTwAA//8AL//0AnADbwImABIAAAAHAwcBTwAA//8AL//0AnADdgImABIAAAAHAyUBTwAA//8AL//0AnADdgImABIAAAAHAycBTwAA//8AL//0AnADkAImABIAAAAHAykBTwAA//8AL//0AnADuQImABIAAAAHAysBTwAA//8AL/8oAnADNAImABIAAAAnAvsBTwAAAAcDEwFPAAAAAwAr/9wCfgKyAAkAEQArAEkAuAAARVi4ACcvG7kAJwAOPlm4AABFWLgAGi8buQAaAAQ+WboAAAAaACcREjm5AAIAAfS6AAoAGgAnERI5uAAnELkADAAB9DAxNxYzMj4CNTQvASYjIgYVFBcBHgEVFA4CIyInByc3LgE1ND4CMzIXNxfrKjsmPywYEysrQE5cFwF4HR4qTGpAYkc+PkUfIipNakBoSEE9gSgiP1k3QzRHLX1uTDkBYCptRFB+WS82TjBXLHNIT31WLjpSMAAAAAIALwAAAycCjgAUAB0AVQC4AABFWLgABS8buQAFAA4+WbgAAEVYuAAQLxu5ABAABD5ZuAAFELkAGgAB9LgAB9C6AAwABQAQERI5uAAML7kACgAB9LgAEBC5ABkAAfS4AA7QMDETND4CMyEVIRUzFSMVIRUhIi4CNxQWOwERIyIGLy9WeUoBpv753NwBEf5KSHdUL3dyZyMjZnMBSlF5USlip2LBYipTfFF6cgHSbQAAAgAv//QCeAMKAA8AMABBALgAAEVYuAAoLxu5ACgADj5ZuAAARVi4AB4vG7kAHgAEPlm6ABYAKgADK7gAHhC5AAAAAfS4ACgQuQAIAAH0MDElMj4CNTQm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AAAAAAEDAAkTtQADAAEECQAAAIoTvgADAAEECQABADAUSAADAAEECQACAA4UeAADAAEECQADAE4UhgADAAEECQAEADAUSAADAAEECQAFAIIU1AADAAEECQAGACwVVgADAAEECQAHAMAVggADAAEECQAIADQWQgADAAEECQAJABgWdgADAAEECQALADIWjgADAAEECQANI7YWwAADAAEECQAOAEg6dgADAAEECQAQAB46vgADAAEECQARABA63AADAAEECQEAABQ67AADAAEECQEBABY7AAADAAEECQECABY7FgADAAEECQEDABI7LENvcHlyaWdodCAyMDEwLCAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgUmlnaHRzIFJlc2VydmVkLlNvdXJjZSBTYW5zIFBybyBTZW1pYm9sZFJlZ3VsYXIxLjAzNjtBREJFO1NvdXJjZVNhbnNQcm8tU2VtaWJvbGQ7QURPQkVWZXJzaW9uIDEuMDM2O1BTIFZlcnNpb24gMS4wMDA7aG90Y29udiAxLjAuNzA7bWFrZW90Zi5saWIyLjUuNTkwMFNvdXJjZVNhbnNQcm8tU2VtaWJvbGRTb3VyY2UgaXMgYSB0cmFkZW1hcmsgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kL29yIG90aGVyIGNvdW50cmllcy5BZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZFBhdWwgRC4gSHVudGh0dHA6Ly93d3cuYWRvYmUuY29tL3R5cGVDb3B5cmlnaHQgMjAxMCwgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCAoaHR0cDovL3d3dy5hZG9iZS5jb20vKSwgd2l0aCBSZXNlcnZlZCBGb250IE5hbWUgJ1NvdXJjZScuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFNvdXJjZSBpcyBhIHRyYWRlbWFyayBvZiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQvb3Igb3RoZXIgY291bnRyaWVzLg0KDQpUaGlzIEZvbnQgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSwgVmVyc2lvbiAxLjEuDQoNClRoaXMgbGljZW5zZSBpcyBjb3BpZWQgYmVsb3csIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OiBodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KU0lMIE9QRU4gRk9OVCBMSUNFTlNFIFZlcnNpb24gMS4xIC0gMjYgRmVicnVhcnkgMjAwNw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KUFJFQU1CTEUNClRoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUgZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBmb250IHByb2plY3RzLCB0byBzdXBwb3J0IHRoZSBmb250IGNyZWF0aW9uIGVmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQgb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAgd2l0aCBvdGhlcnMuDQoNClRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQgcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUgZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkIG5hbWVzIGFyZSBub3QgdXNlZCBieSBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgZm9udHMgYW5kIGRlcml2YXRpdmVzLCBob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy4NCg0KREVGSU5JVElPTlMNCiJGb250IFNvZnR3YXJlIiByZWZlcnMgdG8gdGhlIHNldCBvZiBmaWxlcyByZWxlYXNlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSB1bmRlciB0aGlzIGxpY2Vuc2UgYW5kIGNsZWFybHkgbWFya2VkIGFzIHN1Y2guIFRoaXMgbWF5IGluY2x1ZGUgc291cmNlIGZpbGVzLCBidWlsZCBzY3JpcHRzIGFuZCBkb2N1bWVudGF0aW9uLg0KDQoiUmVzZXJ2ZWQgRm9udCBOYW1lIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50KHMpLg0KDQoiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cyBhcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKS4NCg0KIk1vZGlmaWVkIFZlcnNpb24iIHJlZmVycyB0byBhbnkgZGVyaXZhdGl2ZSBtYWRlIGJ5IGFkZGluZyB0bywgZGVsZXRpbmcsIG9yIHN1YnN0aXR1dGluZyAtLSBpbiBwYXJ0IG9yIGluIHdob2xlIC0tIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEgbmV3IGVudmlyb25tZW50Lg0KDQoiQXV0aG9yIiByZWZlcnMgdG8gYW55IGRlc2lnbmVyLCBlbmdpbmVlciwgcHJvZ3JhbW1lciwgdGVjaG5pY2FsIHdyaXRlciBvciBvdGhlciBwZXJzb24gd2hvIGNvbnRyaWJ1dGVkIHRvIHRoZSBGb250IFNvZnR3YXJlLg0KDQpQRVJNSVNTSU9OICYgQ09ORElUSU9OUw0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksIHJlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250IFNvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsIGluIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuDQoNCjIpIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weSBjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUgaW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci4NCg0KMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250IE5hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIENvcHlyaWdodCBIb2xkZXIuIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHRoZSBwcmltYXJ5IGZvbnQgbmFtZSBhcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLg0KDQo0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250IFNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueSBNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbi4NCg0KNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsIG11c3QgYmUgZGlzdHJpYnV0ZWQgZW50aXJlbHkgdW5kZXIgdGhpcyBsaWNlbnNlLCBhbmQgbXVzdCBub3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgRm9udCBTb2Z0d2FyZS4NCg0KVEVSTUlOQVRJT04NClRoaXMgbGljZW5zZSBiZWNvbWVzIG51bGwgYW5kIHZvaWQgaWYgYW55IG9mIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZSBub3QgbWV0Lg0KDQpESVNDTEFJTUVSDQpUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS5odHRwOi8vd3d3LmFkb2JlLmNvbS90eXBlL2xlZ2FsLmh0bWxTb3VyY2UgU2FucyBQcm9TZW1pYm9sZFN0cmFpZ2h0IGxBbHRlcm5hdGUgYUFsdGVybmF0ZSBnU2VyaWZlZCBJAEMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADEAMAAsACAAMgAwADEAMgAgAEEAZABvAGIAZQAgAFMAeQBzAHQAZQBtAHMAIABJAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAuACAAQQBsAGwAIABSAGkAZwBoAHQAcwAgAFIAZQBzAGUAcgB2AGUAZAAuAFMAbwB1AHIAYwBlACAAUwBhAG4AcwAgAFAAcgBvACAAUwBlAG0AaQBiAG8AbABkAFIAZQBnAHUAbABhAHIAMQAuADAAMwA2ADsAQQBEAEIARQA7AFMAbwB1AHIAYwBlAFMAYQBuAHMAUAByAG8ALQBTAGUAbQBpAGIAbwBsAGQAOwBBAEQATwBCAEUAVgBlAHIAcwBpAG8AbgAgADEALgAwADMANgA7AFAAUwAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADAAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADkAMAAwAFMAbwB1AHIAYwBlAFMAYQBuAHMAUAByAG8ALQBTAGUAbQBpAGIAbwBsAGQAUwBvAHUAcgBjAGUAIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABBAGQAbwBiAGUAIABTAHkAcwB0AGUAbQBzACAASQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAFUAbgBpAHQAZQBkACAAUwB0AGEAdABlAHMAIABhAG4AZAAvAG8AcgAgAG8AdABoAGUAcgAgAGMAbwB1AG4AdAByAGkAZQBzAC4AQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkAFAAYQB1AGwAIABEAC4AIABIAHUAbgB0AGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAGQAbwBiAGUALgBjAG8AbQAvAHQAeQBwAGUAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQAwACwAIAAyADAAMQAyACAAQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAKABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBkAG8AYgBlAC4AYwBvAG0ALwApACwAIAB3AGkAdABoACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAIAAnAFMAbwB1AHIAYwBlACcALgAgAEEAbABsACAAUgBpAGcAaAB0AHMAIABSAGUAcwBlAHIAdgBlAGQALgAgAFMAbwB1AHIAYwBlACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAAQQBkAG8AYgBlACAAUwB5AHMAdABlAG0AcwAgAEkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAaQBuACAAdABoAGUAIABVAG4AaQB0AGUAZAAgAFMAdABhAHQAZQBzACAAYQBuAGQALwBvAHIAIABvAHQAaABlAHIAIABjAG8AdQBuAHQAcgBpAGUAcwAuAA0ACgANAAoAVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgANAAoADQAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAaQBzACAAYwBvAHAAaQBlAGQAIABiAGUAbABvAHcALAAgAGEAbgBkACAAaQBzACAAYQBsAHMAbwAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6ACAAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAA0ACgANAAoALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAA0ACgBTAEkATAAgAE8AUABFAE4AIABGAE8ATgBUACAATABJAEMARQBOAFMARQAgAFYAZQByAHMAaQBvAG4AIAAxAC4AMQAgAC0AIAAyADYAIABGAGUAYgByAHUAYQByAHkAIAAyADAAMAA3AA0ACgAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAC0ADQAKAA0ACgBQAFIARQBBAE0AQgBMAEUADQAKAFQAaABlACAAZwBvAGEAbABzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUAIAAoAE8ARgBMACkAIABhAHIAZQAgAHQAbwAgAHMAdABpAG0AdQBsAGEAdABlACAAdwBvAHIAbABkAHcAaQBkAGUAIABkAGUAdgBlAGwAbwBwAG0AZQBuAHQAIABvAGYAIABjAG8AbABsAGEAYgBvAHIAYQB0AGkAdgBlACAAZgBvAG4AdAAgAHAAcgBvAGoAZQBjAHQAcwAsACAAdABvACAAcwB1AHAAcABvAHIAdAAgAHQAaABlACAAZgBvAG4AdAAgAGMAcgBlAGEAdABpAG8AbgAgAGUAZgBmAG8AcgB0AHMAIABvAGYAIABhAGMAYQBkAGUAbQBpAGMAIABhAG4AZAAgAGwAaQBuAGcAdQBpAHMAdABpAGMAIABjAG8AbQBtAHUAbgBpAHQAaQBlAHMALAAgAGEAbgBkACAAdABvACAAcAByAG8AdgBpAGQAZQAgAGEAIABmAHIAZQBlACAAYQBuAGQAIABvAHAAZQBuACAAZgByAGEAbQBlAHcAbwByAGsAIABpAG4AIAB3AGgAaQBjAGgAIABmAG8AbgB0AHMAIABtAGEAeQAgAGIAZQAgAHMAaABhAHIAZQBkACAAYQBuAGQAIABpAG0AcAByAG8AdgBlAGQAIABpAG4AIABwAGEAcgB0AG4AZQByAHMAaABpAHAAIAB3AGkAdABoACAAbwB0AGgAZQByAHMALgANAAoADQAKAFQAaABlACAATwBGAEwAIABhAGwAbABvAHcAcwAgAHQAaABlACAAbABpAGMAZQBuAHMAZQBkACAAZgBvAG4AdABzACAAdABvACAAYgBlACAAdQBzAGUAZAAsACAAcwB0AHUAZABpAGUAZAAsACAAbQBvAGQAaQBmAGkAZQBkACAAYQBuAGQAIAByAGUAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAZgByAGUAZQBsAHkAIABhAHMAIABsAG8AbgBnACAAYQBzACAAdABoAGUAeQAgAGEAcgBlACAAbgBvAHQAIABzAG8AbABkACAAYgB5ACAAdABoAGUAbQBzAGUAbAB2AGUAcwAuACAAVABoAGUAIABmAG8AbgB0AHMALAAgAGkAbgBjAGwAdQBkAGkAbgBnACAAYQBuAHkAIABkAGUAcgBpAHYAYQB0AGkAdgBlACAAdwBvAHIAawBzACwAIABjAGEAbgAgAGIAZQAgAGIAdQBuAGQAbABlAGQALAAgAGUAbQBiAGUAZABkAGUAZAAsACAAcgBlAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGEAbgBkAC8AbwByACAAcwBvAGwAZAAgAHcAaQB0AGgAIABhAG4AeQAgAHMAbwBmAHQAdwBhAHIAZQAgAHAAcgBvAHYAaQBkAGUAZAAgAHQAaABhAHQAIABhAG4AeQAgAHIAZQBzAGUAcgB2AGUAZAAgAG4AYQBtAGUAcwAgAGEAcgBlACAAbgBvAHQAIAB1AHMAZQBkACAAYgB5ACAAZABlAHIAaQB2AGEAdABpAHYAZQAgAHcAbwByAGsAcwAuACAAVABoAGUAIABmAG8AbgB0AHMAIABhAG4AZAAgAGQAZQByAGkAdgBhAHQAaQB2AGUAcwAsACAAaABvAHcAZQB2AGUAcgAsACAAYwBhAG4AbgBvAHQAIABiAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAHQAeQBwAGUAIABvAGYAIABsAGkAYwBlAG4AcwBlAC4AIABUAGgAZQAgAHIAZQBxAHUAaQByAGUAbQBlAG4AdAAgAGYAbwByACAAZgBvAG4AdABzACAAdABvACAAcgBlAG0AYQBpAG4AIAB1AG4AZABlAHIAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGQAbwBlAHMAIABuAG8AdAAgAGEAcABwAGwAeQAgAHQAbwAgAGEAbgB5ACAAZABvAGMAdQBtAGUAbgB0ACAAYwByAGUAYQB0AGUAZAAgAHUAcwBpAG4AZwAgAHQAaABlACAAZgBvAG4AdABzACAAbwByACAAdABoAGUAaQByACAAZABlAHIAaQB2AGEAdABpAHYAZQBzAC4ADQAKAA0ACgBEAEUARgBJAE4ASQBUAEkATwBOAFMADQAKACIARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAiACAAcgBlAGYAZQByAHMAIAB0AG8AIAB0AGgAZQAgAHMAZQB0ACAAbwBmACAAZgBpAGwAZQBzACAAcgBlAGwAZQBhAHMAZQBkACAAYgB5ACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAdQBuAGQAZQByACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABhAG4AZAAgAGMAbABlAGEAcgBsAHkAIABtAGEAcgBrAGUAZAAgAGEAcwAgAHMAdQBjAGgALgAgAFQAaABpAHMAIABtAGEAeQAgAGkAbgBjAGwAdQBkAGUAIABzAG8AdQByAGMAZQAgAGYAaQBsAGUAcwAsACAAYgB1AGkAbABkACAAcwBjAHIAaQBwAHQAcwAgAGEAbgBkACAAZABvAGMAdQBtAGUAbgB0AGEAdABpAG8AbgAuAA0ACgANAAoAIgBSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAiACAAcgBlAGYAZQByAHMAIAB0AG8AIABhAG4AeQAgAG4AYQBtAGUAcwAgAHMAcABlAGMAaQBmAGkAZQBkACAAYQBzACAAcwB1AGMAaAAgAGEAZgB0AGUAcgAgAHQAaABlACAAYwBvAHAAeQByAGkAZwBoAHQAIABzAHQAYQB0AGUAbQBlAG4AdAAoAHMAKQAuAA0ACgANAAoAIgBPAHIAaQBnAGkAbgBhAGwAIABWAGUAcgBzAGkAbwBuACIAIAByAGUAZgBlAHIAcwAgAHQAbwAgAHQAaABlACAAYwBvAGwAbABlAGMAdABpAG8AbgAgAG8AZgAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABjAG8AbQBwAG8AbgBlAG4AdABzACAAYQBzACAAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAYgB5ACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApAC4ADQAKAA0ACgAiAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AIgAgAHIAZQBmAGUAcgBzACAAdABvACAAYQBuAHkAIABkAGUAcgBpAHYAYQB0AGkAdgBlACAAbQBhAGQAZQAgAGIAeQAgAGEAZABkAGkAbgBnACAAdABvACwAIABkAGUAbABlAHQAaQBuAGcALAAgAG8AcgAgAHMAdQBiAHMAdABpAHQAdQB0AGkAbgBnACAALQAtACAAaQBuACAAcABhAHIAdAAgAG8AcgAgAGkAbgAgAHcAaABvAGwAZQAgAC0ALQAgAGEAbgB5ACAAbwBmACAAdABoAGUAIABjAG8AbQBwAG8AbgBlAG4AdABzACAAbwBmACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABWAGUAcgBzAGkAbwBuACwAIABiAHkAIABjAGgAYQBuAGcAaQBuAGcAIABmAG8AcgBtAGEAdABzACAAbwByACAAYgB5ACAAcABvAHIAdABpAG4AZwAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAHQAbwAgAGEAIABuAGUAdwAgAGUAbgB2AGkAcgBvAG4AbQBlAG4AdAAuAA0ACgANAAoAIgBBAHUAdABoAG8AcgAiACAAcgBlAGYAZQByAHMAIAB0AG8AIABhAG4AeQAgAGQAZQBzAGkAZwBuAGUAcgAsACAAZQBuAGcAaQBuAGUAZQByACwAIABwAHIAbwBnAHIAYQBtAG0AZQByACwAIAB0AGUAYwBoAG4AaQBjAGEAbAAgAHcAcgBpAHQAZQByACAAbwByACAAbwB0AGgAZQByACAAcABlAHIAcwBvAG4AIAB3AGgAbwAgAGMAbwBuAHQAcgBpAGIAdQB0AGUAZAAgAHQAbwAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAuAA0ACgANAAoAUABFAFIATQBJAFMAUwBJAE8ATgAgACYAIABDAE8ATgBEAEkAVABJAE8ATgBTAA0ACgBQAGUAcgBtAGkAcwBzAGkAbwBuACAAaQBzACAAaABlAHIAZQBiAHkAIABnAHIAYQBuAHQAZQBkACwAIABmAHIAZQBlACAAbwBmACAAYwBoAGEAcgBnAGUALAAgAHQAbwAgAGEAbgB5ACAAcABlAHIAcwBvAG4AIABvAGIAdABhAGkAbgBpAG4AZwAgAGEAIABjAG8AcAB5ACAAbwBmACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACwAIAB0AG8AIAB1AHMAZQAsACAAcwB0AHUAZAB5ACwAIABjAG8AcAB5ACwAIABtAGUAcgBnAGUALAAgAGUAbQBiAGUAZAAsACAAbQBvAGQAaQBmAHkALAAgAHIAZQBkAGkAcwB0AHIAaQBiAHUAdABlACwAIABhAG4AZAAgAHMAZQBsAGwAIABtAG8AZABpAGYAaQBlAGQAIABhAG4AZAAgAHUAbgBtAG8AZABpAGYAaQBlAGQAIABjAG8AcABpAGUAcwAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAsACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAHQAaABlACAAZgBvAGwAbABvAHcAaQBuAGcAIABjAG8AbgBkAGkAdABpAG8AbgBzADoADQAKAA0ACgAxACkAIABOAGUAaQB0AGgAZQByACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAbgBvAHIAIABhAG4AeQAgAG8AZgAgAGkAdABzACAAaQBuAGQAaQB2AGkAZAB1AGEAbAAgAGMAbwBtAHAAbwBuAGUAbgB0AHMALAAgAGkAbgAgAE8AcgBpAGcAaQBuAGEAbAAgAG8AcgAgAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AcwAsACAAbQBhAHkAIABiAGUAIABzAG8AbABkACAAYgB5ACAAaQB0AHMAZQBsAGYALgANAAoADQAKADIAKQAgAE8AcgBpAGcAaQBuAGEAbAAgAG8AcgAgAE0AbwBkAGkAZgBpAGUAZAAgAFYAZQByAHMAaQBvAG4AcwAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAG0AYQB5ACAAYgBlACAAYgB1AG4AZABsAGUAZAAsACAAcgBlAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGEAbgBkAC8AbwByACAAcwBvAGwAZAAgAHcAaQB0AGgAIABhAG4AeQAgAHMAbwBmAHQAdwBhAHIAZQAsACAAcAByAG8AdgBpAGQAZQBkACAAdABoAGEAdAAgAGUAYQBjAGgAIABjAG8AcAB5ACAAYwBvAG4AdABhAGkAbgBzACAAdABoAGUAIABhAGIAbwB2AGUAIABjAG8AcAB5AHIAaQBnAGgAdAAgAG4AbwB0AGkAYwBlACAAYQBuAGQAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAuACAAVABoAGUAcwBlACAAYwBhAG4AIABiAGUAIABpAG4AYwBsAHUAZABlAGQAIABlAGkAdABoAGUAcgAgAGEAcwAgAHMAdABhAG4AZAAtAGEAbABvAG4AZQAgAHQAZQB4AHQAIABmAGkAbABlAHMALAAgAGgAdQBtAGEAbgAtAHIAZQBhAGQAYQBiAGwAZQAgAGgAZQBhAGQAZQByAHMAIABvAHIAIABpAG4AIAB0AGgAZQAgAGEAcABwAHIAbwBwAHIAaQBhAHQAZQAgAG0AYQBjAGgAaQBuAGUALQByAGUAYQBkAGEAYgBsAGUAIABtAGUAdABhAGQAYQB0AGEAIABmAGkAZQBsAGQAcwAgAHcAaQB0AGgAaQBuACAAdABlAHgAdAAgAG8AcgAgAGIAaQBuAGEAcgB5ACAAZgBpAGwAZQBzACAAYQBzACAAbABvAG4AZwAgAGEAcwAgAHQAaABvAHMAZQAgAGYAaQBlAGwAZABzACAAYwBhAG4AIABiAGUAIABlAGEAcwBpAGwAeQAgAHYAaQBlAHcAZQBkACAAYgB5ACAAdABoAGUAIAB1AHMAZQByAC4ADQAKAA0ACgAzACkAIABOAG8AIABNAG8AZABpAGYAaQBlAGQAIABWAGUAcgBzAGkAbwBuACAAbwBmACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAbQBhAHkAIAB1AHMAZQAgAHQAaABlACAAUgBlAHMAZQByAHYAZQBkACAARgBvAG4AdAAgAE4AYQBtAGUAKABzACkAIAB1AG4AbABlAHMAcwAgAGUAeABwAGwAaQBjAGkAdAAgAHcAcgBpAHQAdABlAG4AIABwAGUAcgBtAGkAcwBzAGkAbwBuACAAaQBzACAAZwByAGEAbgB0AGUAZAAgAGIAeQAgAHQAaABlACAAYwBvAHIAcgBlAHMAcABvAG4AZABpAG4AZwAgAEMAbwBwAHkAcgBpAGcAaAB0ACAASABvAGwAZABlAHIALgAgAFQAaABpAHMAIAByAGUAcwB0AHIAaQBjAHQAaQBvAG4AIABvAG4AbAB5ACAAYQBwAHAAbABpAGUAcwAgAHQAbwAgAHQAaABlACAAcAByAGkAbQBhAHIAeQAgAGYAbwBuAHQAIABuAGEAbQBlACAAYQBzACAAcAByAGUAcwBlAG4AdABlAGQAIAB0AG8AIAB0AGgAZQAgAHUAcwBlAHIAcwAuAA0ACgANAAoANAApACAAVABoAGUAIABuAGEAbQBlACgAcwApACAAbwBmACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAbwByACAAdABoAGUAIABBAHUAdABoAG8AcgAoAHMAKQAgAG8AZgAgAHQAaABlACAARgBvAG4AdAAgAFMAbwBmAHQAdwBhAHIAZQAgAHMAaABhAGwAbAAgAG4AbwB0ACAAYgBlACAAdQBzAGUAZAAgAHQAbwAgAHAAcgBvAG0AbwB0AGUALAAgAGUAbgBkAG8AcgBzAGUAIABvAHIAIABhAGQAdgBlAHIAdABpAHMAZQAgAGEAbgB5ACAATQBvAGQAaQBmAGkAZQBkACAAVgBlAHIAcwBpAG8AbgAsACAAZQB4AGMAZQBwAHQAIAB0AG8AIABhAGMAawBuAG8AdwBsAGUAZABnAGUAIAB0AGgAZQAgAGMAbwBuAHQAcgBpAGIAdQB0AGkAbwBuACgAcwApACAAbwBmACAAdABoAGUAIABDAG8AcAB5AHIAaQBnAGgAdAAgAEgAbwBsAGQAZQByACgAcwApACAAYQBuAGQAIAB0AGgAZQAgAEEAdQB0AGgAbwByACgAcwApACAAbwByACAAdwBpAHQAaAAgAHQAaABlAGkAcgAgAGUAeABwAGwAaQBjAGkAdAAgAHcAcgBpAHQAdABlAG4AIABwAGUAcgBtAGkAcwBzAGkAbwBuAC4ADQAKAA0ACgA1ACkAIABUAGgAZQAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUALAAgAG0AbwBkAGkAZgBpAGUAZAAgAG8AcgAgAHUAbgBtAG8AZABpAGYAaQBlAGQALAAgAGkAbgAgAHAAYQByAHQAIABvAHIAIABpAG4AIAB3AGgAbwBsAGUALAAgAG0AdQBzAHQAIABiAGUAIABkAGkAcwB0AHIAaQBiAHUAdABlAGQAIABlAG4AdABpAHIAZQBsAHkAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAAbABpAGMAZQBuAHMAZQAsACAAYQBuAGQAIABtAHUAcwB0ACAAbgBvAHQAIABiAGUAIABkAGkAcwB0AHIAaQBiAHUAdABlAGQAIAB1AG4AZABlAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGwAaQBjAGUAbgBzAGUALgAgAFQAaABlACAAcgBlAHEAdQBpAHIAZQBtAGUAbgB0ACAAZgBvAHIAIABmAG8AbgB0AHMAIAB0AG8AIAByAGUAbQBhAGkAbgAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAZABvAGUAcwAgAG4AbwB0ACAAYQBwAHAAbAB5ACAAdABvACAAYQBuAHkAIABkAG8AYwB1AG0AZQBuAHQAIABjAHIAZQBhAHQAZQBkACAAdQBzAGkAbgBnACAAdABoAGUAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlAC4ADQAKAA0ACgBUAEUAUgBNAEkATgBBAFQASQBPAE4ADQAKAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAYgBlAGMAbwBtAGUAcwAgAG4AdQBsAGwAIABhAG4AZAAgAHYAbwBpAGQAIABpAGYAIABhAG4AeQAgAG8AZgAgAHQAaABlACAAYQBiAG8AdgBlACAAYwBvAG4AZABpAHQAaQBvAG4AcwAgAGEAcgBlACAAbgBvAHQAIABtAGUAdAAuAA0ACgANAAoARABJAFMAQwBMAEEASQBNAEUAUgANAAoAVABIAEUAIABGAE8ATgBUACAAUwBPAEYAVABXAEEAUgBFACAASQBTACAAUABSAE8AVgBJAEQARQBEACAAIgBBAFMAIABJAFMAIgAsACAAVwBJAFQASABPAFUAVAAgAFcAQQBSAFIAQQBOAFQAWQAgAE8ARgAgAEEATgBZACAASwBJAE4ARAAsACAARQBYAFAAUgBFAFMAUwAgAE8AUgAgAEkATQBQAEwASQBFAEQALAAgAEkATgBDAEwAVQBEAEkATgBHACAAQgBVAFQAIABOAE8AVAAgAEwASQBNAEkAVABFAEQAIABUAE8AIABBAE4AWQAgAFcAQQBSAFIAQQBOAFQASQBFAFMAIABPAEYAIABNAEUAUgBDAEgAQQBOAFQAQQBCAEkATABJAFQAWQAsACAARgBJAFQATgBFAFMAUwAgAEYATwBSACAAQQAgAFAAQQBSAFQASQBDAFUATABBAFIAIABQAFUAUgBQAE8AUwBFACAAQQBOAEQAIABOAE8ATgBJAE4ARgBSAEkATgBHAEUATQBFAE4AVAAgAE8ARgAgAEMATwBQAFkAUgBJAEcASABUACwAIABQAEEAVABFAE4AVAAsACAAVABSAEEARABFAE0AQQBSAEsALAAgAE8AUgAgAE8AVABIAEUAUgAgAFIASQBHAEgAVAAuACAASQBOACAATgBPACAARQBWAEUATgBUACAAUwBIAEEATABMACAAVABIAEUAIABDAE8AUABZAFIASQBHAEgAVAAgAEgATwBMAEQARQBSACAAQgBFACAATABJAEEAQgBMAEUAIABGAE8AUgAgAEEATgBZACAAQwBMAEEASQBNACwAIABEAEEATQBBAEcARQBTACAATwBSACAATwBUAEgARQBSACAATABJAEEAQgBJAEwASQBUAFkALAAgAEkATgBDAEwAVQBEAEkATgBHACAAQQBOAFkAIABHAEUATgBFAFIAQQBMACwAIABTAFAARQBDAEkAQQBMACwAIABJAE4ARABJAFIARQBDAFQALAAgAEkATgBDAEkARABFAE4AVABBAEwALAAgAE8AUgAgAEMATwBOAFMARQBRAFUARQBOAFQASQBBAEwAIABEAEEATQBBAEcARQBTACwAIABXAEgARQBUAEgARQBSACAASQBOACAAQQBOACAAQQBDAFQASQBPAE4AIABPAEYAIABDAE8ATgBUAFIAQQBDAFQALAAgAFQATwBSAFQAIABPAFIAIABPAFQASABFAFIAVwBJAFMARQAsACAAQQBSAEkAUwBJAE4ARwAgAEYAUgBPAE0ALAAgAE8AVQBUACAATwBGACAAVABIAEUAIABVAFMARQAgAE8AUgAgAEkATgBBAEIASQBMAEkAVABZACAAVABPACAAVQBTAEUAIABUAEgARQAgAEYATwBOAFQAIABTAE8ARgBUAFcAQQBSAEUAIABPAFIAIABGAFIATwBNACAATwBUAEgARQBSACAARABFAEEATABJAE4ARwBTACAASQBOACAAVABIAEUAIABGAE8ATgBUACAAUwBPAEYAVABXAEEAUgBFAC4ADQAKAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAGQAbwBiAGUALgBjAG8AbQAvAHQAeQBwAGUALwBsAGUAZwBhAGwALgBoAHQAbQBsAFMAbwB1AHIAYwBlACAAUwBhAG4AcwAgAFAAcgBvAFMAZQBtAGkAYgBvAGwAZABTAHQAcgBhAGkAZwBoAHQAIABsAEEAbAB0AGUAcgBuAGEAdABlACAAYQBBAGwAdABlAHIAbgBhAHQAZQAgAGcAUwBlAHIAaQBmAGUAZAAgAEkAAgAAAAAAAP+1ADIAAAAAAAAAAAAAAAAAAAAAAAAAAANCAAABAgEDAAMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQCtAMkAxwCuAGIBBAEFAGMBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETAJAAZAD9ARQA/wEVARYBFwEYARkAywBlAMgBGgDKARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScA+AEoASkBKgErASwBLQEuAS8BMADPAMwAzQExAM4BMgD6ATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8A4gFAAUEBQgBmAUMBRAFFAUYA0wDQANEArwBnAUcBSAFJAUoBSwFMAU0BTgFPAVAAkQCwAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAOQBYAFhAWIBYwFkAWUBZgFnAWgBaQDWANQA1QFqAGgBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAOsBggC7AYMBhAGFAYYBhwDmAYgBiQDpAO0BigBqAGkAawBtAGwBiwGMAG4BjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAKAAbwD+AZsBAAGcAZ0BngGfAQEAcQBwAHIBoABzAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0A+QGuAa8BsAGxAbIBswG0AbUBtgB1AHQAdgG3AHcBuAG5AboBuwG8Ab0A1wG+Ab8BwAHBAcIBwwHEAcUBxgHHAOMByAHJAcoAeAHLAcwBzQHOAc8AegB5AHsAfQB8AdAB0QHSAdMB1AHVAdYB1wHYAdkAoQCxAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAOUB6QHqAesB7ACJAe0B7gHvAfAB8QHyAH8AfgCAAfMAgQH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoA7AILALoCDAINAg4CDwIQAOcCEQISAOoA7gITAhQCFQIWAhcAwADBAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAAkAEwAUABUAFgAXABgAGQAaABsAHAJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawARAA8AHQAeAKsABACjACIAogAKAAUAtgC3ALQAtQDEAMUAvgC/AKkAqgAQAmwAsgCzAm0CbgDDAIcAQgALAAwAPgBAAF4AYAASAF8APwDoAA0AggDCAIYAiACLAm8AigCMAnAAIwJxAAYCcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAJ0CqgCeAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygCDAL0ABwCFAJYCywCEAswCzQLOAs8C0ALRAtIC0wLUAtUC1gC8AtcC2AAIAMYA9QD0APYC2QLaAtsC3ALdAt4ADgDvAPAAuALfACAAHwAhAJQAlQCTAEEAjwBhAKcApACbAJIC4ACYAJwApQLhAuIAmQCaAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgAuQL5AvoC+wL8Av0C/gBDAI0A2ADhAv8DAAMBAwIDAwDZAI4A2gDbAN0A3wDcAN4A4AMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPBE5VTEwCQ1IHQW1hY3JvbgZBYnJldmUHdW5pMDFDRAd1bmkxRUEwB3VuaTFFQTIHdW5pMUVBNAd1bmkxRUE2B3VuaTFFQTgHdW5pMUVBQQd1bmkxRUFDB3VuaTFFQUUHdW5pMUVCMAd1bmkxRUIyB3VuaTFFQjQHdW5pMUVCNgdBb2dvbmVrC0NjaXJjdW1mbGV4CkNkb3RhY2NlbnQGRGNhcm9uB3VuaTFFMEMHdW5pMUUwRQZEY3JvYXQGRWNhcm9uB0VtYWNyb24GRWJyZXZlCkVkb3RhY2NlbnQHdW5pMUVCOAd1bmkxRUJBB3VuaTFFQkMHdW5pMUVCRQd1bmkxRUMwB3VuaTFFQzIHdW5pMUVDNAd1bmkxRUM2B0VvZ29uZWsLR2NpcmN1bWZsZXgKR2RvdGFjY2VudAd1bmkwMTIyBkdjYXJvbgd1bmkxRTIwC3VuaTAwNDcwMzAzC0hjaXJjdW1mbGV4B3VuaTFFMjQHdW5pMUUyQQRIYmFyBkl0aWxkZQdJbWFjcm9uB3VuaTAxQ0YHdW5pMUVDOAd1bmkxRUNBB0lvZ29uZWsLSmNpcmN1bWZsZXgHdW5pMDEzNgZMYWN1dGUGTGNhcm9uB3VuaTAxM0IETGRvdAd1bmkxRTM2B3VuaTFFMzgHdW5pMUUzQQd1bmkxRTQyBk5hY3V0ZQZOY2Fyb24HdW5pMDE0NQd1bmkxRTQ0B3VuaTFFNDYHdW5pMUU0OAdPbWFjcm9uDU9odW5nYXJ1bWxhdXQHdW5pMDFEMQd1bmkxRUNDB3VuaTFFQ0UHdW5pMUVEMAd1bmkxRUQyB3VuaTFFRDQHdW5pMUVENgd1bmkxRUQ4BU9ob3JuB3VuaTFFREEHdW5pMUVEQwd1bmkxRURFB3VuaTFFRTAHdW5pMUVFMgd1bmkwMUVBBlJhY3V0ZQZSY2Fyb24HdW5pMDE1Ngd1bmkxRTVBB3VuaTFFNUMHdW5pMUU1RQZTYWN1dGULU2NpcmN1bWZsZXgHdW5pMDE1RQd1bmkwMjE4B3VuaTFFNjAHdW5pMUU2Mgd1bmkxRTlFBlRjYXJvbgd1bmkwMTYyB3VuaTAyMUEHdW5pMUU2Qwd1bmkxRTZFBlV0aWxkZQdVbWFjcm9uBlVicmV2ZQVVcmluZw1VaHVuZ2FydW1sYXV0B3VuaTAxRDMHdW5pMDFENQd1bmkwMUQ3B3VuaTAxRDkHdW5pMDFEQgd1bmkxRUU0B3VuaTFFRTYHVW9nb25lawVVaG9ybgd1bmkxRUU4B3VuaTFFRUEHdW5pMUVFQwd1bmkxRUVFB3VuaTFFRjAGV2dyYXZlBldhY3V0ZQtXY2lyY3VtZmxleAlXZGllcmVzaXMGWWdyYXZlC1ljaXJjdW1mbGV4B3VuaTFFOEUHdW5pMUVGNAd1bmkxRUY2B3VuaTFFRjgGWmFjdXRlClpkb3RhY2NlbnQHdW5pMUU5Mgd1bmkwMThGB2FtYWNyb24GYWJyZXZlB3VuaTAxQ0UHdW5pMUVBMQd1bmkxRUEzB3VuaTFFQTUHdW5pMUVBNwd1bmkxRUE5B3VuaTFFQUIHdW5pMUVBRAd1bmkxRUFGB3VuaTFFQjEHdW5pMUVCMwd1bmkxRUI1B3VuaTFFQjcHYW9nb25lawtjY2lyY3VtZmxleApjZG90YWNjZW50BmRjYXJvbgd1bmkxRTBEB3VuaTFFMEYGZWNhcm9uB2VtYWNyb24GZWJyZXZlCmVkb3RhY2NlbnQHdW5pMUVCOQd1bmkxRUJCB3VuaTFFQkQHdW5pMUVCRgd1bmkxRUMxB3VuaTFFQzMHdW5pMUVDNQd1bmkxRUM3B2VvZ29uZWsLZ2NpcmN1bWZsZXgKZ2RvdGFjY2VudAd1bmkwMTIzBmdjYXJvbgd1bmkxRTIxC3VuaTAwNjcwMzAzC2hjaXJjdW1mbGV4B3VuaTFFMjUHdW5pMUUyQgRoYmFyBml0aWxkZQdpbWFjcm9uB3VuaTAxRDAHdW5pMUVDOQd1bmkxRUNCB2lvZ29uZWsJaW9nb25lay5kC2pjaXJjdW1mbGV4B3VuaTAxMzcMa2dyZWVubGFuZGljBmxhY3V0ZQZsY2Fyb24EbGRvdAd1bmkwMTNDB3VuaTFFMzcHdW5pMUUzOQd1bmkxRTNCB3VuaTFFNDMGbmFjdXRlBm5jYXJvbgd1bmkwMTQ2B3VuaTFFNDUHdW5pMUU0Nwd1bmkxRTQ5C25hcG9zdHJvcGhlB29tYWNyb24Nb2h1bmdhcnVtbGF1dAd1bmkwMUQyB3VuaTFFQ0QHdW5pMUVDRgd1bmkxRUQxB3VuaTFFRDMHdW5pMUVENQd1bmkxRUQ3B3VuaTFFRDkFb2hvcm4HdW5pMUVEQgd1bmkxRUREB3VuaTFFREYHdW5pMUVFMQd1bmkxRUUzB3VuaTAxRUIGcmFjdXRlB3VuaTAxNTcGcmNhcm9uB3VuaTFFNUIHdW5pMUU1RAd1bmkxRTVGBnNhY3V0ZQtzY2lyY3VtZmxleAd1bmkwMTVGB3VuaTAyMTkHdW5pMUU2MQd1bmkxRTYzBnRjYXJvbgd1bmkwMTYzB3VuaTAyMUIHdW5pMUU2RAd1bmkxRTZGB3VuaTFFOTcGdXRpbGRlB3VtYWNyb24GdWJyZXZlBXVyaW5nDXVodW5nYXJ1bWxhdXQHdW5pMDFENAd1bmkwMUQ2B3VuaTAxRDgHdW5pMDFEQQd1bmkwMURDB3VuaTFFRTUHdW5pMUVFNwd1b2dvbmVrBXVob3JuB3VuaTFFRTkHdW5pMUVFQgd1bmkxRUVEB3VuaTFFRUYHdW5pMUVGMQZ3Z3JhdmUGd2FjdXRlC3djaXJjdW1mbGV4CXdkaWVyZXNpcwZ5Z3JhdmULeWNpcmN1bWZsZXgHdW5pMUU4Rgd1bmkxRUY1B3VuaTFFRjcHdW5pMUVGOQZ6YWN1dGUKemRvdGFjY2VudAd1bmkxRTkzB3VuaTAyMzcHdW5pMDI1MQd1bmkwMjU5B3VuaTAyNjEDZl9mA2ZfdANJLmEISWdyYXZlLmEISWFjdXRlLmENSWNpcmN1bWZsZXguYQhJdGlsZGUuYQtJZGllcmVzaXMuYQlJbWFjcm9uLmEMSWRvdGFjY2VudC5hCXVuaTAxQ0YuYQl1bmkxRUM4LmEJdW5pMUVDQS5hCUlvZ29uZWsuYQNhLmEIYWdyYXZlLmEIYWFjdXRlLmENYWNpcmN1bWZsZXguYQhhdGlsZGUuYQthZGllcmVzaXMuYQlhbWFjcm9uLmEIYWJyZXZlLmEHYXJpbmcuYQl1bmkwMUNFLmEJdW5pMUVBMS5hCXVuaTFFQTMuYQl1bmkxRUE1LmEJdW5pMUVBNy5hCXVuaTFFQTkuYQl1bmkxRUFCLmEJdW5pMUVBRC5hCXVuaTFFQUYuYQl1bmkxRUIxLmEJdW5pMUVCMy5hCXVuaTFFQjUuYQl1bmkxRUI3LmEJYW9nb25lay5hA2cuYQ1nY2lyY3VtZmxleC5hCGdicmV2ZS5hDGdkb3RhY2NlbnQuYQl1bmkwMTIzLmEIZ2Nhcm9uLmEJdW5pMUUyMS5hDXVuaTAwNjcwMzAzLmEDbC5hCGxhY3V0ZS5hCGxjYXJvbi5hBmxkb3QuYQl1bmkwMTNDLmEJdW5pMUUzNy5hCXVuaTFFMzkuYQl1bmkxRTNCLmEIbHNsYXNoLmEEZmwuYQl6ZXJvLnBudW0Ib25lLnBudW0IdHdvLnBudW0KdGhyZWUucG51bQlmb3VyLnBudW0JZml2ZS5wbnVtCHNpeC5wbnVtCnNldmVuLnBudW0KZWlnaHQucG51bQluaW5lLnBudW0JemVyby50bnVtCG9uZS50bnVtCHR3by50bnVtCnRocmVlLnRudW0JZm91ci50bnVtCWZpdmUudG51bQhzaXgudG51bQpzZXZlbi50bnVtCmVpZ2h0LnRudW0JbmluZS50bnVtCXplcm8ub251bQhvbmUub251bQh0d28ub251bQp0aHJlZS5vbnVtCWZvdXIub251bQlmaXZlLm9udW0Ic2l4Lm9udW0Kc2V2ZW4ub251bQplaWdodC5vbnVtCW5pbmUub251bQd1bmkwMEFECmZpZ3VyZWRhc2gHdW5pMjAxNQd1bmkyMTE3B3VuaTIxMjAHYXQuY2FzZQl6ZXJvLnN1cHMIb25lLnN1cHMIdHdvLnN1cHMKdGhyZWUuc3Vwcwlmb3VyLnN1cHMJZml2ZS5zdXBzCHNpeC5zdXBzCnNldmVuLnN1cHMKZWlnaHQuc3VwcwluaW5lLnN1cHMOcGFyZW5sZWZ0LnN1cHMPcGFyZW5yaWdodC5zdXBzC3BlcmlvZC5zdXBzCmNvbW1hLnN1cHMJemVyby5zdWJzCG9uZS5zdWJzCHR3by5zdWJzCnRocmVlLnN1YnMJZm91ci5zdWJzCWZpdmUuc3VicwhzaXguc3VicwpzZXZlbi5zdWJzCmVpZ2h0LnN1YnMJbmluZS5zdWJzDnBhcmVubGVmdC5zdWJzD3BhcmVucmlnaHQuc3VicwtwZXJpb2Quc3Vicwpjb21tYS5zdWJzCXplcm8uZG5vbQhvbmUuZG5vbQh0d28uZG5vbQp0aHJlZS5kbm9tCWZvdXIuZG5vbQlmaXZlLmRub20Ic2l4LmRub20Kc2V2ZW4uZG5vbQplaWdodC5kbm9tCW5pbmUuZG5vbQ5wYXJlbmxlZnQuZG5vbQ9wYXJlbnJpZ2h0LmRub20LcGVyaW9kLmRub20KY29tbWEuZG5vbQl6ZXJvLm51bXIIb25lLm51bXIIdHdvLm51bXIKdGhyZWUubnVtcglmb3VyLm51bXIJZml2ZS5udW1yCHNpeC5udW1yCnNldmVuLm51bXIKZWlnaHQubnVtcgluaW5lLm51bXIOcGFyZW5sZWZ0Lm51bXIPcGFyZW5yaWdodC5udW1yC3BlcmlvZC5udW1yCmNvbW1hLm51bXINb3JkZmVtaW5pbmUuYQZhLnN1cHMGYi5zdXBzBmMuc3VwcwZkLnN1cHMGZS5zdXBzBmYuc3VwcwZnLnN1cHMGaC5zdXBzBmkuc3VwcwZqLnN1cHMGay5zdXBzBmwuc3VwcwZtLnN1cHMGbi5zdXBzBm8uc3VwcwZwLnN1cHMGcS5zdXBzBnIuc3VwcwZzLnN1cHMGdC5zdXBzBnUuc3VwcwZ2LnN1cHMGdy5zdXBzBnguc3VwcwZ5LnN1cHMGei5zdXBzC2VncmF2ZS5zdXBzC2VhY3V0ZS5zdXBzDHVuaTAyNTkuc3VwcwZhLnN1cGEGZy5zdXBhBmwuc3VwYQRFdXJvB3VuaTAxOTINY29sb25tb25ldGFyeQRsaXJhB3VuaTIwQTYGcGVzZXRhBGRvbmcHdW5pMjBCMQd1bmkyMEIyB3VuaTIwQjUHdW5pMjBCOQd1bmkyMEJBB3VuaTIyMTUKc2xhc2guZnJhYwhvbmV0aGlyZAl0d290aGlyZHMJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMHdW5pMjIxOQd1bmkwMEI1B3VuaTIyMDYHdW5pMjEyNgd1bmkyMTEzCWVzdGltYXRlZAd1bmkyMTkwB2Fycm93dXAHdW5pMjE5MglhcnJvd2Rvd24HdW5pMjVBMAd1bmkyNUM2B3VuaTI1QzkHdW5pMjc1Mgd0cmlhZ3VwB3VuaTI1QjMHdW5pMjVCNgd1bmkyNUI3B3RyaWFnZG4HdW5pMjVCRAd1bmkyNUMwB3VuaTI1QzEHdW5pMjYxMAd1bmkyNjExB3VuaTI3MTMHdW5pMjY2QQd1bmkyMDMyB3VuaTIwMzMHdW5pMDJCQgd1bmkwMkJDB3VuaTAyQkUHdW5pMDJCRgd1bmkwMkM4B3VuaTAyQzkHdW5pMDJDQQd1bmkwMkNCB3VuaTAyQ0MHdW5pMDMwMAt1bmkwMzAwLmNhcAd1bmkwMzAxC3VuaTAzMDEuY2FwB3VuaTAzMDILdW5pMDMwMi5jYXAHdW5pMDMwMwt1bmkwMzAzLmNhcAd1bmkwMzA0C3VuaTAzMDQuY2FwB3VuaTAzMDYLdW5pMDMwNi5jYXAHdW5pMDMwNwt1bmkwMzA3LmNhcAd1bmkwMzA4C3VuaTAzMDguY2FwB3VuaTAzMDkLdW5pMDMwOS5jYXAHdW5pMDMwQQt1bmkwMzBBLmNhcAd1bmkwMzBCC3VuaTAzMEIuY2FwB3VuaTAzMEMLdW5pMDMwQy5jYXAHdW5pMDMwRgt1bmkwMzBGLmNhcAd1bmkwMzEyB3VuaTAzMTMHdW5pMDMxQgd1bmkwMzIzB3VuaTAzMjQHdW5pMDMyNgd1bmkwMzI3C3VuaTAzMjcuY2FwB3VuaTAzMjgLdW5pMDMyOC5jYXAHdW5pMDMyRQd1bmkwMzMxC3VuaTAzMDgwMzA0D3VuaTAzMDgwMzA0LmNhcAt1bmkwMzA4MDMwMQ91bmkwMzA4MDMwMS5jYXALdW5pMDMwODAzMEMPdW5pMDMwODAzMEMuY2FwC3VuaTAzMDgwMzAwD3VuaTAzMDgwMzAwLmNhcAt1bmkwMzAyMDMwMQ91bmkwMzAyMDMwMS5jYXALdW5pMDMwMjAzMDAPdW5pMDMwMjAzMDAuY2FwC3VuaTAzMDIwMzA5D3VuaTAzMDIwMzA5LmNhcAt1bmkwMzAyMDMwMw91bmkwMzAyMDMwMy5jYXALdW5pMDMwNjAzMDEPdW5pMDMwNjAzMDEuY2FwC3VuaTAzMDYwMzAwD3VuaTAzMDYwMzAwLmNhcAt1bmkwMzA2MDMwOQ91bmkwMzA2MDMwOS5jYXALdW5pMDMwNjAzMDMPdW5pMDMwNjAzMDMuY2FwCXVuaTAzMEMuYQl1bmkwMzI2LmEHdW5pMDBBMAd1bmkyMDA3CnNwYWNlLmZyYWMMbmJzcGFjZS5mcmFjB3VuaTAyNDMHdW5pMDEyQwd1bmkwMTRFB3VuaTAxODAHdW5pMDEyRAd1bmkwMTRGC3VuaTAzMDIwMzA2D3VuaTAzMDIwMzA2LmNhcAAAAAAAAAH//wACAAEAAAAMAAAAAADiAAIAIwAEADcAAQBNAE4AAQBoAGgAAQBvAG8AAgB+AH4AAQCgAKIAAQCoAKgAAQDM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AiwACQADAhj/9gIl//YCLAAJAAMCGP/2AiX/9gIsAAkAAgIY//sCJf/xAAICGP/7AiX/8QACAhj/+wIl//EAAgIY//sCJf/xAAICGP/7AiX/8QACAhj/+wIl//EAAgIY//sCJf/xAAICJf/EAi3/5gAIASQADgElACoBJgAqAScAHAIY/74CIf+yAiwAFAItAB0ACAEkAA4BJQAqASYAKgEnABwCGP++AiH/sgIsABQCLQAdAAgBJAAOASUAKgEmACoBJwAcAhj/vgIh/7ICLAAUAi0AHQAIASQADgElACoBJgAqAScAHAIY/74CIf+yAiwAFAItAB0ACAEkAA4BJQAqASYAKgEnABwCGP++AiH/sgIsABQCLQAdAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAECIf/oAAUCIf/aAiMAMAIl//wCLAAUAi0ANAAFAiH/2gIjADACJf/8AiwAFAItADQABQIh/9oCIwAwAiX//AIsABQCLQA0AAUCIf/aAiMAMAIl//wCLAAUAi0ANAAFAiH/2gIjADACJf/8AiwAFAItADQABQIh/9oCIwAwAiX//AIsABQCLQA0AAkBIv/yASP/8gEkABQBJQAwASYAMAEnABgCIf/uAiwAIAItACQACQEi//IBI//yASQAFAElADABJgAwAScAGAIh/+4CLAAgAi0AJAAJASL/8gEj//IBJAAUASUAMAEmADABJwAYAiH/7gIsACACLQAkAAkBIv/yASP/8gEkABQBJQAwASYAMAEnABgCIf/uAiwAIAItACQACwEi//YBI//wASQAIAElADABJgAwAScAJAIE//UCGP/NAiH/xwIsABwCLQAsAAsBIv/2ASP/8AEkACABJQAwASYAMAEnACQCBP/1Ahj/zQIh/8cCLAAcAi0ALAALASL/9gEj//ABJAAgASUAMAEmADABJwAkAgT/9QIY/80CIf/HAiwAHAItACwACwEi//YBI//wASQAIAElADABJgAwAScAJAIE//UCGP/NAiH/xwIsABwCLQAsAAsBIv/2ASP/8AEkACABJQAwASYAMAEnACQCBP/1Ahj/zQIh/8cCLAAcAi0ALAAL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ABwBlwAcAAMCCf/kAgv/5ALh/+QA8AAE/7QABv+/AAr/vwAS/78AFP+/ABb/0AAX/6QAGP/RABn/tgAa/9EAG//IABz/lAAe/9QAIP/kACH/5AAi/+QAI/+0ACcANAAs/+QALv/kADj/tAA5/7QAOv+0ADv/tAA8/7QAPf+0AD7/tAA//7QAQP+0AEH/tABC/7QAQ/+0AET/tABF/7QARv+0AEf/tABI/7QASf+0AEr/tABL/7QATP+0AE3/tABP/78AUP+/AFH/vwBS/78AU/+/AGn/vwBq/78Aa/+/AGz/vwBt/78Abv+/AG//vwCR/78Akv+/AJP/vwCU/78Alf+/AJb/vwCX/78AmP+/AJn/vwCa/78Am/+/AJz/vwCd/78Anv+/AJ//vwCg/78Aof+/AKL/vwCj/78ApP+/AKX/vwCm/78Ap/+/AKj/vwCv/9AAsP/QALH/0ACy/9AAs//QALT/0AC1/9AAt/+kALj/pAC5/6QAuv+kALv/pAC8/9EAvf/RAL7/0QC//9EAwP/RAMH/0QDC/9EAw//RAMT/0QDF/9EAxv/RAMf/0QDI/9EAyf/RAMr/0QDL/9EAzP/RAM3/0QDO/9EAz//RAND/0QDR/9EA0v/RANP/0QDU/9EA1f/RANb/0QDX/5QA2P+UANn/lADa/5QA2/+UANz/lADd/5QA3v+UAOb/1ADn/9QA6P/UAOn/1ADq/9QA6//UAOz/1ADt/9QA7v/UAO//1ADw/9QA8f/UAPL/1ADz/9QA9P/UAPX/1AD2/9QA9//UAPj/1AD5/9QA+v/UAPv/1AD8/9QA/f/kAP7/5AD//+QBAP/kAQH/5AEC/+QBA//kAQT/5AEF/+QBBv/kAQf/5AEI/+QBCf/kAQr/5AEL/+QBDP/kAQ3/5AEO/+QBD//kARD/5AER/+QBEv/kARP/5AEU/+QBFf/kARb/5AEuADQBQv/kAUP/5AFE/+QBRf/kAUb/5AFH/+QBSP/kAUn/5AFK/+QBS//kAUz/5AFN/+QBTv/kAU//5AFQ/+QBUf/kAVL/5AFT/+QBVP/kAVX/5AFW/+QBV//kAVj/5AFZ/+QBlwA0AZj/5AGa/+QBm/+0AZz/tAGd/7QBnv+0Aav/5AGs/+QBrf/kAa7/5AGv/+QBsP/kAbH/5AGy/+QBs//kAbT/5AG1/+QBtv/kAbf/5AG4/+QBuf/kAbr/5AG7/+QBvP/kAb3/5AG+/+QBv//kAcD/5AHB/+QBwv/kAcP/5AHE/+QBxf/kAcb/5AHH/+QByP/kAcn/5AHT/7QDPP+/Az//5AACAgP/0AIF/4AAAgID/9ACBf+AADYABP/mABb/5gAX/74AGf/hABv/4QAc/7YAHf/dADX/7AA4/+YAOf/mADr/5gA7/+YAPP/mAD3/5gA+/+YAP//mAED/5gBB/+YAQv/mAEP/5gBE/+YARf/mAEb/5gBH/+YASP/mAEn/5gBK/+YAS//mAEz/5gBN/+YAr//mALD/5gCx/+YAsv/mALP/5gC0/+YAtf/mALf/vgC4/74Auf++ALr/vgC7/74A1/+2ANj/tgDZ/7YA2v+2ANv/tgDc/7YA3f+2AN7/tgDf/90A4P/dAOH/3QDi/90ArwAE/9gADf+wAB7/5gAg/+gAIf/oACL/6AAk//YALP/oAC7/6AAy/+wAOP/YADn/2AA6/9gAO//YADz/2AA9/9gAPv/YAD//2ABA/9gAQf/YAEL/2ABD/9gARP/YAEX/2ABG/9gAR//YAEj/2ABJ/9gASv/YAEv/2ABM/9gATf/YAH//sADl//AA5v/mAOf/5gDo/+YA6f/mAOr/5gDr/+YA7P/mAO3/5gDu/+YA7//mAPD/5gDx/+YA8v/mAPP/5gD0/+YA9f/mAPb/5gD3/+YA+P/mAPn/5gD6/+YA+//mAPz/5gD9/+gA/v/oAP//6AEA/+gBAf/oAQL/6AED/+gBBP/oAQX/6AEG/+gBB//oAQj/6AEJ/+gBCv/oAQv/6AEM/+gBDf/oAQ7/6AEP/+gBEP/oARH/6AES/+gBE//oART/6AEV/+gBFv/oARf/9gEY//YBGf/2ARr/9gEb//YBHP/2AR3/9gEkABoBJgAkASgAGgEuABoBQv/oAUP/6AFE/+gBRf/oAUb/6AFH/+gBSP/oAUn/6AFK/+gBS//oAUz/6AFN/+gBTv/oAU//6AFQ/+gBUf/oAVL/6AFT/+gBVP/oAVX/6AFW/+gBV//oAVj/6AFZ/+gBbv/sAW//7AFw/+wBcf/sAXL/7AFz/+wBdP/sAXX/7AF2/+wBd//sAXj/7AF5/+wBev/sAXv/7AF8/+wBff/sAX7/7AF//+wBgP/sAYH/7AGC/+wBg//sAYT/7AGY/+gBmv/oAav/6AGs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AMsBLQEtAOcBLwEwAOgBMgEyAOoBOQGUAOsBlgGWAUcBmAGbAUgBngHJAUwBzAHMAXgB/QIBAXkCBgILAX4CDgIXAYQCGwIbAY4CHQIdAY8CHwIfAZAC4ALhAZEDOgM6AZMDPAM9AZQDPwM/AZYAAgB1AAUABQABAAYABgACAAcABwAKAAkACQADAAoACgAEAA0ADQAGAA4ADgAHAA8ADwAIABIAEgAKABMAEwAMABQAFAAKABUAFQANABYAFgAOABcAFwAPABgAGAARABkAGQATABoAGgAUABsAGwAVABwAHAAWAB0AHQAXAB4AHgAYAB8AHwAnACAAIAAaACIAIgAdACMAIwAfACQAJAAgACUAJQAmACgAKAAkACoAKwAmACwALQAnAC4ALgAvAC8ALwAsADAAMAAtADEAMQAuADIAMgAvADMAMwAxADQANAAyADUANQAzADYANgA0ADcANwA1AE8AUwACAFQAVwAKAGkAbwAEAH8AfwAGAIAAgAAHAIEAgQAIAIIAggAJAIMAiAAIAJEAoAAKAKIApwALAKgAqAAKAKkArgANAK8AtQAOALcAuwAPALwAzAARAM0A0gASANMA1gAUANcA3gAWAN8A4gAXAOMA4wAKAOQA5AAQAOUA5QAKAOYA+wAYAPwA/AAdAP0BAQAaAQIBAgAlAQYBFgAdARcBHQAgAR4BIQAmAS0BLQAvAS8BMAAkATIBMgAlATkBQQAmAUIBUQAnAVIBUgAdAVMBWAAoAVkBWQAnAVoBXwAsAWABZgAtAWcBZwAhAWgBbQAuAW4BfgAvAX8BhAAwAYUBiAAyAYkBkAA0AZEBlAA1AZYBlgAnAZgBmAAvAZkBmQAnAZoBmgAvAZsBmwAfAZ4BngAuAZ8BqgAFAasByQAvAcwBzAAlAf0B/gAcAf8CAAAbAgECAQAcAgYCBwApAggCCAAqAgkCCQArAgoCCgAqAgsCCwArAg4CDgAiAg8CDwAjAhACEAAiAhECEQAjAhICFwAeAhsCGwAZAh0CHQAZAh8CHwAZAuAC4AAqAuEC4QArAzoDOgABAzwDPAAKAz0DPQAnAz8DPwAnAAIAWAAEAAQAGAAGAAYAAQAKAAoAAQANAA0AEAASABIAAQAUABQAAQAWABYAEQAXABcAAgAYABgAAwAZABkABAAaABoAEgAbABsAEwAcABwABQAd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) format('truetype') +} \ No newline at end of file diff --git a/src/oncall/ui/static/images/chevron-bottom.svg b/src/oncall/ui/static/images/chevron-bottom.svg new file mode 100755 index 0000000..b919722 --- /dev/null +++ b/src/oncall/ui/static/images/chevron-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/oncall/ui/static/images/favicon.png b/src/oncall/ui/static/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..618daffe9420a27ebf9a2df0bee3fcf18336dcea GIT binary patch literal 5364 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 I`u{h%05mw{l>h($ literal 0 HcmV?d00001 diff --git a/src/oncall/ui/static/images/inbug.png b/src/oncall/ui/static/images/inbug.png new file mode 100644 index 0000000000000000000000000000000000000000..04221f604271cc36117b0bed2fa749171837a845 GIT binary patch literal 279 zcmV+y0qFjTP)tAQdC90*wdAD5j>OPMZ-J!6UE(NZbI(_#q{6I10GCkh3ByQuN9C zeO3&<@+Z%!E(kCmz(g}luo9)jZkJyz_E-a8jlCd?4u(P}$Jz;Nb=Y?8At-IxpN<3G z(4}$xk{z=x-vjl;c9MLJX9?EE%*&ef$}cQkMYjmD2LUz&5x47tyD?!li%06v@L8wK zzJJAFA9oeDXwk*l#+x)6Nj9RH53n3-(zDOAG;91ug9Yi;e#(~pcc43AeRnW|?Q|}p d6%!_}%`ac%{)#V@;D`VK002ovPDHLkV1gRBb^QPU literal 0 HcmV?d00001 diff --git a/src/oncall/ui/static/images/oncall_logo_blue.png b/src/oncall/ui/static/images/oncall_logo_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..1364e163ab90c1f2a9b4730d4470f3d58654499d GIT binary patch literal 5013 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�i<;g8re2nGWmbL#&q)8rSwXqzSC;8td~lCw;*yQC;81Y88}0>nM=Z!oQ1A( zmFNY}MrCG@C}-Jj1e6ITtoNPU^q}A7XIf9>6!JRFYY-?ySP|KA7)={lvS`{cK%K}T z75~*S43*dq>BlW8^(DAH`{kVNIRQ#{Q%gCAFU^0bB{0uKlJ4Fwez;4zbK5n)@GIdS zRRn`g$TXOO64SaXvCu56ukd=kmTw3lgx+%{06qn)$6fl=Q-72QvOMNn^Qcpbr&WIm zFIpfrh%I`A@4L)=K)giyT=-4g5r#9>-=X0+ljQkV7GLC;Xr8t#pcxH#WnDf?87+xlO zPr$IH+p-+gUWh>-uNhSPN{n&{PB$ibLG!{GzdOVynr{h^0Ukd%YVMkjkW=K3=|uP@ zzV$fFX*%=`I7$t#N%Dz?dKP489>TIl)V{rnv4c;%H-x72bcNhlKX@$}P_#q{+JUD`hpe=O3R$K(TPrNRIHZgkgwH=Pctp- zh3h>_+fpxTK3L3PF@R_?EM!o`Q!gZZGrBY6(zO;LTM`bcH77PbLrZZ1D9$NFA%Z%{ ziK^luf|T9LXkKBnu4`Y`diK*buR@TZ;IEo2zGqGr^6!)NpD)76>OMVfpFz&VKRTv` Z0fcK!?pHW$7@z(q(@@nxmMU8Z{|}5R97+HH literal 0 HcmV?d00001 diff --git a/src/oncall/ui/static/images/oncall_logo_white.png b/src/oncall/ui/static/images/oncall_logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..0388980ee883ff9428e4d6b17c96d9518f4abbed GIT binary patch literal 3394 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.$items.length-1||0>a?void 0: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(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0: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.5",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("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.5",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("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&&jdocument.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

',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);return 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()?void 0:(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-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.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})};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.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),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.5",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[a]&&(void 0===e[a+1]||b .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.5",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 c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},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/src/oncall/ui/static/js/handlebars.min.js b/src/oncall/ui/static/js/handlebars.min.js new file mode 100644 index 0000000..150df8a --- /dev/null +++ b/src/oncall/ui/static/js/handlebars.min.js @@ -0,0 +1,29 @@ +/*! + + handlebars v3.0.3 + +Copyright (C) 2011-2014 by Yehuda Katz + +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. + +@license +*/ +!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(8)["default"];b.__esModule=!0;var f=c(1),g=e(f),h=c(2),i=e(h),j=c(3),k=c(4),l=c(5),m=e(l),n=c(6),o=e(n),p=c(7),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=new g.HandlebarsEnvironment;return m.extend(a,g),a.SafeString=i["default"],a.Exception=k["default"],a.Utils=m,a.escapeExpression=m.escapeExpression,a.VM=o,a.template=function(b){return o.template(b,a)},a}var e=c(8)["default"];b.__esModule=!0;var f=c(9),g=e(f),h=c(10),i=e(h),j=c(11),k=e(j),l=c(12),m=e(l),n=c(13),o=e(n),p=c(7),q=e(p),r=d();r.create=d,q["default"](r),r["default"]=r,b["default"]=r,a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0;var c={Program:function(a,b,c,d){this.loc=d,this.type="Program",this.body=a,this.blockParams=b,this.strip=c},MustacheStatement:function(a,b,c,d,e,f){this.loc=f,this.type="MustacheStatement",this.path=a,this.params=b||[],this.hash=c,this.escaped=d,this.strip=e},BlockStatement:function(a,b,c,d,e,f,g,h,i){this.loc=i,this.type="BlockStatement",this.path=a,this.params=b||[],this.hash=c,this.program=d,this.inverse=e,this.openStrip=f,this.inverseStrip=g,this.closeStrip=h},PartialStatement:function(a,b,c,d,e){this.loc=e,this.type="PartialStatement",this.name=a,this.params=b||[],this.hash=c,this.indent="",this.strip=d},ContentStatement:function(a,b){this.loc=b,this.type="ContentStatement",this.original=this.value=a},CommentStatement:function(a,b,c){this.loc=c,this.type="CommentStatement",this.value=a,this.strip=b},SubExpression:function(a,b,c,d){this.loc=d,this.type="SubExpression",this.path=a,this.params=b||[],this.hash=c},PathExpression:function(a,b,c,d,e){this.loc=e,this.type="PathExpression",this.data=a,this.original=d,this.parts=c,this.depth=b},StringLiteral:function(a,b){this.loc=b,this.type="StringLiteral",this.original=this.value=a},NumberLiteral:function(a,b){this.loc=b,this.type="NumberLiteral",this.original=this.value=Number(a)},BooleanLiteral:function(a,b){this.loc=b,this.type="BooleanLiteral",this.original=this.value="true"===a},UndefinedLiteral:function(a){this.loc=a,this.type="UndefinedLiteral",this.original=this.value=void 0},NullLiteral:function(a){this.loc=a,this.type="NullLiteral",this.original=this.value=null},Hash:function(a,b){this.loc=b,this.type="Hash",this.pairs=a},HashPair:function(a,b,c){this.loc=c,this.type="HashPair",this.key=a,this.value=b},helpers:{helperExpression:function(a){return!("SubExpression"!==a.type&&!a.params.length&&!a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;g["default"].yy=o,o.locInfo=function(a){return new o.SourceLocation(b&&b.srcName,a)};var c=new k["default"];return c.accept(g["default"].parse(a))}var e=c(8)["default"];b.__esModule=!0,b.parse=d;var f=c(14),g=e(f),h=c(2),i=e(h),j=c(15),k=e(j),l=c(16),m=e(l),n=c(12);b.parser=g["default"];var o={};n.extend(o,m,i["default"])},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var b=c.parse(a,f),d=(new c.Compiler).compile(b,f),e=(new c.JavaScriptCompiler).compile(d,f,void 0,!0);return c.template(e)}function e(a,b){return g||(g=d()),g.call(this,a,b)}var f=void 0===arguments[1]?{}:arguments[1];if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);"data"in f||(f.data=!0),f.compat&&(f.useDepths=!0);var g=void 0;return e._setup=function(a){return g||(g=d()),g._setup(a)},e._child=function(a,b,c,e){return g||(g=d()),g._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;cc;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;b>c;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(b.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;c>d;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},PartialStatement:function(a){this.usePartial=!0;var b=a.params;if(b.length>1)throw new k["default"]("Unsupported number of partial arguments: "+b.length,a);b.length||b.push({type:"PathExpression",parts:[],depth:0});var c=a.name.original,d="SubExpression"===a.name.type;d&&this.accept(a.name),this.setupFullMustacheParams(a,void 0,void 0,!0);var e=a.indent||"";this.options.preventIndent&&e&&(this.opcode("appendContent",e),e=""),this.opcode("invokePartial",d,c,e),this.opcode("append")},MustacheStatement:function(a){this.SubExpression(a),this.opcode(a.escaped&&!this.options.noEscape?"appendEscaped":"append")},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){this.accept(a.path),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts)):this.opcode("lookupOnContext",a.parts,a.falsy,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");d>c;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;c>b;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^\.\//g,"").replace(/^\.$/g,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;c>b;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;g>f;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("this.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(8)["default"];b.__esModule=!0;var h=c(9),i=c(11),j=g(i),k=c(12),l=c(17),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"['",b,"']"]},depthedLookup:function(a){return[this.aliasable("this.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;i>h;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k},m=this.context.programs;for(h=0,i=m.length;i>h;h++)m[h]&&(l[h]=m[h]);return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("this.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c){var d=0;c||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[d++])),this.resolvePath("context",a,d,b)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b){this.pushStackLiteral(a?"this.data(data, "+a+")":"data"),this.resolvePath("data",b,0,!0)},resolvePath:function(a,b,c,d){var e=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict,this,b,a));for(var g=b.length;g>c;c++)this.replaceStack(function(f){var g=e.nameLookup(f,b[c],a);return d?[" && ",g]:[" != null ? ",g," : ",f]})},resolvePossibleLambda:function(){this.push([this.aliasable("this.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){this.pushStackLiteral(null!=a?this.programExpression(a):null)},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d,!1);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",d.unshift(a?b:this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("this.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):this.pushStackLiteral("SubExpression"===a?"true":"null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;g>f;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);null==h?(this.context.programs.push(""),h=this.context.programs.length,d.index=h,d.name="program"+h,this.context.programs[h]=e.compile(d,b,this.context,!this.precompile),this.context.environments[h]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams):(d.index=h,d.name="program"+h,this.useDepths=this.useDepths||d.useDepths,this.useBlockParams=this.useBlockParams||d.useBlockParams)}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;c>b;b++){var d=this.context.environments[b];if(d&&d.equals(a))return b}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"this.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;c>b;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper");return{params:d,paramsInit:e,name:f,callParams:[this.contextName(0)].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=void 0;d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var i=this.popStack(),j=this.popStack();(j||i)&&(d.fn=j||"this.noop",d.inverse=i||"this.noop");for(var k=b;k--;)h=this.popStack(),c[k]=h,this.trackIds&&(g[k]=this.popStack()),this.stringParams&&(f[k]=this.popStack(),e[k]=this.popStack());return this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c,!0);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):(c.push(e),"")}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;d>c;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}var e=c(8)["default"];b.__esModule=!0;var f=c(11),g=e(f),h=c(2),i=e(h);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&(!c.type||!i["default"][c.type]))throw new g["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new g["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;c>b;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:function(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")},BlockStatement:function(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash"),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")},PartialStatement:function(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:function(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")},PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){b.Handlebars===a&&(b.Handlebars=d)}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b){this.helpers=a||{},this.partials=b||{},e(this)}function e(a){a.registerHelper("helperMissing",function(){if(1===arguments.length)return void 0;throw new k["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')}),a.registerHelper("blockHelperMissing",function(b,c){var d=c.inverse,e=c.fn;if(b===!0)return e(this);if(b===!1||null==b)return d(this);if(o(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):d(this);if(c.data&&c.ids){var g=f(c.data);g.contextPath=i.appendContextPath(c.data.contextPath,c.name),c={data:g}}return e(b,c)}),a.registerHelper("each",function(a,b){function c(b,c,e){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!e,l&&(j.contextPath=l+b)),h+=d(a[b],{data:j,blockParams:i.blockParams([a[b],b],[l+b,null])})}if(!b)throw new k["default"]("Must pass iterator to #each");var d=b.fn,e=b.inverse,g=0,h="",j=void 0,l=void 0;if(b.data&&b.ids&&(l=i.appendContextPath(b.data.contextPath,b.ids[0])+"."),p(a)&&(a=a.call(this)),b.data&&(j=f(b.data)),a&&"object"==typeof a)if(o(a))for(var m=a.length;m>g;g++)c(g,g,g===a.length-1);else{var n=void 0;for(var q in a)a.hasOwnProperty(q)&&(n&&c(n,g-1),n=q,g++);n&&c(n,g-1,!0)}return 0===g&&(h=e(this)),h}),a.registerHelper("if",function(a,b){return p(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||i.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})}),a.registerHelper("with",function(a,b){p(a)&&(a=a.call(this));var c=b.fn;if(i.isEmpty(a))return b.inverse(this);if(b.data&&b.ids){var d=f(b.data);d.contextPath=i.appendContextPath(b.data.contextPath,b.ids[0]),b={data:d}}return c(a,b)}),a.registerHelper("log",function(b,c){var d=c.data&&null!=c.data.level?parseInt(c.data.level,10):1;a.log(d,b)}),a.registerHelper("lookup",function(a,b){return a&&a[b]})}function f(a){var b=i.extend({},a);return b._parent=a,b}var g=c(8)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d,b.createFrame=f;var h=c(12),i=g(h),j=c(11),k=g(j),l="3.0.1";b.VERSION=l;var m=6;b.COMPILER_REVISION=m;var n={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1"};b.REVISION_CHANGES=n;var o=i.isArray,p=i.isFunction,q=i.toString,r="[object Object]";d.prototype={constructor:d,logger:s,log:t,registerHelper:function(a,b){if(q.call(a)===r){if(b)throw new k["default"]("Arg not supported with multiple helpers");i.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(q.call(a)===r)i.extend(this.partials,a);else{if("undefined"==typeof b)throw new k["default"]("Attempting to register a partial as undefined");this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]}};var s={methodMap:{0:"debug",1:"info",2:"warn",3:"error"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:1,log:function(a,b){if("undefined"!=typeof console&&s.level<=a){var c=s.methodMap[a];(console[c]||console.log).call(console,b)}}};b.logger=s;var t=s.log;b.log=t},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b){"use strict";function c(a,b){var e=b&&b.loc,f=void 0,g=void 0;e&&(f=e.start.line,g=e.start.column,a+=" - "+f+":"+g);for(var h=Error.prototype.constructor.call(this,a),i=0;ic;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return l.test(a)?a.replace(k,c):a}function g(a){return a||0===a?o(a)&&0===a.length?!0:!1:!0}function h(a,b){return a.path=b,a}function i(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.blockParams=h,b.appendContextPath=i;var j={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},k=/[&<>"'`]/g,l=/[&<>"'`]/,m=Object.prototype.toString;b.toString=m;var n=function(a){return"function"==typeof a};n(/x/)&&(b.isFunction=n=function(a){return"function"==typeof a&&"[object Function]"===m.call(a)});var n;b.isFunction=n;var o=Array.isArray||function(a){return a&&"object"==typeof a?"[object Array]"===m.call(a):!1};b.isArray=o},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=p.COMPILER_REVISION;if(b!==c){if(c>b){var d=p.REVISION_CHANGES[c],e=p.REVISION_CHANGES[b];throw new o["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new o["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=m.extend({},d,e.hash)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;i>h&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new o["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){var c=void 0===arguments[1]?{}:arguments[1],f=c.data; +d._setup(c),!c.partial&&a.useData&&(f=j(b,f));var g=void 0,h=a.useBlockParams?[]:void 0;return a.useDepths&&(g=c.depths?[b].concat(c.depths):[b]),a.main.call(e,b,e.helpers,e.partials,f,h,g)}if(!b)throw new o["default"]("No environment passed to template");if(!a||!a.main)throw new o["default"]("Unknown template object: "+typeof a);b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new o["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;c>d;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:m.escapeExpression,invokePartial:c,fn:function(b){return a[b]},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=m.extend({},b,a)),c},noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new o["default"]("must pass block params");if(a.useDepths&&!g)throw new o["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=void 0===arguments[1]?{}:arguments[1];return c.call(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),g&&[b].concat(g))}return h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a=c.partials[c.name],a}function h(a,b,c){if(c.partial=!0,void 0===a)throw new o["default"]("The partial "+c.name+" could not be found");return a instanceof Function?a(b,c):void 0}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?p.createFrame(b):{},b.root=a),b}var k=c(8)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var l=c(12),m=k(l),n=c(11),o=k(n),p=c(9)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,content:12,COMMENT:13,CONTENT:14,openRawBlock:15,END_RAW_BLOCK:16,OPEN_RAW_BLOCK:17,helperName:18,openRawBlock_repetition0:19,openRawBlock_option0:20,CLOSE_RAW_BLOCK:21,openBlock:22,block_option0:23,closeBlock:24,openInverse:25,block_option1:26,OPEN_BLOCK:27,openBlock_repetition0:28,openBlock_option0:29,openBlock_option1:30,CLOSE:31,OPEN_INVERSE:32,openInverse_repetition0:33,openInverse_option0:34,openInverse_option1:35,openInverseChain:36,OPEN_INVERSE_CHAIN:37,openInverseChain_repetition0:38,openInverseChain_option0:39,openInverseChain_option1:40,inverseAndProgram:41,INVERSE:42,inverseChain:43,inverseChain_option0:44,OPEN_ENDBLOCK:45,OPEN:46,mustache_repetition0:47,mustache_option0:48,OPEN_UNESCAPED:49,mustache_repetition1:50,mustache_option1:51,CLOSE_UNESCAPED:52,OPEN_PARTIAL:53,partialName:54,partial_repetition0:55,partial_option0:56,param:57,sexpr:58,OPEN_SEXPR:59,sexpr_repetition0:60,sexpr_option0:61,CLOSE_SEXPR:62,hash:63,hash_repetition_plus0:64,hashSegment:65,ID:66,EQUALS:67,blockParams:68,OPEN_BLOCK_PARAMS:69,blockParams_repetition_plus0:70,CLOSE_BLOCK_PARAMS:71,path:72,dataName:73,STRING:74,NUMBER:75,BOOLEAN:76,UNDEFINED:77,NULL:78,DATA:79,pathSegments:80,SEP:81,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",13:"COMMENT",14:"CONTENT",16:"END_RAW_BLOCK",17:"OPEN_RAW_BLOCK",21:"CLOSE_RAW_BLOCK",27:"OPEN_BLOCK",31:"CLOSE",32:"OPEN_INVERSE",37:"OPEN_INVERSE_CHAIN",42:"INVERSE",45:"OPEN_ENDBLOCK",46:"OPEN",49:"OPEN_UNESCAPED",52:"CLOSE_UNESCAPED",53:"OPEN_PARTIAL",59:"OPEN_SEXPR",62:"CLOSE_SEXPR",66:"ID",67:"EQUALS",69:"OPEN_BLOCK_PARAMS",71:"CLOSE_BLOCK_PARAMS",74:"STRING",75:"NUMBER",76:"BOOLEAN",77:"UNDEFINED",78:"NULL",79:"DATA",81:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[12,1],[10,3],[15,5],[9,4],[9,4],[22,6],[25,6],[36,6],[41,2],[43,3],[43,1],[24,3],[8,5],[8,5],[11,5],[57,1],[57,1],[58,5],[63,1],[65,3],[68,3],[18,1],[18,1],[18,1],[18,1],[18,1],[18,1],[18,1],[54,1],[54,1],[73,2],[72,1],[80,3],[80,1],[6,0],[6,2],[19,0],[19,2],[20,0],[20,1],[23,0],[23,1],[26,0],[26,1],[28,0],[28,2],[29,0],[29,1],[30,0],[30,1],[33,0],[33,2],[34,0],[34,1],[35,0],[35,1],[38,0],[38,2],[39,0],[39,1],[40,0],[40,1],[44,0],[44,1],[47,0],[47,2],[48,0],[48,1],[50,0],[50,2],[51,0],[51,1],[55,0],[55,2],[56,0],[56,1],[60,0],[60,2],[61,0],[61,1],[64,1],[64,2],[70,1],[70,2]],performAction:function(a,b,c,d,e,f){var g=f.length-1;switch(e){case 1:return f[g-1];case 2:this.$=new d.Program(f[g],null,{},d.locInfo(this._$));break;case 3:this.$=f[g];break;case 4:this.$=f[g];break;case 5:this.$=f[g];break;case 6:this.$=f[g];break;case 7:this.$=f[g];break;case 8:this.$=new d.CommentStatement(d.stripComment(f[g]),d.stripFlags(f[g],f[g]),d.locInfo(this._$));break;case 9:this.$=new d.ContentStatement(f[g],d.locInfo(this._$));break;case 10:this.$=d.prepareRawBlock(f[g-2],f[g-1],f[g],this._$);break;case 11:this.$={path:f[g-3],params:f[g-2],hash:f[g-1]};break;case 12:this.$=d.prepareBlock(f[g-3],f[g-2],f[g-1],f[g],!1,this._$);break;case 13:this.$=d.prepareBlock(f[g-3],f[g-2],f[g-1],f[g],!0,this._$);break;case 14:this.$={path:f[g-4],params:f[g-3],hash:f[g-2],blockParams:f[g-1],strip:d.stripFlags(f[g-5],f[g])};break;case 15:this.$={path:f[g-4],params:f[g-3],hash:f[g-2],blockParams:f[g-1],strip:d.stripFlags(f[g-5],f[g])};break;case 16:this.$={path:f[g-4],params:f[g-3],hash:f[g-2],blockParams:f[g-1],strip:d.stripFlags(f[g-5],f[g])};break;case 17:this.$={strip:d.stripFlags(f[g-1],f[g-1]),program:f[g]};break;case 18:var h=d.prepareBlock(f[g-2],f[g-1],f[g],f[g],!1,this._$),i=new d.Program([h],null,{},d.locInfo(this._$));i.chained=!0,this.$={strip:f[g-2].strip,program:i,chain:!0};break;case 19:this.$=f[g];break;case 20:this.$={path:f[g-1],strip:d.stripFlags(f[g-2],f[g])};break;case 21:this.$=d.prepareMustache(f[g-3],f[g-2],f[g-1],f[g-4],d.stripFlags(f[g-4],f[g]),this._$);break;case 22:this.$=d.prepareMustache(f[g-3],f[g-2],f[g-1],f[g-4],d.stripFlags(f[g-4],f[g]),this._$);break;case 23:this.$=new d.PartialStatement(f[g-3],f[g-2],f[g-1],d.stripFlags(f[g-4],f[g]),d.locInfo(this._$));break;case 24:this.$=f[g];break;case 25:this.$=f[g];break;case 26:this.$=new d.SubExpression(f[g-3],f[g-2],f[g-1],d.locInfo(this._$));break;case 27:this.$=new d.Hash(f[g],d.locInfo(this._$));break;case 28:this.$=new d.HashPair(d.id(f[g-2]),f[g],d.locInfo(this._$));break;case 29:this.$=d.id(f[g-1]);break;case 30:this.$=f[g];break;case 31:this.$=f[g];break;case 32:this.$=new d.StringLiteral(f[g],d.locInfo(this._$));break;case 33:this.$=new d.NumberLiteral(f[g],d.locInfo(this._$));break;case 34:this.$=new d.BooleanLiteral(f[g],d.locInfo(this._$));break;case 35:this.$=new d.UndefinedLiteral(d.locInfo(this._$));break;case 36:this.$=new d.NullLiteral(d.locInfo(this._$));break;case 37:this.$=f[g];break;case 38:this.$=f[g];break;case 39:this.$=d.preparePath(!0,f[g],this._$);break;case 40:this.$=d.preparePath(!1,f[g],this._$);break;case 41:f[g-2].push({part:d.id(f[g]),original:f[g],separator:f[g-1]}),this.$=f[g-2];break;case 42:this.$=[{part:d.id(f[g]),original:f[g]}];break;case 43:this.$=[];break;case 44:f[g-1].push(f[g]);break;case 45:this.$=[];break;case 46:f[g-1].push(f[g]);break;case 53:this.$=[];break;case 54:f[g-1].push(f[g]);break;case 59:this.$=[];break;case 60:f[g-1].push(f[g]);break;case 65:this.$=[];break;case 66:f[g-1].push(f[g]);break;case 73:this.$=[];break;case 74:f[g-1].push(f[g]);break;case 77:this.$=[];break;case 78:f[g-1].push(f[g]);break;case 81:this.$=[];break;case 82:f[g-1].push(f[g]);break;case 85:this.$=[];break;case 86:f[g-1].push(f[g]);break;case 89:this.$=[f[g]];break;case 90:f[g-1].push(f[g]);break;case 91:this.$=[f[g]];break;case 92:f[g-1].push(f[g])}},table:[{3:1,4:2,5:[2,43],6:3,13:[2,43],14:[2,43],17:[2,43],27:[2,43],32:[2,43],46:[2,43],49:[2,43],53:[2,43]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:[1,11],14:[1,18],15:16,17:[1,21],22:14,25:15,27:[1,19],32:[1,20],37:[2,2],42:[2,2],45:[2,2],46:[1,12],49:[1,13],53:[1,17]},{1:[2,1]},{5:[2,44],13:[2,44],14:[2,44],17:[2,44],27:[2,44],32:[2,44],37:[2,44],42:[2,44],45:[2,44],46:[2,44],49:[2,44],53:[2,44]},{5:[2,3],13:[2,3],14:[2,3],17:[2,3],27:[2,3],32:[2,3],37:[2,3],42:[2,3],45:[2,3],46:[2,3],49:[2,3],53:[2,3]},{5:[2,4],13:[2,4],14:[2,4],17:[2,4],27:[2,4],32:[2,4],37:[2,4],42:[2,4],45:[2,4],46:[2,4],49:[2,4],53:[2,4]},{5:[2,5],13:[2,5],14:[2,5],17:[2,5],27:[2,5],32:[2,5],37:[2,5],42:[2,5],45:[2,5],46:[2,5],49:[2,5],53:[2,5]},{5:[2,6],13:[2,6],14:[2,6],17:[2,6],27:[2,6],32:[2,6],37:[2,6],42:[2,6],45:[2,6],46:[2,6],49:[2,6],53:[2,6]},{5:[2,7],13:[2,7],14:[2,7],17:[2,7],27:[2,7],32:[2,7],37:[2,7],42:[2,7],45:[2,7],46:[2,7],49:[2,7],53:[2,7]},{5:[2,8],13:[2,8],14:[2,8],17:[2,8],27:[2,8],32:[2,8],37:[2,8],42:[2,8],45:[2,8],46:[2,8],49:[2,8],53:[2,8]},{18:22,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{18:33,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{4:34,6:3,13:[2,43],14:[2,43],17:[2,43],27:[2,43],32:[2,43],37:[2,43],42:[2,43],45:[2,43],46:[2,43],49:[2,43],53:[2,43]},{4:35,6:3,13:[2,43],14:[2,43],17:[2,43],27:[2,43],32:[2,43],42:[2,43],45:[2,43],46:[2,43],49:[2,43],53:[2,43]},{12:36,14:[1,18]},{18:38,54:37,58:39,59:[1,40],66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{5:[2,9],13:[2,9],14:[2,9],16:[2,9],17:[2,9],27:[2,9],32:[2,9],37:[2,9],42:[2,9],45:[2,9],46:[2,9],49:[2,9],53:[2,9]},{18:41,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{18:42,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{18:43,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{31:[2,73],47:44,59:[2,73],66:[2,73],74:[2,73],75:[2,73],76:[2,73],77:[2,73],78:[2,73],79:[2,73]},{21:[2,30],31:[2,30],52:[2,30],59:[2,30],62:[2,30],66:[2,30],69:[2,30],74:[2,30],75:[2,30],76:[2,30],77:[2,30],78:[2,30],79:[2,30]},{21:[2,31],31:[2,31],52:[2,31],59:[2,31],62:[2,31],66:[2,31],69:[2,31],74:[2,31],75:[2,31],76:[2,31],77:[2,31],78:[2,31],79:[2,31]},{21:[2,32],31:[2,32],52:[2,32],59:[2,32],62:[2,32],66:[2,32],69:[2,32],74:[2,32],75:[2,32],76:[2,32],77:[2,32],78:[2,32],79:[2,32]},{21:[2,33],31:[2,33],52:[2,33],59:[2,33],62:[2,33],66:[2,33],69:[2,33],74:[2,33],75:[2,33],76:[2,33],77:[2,33],78:[2,33],79:[2,33]},{21:[2,34],31:[2,34],52:[2,34],59:[2,34],62:[2,34],66:[2,34],69:[2,34],74:[2,34],75:[2,34],76:[2,34],77:[2,34],78:[2,34],79:[2,34]},{21:[2,35],31:[2,35],52:[2,35],59:[2,35],62:[2,35],66:[2,35],69:[2,35],74:[2,35],75:[2,35],76:[2,35],77:[2,35],78:[2,35],79:[2,35]},{21:[2,36],31:[2,36],52:[2,36],59:[2,36],62:[2,36],66:[2,36],69:[2,36],74:[2,36],75:[2,36],76:[2,36],77:[2,36],78:[2,36],79:[2,36]},{21:[2,40],31:[2,40],52:[2,40],59:[2,40],62:[2,40],66:[2,40],69:[2,40],74:[2,40],75:[2,40],76:[2,40],77:[2,40],78:[2,40],79:[2,40],81:[1,45]},{66:[1,32],80:46},{21:[2,42],31:[2,42],52:[2,42],59:[2,42],62:[2,42],66:[2,42],69:[2,42],74:[2,42],75:[2,42],76:[2,42],77:[2,42],78:[2,42],79:[2,42],81:[2,42]},{50:47,52:[2,77],59:[2,77],66:[2,77],74:[2,77],75:[2,77],76:[2,77],77:[2,77],78:[2,77],79:[2,77]},{23:48,36:50,37:[1,52],41:51,42:[1,53],43:49,45:[2,49]},{26:54,41:55,42:[1,53],45:[2,51]},{16:[1,56]},{31:[2,81],55:57,59:[2,81],66:[2,81],74:[2,81],75:[2,81],76:[2,81],77:[2,81],78:[2,81],79:[2,81]},{31:[2,37],59:[2,37],66:[2,37],74:[2,37],75:[2,37],76:[2,37],77:[2,37],78:[2,37],79:[2,37]},{31:[2,38],59:[2,38],66:[2,38],74:[2,38],75:[2,38],76:[2,38],77:[2,38],78:[2,38],79:[2,38]},{18:58,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{28:59,31:[2,53],59:[2,53],66:[2,53],69:[2,53],74:[2,53],75:[2,53],76:[2,53],77:[2,53],78:[2,53],79:[2,53]},{31:[2,59],33:60,59:[2,59],66:[2,59],69:[2,59],74:[2,59],75:[2,59],76:[2,59],77:[2,59],78:[2,59],79:[2,59]},{19:61,21:[2,45],59:[2,45],66:[2,45],74:[2,45],75:[2,45],76:[2,45],77:[2,45],78:[2,45],79:[2,45]},{18:65,31:[2,75],48:62,57:63,58:66,59:[1,40],63:64,64:67,65:68,66:[1,69],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{66:[1,70]},{21:[2,39],31:[2,39],52:[2,39],59:[2,39],62:[2,39],66:[2,39],69:[2,39],74:[2,39],75:[2,39],76:[2,39],77:[2,39],78:[2,39],79:[2,39],81:[1,45]},{18:65,51:71,52:[2,79],57:72,58:66,59:[1,40],63:73,64:67,65:68,66:[1,69],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{24:74,45:[1,75]},{45:[2,50]},{4:76,6:3,13:[2,43],14:[2,43],17:[2,43],27:[2,43],32:[2,43],37:[2,43],42:[2,43],45:[2,43],46:[2,43],49:[2,43],53:[2,43]},{45:[2,19]},{18:77,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{4:78,6:3,13:[2,43],14:[2,43],17:[2,43],27:[2,43],32:[2,43],45:[2,43],46:[2,43],49:[2,43],53:[2,43]},{24:79,45:[1,75]},{45:[2,52]},{5:[2,10],13:[2,10],14:[2,10],17:[2,10],27:[2,10],32:[2,10],37:[2,10],42:[2,10],45:[2,10],46:[2,10],49:[2,10],53:[2,10]},{18:65,31:[2,83],56:80,57:81,58:66,59:[1,40],63:82,64:67,65:68,66:[1,69],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{59:[2,85],60:83,62:[2,85],66:[2,85],74:[2,85],75:[2,85],76:[2,85],77:[2,85],78:[2,85],79:[2,85]},{18:65,29:84,31:[2,55],57:85,58:66,59:[1,40],63:86,64:67,65:68,66:[1,69],69:[2,55],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{18:65,31:[2,61],34:87,57:88,58:66,59:[1,40],63:89,64:67,65:68,66:[1,69],69:[2,61],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{18:65,20:90,21:[2,47],57:91,58:66,59:[1,40],63:92,64:67,65:68,66:[1,69],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{31:[1,93]},{31:[2,74],59:[2,74],66:[2,74],74:[2,74],75:[2,74],76:[2,74],77:[2,74],78:[2,74],79:[2,74]},{31:[2,76]},{21:[2,24],31:[2,24],52:[2,24],59:[2,24],62:[2,24],66:[2,24],69:[2,24],74:[2,24],75:[2,24],76:[2,24],77:[2,24],78:[2,24],79:[2,24]},{21:[2,25],31:[2,25],52:[2,25],59:[2,25],62:[2,25],66:[2,25],69:[2,25],74:[2,25],75:[2,25],76:[2,25],77:[2,25],78:[2,25],79:[2,25]},{21:[2,27],31:[2,27],52:[2,27],62:[2,27],65:94,66:[1,95],69:[2,27]},{21:[2,89],31:[2,89],52:[2,89],62:[2,89],66:[2,89],69:[2,89]},{21:[2,42],31:[2,42],52:[2,42],59:[2,42],62:[2,42],66:[2,42],67:[1,96],69:[2,42],74:[2,42],75:[2,42],76:[2,42],77:[2,42],78:[2,42],79:[2,42],81:[2,42]},{21:[2,41],31:[2,41],52:[2,41],59:[2,41],62:[2,41],66:[2,41],69:[2,41],74:[2,41],75:[2,41],76:[2,41],77:[2,41],78:[2,41],79:[2,41],81:[2,41]},{52:[1,97]},{52:[2,78],59:[2,78],66:[2,78],74:[2,78],75:[2,78],76:[2,78],77:[2,78],78:[2,78],79:[2,78]},{52:[2,80]},{5:[2,12],13:[2,12],14:[2,12],17:[2,12],27:[2,12],32:[2,12],37:[2,12],42:[2,12],45:[2,12],46:[2,12],49:[2,12],53:[2,12]},{18:98,66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{36:50,37:[1,52],41:51,42:[1,53],43:100,44:99,45:[2,71]},{31:[2,65],38:101,59:[2,65],66:[2,65],69:[2,65],74:[2,65],75:[2,65],76:[2,65],77:[2,65],78:[2,65],79:[2,65]},{45:[2,17]},{5:[2,13],13:[2,13],14:[2,13],17:[2,13],27:[2,13],32:[2,13],37:[2,13],42:[2,13],45:[2,13],46:[2,13],49:[2,13],53:[2,13]},{31:[1,102]},{31:[2,82],59:[2,82],66:[2,82],74:[2,82],75:[2,82],76:[2,82],77:[2,82],78:[2,82],79:[2,82]},{31:[2,84]},{18:65,57:104,58:66,59:[1,40],61:103,62:[2,87],63:105,64:67,65:68,66:[1,69],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{30:106,31:[2,57],68:107,69:[1,108]},{31:[2,54],59:[2,54],66:[2,54],69:[2,54],74:[2,54],75:[2,54],76:[2,54],77:[2,54],78:[2,54],79:[2,54]},{31:[2,56],69:[2,56]},{31:[2,63],35:109,68:110,69:[1,108]},{31:[2,60],59:[2,60],66:[2,60],69:[2,60],74:[2,60],75:[2,60],76:[2,60],77:[2,60],78:[2,60],79:[2,60]},{31:[2,62],69:[2,62]},{21:[1,111]},{21:[2,46],59:[2,46],66:[2,46],74:[2,46],75:[2,46],76:[2,46],77:[2,46],78:[2,46],79:[2,46]},{21:[2,48]},{5:[2,21],13:[2,21],14:[2,21],17:[2,21],27:[2,21],32:[2,21],37:[2,21],42:[2,21],45:[2,21],46:[2,21],49:[2,21],53:[2,21]},{21:[2,90],31:[2,90],52:[2,90],62:[2,90],66:[2,90],69:[2,90]},{67:[1,96]},{18:65,57:112,58:66,59:[1,40],66:[1,32],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{5:[2,22],13:[2,22],14:[2,22],17:[2,22],27:[2,22],32:[2,22],37:[2,22],42:[2,22],45:[2,22],46:[2,22],49:[2,22],53:[2,22]},{31:[1,113]},{45:[2,18]},{45:[2,72]},{18:65,31:[2,67],39:114,57:115,58:66,59:[1,40],63:116,64:67,65:68,66:[1,69],69:[2,67],72:23,73:24,74:[1,25],75:[1,26],76:[1,27],77:[1,28],78:[1,29],79:[1,31],80:30},{5:[2,23],13:[2,23],14:[2,23],17:[2,23],27:[2,23],32:[2,23],37:[2,23],42:[2,23],45:[2,23],46:[2,23],49:[2,23],53:[2,23]},{62:[1,117]},{59:[2,86],62:[2,86],66:[2,86],74:[2,86],75:[2,86],76:[2,86],77:[2,86],78:[2,86],79:[2,86]},{62:[2,88]},{31:[1,118]},{31:[2,58]},{66:[1,120],70:119},{31:[1,121]},{31:[2,64]},{14:[2,11]},{21:[2,28],31:[2,28],52:[2,28],62:[2,28],66:[2,28],69:[2,28]},{5:[2,20],13:[2,20],14:[2,20],17:[2,20],27:[2,20],32:[2,20],37:[2,20],42:[2,20],45:[2,20],46:[2,20],49:[2,20],53:[2,20]},{31:[2,69],40:122,68:123,69:[1,108]},{31:[2,66],59:[2,66],66:[2,66],69:[2,66],74:[2,66],75:[2,66],76:[2,66],77:[2,66],78:[2,66],79:[2,66]},{31:[2,68],69:[2,68]},{21:[2,26],31:[2,26],52:[2,26],59:[2,26],62:[2,26],66:[2,26],69:[2,26],74:[2,26],75:[2,26],76:[2,26],77:[2,26],78:[2,26],79:[2,26]},{13:[2,14],14:[2,14],17:[2,14],27:[2,14],32:[2,14],37:[2,14],42:[2,14],45:[2,14],46:[2,14],49:[2,14],53:[2,14]},{66:[1,125],71:[1,124]},{66:[2,91],71:[2,91]},{13:[2,15],14:[2,15],17:[2,15],27:[2,15],32:[2,15],42:[2,15],45:[2,15],46:[2,15],49:[2,15],53:[2,15]},{31:[1,126]},{31:[2,70]},{31:[2,29]},{66:[2,92],71:[2,92]},{13:[2,16],14:[2,16],17:[2,16],27:[2,16],32:[2,16],37:[2,16],42:[2,16],45:[2,16],46:[2,16],49:[2,16],53:[2,16]}],defaultActions:{4:[2,1],49:[2,50],51:[2,19],55:[2,52],64:[2,76],73:[2,80],78:[2,17],82:[2,84],92:[2,48],99:[2,18],100:[2,72],105:[2,88],107:[2,58],110:[2,64],111:[2,11],123:[2,70],124:[2,29]},parseError:function(a){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:((null===n||"undefined"==typeof n)&&(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 14;break;case 1:return 14;case 2:return this.popState(),14;case 3:return b.yytext=b.yytext.substr(5,b.yyleng-9),this.popState(),16;case 4:return 14;case 5:return this.popState(),13;case 6:return 59;case 7:return 62;case 8:return 17;case 9:return this.popState(),this.begin("raw"),21;case 10:return 53;case 11:return 27;case 12:return 45;case 13:return this.popState(),42;case 14:return this.popState(),42;case 15:return 32;case 16:return 37;case 17:return 49;case 18:return 46;case 19:this.unput(b.yytext),this.popState(),this.begin("com");break;case 20:return this.popState(),13;case 21:return 46;case 22:return 67;case 23:return 66;case 24:return 66;case 25:return 81;case 26:break;case 27:return this.popState(),52;case 28:return this.popState(),31;case 29:return b.yytext=e(1,2).replace(/\\"/g,'"'),74;case 30:return b.yytext=e(1,2).replace(/\\'/g,"'"),74;case 31:return 79;case 32:return 76;case 33:return 76;case 34:return 77;case 35:return 78;case 36:return 75;case 37:return 69;case 38:return 71;case 39:return 66;case 40:return 66;case 41:return"INVALID";case 42:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{\/)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[5],inclusive:!1},raw:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,1,42],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(8)["default"];b.__esModule=!0;var j=c(6),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.isRootSeen;this.isRootSeen=!0;for(var c=a.body,d=0,i=c.length;i>d;d++){var j=c[d],k=this.accept(j);if(k){var l=e(c,d,b),m=f(c,d,b),n=k.openStandalone&&l,o=k.closeStandalone&&m,p=k.inlineStandalone&&l&&m;k.close&&g(c,d,!0),k.open&&h(c,d,!0),p&&(g(c,d),h(c,d)&&"PartialStatement"===j.type&&(j.indent=/([ \t]+$)/.exec(c[d-1].original)[1])),n&&(g((j.program||j.inverse).body),h(c,d)),o&&(g(c,d),h((j.inverse||j.program).body))}}return a},d.prototype.BlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function e(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function f(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function g(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function h(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;i>h;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new n["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return new this.PathExpression(a,f,e,d,c)}function i(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g;return new this.MustacheStatement(a,b,c,h,e,this.locInfo(f))}function j(a,b,c,d){if(a.path.original!==c){var e={loc:a.path.loc};throw new n["default"](a.path.original+" doesn't match "+c,e)}d=this.locInfo(d);var f=new this.Program([b],null,{},d);return new this.BlockStatement(a.path,a.params,a.hash,f,void 0,{},{},{},d)}function k(a,b,c,d,e,f){if(d&&d.path&&a.path.original!==d.path.original){var g={loc:a.path.loc};throw new n["default"](a.path.original+" doesn't match "+d.path.original,g)}b.blockParams=a.blockParams;var h=void 0,i=void 0;return c&&(c.chain&&(c.program.body[0].closeStrip=d.strip),i=c.strip,h=c.program),e&&(e=h,h=b,b=e),new this.BlockStatement(a.path,a.params,a.hash,b,h,a.strip,i,d&&d.strip,this.locInfo(f))}var l=c(8)["default"];b.__esModule=!0,b.SourceLocation=d,b.id=e,b.stripFlags=f,b.stripComment=g,b.preparePath=h,b.prepareMustache=i,b.prepareRawBlock=j,b.prepareBlock=k;var m=c(11),n=l(m)},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;g>e;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(12),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;c>b;b++)a(this.source[b])},empty:function(){var a=void 0===arguments[0]?this.currentLocation||{start:{}}:arguments[0];return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e]) +}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a,b){for(var c=this.empty(b),e=0,f=a.length;f>e;e++)e&&c.add(","),c.add(d(a[e],this,b));return c},generateArray:function(a,b){var c=this.generateList(a,b);return c.prepend("["),c.add("]"),c}},b["default"]=e,a.exports=b["default"]}])}); \ No newline at end of file diff --git a/src/oncall/ui/static/js/incalendar.js b/src/oncall/ui/static/js/incalendar.js new file mode 100644 index 0000000..4fd77a9 --- /dev/null +++ b/src/oncall/ui/static/js/incalendar.js @@ -0,0 +1,1738 @@ +/* [IN]Calendar */ + +;(function ($, window, document, undefined) { + var pluginName = "incalendar", + defaults = { + firstDay: 0, + today: moment(), + startDate: moment(), + dateFormat: 'YYYY/M/D', + timeFormat: 'HH:mm', + displayDateFormat: 'M/D/YYYY', + displayTimeFormat: 'HH:mm', + months: ['January','February','March','April','May','June','July','August','September','October','November','December'], + monthsShort: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], + days: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], + daysShort: ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'], + controls: ['month', 'week'], + toolbar: true, + currentView: 'month', + rowCount: 2, + events: null, + drag: true, + modalWidth: 400, + eventHeight: 22, + roles: ['primary', 'secondary', 'vacation'], + currentViewRoles: null, + user: null, + timezone: null, + team: null, + readOnly: false, + eventTypes: [], + swapEvents: null, // #FIXME: swapevents shouldnt live in options + persistSettings: true, // save and retrieve settings to and from local storage + onInit: function (pluginInstance) { + // callback for when calendar is initialized + }, + onRender: function ($calendar) { + // callback for when calendar render is completed + }, + onEventGet: function (data, $calendar) { + // callback for when fetch events ajax call is completed. list of events from server is passed in as arg + }, + onAddEvents: function (events) { + // callback for when events are added to calendar + }, + onRemoveEvent: function () { + // callback for when event is deleted from calendar + }, + onModalOpen: function ($modal, $calendar, $eventItem, evt) { + // callback for when any modal is opened + }, + onModalClose: function ($modal, $calendar) { + // callback for when any modal is closed + }, + onEventDetailsModalOpen: function($modal, $calendar, $eventItem, evt) { + // callback for when event details modal is opened + }, + onEventDetailsModalClose: function($modal, $calendar) { + // callback for when event details modal is closed + }, + onEventMouseover: function ($element, evt) { + // callback for when event is highlighted + }, + onEventMouseout: function ($element, evt) { + // callback for when mouse leaves event + }, + onEventClick: function (evt, e) { + // callback for when event is clicked + } + } + + function InCalendar (el, options) { + + if (defaults.persistSettings && options.persistSettings !== false) { + // Independently load local storage options and merge them to default before loading options passed by user. This is to maintain order of priority. + // Priority goes: default options -> local storage options -> options passed in at calendar init. + this.localStorageService.init(); + defaults = $.extend( {}, defaults, this.localStorageService.settings ); + } + + this.$el = $(el); + this.options = $.extend( {}, defaults, options ); + this.options.today = this._createMoment(this.options.today); + this.options.startDate = this._createMoment(this.options.startDate); + this.options.currentViewRoles = this.options.currentViewRoles || this.options.roles.slice(0); // set current view roles to match roles if no options are passed in and no local storage data is found + this._defaults = defaults; + this._name = pluginName; + this.init(); + } + + InCalendar.prototype = { + init: function () { + this.render(); + this.options.onInit.call(this, this); + }, + render: function (date) { + this.rowSlots = []; + this.$el.empty(); + if (this.options.toolbar) { + this.$el.append(this._buildToolbar(date)); + } + this.$el.append(this._buildCalendar(date)); + if (this.options.drag) { + this._dragEventHandlers(this.$el.find('.inc-node')); + } + if (this.options.events) { + this.refreshCalendarEvents(); + } + if (this.options.getEventsUrl) { + this._fetchCalendarEvents(); + } + if (this.options.persistSettings) { + this.localStorageService.addSetting('currentView', this.options.currentView); + } + this.options.onRender(this.$el); + }, + _createMoment: function (date, format) { + // date can be moment object or string with matching format passed in. See http://momentjs.com/docs/#/parsing/string-format/ + // tz optional, will create the date under specified TZ. TZ data is managed in moment-tz-data.js + var format = format || this.options.dateFormat + ' ' + this.options.timeFormat; + + if (this.options.timezone) { + if (typeof(moment.tz) === 'undefined') { + console.error('Requires moment.js and moment-timezone.js to apply timezone values'); + } + if (format === 'x' || format === 'X') { + // if date format is unix, create a unit based date then shift timezone, otherwise create the date with timezone offset + return moment(date, format).tz(this.options.timezone); + } + return moment.tz(date, format, this.options.timezone); + } else { + return moment(date, format); + } + }, + _buildToolbar: function (date, view) { + var self = this, + controls = self.options.controls, + months = self.options.months, + monthsShort = self.options.monthsShort, + date = date || self.options.startDate, + view = view || self.options.currentView, + $element = $('
'), + $calTitle = $('
'), + monthTitle = months[date.month()] + ' ' + date.year(), + weekRange = self.getWeekRange(date), + weekTitle = monthsShort[weekRange.startDate.month()] + ' ' + weekRange.startDate.date() + ' - ' + monthsShort[weekRange.endDate.month()] + ' ' + weekRange.endDate.date() + ', ' + date.year(), + dayTitle = 'Day', + $controlUl = $('
    '), + $controlLi, + controlType; + + for (var i = 0; i < controls.length; i++) { + controlType = controls[i]; + (function(controlType){ + $controlUl + .append( $('
  • ') + .addClass(function(){ + return view === controlType ? 'active' : ''; + }) + .attr('data-mode', controlType) + .text(controlType) + .click(function(){ + self.options.currentView = controlType; + self.render(); + }) + ) + })(controlType); + } + + $element + .append( $controlUl ) + .append( $calTitle + .append( $('') + .text( + function(){ + if (view === 'day') { + return dayTitle; + } else if (view === 'week') { + return weekTitle; + } else { + return monthTitle; + } + } + ) + .append('') + ) + .prepend( $('') + .html('') + .click(function(){ + self.stepCalendar('backward', view); + }) + ) + .append( $('') + .html('') + .click(function(){ + self.stepCalendar('forward', view); + }) + ) + .append( $('') + .click(function(){ + self.stepToDate(self.options.today); + }) + ) + ); + + return $element; + }, + _buildCalendar: function(date, view, rowCount) { + var self = this, + days = self.options.days, + date = date || self.options.startDate, + today = self.options.today, + monthLength = self.daysInMonth(date), + view = view || self.options.currentView, + $calendar = $(''), + $head = $(''), + $body = $(''), + colCount = days.length, + prevMonthDate, + nextMonthDate, + firstDay = self.getFirstDay(date), + lastDay = self.getLastDay(date), + weekRange = self.getWeekRange(date), + rowCount = rowCount || self.options.rowCount, + day = 1, + calArray = [], + prevMonthArray = [], + nextMonthArray = []; + + function buildMonthCalendar() { + var $bodyTr, + $el = $('
    '), + headStr = '', // using string concat instead of append for perf. + bodyStr = ''; + + rowCount = Math.ceil( (firstDay + monthLength) / colCount ); + + // build header + for (var i = 0; i < colCount; i++) { + headStr += '
    '; + } + + $el.append( + $('
    ' + days[i] + '
    ') + .append( + $('') + .html(headStr) + ) + ).appendTo($head); + + // build body + for (var i = 0; i < rowCount; i++) { + $el = $('
    '); + bodyStr = ''; + // create Calendar array for current/previous/next months + calArray[i] = []; + prevMonthArray[i] = []; + nextMonthArray[i] = []; + + for(var j = 0, k = 1; j < colCount; j++) { + if (i === 0) { + if (j === firstDay) { + //first day of the current month + firstDay++; + calArray[i][j] = day++; + } else { + // backfill last month + // create new date for prev month + prevMonthDate = date.clone().startOf('month').subtract(firstDay - j, 'days'); + prevMonthArray[i][j] = prevMonthDate.date(); + } + } else if ( day <= monthLength ) { + calArray[i][j] = day++; + } else { + if (!nextMonthDate) { + nextMonthDate = date.clone().add(1, 'month'); + } + nextMonthArray[i][j] = k++ + } + if (prevMonthArray[i][j]) { + bodyStr += '
    '; + } else if (nextMonthArray[i][j]) { + bodyStr += ''; + } else { + bodyStr += ''; + } + } + + $el.append( + $('
    ' + prevMonthArray[i][j] + '' + nextMonthArray[i][j] + '' + calArray[i][j] + '
    ') + .append( + $('') + .append( + $('') + .html(bodyStr) + ) + ) + ).appendTo($body); + } + } + + function buildWeekCalendar(date) { + var $el = $('
    '), + headStr = '', // using string concat instead of append for perf. + bodyStr = '', + weekColCt = 24, + startDate = weekRange.startDate, + endDate = weekRange.endDate; + + // build header + headStr += '
    '; + for (var i = 0; i < weekColCt; i++) { + headStr += ''; + } + $el.append( + $('
    Hour' + i + '
    ') + .append( + $('') + .html(headStr) + ) + ).appendTo($head); + + //build body + for (var i = 0; i < colCount; i++) { + $el = $('
    ').addClass(function(){ return today.isSame(startDate, 'd') ? 'today': '' }); + bodyStr = '
    '; + + for(var j = 0, k = 1; j < weekColCt; j++) { + bodyStr += ''; + } + + $el.append( + $('
    ' + days[i] + '
    ' + startDate.format('M/D/YYYY') + '
    ') + .append( + $('') + .html(bodyStr) + ) + ).appendTo($body); + startDate.add(1, 'day'); + } + } + + function buildTemplateCalendar() { + var $el = $('
    '), + headStr = '', + bodyStr = ''; + + // build header + for (var i = 0; i < colCount; i++) { + headStr += '
    '; + } + + $el.append( + $('
    ' + days[i] + '
    ') + .append( + $('') + .html(headStr) + ) + ).appendTo($head); + + + // build body + for (var i = 0; i < rowCount; i++) { + $el = $('
    '); + bodyStr = ''; + for (var j = 0; j < colCount; j++) { + bodyStr += '
    '; + } + + $el.append( + $('
    ') + .append( + $('') + .append( + $('') + .html(bodyStr) + ) + ) + ).appendTo($body); + } + } + + //render type of calendar + if (view === 'week') { + buildWeekCalendar(); + } else if (view === 'template') { + buildTemplateCalendar(); + } else { + buildMonthCalendar(); + } + + self.$calendar = $calendar + .attr('data-view', view) + .attr('data-read-only', self.options.readOnly) + .append($head) + .append($body); + + return $calendar; + }, + addCalendarRows: function(count) { + var self = this, + $body = self.$calendar.find('.inc-body'), + colCount = self.options.days.length, + count = count || 1, + $el = $('
    '), + bodyStr = ''; + + for (var i = 0; i < count; i++) { + $el = $('
    '); + bodyStr = ''; + + for (var j = 0; j < colCount; j++) { + bodyStr += '
    '; + } + + $el.append( + $('
    ') + .append( + $('') + .append( + $('') + .html(bodyStr) + ) + ) + ).appendTo($body); + } + }, + stepCalendar: function (direction) { + var view = this.options.currentView, + dir = direction || 'forward', + method = dir === 'forward' ? 'add' : 'subtract'; + + this.options.startDate[method](1, view); + this.render(); + }, + stepToDate: function (date) { + this.options.startDate = date.clone(); + this.render(); + }, + daysInMonth: function (date) { + var date = date || this.options.today; + return date.daysInMonth(); + }, + getFirstDay: function (date) { + var date = date || this.options.today; + return date.clone().startOf('month').day(); + }, + getLastDay: function (date) { + var date = date || this.options.today; + return date.clone().endOf('month').day(); + }, + getCalStartDate: function () { + return this._createMoment(this.$calendar.find('.inc-node:first').attr('data-date') + ' 00:00'); + }, + getCalEndDate: function () { + return this._createMoment(this.$calendar.find('.inc-node:last').attr('data-date') + ' 24:00'); + }, + getCalStartVal: function () { + return this.getCalStartDate().valueOf(); + }, + getCalEndVal: function () { + return this.getCalEndDate().valueOf(); + }, + getCalRowCount: function () { + return this.$calendar.find('.inc-body .inc-row').length; + }, + getWeekRange: function (date) { + var date = date || this.options.today, + day = date.day(), + startDate = date.clone().startOf('week'), + endDate = date.clone().endOf('week'); + + return { + startDate: startDate, + endDate: endDate + } + }, + getEventsWithinRange: function (start, end, role) { + var result = []; + + for (var i = 0; i < this.options.events.length; i++) { + var item = this.options.events[i]; + + if ( item.end > start && item.start < end) { + if (!role) { + result.push(item); + } else if (role === item.role) { + result.push(item); + } + } + } + + return result; + }, + getCalendarOption: function (option) { + return this.options[option]; + }, + getDSTOffset: function (event) { + // checks event start and end to return the offset for daylight savings time in hours + if (event.startDateObj.isDST() && !event.endDateObj.isDST()) { + return -1; + } else if (!event.startDateObj.isDST() && event.endDateObj.isDST()) { + return 1; + } else { + return null; + } + }, + updateCalendarUser: function (user) { + this.options.user = user; + }, + updateCalendarTeam: function (team) { + this.options.team = team; + }, + updateCalendarOption: function (option, val, refresh) { + this.options[option] = val; + if (refresh) { + this.render(); + } + }, + updateDisplayedEvents: function (eventTypes) { + this.updateCalendarOption('currentViewRoles', eventTypes); + this.$calendar.find('.inc-event').each(function(){ + var $this = $(this); + + if (eventTypes.indexOf($this.attr('data-type')) === -1) { + $this.attr('data-display', false); + } else { + $this.attr('data-display', true); + } + }); + + if (this.options.persistSettings) { + this.localStorageService.addSetting('currentViewRoles', eventTypes); + } + }, + _dragEventHandlers: function ($el) { + /* Create Events */ + var self = this, + startPos = 0, + endPos = 0, + isDragging = false, + $calendar = self.$calendar; + + function attachEventHandlers () { + $('body').off('mouseup.inc-selecting').on('mouseup.inc-selecting', function(e){ + if (!$(e.target).parents('.inc-calendar .inc-body').length && !$(e.target).parents('.modal').length) { + self.removeModal(); + $calendar.attr('data-selecting', false); + isDragging = false; + $el.removeClass('selecting'); + } + }); + $calendar + .on('mousedown', '.inc-node', handleMouseDown) + .on('mouseup', '.inc-node', handleMouseUp) + .on('mousemove', '.inc-node', handleMouseMove); + } + + function handleMouseDown (e) { + if (isRightClick(e)){ + return false; + } else { + self.removeModal(); + startPos = $el.index($(this)); + isDragging = true; + $calendar.attr('data-selecting', true); + + if (typeof e.preventDefault != 'undefined'){ e.preventDefault(); } + } + } + + function handleMouseUp (e) { + var $this = $(this), + $parentRow = $this.parents('.inc-row'), + options = { + top: ( ($parentRow.position().top + $this.outerHeight() + 320) > $(window).height() - $calendar.offset().top) && ($parentRow.position().top - 310 > $calendar.offset().top) ? $parentRow.position().top - 310 : ($parentRow.position().top + $this.outerHeight() - 10), + left: (e.clientX + self.options.modalWidth) >= $(document).width() ? e.clientX - $parentRow.offset().left - self.options.modalWidth : e.clientX - $parentRow.offset().left, // place modal on right of click event if there's room, otherwise place on left of click event. + title: 'Add a new event' + } + + if (isRightClick(e)){ + return false; + } else { + endPos = $el.index($this); + if (isDragging){ + selectRange(); + self.createEventModal(options); + } + $calendar.attr('data-selecting', false); + isDragging = false; + } + } + + function handleMouseMove (e) { + if (isDragging){ + endPos = $el.index($(this)); + selectRange(); + } + } + + function selectRange () { + $el.removeClass('selecting'); + if (endPos + 1 <= startPos){ // reverse select + $el.slice(endPos, startPos + 1).addClass('selecting'); + } else { + $el.slice(startPos, endPos + 1).addClass('selecting'); + } + } + + function isRightClick (e) { + if (e.which){ + return (e.which === 3); + } else if (e.button){ + return (e.button === 2); + } + return false; + } + + attachEventHandlers(); + }, + _fetchCalendarEvents: function () { + // #TODO remove conversion from and to seconds because API uses seconds and JS/cal uses MS + if (!this.options.getEventsUrl) { + return false; + } + + var self = this, + url = self.options.getEventsUrl, + params = { + end__ge: self.getCalStartVal() / 1000, + start__le: self.getCalEndVal() / 1000 + } + + self.$el.addClass('loading-events'); + $.get(url, params).done(function(data){ + self.options.events = data.map(function(i){ + i.start = i.start * 1000; + i.end = i.end * 1000; + return i; + }); + self.addCalendarEvents(); + self.options.onEventGet(data, self.$calendar); + }).always(function(){ + self.$el.removeClass('loading-events'); + }); + }, + addCalendarEvents: function (eventsArray) { + var self = this, + events = eventsArray || self.options.events, + calView = self.options.currentView, + viewRoles = self.options.currentViewRoles, + weekTitleCol = self.$calendar.find('.inc-week-day').outerWidth(), + msPerMinute = 60 * 1000, + msPerHour = msPerMinute * 60, + msPerDay = msPerHour * 24, + msPerWeek = msPerDay * 7, + calWidth, + pxHrRatio, + evt, + evtIndex = { + primary: 0, + secondary: 0, + vacation: 0 + }, + prevRowCount = self.rowSlots.length, + maxRowCount = 1, + rosterIndex = 0; + + if (!events.length) { + return; + } + + if (calView === 'week') { + calWidth = self.$calendar.width() - weekTitleCol; + // pixel to hour ratio, each calendar row represents one day + pxHrRatio = calWidth / 24; + } else { + calWidth = self.$calendar.width(); + // pixel to hour ratio, dividing width of calendar by number of hours in week + pxHrRatio = calWidth / 168; + } + + for (var i = 0; i < events.length; i++) { + evt = events[i]; + evt.origStart = evt.start; + evt.origEnd = evt.end; + if (calView === 'template') { + // skip extra calculations not needed for template view + formatTemplateEvent(evt); + if (maxRowCount > self.options.rowCount) { + self.addCalendarRows(maxRowCount - self.options.rowCount); + self.options.rowCount = maxRowCount; + } + drawEvents(evt); + } else { + trimEvent(evt); + formatEvent(evt); + if (!evt.outsideScope) { + drawEvents(evt); + } + } + } + + // expand calendar block height to fit all events + if (prevRowCount !== self.rowSlots.length) { + var extraRows; + if (prevRowCount === 0) { + // FIXME: remove use of magic number 3 + extraRows = self.rowSlots.length - prevRowCount - 3; + } else { + extraRows = self.rowSlots.length - prevRowCount; + } + if (extraRows > 0) { + var nodes = $('.inc-node'); + var nodeHeight = $(nodes[0]).height() + extraRows * self.options.eventHeight; + for (var i = 0; i < nodes.length; i ++) { + $(nodes[i]).height(nodeHeight); + } + } + } + + function formatEvent (evt) { + // format event obj for display + if (!evt.formatted) { + // convert to ms + evt.startDateObj = self._createMoment(evt.start, 'x'); + evt.endDateObj = self._createMoment(evt.end, 'x'); + evt.origStartDateObj = self._createMoment(evt.origStart, 'x'); + evt.origEndDateObj = self._createMoment(evt.origEnd, 'x'); + evt.DSTOffset = self.getDSTOffset(evt); + if (evt.DSTOffset) { evt.end += evt.DSTOffset * msPerHour; }; + evt.startDate = evt.startDateObj.format(self.options.dateFormat); + evt.startHour = evt.startDateObj.hours(); + evt.startMnt = evt.startDateObj.minutes(); + evt.endDate = evt.endDateObj.format(self.options.dateFormat); + evt.endHour = evt.endDateObj.hours(); + evt.endMnt = evt.endDateObj.minutes(); + evt.$startEl = $('.inc-node[data-date="' + evt.startDate + '"]:first').length ? $('.inc-node[data-date="' + evt.startDate + '"]:first') : $('.inc-node:first'); + evt.$startRow = evt.$startEl.parents('.inc-row'); + evt.index = evtIndex[evt.role]++; + evt.top = calEventLayoutRow(evt) * self.options.eventHeight; + evt.width = calcWidth(evt); + evt.left = calcLeftPos(evt); + evt.leftover = calcLeftover(evt); + evt.rows = 1 + Math.ceil(evt.leftover / calWidth); + evt.showDetailsModal = true; + evt.formatted = true; + } + } + + function formatTemplateEvent (evt) { + // template event is value based instead of date based. start and end are passed in as seconds from 0 ( sunday 12:00 default ) + if (!evt.formatted) { + evt.dStart = evt.origStart >= msPerWeek ? evt.start - msPerWeek * Math.floor(evt.origStart / msPerWeek): evt.start; + evt.dEnd = evt.origStart >= msPerWeek ? evt.end - msPerWeek * Math.floor(evt.origStart / msPerWeek): evt.end; + evt.$startEl = $('.inc-node:first'); + evt.$startRow = $('.inc-row:eq(' + (1 + Math.floor(evt.origStart / msPerWeek)) + ')'); + evt.startHour = parseInt(evt.dStart / 36e5); + evt.startMnt = Math.floor(evt.dStart % 36e5 / 1000 / 60); + evt.top = (calEventLayoutRow(evt) - 1) * self.options.eventHeight + 2; + evt.width = calcWidth(evt); + evt.left = calcLeftPos(evt); + evt.leftover = calcLeftover(evt); + evt.rows = 1 + Math.ceil(evt.leftover / calWidth); + evt.formatted = true; + maxRowCount = evt.rows > maxRowCount ? evt.rows : maxRowCount; + } + } + + function trimEvent (evt) { + var calStart = self.getCalStartVal(), + calEnd = self.getCalEndVal(); + + // trim event to scope of current cal display + if ( evt.end < calStart || evt.start > calEnd ) { + evt.outsideScope = true; + return; + } + + if ( evt.start < calStart ) { + evt.start = calStart; + } + + if ( evt.end > calEnd ) { + evt.end = calEnd; + } + } + + function calcLeftPos (evt) { + return Math.floor(evt.$startEl.position().left + ((evt.startHour + (evt.startMnt / 60)) * pxHrRatio)); + } + + function calEventLayoutRow (evt) { + var conflict, row; + for (var i = 0; i < self.rowSlots.length; i++) { + conflict = false; + row = self.rowSlots[i]; + for (var j = 0; j < row.length; j++) { + var start = row[j].origStart, end = row[j].origEnd; + if (start >= evt.origEnd || end <= evt.origStart) { + continue; + } else { + conflict = true; + break; + } + } + if (conflict === false) { + row.push(evt); + return i+1; + } + } + // conflits in all rows, add a new one + self.rowSlots.push([evt]); + return self.rowSlots.length; + } + + function calcWidth (evt) { + // get event length in hours, return pixel width for event. + return (evt.end - evt.start) / 36e5 * pxHrRatio; + } + + function calcLeftover (evt) { + // calculate leftover width after initial row positioning. + return Math.max(0, evt.width - (calWidth + weekTitleCol - evt.left)); + } + + function drawEvents (evt) { + var startPos = calView === 'month' ? 0 : weekTitleCol; + + function createEventElement (left, top, width) { + var evtHtmlString = evt.displayString || '' + ( evt.full_name || evt.user ) + ' ' + evt.origStartDateObj.format('M/D/YYYY HH:mm') + ' to ' + evt.origEndDateObj.format('M/D/YYYY HH:mm') + '', + evtDisplayString = evt.displayString || ( evt.full_name || evt.user ) + ' ' + evt.origStartDateObj.format('M/D/YYYY HH:mm') + ' to ' + evt.origEndDateObj.format('M/D/YYYY HH:mm'); + + return $('
    ') + .html(evtHtmlString) + .attr('title', evtDisplayString) + .attr('data-type', evt.role) + .attr('data-id', evt.id) + .attr('data-parent-id', evt.parentId) + .attr('data-schedule-id', evt.schedule_id) + .attr('data-link-id', evt.link_id) + .attr('data-display', viewRoles.indexOf(evt.role) !== -1 || self.options.persistSettings === false ? 'true' : 'false') + .css({ + width: Math.ceil(width), + left: Math.ceil(left), + top: evt.top + }) + .on('mouseover', function () { + self.options.onEventMouseover($(this), evt); + }) + .on('mouseout', function () { + self.options.onEventMouseout($(this), evt); + }) + .on('click', function (e) { + e.stopPropagation(); + if (evt.showDetailsModal) { + self.removeModal(); + self.eventDetailsModal(e, evt); + } + self.options.onEventClick(evt, e); + }); + } + + // create first row + var firstRowWidth = evt.width - evt.leftover; + createEventElement(evt.left, 0, firstRowWidth).appendTo(evt.$startRow); + // create the remaining rows + var leftover = evt.leftover; + while (leftover > 0) { + createEventElement(startPos, 0, Math.min(leftover, calWidth)) + .appendTo(evt.$startRow = evt.$startRow.next()); + leftover -= calWidth; + } + evt.$startRow = evt.$startEl.parents('.inc-row'); // reset start row after plotting for future plotting + } + + // after events are drawn + + self.updateEventTypes(); + self.options.onAddEvents(events); + }, + updateEventTypes: function () { + var opts = this.options, + events = opts.events, + types = opts.eventTypes = []; + + for (var i = 0; i < events.length; i++) { + if (types.indexOf(events[i].role) === -1) { + types.push(events[i].role); + } + } + }, + removeEventFromRowSlots: function(ev) { + for (var i = 0; i < this.rowSlots.length; i++) { + var row = this.rowSlots[i]; + for (var j = 0; j < row.length; j++) { + if (row[j].id == ev.id) { + row.splice(j, 1); + return; + } + } + } + }, + clearCalendarEvents: function () { + this.options.eventTypes = []; // reset event type array before rendering new events. + this.$calendar.find('.inc-event').remove(); + }, + refreshCalendarEvents: function (eventsArray, isFullRedraw) { + // Restores calendar events to be in sync with the self.options.events model or event passed in. + this.clearCalendarEvents(); + if (isFullRedraw === true) { + for (var i = 0; i < eventsArray.length; i++) { + eventsArray[i].formatted = false; + } + this.rowSlots = []; + } + this.addCalendarEvents(eventsArray); + }, + refetchCalendarEvents: function () { + // Clears calendar, fetches and draws events again + this.clearCalendarEvents(); + this._fetchCalendarEvents() + }, + _renderOverrideOptions: function ($modal, start, end, role) { + var start = start || this._createMoment($modal.find('#inc-event-start-date').val() + ' ' + $modal.find('#inc-event-start-time').val()).valueOf(), + end = end || this._createMoment($modal.find('#inc-event-end-date').val() + ' ' + $modal.find('#inc-event-end-time').val()).valueOf(), + role = role || $modal.find('#inc-role').val(), + user = $modal.find('#inc-event-user').val(), + eventItems = '', + events = this.getEventsWithinRange(start, end, role); + + if (events.length) { + for (var i = 0, item; i < events.length; i++) { + item = events[i]; + if (item.user !== user) { + eventItems += '
  • '; + } + } + } + $modal.find('#inc-override-event-list').html(eventItems.length ? eventItems : 'No events found matching criteria.').find('input[type="checkbox"]:first').prop('checked', true); + }, + _fetchSwapOptions: function () { + var self = this, + url = self.options.getEventsUrl, + params = { + start__ge: self.options.today.valueOf() / 1000 + } + + return $.get(url, params); + }, + _renderSwapOptions: function ($modal, user, role, toLinked) { + var self = this, + role = role || $modal.find('#inc-swap-role').val(), + $fromEvent = $modal.find('.inc-swap-from-event'), + fromUser = $fromEvent.attr('data-user'), + fromId = parseInt($fromEvent.attr('data-id')), + fromEvent = self.options.events.filter(function(i){ return i.id === fromId })[0], + fromLinkId = fromEvent.link_id, + fromLinkedEvents, + fromLinked = $modal.find('#toggle-swap-linked-from').prop('checked'), + toLinked = $modal.find('#toggle-swap-linked-to').prop('checked'), + $ul = $modal.find('#inc-event-details-swap'), + users = []; + + // render swap from events + + if (fromLinked && fromLinkId) { + fromLinkedEvents = self.options.events.filter(function(i){ return i.link_id === fromLinkId }); + + $fromEvent + .html(fromEvent.origStartDateObj.format('M/D/YYYY HH:mm') + ' ( ' + fromLinkedEvents.length + ' events ) ') + .attr('data-linked', true); + } else { + $fromEvent + .html(fromEvent.origStartDateObj.format('M/D/YYYY HH:mm') + ' to ' + fromEvent.origEndDateObj.format('M/D/YYYY HH:mm')) + .attr('data-linked', false); + } + + // build swap-to events + + // Get event swap options from API + self._fetchSwapOptions().done(function(data){ + self.options.swapEvents = data.sort(function(a, b){ return a.start > b.start ? 1 : -1 }); + + $ul.html( + $('
  • ') + .append('') + .append( + $('') + .append(function(){ + var options = ''; + + for (var i = 0, item; i < self.options.roles.length; i++) { + item = self.options.roles[i]; + if (!role) { role = item } + options += ''; + } + + return options; + }) + .on('change', function(){ + var role = $(this).val(), + user = $modal.find('#inc-swap-user').val(); + + self._renderSwapOptions($modal, user, role, toLinked); + }) + ) + ) + .append( + $('
  • ') + .append( + $('') + ) + .append( + $('') + .on('click', function(){ + var $this = $(this); + + self._renderSwapOptions($modal, user, role, toLinked); + }) + ) + .append('') + ) + .append( + $('
  • ') + .append('') + .append( + $('
      ') + .html(function(){ + var eventItems = '', + toLinkedEventsMap = {}; + + if (toLinked) { + // render sets of linked events. + + for (var i = 0, item; i < self.options.swapEvents.length; i++) { + item = self.options.swapEvents[i]; + + if(item.link_id) { + if (item.link_id in toLinkedEventsMap) { + toLinkedEventsMap[item.link_id].push(item); + } else { + toLinkedEventsMap[item.link_id] = [item]; + } + } + } + + for (var i = 0, keys = Object.keys(toLinkedEventsMap), item, linkedItem; i < keys.length; i++) { + linkedItem = toLinkedEventsMap[keys[i]]; + item = linkedItem[0]; + if (item.user === user && item.role === role) { + eventItems += '
    • '; + } + } + + } else { + // render singular events. + for (var i = 0, item; i < self.options.swapEvents.length; i++) { + item = self.options.swapEvents[i]; + if (item.user === user && item.role === role) { + eventItems += '
    • '; + } + } + } + + return eventItems ? eventItems : 'No events found matching criteria. (Note: You can not swap with events starting on or before today)'; + }) + ) + ) + }); + }, + createEventModal: function (options) { + if (!options || typeof(options) !== 'object') { + return 'Options required for creating modal'; + } + + var title = options.title || 'Add a new event', + self = this, + $calendar = self.$calendar, + $calBody = $calendar.find('.inc-body'), + $modal = $('
      '), + startDate = $calendar.find('.selecting:first').attr('data-date'), + endDate = $calendar.find('.selecting:last').attr('data-date'), + startTime = $calendar.find('.selecting:first').attr('data-time'), + endTime = self.options.currentView === 'week' ? parseInt(($calendar.find('.selecting:last').attr('data-time')).split(':')[0]) + 1 + ':00' : '24:00'; // for week view, add 1 to the end time. probably should have a better implementation + + $modal + .on('click', function(e){ + e.stopPropagation(); + }) + .css( + { + width: self.options.modalWidth, + top: options.top, + left: options.left + } + ) + .append( + $('

      ') + .text(title) + .append( + $('') + .append( + $('') + .html('') + .click(function(){ + self.removeModal(); + }) + ) + ) + ) + .append( + $('
        ') + .append( + $('
      • ') + .append( + $('
      • ') + .append( + $('
      • ') + .append('') + .append( + $('
        ') + .append(' ') + ) + ) + .append('') + .append( + $(' ') + .on('change', function(){ + self._renderOverrideOptions($modal); + }) + ) + .append( + $('') + .on('change', function(){ + self._renderOverrideOptions($modal); + }) + ) + .append('') + ) + .append( + $('
      • ') + .append('') + .append( + $(' ') + .on('change', function(){ + self._renderOverrideOptions($modal); + }) + ) + .append( + $('') + .on('change', function(){ + self._renderOverrideOptions($modal); + }) + ) + .append('') + ) + .append( + $('
      • ') + .append('') + .append( + $('') + .on('click', function(){ + var $this = $(this), + $modal = $this.parents('.inc-create-event-modal'); + + $modal.attr('data-override', $this.prop('checked') ? true : false); + self._renderOverrideOptions($modal); + }) + ) + .append('') + ) + ) + .append( + $('
      • ') + .append('') + .append( + $('
          ') + .text('No events found matching criteria.') + ) + ) + ) + .append( + $('
          ') + .append('
          ') + .append( + $('') + .on('click', function(){ + var $modal = $(this).parents('.inc-modal'), + event_ids = [], + override; + + //#TODO: Figure out a way to format event specifically for what the api accepts. currently the API accepts seconds vs ms + var evt = { + role: $modal.find('#inc-role').val(), + start: self._createMoment($modal.find('#inc-event-start-date').val() + ' ' + $modal.find('#inc-event-start-time').val()).valueOf(), + end: self._createMoment($modal.find('#inc-event-end-date').val() + ' ' + $modal.find('#inc-event-end-time').val()).valueOf(), + team: self.options.team, + user: $modal.find('#inc-event-user').val() + } + if ($modal.attr('data-override') === "true") { + // override logic goes here + $('#inc-override-event-list').find('input[type="checkbox"]:checked').each(function(){ + event_ids.push(parseInt($(this).attr('data-id'))); + }); + evt.event_ids = event_ids; + override = true; + if (event_ids.length === 0) { + $modal.find('.error-text').text('Please select events to substitute or turn the "substitute" toggle off.'); + return; + } + } + self.saveEvent($modal, evt, override); + }) + ) + .append( + $('') + .on('click', function(){ + self.removeModal(); + }) + ) + ) + .appendTo($calBody); + self.options.onModalOpen($modal, $calendar); + }, + eventDetailsModal: function (e, evt) { + var title = evt.user || 'Event Details', + self = this, + $calendar = self.$calendar, + $calBody = $calendar.find('.inc-body'), + $modal = $('
          '), + $eventItem = $(e.target).hasClass('inc-event') ? $(e.target) : $(e.target).parents('.inc-event'), + $parentRow = $eventItem.parents('.inc-row'); + + $modal + .on('click', function(e){ + e.stopPropagation(); + }) + .css( + { + width: self.options.modalWidth, + top: ($parentRow.position().top + $eventItem.position().top + $eventItem.height() + 320) > $(window).height() - $calendar.offset().top ? $parentRow.position().top + $eventItem.position().top + $eventItem.height() - 310 : $parentRow.position().top + $eventItem.position().top + $eventItem.height(), + left: (e.clientX + self.options.modalWidth) >= $(document).width() ? (e.clientX - $parentRow.offset().left) - self.options.modalWidth : e.clientX - $parentRow.offset().left // place modal on right of click event if there's room, otherwise place on left of click event. + } + ) + .append( + $('

          ') + .html('' + title + '') + .append( + $('') + .append( + $('') + .html('') + .click(function(){ + self._toggleModalSwap($(this)); + }) + ) + .append( + $('') + .html('') + .click(function(){ + self._toggleModalEdit($(this)); + }) + ) + .append( + $('') + .html('') + .click(function(){ + self.removeModal(); + }) + ) + ) + ) + .append( + $('
            ') + .append( + $('
          • ') + .append('') + .append('' + evt.origStartDateObj.format('M/D/YYYY HH:mm') + ' to ' + evt.origEndDateObj.format('M/D/YYYY HH:mm') + '') + ) + .append( + $('
          • ') + .append('') + .append('' + evt.role + '') + ) + .append( + $('
          • ') + .append('') + .append('' + evt.user + '') + ) + ) + .append( + $('
            ') + .append( + $('
              ') + .append( + $('
            • ') + .append('') + .append( + $('
              ') + .append( + $(' ') + ) + ) + ) + .append( + $('
            • ') + .append('') + .append( + $(' ') + ) + .append( + $('') + ) + .append('') + ) + .append( + $('
            • ') + .append('') + .append( + $(' ') + ) + .append( + $('') + ) + .append('') + ) + .append( + $('
            • ') + .append('') + .append( + $('') + .on('click', function(){ + var $this = $(this), + $modal = $this.parents('.inc-event-details-modal'); + + if ($(this).prop('checked')) { + $calendar.find('.inc-event[data-link-id="' + evt.link_id + '"]').attr('data-force-highlighted', true); + } else { + $calendar.find('.inc-event[data-link-id="' + evt.link_id + '"]').attr('data-force-highlighted', false); + $eventItem.attr('data-force-highlighted', true); + } + + self._renderSwapOptions($modal); + }) + ) + .append('') + ) + .append( + $('
            • ') + .append('') + .append('' + evt.origStartDateObj.format('M/D/YYYY HH:mm') + ' to ' + evt.origEndDateObj.format('M/D/YYYY HH:mm') + '') + ) + .append('
              To
              ') + .append( + $('
                ') + ) + ) + .append( + $('
                ') + .append('
                ') + .append( + $('') + .on('click', function(){ + var $modal = $(this).parents('.inc-modal'); + + self.swapEvents($modal); + }) + ) + .append( + $('') + .on('click', function(){ + self.removeModal(); + }) + ) + ) + ) + .appendTo($calBody); + + $calendar.find('.inc-event[data-id="' + evt.id + '"]').attr('data-highlighted', true); + self.options.onModalOpen($modal, $calendar, $eventItem, evt); + self.options.onEventDetailsModalOpen($modal, $calendar, $eventItem, evt); + }, + removeModal: function ($el) { + var $calendar = this.$calendar, + $modal = $el || $calendar.find('.inc-modal'); + + this.$calendar.find('.selecting').removeClass('selecting'); + this.$calendar.find('[data-highlighted="true"]').attr('data-highlighted', false); + this.$calendar.find('[data-force-highlighted="true"]').attr('data-force-highlighted', false); + this.options.onModalClose($modal, $calendar); + this.options.onEventDetailsModalClose($modal, $calendar); + $modal.remove(); + }, + saveEvent: function ($modal, evt, override) { + var self = this, + url = override ? this.options.eventsUrl + '/override' : this.options.eventsUrl; + + // #TODO: convert times to second for API. find a better solution for interacting with api. + evt.start = evt.start / 1000; + evt.end = evt.end / 1000; + + $.ajax({ + type: 'POST', + url: url, + dataType: 'html', + contentType: 'application/json', + data: JSON.stringify(evt) + }).done(function(data){ + evt.start = evt.start * 1000; + evt.end = evt.end * 1000; + if (override) { + self.options.events = self.options.events.filter(function(i){ + // remove self.options.events with the parent ID matching schedule ID + return evt.event_ids.indexOf(i.id) === -1; + }); + var modifiedEvents = JSON.parse(data).map(function(i){ + i.start = i.start * 1000; + i.end = i.end * 1000; + return i; + }); + self.options.events = self.options.events.concat(modifiedEvents); + // @TODO: instead of doing a full refresh, only update changed events + // and rowSlots + self.refreshCalendarEvents(self.options.events, true); + } else { + evt.id = parseInt(data); + self.options.events.push(evt); + self.addCalendarEvents([evt]); + } + self.removeModal(); + }).fail(function(data){ + var error = data.responseText ? JSON.parse(data.responseText).description : "Request Failed"; + $modal.find('.error-text').text(error); + }); + }, + updateEvent: function ($modal, evt) { + var self = this, + events = self.options.events, + url = this.options.eventsUrl + '/' + evt.id, + submitModel = { + role: evt.role, + start: evt.start / 1000, + end: evt.end / 1000, + user: evt.user + } + + // #TODO: convert times to second for API. find a better solution for interacting with api. + $.ajax({ + type: 'PUT', + url: url, + dataType: 'html', + contentType: 'application/json', + data: JSON.stringify(submitModel) + }).done(function(data){ + self.removeEventFromRowSlots(evt); + self.options.events.map(function(item){ + if (item.id === evt.id) { + item.start = evt.start; + item.end = evt.end; + item.role = evt.role; + item.user = evt.user; + item.formatted = false; + item.link_id = null; // break link on individual event swap + delete item.full_name; + } + }); + self.refreshCalendarEvents(); + self.removeModal(); + }).fail(function(data){ + var error = data.responseText ? JSON.parse(data.responseText).description : 'Request Failed'; + $modal.find('.error-text').text(error); + }); + }, + swapEvents: function ($modal) { + var self = this, + events = self.options.events, + url = this.options.eventsUrl + '/swap', + $fromEvent = $modal.find('.inc-swap-from-event'), + fromId = parseInt($fromEvent.attr('data-id')), + fromLinkId = $fromEvent.attr('data-link-id'), + fromLinked = $modal.find('#toggle-swap-linked-from').prop('checked'), + $toEvent = $modal.find('#inc-swap-event-list').find('input[type="radio"]:checked'), + toId = parseInt($toEvent.attr('data-id')), + toLinkId = $toEvent.attr('data-link-id'), + toLinked = $modal.find('#toggle-swap-linked-to').prop('checked'), + fromEvent = events.filter(function(i){ return fromLinked ? i.link_id === fromLinkId : i.id === fromId })[0], + toEvent = self.options.swapEvents.filter(function(i){ return toLinked ? i.link_id === toLinkId : i.id == toId })[0], + submitModel = { + events: [{id: fromLinked ? fromLinkId : fromId, linked: fromLinked === true ? true : false}, {id: toLinked ? toLinkId : toId, linked: toLinked === true ? true : false }] + }; + + $.ajax({ + type: 'POST', + url: url, + dataType: 'html', + contentType: 'application/json', + data: JSON.stringify(submitModel) + }).done(function(data){ + var tmpUser = fromEvent.user, + tmpFullName = fromEvent.full_name; + + events.map(function(i){ + if (fromLinked && i.link_id === fromLinkId) { + i.user = toEvent.user; + i.full_name = toEvent.full_name; + } else if (i.id === fromEvent.id) { + i.user = toEvent.user; + i.full_name = toEvent.full_name; + i.link_id = null; // break link on individual event swap + } else if (toLinked && i.link_id === toLinkId) { + i.user = tmpUser; + i.full_name = tmpFullName; + } else if (i.id === toEvent.id) { + i.user = tmpUser; + i.full_name = tmpFullName; + i.link_id = null; // break link on individual event swap + } + return i; + }); + + self.refreshCalendarEvents(); + self.removeModal(); + }).fail(function(data){ + var error = data.responseText ? JSON.parse(data.responseText).description : 'Request Failed'; + $modal.find('.error-text').text(error); + }); + }, + _toggleModalEdit: function ($el) { + var $modal = $el.parents('.inc-event-details-modal'); + $modal.attr('data-mode', $modal.attr('data-mode') === 'edit' ? 'view' : 'edit'); + }, + _toggleModalSwap: function ($el) { + var $modal = $el.parents('.inc-event-details-modal'); + $modal.attr('data-mode', $modal.attr('data-mode') === 'swap' ? 'view' : 'swap'); + this._renderSwapOptions($modal); + }, + deleteEvent: function ($modal, evt) { + var self = this, + events = self.options.events, + url = this.options.eventsUrl + '/' + evt.id; + + $.ajax({ + type: 'DELETE', + url: url, + dataType: 'html', + contentType: 'application/json' + }).done(function(data){ + self.removeEventFromRowSlots(evt); + self.options.events = self.options.events.filter(function(i){ + // remove self.options.events with the parent ID matching schedule ID + return i.id !== evt.id; + }); + self.refreshCalendarEvents(); + self.removeModal(); + }).fail(function(data){ + var error = data.responseText ? JSON.parse(data.responseText).description : "Request Failed"; + $modal.find('.error-text').text(error); + }); + } + } + + InCalendar.prototype.localStorageService = { + name: 'inc-view-settings', + settings: null, + init: function () { + if (!this.testLocalStorage()) { + console.debug('Browser does not support local storage'); + return; + } + this.settings = JSON.parse(localStorage.getItem(this.name)) || {}; + }, + addSetting: function (setting, val) { + if (setting && val) { + this.settings[setting] = val; + } + this.saveSettings(); + }, + removeSetting: function (setting) { + if (setting) { + delete this.settings[setting]; + } + this.saveSettings(); + }, + saveSettings: function () { + localStorage.setItem(this.name, JSON.stringify(this.settings)); + }, + clearSettings: function () { + localStorage.removeItem(this.name); + }, + testLocalStorage: function () { + try { + localStorage.setItem('inc-test', 'inc-test'); + localStorage.removeItem('inc-test'); + return true; + } catch (e) { + return false; + } + } + } + + $.fn.incalendar = function (options) { + var args = Array.prototype.slice.call(arguments, 1); + + if (options === undefined || typeof options === 'object') { + return this.each(function () { + if (!$.data(this, pluginName)) { + $.data(this, pluginName, new InCalendar(this, options)); + } + }); + } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') { + var call; + this.each(function () { + var pluginInstance = $.data(this, pluginName); + if (pluginInstance instanceof InCalendar && typeof pluginInstance[options] === 'function') { + call = pluginInstance[options].apply(pluginInstance, args); + } + }); + + return call !== undefined ? call : this; + } + } + +}(jQuery, window, document)); diff --git a/src/oncall/ui/static/js/jquery-2.1.4.min.js b/src/oncall/ui/static/js/jquery-2.1.4.min.js new file mode 100644 index 0000000..49990d6 --- /dev/null +++ b/src/oncall/ui/static/js/jquery-2.1.4.min.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.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;++db;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.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="",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.lengthx",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]*)\/>/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*\s*$/g,ia={option:[1,""],thead:[1,"

  • ","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_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>")+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>");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("