From: Chris Koeritz Date: Mon, 20 May 2019 19:22:41 +0000 (-0400) Subject: Merge branch 'master' of feistymeow.org:feisty_meow X-Git-Tag: 2.140.116~1 X-Git-Url: https://feistymeow.org/gitweb/?p=feisty_meow.git;a=commitdiff_plain;h=4bee7d64868d89a1a0506136f284d3f91aeabc24;hp=ba4be10e676ba2bad7359044149298f986c2e6bb Merge branch 'master' of feistymeow.org:feisty_meow fixing weird issues in raw_synch state --- diff --git a/.gitignore b/.gitignore index 60e170a5..022cb9f5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ *~ *# *.bak -__build_configuration.h *.class .DS_Store *.log diff --git a/documentation/feisty_meow_dox.config b/documentation/feisty_meow_dox.config index 4c0f610d..1566a350 100644 --- a/documentation/feisty_meow_dox.config +++ b/documentation/feisty_meow_dox.config @@ -23,7 +23,7 @@ PROJECT_NAME = "feisty meow concerns codebase" # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 2.108 +PROJECT_NUMBER = 2.140 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/documentation/google_apis/google_apis_and_credentials.odt b/documentation/google_apis/google_apis_and_credentials.odt old mode 100755 new mode 100644 diff --git a/documentation/google_apis/google_apis_and_credentials.pdf b/documentation/google_apis/google_apis_and_credentials.pdf old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.001 b/experiments/vnc/dot.vnc/xstartup.001 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.002 b/experiments/vnc/dot.vnc/xstartup.002 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.003 b/experiments/vnc/dot.vnc/xstartup.003 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.004 b/experiments/vnc/dot.vnc/xstartup.004 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.005 b/experiments/vnc/dot.vnc/xstartup.005 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.006 b/experiments/vnc/dot.vnc/xstartup.006 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.007 b/experiments/vnc/dot.vnc/xstartup.007 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.008 b/experiments/vnc/dot.vnc/xstartup.008 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.009 b/experiments/vnc/dot.vnc/xstartup.009 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.010 b/experiments/vnc/dot.vnc/xstartup.010 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.011 b/experiments/vnc/dot.vnc/xstartup.011 old mode 100755 new mode 100644 diff --git a/experiments/vnc/dot.vnc/xstartup.012 b/experiments/vnc/dot.vnc/xstartup.012 old mode 100755 new mode 100644 diff --git a/experiments/vnc/init.d/vncserver.001 b/experiments/vnc/init.d/vncserver.001 old mode 100755 new mode 100644 diff --git a/experiments/vnc/init.d/vncserver.002 b/experiments/vnc/init.d/vncserver.002 old mode 100755 new mode 100644 diff --git a/experiments/vnc/init.d/vncserver.003 b/experiments/vnc/init.d/vncserver.003 old mode 100755 new mode 100644 diff --git a/experiments/vnc/init.d/vncserver.004 b/experiments/vnc/init.d/vncserver.004 old mode 100755 new mode 100644 diff --git a/experiments/vnc/init.d/vncserver.005 b/experiments/vnc/init.d/vncserver.005 old mode 100755 new mode 100644 diff --git a/graphiq/.settings/language.settings.xml b/graphiq/.settings/language.settings.xml index c6570713..0fb11ece 100644 --- a/graphiq/.settings/language.settings.xml +++ b/graphiq/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/infobase/configuration/cron/aa_cron_defaults.crontab b/infobase/configuration/cron/aa_cron_defaults.crontab index c8ff3ebe..a6ba6849 100644 --- a/infobase/configuration/cron/aa_cron_defaults.crontab +++ b/infobase/configuration/cron/aa_cron_defaults.crontab @@ -62,10 +62,5 @@ FEISTY_MEOW_APEX=/opt/feistymeow.org/feisty_meow # below is a live example which we almost always include, so it's embedded # here for convenience. -#[nechung fortune] -# runs every minute and recreates a fortune for thunderbird signature. -# a lot of the detail below is to get the feisty meow environment loaded for -# the new_sig command. -* * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; perl $FEISTY_MEOW_SCRIPTS/text/new_sig.pl) &>>/tmp/${CRONUSER}-cron-nechung_fortune.log - +############## diff --git a/infobase/configuration/cron/backup_git_account.crontab b/infobase/configuration/cron/backup_git_account.crontab index a08e239a..ae28d562 100644 --- a/infobase/configuration/cron/backup_git_account.crontab +++ b/infobase/configuration/cron/backup_git_account.crontab @@ -1,5 +1,9 @@ +############## + #[backup git account] # archives the whole ~git folder with all account databases into a compressed tar file. 34 20 * * 5 tar -czf /z/stuffing/archives/git_archive_$(date +"\%Y_\%m_\%d_\%H\%M_\%S" | tr -d '/\n/').tar.gz /home/git &>>/tmp/${CRONUSER}-cron-backup_git_account.log +############## + diff --git a/infobase/configuration/cron/backup_maildir.crontab b/infobase/configuration/cron/backup_maildir.crontab index 5e9e501d..a8af8d69 100644 --- a/infobase/configuration/cron/backup_maildir.crontab +++ b/infobase/configuration/cron/backup_maildir.crontab @@ -1,5 +1,9 @@ +############## + #[backup maildir] # backs up the maildir folder for fred bi-monthly. 8 4 3,14 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; tar -czf /z/stuffing/archives/maildir_backup_$(date_stringer).tar.gz $HOME/Maildir) &>/tmp/${CRONUSER}-cron-backup_maildir.log +############## + diff --git a/infobase/configuration/cron/backup_mailman.crontab b/infobase/configuration/cron/backup_mailman.crontab index 4eade1b1..3a8b4831 100644 --- a/infobase/configuration/cron/backup_mailman.crontab +++ b/infobase/configuration/cron/backup_mailman.crontab @@ -1,6 +1,10 @@ +############## + #[backup_mailman_archives] # creates a monthly backup of all the mailman list server's archives. 14 2 28 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; tar -czf /z/stuffing/archives/mailman_backup_$(hostname)_$(date_stringer).tar.gz /var/lib/mailman ) &>/tmp/${CRONUSER}-cron-mailman_backup.log +############## + diff --git a/infobase/configuration/cron/backup_mysql_databases.crontab b/infobase/configuration/cron/backup_mysql_databases.crontab index 4f9c3b10..be5ffcf9 100644 --- a/infobase/configuration/cron/backup_mysql_databases.crontab +++ b/infobase/configuration/cron/backup_mysql_databases.crontab @@ -1,5 +1,9 @@ +############## + #[backup mysql databases] # backs up all of our mysql databases on a weekly basis. 28 4 * * 2 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; mysqldump -u root '-pPASSWORD' --all-databases | gzip > /z/stuffing/archives/database_backup_$(hostname)_$(date_stringer).sql.gz) &>>/tmp/${CRONUSER}-cron-backup_mysql_databases.log +############## + diff --git a/infobase/configuration/cron/backup_photo_albums.crontab b/infobase/configuration/cron/backup_photo_albums.crontab index 8a51b931..b93e56ff 100644 --- a/infobase/configuration/cron/backup_photo_albums.crontab +++ b/infobase/configuration/cron/backup_photo_albums.crontab @@ -1,5 +1,9 @@ +############## + #[backup photo albums] # back up the pictures in coppermine gallery every month. 34 6 4 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; tar -czf /z/stuffing/archives/photo_albums_backup_$(date_stringer).tar.gz /home/albums ; refred) &>>/tmp/${CRONUSER}-cron-backup_photo_albums.log +############## + diff --git a/infobase/configuration/cron/backup_serene_system.crontab b/infobase/configuration/cron/backup_serene_system.crontab index 7742731d..e6ae20ed 100644 --- a/infobase/configuration/cron/backup_serene_system.crontab +++ b/infobase/configuration/cron/backup_serene_system.crontab @@ -1,5 +1,9 @@ +############## + #[backup serene system] # backs up config files and important parts of home directories to off-machine storage. 14 2 * * */7 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/archival/serene_backer_upper.sh) &>>/tmp/${CRONUSER}-cron-backup_serene_system.log +############## + diff --git a/infobase/configuration/cron/backup_trac.crontab b/infobase/configuration/cron/backup_trac.crontab index 8fcd8b24..2d4f5def 100644 --- a/infobase/configuration/cron/backup_trac.crontab +++ b/infobase/configuration/cron/backup_trac.crontab @@ -1,5 +1,9 @@ +############## + #[backup trac] # backs up trac every week. 28 7 * * 2 bash $FEISTY_MEOW_APEX/scripts/archival/backup_trac.sh /home/trac /z/stuffing/archives &>>/tmp/${CRONUSER}-cron-backup_trac.log +############## + diff --git a/infobase/configuration/cron/bookmarks_builder.crontab b/infobase/configuration/cron/bookmarks_builder.crontab index 29f4fde3..9f54bb87 100644 --- a/infobase/configuration/cron/bookmarks_builder.crontab +++ b/infobase/configuration/cron/bookmarks_builder.crontab @@ -1,5 +1,9 @@ +############## + #[bookmarks builder] # regenerate the bookmarks pages. 24 10 * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/bookmarks/create_marks.sh ) &>>/tmp/${CRONUSER}-cron-bookmarks_builder.log +############## + diff --git a/infobase/configuration/cron/chkrootkit.crontab b/infobase/configuration/cron/chkrootkit.crontab index 1087ce00..69e3b76e 100644 --- a/infobase/configuration/cron/chkrootkit.crontab +++ b/infobase/configuration/cron/chkrootkit.crontab @@ -1,7 +1,11 @@ +############## + #[chkrootkit] # this runs chkrootkit to demonstrate a bug in the vm kernel currently # provided by...? hmmm: who's the vendor? 3 * * * * (/usr/sbin/chkrootkit -q &>/var/www/rootkit_report_quiet.txt ) &>>/tmp/${CRONUSER}-cron-chkrootkit.log 4 * * * * (/usr/sbin/chkrootkit -x &>/var/www/rootkit_report_expert.txt ) &>>/tmp/${CRONUSER}-cron-chkrootkit.log +############## + diff --git a/infobase/configuration/cron/doxygen.crontab b/infobase/configuration/cron/doxygen.crontab index 035ee8e6..02770c81 100644 --- a/infobase/configuration/cron/doxygen.crontab +++ b/infobase/configuration/cron/doxygen.crontab @@ -1,6 +1,10 @@ +############## + #[doxygen] # update the feisty meow documentation once on each of tuesday, thursday and saturday. 20 4 * * 2,4,6 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; cd $FEISTY_MEOW_APEX/documentation; make) &>>/tmp/${CRONUSER}-cron-doxygen.log +############## + diff --git a/infobase/configuration/cron/emit_crontab.crontab b/infobase/configuration/cron/emit_crontab.crontab index 152dd4b0..99c15e3e 100644 --- a/infobase/configuration/cron/emit_crontab.crontab +++ b/infobase/configuration/cron/emit_crontab.crontab @@ -1,5 +1,9 @@ +############## + #[emit crontab] # meta-operation to backup the crontab file using cron itself. 28 */8 * * * crontab -l >$HOME/$(hostname).$CRONUSER.crontab +############## + diff --git a/infobase/configuration/cron/letsencrypt_renewal.crontab b/infobase/configuration/cron/letsencrypt_renewal.crontab index 4a343de0..450f08b2 100644 --- a/infobase/configuration/cron/letsencrypt_renewal.crontab +++ b/infobase/configuration/cron/letsencrypt_renewal.crontab @@ -1,5 +1,9 @@ +############## + #[letsencrypt renewal] # run the letsencrypt certificate renewal process every 4 hours. 37 */4 * * * letsencrypt renew &>>/tmp/${CRONUSER}-cron-letsencrypt_renewal.log +############## + diff --git a/infobase/configuration/cron/mailman_attribute_fix.crontab b/infobase/configuration/cron/mailman_attribute_fix.crontab index 72ea73e8..b0048a66 100644 --- a/infobase/configuration/cron/mailman_attribute_fix.crontab +++ b/infobase/configuration/cron/mailman_attribute_fix.crontab @@ -1,5 +1,9 @@ +############## + #[mailman attribute fix] # fix the mailman log files so that an obnoxious bug doesn't happen on the mailman web site. 23 5 * * * chmod -R 02775 /var/lib/mailman/logs &>/dev/null +############## + diff --git a/infobase/configuration/cron/nechung_fortune.crontab b/infobase/configuration/cron/nechung_fortune.crontab index 8a4feee5..c8601f16 100644 --- a/infobase/configuration/cron/nechung_fortune.crontab +++ b/infobase/configuration/cron/nechung_fortune.crontab @@ -1,7 +1,11 @@ +############## + #[nechung fortune] # runs every minute and recreates a fortune for thunderbird signature. # a lot of the detail below is to get the feisty meow environment loaded for # the new_sig command. * * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; perl $FEISTY_MEOW_SCRIPTS/text/new_sig.pl) &>>/tmp/${CRONUSER}-cron-nechung_fortune.log +############## + diff --git a/infobase/configuration/cron/opensim_restart.crontab b/infobase/configuration/cron/opensim_restart.crontab index e3a64113..d6f56391 100644 --- a/infobase/configuration/cron/opensim_restart.crontab +++ b/infobase/configuration/cron/opensim_restart.crontab @@ -1,5 +1,9 @@ +############## + #[opensim restart] # ensure opensim is started if we can't detect it as running. */5 * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/opensim/maybe_restart_opensim.sh) &>>/tmp/${CRONUSER}-cron-opensim_restart.log +############## + diff --git a/infobase/configuration/cron/pack_feisty_for_web.crontab b/infobase/configuration/cron/pack_feisty_for_web.crontab index 9b5130e7..1913bd24 100644 --- a/infobase/configuration/cron/pack_feisty_for_web.crontab +++ b/infobase/configuration/cron/pack_feisty_for_web.crontab @@ -1,5 +1,9 @@ +############## + #[pack feisty for web] # this packs up our source code distributions every 8 days. 16 22 */8 * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/archival/pack_feisty_meow.sh) &>>/tmp/${CRONUSER}-cron-pack_feisty_for_web.log +############## + diff --git a/infobase/configuration/cron/periodic_reboot.crontab b/infobase/configuration/cron/periodic_reboot.crontab new file mode 100644 index 00000000..a8d15079 --- /dev/null +++ b/infobase/configuration/cron/periodic_reboot.crontab @@ -0,0 +1,11 @@ + +############## + +# [periodic reboot] +# invigorates a shaky machine that cannot run longer than a certain time period. +# version below reboots every two days, somewhat. +20 4 * * 0,2,4,6 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; sep; echo periodic reboot running at $(date) ; sep; sync; sleep 2; /sbin/reboot) &>>$HOME/${CRONUSER}-cron-periodic_reboot.log + +############## + + diff --git a/infobase/configuration/cron/process_check.crontab b/infobase/configuration/cron/process_check.crontab index 39e1ed75..3fde27b6 100644 --- a/infobase/configuration/cron/process_check.crontab +++ b/infobase/configuration/cron/process_check.crontab @@ -1,5 +1,9 @@ +############## + #[process check] # a crontab for periodically dumping the process state. * * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/processes/show_hot_ones.sh) &>>/tmp/${CRONUSER}-cron-active_processes.log +############## + diff --git a/infobase/configuration/cron/random_sound.crontab b/infobase/configuration/cron/random_sound.crontab index fe1e07b5..a61613b9 100644 --- a/infobase/configuration/cron/random_sound.crontab +++ b/infobase/configuration/cron/random_sound.crontab @@ -1,4 +1,8 @@ +############## + #[random sound] * * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/multimedia/randomly_play.sh) &>>/tmp/${CRONUSER}-cron-random_sound.log +############## + diff --git a/infobase/configuration/cron/snarf_linux_configuration.crontab b/infobase/configuration/cron/snarf_linux_configuration.crontab index bf7dcc3e..7b61de29 100644 --- a/infobase/configuration/cron/snarf_linux_configuration.crontab +++ b/infobase/configuration/cron/snarf_linux_configuration.crontab @@ -1,5 +1,9 @@ +############## + #[snarf linux configuration] # do a backup of the linux configuration files once a week. 28 7 * * 4 (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; cd /z/stuffing/archives; perl $FEISTY_MEOW_SCRIPTS/archival/snarf_linux_config.pl) &>>/tmp/${CRONUSER}-cron-snarf_linux_configuration.log +############## + diff --git a/infobase/configuration/cron/synch_and_swim_downstream.crontab b/infobase/configuration/cron/synch_and_swim_downstream.crontab index 222d7c6f..196d241f 100644 --- a/infobase/configuration/cron/synch_and_swim_downstream.crontab +++ b/infobase/configuration/cron/synch_and_swim_downstream.crontab @@ -1,4 +1,6 @@ +############## + #[synch and swim downstream] # updates local code repositories from master versions before uploading any changes to downstream # repositories, such as sourceforge or github. the uploading process (which we think of as sending @@ -6,3 +8,5 @@ # our makefiles. that's why the code below relies on the top-level makefile in home. 14 * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; cd $HOME ; bash $FEISTY_MEOW_SCRIPTS/rev_control/rgetem.sh ; make ) &>>/tmp/${CRONUSER}-cron-synch_and_swim_downstream.log +############## + diff --git a/infobase/configuration/cron/tell_zooty_our_ip.crontab b/infobase/configuration/cron/tell_zooty_our_ip.crontab index bf625c30..931023a1 100644 --- a/infobase/configuration/cron/tell_zooty_our_ip.crontab +++ b/infobase/configuration/cron/tell_zooty_our_ip.crontab @@ -1,5 +1,9 @@ +############## + #[tell zooty our ip] # firewall host only--inform serene/zooty of our home IP address to enable back-connections. 0,14,28,42,56 * * * * (bash $FEISTY_MEOW_APEX/scripts/security/tell_zooty_our_ip.sh serene.feistymeow.org fred $CRONUSER ) &>>/tmp/${CRONUSER}-cron-tell_zooty_our_ip.log +############## + diff --git a/infobase/configuration/cron/time_synch.crontab b/infobase/configuration/cron/time_synch.crontab index f5927062..7b5fd6fe 100644 --- a/infobase/configuration/cron/time_synch.crontab +++ b/infobase/configuration/cron/time_synch.crontab @@ -1,16 +1,18 @@ -#[time synch] +############## -# standard to synch to local machine. +#[time synch] -############## +LOCAL_TIME_SERVER=greendragon -# synchronize time/date with our nearest time server. -*/4 * * * * /usr/sbin/ntpdate greendragon &>>/tmp/${CRONUSER}-cron-time_synch.log +# standard version synchs to a local machine. can be used on a network +# to get time from central host. +*/4 * * * * /usr/sbin/ntpdate $LOCAL_TIME_SERVER &>>/tmp/${CRONUSER}-cron-time_synch.log ############## -# one machine on the network uses this version, to synch externally. +# the central host machine uses this version, to synch time externally. 0 0,4,8,12,16,20 * * * /usr/bin/rdate -s time.nist.gov &>>/tmp/${CRONUSER}-cron-time_synch.log -#hmmm: is above still correct? + +############## diff --git a/infobase/configuration/cron/update_apt_based_linux.crontab b/infobase/configuration/cron/update_apt_based_linux.crontab index cb6568c8..2e2ae02e 100644 --- a/infobase/configuration/cron/update_apt_based_linux.crontab +++ b/infobase/configuration/cron/update_apt_based_linux.crontab @@ -1,7 +1,10 @@ +############## #[update apt based linux crontab] # does a daily update of an apt-based linux box at pi o'clock. 14 3 * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/system/naive_system_updater.sh) &>>/tmp/${CRONUSER}-cron-update_aptbased_linux.log +############## + diff --git a/infobase/configuration/cron/update_system_time.crontab b/infobase/configuration/cron/update_system_time.crontab new file mode 100644 index 00000000..78c646b1 --- /dev/null +++ b/infobase/configuration/cron/update_system_time.crontab @@ -0,0 +1,10 @@ + +############## + +#[update_system_time] +# synchronize the time with a real ntp server. +42 0,4,8,12,16,20 * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_APEX/scripts/system/update_system_time.sh ) &>/tmp/${CRONUSER}-cron-update_system_time.log + +############## + + diff --git a/infobase/configuration/cron/uptime_report.crontab b/infobase/configuration/cron/uptime_report.crontab index e1b31a67..3605e648 100644 --- a/infobase/configuration/cron/uptime_report.crontab +++ b/infobase/configuration/cron/uptime_report.crontab @@ -1,5 +1,9 @@ +############## + #[uptime report] # the script writes the current time and current uptime to the log file. 0 * * * * (source $FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh; bash $FEISTY_MEOW_SCRIPTS/system/write_uptime_report.sh) &>>/tmp/${CRONUSER}-cron-uptime_report.log +############## + diff --git a/infobase/configuration/cron/web_group_perm_fix.crontab b/infobase/configuration/cron/web_group_perm_fix.crontab index a46493ef..c3453d2f 100644 --- a/infobase/configuration/cron/web_group_perm_fix.crontab +++ b/infobase/configuration/cron/web_group_perm_fix.crontab @@ -1,5 +1,9 @@ +############## + #[web group perm fix] # fix the web directories for group access. 0 * * * * chmod -R g+w /var/www &>/dev/null +############## + diff --git a/infobase/configuration/mutt_email/dot.muttrc b/infobase/configuration/mutt_email/dot.muttrc new file mode 100644 index 00000000..df54bc76 --- /dev/null +++ b/infobase/configuration/mutt_email/dot.muttrc @@ -0,0 +1,10 @@ + +set mbox_type=Maildir + +set folder="~/Maildir" +set mbox="~/Maildir" +set spoolfile="~/Maildir" + + + + diff --git a/infobase/configuration/vim/dot.vimrc b/infobase/configuration/vim/dot.vimrc index 7e861cdf..550e546e 100644 --- a/infobase/configuration/vim/dot.vimrc +++ b/infobase/configuration/vim/dot.vimrc @@ -8,7 +8,7 @@ " preserve the default 50 lines for a paste to another file. this makes all registers go up to " this size though, so if you save to a lot of different ones, you will use more space in your " viminfo file. -set viminfo='100,<1000,s10,h +set viminfo='100,<1000,s100,h " tells vim not to make a backup of the file before editing it; this is living dangerously. set nobk diff --git a/infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt b/infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt new file mode 100644 index 00000000..c95e7bc6 Binary files /dev/null and b/infobase/document_templates/fallout76_vendor_record-pre_bank_merge.odt differ diff --git a/infobase/document_templates/fallout76_vendor_record.odt b/infobase/document_templates/fallout76_vendor_record.odt new file mode 100644 index 00000000..fc747d4d Binary files /dev/null and b/infobase/document_templates/fallout76_vendor_record.odt differ diff --git a/infobase/fortunes.dat b/infobase/fortunes.dat index 3a9653fc..878d403f 100644 --- a/infobase/fortunes.dat +++ b/infobase/fortunes.dat @@ -17813,7 +17813,7 @@ for while we exist death is not present, and when death is present we no longer exist. -- Epicurus ~ -Singing and danching are the voice of dharma. -- Hakuin +Singing and dancing are the voice of dharma. -- Hakuin ~ All great truths begin as blasphemies. -- George Bernard Shaw ~ @@ -42841,8 +42841,8 @@ seeker wishing to follow her lead. In her own words, As promised, she continuously appears to lead and inspire the faithful in dreams, visions, and real life. As well, her human reincarnations ceaselessly return to the world, guiding others in whatever capacity is needed. - -- from "The Life and Visions of Yeshé Tsogyal", by Drimé Kunga and Yeshé - Tsogyal Translated by Chönyi Drolma, published by Shambhala Publications + -- from "The Life and Visions of Yeshe Tsogyal", by Drime Kunga and Yeshe + Tsogyal, translated by Chönyi Drolma, published by Shambhala Publications ~ It is impossible to conceive how many beings, from beginningless time in samsara, have been related to us--as parents, as enemies, or as people @@ -42959,7 +42959,7 @@ Without going anywhere, you'll arrive at the Buddha's ground. Without looking at anything, you'll see dharmakaya. Without achieving anything, your aim will be spontaneously accomplished. -- from "The Hundred Thousand Songs of Milarepa", By Tsangnyon Heruka, - Translated by Christopher Stagg, published by Shambhala Publications + translated by Christopher Stagg, published by Shambhala Publications ~ Trying to find the pain in life is the renunciation of hinayana. Trying to find the ambition in life, trying to reach higher goals, is the @@ -43334,7 +43334,7 @@ Can, through the teachings, enhance the purifying path And, unburdened by avoidance or indulgence, adorn the mind!   -- Patrul Rinpoche, from "Beyond the Ordinary Mind: Dzogchen, Rimé, and the - Path of Perfect Wisdom", Translated by Adam Pearcey, published by + Path of Perfect Wisdom", translated by Adam Pearcey, published by Shambhala Publications ~ Our endeavor is not religious, but rather a test of what we as a human @@ -43604,7 +43604,7 @@ In truth, these are not two different things.   -- Maitreya, Jamgon Kongtrul Lodro Taye, Khenpo Tsultrim Gyamtso, and Asanga in "Buddha Nature: The Mahayana Uttaratantra Shastra with Commentary", - Translated by Rosemarie Fuchs, published by Shambhala Publications + translated by Rosemarie Fuchs, published by Shambhala Publications ~ Like vines that wrap themselves round sandal trees, People who keep company with holy ones @@ -43618,20 +43618,20 @@ So keep the company of holy beings And from bad teachers strive to keep your distance. -- Longchenpa, in "Finding Rest in the Nature of the Mind, The Trilogy of - Rest, Volume 1",  Translated by Padmakara Translation Group, published by + Rest, Volume 1", translated by Padmakara Translation Group, published by Shambhala Publications ~ -Thinking about the self as composed of “aggregates” (Skt. skandha) can +Thinking about the self as composed of "aggregates" (Skt. skandha) can help us reflect on our personal identity in new ways. Generally, we attribute characteristics to our personal identity, feeling that it is solid, permanent, and real. But here, describing the self as being composed of aggregates can help us see ourselves more accurately. The word skandha can be translated -literally as “heap.” This definition, when applied to ourselves, can help +literally as "heap." This definition, when applied to ourselves, can help us see that we do not have a cohesive, real, and solid self. We are just a heap of stuff — flesh, blood, veins, nerves, bones, hair, cartilage, and so on. When we sort through this heap, what are we actually? None of the -elements of the heap is actually “me.” We are a mere mishmash of material -conditions that we have identified with and labeled “I.” +elements of the heap is actually "me." We are a mere mishmash of material +conditions that we have identified with and labeled "I." -- Anyen Rinpoche and Allison Choying Zangmo, in "Stop Biting the Tail You're Chasing: Using Buddhist Mind Training to Free Yourself from Painful Emotional Patterns" published by Shambhala Publications @@ -43649,4 +43649,218 @@ for the ways in which your tradition has come down to you with so much care.   -- Elizabeth Mattis Namgyel, from "The Logic of Faith: The Buddhist Approach to Finding Certainty Beyond Belief and Doubt", published by Shambhala Publications +~ +If we are attached to a thought, it becomes an obstacle to the development of +our meditation or samadhi. The remedies for reducing attachments to thoughts +are called "pacification" and "taming the mind," which involve what to +do when we are unwilling to let go of thoughts. Normally we regard thoughts, +and especially certain thoughts, as either particularly important or +particularly pleasant and therefore worthwhile or entertaining. However, in +meditation, thoughts are nothing other than impediments to what we are trying +to do. So, when we are practicing meditation, we have to maintain the +attitude, "This is my time to meditate and now I am not trying to think +thoughts. If I let myself think, I am wasting this time I have to practice." +  -- Khenchen Thrangu, from "The Mahamudra Lineage Prayer: A Guide to + Practice", published by Shambhala Publications +~ +The arrogant mind never stops searching for identity, and this identity always +defines itself through attributes: "the beautiful one," "the smart one," +"the creative one," "the successful one." Sometimes we take this further by +creating a more elaborate persona: "the rebel," "the maverick," "the suffering +artist," "the fearless leader." We can hold onto these labels on a "good" day. +But when we feel insecure about our attributes, or our lack thereof, we start +to wonder how to define ourselves; we wonder who it is we really are. +Regardless of whether we’re having a good day or a low self-esteem day, the +point is, we haven’t found a way to relax, to be natural, unself-conscious. +We don’t know how to take our seat in ordinariness and feel comfortable in +our own skin. We’re always searching for something to be.    +  -- Dzigar Kongtrul, from "Light Comes Through: Buddhist Teachings on + Awakening to Our Natural Intelligence", published by Shambhala + Publications +~ +VOTE DEMOCRAT 2018 +It's time for the adults to take back the wheel +WE KNOW OUR ABCS... +Apple pie, Baseball, Compassion, & Science + -- fred t. hamster +~ +Elevate your experience and remain wide-open like the sky. +Expand your mindfulness and remain pervasive like the earth. +Steady your attention and remain unshakable like a mountain. +Brighten your awareness and remain shining like a flame. +Clear your thought-free wakefulness and remain lucid like a crystal.   + -- Dakpo Tashi Namgyal, "Clarifying the Natural State", from "Jewels of + Enlightenment: Wisdom Teachings from the Great Tibetan Masters", compiled + and translated by Erik Pema Kunsang, published by Shambhala Publications +~ +Meditation, by nature, is like tasting nectar. + +To meditate on the meaning of what you have heard and contemplated +pacifies all the illnesses of negative emotions. + +You will cross the ocean of conditioned existence and arrive at the +far shore--the heart essence. + +Please meditate in the forest from now on. + + -- Longchenpa, from "The Life of Longchenpa: The Omniscient Dharma King of + the Vast Expanse", Compiled and edited by Jampa Mackenzie Stewart, published + by Shambhala Publications +~ +Compassion has no hierarchy of worthy and unworthy suffering; it makes no +distinctions between the deserving and the undeserving. Wherever there is +suffering, there is a need for compassion. Finding compassion for those who +cause pain is an ongoing practice requiring remarkable patience and +perseverance. It is a difficult journey, but the path of bitterness and +division is far more painful. The path of compassion begins with your +willingness to soften and stay present in all the moments when you are prone +to recoil and flinch. You learn to open your eyes and heart in all the places +you have been blinded by fear or rage. You begin to dismantle the boundaries +that have too long divided you from others. + -- "All the Rage--Buddhist Wisdom on Anger and Acceptance", Edited by Andrea + Miller and the Editors of the Shambhala Sun, published by Shambhala + Publications +~ +Each and every being in this world, including animals and all other beings of +the six realms, wants to be happy. Nobody wants to suffer. Even through we +have no wisdom or clairvoyance, we can see that everyone in this world is +afflicted with disturbing emotions and delusion based on their karma—not only +we humans, but all beings in the six realms. Even a tiny little ant is +constantly afflicted by the five poisons, and it’s impossible for such a being +to generate bodhichitta, faith, devotion, or pure perception for an instant. +It can’t even conceive of a path to liberation or ultimate happiness. Due to +karma accumulated throughout beginningless lifetimes, all sentient beings +experience various kinds of sorrow and happiness. Yet this isn’t just random, +for all that we experience is the result of our past actions. +##--#Penor Rinpoche, from "An Ocean of Blessings: Heart Teachings of Drubwang + Penor Rinpoche", translated by Ani Jinba Palmo, published by Shambhala + Publications +~ + Dreaming is a dynamic process. Unlike the static images of film that we +use as a metaphor, the images of a dream are fluid: they move, beings talk, +sounds vibrate, sensation is vivid. The content of dream is formed by the +mind, but the basis of the vitality and animation of the dream is the prana. +The literal translation of the Tibetan word for prana, lung, is "wind," but +it is more descriptive to call it the vital wind force. + Prana is the foundational energy of all experience, of all life. + -- Tenzin Wangyal Rinpoche and edited by Mark Dahlby, from "The Tibetan + Yogas of Dream and Sleep", published by Shambhala Publications +~ +Do they know this kid likes his chemistry set a little too much? + -- The Sopranos +~ +The Nine Expressions of Dance + +The upper part of one's body should have the demeanor of a lion. +The waist should maintain the demeanor of elegance. +The wrists and ankles should maintain a demeanor of dexterity. +The thigh muscles should maintain a relaxed demeanor. +The blood should maintain a fiery red demeanor. +The countenance should maintain a handsome demeanor. +The movements should maintain a slow demeanor. +The knees should maintain a supple demeanor. +The feet and head should maintain a demeanor of happiness. +And overall [the dancer] should maintain a demeanor +That is both heroic and magnificent.   + + -- by Konchog Lhadrepa and Charlotte Davis, from "The Art of Awakening: + A User's Guide to Tibetan Buddhist Art and Practice", published by + Shambhala Publications +~ +Advice to Myself + + Stop living a false and empty life. + Drop those deceptions of your own mind + And endless projects that you don't need! + Don't make your head spin with the burden + Of strings of ideas that never come true + And endless distracting activities-- + They're just waves on water. + Just keep quiet. + + -- Patrul Rinpoche, from "Enlightened Vagabond: The Life and Teachings of + Patrul Rinpoche", By Matthieu Ricard, Edited by Constance Wilkinson, + published by Shambhala Publications +~ +Like the vast expanse of the ocean, birthplaces of other beings are vast and +multitudinous. Just as the yoke has only a single opening, human birth is +small in extent and few in number. Just as the tortoise rises up only once +every hundred years, so it is rare to accumulate the karma that results in +human birth. Just as the tortoise is blind, so one's accumulated karma is +feeble. Just as the yoke is tossed about in every direction by the wind, so +there are many adverse forces obstructing the coincidence of conditions needed +for human birth. + -- Ngorchen Konchog Lhundrub, from "Three Visions: Fundamental Teachings of + the Sakya Lineage of Tibetan Buddhism", translated by Lobsang Dagpa and + Jay Goldberg, published by Shambhala Publications +~ + The actual nature of things is inconceivable and inexpressible. Yet, for +those fortunate individuals who seek to penetrate the profound meaning of +dharmata, I shall offer here a few words by way of illustration. + What we call the essence of mind is the actual face of unconditioned pure +awareness, recognized through receiving the guru's blessings and +instructions. If you wonder what this is like, it is empty in its essence, +beyond conceptual reference; it is cognizant by nature, spontaneously present; +and it is all-pervasive and unobstructed in its compassionate energy. This is +the pure awareness (rigpa) in which the three kayas are inseparable. + -- from "Beyond the Ordinary Mind: Dzogchen, Rime, and the Path of + Perfect Wisdom", translated by Adam Pearcey, published by Shambhala Publications +~ +Being attached to your ordinary dualistic considerations is a pitfall in your +way of living. No matter what appears, by applying yourself without being at +all distracted from the perspective and meditation, this unobstructed, +powerful way of life will come about with the six senses naturally relaxed. +Apply yourself without contradicting this. + -- Longchenpa, from "You Are the Eyes of the World", translated by Kennard + Lipman and Merrill Peterson, published by Shambhala Publications +~ +Kyema! +Hear me, young and faithful girl! +I, the Lotus-Born, will preach the Dharma in the land of ogres. +My flawless adamantine form, surpassing change, +Is not to be compared with that of beings racked by ills. +The country of Tibet I filled with Dharma, within the earth and on it. +If you are strong in practice and instruction, +No shortage of the Dharma will there be. + -- Yeshe Tsogyal, from "Lady of the Lotus-Born: The Life and Enlightenment + of Yeshe Tsogyal", by Gyalwa Changchub and Namkhai Nyingpo, translated by + Padmakara Translation Group, published by Shambhala Publications +~ +Ultimately, spiritual and worldly values are totally contradictory; this is +something we simply have to accept. In the materialistic world, being "rich" +means that you own plenty of property, run various businesses, and have a +great deal of money; whereas the spiritual world defines being "rich" as +perfect contentment. From a spiritual point of view, we are rich when we no +longer torture our minds with thoughts about everything we lack.   + -- Dzongsar Jamyang Khyentse, from "Best Foot Forward: A Pilgrim's Guide + to the Sacred Sites of the Buddha", published by Shambhala Publications +~ +The cultivation of Pure Awareness does not evolve in a straight line. It is +not that we have a certain realization and then it is ours and we can hang on +to it and in the next practice session begin from there and move on to the +next higher realization. Every time we sit down to practice, it's a brand new +situation, a new journey. "Back to square one," as Trungpa Rinpoche used to +say. Back to Suzuki Roshi's "beginner's mind." + -- Reginald A. Ray, from "The Practice of Pure Awareness: Somatic Meditation + for Awakening the Sacred", published by Shambhala Publications +~ +When the seven consciousnesses melt +Into the consciousness of the universal ground, +And the universal ground is purified in the ultimate expanse, +There occurs primordial coemergent wisdom, +Empty, luminous, and self-arisen. +This is what yogis must recognize.    + -- Longchenpa, from "Finding Rest in the Nature of the Mind: The Trilogy + of Rest, Volume 1", translated by Padmakara Translation Group, published + by Shambhala Publications +~ +The purpose of a knife is much like the purpose of the brain, and that is to +stop being used. Just as the brain should do some computation and then desist +from functioning for a while to rest and relax, so too should one stop using a +knife as soon as the purpose for which the knife was picked up is achieved. +If it seems like it's fun to play with a knife or if one feels that the knife +is an extension of one's penis, then that is not a very good reason to pick up +a knife; one should probably put the knife right back down in those degenerate +(in the mathematical sense) cases. #WhatILearnedFromTheBoyScouts + -- fred t. hamster diff --git a/infobase/metaverse/viewer_list.txt b/infobase/metaverse/viewer_list.txt new file mode 100644 index 00000000..209f493a --- /dev/null +++ b/infobase/metaverse/viewer_list.txt @@ -0,0 +1,15 @@ + + +best opensim and second life viewers in my opinion are these: + +kokua +http://wiki.kokuaviewer.org/wiki/Kokua/Downloads +favorite 3d viewer for a while. + +phoenix firestorm +http://www.firestormviewer.org/downloads/ +good standard 3d viewer. + +radegast +https://radegast.life/downloads/ +good simple viewer as a remote control, not great for 3d interactive. diff --git a/kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar b/kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar new file mode 100644 index 00000000..475d403d Binary files /dev/null and b/kona/lib/org.eclipse.osgi_3.8.0.v20120529-1548.jar differ diff --git a/kona/osgi/org.feistymeow.bundle.helloOSGi/.classpath b/kona/osgi/org.feistymeow.bundle.helloOSGi/.classpath index 098194ca..3c38f04d 100644 --- a/kona/osgi/org.feistymeow.bundle.helloOSGi/.classpath +++ b/kona/osgi/org.feistymeow.bundle.helloOSGi/.classpath @@ -1,7 +1,9 @@ - + + + diff --git a/kona/osgi/org.feistymeow.bundle.helloOSGi/.gitignore b/kona/osgi/org.feistymeow.bundle.helloOSGi/.gitignore new file mode 100644 index 00000000..ae3c1726 --- /dev/null +++ b/kona/osgi/org.feistymeow.bundle.helloOSGi/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/kona/osgi/org.feistymeow.bundle.helloOSGi/.settings/org.eclipse.jdt.core.prefs b/kona/osgi/org.feistymeow.bundle.helloOSGi/.settings/org.eclipse.jdt.core.prefs index f42de363..0c68a61d 100644 --- a/kona/osgi/org.feistymeow.bundle.helloOSGi/.settings/org.eclipse.jdt.core.prefs +++ b/kona/osgi/org.feistymeow.bundle.helloOSGi/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,7 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/kona/osgi/org.feistymeow.bundle.servicesOSGi/.classpath b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.classpath index 098194ca..d8387563 100644 --- a/kona/osgi/org.feistymeow.bundle.servicesOSGi/.classpath +++ b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.classpath @@ -1,7 +1,8 @@ - + + diff --git a/kona/osgi/org.feistymeow.bundle.servicesOSGi/.gitignore b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.gitignore new file mode 100644 index 00000000..ae3c1726 --- /dev/null +++ b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/kona/osgi/org.feistymeow.bundle.servicesOSGi/.settings/org.eclipse.jdt.core.prefs b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.settings/org.eclipse.jdt.core.prefs index f42de363..0c68a61d 100644 --- a/kona/osgi/org.feistymeow.bundle.servicesOSGi/.settings/org.eclipse.jdt.core.prefs +++ b/kona/osgi/org.feistymeow.bundle.servicesOSGi/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,7 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/kona/src/org/feistymeow/algorithms/RectangleIntersector.java b/kona/src/org/feistymeow/algorithms/RectangleIntersector.java index e177621f..c2260dcd 100644 --- a/kona/src/org/feistymeow/algorithms/RectangleIntersector.java +++ b/kona/src/org/feistymeow/algorithms/RectangleIntersector.java @@ -5,9 +5,6 @@ import java.util.Arrays; import java.util.Comparator; import java.util.Vector; -import org.feistymeow.algorithms.RectangleIntersector.SortedElement; -import org.feistymeow.algorithms.RectangleIntersector.SortedElementComparator; - /** * reports if any two rectangles in a list intersect. uses screen coordinates. */ @@ -179,11 +176,11 @@ public class RectangleIntersector Vector list2 = new Vector(Arrays.asList(r1, r2)); Vector list3 = new Vector(Arrays.asList(r1, r3, r4)); - RectangleIntersector secto = new RectangleIntersector(); +// RectangleIntersector secto = new RectangleIntersector(); - Vector answer1 = secto.findOverlap(list1); - Vector answer2 = secto.findOverlap(list2); - Vector answer3 = secto.findOverlap(list3); + Vector answer1 = RectangleIntersector.findOverlap(list1); + Vector answer2 = RectangleIntersector.findOverlap(list2); + Vector answer3 = RectangleIntersector.findOverlap(list3); if (answer1 == null) { System.out.println("FAILURE: test 1 did not find intersection in list"); diff --git a/kona/src/org/gffs/io/IOUtils.java b/kona/src/org/gffs/io/IOUtils.java index b71bac17..daa9c423 100644 --- a/kona/src/org/gffs/io/IOUtils.java +++ b/kona/src/org/gffs/io/IOUtils.java @@ -19,7 +19,7 @@ public class IOUtils static final private int BUFFER_SIZE = 1024 * 8; - static private final int COPY_SIZE = 1024 * 8; +// static private final int COPY_SIZE = 1024 * 8; static public void copy(InputStream in, OutputStream out) throws IOException { diff --git a/nucleus/.settings/language.settings.xml b/nucleus/.settings/language.settings.xml index 0d6789c9..71923ccf 100644 --- a/nucleus/.settings/language.settings.xml +++ b/nucleus/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/nucleus/applications/utilities/dirtree.cpp b/nucleus/applications/utilities/dirtree.cpp index 80156b38..fe139dea 100644 --- a/nucleus/applications/utilities/dirtree.cpp +++ b/nucleus/applications/utilities/dirtree.cpp @@ -38,10 +38,20 @@ public: int execute(); int print_instructions_and_exit() { LOG(a_sprintf("\ -%s: This utility requires a directory name on the command line.\n\ -The subdirectories under that directory will be shown. If a second paramter\n\ -is provided, it is taken as a pattern that will be used to show the files in\n\ -those directories also. Otherwise, just the tree of directories is shown.\n\ +%s: This utility shows the sub-directory structure for a chosen directory.\n\ +It expects a directory name to be provided on the command line. If no\n\ +directory is provided, then the current directory is assumed. The sub-\n\ +directories under the chosen directory will be displayed on the console in a\n\ +stylized textual tree. If a second parameter is provided, it is taken as a\n\ +file pattern that causes matching files to be displayed. Without a pattern,\n\ +just the directory tree is shown.\n\ +For example:\n\ + dirtree\n\ + => shows the directory structure of the current directory.\n\ + dirtree udon\n\ + => shows the structure of directory 'udon'\n\ + dirtree soba \"*.txt\"\n\ + => displays all text files and sub-directories of 'soba'\n\ ", filename(application::_global_argv[0]).basename().raw().s())); return 23; } @@ -58,20 +68,30 @@ astring hier_prefix(int depth, int kids) int dirtree::execute() { astring path; - - - if (application::_global_argc < 2) { - return print_instructions_and_exit(); - } - - path = application::_global_argv[1]; +//hmmm: we really need an abstraction to do some checking if they want --help; +// this comparison way of doing it is lame. +astring helpword = astring("--help"); + + if (application::_global_argc <= 1) { + // plug in our default path if they gave us no parameters. + path = "."; + } else { + // they gave us some parameters. but are they asking for help? + if (helpword == astring(application::_global_argv[1])) { + return print_instructions_and_exit(); + } else { + // this seems like a serious path request. + path = application::_global_argv[1]; + } + } // check if we should show any of the files. bool show_files = false; astring pattern; - if (application::_global_argc >= 3) + if (application::_global_argc >= 3) { pattern = application::_global_argv[2]; + } if (pattern.t()) { show_files = true; } @@ -83,7 +103,7 @@ int dirtree::execute() if (!dir.good()) { continuable_error(class_name(), "tree construction", "the directory could not be read"); - return 82; + return print_instructions_and_exit(); } dir_tree_iterator *ted = dir.start(directory_tree::prefix); @@ -99,8 +119,9 @@ int dirtree::execute() directory_tree::depth(*ted, depth); directory_tree::children(*ted, kids); astring name_to_log = curr.basename().raw(); - if (!depth) + if (!depth) { name_to_log = curr.raw(); + } LOG(hier_prefix(depth, kids) + name_to_log); if (show_files) { astring names; @@ -108,6 +129,10 @@ int dirtree::execute() if (names.length()) { astring split; string_manipulation::split_lines(names, split, depth * 2 + 2); + // strip eol chars off the string we got back, since we already add that in log. + while (parser_bits::is_eol(split[split.end()])) { + split.zap(split.end(), split.end()); + } LOG(split); } } diff --git a/nucleus/library/__build_configuration.h b/nucleus/library/__build_configuration.h new file mode 100644 index 00000000..8365bd25 --- /dev/null +++ b/nucleus/library/__build_configuration.h @@ -0,0 +1,52 @@ +#ifndef BUILD_SYSTEM_CONFIGURATION +#define BUILD_SYSTEM_CONFIGURATION + + // This file provides all of the code flags which were used when this build + // was generated. Some of the items in the build configuration have been + // stripped out because they are not used. + + #ifndef __build_company + #define __build_company "Feisty Meow Concerns" + #endif + #ifndef __build_copyright + #define __build_copyright "(C) 1987-$now Chris Koeritz & Others" + #endif + #ifndef __build_legal_info + #define __build_legal_info "This software is free to copy under the terms of the GNU GPL (or the GNU Library License if you prefer). See http://www.gnu.org/licenses/gpl.html for more info. We suggest peaceful purposes that help all sentient beings." + #endif + #ifndef __build_product_name + #define __build_product_name "feisty_meow" + #endif + #ifndef __build_web_site + #define __build_web_site "http://feistymeow.org" + #endif + #ifndef __build_LAX_DEPENDENCIES + #define __build_LAX_DEPENDENCIES "t" + #endif + #ifndef CATCH_ERRORS + #define CATCH_ERRORS "t" + #endif + #ifndef ERRORS_ARE_FATAL + #define ERRORS_ARE_FATAL "t" + #endif + +/* +These settings were not used: + [version] = + DEBUG = t + OPTIMIZE = t + ifneq "$(DEBUG)" "" = + OPTIMIZE = + endif = + ifeq "$(BOOT_STRAPPING)" "" = + endif = + ifneq "$(OP_SYSTEM)" "WIN32" = + endif = + ifeq "$(BOOT_STRAPPING)" "" = + endif = + ifeq "$(BOOT_STRAPPING)" "" = + endif = +*/ + +#endif /* outer guard */ + diff --git a/nucleus/library/tests_configuration/test_section_manager.cpp b/nucleus/library/tests_configuration/test_section_manager.cpp index c8358237..72acd84e 100644 --- a/nucleus/library/tests_configuration/test_section_manager.cpp +++ b/nucleus/library/tests_configuration/test_section_manager.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -55,6 +56,10 @@ public: int test_section_manager::execute() { FUNCDEF("execute"); + + // prepare the storage area for ini config. + environment::set("ALLUSERSPROFILE", environment::get("TEMPORARIES_PILE")); + { astring TEST = "First Test"; ini_configurator ini("t_section_manager_1.ini", ini_configurator::AUTO_STORE); diff --git a/nucleus/tools/clam_tools/write_build_config.cpp b/nucleus/tools/clam_tools/write_build_config.cpp index 6eb06ad2..6713ed63 100644 --- a/nucleus/tools/clam_tools/write_build_config.cpp +++ b/nucleus/tools/clam_tools/write_build_config.cpp @@ -383,17 +383,6 @@ int write_build_config::execute() LOG(astring("failed writing output file ") + ver_header_filename); } -//NO, not any more // now make a copy into the library folder, for when we release a production version. -// astring library_directory = repodir + "/nucleus/library"; -// astring cfg_header_copy = library_directory + "/__build_configuration.h"; -// astring ver_header_copy = library_directory + "/__build_version.h"; -// if (!write_output_file(cfg_header_copy, cfg_accumulator)) { -// LOG(astring("skipping copy due to read-only issue on output file: ") + cfg_header_copy); -// } -// if (!write_output_file(ver_header_copy, ver_accumulator)) { -// LOG(astring("skipping copy due to read-only issue on output file: ") + ver_header_copy); -// } - return 0; } diff --git a/production/example_apps/shared_calendar/.buildpath b/production/example_apps/shared_calendar/.buildpath new file mode 100644 index 00000000..8bcb4b5f --- /dev/null +++ b/production/example_apps/shared_calendar/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/production/example_apps/shared_calendar/.editorconfig b/production/example_apps/shared_calendar/.editorconfig new file mode 100644 index 00000000..70619017 --- /dev/null +++ b/production/example_apps/shared_calendar/.editorconfig @@ -0,0 +1,18 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.bat] +end_of_line = crlf + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/production/example_apps/shared_calendar/.gitattributes b/production/example_apps/shared_calendar/.gitattributes new file mode 100644 index 00000000..5054ec07 --- /dev/null +++ b/production/example_apps/shared_calendar/.gitattributes @@ -0,0 +1,44 @@ +# Define the line ending behavior of the different file extensions +# Set default behaviour, in case users don't have core.autocrlf set. +* text=auto +* text eol=lf + +# Explicitly declare text files we want to always be normalized and converted +# to native line endings on checkout. +*.php text +*.default text +*.ctp text +*.sql text +*.md text +*.po text +*.js text +*.css text +*.ini text +*.properties text +*.txt text +*.xml text +*.svg text +*.yml text +.htaccess text + +# Declare files that will always have CRLF line endings on checkout. +*.bat eol=crlf + +# Declare files that will always have LF line endings on checkout. +*.pem eol=lf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.gif binary +*.ico binary +*.mo binary +*.pdf binary +*.phar binary +*.woff binary +*.woff2 binary +*.ttf binary +*.otf binary +*.eot binary +*.odt binary + diff --git a/production/example_apps/shared_calendar/.github/ISSUE_TEMPLATE.md b/production/example_apps/shared_calendar/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..92c77d6b --- /dev/null +++ b/production/example_apps/shared_calendar/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,23 @@ +This is a (multiple allowed): + +* [x] bug +* [ ] enhancement +* [ ] feature-discussion (RFC) + +* CakePHP Application Skeleton Version: EXACT RELEASE VERSION OR COMMIT HASH, HERE. +* Platform and Target: YOUR WEB-SERVER, DATABASE AND OTHER RELEVANT INFO AND HOW THE REQUEST IS BEING MADE, HERE. + +### What you did +EXPLAIN WHAT YOU DID, PREFERABLY WITH CODE EXAMPLES, HERE. + +### What happened +EXPLAIN WHAT IS ACTUALLY HAPPENING, HERE. + +### What you expected to happen +EXPLAIN WHAT IS TO BE EXPECTED, HERE. + +P.S. Remember, an issue is not the place to ask questions. You can use [Stack Overflow](http://stackoverflow.com/questions/tagged/cakephp) +for that or join the #cakephp channel on irc.freenode.net, where we will be more +than happy to help answer your questions. + +Before you open an issue, please check if a similar issue already exists or has been closed before. \ No newline at end of file diff --git a/production/example_apps/shared_calendar/.github/PULL_REQUEST_TEMPLATE.md b/production/example_apps/shared_calendar/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..05ca9eb6 --- /dev/null +++ b/production/example_apps/shared_calendar/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,10 @@ +**PLEASE NOTE:** + +This is only a issue tracker for issues related to the CakePHP Application Skeleton. +For CakePHP Framework issues please use this [issue tracker](https://github.com/cakephp/cakephp/issues). + +Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue. + +The best way to propose a feature is to open an issue first and discuss your ideas there before implementing them. + +Always follow the [contribution guidelines](https://github.com/cakephp/cakephp/blob/master/.github/CONTRIBUTING.md) guidelines when submitting a pull request. In particular, make sure existing tests still pass, and add tests for all new behavior. When fixing a bug, you may want to add a test to verify the fix. \ No newline at end of file diff --git a/production/example_apps/shared_calendar/.gitignore b/production/example_apps/shared_calendar/.gitignore new file mode 100644 index 00000000..8a18ddc3 --- /dev/null +++ b/production/example_apps/shared_calendar/.gitignore @@ -0,0 +1,10 @@ +/vendor/* +/config/app.php +/config/*secret* +/config/config_google.php +/tmp/* +/logs/* +/vendor/ +/webroot/avmaps +/webroot/debug_kit + diff --git a/production/example_apps/shared_calendar/.htaccess b/production/example_apps/shared_calendar/.htaccess new file mode 100644 index 00000000..bc1dd9c0 --- /dev/null +++ b/production/example_apps/shared_calendar/.htaccess @@ -0,0 +1,11 @@ +# Uncomment the following to prevent the httpoxy vulnerability +# See: https://httpoxy.org/ +# +# RequestHeader unset Proxy +# + + + RewriteEngine on + RewriteRule ^$ webroot/ [L] + RewriteRule (.*) webroot/$1 [L] + diff --git a/production/example_apps/shared_calendar/.project b/production/example_apps/shared_calendar/.project new file mode 100644 index 00000000..a71e33ed --- /dev/null +++ b/production/example_apps/shared_calendar/.project @@ -0,0 +1,29 @@ + + + shared_calendar + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.dltk.core.scriptbuilder + + + + + + org.eclipse.php.core.PHPNature + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/production/example_apps/shared_calendar/.settings/.jsdtscope b/production/example_apps/shared_calendar/.settings/.jsdtscope new file mode 100644 index 00000000..4649ef13 --- /dev/null +++ b/production/example_apps/shared_calendar/.settings/.jsdtscope @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.php.core.prefs b/production/example_apps/shared_calendar/.settings/org.eclipse.php.core.prefs new file mode 100644 index 00000000..64149f27 --- /dev/null +++ b/production/example_apps/shared_calendar/.settings/org.eclipse.php.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +include_path=0;/shared_calendar diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.wst.common.project.facet.core.xml b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 00000000..ba149d77 --- /dev/null +++ b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.container b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 00000000..3bd5d0a4 --- /dev/null +++ b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.name b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 00000000..05bd71b6 --- /dev/null +++ b/production/example_apps/shared_calendar/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/production/example_apps/shared_calendar/.travis.yml b/production/example_apps/shared_calendar/.travis.yml new file mode 100644 index 00000000..befdb98e --- /dev/null +++ b/production/example_apps/shared_calendar/.travis.yml @@ -0,0 +1,30 @@ +language: php + +dist: trusty + +sudo: false + +php: + - 5.6 + - 7.0 + - 7.1 + +matrix: + fast_finish: true + + include: + - php: 7.0 + env: PHPCS=1 + +before_script: + - if [[ $PHPCS = 1 ]]; then composer require cakephp/cakephp-codesniffer:~2.1; fi + - if [[ $PHPCS != 1 ]]; then composer install; fi + - if [[ $PHPCS != 1 ]]; then composer require phpunit/phpunit:"^5.7|^6.0"; fi + - if [[ $PHPCS != 1 ]]; then composer run-script post-install-cmd --no-interaction; fi + +script: + - if [[ $PHPCS != 1 ]]; then vendor/bin/phpunit; fi + - if [[ $PHPCS = 1 ]]; then vendor/bin/phpcs -p --extensions=php --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests ./config ./webroot; fi + +notifications: + email: false diff --git a/production/example_apps/shared_calendar/bin/cake b/production/example_apps/shared_calendar/bin/cake new file mode 100644 index 00000000..6801c45b --- /dev/null +++ b/production/example_apps/shared_calendar/bin/cake @@ -0,0 +1,46 @@ +#!/usr/bin/env sh +################################################################################ +# +# Cake is a shell script for invoking CakePHP shell commands +# +# CakePHP(tm) : Rapid Development Framework (http://cakephp.org) +# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# +# Licensed under The MIT License +# For full copyright and license information, please see the LICENSE.txt +# Redistributions of files must retain the above copyright notice. +# +# @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# @link http://cakephp.org CakePHP(tm) Project +# @since 1.2.0 +# @license http://www.opensource.org/licenses/mit-license.php MIT License +# +################################################################################ + +# Canonicalize by following every symlink of the given name recursively +canonicalize() { + NAME="$1" + if [ -f "$NAME" ] + then + DIR=$(dirname -- "$NAME") + NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME") + fi + while [ -h "$NAME" ]; do + DIR=$(dirname -- "$NAME") + SYM=$(readlink "$NAME") + NAME=$(cd "$DIR" > /dev/null && cd $(dirname -- "$SYM") > /dev/null && pwd)/$(basename -- "$SYM") + done + echo "$NAME" +} + +CONSOLE=$(dirname -- "$(canonicalize "$0")") +APP=$(dirname "$CONSOLE") + +if [ $(basename $0) != 'cake' ] +then + exec php "$CONSOLE"/cake.php $(basename $0) "$@" +else + exec php "$CONSOLE"/cake.php "$@" +fi + +exit diff --git a/production/example_apps/shared_calendar/bin/cake.bat b/production/example_apps/shared_calendar/bin/cake.bat new file mode 100644 index 00000000..d4512dbf --- /dev/null +++ b/production/example_apps/shared_calendar/bin/cake.bat @@ -0,0 +1,27 @@ +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Cake is a Windows batch script for invoking CakePHP shell commands +:: +:: CakePHP(tm) : Rapid Development Framework (http://cakephp.org) +:: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +:: +:: Licensed under The MIT License +:: Redistributions of files must retain the above copyright notice. +:: +:: @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +:: @link http://cakephp.org CakePHP(tm) Project +:: @since 2.0.0 +:: @license http://www.opensource.org/licenses/mit-license.php MIT License +:: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +@echo off + +SET app=%0 +SET lib=%~dp0 + +php "%lib%cake.php" %* + +echo. + +exit /B %ERRORLEVEL% diff --git a/production/example_apps/shared_calendar/bin/cake.php b/production/example_apps/shared_calendar/bin/cake.php new file mode 100644 index 00000000..5ee314c9 --- /dev/null +++ b/production/example_apps/shared_calendar/bin/cake.php @@ -0,0 +1,34 @@ +#!/usr/bin/php -q +require->php)) { + $minVersion = preg_replace('/([^0-9\.])/', '', $composer->require->php); + } +} +if (version_compare(phpversion(), $minVersion, '<')) { + fwrite(STDERR, sprintf("Minimum PHP version: %s. You are using: %s.\n", $minVersion, phpversion())); + exit(-1); +} + +require dirname(__DIR__) . '/vendor/autoload.php'; +include dirname(__DIR__) . '/config/bootstrap.php'; + +exit(Cake\Console\ShellDispatcher::run($argv)); diff --git a/production/example_apps/shared_calendar/composer.json b/production/example_apps/shared_calendar/composer.json new file mode 100644 index 00000000..221cae16 --- /dev/null +++ b/production/example_apps/shared_calendar/composer.json @@ -0,0 +1,50 @@ +{ + "name": "cakephp/app", + "description": "CakePHP skeleton app", + "homepage": "http://cakephp.org", + "type": "project", + "license": "MIT", + "require": { + "php": ">=5.6", + "cakephp/cakephp": "3.4.*", + "mobiledetect/mobiledetectlib": "2.*", + "cakephp/migrations": "~1.0", + "cakephp/plugin-installer": "~1.0", + "google/apiclient": "^2.0" + }, + "require-dev": { + "psy/psysh": "@stable", + "cakephp/debug_kit": "~3.0", + "cakephp/bake": "~1.1" + }, + "suggest": { + "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.", + "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility.", + "phpunit/phpunit": "Allows automated tests to be run without system-wide install.", + "cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP." + }, + "autoload": { + "psr-4": { + "App\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Test\\": "tests", + "Cake\\Test\\": "./vendor/cakephp/cakephp/tests" + } + }, + "scripts": { + "post-install-cmd": "App\\Console\\Installer::postInstall", + "post-create-project-cmd": "App\\Console\\Installer::postInstall", + "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump", + "check": [ + "@test", + "@cs-check" + ], + "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests", + "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests", + "test": "phpunit --colors=always" + }, + "prefer-stable": true +} diff --git a/production/example_apps/shared_calendar/composer.lock b/production/example_apps/shared_calendar/composer.lock new file mode 100644 index 00000000..1cacf0de --- /dev/null +++ b/production/example_apps/shared_calendar/composer.lock @@ -0,0 +1,2538 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "099599d4cc2fd8367c1e6c24bb83d011", + "packages": [ + { + "name": "aura/intl", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/auraphp/Aura.Intl.git", + "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926", + "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Aura\\Intl\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aura.Intl Contributors", + "homepage": "https://github.com/auraphp/Aura.Intl/contributors" + } + ], + "description": "The Aura Intl package provides internationalization tools, specifically message translation.", + "homepage": "https://github.com/auraphp/Aura.Intl", + "keywords": [ + "g11n", + "globalization", + "i18n", + "internationalization", + "intl", + "l10n", + "localization" + ], + "time": "2017-01-20T05:00:11+00:00" + }, + { + "name": "cakephp/cakephp", + "version": "3.4.11", + "source": { + "type": "git", + "url": "https://github.com/cakephp/cakephp.git", + "reference": "c90f9d2ef2376f8e4d9cca39d971053707645118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/cakephp/zipball/c90f9d2ef2376f8e4d9cca39d971053707645118", + "reference": "c90f9d2ef2376f8e4d9cca39d971053707645118", + "shasum": "" + }, + "require": { + "aura/intl": "^3.0.0", + "cakephp/chronos": "^1.0.0", + "ext-intl": "*", + "ext-mbstring": "*", + "php": ">=5.6.0", + "psr/log": "^1.0.0", + "zendframework/zend-diactoros": "^1.4.0" + }, + "conflict": { + "phpunit/phpunit": "<5.7" + }, + "replace": { + "cakephp/cache": "self.version", + "cakephp/collection": "self.version", + "cakephp/core": "self.version", + "cakephp/database": "self.version", + "cakephp/datasource": "self.version", + "cakephp/event": "self.version", + "cakephp/filesystem": "self.version", + "cakephp/form": "self.version", + "cakephp/i18n": "self.version", + "cakephp/log": "self.version", + "cakephp/orm": "self.version", + "cakephp/utility": "self.version", + "cakephp/validation": "self.version" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "^5.7|^6.0" + }, + "suggest": { + "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.", + "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cake\\": "src" + }, + "files": [ + "src/Core/functions.php", + "src/Collection/functions.php", + "src/I18n/functions.php", + "src/Utility/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/cakephp/graphs/contributors" + } + ], + "description": "The CakePHP framework", + "homepage": "https://cakephp.org", + "keywords": [ + "conventions over configuration", + "dry", + "form", + "framework", + "mvc", + "orm", + "psr-7", + "rapid-development", + "validation" + ], + "time": "2017-07-19T01:43:53+00:00" + }, + { + "name": "cakephp/chronos", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/cakephp/chronos.git", + "reference": "0621b191334d8dcb56907688986dd24eb8c38234" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/0621b191334d8dcb56907688986dd24eb8c38234", + "reference": "0621b191334d8dcb56907688986dd24eb8c38234", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "cakephp/cakephp-codesniffer": "~2.3", + "phpbench/phpbench": "@dev", + "phpstan/phpstan": "^0.6.4", + "phpunit/phpunit": "<6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cake\\Chronos\\": "src" + }, + "files": [ + "src/carbon_compat.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "The CakePHP Team", + "homepage": "http://cakephp.org" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://cakephp.org", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2017-04-27T01:27:49+00:00" + }, + { + "name": "cakephp/migrations", + "version": "1.6.7", + "source": { + "type": "git", + "url": "https://github.com/cakephp/migrations.git", + "reference": "f2a5e2915f8924bd36979a1001edeef7cd455f89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/migrations/zipball/f2a5e2915f8924bd36979a1001edeef7cd455f89", + "reference": "f2a5e2915f8924bd36979a1001edeef7cd455f89", + "shasum": "" + }, + "require": { + "cakephp/cakephp": "~3.1", + "php": ">=5.4", + "robmorgan/phinx": "0.6.5" + }, + "require-dev": { + "cakephp/bake": "@stable", + "phpunit/phpunit": "*" + }, + "suggest": { + "cakephp/bake": "Required if you want to generate migrations." + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "Migrations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/migrations/graphs/contributors" + } + ], + "description": "Database Migration plugin for CakePHP 3.0 based on Phinx", + "homepage": "https://github.com/cakephp/migrations", + "keywords": [ + "cakephp", + "migrations" + ], + "time": "2017-01-07T16:45:31+00:00" + }, + { + "name": "cakephp/plugin-installer", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/cakephp/plugin-installer.git", + "reference": "3449cb3251e3e741b123237765e278005565d8de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/3449cb3251e3e741b123237765e278005565d8de", + "reference": "3449cb3251e3e741b123237765e278005565d8de", + "shasum": "" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "dev-master", + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "^4.8|^5.7|^6.0" + }, + "type": "composer-installer", + "extra": { + "class": "Cake\\Composer\\Installer\\PluginInstaller" + }, + "autoload": { + "psr-4": { + "Cake\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "http://cakephp.org" + } + ], + "description": "A composer installer for CakePHP 3.0+ plugins.", + "time": "2017-03-21T13:48:47+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/dccf163dc8ed7ed6a00afc06c51ee5186a428d35", + "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "time": "2016-07-18T04:51:16+00:00" + }, + { + "name": "google/apiclient", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/google/google-api-php-client.git", + "reference": "f3fadd538315d62ebd1191d89ac791468c617260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/google-api-php-client/zipball/f3fadd538315d62ebd1191d89ac791468c617260", + "reference": "f3fadd538315d62ebd1191d89ac791468c617260", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", + "google/apiclient-services": "~0.13", + "google/auth": "^1.0", + "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/psr7": "^1.2", + "monolog/monolog": "^1.17", + "php": ">=5.4", + "phpseclib/phpseclib": "~0.3.10|~2.0" + }, + "require-dev": { + "cache/filesystem-adapter": "^0.3.2", + "phpunit/phpunit": "~4", + "squizlabs/php_codesniffer": "~2.3", + "symfony/css-selector": "~2.1", + "symfony/dom-crawler": "~2.1" + }, + "suggest": { + "cache/filesystem-adapter": "For caching certs and tokens (using Google_Client::setCache)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Google_": "src/" + }, + "classmap": [ + "src/Google/Service/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2017-07-10T15:34:54+00:00" + }, + { + "name": "google/apiclient-services", + "version": "v0.16", + "source": { + "type": "git", + "url": "https://github.com/google/google-api-php-client-services.git", + "reference": "29c32b7d90a92af279ff5b51301fef03b44da7dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/29c32b7d90a92af279ff5b51301fef03b44da7dd", + "reference": "29c32b7d90a92af279ff5b51301fef03b44da7dd", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Google_Service_": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2017-07-22T00:20:26+00:00" + }, + { + "name": "google/auth", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/google/google-auth-library-php.git", + "reference": "db77bd2de0bcc40bf50ebe851e9eed332aeaa4df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/db77bd2de0bcc40bf50ebe851e9eed332aeaa4df", + "reference": "db77bd2de0bcc40bf50ebe851e9eed332aeaa4df", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~2.0|~3.0|~4.0", + "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/psr7": "~1.2", + "php": ">=5.4", + "psr/cache": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ], + "psr-4": { + "Google\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Auth Library for PHP", + "homepage": "http://github.com/google/google-auth-library-php", + "keywords": [ + "Authentication", + "google", + "oauth2" + ], + "time": "2017-06-13T18:00:07+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "mobiledetect/mobiledetectlib", + "version": "2.8.25", + "source": { + "type": "git", + "url": "https://github.com/serbanghita/Mobile-Detect.git", + "reference": "f0896b5c7274d1450023b0b376240be902c3251c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/f0896b5c7274d1450023b0b376240be902c3251c", + "reference": "f0896b5c7274d1450023b0b376240be902c3251c", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "Mobile_Detect.php" + ], + "psr-0": { + "Detection": "namespaced/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Serban Ghita", + "email": "serbanghita@gmail.com", + "homepage": "http://mobiledetect.net", + "role": "Developer" + } + ], + "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", + "homepage": "https://github.com/serbanghita/Mobile-Detect", + "keywords": [ + "detect mobile devices", + "mobile", + "mobile detect", + "mobile detector", + "php mobile detect" + ], + "time": "2017-03-29T13:59:30+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34a7699e6f31b1ef4035ee36444407cecf9f56aa", + "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "~4.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2017-06-05T06:31:10+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "robmorgan/phinx", + "version": "v0.6.5", + "source": { + "type": "git", + "url": "https://github.com/cakephp/phinx.git", + "reference": "6943cb4bb78bf9d3964967a032220b7c793b97b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/phinx/zipball/6943cb4bb78bf9d3964967a032220b7c793b97b7", + "reference": "6943cb4bb78bf9d3964967a032220b7c793b97b7", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "symfony/config": "~2.8|~3.0", + "symfony/console": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.26|^5.0" + }, + "bin": [ + "bin/phinx" + ], + "type": "library", + "autoload": { + "psr-4": { + "Phinx\\": "src/Phinx" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com", + "homepage": "http://shadowhand.me", + "role": "Developer" + }, + { + "name": "Rob Morgan", + "email": "robbym@gmail.com", + "homepage": "https://robmorgan.id.au", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Developer" + } + ], + "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", + "homepage": "https://phinx.org", + "keywords": [ + "database", + "database migrations", + "db", + "migrations", + "phinx" + ], + "time": "2016-10-27T10:16:12+00:00" + }, + { + "name": "symfony/config", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "a094618deb9a3fe1c3cf500a796e167d0495a274" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/a094618deb9a3fe1c3cf500a796e167d0495a274", + "reference": "a094618deb9a3fe1c3cf500a796e167d0495a274", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/filesystem": "~2.8|~3.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-06-16T12:40:34+00:00" + }, + { + "name": "symfony/console", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "a97e45d98c59510f085fa05225a1acb74dfe0546" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/a97e45d98c59510f085fa05225a1acb74dfe0546", + "reference": "a97e45d98c59510f085fa05225a1acb74dfe0546", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-07-03T13:19:36+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "63b85a968486d95ff9542228dc2e4247f16f9743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/63b85a968486d95ff9542228dc2e4247f16f9743", + "reference": "63b85a968486d95ff9542228dc2e4247f16f9743", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-07-05T13:02:37+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "427987eb4eed764c3b6e38d52a0f87989e010676" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/427987eb4eed764c3b6e38d52a0f87989e010676", + "reference": "427987eb4eed764c3b6e38d52a0f87989e010676", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-07-11T07:17:58+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09T14:24:12+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "1f93a8d19b8241617f5074a123e282575b821df8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/1f93a8d19b8241617f5074a123e282575b821df8", + "reference": "1f93a8d19b8241617f5074a123e282575b821df8", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-06-15T12:58:50+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "b03f285a333f51e58c95cce54109a4a9ed691436" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/b03f285a333f51e58c95cce54109a4a9ed691436", + "reference": "b03f285a333f51e58c95cce54109a4a9ed691436", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "phpunit/phpunit": "^4.6 || ^5.5", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev", + "dev-develop": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2017-04-06T16:18:34+00:00" + } + ], + "packages-dev": [ + { + "name": "cakephp/bake", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/cakephp/bake.git", + "reference": "4bbb541ee27d12fe63f15cf5acf70b94553de209" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/bake/zipball/4bbb541ee27d12fe63f15cf5acf70b94553de209", + "reference": "4bbb541ee27d12fe63f15cf5acf70b94553de209", + "shasum": "" + }, + "require": { + "cakephp/cakephp": ">=3.4.0 <4.0.0", + "cakephp/plugin-installer": "*", + "php": ">=5.6.0" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "~5.7 | ~6.0" + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "Bake\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/bake/graphs/contributors" + } + ], + "description": "Bake plugin for CakePHP 3.0", + "homepage": "https://github.com/cakephp/bake", + "keywords": [ + "bake", + "cakephp" + ], + "time": "2017-07-01T15:59:12+00:00" + }, + { + "name": "cakephp/debug_kit", + "version": "3.11.0", + "source": { + "type": "git", + "url": "https://github.com/cakephp/debug_kit.git", + "reference": "49208ec4aa0f5650095565f66c52a72fbe393069" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/49208ec4aa0f5650095565f66c52a72fbe393069", + "reference": "49208ec4aa0f5650095565f66c52a72fbe393069", + "shasum": "" + }, + "require": { + "cakephp/cakephp": "^3.4.0", + "cakephp/chronos": "^1.0.0", + "cakephp/plugin-installer": "^1.0.0", + "composer/composer": "^1.3.0", + "jdorn/sql-formatter": "^1.2.0", + "php": ">=5.6.0" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "^5.7|^6.0" + }, + "suggest": { + "ext-sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use." + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "DebugKit\\": "src", + "DebugKit\\Test\\Fixture\\": "tests\\Fixture" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Story", + "homepage": "http://mark-story.com", + "role": "Author" + }, + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors" + } + ], + "description": "CakePHP Debug Kit", + "homepage": "https://github.com/cakephp/debug_kit", + "keywords": [ + "cakephp", + "debug", + "kit" + ], + "time": "2017-07-20T11:18:33+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b17e6153cb7f33c7e44eb59578dc12eee5dc8e12", + "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0" + }, + "suggest": { + "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2017-03-06T11:59:08+00:00" + }, + { + "name": "composer/composer", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "489e09ee6c3ba431fbeeef9147afdaeb6f91b647" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/489e09ee6c3ba431fbeeef9147afdaeb6f91b647", + "reference": "489e09ee6c3ba431fbeeef9147afdaeb6f91b647", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.0", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/cli-prompt": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0", + "symfony/filesystem": "^2.7 || ^3.0", + "symfony/finder": "^2.7 || ^3.0", + "symfony/process": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2017-05-17T06:17:53+00:00" + }, + { + "name": "composer/semver", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2016-08-30T16:08:34+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.1.6", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/2603a0d7ddc00a015deb576fa5297ca43dee6b1c", + "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "time": "2017-04-03T19:08:52+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "0.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "@stable" + }, + "type": "project", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "time": "2014-10-24T07:27:01+00:00" + }, + { + "name": "jakub-onderka/php-console-color", + "version": "0.1", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", + "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", + "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "jakub-onderka/php-code-style": "1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "jakub-onderka/php-var-dump-check": "0.*", + "phpunit/phpunit": "3.7.*", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-0": { + "JakubOnderka\\PhpConsoleColor": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com", + "homepage": "http://www.acci.cz" + } + ], + "time": "2014-04-08T15:00:19+00:00" + }, + { + "name": "jakub-onderka/php-console-highlighter", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", + "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "shasum": "" + }, + "require": { + "jakub-onderka/php-console-color": "~0.1", + "php": ">=5.3.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "~1.0", + "jakub-onderka/php-parallel-lint": "~0.5", + "jakub-onderka/php-var-dump-check": "~0.1", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JakubOnderka\\PhpConsoleHighlighter": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "acci@acci.cz", + "homepage": "http://www.acci.cz/" + } + ], + "time": "2015-04-20T18:58:01+00:00" + }, + { + "name": "jdorn/sql-formatter", + "version": "v1.2.17", + "source": { + "type": "git", + "url": "https://github.com/jdorn/sql-formatter.git", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "lib" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/jdorn/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "time": "2014-01-12T16:20:24+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.1", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "429be236f296ca249d61c65649cdf2652f4a5e80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/429be236f296ca249d61c65649cdf2652f4a5e80", + "reference": "429be236f296ca249d61c65649cdf2652f4a5e80", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpdocumentor/phpdocumentor": "^2.7", + "phpunit/phpunit": "^4.8.22" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2017-05-16T21:06:09+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v3.0.6", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0808939f81c1347a3c8a82a5925385a08074b0f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0808939f81c1347a3c8a82a5925385a08074b0f1", + "reference": "0808939f81c1347a3c8a82a5925385a08074b0f1", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2017-06-28T20:53:48+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.8.10", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "7ab97e5a32202585309f3ee35a0c08d2a8e588b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7ab97e5a32202585309f3ee35a0c08d2a8e588b1", + "reference": "7ab97e5a32202585309f3ee35a0c08d2a8e588b1", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1", + "jakub-onderka/php-console-highlighter": "0.3.*", + "nikic/php-parser": "~1.3|~2.0|~3.0", + "php": ">=5.3.9", + "symfony/console": "~2.3.10|^2.4.2|~3.0", + "symfony/var-dumper": "~2.7|~3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~1.11", + "hoa/console": "~3.16|~1.14", + "phpunit/phpunit": "~4.4|~5.0", + "symfony/finder": "~2.1|~3.0" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/Psy/functions.php" + ], + "psr-4": { + "Psy\\": "src/Psy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2017-07-22T15:14:19+00:00" + }, + { + "name": "seld/cli-prompt", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/cli-prompt.git", + "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd", + "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\CliPrompt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", + "keywords": [ + "cli", + "console", + "hidden", + "input", + "prompt" + ], + "time": "2017-03-18T11:32:45+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", + "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2017-06-18T15:11:04+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2017-06-01T21:01:25+00:00" + }, + { + "name": "symfony/process", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/07432804942b9f6dd7b7377faf9920af5f95d70a", + "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2017-07-13T13:05:09+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v3.3.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0f32b62d21991700250fed5109b092949007c5b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f32b62d21991700250fed5109b092949007c5b3", + "reference": "0f32b62d21991700250fed5109b092949007c5b3", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, + "require-dev": { + "ext-iconv": "*", + "twig/twig": "~1.34|~2.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-symfony_debug": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2017-07-10T14:18:27+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "psy/psysh": 0 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=5.6" + }, + "platform-dev": [] +} diff --git a/production/example_apps/shared_calendar/config/Migrations/20170725211622_CreateUsers.php b/production/example_apps/shared_calendar/config/Migrations/20170725211622_CreateUsers.php new file mode 100644 index 00000000..410e841f --- /dev/null +++ b/production/example_apps/shared_calendar/config/Migrations/20170725211622_CreateUsers.php @@ -0,0 +1,24 @@ +table('users', ['id' => false, 'primary_key' => ['id']]) + ->addColumn('id', 'integer', ['identity' => true, 'signed' => false]) + ->addColumn('name', 'string', ['length' => 128, 'null' => false]) + ->addColumn('token', 'string', ['length' => 2048, 'null' => true]) + ->addColumn('created', 'datetime') + ->addColumn('modified', 'datetime') + ->addIndex('name') + ->create(); + } +} diff --git a/production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock b/production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock new file mode 100644 index 00000000..45109998 Binary files /dev/null and b/production/example_apps/shared_calendar/config/Migrations/schema-dump-default.lock differ diff --git a/production/example_apps/shared_calendar/config/app.default.php b/production/example_apps/shared_calendar/config/app.default.php new file mode 100644 index 00000000..c06599e2 --- /dev/null +++ b/production/example_apps/shared_calendar/config/app.default.php @@ -0,0 +1,346 @@ + filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN), + + /** + * Configure basic information about the application. + * + * - namespace - The namespace to find app classes under. + * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time. + * - encoding - The encoding used for HTML + database connections. + * - base - The base directory the app resides in. If false this + * will be auto detected. + * - dir - Name of app directory. + * - webroot - The webroot directory. + * - wwwRoot - The file path to webroot. + * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to + * use CakePHP pretty URLs, remove these .htaccess + * files: + * /.htaccess + * /webroot/.htaccess + * And uncomment the baseUrl key below. + * - fullBaseUrl - A base URL to use for absolute links. + * - imageBaseUrl - Web path to the public images directory under webroot. + * - cssBaseUrl - Web path to the public css directory under webroot. + * - jsBaseUrl - Web path to the public js directory under webroot. + * - paths - Configure paths for non class based resources. Supports the + * `plugins`, `templates`, `locales` subkeys, which allow the definition of + * paths for plugins, view templates and locale files respectively. + */ + 'App' => [ + 'namespace' => 'App', + 'encoding' => env('APP_ENCODING', 'UTF-8'), + 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), + 'base' => false, + 'dir' => 'src', + 'webroot' => 'webroot', + 'wwwRoot' => WWW_ROOT, + // 'baseUrl' => env('SCRIPT_NAME'), + 'fullBaseUrl' => false, + 'imageBaseUrl' => 'img/', + 'cssBaseUrl' => 'css/', + 'jsBaseUrl' => 'js/', + 'paths' => [ + 'plugins' => [ROOT . DS . 'plugins' . DS], + 'templates' => [APP . 'Template' . DS], + 'locales' => [APP . 'Locale' . DS], + ], + ], + + /** + * Security and encryption configuration + * + * - salt - A random string used in security hashing methods. + * The salt value is also used as the encryption key. + * You should treat it as extremely sensitive data. + */ + 'Security' => [ + 'salt' => env('SECURITY_SALT', '__SALT__'), + ], + + /** + * Apply timestamps with the last modified time to static assets (js, css, images). + * Will append a querystring parameter containing the time the file was modified. + * This is useful for busting browser caches. + * + * Set to true to apply timestamps when debug is true. Set to 'force' to always + * enable timestamping regardless of debug value. + */ + 'Asset' => [ + // 'timestamp' => true, + ], + + /** + * Configure the cache adapters. + */ + 'Cache' => [ + 'default' => [ + 'className' => 'File', + 'path' => CACHE, + 'url' => env('CACHE_DEFAULT_URL', null), + ], + + /** + * Configure the cache used for general framework caching. + * Translation cache files are stored with this configuration. + * Duration will be set to '+2 minutes' in bootstrap.php when debug = true + * If you set 'className' => 'Null' core cache will be disabled. + */ + '_cake_core_' => [ + 'className' => 'File', + 'prefix' => 'myapp_cake_core_', + 'path' => CACHE . 'persistent/', + 'serialize' => true, + 'duration' => '+1 years', + 'url' => env('CACHE_CAKECORE_URL', null), + ], + + /** + * Configure the cache for model and datasource caches. This cache + * configuration is used to store schema descriptions, and table listings + * in connections. + * Duration will be set to '+2 minutes' in bootstrap.php when debug = true + */ + '_cake_model_' => [ + 'className' => 'File', + 'prefix' => 'myapp_cake_model_', + 'path' => CACHE . 'models/', + 'serialize' => true, + 'duration' => '+1 years', + 'url' => env('CACHE_CAKEMODEL_URL', null), + ], + ], + + /** + * Configure the Error and Exception handlers used by your application. + * + * By default errors are displayed using Debugger, when debug is true and logged + * by Cake\Log\Log when debug is false. + * + * In CLI environments exceptions will be printed to stderr with a backtrace. + * In web environments an HTML page will be displayed for the exception. + * With debug true, framework errors like Missing Controller will be displayed. + * When debug is false, framework errors will be coerced into generic HTTP errors. + * + * Options: + * + * - `errorLevel` - int - The level of errors you are interested in capturing. + * - `trace` - boolean - Whether or not backtraces should be included in + * logged errors/exceptions. + * - `log` - boolean - Whether or not you want exceptions logged. + * - `exceptionRenderer` - string - The class responsible for rendering + * uncaught exceptions. If you choose a custom class you should place + * the file for that class in src/Error. This class needs to implement a + * render method. + * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that + * extend one of the listed exceptions will also be skipped for logging. + * E.g.: + * `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']` + * - `extraFatalErrorMemory` - int - The number of megabytes to increase + * the memory limit by when a fatal error is encountered. This allows + * breathing room to complete logging or error handling. + */ + 'Error' => [ + 'errorLevel' => E_ALL, + 'exceptionRenderer' => 'Cake\Error\ExceptionRenderer', + 'skipLog' => [], + 'log' => true, + 'trace' => true, + ], + + /** + * Email configuration. + * + * By defining transports separately from delivery profiles you can easily + * re-use transport configuration across multiple profiles. + * + * You can specify multiple configurations for production, development and + * testing. + * + * Each transport needs a `className`. Valid options are as follows: + * + * Mail - Send using PHP mail function + * Smtp - Send using SMTP + * Debug - Do not send the email, just return the result + * + * You can add custom transports (or override existing transports) by adding the + * appropriate file to src/Mailer/Transport. Transports should be named + * 'YourTransport.php', where 'Your' is the name of the transport. + */ + 'EmailTransport' => [ + 'default' => [ + 'className' => 'Mail', + // The following keys are used in SMTP transports + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'username' => 'user', + 'password' => 'secret', + 'client' => null, + 'tls' => null, + 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), + ], + ], + + /** + * Email delivery profiles + * + * Delivery profiles allow you to predefine various properties about email + * messages from your application and give the settings a name. This saves + * duplication across your application and makes maintenance and development + * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email` + * for more information. + */ + 'Email' => [ + 'default' => [ + 'transport' => 'default', + 'from' => 'you@localhost', + //'charset' => 'utf-8', + //'headerCharset' => 'utf-8', + ], + ], + + /** + * Connection information used by the ORM to connect + * to your application's datastores. + * Do not use periods in database name - it may lead to error. + * See https://github.com/cakephp/cakephp/issues/6471 for details. + * Drivers include Mysql Postgres Sqlite Sqlserver + * See vendor\cakephp\cakephp\src\Database\Driver for complete list + */ + 'Datasources' => [ + 'default' => [ + 'className' => 'Cake\Database\Connection', + 'driver' => 'Cake\Database\Driver\Mysql', + 'persistent' => false, + 'host' => 'localhost', + /** + * CakePHP will use the default DB port based on the driver selected + * MySQL on MAMP uses port 8889, MAMP users will want to uncomment + * the following line and set the port accordingly + */ + //'port' => 'non_standard_port_number', + 'username' => 'my_app', + 'password' => 'secret', + 'database' => 'my_app', + 'encoding' => 'utf8', + 'timezone' => 'UTC', + 'flags' => [], + 'cacheMetadata' => true, + 'log' => false, + + /** + * Set identifier quoting to true if you are using reserved words or + * special characters in your table or column names. Enabling this + * setting will result in queries built using the Query Builder having + * identifiers quoted when creating SQL. It should be noted that this + * decreases performance because each query needs to be traversed and + * manipulated before being executed. + */ + 'quoteIdentifiers' => false, + + /** + * During development, if using MySQL < 5.6, uncommenting the + * following line could boost the speed at which schema metadata is + * fetched from the database. It can also be set directly with the + * mysql configuration directive 'innodb_stats_on_metadata = 0' + * which is the recommended value in production environments + */ + //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], + + 'url' => env('DATABASE_URL', null), + ], + + /** + * The test connection is used during the test suite. + */ + 'test' => [ + 'className' => 'Cake\Database\Connection', + 'driver' => 'Cake\Database\Driver\Mysql', + 'persistent' => false, + 'host' => 'localhost', + //'port' => 'non_standard_port_number', + 'username' => 'my_app', + 'password' => 'secret', + 'database' => 'test_myapp', + 'encoding' => 'utf8', + 'timezone' => 'UTC', + 'cacheMetadata' => true, + 'quoteIdentifiers' => false, + 'log' => false, + //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], + 'url' => env('DATABASE_TEST_URL', null), + ], + ], + + /** + * Configures logging options + */ + 'Log' => [ + 'debug' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'debug', + 'levels' => ['notice', 'info', 'debug'], + 'url' => env('LOG_DEBUG_URL', null), + ], + 'error' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'error', + 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], + 'url' => env('LOG_ERROR_URL', null), + ], + ], + + /** + * Session configuration. + * + * Contains an array of settings to use for session configuration. The + * `defaults` key is used to define a default preset to use for sessions, any + * settings declared here will override the settings of the default config. + * + * ## Options + * + * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. + * - `cookiePath` - The url path for which session cookie is set. Maps to the + * `session.cookie_path` php.ini config. Defaults to base path of app. + * - `timeout` - The time in minutes the session should be valid for. + * Pass 0 to disable checking timeout. + * Please note that php.ini's session.gc_maxlifetime must be equal to or greater + * than the largest Session['timeout'] in all served websites for it to have the + * desired effect. + * - `defaults` - The default configuration set to use as a basis for your session. + * There are four built-in options: php, cake, cache, database. + * - `handler` - Can be used to enable a custom session handler. Expects an + * array with at least the `engine` key, being the name of the Session engine + * class to use for managing the session. CakePHP bundles the `CacheSession` + * and `DatabaseSession` engines. + * - `ini` - An associative array of additional ini values to set. + * + * The built-in `defaults` options are: + * + * - 'php' - Uses settings defined in your php.ini. + * - 'cake' - Saves session files in CakePHP's /tmp directory. + * - 'database' - Uses CakePHP's database sessions. + * - 'cache' - Use the Cache class to save sessions. + * + * To define a custom session handler, save it at src/Network/Session/.php. + * Make sure the class implements PHP's `SessionHandlerInterface` and set + * Session.handler to + * + * To use database sessions, load the SQL file located at config/Schema/sessions.sql + */ + 'Session' => [ + 'defaults' => 'php', + ], +]; diff --git a/production/example_apps/shared_calendar/config/bootstrap.php b/production/example_apps/shared_calendar/config/bootstrap.php new file mode 100644 index 00000000..44e68fc8 --- /dev/null +++ b/production/example_apps/shared_calendar/config/bootstrap.php @@ -0,0 +1,244 @@ +getMessage() . "\n"); +} + +/* + * Load an environment local configuration file. + * You can use a file like app_local.php to provide local overrides to your + * shared configuration. + */ +//Configure::load('app_local', 'default'); + +/* + * When debug = true the metadata cache should only last + * for a short time. + */ +if (Configure::read('debug')) { + Configure::write('Cache._cake_model_.duration', '+2 minutes'); + Configure::write('Cache._cake_core_.duration', '+2 minutes'); +} + +/* + * Set server timezone to UTC. You can change it to another timezone of your + * choice but using UTC makes time calculations / conversions easier. + */ +date_default_timezone_set('UTC'); + +/* + * Configure the mbstring extension to use the correct encoding. + */ +mb_internal_encoding(Configure::read('App.encoding')); + +/* + * Set the default locale. This controls how dates, number and currency is + * formatted and sets the default language to use for translations. + */ +ini_set('intl.default_locale', Configure::read('App.defaultLocale')); + +/* + * Register application error and exception handlers. + */ +$isCli = PHP_SAPI === 'cli'; +if ($isCli) { + (new ConsoleErrorHandler(Configure::read('Error')))->register(); +} else { + (new ErrorHandler(Configure::read('Error')))->register(); +} + +/* + * Include the CLI bootstrap overrides. + */ +if ($isCli) { + require __DIR__ . '/bootstrap_cli.php'; +} + +/* + * Set the full base URL. + * This URL is used as the base of all absolute links. + * + * If you define fullBaseUrl in your config file you can remove this. + */ +if (!Configure::read('App.fullBaseUrl')) { + $s = null; + if (env('HTTPS')) { + $s = 's'; + } + + $httpHost = env('HTTP_HOST'); + if (isset($httpHost)) { + Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost); + } + unset($httpHost, $s); +} + +Cache::setConfig(Configure::consume('Cache')); +ConnectionManager::setConfig(Configure::consume('Datasources')); +Email::setConfigTransport(Configure::consume('EmailTransport')); +Email::setConfig(Configure::consume('Email')); +Log::setConfig(Configure::consume('Log')); +Security::salt(Configure::consume('Security.salt')); + +/* + * The default crypto extension in 3.0 is OpenSSL. + * If you are migrating from 2.x uncomment this code to + * use a more compatible Mcrypt based implementation + */ +//Security::engine(new \Cake\Utility\Crypto\Mcrypt()); + +/* + * Setup detectors for mobile and tablet. + */ +Request::addDetector('mobile', function ($request) { + $detector = new \Detection\MobileDetect(); + + return $detector->isMobile(); +}); +Request::addDetector('tablet', function ($request) { + $detector = new \Detection\MobileDetect(); + + return $detector->isTablet(); +}); + +/* + * Enable immutable time objects in the ORM. + * + * You can enable default locale format parsing by adding calls + * to `useLocaleParser()`. This enables the automatic conversion of + * locale specific date formats. For details see + * @link http://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data + */ +Type::build('time') + ->useImmutable(); +Type::build('date') + ->useImmutable(); +Type::build('datetime') + ->useImmutable(); +Type::build('timestamp') + ->useImmutable(); + +/* + * Custom Inflector rules, can be set to correctly pluralize or singularize + * table, model, controller names or whatever other string is passed to the + * inflection functions. + */ +//Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']); +//Inflector::rules('irregular', ['red' => 'redlings']); +//Inflector::rules('uninflected', ['dontinflectme']); +//Inflector::rules('transliteration', ['/Ã¥/' => 'aa']); + +/* + * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call + * Uncomment one of the lines below, as you need. make sure you read the documentation on Plugin to use more + * advanced ways of loading plugins + * + * Plugin::loadAll(); // Loads all plugins at once + * Plugin::load('Migrations'); //Loads a single plugin named Migrations + * + */ + +/* + * Only try to load DebugKit in development mode + * Debug Kit should not be installed on a production system + */ +if (Configure::read('debug')) { + Plugin::load('DebugKit', ['bootstrap' => true]); +} + +// added for cache key construction from array using table model. +// hmmm: could go into a trait or some other reusable asset? +function bootMultiImplode($glue, $pieces) { + $string = ''; + if (is_array ( $pieces )) { + reset ( $pieces ); + while ( list ( $key, $value ) = each ( $pieces ) ) { + if (is_numeric ( $key )) { + $string .= $glue . bootMultiImplode ( $glue, $value ); + } else { + // add string keys to string + $string .= $glue . $key . $glue . bootMultiImplode ( $glue, $value ); + } + } + } else { + + return $pieces; + } + + return trim($string, $glue); +} diff --git a/production/example_apps/shared_calendar/config/bootstrap_cli.php b/production/example_apps/shared_calendar/config/bootstrap_cli.php new file mode 100644 index 00000000..f822a557 --- /dev/null +++ b/production/example_apps/shared_calendar/config/bootstrap_cli.php @@ -0,0 +1,38 @@ +connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); + + + //CALCODE: + /* + * make a more standard re-entry point for the google oauth process. this allows us to use + * the top level path for google_login in our oauth credential, rather than worrying about the + * specific controller that implements it. + */ + $routes->connect('/google_oauth', [ 'controller'=>'authorizer', 'action' => 'google_login']); + + + /** + * ...and connect the rest of 'Pages' controller's URLs. + */ + $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); + + /** + * Connect catchall routes for all controllers. + * + * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for + * `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']);` + * `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);` + * + * Any route class can be used with this method, such as: + * - DashedRoute + * - InflectedRoute + * - Route + * - Or your own route class + * + * You can remove these routes once you've connected the + * routes you want in your application. + */ + $routes->fallbacks(DashedRoute::class); +}); + +/** + * Load all plugin routes. See the Plugin documentation on + * how to customize the loading of plugin routes. + */ +Plugin::routes(); diff --git a/production/example_apps/shared_calendar/config/schema/i18n.sql b/production/example_apps/shared_calendar/config/schema/i18n.sql new file mode 100644 index 00000000..47cf171d --- /dev/null +++ b/production/example_apps/shared_calendar/config/schema/i18n.sql @@ -0,0 +1,18 @@ +# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# +# Licensed under The MIT License +# For full copyright and license information, please see the LICENSE.txt +# Redistributions of files must retain the above copyright notice. +# MIT License (http://www.opensource.org/licenses/mit-license.php) + +CREATE TABLE i18n ( + id int NOT NULL auto_increment, + locale varchar(6) NOT NULL, + model varchar(255) NOT NULL, + foreign_key int(10) NOT NULL, + field varchar(255) NOT NULL, + content text, + PRIMARY KEY (id), + UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), + INDEX I18N_FIELD(model, foreign_key, field) +); diff --git a/production/example_apps/shared_calendar/config/schema/sessions.sql b/production/example_apps/shared_calendar/config/schema/sessions.sql new file mode 100644 index 00000000..b5a5276b --- /dev/null +++ b/production/example_apps/shared_calendar/config/schema/sessions.sql @@ -0,0 +1,13 @@ +# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# +# Licensed under The MIT License +# For full copyright and license information, please see the LICENSE.txt +# Redistributions of files must retain the above copyright notice. +# MIT License (http://www.opensource.org/licenses/mit-license.php) + +CREATE TABLE sessions ( + id char(40) NOT NULL, + data text, + expires INT(11) NOT NULL, + PRIMARY KEY (id) +); diff --git a/production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt new file mode 100644 index 00000000..77ba9a00 Binary files /dev/null and b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.odt differ diff --git a/production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf new file mode 100644 index 00000000..850665ec Binary files /dev/null and b/production/example_apps/shared_calendar/docs/google_apis_and_credentials.pdf differ diff --git a/production/example_apps/shared_calendar/docs/readme.txt b/production/example_apps/shared_calendar/docs/readme.txt new file mode 100644 index 00000000..4da1fd19 --- /dev/null +++ b/production/example_apps/shared_calendar/docs/readme.txt @@ -0,0 +1,7 @@ + + +note: +these versions are outdated and deprecated. + +the new document is available at: +https://feistymeow.org/feisty_meow/documentation/google_apis/google_apis_and_credentials.pdf diff --git a/production/example_apps/shared_calendar/index.php b/production/example_apps/shared_calendar/index.php new file mode 100644 index 00000000..fc5e39cc --- /dev/null +++ b/production/example_apps/shared_calendar/index.php @@ -0,0 +1,16 @@ + + + + + + + + + + + ./tests/TestCase + + + + + + + + + + + + + + + + + ./src/ + ./plugins/*/src/ + + + diff --git a/production/example_apps/shared_calendar/plugins/empty b/production/example_apps/shared_calendar/plugins/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/shared_calendar/scripts/launch_local_cake.sh b/production/example_apps/shared_calendar/scripts/launch_local_cake.sh new file mode 100644 index 00000000..6769f974 --- /dev/null +++ b/production/example_apps/shared_calendar/scripts/launch_local_cake.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )" +pushd $THIS_FOLDER + +# does this help? +export DEBUG=true + +./bin/cake server -p 8766 + +popd + + diff --git a/production/example_apps/shared_calendar/scripts/launch_serene_cake.sh b/production/example_apps/shared_calendar/scripts/launch_serene_cake.sh new file mode 100644 index 00000000..a7ca15f5 --- /dev/null +++ b/production/example_apps/shared_calendar/scripts/launch_serene_cake.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )" +pushd $THIS_FOLDER + +# does this help? +export DEBUG=true + +./bin/cake server -H feistymeow.com -p 12739 + +popd + + diff --git a/production/example_apps/shared_calendar/src/Application.php b/production/example_apps/shared_calendar/src/Application.php new file mode 100644 index 00000000..9c5999b8 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Application.php @@ -0,0 +1,52 @@ +add(ErrorHandlerMiddleware::class) + + // Handle plugin/theme assets like CakePHP normally does. + ->add(AssetMiddleware::class) + + // Apply routing + ->add(RoutingMiddleware::class); + + return $middleware; + } +} diff --git a/production/example_apps/shared_calendar/src/Console/Installer.php b/production/example_apps/shared_calendar/src/Console/Installer.php new file mode 100644 index 00000000..0756096c --- /dev/null +++ b/production/example_apps/shared_calendar/src/Console/Installer.php @@ -0,0 +1,195 @@ +getIO(); + + $rootDir = dirname(dirname(__DIR__)); + + static::createAppConfig($rootDir, $io); + static::createWritableDirectories($rootDir, $io); + + // ask if the permissions should be changed + if ($io->isInteractive()) { + $validator = function ($arg) { + if (in_array($arg, ['Y', 'y', 'N', 'n'])) { + return $arg; + } + throw new Exception('This is not a valid answer. Please choose Y or n.'); + }; + $setFolderPermissions = $io->askAndValidate( + 'Set Folder Permissions ? (Default to Y) [Y,n]? ', + $validator, + 10, + 'Y' + ); + + if (in_array($setFolderPermissions, ['Y', 'y'])) { + static::setFolderPermissions($rootDir, $io); + } + } else { + static::setFolderPermissions($rootDir, $io); + } + + static::setSecuritySalt($rootDir, $io); + + if (class_exists('\Cake\Codeception\Console\Installer')) { + \Cake\Codeception\Console\Installer::customizeCodeceptionBinary($event); + } + } + + /** + * Create the config/app.php file if it does not exist. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function createAppConfig($dir, $io) + { + $appConfig = $dir . '/config/app.php'; + $defaultConfig = $dir . '/config/app.default.php'; + if (!file_exists($appConfig)) { + copy($defaultConfig, $appConfig); + $io->write('Created `config/app.php` file'); + } + } + + /** + * Create the `logs` and `tmp` directories. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function createWritableDirectories($dir, $io) + { + $paths = [ + 'logs', + 'tmp', + 'tmp/cache', + 'tmp/cache/models', + 'tmp/cache/persistent', + 'tmp/cache/views', + 'tmp/sessions', + 'tmp/tests' + ]; + + foreach ($paths as $path) { + $path = $dir . '/' . $path; + if (!file_exists($path)) { + mkdir($path); + $io->write('Created `' . $path . '` directory'); + } + } + } + + /** + * Set globally writable permissions on the "tmp" and "logs" directory. + * + * This is not the most secure default, but it gets people up and running quickly. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function setFolderPermissions($dir, $io) + { + // Change the permissions on a path and output the results. + $changePerms = function ($path, $perms, $io) { + // Get permission bits from stat(2) result. + $currentPerms = fileperms($path) & 0777; + if (($currentPerms & $perms) == $perms) { + return; + } + + $res = chmod($path, $currentPerms | $perms); + if ($res) { + $io->write('Permissions set on ' . $path); + } else { + $io->write('Failed to set permissions on ' . $path); + } + }; + + $walker = function ($dir, $perms, $io) use (&$walker, $changePerms) { + $files = array_diff(scandir($dir), ['.', '..']); + foreach ($files as $file) { + $path = $dir . '/' . $file; + + if (!is_dir($path)) { + continue; + } + + $changePerms($path, $perms, $io); + $walker($path, $perms, $io); + } + }; + + $worldWritable = bindec('0000000111'); + $walker($dir . '/tmp', $worldWritable, $io); + $changePerms($dir . '/tmp', $worldWritable, $io); + $changePerms($dir . '/logs', $worldWritable, $io); + } + + /** + * Set the security.salt value in the application's config file. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function setSecuritySalt($dir, $io) + { + $config = $dir . '/config/app.php'; + $content = file_get_contents($config); + + $newKey = hash('sha256', Security::randomBytes(64)); + $content = str_replace('__SALT__', $newKey, $content, $count); + + if ($count == 0) { + $io->write('No Security.salt placeholder to replace.'); + + return; + } + + $result = file_put_contents($config, $content); + if ($result) { + $io->write('Updated Security.salt value in config/app.php'); + + return; + } + $io->write('Unable to update Security.salt value.'); + } +} diff --git a/production/example_apps/shared_calendar/src/Controller/AppController.php b/production/example_apps/shared_calendar/src/Controller/AppController.php new file mode 100644 index 00000000..c3e07579 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Controller/AppController.php @@ -0,0 +1,103 @@ +loadComponent('Security');` + * + * @return void + */ + public function initialize() + { + parent::initialize(); + + $this->loadComponent('RequestHandler'); + $this->loadComponent('Flash'); + + /* + * Enable the following components for recommended CakePHP security settings. + * see http://book.cakephp.org/3.0/en/controllers/components/security.html + */ + //$this->loadComponent('Security'); + //$this->loadComponent('Csrf'); + +/* not necessarily what we want. +//CALCODE: + $this->loadComponent('Auth', [ + 'loginAction' => [ + 'controller' => 'Users', + 'action' => 'authorize', + ], + 'authenticate' => [ + 'Form' => [ + 'fields' => [ + 'username' => 'email', + 'password' => 'password' + ] + ] + ], + 'authError' => __('You do not have permission to access this page'), + 'authorize' => ['Controller'], + 'unauthorizedRedirect' => [ + 'controller' => 'Users', + 'action' => 'forbidden' + ], + 'loginRedirect' => [ + 'controller' => 'Users', + 'action' => 'show_calendar' + ], + 'logoutRedirect' => [ + 'controller' => 'Users', + 'action' => 'authorize' + ] + ]); + + $this->Auth->allow(['authorize', 'googleLogin']); +*/ + } + + /** + * Before render callback. + * + * @param \Cake\Event\Event $event The beforeRender event. + * @return \Cake\Network\Response|null|void + */ + public function beforeRender(Event $event) + { + if (!array_key_exists('_serialize', $this->viewVars) && + in_array($this->response->type(), ['application/json', 'application/xml']) + ) { + $this->set('_serialize', true); + } + } +} diff --git a/production/example_apps/shared_calendar/src/Controller/AuthorizerController.php b/production/example_apps/shared_calendar/src/Controller/AuthorizerController.php new file mode 100644 index 00000000..5ae43869 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Controller/AuthorizerController.php @@ -0,0 +1,83 @@ +connect('/google_oauth', [ 'controller'=>'authorizer', 'action' => 'google_login']); + */ + + public function initialize() + { + parent::initialize(); + } + + /** + * our callback from google oauth that is passed the oauth access token (or an error + * if authorization failed). + * before redirecting to this URL, one must use the GoogleOauth trait's + * setPostAuthorizationURL() and setRequestedScopes() methods to provide session + * parameters (since this link is invoked by google later, and they will not be + * providing any of this info). + */ + public function googleLogin() { + if (session_status() == PHP_SESSION_NONE) { + session_start (); + } + + // retrieve the scopes out of the session. + $scopes = $this->getRequestedScopes(); + Log::debug('loaded scopes: ' . var_export($scopes, true)); + + // use the scopes in a new google client. + $client = $this->createGoogleClient ( $scopes ); + + // see if we already have the 'code' available from the google side. + if (! isset ( $_GET ['code'] )) { + // no code, so we need to jump over to google. + Log::Debug ( 'creating auth url to redirect to google oauth' ); + $auth_url = $client->createAuthUrl (); + $this->redirect ( $auth_url ); + } else { + // we've got our code, so now we can try to fetch our access token. + Log::Debug ( 'access token being actively acquired...' ); + $client->fetchAccessTokenWithAuthCode ( $_GET ['code'] ); + // clean out the scopes in session now that we're done with them. + $this->dropRequestedScopes(); + + // record the new token in our session. + $token = $client->getAccessToken (); + $this->setLastOAuthToken($token); + + // fabulously bad idea to show this... + //Log::debug ( 'got access token: ' . var_export ( $token, true ) ); + + // go to the next point in our app where we can handle the newly stored token. + $redirect = $this->getPostAuthorizationURL(); + if (! $redirect) { + // jump home if they registered no continuation. this is a serious error in flow. + $redirect = 'http://' . $_SERVER ['HTTP_HOST'] . '/'; + Log::debug('failure to find the redirection location for our app after successful oauth'); + } + $this->redirect ( $redirect ); + } + } + +} diff --git a/production/example_apps/shared_calendar/src/Controller/ErrorController.php b/production/example_apps/shared_calendar/src/Controller/ErrorController.php new file mode 100644 index 00000000..cf0ebd5b --- /dev/null +++ b/production/example_apps/shared_calendar/src/Controller/ErrorController.php @@ -0,0 +1,68 @@ +loadComponent('RequestHandler'); + } + + /** + * beforeFilter callback. + * + * @param \Cake\Event\Event $event Event. + * @return \Cake\Network\Response|null|void + */ + public function beforeFilter(Event $event) + { + } + + /** + * beforeRender callback. + * + * @param \Cake\Event\Event $event Event. + * @return \Cake\Network\Response|null|void + */ + public function beforeRender(Event $event) + { + parent::beforeRender($event); + + $this->viewBuilder()->setTemplatePath('Error'); + } + + /** + * afterFilter callback. + * + * @param \Cake\Event\Event $event Event. + * @return \Cake\Network\Response|null|void + */ + public function afterFilter(Event $event) + { + } +} diff --git a/production/example_apps/shared_calendar/src/Controller/PagesController.php b/production/example_apps/shared_calendar/src/Controller/PagesController.php new file mode 100644 index 00000000..55792c8e --- /dev/null +++ b/production/example_apps/shared_calendar/src/Controller/PagesController.php @@ -0,0 +1,69 @@ +redirect('/'); + } + if (in_array('..', $path, true) || in_array('.', $path, true)) { + throw new ForbiddenException(); + } + $page = $subpage = null; + + if (!empty($path[0])) { + $page = $path[0]; + } + if (!empty($path[1])) { + $subpage = $path[1]; + } + $this->set(compact('page', 'subpage')); + + try { + $this->render(implode('/', $path)); + } catch (MissingTemplateException $e) { + if (Configure::read('debug')) { + throw $e; + } + throw new NotFoundException(); + } + } +} diff --git a/production/example_apps/shared_calendar/src/Controller/UsersController.php b/production/example_apps/shared_calendar/src/Controller/UsersController.php new file mode 100644 index 00000000..53a91274 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Controller/UsersController.php @@ -0,0 +1,309 @@ +name) .'-'; + // av_ prefix so we can delete all files generated in cache/sql/ except for .gitignore + + $locales = Configure::read('avenger.locales'); + if(!empty($locales)) { + $prefix .= Configure::read('Config.language') .'-'; + } + Log::debug('cache prefix will be: ' . $prefix); + + // configure a file cache for storing calendar data. + Cache::config('calendar_cache', [ + 'className' => 'File', + 'prefix' => $prefix, + 'duration' => '+2 hours', + ]); + } + + /** + * Index method + * + * @return \Cake\Http\Response|void + */ + public function index() { + $users = $this->paginate ( $this->Users ); + + $this->set ( compact ( 'users' ) ); + $this->set ( '_serialize', [ + 'users' + ] ); + } + + /** + * View method + * + * @param string|null $id + * User id. + * @return \Cake\Http\Response|void + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function view($id = null) { + $user = $this->Users->get ( $id, [ + 'contain' => [ ] + ] ); + + $this->set ( 'user', $user ); + $this->set ( '_serialize', [ + 'user' + ] ); + } + + /** + * prepares the google oauth process by stuffing required information into the session. + * we'll then redirect over to the authorizer controller to get the work done. + */ + public function requestGoogleOauth($id) + { + //hmmm: if no id, bail out to error page. + + Log::debug("into requestGoogleOauth..."); + + if (session_status() == PHP_SESSION_NONE) { + session_start (); + } + + // add the post-authorization redirect url for the auth controller. + $this->setPostAuthorizationURL('/users/callback/' . $id); + // set the scopes that we want to request. + $this->setRequestedScopes([Google_Service_Calendar::CALENDAR_READONLY]); + +// //temp +// $urlcheck = $_SESSION[$this->POST_AUTHORIZATION_JUMP()]; +// Log::debug('callback url found in session: ' . var_export($urlcheck, true)); +// $scopecheck = $_SESSION[$this->POST_AUTHORIZATION_JUMP()]; +// Log::debug('scopes found in session: ' . var_export($scopecheck , true)); + + Log::debug("before redirecting from requestGoogleOauth..."); + + // get the user to authorize us, and subsequently we'll record the access token. + $this->redirect ( [ + 'controller' => 'Authorizer', + 'action' => 'googleLogin' + ] ); + } + + /** + * Add method + * + * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise. + */ + public function add() { + session_start (); + + $user = $this->Users->newEntity (); + if ($this->request->is ( 'post' )) { + $user = $this->Users->patchEntity ( $user, $this->request->getData () ); + if ($this->Users->save ( $user )) { + $this->Flash->success ( __ ( 'The user has been saved.' ) ); + // now get the oauth mojo working... + $this->requestGoogleOauth($user->id); + return; + } + $this->Flash->error ( __ ( 'The user could not be saved. Please, try again.' ) ); + } + $this->set ( compact ( 'user' ) ); + $this->set ( '_serialize', [ + 'user' + ] ); + } + + /** + * a whole bunch of redirection happens when the oauth process starts, but this is our + * return point for this application after all that's done. this is registered as the + * post authorization redirection location, and should have a valid access token available + * for the specified user. + * + * @param unknown $id + */ + public function callback($id) { + Log::debug ( 'got to the users controller callback' ); + + $user = $this->Users->get ( $id ); + + // retrieve the access token, which is hopefully totally valid now... + $token = $this->getLastOAuthToken (); + if ($token) { + $user->token = json_encode ( $token ); + $this->Users->save ( $user ); + } + $this->set ( 'user', $user ); + $this->set ( '_serialize', [ + 'user' + ] ); + } + + /** + * Edit method + * + * @param string|null $id + * User id. + * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise. + * @throws \Cake\Network\Exception\NotFoundException When record not found. + */ + public function edit($id = null) { + $user = $this->Users->get ( $id, [ + 'contain' => [ ] + ] ); + if ($this->request->is ( [ + 'patch', + 'post', + 'put' + ] )) { + $user = $this->Users->patchEntity ( $user, $this->request->getData () ); + if ($this->Users->save ( $user )) { + $this->Flash->success ( __ ( 'The user has been saved.' ) ); + + return $this->redirect ( [ + 'action' => 'index' + ] ); + } + $this->Flash->error ( __ ( 'The user could not be saved. Please, try again.' ) ); + } + $this->set ( compact ( 'user' ) ); + $this->set ( '_serialize', [ + 'user' + ] ); + } + + /** + * Delete method + * + * @param string|null $id + * User id. + * @return \Cake\Http\Response|null Redirects to index. + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function delete($id = null) { + $this->request->allowMethod ( [ + 'post', + 'delete' + ] ); + $user = $this->Users->get ( $id ); + if ($this->Users->delete ( $user )) { + $this->Flash->success ( __ ( 'The user has been deleted.' ) ); + } else { + $this->Flash->error ( __ ( 'The user could not be deleted. Please, try again.' ) ); + } + + return $this->redirect ( [ + 'action' => 'index' + ] ); + } + + /** + * shows the upcoming appointments on the calendar. + */ + public function showCalendar($id) { + Log::debug ( 'into the show calendar method' ); + + session_start (); + + $user = $this->Users->get ( $id ); + + if (! $user->token) { + // apparently we need to re-acquire this for the user. + // NOTE: in real app, this will be a failure and a place to send email. + $this->requestGoogleOauth($id); + return; + } + $accessToken = json_decode ( $user->token, true ); + + $client = $this->createGoogleClient( [ + Google_Service_Calendar::CALENDAR_READONLY + ] ); + + $client->setAccessToken ( $accessToken ); + + // make sure that the token is still valid, and if not, refresh it. + $newToken = $this->freshenTokenInClient($client); + if ($newToken) { + // save the new token in the db again. + $accessToken = $newToken; + $user->token = json_encode ( $accessToken ); + $this->Users->save ( $user ); + } + + // start from beginning of today. + $start = new DateTime(); + $start->setTime(0, 0); + + // see if we have a cached calendar available. + $cacheKey = 'cal-' . $id . '--' . $start->format('Y-m-d_H-i-s'); + $calEvents = Cache::read($cacheKey, 'calendar_cache'); + if ($calEvents) { + Log::debug('found cached events for calendar.'); + } else { + // an unfortunate kludge below; if we delay calling the google listEvents method, + // we can get an exception that requires reauthorization. but the view cell has no + // way to get to the controller to start the authorization process again, so we do + // it here instead. + $calEvents = GoogleCalendarCell::prepareCalendar($client, $start); + Log::debug('contacted google to get events for calendar.'); + if (! $calEvents) { + // we have lost our authorization somehow. + $this->requestGoogleOauth($id); + return; + } + Cache::write($cacheKey, $calEvents, 'calendar_cache'); + } + $this->set('calEvents', $calEvents); + $this->set ( '_serialize', [ + 'calEvents' + ] ); + } + + /** + * revokes authorization granted by google for current token. + */ + public function revoke($id) { + $user = $this->Users->get ( $id ); + + $this->set ( 'user', $user ); + $this->set ( '_serialize', [ + 'user' + ] ); + + $token = json_decode ( $user->token, true ); + + Log::debug ( 'revoking token: ' . var_export ( $token, true ) ); + + $this->revokeToken($token); + Log::debug ( 'after revoking the access token.' ); + + // update with no token. + $user->token = null; + $this->Users->save ( $user ); + } + + +} diff --git a/production/example_apps/shared_calendar/src/Model/Behavior/empty b/production/example_apps/shared_calendar/src/Model/Behavior/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/shared_calendar/src/Model/Entity/User.php b/production/example_apps/shared_calendar/src/Model/Entity/User.php new file mode 100644 index 00000000..316bf708 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Model/Entity/User.php @@ -0,0 +1,40 @@ + true, + 'id' => false + ]; + + /** + * Fields that are excluded from JSON versions of the entity. + * + * @var array + */ + protected $_hidden = [ + 'token' + ]; +} diff --git a/production/example_apps/shared_calendar/src/Model/Table/UsersTable.php b/production/example_apps/shared_calendar/src/Model/Table/UsersTable.php new file mode 100644 index 00000000..8f7040df --- /dev/null +++ b/production/example_apps/shared_calendar/src/Model/Table/UsersTable.php @@ -0,0 +1,63 @@ +setTable('users'); + $this->setDisplayField('name'); + $this->setPrimaryKey('id'); + + $this->addBehavior('Timestamp'); + } + + /** + * Default validation rules. + * + * @param \Cake\Validation\Validator $validator Validator instance. + * @return \Cake\Validation\Validator + */ + public function validationDefault(Validator $validator) + { + $validator + ->integer('id') + ->allowEmpty('id', 'create'); + + $validator + ->requirePresence('name', 'create') + ->notEmpty('name'); + + $validator + ->allowEmpty('token'); + + return $validator; + } +} diff --git a/production/example_apps/shared_calendar/src/Shell/ConsoleShell.php b/production/example_apps/shared_calendar/src/Shell/ConsoleShell.php new file mode 100644 index 00000000..c84bd97a --- /dev/null +++ b/production/example_apps/shared_calendar/src/Shell/ConsoleShell.php @@ -0,0 +1,81 @@ +err('Unable to load Psy\Shell.'); + $this->err(''); + $this->err('Make sure you have installed psysh as a dependency,'); + $this->err('and that Psy\Shell is registered in your autoloader.'); + $this->err(''); + $this->err('If you are using composer run'); + $this->err(''); + $this->err('$ php composer.phar require --dev psy/psysh'); + $this->err(''); + + return self::CODE_ERROR; + } + + $this->out("You can exit with `CTRL-C` or `exit`"); + $this->out(''); + + Log::drop('debug'); + Log::drop('error'); + $this->_io->setLoggers(false); + restore_error_handler(); + restore_exception_handler(); + + $psy = new PsyShell(); + $psy->run(); + } + + /** + * Display help for this console. + * + * @return \Cake\Console\ConsoleOptionParser + */ + public function getOptionParser() + { + $parser = new ConsoleOptionParser('console'); + $parser->setDescription( + 'This shell provides a REPL that you can use to interact ' . + 'with your application in an interactive fashion. You can use ' . + 'it to run adhoc queries with your models, or experiment ' . + 'and explore the features of CakePHP and your application.' . + "\n\n" . + 'You will need to have psysh installed for this Shell to work.' + ); + + return $parser; + } +} diff --git a/production/example_apps/shared_calendar/src/Template/Cell/GoogleCalendar/display.ctp b/production/example_apps/shared_calendar/src/Template/Cell/GoogleCalendar/display.ctp new file mode 100644 index 00000000..a7d812fe --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Cell/GoogleCalendar/display.ctp @@ -0,0 +1,27 @@ + +
+ + + $events): ?> + + + + + +
+ + + + + + + +
+
+
diff --git a/production/example_apps/shared_calendar/src/Template/Element/Flash/default.ctp b/production/example_apps/shared_calendar/src/Template/Element/Flash/default.ctp new file mode 100644 index 00000000..736b27db --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Element/Flash/default.ctp @@ -0,0 +1,10 @@ + +
diff --git a/production/example_apps/shared_calendar/src/Template/Element/Flash/error.ctp b/production/example_apps/shared_calendar/src/Template/Element/Flash/error.ctp new file mode 100644 index 00000000..e7c4af10 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Element/Flash/error.ctp @@ -0,0 +1,6 @@ + +
diff --git a/production/example_apps/shared_calendar/src/Template/Element/Flash/success.ctp b/production/example_apps/shared_calendar/src/Template/Element/Flash/success.ctp new file mode 100644 index 00000000..becd5a1f --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Element/Flash/success.ctp @@ -0,0 +1,6 @@ + +
diff --git a/production/example_apps/shared_calendar/src/Template/Email/html/default.ctp b/production/example_apps/shared_calendar/src/Template/Email/html/default.ctp new file mode 100644 index 00000000..386674a1 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Email/html/default.ctp @@ -0,0 +1,22 @@ + + ' . $line . "

\n"; +endforeach; +?> diff --git a/production/example_apps/shared_calendar/src/Template/Email/text/default.ctp b/production/example_apps/shared_calendar/src/Template/Email/text/default.ctp new file mode 100644 index 00000000..704b46f0 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Email/text/default.ctp @@ -0,0 +1,16 @@ + + diff --git a/production/example_apps/shared_calendar/src/Template/Error/error400.ctp b/production/example_apps/shared_calendar/src/Template/Error/error400.ctp new file mode 100644 index 00000000..2aebac6c --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Error/error400.ctp @@ -0,0 +1,38 @@ +layout = 'error'; + +if (Configure::read('debug')): + $this->layout = 'dev_error'; + + $this->assign('title', $message); + $this->assign('templateName', 'error400.ctp'); + + $this->start('file'); +?> +queryString)) : ?> +

+ SQL Query: + queryString) ?> +

+ +params)) : ?> + SQL Query Params: + params) ?> + +element('auto_table_warning') ?> +end(); +endif; +?> +

+

+ : + '{$url}'") ?> +

diff --git a/production/example_apps/shared_calendar/src/Template/Error/error500.ctp b/production/example_apps/shared_calendar/src/Template/Error/error500.ctp new file mode 100644 index 00000000..d8014f84 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Error/error500.ctp @@ -0,0 +1,43 @@ +layout = 'error'; + +if (Configure::read('debug')): + $this->layout = 'dev_error'; + + $this->assign('title', $message); + $this->assign('templateName', 'error500.ctp'); + + $this->start('file'); +?> +queryString)) : ?> +

+ SQL Query: + queryString) ?> +

+ +params)) : ?> + SQL Query Params: + params) ?> + + + Error in: + getFile()), $error->getLine()) ?> + +element('auto_table_warning'); + + if (extension_loaded('xdebug')): + xdebug_print_function_stack(); + endif; + + $this->end(); +endif; +?> +

+

+ : + +

diff --git a/production/example_apps/shared_calendar/src/Template/Layout/Email/html/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/Email/html/default.ctp new file mode 100644 index 00000000..2b439700 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Layout/Email/html/default.ctp @@ -0,0 +1,24 @@ + + + + + <?= $this->fetch('title') ?> + + + fetch('content') ?> + + diff --git a/production/example_apps/shared_calendar/src/Template/Layout/Email/text/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/Email/text/default.ctp new file mode 100644 index 00000000..871dcfb4 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Layout/Email/text/default.ctp @@ -0,0 +1,16 @@ + +fetch('content') ?> diff --git a/production/example_apps/shared_calendar/src/Template/Layout/ajax.ctp b/production/example_apps/shared_calendar/src/Template/Layout/ajax.ctp new file mode 100644 index 00000000..871dcfb4 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Layout/ajax.ctp @@ -0,0 +1,16 @@ + +fetch('content') ?> diff --git a/production/example_apps/shared_calendar/src/Template/Layout/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/default.ctp new file mode 100644 index 00000000..8988302a --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Layout/default.ctp @@ -0,0 +1,57 @@ + + + + + Html->charset() ?> + + + <?= $cakeDescription ?>: + <?= $this->fetch('title') ?> + + Html->meta('icon') ?> + + Html->css('base.css') ?> + Html->css('cake.css') ?> + + fetch('meta') ?> + fetch('css') ?> + fetch('script') ?> + + + + Flash->render() ?> +
+ fetch('content') ?> +
+
+
+ + diff --git a/production/example_apps/shared_calendar/src/Template/Layout/error.ctp b/production/example_apps/shared_calendar/src/Template/Layout/error.ctp new file mode 100644 index 00000000..5304ec43 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Layout/error.ctp @@ -0,0 +1,47 @@ + + + + + Html->charset() ?> + + <?= $this->fetch('title') ?> + + Html->meta('icon') ?> + + Html->css('base.css') ?> + Html->css('cake.css') ?> + + fetch('meta') ?> + fetch('css') ?> + fetch('script') ?> + + +
+ +
+ Flash->render() ?> + + fetch('content') ?> +
+ +
+ + diff --git a/production/example_apps/shared_calendar/src/Template/Layout/rss/default.ctp b/production/example_apps/shared_calendar/src/Template/Layout/rss/default.ctp new file mode 100644 index 00000000..5c15a198 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Layout/rss/default.ctp @@ -0,0 +1,14 @@ +fetch('title'); +endif; + +echo $this->Rss->document( + $this->Rss->channel( + [], $channel, $this->fetch('content') + ) +); +?> diff --git a/production/example_apps/shared_calendar/src/Template/Pages/home.ctp b/production/example_apps/shared_calendar/src/Template/Pages/home.ctp new file mode 100644 index 00000000..2bb441ac --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Pages/home.ctp @@ -0,0 +1,342 @@ +layout = false; + +if (! Configure::read ( 'debug' )) : + throw new NotFoundException ( 'Please replace src/Template/Pages/home.ctp with your own version.' ); +endif; + +$cakeDescription = 'CakePHP: the rapid development PHP framework'; +?> + + + + Html->charset() ?> + + + <?= $cakeDescription ?> + + + Html->meta('icon') ?> + Html->css('base.css') ?> + Html->css('cake.css') ?> + Html->css('home.css') ?> + + + + + + +
+
Html->image('cake.logo.svg') ?>
+
+

Welcome to CakePHP Red Velvet. Build fast. Grow solid.

+
+
+ +
+ +
+ + + +
+
+
+

Please be aware that this page will not be shown if you turn off + debug mode unless you replace src/Template/Pages/home.ctp with your + own version.

+
+
+ +
+ +
+
+ +
+
+

Environment

+
    + =')): ?> +
  • Your version of PHP is 5.6.0 or higher (detected ).
  • + +
  • Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected ).
  • + + + +
  • Your version of PHP has the + mbstring extension loaded.
  • + +
  • Your version of PHP does NOT have + the mbstring extension loaded.
  • ; + + + +
  • Your version of PHP has the + openssl extension loaded.
  • + +
  • Your version of PHP has the + mcrypt extension loaded.
  • + +
  • Your version of PHP does NOT have + the openssl or mcrypt extension loaded.
  • + + + +
  • Your version of PHP has the intl + extension loaded.
  • + +
  • Your version of PHP does NOT have + the intl extension loaded.
  • + +
+
+
+

Filesystem

+
    + +
  • Your tmp directory is writable.
  • + +
  • Your tmp directory is NOT + writable.
  • + + + +
  • Your logs directory is writable.
  • + +
  • Your logs directory is NOT + writable.
  • + + + + +
  • The Engine + is being used for core caching. To change the config edit + config/app.php +
  • + +
  • Your cache is NOT working. Please + check the settings in config/app.php
  • + +
+
+
+
+ +
+
+

Database

+ connect (); + } catch ( Exception $connectionError ) { + $connected = false; + $errorMsg = $connectionError->getMessage (); + if (method_exists ( $connectionError, 'getAttributes' )) : + $attributes = $connectionError->getAttributes (); + if (isset ( $errorMsg ['message'] )) : + $errorMsg .= '
' . $attributes ['message']; + endif; + endif; + + + } + ?> +
    + +
  • CakePHP is able to connect to the + database.
  • + +
  • CakePHP is NOT able to connect to + the database.
  • + +
+
+
+

DebugKit

+
    + +
  • DebugKit is loaded.
  • + +
  • DebugKit is NOT loaded. You need + to either install pdo_sqlite, or define the "debug_kit" connection + name.
  • + +
+
+
+
+ +
+
+

Editing this Page

+
    +
  • To change the content of this page, edit: + src/Template/Pages/home.ctp.
  • +
  • You can also add some CSS styles for your + pages at: webroot/css/.
  • +
+
+ +
+ +
+
+

More about Cake

+

+ CakePHP is a rapid development framework for PHP which uses commonly + known design patterns like Front Controller and MVC.
Our + primary goal is to provide a structured framework that enables PHP + users at all levels to rapidly develop robust web applications, + without any loss to flexibility. +

+
+
+
+ +
+
+ P +

Help and Bug Reports

+ +
+
+ r +

Docs and Downloads

+ +
+
+ s +

Training and Certification

+ +
+
+ + + diff --git a/production/example_apps/shared_calendar/src/Template/Users/add.ctp b/production/example_apps/shared_calendar/src/Template/Users/add.ctp new file mode 100644 index 00000000..1b7e2076 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/add.ctp @@ -0,0 +1,23 @@ + + +
+ Form->create($user) ?> +
+ + Form->control('name'); +// echo $this->Form->control('token'); + ?> +
+ Form->button(__('Submit')) ?> + Form->end() ?> +
diff --git a/production/example_apps/shared_calendar/src/Template/Users/callback.ctp b/production/example_apps/shared_calendar/src/Template/Users/callback.ctp new file mode 100644 index 00000000..23506e4f --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/callback.ctp @@ -0,0 +1,20 @@ + + +
+

+ token? 'Authorization successful for ' . $user->name + : 'Failed authorization for ' . $user->name ) ?> +

+
+ + diff --git a/production/example_apps/shared_calendar/src/Template/Users/edit.ctp b/production/example_apps/shared_calendar/src/Template/Users/edit.ctp new file mode 100644 index 00000000..880cde87 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/edit.ctp @@ -0,0 +1,29 @@ + + +
+ Form->create($user) ?> +
+ + Form->control('name'); + echo $this->Form->control('token'); + ?> +
+ Form->button(__('Submit')) ?> + Form->end() ?> +
diff --git a/production/example_apps/shared_calendar/src/Template/Users/index.ctp b/production/example_apps/shared_calendar/src/Template/Users/index.ctp new file mode 100644 index 00000000..953e2adf --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/index.ctp @@ -0,0 +1,55 @@ + + +
+

+ + + + + + + + + + + + + + + + + + + + + + + +
Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('token') ?>Paginator->sort('created') ?>Paginator->sort('modified') ?>
Number->format($user->id) ?>name) ?>token) ?>created) ?>modified) ?> + Html->link(__('Calendar'), ['action' => 'showCalendar', $user->id]) ?> + Html->link(__('View'), ['action' => 'view', $user->id]) ?> + + Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?> + Html->link(__('Revoke'), ['action' => 'revoke', $user->id], ['confirm' => __('Are you *SURE* you want to revoke authorization # {0}? This will totally drop that authorization, which you cannot re-add unless you are the original user that stored it.', $user->id)]) ?> +
+
+
    + Paginator->first('<< ' . __('first')) ?> + Paginator->prev('< ' . __('previous')) ?> + Paginator->numbers() ?> + Paginator->next(__('next') . ' >') ?> + Paginator->last(__('last') . ' >>') ?> +
+

Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

+
+
diff --git a/production/example_apps/shared_calendar/src/Template/Users/revoke.ctp b/production/example_apps/shared_calendar/src/Template/Users/revoke.ctp new file mode 100644 index 00000000..57d2e8aa --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/revoke.ctp @@ -0,0 +1,16 @@ + + +
+

name) ?>

+ +
diff --git a/production/example_apps/shared_calendar/src/Template/Users/show_calendar.ctp b/production/example_apps/shared_calendar/src/Template/Users/show_calendar.ctp new file mode 100644 index 00000000..9a60d980 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/show_calendar.ctp @@ -0,0 +1,21 @@ + + +
+

upcoming appointments

+ + cell('GoogleCalendar', [$calEvents]); + ?> + + +
diff --git a/production/example_apps/shared_calendar/src/Template/Users/view.ctp b/production/example_apps/shared_calendar/src/Template/Users/view.ctp new file mode 100644 index 00000000..cdfc7085 --- /dev/null +++ b/production/example_apps/shared_calendar/src/Template/Users/view.ctp @@ -0,0 +1,40 @@ + + +
+

name) ?>

+ + + + + + + + + + + + + + + + + + + + + +
name) ?>
token) ?>
Number->format($user->id) ?>
created) ?>
modified) ?>
+
diff --git a/production/example_apps/shared_calendar/src/Traits/GoogleOauthTrait.php b/production/example_apps/shared_calendar/src/Traits/GoogleOauthTrait.php new file mode 100644 index 00000000..847a2aea --- /dev/null +++ b/production/example_apps/shared_calendar/src/Traits/GoogleOauthTrait.php @@ -0,0 +1,230 @@ +POST_AUTHORIZATION_JUMP()] = $url; + } + + /** + * retrieves any post authorization url that was registered. + * this destroys the item in the session also, so it is available for a single use. + */ + public function getPostAuthorizationURL() + { + if (session_status() == PHP_SESSION_NONE) { + Log::debug('starting session for get post auth url'); + session_start(); + } + if (isset ( $_SESSION [$this->POST_AUTHORIZATION_JUMP()] ) && $_SESSION [$this->POST_AUTHORIZATION_JUMP()]) { + $url = $_SESSION [$this->POST_AUTHORIZATION_JUMP()]; + Log::debug('loaded url for post auth as: ' . $url); + unset($_SESSION[$this->POST_AUTHORIZATION_JUMP()]); + return $url; + } else { + Log::debug('could not find post authorization url in session!'); + + return null; + } + } + + /** + * before we can request oauth authorization, we need to know the scopes that will be used + * by our application. this allows them to be set in the session, where scopes should be an + * array of valid scope names (defined by the google oauth API). + */ + public function setRequestedScopes($scopes) + { + if (session_status() == PHP_SESSION_NONE) { + Log::debug('starting session for set req scopes'); + session_start(); + } + $_SESSION [$this->OAUTH_SCOPES_REQUESTED()] = $scopes; + } + + /** + * gets the array of scopes out of the session for use by the next oauth call. + * this will NOT destroy the scopes; that must be done manually with dropRequestedScopes + * below, since we need this session item multiple times. + */ + public function getRequestedScopes() + { + if (session_status() == PHP_SESSION_NONE) { + Log::debug('starting session for get req scopes'); + session_start(); + } + if (isset ( $_SESSION [$this->OAUTH_SCOPES_REQUESTED()] ) && $_SESSION [$this->OAUTH_SCOPES_REQUESTED()]) { + $scopes = $_SESSION [$this->OAUTH_SCOPES_REQUESTED()]; + return $scopes; + } else { + return null; + } + } + + /** + * throws the requested scopes out of the session. + */ + public function dropRequestedScopes() + { + if (session_status() == PHP_SESSION_NONE) { + Log::debug('starting session for drop req scopes'); + session_start(); + } + unset($_SESSION[$this->OAUTH_SCOPES_REQUESTED()]); + } + + + /** + * saves the result of oauth authorization, an access token, into the session. + */ + public function setLastOAuthToken($token) + { + if (session_status() == PHP_SESSION_NONE) { + Log::debug('starting session for set last oauth token'); + session_start(); + } + $_SESSION [$this->STORED_OAUTH_TOKEN()] = $token; + } + + /** + * retrieves the last stored oauth token. this destroys the item in the session + * afterwards, so you get one chance for retrieval of the token. + */ + public function getLastOAuthToken() + { + if (session_status() == PHP_SESSION_NONE) { + Log::debug('starting session for set last oauth token'); + session_start(); + } + if (isset ( $_SESSION [$this->STORED_OAUTH_TOKEN()] ) && $_SESSION [$this->STORED_OAUTH_TOKEN()]) { + $token = $_SESSION [$this->STORED_OAUTH_TOKEN()]; + unset($_SESSION[$this->STORED_OAUTH_TOKEN()]); + return $token; + } else { + return null; + } + } + + /** + * sets up and configures the Google client object using a 'client_secret.json' file + * stored in the config directory. A scope name or an array of scopes should be passed + * in the "scopes" parameter. if the "redirectUri" parameter is not null, then this is set + * as the singular redirection URI (which is needed if the client secret has several redirect + * URIs listed). + */ + public function createGoogleClient($scopes, $redirectUri = null) { + $client = new Google_Client (); + + // see https://developers.google.com/api-client-library/php/auth/web-app for info on creating the secret. + $client->setAuthConfig ( 'config/client_secret.json' ); + + // use the redirect link if they gave us one. + if ($redirectUri) { + $client->setRedirectUri ( $redirectUri ); + } + + // register for offline access, so we don't need user to be logged in. + $client->setAccessType ( "offline" ); + // enable incremental authorization. + $client->setIncludeGrantedScopes ( true ); + + // add the scope(s) we're interested in here. + $client->addScope ( $scopes ); + + return $client; + } + + /** + * *deprecated* creates a google client configured by discrete parameters. + * + * note: does not free one to use just any redirect url for login; that's set at credential creation time. + */ + public function createGoogleClientUsingParameters($clientId, $clientSecret, $applicationName, $redirectUri, $scopes) { + $client = new Google_Client (); + + // see https://developers.google.com/api-client-library/php/auth/web-app for info on creating the secret. + $client->setClientId ( $clientId ); + $client->setClientSecret ( $clientSecret ); + $client->setApplicationName ( $applicationName ); + $client->setRedirectUri ( $redirectUri ); + + // register for offline access, so we don't need user to be logged in. + $client->setAccessType ( "offline" ); + // enable incremental authorization. + $client->setIncludeGrantedScopes ( true ); + + // add the scope we're interested in here. + $client->addScope ( $scopes); + + return $client; + } + + /** + * checks whether the google client object's token is still valid. if not, the token is refreshed. + * this will only work with tokens that were originally requested for offline access and that possess + * the refresh token. + * if the refresh was done, the newly revitalized token is returned and must be stored. + * if the token is already okay, then null is returned (which avoids tricky comparisons to + * determine if an update happened). + */ + public function freshenTokenInClient($client) + { + if (! $client->isAccessTokenExpired ()) { + // no refresh needed. + return null; + } + // currently assuming the new access token also contains the old refresh token. + // this has been borne out by results from google. + Log::debug ( 'noticed that the access token has expired!' ); + + // retrieve a new access token using our refresh token. + $refresher = $client->getRefreshToken (); + $client->fetchAccessTokenWithRefreshToken ( $refresher ); + $accessToken = $client->getAccessToken (); + + //bad! do not show this in real app. + //Log::debug ( 'got a new access token after refresh: ' . var_export ( $accessToken, true ) ); + + // return the new and tasty token. + return $accessToken; + } + + /** + * throws out the specified access token, which means that the app will have to reauthorize + * to get another token. + */ + public function revokeToken($token) + { + $client = new Google_Client (); + // apparently the client needs very little setup to perform this if we have the whole token? + $client->revokeToken ( $token ); + } +} + +/* + * hmmm: still need a method for doing additive authorizations, where we request new scopes and + * have them bundled onto our existing access token. would need to store the token afterwards also. + */ + + diff --git a/production/example_apps/shared_calendar/src/View/AjaxView.php b/production/example_apps/shared_calendar/src/View/AjaxView.php new file mode 100644 index 00000000..594e2d80 --- /dev/null +++ b/production/example_apps/shared_calendar/src/View/AjaxView.php @@ -0,0 +1,49 @@ +response->type('ajax'); + } +} diff --git a/production/example_apps/shared_calendar/src/View/AppView.php b/production/example_apps/shared_calendar/src/View/AppView.php new file mode 100644 index 00000000..fd52ba69 --- /dev/null +++ b/production/example_apps/shared_calendar/src/View/AppView.php @@ -0,0 +1,40 @@ +loadHelper('Html');` + * + * @return void + */ + public function initialize() + { + } +} diff --git a/production/example_apps/shared_calendar/src/View/Cell/GoogleCalendarCell.php b/production/example_apps/shared_calendar/src/View/Cell/GoogleCalendarCell.php new file mode 100644 index 00000000..b1ccf47a --- /dev/null +++ b/production/example_apps/shared_calendar/src/View/Cell/GoogleCalendarCell.php @@ -0,0 +1,129 @@ +setTime(0, 0); + } + + if (! $endTime ) { + $endTime = new DateTime($startTime->format('c')); + $endTime->modify ( "+31 day" ); // month from now (ish). + } + + Log::debug ( 'start: ' . $startTime->format ( 'c' ) . ' end: ' . $endTime->format('c')); + + $optParams = array ( + // 'maxResults' => 100, + 'orderBy' => 'startTime', + 'singleEvents' => TRUE, + 'timeMin' => $startTime->format('c'), + 'timeMax' => $endTime->format ( 'c' ) + ); + + try { + $results = $cal->events->listEvents ( $calendarId, $optParams ); + } catch (\Exception $e) { + Log::debug('caught an exception from listing events!'); + return null; + } + + Log::debug ( 'after listEvents call.' ); + + // the calEvents array will be an associative array where the keys are the + // dates that events start. the value stored for each key is in turn an associative array of + // good stuff about the event. the good stuff includes 'info', for the appointment description, + // 'start' for the starting date (plus time perhaps), and 'event' for the raw google event + // contents. + $calEvents = [ ]; + + if (count ( $results->getItems () ) == 0) { + // nothing to add to array. + } else { + foreach ( $results->getItems () as $event ) { + $info = $event->getSummary (); + + $start = $event->start->dateTime; + if (empty ( $start )) { + // simple index by date. + $index = $event->start->date; + $start = 'All Day'; // our time mutates. + } else { + // make the index from just the date portion. + $bits = str_split($start, strpos($start, 'T')); + $index = $bits[0]; + + // clean up the time portion for presentation. + $date = new DateTime($start); + $start = $date->format('H:i:s'); + + //Log::debug('chopped time of start is: ' . $start); + } + + $existing_entry = []; + if (array_key_exists($index, $calEvents)) { + $existing_entry = $calEvents[$index]; + } + + array_push ( $existing_entry, [ + 'info' => $info, + 'start' => $start, + 'event' => $event, + ] ); + + $calEvents[$index] = $existing_entry; + } + } + + return $calEvents; + } + + /** + * Default display method. + * + * needs to be passed a GoogleClient object that has already been configured with a valid + * access token. + * + * @return void + */ + public function display($calEvents) + { + + $this->set ( 'calEvents', $calEvents ); + } +} diff --git a/production/example_apps/shared_calendar/src/View/Helper/empty b/production/example_apps/shared_calendar/src/View/Helper/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/shared_calendar/tests/Fixture/UsersFixture.php b/production/example_apps/shared_calendar/tests/Fixture/UsersFixture.php new file mode 100644 index 00000000..4fdd2c16 --- /dev/null +++ b/production/example_apps/shared_calendar/tests/Fixture/UsersFixture.php @@ -0,0 +1,52 @@ + ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], + 'name' => ['type' => 'string', 'length' => 128, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], + 'token' => ['type' => 'string', 'length' => 2048, 'null' => true, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], + 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + '_indexes' => [ + 'name' => ['type' => 'index', 'columns' => ['name'], 'length' => []], + ], + '_constraints' => [ + 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], + ], + '_options' => [ + 'engine' => 'InnoDB', + 'collation' => 'utf8_general_ci' + ], + ]; + // @codingStandardsIgnoreEnd + + /** + * Records + * + * @var array + */ + public $records = [ + [ + 'id' => 1, + 'name' => 'Lorem ipsum dolor sit amet', + 'token' => 'Lorem ipsum dolor sit amet', + 'created' => '2017-07-30 22:29:56', + 'modified' => '2017-07-30 22:29:56' + ], + ]; +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/ApplicationTest.php b/production/example_apps/shared_calendar/tests/TestCase/ApplicationTest.php new file mode 100644 index 00000000..d397fa1c --- /dev/null +++ b/production/example_apps/shared_calendar/tests/TestCase/ApplicationTest.php @@ -0,0 +1,46 @@ +middleware($middleware); + + $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0)); + $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1)); + $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2)); + } +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/Controller/AuthorizerControllerTest.php b/production/example_apps/shared_calendar/tests/TestCase/Controller/AuthorizerControllerTest.php new file mode 100644 index 00000000..93ee7e4f --- /dev/null +++ b/production/example_apps/shared_calendar/tests/TestCase/Controller/AuthorizerControllerTest.php @@ -0,0 +1,71 @@ +markTestIncomplete('Not implemented yet.'); + } + + /** + * Test view method + * + * @return void + */ + public function testView() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test add method + * + * @return void + */ + public function testAdd() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test edit method + * + * @return void + */ + public function testEdit() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test delete method + * + * @return void + */ + public function testDelete() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/Controller/PagesControllerTest.php b/production/example_apps/shared_calendar/tests/TestCase/Controller/PagesControllerTest.php new file mode 100644 index 00000000..1b478a31 --- /dev/null +++ b/production/example_apps/shared_calendar/tests/TestCase/Controller/PagesControllerTest.php @@ -0,0 +1,97 @@ +get('/'); + $this->assertResponseOk(); + $this->get('/'); + $this->assertResponseOk(); + } + + /** + * testDisplay method + * + * @return void + */ + public function testDisplay() + { + $this->get('/pages/home'); + $this->assertResponseOk(); + $this->assertResponseContains('CakePHP'); + $this->assertResponseContains(''); + } + + /** + * Test that missing template renders 404 page in production + * + * @return void + */ + public function testMissingTemplate() + { + Configure::write('debug', false); + $this->get('/pages/not_existing'); + + $this->assertResponseError(); + $this->assertResponseContains('Error'); + } + + /** + * Test that missing template in debug mode renders missing_template error page + * + * @return void + */ + public function testMissingTemplateInDebug() + { + Configure::write('debug', true); + $this->get('/pages/not_existing'); + + $this->assertResponseFailure(); + $this->assertResponseContains('Missing Template'); + $this->assertResponseContains('Stacktrace'); + $this->assertResponseContains('not_existing.ctp'); + } + + /** + * Test directory traversal protection + * + * @return void + */ + public function testDirectoryTraversalProtection() + { + $this->get('/pages/../Layout/ajax'); + $this->assertResponseCode(403); + $this->assertResponseContains('Forbidden'); + } +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/Controller/UsersControllerTest.php b/production/example_apps/shared_calendar/tests/TestCase/Controller/UsersControllerTest.php new file mode 100644 index 00000000..f07c1198 --- /dev/null +++ b/production/example_apps/shared_calendar/tests/TestCase/Controller/UsersControllerTest.php @@ -0,0 +1,71 @@ +markTestIncomplete('Not implemented yet.'); + } + + /** + * Test view method + * + * @return void + */ + public function testView() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test add method + * + * @return void + */ + public function testAdd() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test edit method + * + * @return void + */ + public function testEdit() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test delete method + * + * @return void + */ + public function testDelete() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/Model/Behavior/empty b/production/example_apps/shared_calendar/tests/TestCase/Model/Behavior/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/shared_calendar/tests/TestCase/Model/Table/UsersTableTest.php b/production/example_apps/shared_calendar/tests/TestCase/Model/Table/UsersTableTest.php new file mode 100644 index 00000000..d745692e --- /dev/null +++ b/production/example_apps/shared_calendar/tests/TestCase/Model/Table/UsersTableTest.php @@ -0,0 +1,73 @@ + UsersTable::class]; + $this->Users = TableRegistry::get('Users', $config); + } + + /** + * tearDown method + * + * @return void + */ + public function tearDown() + { + unset($this->Users); + + parent::tearDown(); + } + + /** + * Test initialize method + * + * @return void + */ + public function testInitialize() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test validationDefault method + * + * @return void + */ + public function testValidationDefault() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/View/Cell/GoogleCalendarCellTest.php b/production/example_apps/shared_calendar/tests/TestCase/View/Cell/GoogleCalendarCellTest.php new file mode 100644 index 00000000..c12e3bdc --- /dev/null +++ b/production/example_apps/shared_calendar/tests/TestCase/View/Cell/GoogleCalendarCellTest.php @@ -0,0 +1,68 @@ +request = $this->getMockBuilder('Cake\Network\Request')->getMock(); + $this->response = $this->getMockBuilder('Cake\Network\Response')->getMock(); + $this->GoogleCalendar = new GoogleCalendarCell($this->request, $this->response); + } + + /** + * tearDown method + * + * @return void + */ + public function tearDown() + { + unset($this->GoogleCalendar); + + parent::tearDown(); + } + + /** + * Test display method + * + * @return void + */ + public function testDisplay() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/shared_calendar/tests/TestCase/View/Helper/empty b/production/example_apps/shared_calendar/tests/TestCase/View/Helper/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/shared_calendar/tests/bootstrap.php b/production/example_apps/shared_calendar/tests/bootstrap.php new file mode 100644 index 00000000..0ca191e4 --- /dev/null +++ b/production/example_apps/shared_calendar/tests/bootstrap.php @@ -0,0 +1,12 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/production/example_apps/shared_calendar/webroot/css/base.css b/production/example_apps/shared_calendar/webroot/css/base.css new file mode 100644 index 00000000..458cd948 --- /dev/null +++ b/production/example_apps/shared_calendar/webroot/css/base.css @@ -0,0 +1,455 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +/** + * Foundation for Sites by ZURB + * Version 5 + */ + +/* + * Copyright (c) 2013-2014 ZURB, inc. +* MIT License +* 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. +*/ + +meta.foundation-version{font-family:"{{ VERSION }}"}meta.foundation-mq-small{font-family:"/only screen/";width:0}meta.foundation-mq-small-only{font-family:"/only screen and (max-width: 40em)/";width:0}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}meta.foundation-mq-medium-only{font-family:"/only screen and (min-width:40.0625em) and (max-width:64em)/";width:40.0625em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.0625em)/";width:64.0625em}meta.foundation-mq-large-only{font-family:"/only screen and (min-width:64.0625em) and (max-width:90em)/";width:64.0625em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.0625em)/";width:90.0625em}meta.foundation-mq-xlarge-only{font-family:"/only screen and (min-width:90.0625em) and (max-width:120em)/";width:90.0625em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.0625em)/";width:120.0625em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}html{box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}html,body{font-size:100%}body{background:#fff;color:#222;cursor:auto;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.5;margin:0;padding:0;position:relative}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.invisible{visibility:hidden}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{margin:0 auto;max-width:62.5rem;width:100%}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{margin:0 -0.9375rem;max-width:none;width:auto}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{margin:0;max-width:none;width:auto}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375rem;padding-right:0.9375rem;width:100%;float:left}.column+.column:last-child,.columns+.column:last-child,.column+.columns:last-child,.columns+.columns:last-child{float:right}.column+.column.end,.columns+.column.end,.column+.columns.end,.columns+.columns.end{float:left}@media only screen{.small-push-0{position:relative;left:0;right:auto}.small-pull-0{position:relative;right:0;left:auto}.small-push-1{position:relative;left:8.33333%;right:auto}.small-pull-1{position:relative;right:8.33333%;left:auto}.small-push-2{position:relative;left:16.66667%;right:auto}.small-pull-2{position:relative;right:16.66667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.33333%;right:auto}.small-pull-4{position:relative;right:33.33333%;left:auto}.small-push-5{position:relative;left:41.66667%;right:auto}.small-pull-5{position:relative;right:41.66667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.33333%;right:auto}.small-pull-7{position:relative;right:58.33333%;left:auto}.small-push-8{position:relative;left:66.66667%;right:auto}.small-pull-8{position:relative;right:66.66667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.33333%;right:auto}.small-pull-10{position:relative;right:83.33333%;left:auto}.small-push-11{position:relative;left:91.66667%;right:auto}.small-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.small-1{width:8.33333%}.small-2{width:16.66667%}.small-3{width:25%}.small-4{width:33.33333%}.small-5{width:41.66667%}.small-6{width:50%}.small-7{width:58.33333%}.small-8{width:66.66667%}.small-9{width:75%}.small-10{width:83.33333%}.small-11{width:91.66667%}.small-12{width:100%}.small-offset-0{margin-left:0 !important}.small-offset-1{margin-left:8.33333% !important}.small-offset-2{margin-left:16.66667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.33333% !important}.small-offset-5{margin-left:41.66667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.33333% !important}.small-offset-8{margin-left:66.66667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.33333% !important}.small-offset-11{margin-left:91.66667% !important}.small-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{float:left;margin-left:0;margin-right:0}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}.row.small-collapse>.column,.row.small-collapse>.columns{padding-left:0;padding-right:0}.row.small-collapse .row{margin-left:0;margin-right:0}.row.small-uncollapse>.column,.row.small-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}}@media only screen and (min-width: 40.0625em){.medium-push-0{position:relative;left:0;right:auto}.medium-pull-0{position:relative;right:0;left:auto}.medium-push-1{position:relative;left:8.33333%;right:auto}.medium-pull-1{position:relative;right:8.33333%;left:auto}.medium-push-2{position:relative;left:16.66667%;right:auto}.medium-pull-2{position:relative;right:16.66667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.33333%;right:auto}.medium-pull-4{position:relative;right:33.33333%;left:auto}.medium-push-5{position:relative;left:41.66667%;right:auto}.medium-pull-5{position:relative;right:41.66667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.33333%;right:auto}.medium-pull-7{position:relative;right:58.33333%;left:auto}.medium-push-8{position:relative;left:66.66667%;right:auto}.medium-pull-8{position:relative;right:66.66667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.33333%;right:auto}.medium-pull-10{position:relative;right:83.33333%;left:auto}.medium-push-11{position:relative;left:91.66667%;right:auto}.medium-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.medium-1{width:8.33333%}.medium-2{width:16.66667%}.medium-3{width:25%}.medium-4{width:33.33333%}.medium-5{width:41.66667%}.medium-6{width:50%}.medium-7{width:58.33333%}.medium-8{width:66.66667%}.medium-9{width:75%}.medium-10{width:83.33333%}.medium-11{width:91.66667%}.medium-12{width:100%}.medium-offset-0{margin-left:0 !important}.medium-offset-1{margin-left:8.33333% !important}.medium-offset-2{margin-left:16.66667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.33333% !important}.medium-offset-5{margin-left:41.66667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.33333% !important}.medium-offset-8{margin-left:66.66667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.33333% !important}.medium-offset-11{margin-left:91.66667% !important}.medium-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{float:left;margin-left:0;margin-right:0}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.row.medium-collapse>.column,.row.medium-collapse>.columns{padding-left:0;padding-right:0}.row.medium-collapse .row{margin-left:0;margin-right:0}.row.medium-uncollapse>.column,.row.medium-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}@media only screen and (min-width: 64.0625em){.large-push-0{position:relative;left:0;right:auto}.large-pull-0{position:relative;right:0;left:auto}.large-push-1{position:relative;left:8.33333%;right:auto}.large-pull-1{position:relative;right:8.33333%;left:auto}.large-push-2{position:relative;left:16.66667%;right:auto}.large-pull-2{position:relative;right:16.66667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.33333%;right:auto}.large-pull-4{position:relative;right:33.33333%;left:auto}.large-push-5{position:relative;left:41.66667%;right:auto}.large-pull-5{position:relative;right:41.66667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.33333%;right:auto}.large-pull-7{position:relative;right:58.33333%;left:auto}.large-push-8{position:relative;left:66.66667%;right:auto}.large-pull-8{position:relative;right:66.66667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.33333%;right:auto}.large-pull-10{position:relative;right:83.33333%;left:auto}.large-push-11{position:relative;left:91.66667%;right:auto}.large-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.large-1{width:8.33333%}.large-2{width:16.66667%}.large-3{width:25%}.large-4{width:33.33333%}.large-5{width:41.66667%}.large-6{width:50%}.large-7{width:58.33333%}.large-8{width:66.66667%}.large-9{width:75%}.large-10{width:83.33333%}.large-11{width:91.66667%}.large-12{width:100%}.large-offset-0{margin-left:0 !important}.large-offset-1{margin-left:8.33333% !important}.large-offset-2{margin-left:16.66667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.33333% !important}.large-offset-5{margin-left:41.66667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.33333% !important}.large-offset-8{margin-left:66.66667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.33333% !important}.large-offset-11{margin-left:91.66667% !important}.large-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{float:left;margin-left:0;margin-right:0}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.row.large-collapse>.column,.row.large-collapse>.columns{padding-left:0;padding-right:0}.row.large-collapse .row{margin-left:0;margin-right:0}.row.large-uncollapse>.column,.row.large-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}button,.button{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#008CBA;border-color:#007095;color:#fff;transition:background-color 300ms ease-out}button:hover,button:focus,.button:hover,.button:focus{background-color:#007095}button:hover,button:focus,.button:hover,.button:focus{color:#fff}button.secondary,.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{background-color:#b9b9b9}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{color:#333}button.success,.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{background-color:#368a55}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{color:#fff}button.alert,.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{background-color:#cf2a0e}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{color:#fff}button.warning,.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{background-color:#cf6e0e}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{color:#fff}button.info,.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{background-color:#61b6d9}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{color:#fff}button.large,.button.large{padding:1.125rem 2.25rem 1.1875rem 2.25rem;font-size:1.25rem}button.small,.button.small{padding:0.875rem 1.75rem 0.9375rem 1.75rem;font-size:0.8125rem}button.tiny,.button.tiny{padding:0.625rem 1.25rem 0.6875rem 1.25rem;font-size:0.6875rem}button.expand,.button.expand{padding-left:0;padding-right:0;width:100%}button.left-align,.button.left-align{text-align:left;text-indent:0.75rem}button.right-align,.button.right-align{text-align:right;padding-right:0.75rem}button.radius,.button.radius{border-radius:3px}button.round,.button.round{border-radius:1000px}button.disabled,button[disabled],.button.disabled,.button[disabled]{background-color:#008CBA;border-color:#007095;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#007095}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{color:#fff}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#008CBA}button.disabled.secondary,button[disabled].secondary,.button.disabled.secondary,.button[disabled].secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#b9b9b9}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{color:#333}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#e7e7e7}button.disabled.success,button[disabled].success,.button.disabled.success,.button[disabled].success{background-color:#43AC6A;border-color:#368a55;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#368a55}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{color:#fff}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#43AC6A}button.disabled.alert,button[disabled].alert,.button.disabled.alert,.button[disabled].alert{background-color:#f04124;border-color:#cf2a0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#cf2a0e}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{color:#fff}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#f04124}button.disabled.warning,button[disabled].warning,.button.disabled.warning,.button[disabled].warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#cf6e0e}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{color:#fff}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#f08a24}button.disabled.info,button[disabled].info,.button.disabled.info,.button[disabled].info{background-color:#a0d3e8;border-color:#61b6d9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#61b6d9}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{color:#fff}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#a0d3e8}button::-moz-focus-inner{border:0;padding:0}@media only screen and (min-width: 40.0625em){button,.button{display:inline-block}}form{margin:0 0 1rem}form .row .row{margin:0 -0.5rem}form .row .row .column,form .row .row .columns{padding:0 0.5rem}form .row .row.collapse{margin:0}form .row .row.collapse .column,form .row .row.collapse .columns{padding:0}form .row .row.collapse input{-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0}form .row input.column,form .row input.columns,form .row textarea.column,form .row textarea.columns{padding-left:0.5rem}label{color:#4d4d4d;cursor:pointer;display:block;font-size:0.875rem;font-weight:normal;line-height:1.5;margin-bottom:0}label.right{float:none !important;text-align:right}label.inline{margin:0 0 1rem 0;padding:0.5625rem 0}label small{text-transform:capitalize;color:#676767}.prefix,.postfix{border-style:solid;border-width:1px;display:block;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;overflow:visible;padding-bottom:0;padding-top:0;position:relative;text-align:center;width:100%;z-index:2}.postfix.button{border-color:true}.prefix.button{border:none;padding-left:0;padding-right:0;padding-bottom:0;padding-top:0;text-align:center}.prefix.button.radius{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.postfix.button.radius{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.prefix.button.round{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.postfix.button.round{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}span.prefix,label.prefix{background:#f2f2f2;border-right:none;color:#333;border-color:#ccc}span.postfix,label.postfix{background:#f2f2f2;color:#333;border-color:#ccc}input[type="text"],input[type="password"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="week"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="time"],input[type="url"],input[type="color"],textarea{-webkit-appearance:none;-moz-appearance:none;border-radius:0;background-color:#fff;border-style:solid;border-width:1px;border-color:#ccc;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);color:rgba(0,0,0,0.75);display:block;font-family:inherit;font-size:0.875rem;height:2.3125rem;margin:0 0 1rem 0;padding:0.5rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.15s linear,background 0.15s linear;-moz-transition:border-color 0.15s linear,background 0.15s linear;-ms-transition:border-color 0.15s linear,background 0.15s linear;-o-transition:border-color 0.15s linear,background 0.15s linear;transition:border-color 0.15s linear,background 0.15s linear}input[type="text"]:focus,input[type="password"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="week"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="color"]:focus,textarea:focus{background:#fafafa;border-color:#999;outline:none}input[type="text"]:disabled,input[type="password"]:disabled,input[type="date"]:disabled,input[type="datetime"]:disabled,input[type="datetime-local"]:disabled,input[type="month"]:disabled,input[type="week"]:disabled,input[type="email"]:disabled,input[type="number"]:disabled,input[type="search"]:disabled,input[type="tel"]:disabled,input[type="time"]:disabled,input[type="url"]:disabled,input[type="color"]:disabled,textarea:disabled{background-color:#ddd;cursor:default}input[type="text"][disabled],input[type="text"][readonly],fieldset[disabled] input[type="text"],input[type="password"][disabled],input[type="password"][readonly],fieldset[disabled] input[type="password"],input[type="date"][disabled],input[type="date"][readonly],fieldset[disabled] input[type="date"],input[type="datetime"][disabled],input[type="datetime"][readonly],fieldset[disabled] input[type="datetime"],input[type="datetime-local"][disabled],input[type="datetime-local"][readonly],fieldset[disabled] input[type="datetime-local"],input[type="month"][disabled],input[type="month"][readonly],fieldset[disabled] input[type="month"],input[type="week"][disabled],input[type="week"][readonly],fieldset[disabled] input[type="week"],input[type="email"][disabled],input[type="email"][readonly],fieldset[disabled] input[type="email"],input[type="number"][disabled],input[type="number"][readonly],fieldset[disabled] input[type="number"],input[type="search"][disabled],input[type="search"][readonly],fieldset[disabled] input[type="search"],input[type="tel"][disabled],input[type="tel"][readonly],fieldset[disabled] input[type="tel"],input[type="time"][disabled],input[type="time"][readonly],fieldset[disabled] input[type="time"],input[type="url"][disabled],input[type="url"][readonly],fieldset[disabled] input[type="url"],input[type="color"][disabled],input[type="color"][readonly],fieldset[disabled] input[type="color"],textarea[disabled],textarea[readonly],fieldset[disabled] textarea{background-color:#ddd;cursor:default}input[type="text"].radius,input[type="password"].radius,input[type="date"].radius,input[type="datetime"].radius,input[type="datetime-local"].radius,input[type="month"].radius,input[type="week"].radius,input[type="email"].radius,input[type="number"].radius,input[type="search"].radius,input[type="tel"].radius,input[type="time"].radius,input[type="url"].radius,input[type="color"].radius,textarea.radius{border-radius:3px}form .row .prefix-radius.row.collapse input,form .row .prefix-radius.row.collapse textarea,form .row .prefix-radius.row.collapse select,form .row .prefix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-radius.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse input,form .row .postfix-radius.row.collapse textarea,form .row .postfix-radius.row.collapse select,form .row .postfix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-round.row.collapse input,form .row .prefix-round.row.collapse textarea,form .row .prefix-round.row.collapse select,form .row .prefix-round.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}form .row .prefix-round.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse input,form .row .postfix-round.row.collapse textarea,form .row .postfix-round.row.collapse select,form .row .postfix-round.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}input[type="submit"]{-webkit-appearance:none;-moz-appearance:none;border-radius:0}textarea[rows]{height:auto}textarea{max-width:100%}::-webkit-input-placeholder{color:#ccc}:-moz-placeholder{color:#ccc}::-moz-placeholder{color:#ccc}:-ms-input-placeholder{color:#ccc}select{-webkit-appearance:none !important;-moz-appearance:none !important;background-color:#FAFAFA;border-radius:0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);background-position:100% center;background-repeat:no-repeat;border-style:solid;border-width:1px;border-color:#ccc;color:rgba(0,0,0,0.75);font-family:inherit;font-size:0.875rem;line-height:normal;padding:0.5rem;border-radius:0;height:2.3125rem}select::-ms-expand{display:none}select.radius{border-radius:3px}select:hover{background-color:#f3f3f3;border-color:#999}select:disabled{background-color:#ddd;cursor:default}select[multiple]{height:auto}input[type="file"],input[type="checkbox"],input[type="radio"],select{margin:0 0 1rem 0}input[type="checkbox"]+label,input[type="radio"]+label{display:inline-block;margin-left:0.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline}input[type="file"]{width:100%}fieldset{border:1px solid #ddd;margin:1.125rem 0;padding:1.25rem}fieldset legend{background:#fff;font-weight:bold;margin-left:-0.1875rem;margin:0;padding:0 0.1875rem}[data-abide] .error small.error,[data-abide] .error span.error,[data-abide] span.error,[data-abide] small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}[data-abide] span.error,[data-abide] small.error{display:none}span.error,small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error input,.error textarea,.error select{margin-bottom:0}.error input[type="checkbox"],.error input[type="radio"]{margin-bottom:1rem}.error label,.error label.error{color:#f04124}.error small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error>label>small{background:transparent;color:#676767;display:inline;font-size:60%;font-style:normal;margin:0;padding:0;text-transform:capitalize}.error span.error-message{display:block}input.error,textarea.error,select.error{margin-bottom:0}label.error{color:#f04124}meta.foundation-mq-topbar{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}.contain-to-grid{width:100%;background:#333}.contain-to-grid .top-bar{margin-bottom:0}.fixed{position:fixed;top:0;width:100%;z-index:99;left:0}.fixed.expanded:not(.top-bar){height:auto;max-height:100%;overflow-y:auto;width:100%}.fixed.expanded:not(.top-bar) .title-area{position:fixed;width:100%;z-index:99}.fixed.expanded:not(.top-bar) .top-bar-section{margin-top:2.8125rem;z-index:98}.top-bar{background:#333;height:2.8125rem;line-height:2.8125rem;margin-bottom:0;overflow:hidden;position:relative}.top-bar ul{list-style:none;margin-bottom:0}.top-bar .row{max-width:none}.top-bar form,.top-bar input,.top-bar select{margin-bottom:0}.top-bar input,.top-bar select{font-size:0.75rem;height:1.75rem;padding-bottom:.35rem;padding-top:.35rem}.top-bar .button,.top-bar button{font-size:0.75rem;margin-bottom:0;padding-bottom:0.4125rem;padding-top:0.4125rem}@media only screen and (max-width: 40em){.top-bar .button,.top-bar button{position:relative;top:-1px}}.top-bar .title-area{margin:0;position:relative}.top-bar .name{font-size:16px;height:2.8125rem;margin:0}.top-bar .name h1,.top-bar .name h2,.top-bar .name h3,.top-bar .name h4,.top-bar .name p,.top-bar .name span{font-size:1.0625rem;line-height:2.8125rem;margin:0}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name p a,.top-bar .name span a{color:#fff;display:block;font-weight:normal;padding:0 0.9375rem;width:75%}.top-bar .toggle-topbar{position:absolute;right:0;top:0}.top-bar .toggle-topbar a{color:#fff;display:block;font-size:0.8125rem;font-weight:bold;height:2.8125rem;line-height:2.8125rem;padding:0 0.9375rem;position:relative;text-transform:uppercase}.top-bar .toggle-topbar.menu-icon{margin-top:-16px;top:50%}.top-bar .toggle-topbar.menu-icon a{color:#fff;height:34px;line-height:33px;padding:0 2.5rem 0 0.9375rem;position:relative}.top-bar .toggle-topbar.menu-icon a span::after{content:"";display:block;height:0;position:absolute;margin-top:-8px;top:50%;right:0.9375rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:16px}.top-bar .toggle-topbar.menu-icon a span:hover:after{box-shadow:0 0 0 1px "",0 7px 0 1px "",0 14px 0 1px ""}.top-bar.expanded{background:transparent;height:auto}.top-bar.expanded .title-area{background:#333}.top-bar.expanded .toggle-topbar a{color:#888}.top-bar.expanded .toggle-topbar a span::after{box-shadow:0 0 0 1px #888,0 7px 0 1px #888,0 14px 0 1px #888}@media screen and (-webkit-min-device-pixel-ratio: 0){.top-bar.expanded .top-bar-section .has-dropdown.moved>.dropdown,.top-bar.expanded .top-bar-section .dropdown{clip:initial}.top-bar.expanded .top-bar-section .has-dropdown:not(.moved)>ul{padding:0}}.top-bar-section{left:0;position:relative;width:auto;transition:left 300ms ease-out}.top-bar-section ul{display:block;font-size:16px;height:auto;margin:0;padding:0;width:100%}.top-bar-section .divider,.top-bar-section [role="separator"]{border-top:solid 1px #1a1a1a;clear:both;height:1px;width:100%}.top-bar-section ul li{background:#333}.top-bar-section ul li>a{color:#fff;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.8125rem;font-weight:normal;padding-left:0.9375rem;padding:12px 0 12px 0.9375rem;text-transform:none;width:100%}.top-bar-section ul li>a.button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{background-color:#007095}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{color:#fff}.top-bar-section ul li>a.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{color:#333}.top-bar-section ul li>a.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{background-color:#368a55}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{color:#fff}.top-bar-section ul li>a.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{color:#fff}.top-bar-section ul li>a.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{color:#fff}.top-bar-section ul li>a.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{background-color:#61b6d9}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{color:#fff}.top-bar-section ul li>button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{background-color:#007095}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{color:#fff}.top-bar-section ul li>button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{color:#333}.top-bar-section ul li>button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{background-color:#368a55}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{color:#fff}.top-bar-section ul li>button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{color:#fff}.top-bar-section ul li>button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{color:#fff}.top-bar-section ul li>button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{background-color:#61b6d9}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{color:#fff}.top-bar-section ul li:hover:not(.has-form)>a{background-color:#555;color:#fff;background:#222}.top-bar-section ul li.active>a{background:#008CBA;color:#fff}.top-bar-section ul li.active>a:hover{background:#0078a0;color:#fff}.top-bar-section .has-form{padding:0.9375rem}.top-bar-section .has-dropdown{position:relative}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent rgba(255,255,255,0.4);border-left-style:solid;margin-right:0.9375rem;margin-top:-4.5px;position:absolute;top:50%;right:0}.top-bar-section .has-dropdown.moved{position:static}.top-bar-section .has-dropdown.moved>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important;width:100%}.top-bar-section .has-dropdown.moved>a:after{display:none}.top-bar-section .dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block;padding:0;position:absolute;top:0;z-index:99;left:100%}.top-bar-section .dropdown li{height:auto;width:100%}.top-bar-section .dropdown li a{font-weight:normal;padding:8px 0.9375rem}.top-bar-section .dropdown li a.parent-link{font-weight:normal}.top-bar-section .dropdown li.title h5,.top-bar-section .dropdown li.parent-link{margin-bottom:0;margin-top:0;font-size:1.125rem}.top-bar-section .dropdown li.title h5 a,.top-bar-section .dropdown li.parent-link a{color:#fff;display:block}.top-bar-section .dropdown li.title h5 a:hover,.top-bar-section .dropdown li.parent-link a:hover{background:none}.top-bar-section .dropdown li.has-form{padding:8px 0.9375rem}.top-bar-section .dropdown li .button,.top-bar-section .dropdown li button{top:auto}.top-bar-section .dropdown label{color:#777;font-size:0.625rem;font-weight:bold;margin-bottom:0;padding:8px 0.9375rem 2px;text-transform:uppercase}.js-generated{display:block}@media only screen and (min-width: 40.0625em){.top-bar{background:#333;overflow:visible}.top-bar:before,.top-bar:after{content:" ";display:table}.top-bar:after{clear:both}.top-bar .toggle-topbar{display:none}.top-bar .title-area{float:left}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name h5 a,.top-bar .name h6 a{width:auto}.top-bar input,.top-bar select,.top-bar .button,.top-bar button{font-size:0.875rem;height:1.75rem;position:relative;top:0.53125rem}.top-bar.expanded{background:#333}.contain-to-grid .top-bar{margin-bottom:0;margin:0 auto;max-width:62.5rem}.top-bar-section{transition:none 0 0;left:0 !important}.top-bar-section ul{display:inline;height:auto !important;width:auto}.top-bar-section ul li{float:left}.top-bar-section ul li .js-generated{display:none}.top-bar-section li.hover>a:not(.button){background-color:#555;background:#222;color:#fff}.top-bar-section li:not(.has-form) a:not(.button){background:#333;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li:not(.has-form) a:not(.button):hover{background-color:#555;background:#222}.top-bar-section li.active:not(.has-form) a:not(.button){background:#008CBA;color:#fff;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li.active:not(.has-form) a:not(.button):hover{background:#0078a0;color:#fff}.top-bar-section .has-dropdown>a{padding-right:2.1875rem !important}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:rgba(255,255,255,0.4) transparent transparent transparent;border-top-style:solid;margin-top:-2.5px;top:1.40625rem}.top-bar-section .has-dropdown.moved{position:relative}.top-bar-section .has-dropdown.moved>.dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block}.top-bar-section .has-dropdown.hover>.dropdown,.top-bar-section .has-dropdown.not-click:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown .dropdown li.has-dropdown>a:after{border:none;content:"\00bb";top:0.1875rem;right:5px}.top-bar-section .dropdown{left:0;background:transparent;min-width:100%;top:auto}.top-bar-section .dropdown li a{background:#333;color:#fff;line-height:2.8125rem;padding:12px 0.9375rem;white-space:nowrap}.top-bar-section .dropdown li:not(.has-form):not(.active)>a:not(.button){background:#333;color:#fff}.top-bar-section .dropdown li:not(.has-form):not(.active):hover>a:not(.button){background-color:#555;color:#fff;background:#222}.top-bar-section .dropdown li label{background:#333;white-space:nowrap}.top-bar-section .dropdown li .dropdown{left:100%;top:0}.top-bar-section>ul>.divider,.top-bar-section>ul>[role="separator"]{border-right:solid 1px #4e4e4e;border-bottom:none;border-top:none;clear:none;height:2.8125rem;width:0}.top-bar-section .has-form{background:#333;height:2.8125rem;padding:0 0.9375rem}.top-bar-section .right li .dropdown{left:auto;right:0}.top-bar-section .right li .dropdown li .dropdown{right:100%}.top-bar-section .left li .dropdown{right:auto;left:0}.top-bar-section .left li .dropdown li .dropdown{left:100%}.no-js .top-bar-section ul li:hover>a{background-color:#555;background:#222;color:#fff}.no-js .top-bar-section ul li:active>a{background:#008CBA;color:#fff}.no-js .top-bar-section .has-dropdown:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.no-js .top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}}.breadcrumbs{border-style:solid;border-width:1px;display:block;list-style:none;margin-left:0;overflow:hidden;padding:0.5625rem 0.875rem 0.5625rem;background-color:#f4f4f4;border-color:#dcdcdc;border-radius:3px}.breadcrumbs>*{color:#008CBA;float:left;font-size:0.6875rem;line-height:0.6875rem;margin:0;text-transform:uppercase}.breadcrumbs>*:hover a,.breadcrumbs>*:focus a{text-decoration:underline}.breadcrumbs>* a{color:#008CBA}.breadcrumbs>*.current{color:#333;cursor:default}.breadcrumbs>*.current a{color:#333;cursor:default}.breadcrumbs>*.current:hover,.breadcrumbs>*.current:hover a,.breadcrumbs>*.current:focus,.breadcrumbs>*.current:focus a{text-decoration:none}.breadcrumbs>*.unavailable{color:#999}.breadcrumbs>*.unavailable a{color:#999}.breadcrumbs>*.unavailable:hover,.breadcrumbs>*.unavailable:hover a,.breadcrumbs>*.unavailable:focus,.breadcrumbs>*.unavailable a:focus{color:#999;cursor:not-allowed;text-decoration:none}.breadcrumbs>*:before{color:#aaa;content:"/";margin:0 0.75rem;position:relative;top:1px}.breadcrumbs>*:first-child:before{content:" ";margin:0}[aria-label="breadcrumbs"] [aria-hidden="true"]:after{content:"/"}.alert-box{border-style:solid;border-width:1px;display:block;font-size:0.8125rem;font-weight:normal;margin-bottom:1.25rem;padding:0.875rem 1.5rem 0.875rem 0.875rem;position:relative;transition:opacity 300ms ease-out;background-color:#008CBA;border-color:#0078a0;color:#fff}.alert-box .close{right:0.25rem;background:inherit;color:#333;font-size:1.375rem;line-height:.9;margin-top:-0.6875rem;opacity:0.3;padding:0 6px 4px;position:absolute;top:50%}.alert-box .close:hover,.alert-box .close:focus{opacity:0.5}.alert-box.radius{border-radius:3px}.alert-box.round{border-radius:1000px}.alert-box.success{background-color:#43AC6A;border-color:#3a945b;color:#fff}.alert-box.alert{background-color:#f04124;border-color:#de2d0f;color:#fff}.alert-box.secondary{background-color:#e7e7e7;border-color:#c7c7c7;color:#4f4f4f}.alert-box.warning{background-color:#f08a24;border-color:#de770f;color:#fff}.alert-box.info{background-color:#a0d3e8;border-color:#74bfdd;color:#4f4f4f}.alert-box.alert-close{opacity:0}.inline-list{list-style:none;margin-left:-1.375rem;margin-right:0;margin:0 auto 1.0625rem auto;overflow:hidden;padding:0}.inline-list>li{display:block;float:left;list-style:none;margin-left:1.375rem}.inline-list>li>*{display:block}.button-group{list-style:none;margin:0;left:0}.button-group:before,.button-group:after{content:" ";display:table}.button-group:after{clear:both}.button-group.even-2 li{display:inline-block;margin:0 -2px;width:50%}.button-group.even-2 li>button,.button-group.even-2 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-2 li:first-child button,.button-group.even-2 li:first-child .button{border-left:0}.button-group.even-2 li button,.button-group.even-2 li .button{width:100%}.button-group.even-3 li{display:inline-block;margin:0 -2px;width:33.33333%}.button-group.even-3 li>button,.button-group.even-3 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-3 li:first-child button,.button-group.even-3 li:first-child .button{border-left:0}.button-group.even-3 li button,.button-group.even-3 li .button{width:100%}.button-group.even-4 li{display:inline-block;margin:0 -2px;width:25%}.button-group.even-4 li>button,.button-group.even-4 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-4 li:first-child button,.button-group.even-4 li:first-child .button{border-left:0}.button-group.even-4 li button,.button-group.even-4 li .button{width:100%}.button-group.even-5 li{display:inline-block;margin:0 -2px;width:20%}.button-group.even-5 li>button,.button-group.even-5 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-5 li:first-child button,.button-group.even-5 li:first-child .button{border-left:0}.button-group.even-5 li button,.button-group.even-5 li .button{width:100%}.button-group.even-6 li{display:inline-block;margin:0 -2px;width:16.66667%}.button-group.even-6 li>button,.button-group.even-6 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-6 li:first-child button,.button-group.even-6 li:first-child .button{border-left:0}.button-group.even-6 li button,.button-group.even-6 li .button{width:100%}.button-group.even-7 li{display:inline-block;margin:0 -2px;width:14.28571%}.button-group.even-7 li>button,.button-group.even-7 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-7 li:first-child button,.button-group.even-7 li:first-child .button{border-left:0}.button-group.even-7 li button,.button-group.even-7 li .button{width:100%}.button-group.even-8 li{display:inline-block;margin:0 -2px;width:12.5%}.button-group.even-8 li>button,.button-group.even-8 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-8 li:first-child button,.button-group.even-8 li:first-child .button{border-left:0}.button-group.even-8 li button,.button-group.even-8 li .button{width:100%}.button-group>li{display:inline-block;margin:0 -2px}.button-group>li>button,.button-group>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group>li:first-child button,.button-group>li:first-child .button{border-left:0}.button-group.stack>li{display:block;margin:0;float:none}.button-group.stack>li>button,.button-group.stack>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-left:0}.button-group.stack>li>button,.button-group.stack>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack>li>button{width:100%}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-top:0}.button-group.stack-for-small>li{display:inline-block;margin:0 -2px}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}@media only screen and (max-width: 40em){.button-group.stack-for-small>li{display:block;margin:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack-for-small>li>button{width:100%}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-top:0}}.button-group.radius>*{display:inline-block;margin:0 -2px}.button-group.radius>*>button,.button-group.radius>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius>*:first-child button,.button-group.radius>*:first-child .button{border-left:0}.button-group.radius>*,.button-group.radius>*>a,.button-group.radius>*>button,.button-group.radius>*>.button{border-radius:0}.button-group.radius>*:first-child,.button-group.radius>*:first-child>a,.button-group.radius>*:first-child>button,.button-group.radius>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius>*:last-child,.button-group.radius>*:last-child>a,.button-group.radius>*:last-child>button,.button-group.radius>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*{display:block;margin:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-left:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack>*>button{width:100%}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-top:0}.button-group.radius.stack>*,.button-group.radius.stack>*>a,.button-group.radius.stack>*>button,.button-group.radius.stack>*>.button{border-radius:0}.button-group.radius.stack>*:first-child,.button-group.radius.stack>*:first-child>a,.button-group.radius.stack>*:first-child>button,.button-group.radius.stack>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*:last-child,.button-group.radius.stack>*:last-child>a,.button-group.radius.stack>*:last-child>button,.button-group.radius.stack>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}@media only screen and (min-width: 40.0625em){.button-group.radius.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>*{display:block;margin:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack-for-small>*>button{width:100%}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-top:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}}.button-group.round>*{display:inline-block;margin:0 -2px}.button-group.round>*>button,.button-group.round>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round>*:first-child button,.button-group.round>*:first-child .button{border-left:0}.button-group.round>*,.button-group.round>*>a,.button-group.round>*>button,.button-group.round>*>.button{border-radius:0}.button-group.round>*:first-child,.button-group.round>*:first-child>a,.button-group.round>*:first-child>button,.button-group.round>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round>*:last-child,.button-group.round>*:last-child>a,.button-group.round>*:last-child>button,.button-group.round>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.button-group.round.stack>*{display:block;margin:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-left:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack>*>button{width:100%}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-top:0}.button-group.round.stack>*,.button-group.round.stack>*>a,.button-group.round.stack>*>button,.button-group.round.stack>*>.button{border-radius:0}.button-group.round.stack>*:first-child,.button-group.round.stack>*:first-child>a,.button-group.round.stack>*:first-child>button,.button-group.round.stack>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack>*:last-child,.button-group.round.stack>*:last-child>a,.button-group.round.stack>*:last-child>button,.button-group.round.stack>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}@media only screen and (min-width: 40.0625em){.button-group.round.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>*{display:block;margin:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack-for-small>*>button{width:100%}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-top:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}}.button-bar:before,.button-bar:after{content:" ";display:table}.button-bar:after{clear:both}.button-bar .button-group{float:left;margin-right:0.625rem}.button-bar .button-group div{overflow:hidden}.panel{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#f2f2f2;color:#333}.panel>:first-child{margin-top:0}.panel>:last-child{margin-bottom:0}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6,.panel p,.panel li,.panel dl{color:#333}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{line-height:1;margin-bottom:0.625rem}.panel h1.subheader,.panel h2.subheader,.panel h3.subheader,.panel h4.subheader,.panel h5.subheader,.panel h6.subheader{line-height:1.4}.panel.callout{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#ecfaff;color:#333}.panel.callout>:first-child{margin-top:0}.panel.callout>:last-child{margin-bottom:0}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6,.panel.callout p,.panel.callout li,.panel.callout dl{color:#333}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6{line-height:1;margin-bottom:0.625rem}.panel.callout h1.subheader,.panel.callout h2.subheader,.panel.callout h3.subheader,.panel.callout h4.subheader,.panel.callout h5.subheader,.panel.callout h6.subheader{line-height:1.4}.panel.callout a:not(.button){color:#008CBA}.panel.callout a:not(.button):hover,.panel.callout a:not(.button):focus{color:#0078a0}.panel.radius{border-radius:3px}.dropdown.button,button.dropdown{position:relative;padding-right:3.5625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent;border-style:solid;content:"";display:block;height:0;position:absolute;top:50%;width:0}.dropdown.button::after,button.dropdown::after{border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent}.dropdown.button.tiny,button.dropdown.tiny{padding-right:2.625rem}.dropdown.button.tiny:after,button.dropdown.tiny:after{border-width:0.375rem;right:1.125rem;margin-top:-0.125rem}.dropdown.button.tiny::after,button.dropdown.tiny::after{border-color:#fff transparent transparent transparent}.dropdown.button.small,button.dropdown.small{padding-right:3.0625rem}.dropdown.button.small::after,button.dropdown.small::after{border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem}.dropdown.button.small::after,button.dropdown.small::after{border-color:#fff transparent transparent transparent}.dropdown.button.large,button.dropdown.large{padding-right:3.625rem}.dropdown.button.large::after,button.dropdown.large::after{border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem}.dropdown.button.large::after,button.dropdown.large::after{border-color:#fff transparent transparent transparent}.dropdown.button.secondary:after,button.dropdown.secondary:after{border-color:#333 transparent transparent transparent}.th{border:solid 4px #fff;box-shadow:0 0 0 1px rgba(0,0,0,0.2);display:inline-block;line-height:0;max-width:100%;transition:all 200ms ease-out}.th:hover,.th:focus{box-shadow:0 0 6px 1px rgba(0,140,186,0.5)}.th.radius{border-radius:3px}.pricing-table{border:solid 1px #ddd;margin-left:0;margin-bottom:1.25rem}.pricing-table *{list-style:none;line-height:1}.pricing-table .title{background-color:#333;color:#eee;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .price{background-color:#F6F6F6;color:#333;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:2rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .description{background-color:#fff;border-bottom:dotted 1px #ddd;color:#777;font-size:0.75rem;font-weight:normal;line-height:1.4;padding:0.9375rem;text-align:center}.pricing-table .bullet-item{background-color:#fff;border-bottom:dotted 1px #ddd;color:#333;font-size:0.875rem;font-weight:normal;padding:0.9375rem;text-align:center}.pricing-table .cta-button{background-color:#fff;padding:1.25rem 1.25rem 0;text-align:center}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.slideshow-wrapper{position:relative}.slideshow-wrapper ul{list-style-type:none;margin:0}.slideshow-wrapper ul li,.slideshow-wrapper ul li .orbit-caption{display:none}.slideshow-wrapper ul li:first-child{display:block}.slideshow-wrapper .orbit-container{background-color:transparent}.slideshow-wrapper .orbit-container li{display:block}.slideshow-wrapper .orbit-container li .orbit-caption{display:block}.slideshow-wrapper .orbit-container .orbit-bullets li{display:inline-block}.slideshow-wrapper .preloader{border-radius:1000px;animation-duration:1.5s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;border-color:#555 #fff;border:solid 3px;display:block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px}.orbit-container{background:none;overflow:hidden;position:relative;width:100%}.orbit-container .orbit-slides-container{list-style:none;margin:0;padding:0;position:relative;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.orbit-container .orbit-slides-container img{display:block;max-width:100%}.orbit-container .orbit-slides-container>*{position:absolute;top:0;width:100%;margin-left:100%}.orbit-container .orbit-slides-container>*:first-child{margin-left:0}.orbit-container .orbit-slides-container>* .orbit-caption{bottom:0;position:absolute;background-color:rgba(51,51,51,0.8);color:#fff;font-size:0.875rem;padding:0.625rem 0.875rem;width:100%}.orbit-container .orbit-slide-number{left:10px;background:transparent;color:#fff;font-size:12px;position:absolute;top:10px;z-index:10}.orbit-container .orbit-slide-number span{font-weight:700;padding:0.3125rem}.orbit-container .orbit-timer{position:absolute;top:12px;right:10px;height:6px;width:100px;z-index:10}.orbit-container .orbit-timer .orbit-progress{height:3px;background-color:rgba(255,255,255,0.3);display:block;width:0;position:relative;right:20px;top:5px}.orbit-container .orbit-timer>span{border:solid 4px #fff;border-bottom:none;border-top:none;display:none;height:14px;position:absolute;top:0;width:11px;right:0}.orbit-container .orbit-timer.paused>span{top:0;width:11px;height:14px;border:inset 8px;border-left-style:solid;border-color:transparent;border-left-color:#fff;right:-4px}.orbit-container .orbit-timer.paused>span.dark{border-left-color:#333}.orbit-container:hover .orbit-timer>span{display:block}.orbit-container .orbit-prev,.orbit-container .orbit-next{background-color:transparent;color:white;height:60px;line-height:50px;margin-top:-25px;position:absolute;text-indent:-9999px !important;top:45%;width:36px;z-index:10}.orbit-container .orbit-prev:hover,.orbit-container .orbit-next:hover{background-color:rgba(0,0,0,0.3)}.orbit-container .orbit-prev>span,.orbit-container .orbit-next>span{border:inset 10px;display:block;height:0;margin-top:-10px;position:absolute;top:50%;width:0}.orbit-container .orbit-prev{left:0}.orbit-container .orbit-prev>span{border-right-style:solid;border-color:transparent;border-right-color:#fff}.orbit-container .orbit-prev:hover>span{border-right-color:#fff}.orbit-container .orbit-next{right:0}.orbit-container .orbit-next>span{border-color:transparent;border-left-style:solid;border-left-color:#fff;left:50%;margin-left:-4px}.orbit-container .orbit-next:hover>span{border-left-color:#fff}.orbit-bullets-container{text-align:center}.orbit-bullets{display:block;float:none;margin:0 auto 30px auto;overflow:hidden;position:relative;text-align:center;top:10px}.orbit-bullets li{background:#ccc;cursor:pointer;display:inline-block;float:none;height:0.5625rem;margin-right:6px;width:0.5625rem;border-radius:1000px}.orbit-bullets li.active{background:#999}.orbit-bullets li:last-child{margin-right:0}.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:none}.touch .orbit-bullets{display:none}@media only screen and (min-width: 40.0625em){.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:inherit}.touch .orbit-bullets{display:block}}@media only screen and (max-width: 40em){.orbit-stack-on-small .orbit-slides-container{height:auto !important}.orbit-stack-on-small .orbit-slides-container>*{margin:0 !important;opacity:1 !important;position:relative}.orbit-stack-on-small .orbit-slide-number{display:none}.orbit-timer{display:none}.orbit-next,.orbit-prev{display:none}.orbit-bullets{display:none}}[data-magellan-expedition],[data-magellan-expedition-clone]{background:#fff;min-width:100%;padding:10px;z-index:50}[data-magellan-expedition] .sub-nav,[data-magellan-expedition-clone] .sub-nav{margin-bottom:0}[data-magellan-expedition] .sub-nav dd,[data-magellan-expedition-clone] .sub-nav dd{margin-bottom:0}[data-magellan-expedition] .sub-nav a,[data-magellan-expedition-clone] .sub-nav a{line-height:1.8em}.icon-bar{display:inline-block;font-size:0;width:100%;background:#333}.icon-bar>*{display:block;float:left;font-size:1rem;margin:0 auto;padding:1.25rem;text-align:center;width:25%}.icon-bar>* i,.icon-bar>* img{display:block;margin:0 auto}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem}.icon-bar>* i{font-size:1.875rem;vertical-align:middle}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar.label-right>* i,.icon-bar.label-right>* img{display:inline-block;margin:0 .0625rem 0 0}.icon-bar.label-right>* i+label,.icon-bar.label-right>* img+label{margin-top:0}.icon-bar.label-right>* label{display:inline-block}.icon-bar.vertical.label-right>*{text-align:left}.icon-bar.vertical,.icon-bar.small-vertical{height:100%;width:auto}.icon-bar.vertical .item,.icon-bar.small-vertical .item{float:none;margin:auto;width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.medium-vertical{height:100%;width:auto}.icon-bar.medium-vertical .item{float:none;margin:auto;width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.large-vertical{height:100%;width:auto}.icon-bar.large-vertical .item{float:none;margin:auto;width:auto}}.icon-bar>*{font-size:1rem;padding:1.25rem}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem;font-size:1rem}.icon-bar>* i{font-size:1.875rem}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar>* label{color:#fff}.icon-bar>* i{color:#fff}.icon-bar>a:hover{background:#008CBA}.icon-bar>a:hover label{color:#fff}.icon-bar>a:hover i{color:#fff}.icon-bar>a.active{background:#008CBA}.icon-bar>a.active label{color:#fff}.icon-bar>a.active i{color:#fff}.icon-bar .item.disabled{cursor:not-allowed;opacity:0.7;pointer-events:none}.icon-bar .item.disabled>*{opacity:0.7;cursor:not-allowed}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.tabs{margin-bottom:0 !important;margin-left:0}.tabs:before,.tabs:after{content:" ";display:table}.tabs:after{clear:both}.tabs dd,.tabs .tab-title{float:left;list-style:none;margin-bottom:0 !important;position:relative}.tabs dd>a,.tabs .tab-title>a{display:block;background-color:#EFEFEF;color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem 2rem}.tabs dd>a:hover,.tabs .tab-title>a:hover{background-color:#e1e1e1}.tabs dd.active a,.tabs .tab-title.active a{background-color:#fff;color:#222}.tabs.radius dd:first-child a,.tabs.radius .tab:first-child a{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.tabs.radius dd:last-child a,.tabs.radius .tab:last-child a{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.tabs.vertical dd,.tabs.vertical .tab-title{position:inherit;float:none;display:block;top:auto}.tabs-content{margin-bottom:1.5rem;width:100%}.tabs-content:before,.tabs-content:after{content:" ";display:table}.tabs-content:after{clear:both}.tabs-content>.content{display:none;float:left;padding:0.9375rem 0;width:100%}.tabs-content>.content.active{display:block;float:none}.tabs-content>.content.contained{padding:0.9375rem}.tabs-content.vertical{display:block}.tabs-content.vertical>.content{padding:0 0.9375rem}@media only screen and (min-width: 40.0625em){.tabs.vertical{float:left;margin:0;margin-bottom:1.25rem !important;max-width:20%;width:20%}.tabs-content.vertical{float:left;margin-left:-1px;max-width:80%;padding-left:1rem;width:80%}}.no-js .tabs-content>.content{display:block;float:none}ul.pagination{display:block;margin-left:-0.3125rem;min-height:1.5rem}ul.pagination li{color:#222;font-size:0.875rem;height:1.5rem;margin-left:0.3125rem}ul.pagination li a,ul.pagination li button{border-radius:3px;transition:background-color 300ms ease-out;background:none;color:#999;display:block;font-size:1em;font-weight:normal;line-height:inherit;padding:0.0625rem 0.625rem 0.0625rem}ul.pagination li:hover a,ul.pagination li a:focus,ul.pagination li:hover button,ul.pagination li button:focus{background:#e6e6e6}ul.pagination li.unavailable a,ul.pagination li.unavailable button{cursor:default;color:#999}ul.pagination li.unavailable:hover a,ul.pagination li.unavailable a:focus,ul.pagination li.unavailable:hover button,ul.pagination li.unavailable button:focus{background:transparent}ul.pagination li.current a,ul.pagination li.current button{background:#008CBA;color:#fff;cursor:default;font-weight:bold}ul.pagination li.current a:hover,ul.pagination li.current a:focus,ul.pagination li.current button:hover,ul.pagination li.current button:focus{background:#008CBA}ul.pagination li{display:block;float:left}.pagination-centered{text-align:center}.pagination-centered ul.pagination li{display:inline-block;float:none}.side-nav{display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;list-style-position:outside;list-style-type:none;margin:0;padding:0.875rem 0}.side-nav li{font-size:0.875rem;font-weight:normal;margin:0 0 0.4375rem 0}.side-nav li a:not(.button){color:#008CBA;display:block;margin:0;padding:0.4375rem 0.875rem}.side-nav li a:not(.button):hover,.side-nav li a:not(.button):focus{background:rgba(0,0,0,0.025);color:#1cc7ff}.side-nav li a:not(.button):active{color:#1cc7ff}.side-nav li.active>a:first-child:not(.button){color:#1cc7ff;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal}.side-nav li.divider{border-top:1px solid;height:0;list-style:none;padding:0;border-top-color:#e6e6e6}.side-nav li.heading{color:#008CBA;font-size:0.875rem;font-weight:bold;text-transform:uppercase}.accordion{margin-bottom:0}.accordion:before,.accordion:after{content:" ";display:table}.accordion:after{clear:both}.accordion .accordion-navigation,.accordion dd{display:block;margin-bottom:0 !important}.accordion .accordion-navigation.active>a,.accordion dd.active>a{background:#e8e8e8}.accordion .accordion-navigation>a,.accordion dd>a{background:#EFEFEF;color:#222;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem}.accordion .accordion-navigation>a:hover,.accordion dd>a:hover{background:#e3e3e3}.accordion .accordion-navigation>.content,.accordion dd>.content{display:none;padding:0.9375rem}.accordion .accordion-navigation>.content.active,.accordion dd>.content.active{background:#fff;display:block}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.text-justify{text-align:justify !important}@media only screen and (max-width: 40em){.small-only-text-left{text-align:left !important}.small-only-text-right{text-align:right !important}.small-only-text-center{text-align:center !important}.small-only-text-justify{text-align:justify !important}}@media only screen{.small-text-left{text-align:left !important}.small-text-right{text-align:right !important}.small-text-center{text-align:center !important}.small-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em) and (max-width: 64em){.medium-only-text-left{text-align:left !important}.medium-only-text-right{text-align:right !important}.medium-only-text-center{text-align:center !important}.medium-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em){.medium-text-left{text-align:left !important}.medium-text-right{text-align:right !important}.medium-text-center{text-align:center !important}.medium-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em) and (max-width: 90em){.large-only-text-left{text-align:left !important}.large-only-text-right{text-align:right !important}.large-only-text-center{text-align:center !important}.large-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em){.large-text-left{text-align:left !important}.large-text-right{text-align:right !important}.large-text-center{text-align:center !important}.large-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em) and (max-width: 120em){.xlarge-only-text-left{text-align:left !important}.xlarge-only-text-right{text-align:right !important}.xlarge-only-text-center{text-align:center !important}.xlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em){.xlarge-text-left{text-align:left !important}.xlarge-text-right{text-align:right !important}.xlarge-text-center{text-align:center !important}.xlarge-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em) and (max-width: 6249999.9375em){.xxlarge-only-text-left{text-align:left !important}.xxlarge-only-text-right{text-align:right !important}.xxlarge-only-text-center{text-align:center !important}.xxlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em){.xxlarge-text-left{text-align:left !important}.xxlarge-text-right{text-align:right !important}.xxlarge-text-center{text-align:center !important}.xxlarge-text-justify{text-align:justify !important}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}a{color:#008CBA;line-height:inherit;text-decoration:none}a:hover,a:focus{color:#0078a0}a img{border:none}p{font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.21875rem;line-height:1.6}p aside{font-size:0.875rem;font-style:italic;line-height:1.35}h1,h2,h3,h4,h5,h6{color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.4;margin-bottom:0.5rem;margin-top:0.2rem;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#6f6f6f;font-size:60%;line-height:0}h1{font-size:2.125rem}h2{font-size:1.6875rem}h3{font-size:1.375rem}h4{font-size:1.125rem}h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem}hr{border:solid #ddd;border-width:1px 0 0;clear:both;height:0;margin:1.25rem 0 1.1875rem}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{background-color:#f8f8f8;border-color:#dfdfdf;border-style:solid;border-width:1px;color:#333;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;padding:0.125rem 0.3125rem 0.0625rem}ul,ol,dl{font-family:inherit;font-size:1rem;line-height:1.6;list-style-position:outside;margin-bottom:1.25rem}ul{margin-left:1.1rem}ul.no-bullet{margin-left:0}ul.no-bullet li ul,ul.no-bullet li ol{margin-left:1.25rem;margin-bottom:0;list-style:none}ul li ul,ul li ol{margin-left:1.25rem;margin-bottom:0}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square;margin-left:1.1rem}ul.circle{list-style-type:circle;margin-left:1.1rem}ul.disc{list-style-type:disc;margin-left:1.1rem}ul.no-bullet{list-style:none}ol{margin-left:1.4rem}ol li ul,ol li ol{margin-left:1.25rem;margin-bottom:0}dl dt{margin-bottom:0.3rem;font-weight:bold}dl dd{margin-bottom:0.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#222;cursor:help}abbr{text-transform:none}abbr[title]{border-bottom:1px dotted #ddd}blockquote{margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #ddd}blockquote cite{display:block;font-size:0.8125rem;color:#555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}.vcard{display:inline-block;margin:0 0 1.25rem 0;border:1px solid #ddd;padding:0.625rem 0.75rem}.vcard li{margin:0;display:block}.vcard .fn{font-weight:bold;font-size:0.9375rem}.vevent .summary{font-weight:bold}.vevent abbr{cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem}@media only screen and (min-width: 40.0625em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.75rem}h2{font-size:2.3125rem}h3{font-size:1.6875rem}h4{font-size:1.4375rem}h5{font-size:1.125rem}h6{font-size:1rem}}.split.button{position:relative;padding-right:5.0625rem}.split.button span{display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px}.split.button span:after{position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%}.split.button span:active{background-color:rgba(0,0,0,0.1)}.split.button span{border-left-color:rgba(255,255,255,0.5)}.split.button span{width:3.09375rem}.split.button span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button span:after{border-color:#fff transparent transparent transparent}.split.button.secondary span{border-left-color:rgba(255,255,255,0.5)}.split.button.secondary span:after{border-color:#fff transparent transparent transparent}.split.button.alert span{border-left-color:rgba(255,255,255,0.5)}.split.button.success span{border-left-color:rgba(255,255,255,0.5)}.split.button.tiny{padding-right:3.75rem}.split.button.tiny span{width:2.25rem}.split.button.tiny span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button.small{padding-right:4.375rem}.split.button.small span{width:2.625rem}.split.button.small span:after{border-top-style:solid;border-width:0.4375rem;margin-left:-0.375rem;top:48%}.split.button.large{padding-right:5.5rem}.split.button.large span{width:3.4375rem}.split.button.large span:after{border-top-style:solid;border-width:0.3125rem;margin-left:-0.375rem;top:48%}.split.button.expand{padding-left:2rem}.split.button.secondary span:after{border-color:#333 transparent transparent transparent}.split.button.radius span{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.split.button.round span{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.split.button.no-pip span:before{border-style:none}.split.button.no-pip span:after{border-style:none}.split.button.no-pip span>i{display:block;left:50%;margin-left:-0.28889em;margin-top:-0.48889em;position:absolute;top:50%}.reveal-modal-bg{background:#000;background:rgba(0,0,0,0.45);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1004;left:0}.reveal-modal{border-radius:3px;display:none;position:absolute;top:0;visibility:hidden;width:100%;z-index:1005;left:0;background-color:#fff;padding:1.875rem;border:solid 1px #666;box-shadow:0 0 10px rgba(0,0,0,0.4)}@media only screen and (max-width: 40em){.reveal-modal{min-height:100vh}}.reveal-modal .column,.reveal-modal .columns{min-width:0}.reveal-modal>:first-child{margin-top:0}.reveal-modal>:last-child{margin-bottom:0}@media only screen and (min-width: 40.0625em){.reveal-modal{left:0;margin:0 auto;max-width:62.5rem;right:0;width:80%}}@media only screen and (min-width: 40.0625em){.reveal-modal{top:6.25rem}}.reveal-modal.radius{border-radius:3px}.reveal-modal.round{border-radius:1000px}.reveal-modal.collapse{padding:0}@media only screen and (min-width: 40.0625em){.reveal-modal.tiny{left:0;margin:0 auto;max-width:62.5rem;right:0;width:30%}}@media only screen and (min-width: 40.0625em){.reveal-modal.small{left:0;margin:0 auto;max-width:62.5rem;right:0;width:40%}}@media only screen and (min-width: 40.0625em){.reveal-modal.medium{left:0;margin:0 auto;max-width:62.5rem;right:0;width:60%}}@media only screen and (min-width: 40.0625em){.reveal-modal.large{left:0;margin:0 auto;max-width:62.5rem;right:0;width:70%}}@media only screen and (min-width: 40.0625em){.reveal-modal.xlarge{left:0;margin:0 auto;max-width:62.5rem;right:0;width:95%}}.reveal-modal.full{height:100vh;height:100%;left:0;margin-left:0 !important;max-width:none !important;min-height:100vh;top:0}@media only screen and (min-width: 40.0625em){.reveal-modal.full{left:0;margin:0 auto;max-width:62.5rem;right:0;width:100%}}.reveal-modal.toback{z-index:1003}.reveal-modal .close-reveal-modal{color:#aaa;cursor:pointer;font-size:2.5rem;font-weight:bold;line-height:1;position:absolute;top:0.625rem;right:1.375rem}.has-tip{border-bottom:dotted 1px #ccc;color:#333;cursor:help;font-weight:bold}.has-tip:hover,.has-tip:focus{border-bottom:dotted 1px #003f54;color:#008CBA}.has-tip.tip-left,.has-tip.tip-right{float:none !important}.tooltip{background:#333;color:#fff;display:none;font-size:0.875rem;font-weight:normal;line-height:1.3;max-width:300px;padding:0.75rem;position:absolute;width:100%;z-index:1006;left:50%}.tooltip>.nub{border-color:transparent transparent #333 transparent;border:solid 5px;display:block;height:0;pointer-events:none;position:absolute;top:-10px;width:0;left:5px}.tooltip>.nub.rtl{left:auto;right:5px}.tooltip.radius{border-radius:3px}.tooltip.round{border-radius:1000px}.tooltip.round>.nub{left:2rem}.tooltip.opened{border-bottom:dotted 1px #003f54 !important;color:#008CBA !important}.tap-to-close{color:#777;display:block;font-size:0.625rem;font-weight:normal}@media only screen and (min-width: 40.0625em){.tooltip>.nub{border-color:transparent transparent #333 transparent;top:-10px}.tooltip.tip-top>.nub{border-color:#333 transparent transparent transparent;bottom:-10px;top:auto}.tooltip.tip-left,.tooltip.tip-right{float:none !important}.tooltip.tip-left>.nub{border-color:transparent transparent transparent #333;left:auto;margin-top:-5px;right:-10px;top:50%}.tooltip.tip-right>.nub{border-color:transparent #333 transparent transparent;left:-10px;margin-top:-5px;right:auto;top:50%}}.clearing-thumbs,[data-clearing]{list-style:none;margin-left:0;margin-bottom:0}.clearing-thumbs:before,.clearing-thumbs:after,[data-clearing]:before,[data-clearing]:after{content:" ";display:table}.clearing-thumbs:after,[data-clearing]:after{clear:both}.clearing-thumbs li,[data-clearing] li{float:left;margin-right:10px}.clearing-thumbs[class*="block-grid-"] li,[data-clearing][class*="block-grid-"] li{margin-right:0}.clearing-blackout{background:#333;height:100%;position:fixed;top:0;width:100%;z-index:998;left:0}.clearing-blackout .clearing-close{display:block}.clearing-container{height:100%;margin:0;overflow:hidden;position:relative;z-index:998}.clearing-touch-label{color:#aaa;font-size:.6em;left:50%;position:absolute;top:50%}.visible-img{height:95%;position:relative}.visible-img img{position:absolute;left:50%;top:50%;-webkit-transform:translateY(-50%) translateX(-50%);-moz-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);-o-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);max-height:100%;max-width:100%}.clearing-caption{background:#333;bottom:0;color:#ccc;font-size:0.875em;line-height:1.3;margin-bottom:0;padding:10px 30px 20px;position:absolute;text-align:center;width:100%;left:0}.clearing-close{color:#ccc;display:none;font-size:30px;line-height:1;padding-left:20px;padding-top:10px;z-index:999}.clearing-close:hover,.clearing-close:focus{color:#ccc}.clearing-assembled .clearing-container{height:100%}.clearing-assembled .clearing-container .carousel>ul{display:none}.clearing-feature li{display:none}.clearing-feature li.clearing-featured-img{display:block}@media only screen and (min-width: 40.0625em){.clearing-main-prev,.clearing-main-next{height:100%;position:absolute;top:0;width:40px}.clearing-main-prev>span,.clearing-main-next>span{border:solid 12px;display:block;height:0;position:absolute;top:50%;width:0}.clearing-main-prev>span:hover,.clearing-main-next>span:hover{opacity:.8}.clearing-main-prev{left:0}.clearing-main-prev>span{left:5px;border-color:transparent;border-right-color:#ccc}.clearing-main-next{right:0}.clearing-main-next>span{border-color:transparent;border-left-color:#ccc}.clearing-main-prev.disabled,.clearing-main-next.disabled{opacity:.3}.clearing-assembled .clearing-container .carousel{background:rgba(51,51,51,0.8);height:120px;margin-top:10px;text-align:center}.clearing-assembled .clearing-container .carousel>ul{display:inline-block;z-index:999;height:100%;position:relative;float:none}.clearing-assembled .clearing-container .carousel>ul li{clear:none;cursor:pointer;display:block;float:left;margin-right:0;min-height:inherit;opacity:.4;overflow:hidden;padding:0;position:relative;width:120px}.clearing-assembled .clearing-container .carousel>ul li.fix-height img{height:100%;max-width:none}.clearing-assembled .clearing-container .carousel>ul li a.th{border:none;box-shadow:none;display:block}.clearing-assembled .clearing-container .carousel>ul li img{cursor:pointer !important;width:100% !important}.clearing-assembled .clearing-container .carousel>ul li.visible{opacity:1}.clearing-assembled .clearing-container .carousel>ul li:hover{opacity:.8}.clearing-assembled .clearing-container .visible-img{background:#333;height:85%;overflow:hidden}.clearing-close{padding-left:0;padding-top:0;position:absolute;top:10px;right:20px}}.progress{background-color:#F6F6F6;border:1px solid #fff;height:1.5625rem;margin-bottom:0.625rem;padding:0.125rem}.progress .meter{background:#008CBA;display:block;height:100%}.progress.secondary .meter{background:#e7e7e7;display:block;height:100%}.progress.success .meter{background:#43AC6A;display:block;height:100%}.progress.alert .meter{background:#f04124;display:block;height:100%}.progress.radius{border-radius:3px}.progress.radius .meter{border-radius:2px}.progress.round{border-radius:1000px}.progress.round .meter{border-radius:999px}.sub-nav{display:block;margin:-0.25rem 0 1.125rem;overflow:hidden;padding-top:0.25rem;width:auto}.sub-nav dt{text-transform:uppercase}.sub-nav dt,.sub-nav dd,.sub-nav li{color:#999;float:left;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.875rem;font-weight:normal;margin-left:1rem;margin-bottom:0}.sub-nav dt a,.sub-nav dd a,.sub-nav li a{color:#999;padding:0.1875rem 1rem;text-decoration:none}.sub-nav dt a:hover,.sub-nav dd a:hover,.sub-nav li a:hover{color:#737373}.sub-nav dt.active a,.sub-nav dd.active a,.sub-nav li.active a{border-radius:3px;background:#008CBA;color:#fff;cursor:default;font-weight:normal;padding:0.1875rem 1rem}.sub-nav dt.active a:hover,.sub-nav dd.active a:hover,.sub-nav li.active a:hover{background:#0078a0}.joyride-list{display:none}.joyride-tip-guide{background:#333;color:#fff;display:none;font-family:inherit;font-weight:normal;position:absolute;top:0;width:95%;z-index:101;left:2.5%}.lt-ie9 .joyride-tip-guide{margin-left:-400px;max-width:800px;left:50%}.joyride-content-wrapper{padding:1.125rem 1.25rem 1.5rem;width:100%}.joyride-content-wrapper .button{margin-bottom:0 !important}.joyride-content-wrapper .joyride-prev-tip{margin-right:10px}.joyride-tip-guide .joyride-nub{border:10px solid #333;display:block;height:0;position:absolute;width:0;left:22px}.joyride-tip-guide .joyride-nub.top{border-color:#333;border-top-color:transparent !important;border-top-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;top:-20px}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-bottom-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{right:-20px}.joyride-tip-guide .joyride-nub.left{left:-20px}.joyride-tip-guide h1,.joyride-tip-guide h2,.joyride-tip-guide h3,.joyride-tip-guide h4,.joyride-tip-guide h5,.joyride-tip-guide h6{color:#fff;font-weight:bold;line-height:1.25;margin:0}.joyride-tip-guide p{font-size:0.875rem;line-height:1.3;margin:0 0 1.125rem 0}.joyride-timer-indicator-wrap{border:solid 1px #555;bottom:1rem;height:3px;position:absolute;width:50px;right:1.0625rem}.joyride-timer-indicator{background:#666;display:block;height:inherit;width:0}.joyride-close-tip{color:#777 !important;font-size:24px;font-weight:normal;line-height:.5 !important;position:absolute;text-decoration:none;top:10px;right:12px}.joyride-close-tip:hover,.joyride-close-tip:focus{color:#eee !important}.joyride-modal-bg{background:rgba(0,0,0,0.5);cursor:pointer;display:none;height:100%;position:fixed;top:0;width:100%;z-index:100;left:0}.joyride-expose-wrapper{background-color:#fff;border-radius:3px;box-shadow:0 0 15px #fff;position:absolute;z-index:102}.joyride-expose-cover{background:transparent;border-radius:3px;left:0;position:absolute;top:0;z-index:9999}@media only screen and (min-width: 40.0625em){.joyride-tip-guide{width:300px;left:inherit}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{border-color:#333 !important;border-right-color:transparent !important;border-bottom-color:transparent !important;border-top-color:transparent !important;left:auto;right:-20px;top:22px}.joyride-tip-guide .joyride-nub.left{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-top-color:transparent !important;left:-20px;right:auto;top:22px}}.label{display:inline-block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1;margin-bottom:auto;position:relative;text-align:center;text-decoration:none;white-space:nowrap;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#008CBA;color:#fff}.label.radius{border-radius:3px}.label.round{border-radius:1000px}.label.alert{background-color:#f04124;color:#fff}.label.warning{background-color:#f08a24;color:#fff}.label.success{background-color:#43AC6A;color:#fff}.label.secondary{background-color:#e7e7e7;color:#333}.label.info{background-color:#a0d3e8;color:#333}.off-canvas-wrap{-webkit-backface-visibility:hidden;position:relative;width:100%;overflow:hidden}.off-canvas-wrap.move-right,.off-canvas-wrap.move-left{min-height:100%;-webkit-overflow-scrolling:touch}.inner-wrap{position:relative;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.inner-wrap:before,.inner-wrap:after{content:" ";display:table}.inner-wrap:after{clear:both}.tab-bar{-webkit-backface-visibility:hidden;background:#333;color:#fff;height:2.8125rem;line-height:2.8125rem;position:relative}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4,.tab-bar h5,.tab-bar h6{color:#fff;font-weight:bold;line-height:2.8125rem;margin:0}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4{font-size:1.125rem}.left-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-right:solid 1px #1a1a1a;left:0}.right-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-left:solid 1px #1a1a1a;right:0}.tab-bar-section{height:2.8125rem;padding:0 0.625rem;position:absolute;text-align:center;top:0}.tab-bar-section.left{text-align:left}.tab-bar-section.right{text-align:right}.tab-bar-section.left{left:0;right:2.8125rem}.tab-bar-section.right{left:2.8125rem;right:0}.tab-bar-section.middle{left:2.8125rem;right:2.8125rem}.tab-bar .menu-icon{color:#fff;display:block;height:2.8125rem;padding:0;position:relative;text-indent:2.1875rem;transform:translate3d(0, 0, 0);width:2.8125rem}.tab-bar .menu-icon span::after{content:"";display:block;height:0;position:absolute;top:50%;margin-top:-0.5rem;left:0.90625rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:1rem}.tab-bar .menu-icon span:hover:after{box-shadow:0 0 0 1px #b3b3b3,0 7px 0 1px #b3b3b3,0 14px 0 1px #b3b3b3}.left-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.left-off-canvas-menu *{-webkit-backface-visibility:hidden}.right-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0}.right-off-canvas-menu *{-webkit-backface-visibility:hidden}ul.off-canvas-list{list-style-type:none;margin:0;padding:0}ul.off-canvas-list li label{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;display:block;font-size:0.75rem;font-weight:bold;margin:0;padding:0.3rem 0.9375rem;text-transform:uppercase}ul.off-canvas-list li a{border-bottom:1px solid #262626;color:rgba(255,255,255,0.7);display:block;padding:0.66667rem;transition:background 300ms ease}ul.off-canvas-list li a:hover{background:#242424}ul.off-canvas-list li a:active{background:#242424}.move-right>.inner-wrap{-webkit-transform:translate3d(15.625rem, 0, 0);-moz-transform:translate3d(15.625rem, 0, 0);-ms-transform:translate(15.625rem, 0);-ms-transform:translate3d(15.625rem, 0, 0);-o-transform:translate3d(15.625rem, 0, 0);transform:translate3d(15.625rem, 0, 0)}.move-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-left>.inner-wrap{-webkit-transform:translate3d(-15.625rem, 0, 0);-moz-transform:translate3d(-15.625rem, 0, 0);-ms-transform:translate(-15.625rem, 0);-ms-transform:translate3d(-15.625rem, 0, 0);-o-transform:translate3d(-15.625rem, 0, 0);transform:translate3d(-15.625rem, 0, 0)}.move-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap .left-off-canvas-menu,.offcanvas-overlap .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-left .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-right .left-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.no-csstransforms .left-off-canvas-menu{left:-15.625rem}.no-csstransforms .right-off-canvas-menu{right:-15.625rem}.no-csstransforms .move-left>.inner-wrap{right:15.625rem}.no-csstransforms .move-right>.inner-wrap{left:15.625rem}.left-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.left-submenu *{-webkit-backface-visibility:hidden}.left-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.left-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.left-submenu .back>a:before{content:"\AB";margin-right:.5rem;display:inline}.left-submenu.move-right,.left-submenu.offcanvas-overlap-right,.left-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.right-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.right-submenu *{-webkit-backface-visibility:hidden}.right-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.right-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.right-submenu .back>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-submenu.move-left,.right-submenu.offcanvas-overlap-left,.right-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before{content:"\AB";margin-right:.5rem;display:inline}.f-dropdown{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:2px;max-width:200px}.f-dropdown.open{display:block}.f-dropdown>*:first-child{margin-top:0}.f-dropdown>*:last-child{margin-bottom:0}.f-dropdown:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent #fff transparent;border-bottom-style:solid;position:absolute;top:-12px;left:10px;z-index:89}.f-dropdown:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent #ccc transparent;border-bottom-style:solid;position:absolute;top:-14px;left:9px;z-index:88}.f-dropdown.right:before{left:auto;right:10px}.f-dropdown.right:after{left:auto;right:9px}.f-dropdown.drop-right{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:2px;max-width:200px}.f-dropdown.drop-right.open{display:block}.f-dropdown.drop-right>*:first-child{margin-top:0}.f-dropdown.drop-right>*:last-child{margin-bottom:0}.f-dropdown.drop-right:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent #fff transparent transparent;border-right-style:solid;position:absolute;top:10px;left:-12px;z-index:89}.f-dropdown.drop-right:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent #ccc transparent transparent;border-right-style:solid;position:absolute;top:9px;left:-14px;z-index:88}.f-dropdown.drop-left{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:-2px;max-width:200px}.f-dropdown.drop-left.open{display:block}.f-dropdown.drop-left>*:first-child{margin-top:0}.f-dropdown.drop-left>*:last-child{margin-bottom:0}.f-dropdown.drop-left:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #fff;border-left-style:solid;position:absolute;top:10px;right:-12px;left:auto;z-index:89}.f-dropdown.drop-left:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #ccc;border-left-style:solid;position:absolute;top:9px;right:-14px;left:auto;z-index:88}.f-dropdown.drop-top{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-left:0;margin-top:-2px;max-width:200px}.f-dropdown.drop-top.open{display:block}.f-dropdown.drop-top>*:first-child{margin-top:0}.f-dropdown.drop-top>*:last-child{margin-bottom:0}.f-dropdown.drop-top:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:#fff transparent transparent transparent;border-top-style:solid;bottom:-12px;position:absolute;top:auto;left:10px;right:auto;z-index:89}.f-dropdown.drop-top:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:#ccc transparent transparent transparent;border-top-style:solid;bottom:-14px;position:absolute;top:auto;left:9px;right:auto;z-index:88}.f-dropdown li{cursor:pointer;font-size:0.875rem;line-height:1.125rem;margin:0}.f-dropdown li:hover,.f-dropdown li:focus{background:#eee}.f-dropdown li.radius{border-radius:3px}.f-dropdown li a{display:block;padding:0.5rem;color:#555}.f-dropdown.content{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;padding:1.25rem;width:100%;z-index:89;max-width:200px}.f-dropdown.content.open{display:block}.f-dropdown.content>*:first-child{margin-top:0}.f-dropdown.content>*:last-child{margin-bottom:0}.f-dropdown.tiny{max-width:200px}.f-dropdown.small{max-width:300px}.f-dropdown.medium{max-width:500px}.f-dropdown.large{max-width:800px}.f-dropdown.mega{width:100% !important;max-width:100% !important}.f-dropdown.mega.open{left:0 !important}table{background:#fff;border:solid 1px #ddd;margin-bottom:1.25rem;table-layout:auto}table caption{background:transparent;color:#222;font-size:1rem;font-weight:bold}table thead{background:#F5F5F5}table thead tr th,table thead tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tfoot{background:#F5F5F5}table tfoot tr th,table tfoot tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tr th,table tr td{color:#222;font-size:0.875rem;padding:0.5625rem 0.625rem;text-align:left}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#F9F9F9}table thead tr th,table tfoot tr th,table tfoot tr td,table tbody tr th,table tbody tr td,table tr td{display:table-cell;line-height:1.125rem}.range-slider{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:block;height:1rem;width:100%;background:#FAFAFA}.range-slider.vertical-range{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:inline-block;height:12.5rem;width:1rem}.range-slider.vertical-range .range-slider-handle{bottom:-10.5rem;margin-left:-0.5rem;margin-top:0;position:absolute}.range-slider.vertical-range .range-slider-active-segment{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-top-left-radius:initial;bottom:0;height:auto;width:0.875rem}.range-slider.radius{background:#FAFAFA;border-radius:3px}.range-slider.radius .range-slider-handle{background:#008CBA;border-radius:3px}.range-slider.radius .range-slider-handle:hover{background:#007ba4}.range-slider.round{background:#FAFAFA;border-radius:1000px}.range-slider.round .range-slider-handle{background:#008CBA;border-radius:1000px}.range-slider.round .range-slider-handle:hover{background:#007ba4}.range-slider.disabled,.range-slider[disabled]{background:#FAFAFA;cursor:not-allowed;opacity:0.7}.range-slider.disabled .range-slider-handle,.range-slider[disabled] .range-slider-handle{background:#008CBA;cursor:default;opacity:0.7}.range-slider.disabled .range-slider-handle:hover,.range-slider[disabled] .range-slider-handle:hover{background:#007ba4}.range-slider-active-segment{background:#e5e5e5;border-bottom-left-radius:inherit;border-top-left-radius:inherit;display:inline-block;height:0.875rem;position:absolute}.range-slider-handle{border:1px solid none;cursor:pointer;display:inline-block;height:1.375rem;position:absolute;top:-0.3125rem;width:2rem;z-index:1;-ms-touch-action:manipulation;touch-action:manipulation;background:#008CBA}.range-slider-handle:hover{background:#007ba4}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;float:left;height:auto;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{list-style:none;width:100%}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{list-style:none;width:50%}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{list-style:none;width:33.33333%}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{list-style:none;width:25%}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{list-style:none;width:20%}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{list-style:none;width:16.66667%}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{list-style:none;width:14.28571%}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{list-style:none;width:12.5%}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{list-style:none;width:11.11111%}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{list-style:none;width:10%}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{list-style:none;width:9.09091%}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{list-style:none;width:8.33333%}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 40.0625em){.medium-block-grid-1>li{list-style:none;width:100%}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{list-style:none;width:50%}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{list-style:none;width:33.33333%}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{list-style:none;width:25%}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{list-style:none;width:20%}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{list-style:none;width:16.66667%}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{list-style:none;width:14.28571%}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{list-style:none;width:12.5%}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{list-style:none;width:11.11111%}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{list-style:none;width:10%}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{list-style:none;width:9.09091%}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{list-style:none;width:8.33333%}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 64.0625em){.large-block-grid-1>li{list-style:none;width:100%}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{list-style:none;width:50%}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{list-style:none;width:33.33333%}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{list-style:none;width:25%}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{list-style:none;width:20%}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{list-style:none;width:16.66667%}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{list-style:none;width:14.28571%}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{list-style:none;width:12.5%}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{list-style:none;width:11.11111%}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{list-style:none;width:10%}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{list-style:none;width:9.09091%}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{list-style:none;width:8.33333%}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}}.flex-video{height:0;margin-bottom:1rem;overflow:hidden;padding-bottom:67.5%;padding-top:1.5625rem;position:relative}.flex-video.widescreen{padding-bottom:56.34%}.flex-video.vimeo{padding-top:0}.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{height:100%;position:absolute;top:0;width:100%;left:0}.keystroke,kbd{background-color:#ededed;border-color:#ddd;color:#222;border-style:solid;border-width:1px;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;margin:0;padding:0.125rem 0.25rem 0;border-radius:3px}.switch{border:none;margin-bottom:1.5rem;outline:0;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{background:#ddd;color:transparent;cursor:pointer;display:block;margin-bottom:1rem;position:relative;text-indent:100%;width:4rem;height:2rem;transition:left 0.15s ease-out}.switch input{left:10px;opacity:0;padding:0;position:absolute;top:9px}.switch input+label{margin-left:0;margin-right:0}.switch label:after{background:#fff;content:"";display:block;height:1.5rem;left:.25rem;position:absolute;top:.25rem;width:1.5rem;-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;-o-transition:translate3d(0, 0, 0);transition:left 0.15s ease-out;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.switch input:checked+label{background:#008CBA}.switch input:checked+label:after{left:2.25rem}.switch label{height:2rem;width:4rem}.switch label:after{height:1.5rem;width:1.5rem}.switch input:checked+label:after{left:2.25rem}.switch label{color:transparent;background:#ddd}.switch label:after{background:#fff}.switch input:checked+label{background:#008CBA}.switch.large label{height:2.5rem;width:5rem}.switch.large label:after{height:2rem;width:2rem}.switch.large input:checked+label:after{left:2.75rem}.switch.small label{height:1.75rem;width:3.5rem}.switch.small label:after{height:1.25rem;width:1.25rem}.switch.small input:checked+label:after{left:2rem}.switch.tiny label{height:1.5rem;width:3rem}.switch.tiny label:after{height:1rem;width:1rem}.switch.tiny input:checked+label:after{left:1.75rem}.switch.radius label{border-radius:4px}.switch.radius label:after{border-radius:3px}.switch.round{border-radius:1000px}.switch.round label{border-radius:2rem}.switch.round label:after{border-radius:2rem}@media only screen{.show-for-small-only,.show-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.hide-for-small-only,.hide-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.visible-for-small-only,.visible-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.hidden-for-small-only,.hidden-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.show-for-small-only,table.show-for-small-up,table.show-for-small,table.show-for-small-down,table.hide-for-medium-only,table.hide-for-medium-up,table.hide-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.show-for-small-only,thead.show-for-small-up,thead.show-for-small,thead.show-for-small-down,thead.hide-for-medium-only,thead.hide-for-medium-up,thead.hide-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.show-for-small-only,tbody.show-for-small-up,tbody.show-for-small,tbody.show-for-small-down,tbody.hide-for-medium-only,tbody.hide-for-medium-up,tbody.hide-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.show-for-small-only,tr.show-for-small-up,tr.show-for-small,tr.show-for-small-down,tr.hide-for-medium-only,tr.hide-for-medium-up,tr.hide-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.show-for-small-only,td.show-for-small-only,th.show-for-small-up,td.show-for-small-up,th.show-for-small,td.show-for-small,th.show-for-small-down,td.show-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.hide-for-medium-up,td.hide-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 40.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.show-for-medium-only,table.show-for-medium-up,table.show-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.show-for-medium-only,thead.show-for-medium-up,thead.show-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.show-for-medium-only,tbody.show-for-medium-up,tbody.show-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.show-for-medium-only,tr.show-for-medium-up,tr.show-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.show-for-medium-only,td.show-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.show-for-medium,td.show-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 64.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.show-for-large-only,table.show-for-large-up,table.show-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.show-for-large-only,thead.show-for-large-up,thead.show-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.show-for-large-only,tbody.show-for-large-up,tbody.show-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.show-for-large-only,tr.show-for-large-up,tr.show-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.show-for-large-only,td.show-for-large-only,th.show-for-large-up,td.show-for-large-up,th.show-for-large,td.show-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 90.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.show-for-xlarge-only,table.show-for-xlarge-up,table.show-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.show-for-xlarge-only,thead.show-for-xlarge-up,thead.show-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.show-for-xlarge-only,tbody.show-for-xlarge-up,tbody.show-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.show-for-xlarge-only,tr.show-for-xlarge-up,tr.show-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.show-for-xlarge-only,td.show-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.show-for-xlarge,td.show-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 120.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.hide-for-xlarge-only,.show-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.show-for-xlarge-only,.hide-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.hidden-for-xlarge-only,.visible-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.visible-for-xlarge-only,.hidden-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.hide-for-xlarge-only,table.show-for-xlarge-up,table.hide-for-xlarge,table.hide-for-xlarge-down,table.show-for-xxlarge-only,table.show-for-xxlarge-up,table.show-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.hide-for-xlarge-only,thead.show-for-xlarge-up,thead.hide-for-xlarge,thead.hide-for-xlarge-down,thead.show-for-xxlarge-only,thead.show-for-xxlarge-up,thead.show-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.hide-for-xlarge-only,tbody.show-for-xlarge-up,tbody.hide-for-xlarge,tbody.hide-for-xlarge-down,tbody.show-for-xxlarge-only,tbody.show-for-xxlarge-up,tbody.show-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.hide-for-xlarge-only,tr.show-for-xlarge-up,tr.hide-for-xlarge,tr.hide-for-xlarge-down,tr.show-for-xxlarge-only,tr.show-for-xxlarge-up,tr.show-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.hide-for-xlarge-down,td.hide-for-xlarge-down,th.show-for-xxlarge-only,td.show-for-xxlarge-only,th.show-for-xxlarge-up,td.show-for-xxlarge-up,th.show-for-xxlarge,td.show-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.hide-for-landscape,table.show-for-portrait{display:table !important}thead.hide-for-landscape,thead.show-for-portrait{display:table-header-group !important}tbody.hide-for-landscape,tbody.show-for-portrait{display:table-row-group !important}tr.hide-for-landscape,tr.show-for-portrait{display:table-row !important}td.hide-for-landscape,td.show-for-portrait,th.hide-for-landscape,th.show-for-portrait{display:table-cell !important}@media only screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.show-for-landscape,table.hide-for-portrait{display:table !important}thead.show-for-landscape,thead.hide-for-portrait{display:table-header-group !important}tbody.show-for-landscape,tbody.hide-for-portrait{display:table-row-group !important}tr.show-for-landscape,tr.hide-for-portrait{display:table-row !important}td.show-for-landscape,td.hide-for-portrait,th.show-for-landscape,th.hide-for-portrait{display:table-cell !important}}@media only screen and (orientation: portrait){.show-for-portrait,.hide-for-landscape{display:inherit !important}.hide-for-portrait,.show-for-landscape{display:none !important}table.show-for-portrait,table.hide-for-landscape{display:table !important}thead.show-for-portrait,thead.hide-for-landscape{display:table-header-group !important}tbody.show-for-portrait,tbody.hide-for-landscape{display:table-row-group !important}tr.show-for-portrait,tr.hide-for-landscape{display:table-row !important}td.show-for-portrait,td.hide-for-landscape,th.show-for-portrait,th.hide-for-landscape{display:table-cell !important}}.show-for-touch{display:none !important}.hide-for-touch{display:inherit !important}.touch .show-for-touch{display:inherit !important}.touch .hide-for-touch{display:none !important}table.hide-for-touch{display:table !important}.touch table.show-for-touch{display:table !important}thead.hide-for-touch{display:table-header-group !important}.touch thead.show-for-touch{display:table-header-group !important}tbody.hide-for-touch{display:table-row-group !important}.touch tbody.show-for-touch{display:table-row-group !important}tr.hide-for-touch{display:table-row !important}.touch tr.show-for-touch{display:table-row !important}td.hide-for-touch{display:table-cell !important}.touch td.show-for-touch{display:table-cell !important}th.hide-for-touch{display:table-cell !important}.touch th.show-for-touch{display:table-cell !important}.show-for-sr{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus:focus,.show-on-focus:active{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.print-only{display:none !important}@media print{*{background:transparent !important;box-shadow:none !important;color:#000 !important;text-shadow:none !important}.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.hide-on-print{display:none !important}.print-only{display:block !important}.hide-for-print{display:none !important}.show-for-print{display:inherit !important}}@media print{.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}}@media not print{.show-for-print{display:none !important}} diff --git a/production/example_apps/shared_calendar/webroot/css/cake.css b/production/example_apps/shared_calendar/webroot/css/cake.css new file mode 100644 index 00000000..10841c89 --- /dev/null +++ b/production/example_apps/shared_calendar/webroot/css/cake.css @@ -0,0 +1,525 @@ +.disabled a, +a.disabled { + pointer-events: none; +} + +a:hover { + color: #15848F; +} + +a { + color: #1798A5; +} + +.side-nav li a:not(.button) { + color: #15848F; +} + +.side-nav li a:not(.button):hover { + color: #15848F; +} + +header { + background-color: #D33C44; + color: #ffffff; + font-size: 30px; + height: 84px; + line-height: 64px; + padding: 16px 0px; + box-shadow: 0px 1px rgba(0, 0, 0, 0.24); +} + +header .header-title { + padding-left:80px +} + +legend { + color:#15848F; +} + +.row { + max-width: 80rem; +} + +.actions.columns { + margin-top:1rem; + border-left: 5px solid #15848F; + padding-left: 15px; + padding: 32px 20px; +} + +.actions.columns h3 { + color:#15848F; +} + +.related table { + border: 0; + width: 100%; + table-layout: fixed; +} + +.index table thead { + height: 3.5rem; +} + +.header-help { + float: right; + margin-right:2rem; + margin-top: -80px; + font-size:16px; +} + +.header-help span { + font-weight: normal; + text-align: center; + text-decoration: none; + line-height: 1; + white-space: nowrap; + display: inline-block; + padding: 0.25rem 0.5rem 0.375rem; + font-size: 0.8rem; + background-color: #0097a7; + color: #FFF; + border-radius: 1000px; +} + +.header-help a { + color: #fff; +} + +ul.pagination li a { + color: rgba(0, 0 ,0 , 0.54); +} + +ul.pagination li.active a { + background-color: #DCE47E; + color: #FFF; + font-weight: bold; + cursor: default; +} +ul.pagination .disabled:hover a { + background: none; +} + +.paginator { + text-align: center; +} + +.paginator ul.pagination li { + float: none; + display: inline-block; +} + +.paginator p { + text-align: right; + color: rgba(0, 0 ,0 , 0.54); +} + +.asc:after { + content: " \2193"; +} +.desc:after { + content: " \2191"; +} + +.form .error-message { + display: block; + padding: 0.375rem 0.5625rem 0.5625rem; + margin-top: -1px; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: normal; + font-style: italic; + color: rgba(0, 0, 0, 0.54); +} + +.required > label { + font-weight: bold; +} +.required > label:after { + content: ' *'; + color: #C3232D; +} + +select[multiple] { + min-height:150px; + background: none; +} +input[type=checkbox], +input[type=radio] { + margin-right: 0.5em; +} + +.date select, +.time select, +.datetime select { + display: inline; + width: auto; + margin-right: 10px; +} + +.error label, +.error label.error { + color: #C3232D; +} + +.view h2 { + color: #6F6F6F; +} + +.view .columns.strings { + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right:0.7rem; +} + +.view .numbers { + background-color: #B7E3EC; + color: #FFF; + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right: 0.7rem; +} + +.view .columns.dates { + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right:0.7rem; + background-color:#DCE47E; + color: #fff; +} + +.view .columns.booleans { + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right:0.7rem; + background-color: #8D6E65; + color: #fff; +} + +.view .strings p { + border-bottom: 1px solid #eee; +} +.view .numbers .subheader, .view .dates .subheader { + color:#747474; +} +.view .booleans .subheader { + color: #E9E9E9 +} + +.view .texts .columns { + margin-top:1.2rem; + border-bottom: 1px solid #eee; +} + +/** Notices and Errors **/ +.cake-error, +.cake-debug, +.notice, +p.error, +p.notice { + display: block; + clear: both; + background-repeat: repeat-x; + margin-bottom: 18px; + padding: 7px 14px; + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); +} + +.cake-debug, +.notice, +p.notice { + color: #000000; + background: #ffcc00; +} + +.cake-error, +p.error { + color: #fff; + background: #C3232D; +} + +pre { + background: none repeat scroll 0% 0% #FFF; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin: 15px 0px; + color: rgba(0, 0 ,0 , 0.74); + padding:5px; +} + +.cake-error .cake-stack-trace { + margin-top:10px; +} + +.cake-stack-trace code { + background: inherit; + border:0; +} + +.cake-code-dump .code-highlight { + display: block; + background-color: #FFC600; +} + +.cake-error a, +.cake-error a:hover { + color:#fff; + text-decoration: underline; +} + +.checks { + padding:30px; + color: #626262; + background-color: #B7E3EC; + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-bottom: 2em; +} + +.checks h4 { + margin-bottom: 1.5rem; +} + +.checks hr { + border: 0; + height: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.3); +} + +.checks .success, +.checks .problem { + margin-left: 10px; +} +.checks .success:before, +.checks .problem:before { + line-height: 0px; + font-size: 28px; + height: 12px; + width: 12px; + border-radius: 15px; + text-align: center; + vertical-align: middle; + display: inline-block; + position: relative; + left: -11px; +} + +.checks .success:before { + content: "✓"; + color: green; + margin-right: 9px; +} + +.checks .problem:before { + content: "✘"; + color: red; + margin-right: 9px; +} + +.top-bar.expanded .title-area { + background: #01545b; +} + +.top-bar.expanded, .top-bar,.top-bar-section ul li,.top-bar-section li:not(.has-form) a:not(.button) { + background: #116d76; +} + +.top-bar-section li:not(.has-form) a:not(.button):hover { + background-color: #308e97; + background: #308e97; +} + +.side-nav li.heading { + color: #1798A5; + font-size: 0.875rem; + font-weight: bold; + text-transform: uppercase; + padding: 0.4375rem 0.875rem; +} + +#actions-sidebar { + background: #fafafa; +} + +.index table { + margin-top: 0rem; + border: 0; + width: 100%; + table-layout: fixed; +} + +table { + background: #fff; + margin-bottom: 1.25rem; + border: none; + table-layout: fixed; + width: 100%; +} + +table thead { + background: none; +} + +table tr { + border-bottom: 1px solid #ebebec; +} + +table thead tr { + border-bottom: 1px solid #1798A5; +} + +table tr th { + padding: 0.5625rem 0.625rem; + font-size: 0.875rem; + color: #1798A5; + text-align: left; + border-bottom: 2px solid #1798A5; +} + +table tr:nth-of-type(even) { + background: none; +} + +fieldset { + border: none; + padding: 1.25rem; + margin: 1.125rem 0; +} + +fieldset legend { + border-bottom: 2px solid #1798A5; + width: 100%; + line-height: 2rem; +} + +.form button[type="submit"] { + float: right; + text-transform: uppercase; + box-shadow: none; +} + +.form button:hover, .form button:focus { + background: #BE840B; + box-shadow: none; +} + +button { + background: #966600; +} + +div.message { + text-align: center; + cursor: pointer; + display: block; + font-weight: normal; + padding: 0 1.5rem 0 1.5rem; + transition: height 300ms ease-out 0s; + background-color: #a0d3e8; + color: #626262; + top: 15px; + right: 15px; + z-index: 999; + overflow: hidden; + height: 50px; + line-height: 2.5em; + box-radius: 5px; +} + +div.message:before { + line-height: 0px; + font-size: 20px; + height: 12px; + width: 12px; + border-radius: 15px; + text-align: center; + vertical-align: middle; + display: inline-block; + position: relative; + left: -11px; + background-color: #FFF; + padding: 12px 14px 12px 10px; + content: "i"; + color: #a0d3e8; +} + +div.message.error { + background-color: #C3232D; + color: #FFF; +} + +div.message.error:before { + padding: 11px 16px 14px 7px; + color: #C3232D; + content: "x"; +} +div.message.hidden { + height: 0; +} + + +.vertical-table th { + padding: 0.5625rem 0.625rem; + font-size: 0.875rem; + color: #1798A5; + border: none; + text-align: left; +} + +.vertical-table { + vertical-align: middle; +} + +.vertical-table td { + text-align: right; +} + +.content { + padding: 2rem; +} + +/* Use 'one true layout' methods to get equal height columns */ +.container { + overflow: hidden; + min-height: 92%; /* full height almost always */ +} + +/* Force equal height by overflowing */ +.content, +#actions-sidebar { + margin-bottom: -99999px; + padding-bottom: 99999px; +} +@media(max-width: 640px) { + #actions-sidebar { + padding-bottom: 2rem; + margin-bottom: 0; + } +} + +.content h3 { + color: #be140b; + padding-bottom: 0.5rem; + margin-bottom: 20px; +} + +.content h4 { + color: #be140b; + padding-bottom: 0.5rem; + margin-bottom: 20px; + border-bottom: 2px solid #be140b; +} + +.content .related h4 { + color: #4d8f97; + padding-bottom: 0.5rem; + margin-top: 20px; + margin-bottom: 10px; + border-bottom: 0px; +} + +table td { + vertical-align: top; + word-break: break-all; +} diff --git a/production/example_apps/shared_calendar/webroot/css/home.css b/production/example_apps/shared_calendar/webroot/css/home.css new file mode 100644 index 00000000..d1db7780 --- /dev/null +++ b/production/example_apps/shared_calendar/webroot/css/home.css @@ -0,0 +1,250 @@ +@font-face { + font-family: 'cakefont'; + src: url('../font/cakedingbats-webfont.eot'); + src: url('../font/cakedingbats-webfont.eot?#iefix') format('embedded-opentype'), + url('../font/cakedingbats-webfont.woff2') format('woff2'), + url('../font/cakedingbats-webfont.woff') format('woff'), + url('../font/cakedingbats-webfont.ttf') format('truetype'), + url('../font/cakedingbats-webfont.svg#cake_dingbatsregular') format('svg'); + font-weight: normal; + font-style: normal; +} + +.home { + font-family: 'Roboto', sans-serif; + font-size: 14px; + line-height: 27px; + color: #404041; +} + +.fredmenu { + font-size: 28px; + text-align: center; +} + +.fredmenu li { + font-size: 28px; +} + +a { + color: #0071BC; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -ms-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +a:hover, a:active { + color: #d33d44; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -ms-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +ul, ol, dl, p { + font-size: 0.85rem; +} + +p { + line-height: 2; +} + +header { + height: auto; + line-height: 1em; + padding: 0; + box-shadow: none; +} + +header.row { + margin-bottom: 30px; +} + +header .header-image { + text-align: center; + padding: 64px 0; + background: #b060f1; +} + +header .header-title { + padding: 0; + display: block; + background: #404041; + text-align: center; +} + +header .header-title h1 { + font-family: 'Raleway', sans-serif; + margin: 0; + font-style: italic; + font-size: 18px; + font-weight: 500; + padding: 18px 30px; + color: #DEDED5; +} + +header h1 { + color: #fff; +} + +h3, h4 { + font-family: 'Roboto', sans-serif; + font-size: 27px; + line-height: 30px; + font-weight: 300; + -webkit-font-smoothing: antialiased; + margin-top: 0; + margin-bottom: 20px; +} + +.more { + color: #ffffff; + background-color: #d33d44; + padding: 15px; + margin-top: 10px; +} + +.row { + max-width: 1000px; +} + +.alert { + background-color: #fff9e1; + font-size: 12px; + text-align: center; + display: block; + padding: 12px; + border-bottom: 2px solid #ffcf06; +} + +.alert { + background-color: #fff9e1; + font-size: 12px; + display: block; + padding: 12px; + border-bottom: 2px solid #ffcf06; + margin-bottom: 30px; + color: #404041; +} + +.alert p { + margin: 0; + font-size: 12px; + line-height: 1.4; +} + +.alert p:before { + color: #ffcf06; + content: "\0055"; + font-family: 'cakefont', sans-serif; + font-size: 21px; + margin-left: -0.8em; + width: 2.3em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 0 10px 0 15px; + vertical-align: -2px; +} + +.alert ul { + margin: 0; + font-size: 12px; +} + +.alert.url-rewriting { + background-color: #F0F0F0; + border-color: #cccccc; + display: none; +} + +.text-center { + text-align: center; +} + +ul { + list-style-type: none; + margin: 0 0 30px 0; +} + +li { + padding-left: 1.8em; +} + +ul li ul, ul li ul li { + margin: 0; + padding: 0; +} + +.bullet:before { + font-family: 'cakefont', sans-serif; + font-size: 18px; + display: inline-block; + margin-left: -1.3em; + width: 1.2em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: -1px; +} + +.success:before { + color: #88c671; + content: "\0056"; +} + +.problem:before { + color: #d33d44; + content: "\0057"; +} + +.cutlery:before { + color: #404041; + content: "\0059"; +} + +.book:before { + color: #404041; + content: "\0042"; + width: 1.7em; +} + +hr { + border-bottom: 1px solid #e7e7e7; + border-top: 0; + margin-bottom: 35px; + margin-left: 30px; + margin-right: 30px; +} + + +.icon { + color: #404041; + font-style: normal; + font-family: 'cakefont', sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.icon.support { + font-size: 60px; +} +.icon.docs { + font-size: 57px; +} +.icon.training { + font-size: 39px; +} + +@media (min-width: 768px) { + .columns { + padding-left: 30px; + padding-right: 30px; + } +} + +@media (min-width: 992px) { + header.row { + max-width: 940px; + } +} diff --git a/production/example_apps/shared_calendar/webroot/favicon.ico b/production/example_apps/shared_calendar/webroot/favicon.ico new file mode 100644 index 00000000..49a060fc Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/favicon.ico differ diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot new file mode 100644 index 00000000..e8605d92 Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.eot differ diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.svg b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.svg new file mode 100644 index 00000000..d1e0c98f --- /dev/null +++ b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf new file mode 100644 index 00000000..13d54454 Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.ttf differ diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff new file mode 100644 index 00000000..073baab1 Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff differ diff --git a/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2 b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2 new file mode 100644 index 00000000..6e71eaf5 Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/font/cakedingbats-webfont.woff2 differ diff --git a/production/example_apps/shared_calendar/webroot/img/cake-logo.png b/production/example_apps/shared_calendar/webroot/img/cake-logo.png new file mode 100644 index 00000000..41939ef5 Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/img/cake-logo.png differ diff --git a/production/example_apps/shared_calendar/webroot/img/cake.icon.png b/production/example_apps/shared_calendar/webroot/img/cake.icon.png new file mode 100644 index 00000000..394fa42d Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/img/cake.icon.png differ diff --git a/production/example_apps/shared_calendar/webroot/img/cake.logo.svg b/production/example_apps/shared_calendar/webroot/img/cake.logo.svg new file mode 100644 index 00000000..e73abb54 --- /dev/null +++ b/production/example_apps/shared_calendar/webroot/img/cake.logo.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/production/example_apps/shared_calendar/webroot/img/cake.power.gif b/production/example_apps/shared_calendar/webroot/img/cake.power.gif new file mode 100644 index 00000000..8f8d570a Binary files /dev/null and b/production/example_apps/shared_calendar/webroot/img/cake.power.gif differ diff --git a/production/example_apps/shared_calendar/webroot/index.php b/production/example_apps/shared_calendar/webroot/index.php new file mode 100644 index 00000000..6791f475 --- /dev/null +++ b/production/example_apps/shared_calendar/webroot/index.php @@ -0,0 +1,37 @@ +emit($server->run()); diff --git a/production/example_apps/shared_calendar/webroot/js/empty b/production/example_apps/shared_calendar/webroot/js/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/.buildpath b/production/example_apps/zippy_maps/.buildpath new file mode 100644 index 00000000..8bcb4b5f --- /dev/null +++ b/production/example_apps/zippy_maps/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/production/example_apps/zippy_maps/.editorconfig b/production/example_apps/zippy_maps/.editorconfig new file mode 100644 index 00000000..70619017 --- /dev/null +++ b/production/example_apps/zippy_maps/.editorconfig @@ -0,0 +1,18 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.bat] +end_of_line = crlf + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/production/example_apps/zippy_maps/.gitattributes b/production/example_apps/zippy_maps/.gitattributes new file mode 100644 index 00000000..6dedcf58 --- /dev/null +++ b/production/example_apps/zippy_maps/.gitattributes @@ -0,0 +1,48 @@ +# Define the line ending behavior of the different file extensions +# Set default behaviour, in case users don't have core.autocrlf set. +* text=auto +* text eol=lf + +# Explicitly declare text files we want to always be normalized and converted +# to native line endings on checkout. +*.php text +*.default text +*.ctp text +*.sql text +*.md text +*.po text +*.js text +*.css text +*.ini text +*.properties text +*.txt text +*.xml text +*.svg text +*.yml text +.htaccess text + +# Declare files that will always have CRLF line endings on checkout. +*.bat eol=crlf + +# Declare files that will always have LF line endings on checkout. +*.pem eol=lf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.gif binary +*.ico binary +*.mo binary +*.pdf binary +*.phar binary +*.woff binary +*.woff2 binary +*.ttf binary +*.otf binary +*.eot binary +*.gz binary + +# ahem, zip files binary too. --fred +*.zip binary + + diff --git a/production/example_apps/zippy_maps/.github/ISSUE_TEMPLATE.md b/production/example_apps/zippy_maps/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..92c77d6b --- /dev/null +++ b/production/example_apps/zippy_maps/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,23 @@ +This is a (multiple allowed): + +* [x] bug +* [ ] enhancement +* [ ] feature-discussion (RFC) + +* CakePHP Application Skeleton Version: EXACT RELEASE VERSION OR COMMIT HASH, HERE. +* Platform and Target: YOUR WEB-SERVER, DATABASE AND OTHER RELEVANT INFO AND HOW THE REQUEST IS BEING MADE, HERE. + +### What you did +EXPLAIN WHAT YOU DID, PREFERABLY WITH CODE EXAMPLES, HERE. + +### What happened +EXPLAIN WHAT IS ACTUALLY HAPPENING, HERE. + +### What you expected to happen +EXPLAIN WHAT IS TO BE EXPECTED, HERE. + +P.S. Remember, an issue is not the place to ask questions. You can use [Stack Overflow](http://stackoverflow.com/questions/tagged/cakephp) +for that or join the #cakephp channel on irc.freenode.net, where we will be more +than happy to help answer your questions. + +Before you open an issue, please check if a similar issue already exists or has been closed before. \ No newline at end of file diff --git a/production/example_apps/zippy_maps/.github/PULL_REQUEST_TEMPLATE.md b/production/example_apps/zippy_maps/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..05ca9eb6 --- /dev/null +++ b/production/example_apps/zippy_maps/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,10 @@ +**PLEASE NOTE:** + +This is only a issue tracker for issues related to the CakePHP Application Skeleton. +For CakePHP Framework issues please use this [issue tracker](https://github.com/cakephp/cakephp/issues). + +Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue. + +The best way to propose a feature is to open an issue first and discuss your ideas there before implementing them. + +Always follow the [contribution guidelines](https://github.com/cakephp/cakephp/blob/master/.github/CONTRIBUTING.md) guidelines when submitting a pull request. In particular, make sure existing tests still pass, and add tests for all new behavior. When fixing a bug, you may want to add a test to verify the fix. \ No newline at end of file diff --git a/production/example_apps/zippy_maps/.gitignore b/production/example_apps/zippy_maps/.gitignore new file mode 100644 index 00000000..8a18ddc3 --- /dev/null +++ b/production/example_apps/zippy_maps/.gitignore @@ -0,0 +1,10 @@ +/vendor/* +/config/app.php +/config/*secret* +/config/config_google.php +/tmp/* +/logs/* +/vendor/ +/webroot/avmaps +/webroot/debug_kit + diff --git a/production/example_apps/zippy_maps/.htaccess b/production/example_apps/zippy_maps/.htaccess new file mode 100644 index 00000000..bc1dd9c0 --- /dev/null +++ b/production/example_apps/zippy_maps/.htaccess @@ -0,0 +1,11 @@ +# Uncomment the following to prevent the httpoxy vulnerability +# See: https://httpoxy.org/ +# +# RequestHeader unset Proxy +# + + + RewriteEngine on + RewriteRule ^$ webroot/ [L] + RewriteRule (.*) webroot/$1 [L] + diff --git a/production/example_apps/zippy_maps/.project b/production/example_apps/zippy_maps/.project new file mode 100644 index 00000000..7049fd51 --- /dev/null +++ b/production/example_apps/zippy_maps/.project @@ -0,0 +1,28 @@ + + + zip_code_maps + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.dltk.core.scriptbuilder + + + + + + org.eclipse.php.core.PHPNature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/production/example_apps/zippy_maps/.settings/org.eclipse.php.core.prefs b/production/example_apps/zippy_maps/.settings/org.eclipse.php.core.prefs new file mode 100644 index 00000000..7354a248 --- /dev/null +++ b/production/example_apps/zippy_maps/.settings/org.eclipse.php.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +include_path=0;/zip_code_maps diff --git a/production/example_apps/zippy_maps/.settings/org.eclipse.wst.common.project.facet.core.xml b/production/example_apps/zippy_maps/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 00000000..4743dbb5 --- /dev/null +++ b/production/example_apps/zippy_maps/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/production/example_apps/zippy_maps/.travis.yml b/production/example_apps/zippy_maps/.travis.yml new file mode 100644 index 00000000..befdb98e --- /dev/null +++ b/production/example_apps/zippy_maps/.travis.yml @@ -0,0 +1,30 @@ +language: php + +dist: trusty + +sudo: false + +php: + - 5.6 + - 7.0 + - 7.1 + +matrix: + fast_finish: true + + include: + - php: 7.0 + env: PHPCS=1 + +before_script: + - if [[ $PHPCS = 1 ]]; then composer require cakephp/cakephp-codesniffer:~2.1; fi + - if [[ $PHPCS != 1 ]]; then composer install; fi + - if [[ $PHPCS != 1 ]]; then composer require phpunit/phpunit:"^5.7|^6.0"; fi + - if [[ $PHPCS != 1 ]]; then composer run-script post-install-cmd --no-interaction; fi + +script: + - if [[ $PHPCS != 1 ]]; then vendor/bin/phpunit; fi + - if [[ $PHPCS = 1 ]]; then vendor/bin/phpcs -p --extensions=php --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests ./config ./webroot; fi + +notifications: + email: false diff --git a/production/example_apps/zippy_maps/bin/cake b/production/example_apps/zippy_maps/bin/cake new file mode 100755 index 00000000..6801c45b --- /dev/null +++ b/production/example_apps/zippy_maps/bin/cake @@ -0,0 +1,46 @@ +#!/usr/bin/env sh +################################################################################ +# +# Cake is a shell script for invoking CakePHP shell commands +# +# CakePHP(tm) : Rapid Development Framework (http://cakephp.org) +# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# +# Licensed under The MIT License +# For full copyright and license information, please see the LICENSE.txt +# Redistributions of files must retain the above copyright notice. +# +# @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# @link http://cakephp.org CakePHP(tm) Project +# @since 1.2.0 +# @license http://www.opensource.org/licenses/mit-license.php MIT License +# +################################################################################ + +# Canonicalize by following every symlink of the given name recursively +canonicalize() { + NAME="$1" + if [ -f "$NAME" ] + then + DIR=$(dirname -- "$NAME") + NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME") + fi + while [ -h "$NAME" ]; do + DIR=$(dirname -- "$NAME") + SYM=$(readlink "$NAME") + NAME=$(cd "$DIR" > /dev/null && cd $(dirname -- "$SYM") > /dev/null && pwd)/$(basename -- "$SYM") + done + echo "$NAME" +} + +CONSOLE=$(dirname -- "$(canonicalize "$0")") +APP=$(dirname "$CONSOLE") + +if [ $(basename $0) != 'cake' ] +then + exec php "$CONSOLE"/cake.php $(basename $0) "$@" +else + exec php "$CONSOLE"/cake.php "$@" +fi + +exit diff --git a/production/example_apps/zippy_maps/bin/cake.bat b/production/example_apps/zippy_maps/bin/cake.bat new file mode 100644 index 00000000..d4512dbf --- /dev/null +++ b/production/example_apps/zippy_maps/bin/cake.bat @@ -0,0 +1,27 @@ +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Cake is a Windows batch script for invoking CakePHP shell commands +:: +:: CakePHP(tm) : Rapid Development Framework (http://cakephp.org) +:: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +:: +:: Licensed under The MIT License +:: Redistributions of files must retain the above copyright notice. +:: +:: @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +:: @link http://cakephp.org CakePHP(tm) Project +:: @since 2.0.0 +:: @license http://www.opensource.org/licenses/mit-license.php MIT License +:: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +@echo off + +SET app=%0 +SET lib=%~dp0 + +php "%lib%cake.php" %* + +echo. + +exit /B %ERRORLEVEL% diff --git a/production/example_apps/zippy_maps/bin/cake.php b/production/example_apps/zippy_maps/bin/cake.php new file mode 100644 index 00000000..5ee314c9 --- /dev/null +++ b/production/example_apps/zippy_maps/bin/cake.php @@ -0,0 +1,34 @@ +#!/usr/bin/php -q +require->php)) { + $minVersion = preg_replace('/([^0-9\.])/', '', $composer->require->php); + } +} +if (version_compare(phpversion(), $minVersion, '<')) { + fwrite(STDERR, sprintf("Minimum PHP version: %s. You are using: %s.\n", $minVersion, phpversion())); + exit(-1); +} + +require dirname(__DIR__) . '/vendor/autoload.php'; +include dirname(__DIR__) . '/config/bootstrap.php'; + +exit(Cake\Console\ShellDispatcher::run($argv)); diff --git a/production/example_apps/zippy_maps/composer.json b/production/example_apps/zippy_maps/composer.json new file mode 100644 index 00000000..686227de --- /dev/null +++ b/production/example_apps/zippy_maps/composer.json @@ -0,0 +1,52 @@ +{ + "name": "cakephp/app", + "description": "CakePHP skeleton app", + "homepage": "http://cakephp.org", + "type": "project", + "license": "MIT", + "require": { + "php": ">=5.6", + "cakephp/cakephp": "3.5.*", + "mobiledetect/mobiledetectlib": "2.*", + "cakephp/migrations": "@stable", + "cakephp/plugin-installer": "*", + "dereuromark/cakephp-geo": "^1.1", + "siteavenger/avmaps" : "dev-master" + }, + "require-dev": { + "psy/psysh": "@stable", + "cakephp/debug_kit": "~3.0", + "cakephp/bake": "~1.1" + }, + "suggest": { + "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.", + "phpunit/phpunit": "Allows automated tests to be run without system-wide install.", + "cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP." + }, + "autoload": { + "psr-4": { + "App\\": "src", + "Avmaps\\": "./plugins/Avmaps/src" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Test\\": "tests", + "Cake\\Test\\": "./vendor/cakephp/cakephp/tests", + "Avmaps\\Test\\": "./plugins/Avmaps/tests" + } + }, + "scripts": { + "post-install-cmd": "App\\Console\\Installer::postInstall", + "post-create-project-cmd": "App\\Console\\Installer::postInstall", + "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump", + "check": [ + "@test", + "@cs-check" + ], + "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests", + "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests", + "test": "phpunit --colors=always" + }, + "prefer-stable": true +} diff --git a/production/example_apps/zippy_maps/composer.lock b/production/example_apps/zippy_maps/composer.lock new file mode 100644 index 00000000..e9706f39 --- /dev/null +++ b/production/example_apps/zippy_maps/composer.lock @@ -0,0 +1,2767 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "ad82b7437385dd5bc72c500c0a1a1793", + "packages": [ + { + "name": "aura/intl", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/auraphp/Aura.Intl.git", + "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926", + "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926", + "shasum": "" + }, + "require": { + "php": "^5.6|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Aura\\Intl\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aura.Intl Contributors", + "homepage": "https://github.com/auraphp/Aura.Intl/contributors" + } + ], + "description": "The Aura Intl package provides internationalization tools, specifically message translation.", + "homepage": "https://github.com/auraphp/Aura.Intl", + "keywords": [ + "g11n", + "globalization", + "i18n", + "internationalization", + "intl", + "l10n", + "localization" + ], + "time": "2017-01-20T05:00:11+00:00" + }, + { + "name": "cakephp/cakephp", + "version": "3.5.17", + "source": { + "type": "git", + "url": "https://github.com/cakephp/cakephp.git", + "reference": "7727f122bac708a6b5883472bb3b22aad1e68e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/cakephp/zipball/7727f122bac708a6b5883472bb3b22aad1e68e3b", + "reference": "7727f122bac708a6b5883472bb3b22aad1e68e3b", + "shasum": "" + }, + "require": { + "aura/intl": "^3.0.0", + "cakephp/chronos": "^1.0.1", + "ext-intl": "*", + "ext-mbstring": "*", + "php": ">=5.6.0", + "psr/log": "^1.0.0", + "zendframework/zend-diactoros": "^1.4.0" + }, + "conflict": { + "phpunit/phpunit": "<5.7" + }, + "replace": { + "cakephp/cache": "self.version", + "cakephp/collection": "self.version", + "cakephp/core": "self.version", + "cakephp/database": "self.version", + "cakephp/datasource": "self.version", + "cakephp/event": "self.version", + "cakephp/filesystem": "self.version", + "cakephp/form": "self.version", + "cakephp/i18n": "self.version", + "cakephp/log": "self.version", + "cakephp/orm": "self.version", + "cakephp/utility": "self.version", + "cakephp/validation": "self.version" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "^5.7.14|^6.0" + }, + "suggest": { + "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.", + "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cake\\": "src/" + }, + "files": [ + "src/Core/functions.php", + "src/Collection/functions.php", + "src/I18n/functions.php", + "src/Utility/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/cakephp/graphs/contributors" + } + ], + "description": "The CakePHP framework", + "homepage": "https://cakephp.org", + "keywords": [ + "conventions over configuration", + "dry", + "form", + "framework", + "mvc", + "orm", + "psr-7", + "rapid-development", + "validation" + ], + "time": "2018-05-21T01:31:33+00:00" + }, + { + "name": "cakephp/chronos", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/cakephp/chronos.git", + "reference": "30f5b26bcf76a5e53ecc274700ad1ec49dc05567" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/30f5b26bcf76a5e53ecc274700ad1ec49dc05567", + "reference": "30f5b26bcf76a5e53ecc274700ad1ec49dc05567", + "shasum": "" + }, + "require": { + "php": "^5.5.9|^7" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "cakephp/cakephp-codesniffer": "^3.0", + "phpbench/phpbench": "@dev", + "phpstan/phpstan": "^0.6.4", + "phpunit/phpunit": "<6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cake\\Chronos\\": "src/" + }, + "files": [ + "src/carbon_compat.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "The CakePHP Team", + "homepage": "http://cakephp.org" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://cakephp.org", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2018-07-11T18:51:56+00:00" + }, + { + "name": "cakephp/migrations", + "version": "1.7.2", + "source": { + "type": "git", + "url": "https://github.com/cakephp/migrations.git", + "reference": "a5612adfd2efa8c90d29cb3b0c969de872a99eda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/migrations/zipball/a5612adfd2efa8c90d29cb3b0c969de872a99eda", + "reference": "a5612adfd2efa8c90d29cb3b0c969de872a99eda", + "shasum": "" + }, + "require": { + "cakephp/cache": "~3.2", + "cakephp/orm": "~3.2", + "php": ">=5.5.9", + "robmorgan/phinx": "0.8.1" + }, + "require-dev": { + "cakephp/bake": "@stable", + "cakephp/cakephp": "~3.2", + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "~4.1" + }, + "suggest": { + "cakephp/bake": "Required if you want to generate migrations." + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "Migrations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/migrations/graphs/contributors" + } + ], + "description": "Database Migration plugin for CakePHP 3.0 based on Phinx", + "homepage": "https://github.com/cakephp/migrations", + "keywords": [ + "cakephp", + "migrations" + ], + "time": "2017-12-12T21:01:38+00:00" + }, + { + "name": "cakephp/plugin-installer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/cakephp/plugin-installer.git", + "reference": "41373d0678490502f45adc7be88aa22d24ac1843" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/41373d0678490502f45adc7be88aa22d24ac1843", + "reference": "41373d0678490502f45adc7be88aa22d24ac1843", + "shasum": "" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "dev-master", + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "^4.8|^5.7|^6.0" + }, + "type": "composer-installer", + "extra": { + "class": "Cake\\Composer\\Installer\\PluginInstaller" + }, + "autoload": { + "psr-4": { + "Cake\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "http://cakephp.org" + } + ], + "description": "A composer installer for CakePHP 3.0+ plugins.", + "time": "2017-12-24T21:09:29+00:00" + }, + { + "name": "dereuromark/cakephp-geo", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/dereuromark/cakephp-geo.git", + "reference": "c72464a9a7ea7c634f9345bb67f48589252336b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dereuromark/cakephp-geo/zipball/c72464a9a7ea7c634f9345bb67f48589252336b3", + "reference": "c72464a9a7ea7c634f9345bb67f48589252336b3", + "shasum": "" + }, + "require": { + "cakephp/orm": "^3.5", + "php": ">=5.6", + "willdurand/geocoder": "^3.3" + }, + "require-dev": { + "cakephp/cakephp": "^3.5", + "fig-r/psr2r-sniffer": "dev-master" + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "Geo\\": "src", + "Geo\\Test\\Fixture\\": "tests/Fixture" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Scherer", + "homepage": "http://www.dereuromark.de", + "role": "Maintainer" + } + ], + "description": "A CakePHP plugin around geocoding tools and helpers.", + "homepage": "https://github.com/dereuromark/cakephp-geo", + "keywords": [ + "cakephp", + "geocoding", + "helpers", + "maps", + "plugin" + ], + "time": "2018-10-10T14:34:17+00:00" + }, + { + "name": "egeloen/http-adapter", + "version": "0.8.0", + "source": { + "type": "git", + "url": "https://github.com/egeloen/ivory-http-adapter.git", + "reference": "9641f11487ec26b24c6bbcee4f267cf62f60b855" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egeloen/ivory-http-adapter/zipball/9641f11487ec26b24c6bbcee4f267cf62f60b855", + "reference": "9641f11487ec26b24c6bbcee4f267cf62f60b855", + "shasum": "" + }, + "require": { + "php": ">=5.4.8", + "zendframework/zend-diactoros": "^1.1" + }, + "require-dev": { + "cakephp/cakephp": "^3.0.3", + "ext-curl": "*", + "guzzle/guzzle": "^3.9.4@dev", + "guzzlehttp/guzzle": "^4.1.4|^5.0|^6.0", + "kriswallsmith/buzz": "^0.13", + "nategood/httpful": "^0.2.17", + "phpunit/phpunit": "^4.0", + "phpunit/phpunit-mock-objects": "dev-matcher-verify as 2.3.x-dev", + "psr/log": "^1.0", + "react/dns": "^0.4.1", + "react/http-client": "^0.4", + "satooshi/php-coveralls": "^0.6", + "symfony/event-dispatcher": "^2.0", + "zendframework/zend-http": "^2.3.4", + "zendframework/zendframework1": ">=1.12.9,<=1.12.14|^1.12.16" + }, + "suggest": { + "ext-curl": "Allows you to use the cURL adapter", + "ext-http": "Allows you to use the PECL adapter", + "guzzle/guzzle": "Allows you to use the Guzzle 3 adapter", + "guzzlehttp/guzzle": "Allows you to use the Guzzle 4 adapter", + "kriswallsmith/buzz": "Allows you to use the Buzz adapter", + "nategood/httpful": "Allows you to use the httpful adapter", + "psr/log": "Allows you to use the logger event subscriber", + "symfony/event-dispatcher": "Allows you to use the event lifecycle", + "symfony/stopwatch": "Allows you to use the stopwatch http adapter and event subscriber", + "zendframework/zend-http": "Allows you to use the Zend 2 adapter", + "zendframework/zendframework1": "Allows you to use the Zend 1 adapter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.8-dev" + } + }, + "autoload": { + "psr-4": { + "Ivory\\HttpAdapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + } + ], + "description": "Issue HTTP request for PHP 5.3+.", + "keywords": [ + "http", + "http-adapter", + "http-client", + "psr-7" + ], + "abandoned": "php-http/httplug", + "time": "2015-08-12T09:35:40+00:00" + }, + { + "name": "igorw/get-in", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/igorw/get-in.git", + "reference": "170ded831f49abc6a6061f655aba9bdbcf7b8111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/get-in/zipball/170ded831f49abc6a6061f655aba9bdbcf7b8111", + "reference": "170ded831f49abc6a6061f655aba9bdbcf7b8111", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/get_in.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Functions for for hash map (assoc array) traversal.", + "keywords": [ + "assoc-array", + "hash-map" + ], + "time": "2014-12-15T23:03:51+00:00" + }, + { + "name": "mobiledetect/mobiledetectlib", + "version": "2.8.33", + "source": { + "type": "git", + "url": "https://github.com/serbanghita/Mobile-Detect.git", + "reference": "cd385290f9a0d609d2eddd165a1e44ec1bf12102" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/cd385290f9a0d609d2eddd165a1e44ec1bf12102", + "reference": "cd385290f9a0d609d2eddd165a1e44ec1bf12102", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35||~5.7" + }, + "type": "library", + "autoload": { + "classmap": [ + "Mobile_Detect.php" + ], + "psr-0": { + "Detection": "namespaced/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Serban Ghita", + "email": "serbanghita@gmail.com", + "homepage": "http://mobiledetect.net", + "role": "Developer" + } + ], + "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", + "homepage": "https://github.com/serbanghita/Mobile-Detect", + "keywords": [ + "detect mobile devices", + "mobile", + "mobile detect", + "mobile detector", + "php mobile detect" + ], + "time": "2018-09-01T15:05:15+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "robmorgan/phinx", + "version": "v0.8.1", + "source": { + "type": "git", + "url": "https://github.com/cakephp/phinx.git", + "reference": "7a19de5bebc59321edd9613bc2a667e7f96224ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/phinx/zipball/7a19de5bebc59321edd9613bc2a667e7f96224ec", + "reference": "7a19de5bebc59321edd9613bc2a667e7f96224ec", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "symfony/config": "~2.8|~3.0", + "symfony/console": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.26|^5.0" + }, + "bin": [ + "bin/phinx" + ], + "type": "library", + "autoload": { + "psr-4": { + "Phinx\\": "src/Phinx" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com", + "homepage": "http://shadowhand.me", + "role": "Developer" + }, + { + "name": "Rob Morgan", + "email": "robbym@gmail.com", + "homepage": "https://robmorgan.id.au", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Developer" + } + ], + "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", + "homepage": "https://phinx.org", + "keywords": [ + "database", + "database migrations", + "db", + "migrations", + "phinx" + ], + "time": "2017-06-05T13:30:19+00:00" + }, + { + "name": "siteavenger/avmaps", + "version": "dev-master", + "source": { + "type": "git", + "url": "git@github.com:kwentworth/avmaps.git", + "reference": "64d96e015e0e5295f569571e8beb921978f07fa4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kwentworth/avmaps/zipball/64d96e015e0e5295f569571e8beb921978f07fa4", + "reference": "64d96e015e0e5295f569571e8beb921978f07fa4", + "shasum": "" + }, + "require": { + "cakephp/cakephp": "^3.4" + }, + "require-dev": { + "phpunit/phpunit": "^5.7|^6.0" + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "Avmaps\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Avmaps\\Test\\": "tests", + "Cake\\Test\\": "./vendor/cakephp/cakephp/tests" + } + }, + "description": "Avmaps plugin for CakePHP", + "support": { + "source": "https://github.com/kwentworth/avmaps/tree/feature-fred-sg001", + "issues": "https://github.com/kwentworth/avmaps/issues" + }, + "time": "2018-05-11T17:51:34+00:00" + }, + { + "name": "symfony/config", + "version": "v3.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "e5389132dc6320682de3643091121c048ff796b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/e5389132dc6320682de3643091121c048ff796b3", + "reference": "e5389132dc6320682de3643091121c048ff796b3", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2018-09-08T13:15:14+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b", + "reference": "3b2b415d4c48fbefca7dc742aa0a0171bfae4e0b", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log-implementation": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-10-02T16:33:53+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/e3f76ce6198f81994e019bb2b4e533e9de1b9b90", + "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "~3.4|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2018-10-02T16:36:10+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "596d12b40624055c300c8b619755b748ca5cf0b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/596d12b40624055c300c8b619755b748ca5cf0b5", + "reference": "596d12b40624055c300c8b619755b748ca5cf0b5", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2018-10-02T12:40:59+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", + "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f", + "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-10-02T16:33:53+00:00" + }, + { + "name": "willdurand/geocoder", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/geocoder-php/php-common.git", + "reference": "ccc178e2984c0af24881faa0ffe515f20e5e8c23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/geocoder-php/php-common/zipball/ccc178e2984c0af24881faa0ffe515f20e5e8c23", + "reference": "ccc178e2984c0af24881faa0ffe515f20e5e8c23", + "shasum": "" + }, + "require": { + "egeloen/http-adapter": "~0.8", + "igorw/get-in": "~1.0", + "php": ">=5.4.0" + }, + "require-dev": { + "geoip2/geoip2": "~2.0", + "symfony/stopwatch": "~2.5" + }, + "suggest": { + "ext-geoip": "Enabling the geoip extension allows you to use the MaxMindProvider.", + "geoip/geoip": "If you are going to use the MaxMindBinaryProvider (conflict with geoip extension).", + "geoip2/geoip2": "If you are going to use the GeoIP2DatabaseProvider.", + "symfony/stopwatch": "If you want to use the TimedGeocoder" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-0": { + "Geocoder": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "william.durand1@gmail.com" + } + ], + "description": "The almost missing Geocoder PHP 5.4 library.", + "homepage": "http://geocoder-php.org", + "keywords": [ + "abstraction", + "geocoder", + "geocoding", + "geoip" + ], + "time": "2015-12-06T20:17:20+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "1.8.6", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", + "zendframework/zend-coding-standard": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev", + "dev-develop": "1.9.x-dev", + "dev-release-2.0": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2018-09-05T19:29:37+00:00" + } + ], + "packages-dev": [ + { + "name": "ajgl/breakpoint-twig-extension", + "version": "0.3.1", + "source": { + "type": "git", + "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git", + "reference": "360ec6351ad7e1968ee78abb31430046c2e04fc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/360ec6351ad7e1968ee78abb31430046c2e04fc5", + "reference": "360ec6351ad7e1968ee78abb31430046c2e04fc5", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "twig/twig": "^1.14|^2.0" + }, + "require-dev": { + "phpunit/phpunit": "^5", + "symfony/framework-bundle": "^2.7|^3.2", + "symfony/twig-bundle": "^2.7|^3.2" + }, + "suggest": { + "ext-xdebug": "The Xdebug extension is required for the breakpoint to work", + "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony", + "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ajgl\\Twig\\Extension\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio J. García Lagar", + "email": "aj@garcialagar.es", + "homepage": "http://aj.garcialagar.es", + "role": "developer" + } + ], + "description": "Twig extension to set breakpoints", + "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension", + "keywords": [ + "Xdebug", + "breakpoint", + "twig" + ], + "time": "2017-11-20T13:04:11+00:00" + }, + { + "name": "aptoma/twig-markdown", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/aptoma/twig-markdown.git", + "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aptoma/twig-markdown/zipball/64a9c5c7418c08faf91c4410b34bdb65fb25c23d", + "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d", + "shasum": "" + }, + "require": { + "twig/twig": "~1.12" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "erusev/parsedown": "^1.6", + "knplabs/github-api": "~1.2", + "league/commonmark": "~0.5", + "michelf/php-markdown": "~1", + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~0.6" + }, + "suggest": { + "knplabs/github-api": "Needed for using GitHub's Markdown engine provided through their API.", + "michelf/php-markdown": "Original Markdown engine with MarkdownExtra." + }, + "type": "library", + "autoload": { + "psr-0": { + "Aptoma": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joris Berthelot", + "email": "joris@berthelot.tel" + }, + { + "name": "Gunnar Lium", + "email": "gunnar@aptoma.com" + } + ], + "description": "Twig extension to work with Markdown content", + "keywords": [ + "markdown", + "twig" + ], + "time": "2015-10-23T20:27:08+00:00" + }, + { + "name": "asm89/twig-cache-extension", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/asm89/twig-cache-extension.git", + "reference": "630ea7abdc3fc62ba6786c02590a1560e449cf55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/twig-cache-extension/zipball/630ea7abdc3fc62ba6786c02590a1560e449cf55", + "reference": "630ea7abdc3fc62ba6786c02590a1560e449cf55", + "shasum": "" + }, + "require": { + "php": ">=5.3.2", + "twig/twig": "^1.0|^2.0" + }, + "require-dev": { + "doctrine/cache": "~1.0" + }, + "suggest": { + "psr/cache-implementation": "To make use of PSR-6 cache implementation via PsrCacheAdapter." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cache fragments of templates directly within Twig.", + "homepage": "https://github.com/asm89/twig-cache-extension", + "keywords": [ + "cache", + "extension", + "twig" + ], + "time": "2017-01-10T22:04:15+00:00" + }, + { + "name": "cakephp/bake", + "version": "1.6.4", + "source": { + "type": "git", + "url": "https://github.com/cakephp/bake.git", + "reference": "0ca2165ac770f8e3c7b278f3f022df14d7b0913a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/bake/zipball/0ca2165ac770f8e3c7b278f3f022df14d7b0913a", + "reference": "0ca2165ac770f8e3c7b278f3f022df14d7b0913a", + "shasum": "" + }, + "require": { + "cakephp/cakephp": "^3.5.10", + "cakephp/plugin-installer": "^1.0", + "php": ">=5.6.0", + "wyrihaximus/twig-view": "^4.2.1" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "^5.7 | ^6.0" + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "Bake\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/bake/graphs/contributors" + } + ], + "description": "Bake plugin for CakePHP 3", + "homepage": "https://github.com/cakephp/bake", + "keywords": [ + "bake", + "cakephp" + ], + "time": "2018-03-10T01:47:21+00:00" + }, + { + "name": "cakephp/debug_kit", + "version": "3.14.2", + "source": { + "type": "git", + "url": "https://github.com/cakephp/debug_kit.git", + "reference": "b5e11f386b9ff28694950f68ef3e0456c242051b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/b5e11f386b9ff28694950f68ef3e0456c242051b", + "reference": "b5e11f386b9ff28694950f68ef3e0456c242051b", + "shasum": "" + }, + "require": { + "cakephp/cakephp": "^3.4.0", + "cakephp/chronos": "^1.0.0", + "cakephp/plugin-installer": "^1.0.0", + "composer/composer": "^1.3.0", + "jdorn/sql-formatter": "^1.2.0", + "php": ">=5.6.0" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^3.0", + "phpunit/phpunit": "^5.7|^6.0" + }, + "suggest": { + "ext-sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use." + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "DebugKit\\": "src", + "DebugKit\\Test\\Fixture\\": "tests\\Fixture" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Story", + "homepage": "http://mark-story.com", + "role": "Author" + }, + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors" + } + ], + "description": "CakePHP Debug Kit", + "homepage": "https://github.com/cakephp/debug_kit", + "keywords": [ + "cakephp", + "debug", + "kit" + ], + "time": "2018-03-08T18:21:10+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "46afded9720f40b9dc63542af4e3e43a1177acb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/46afded9720f40b9dc63542af4e3e43a1177acb0", + "reference": "46afded9720f40b9dc63542af4e3e43a1177acb0", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2018-08-08T08:57:40+00:00" + }, + { + "name": "composer/composer", + "version": "1.7.2", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "576aab9b5abb2ed11a1c52353a759363216a4ad2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/576aab9b5abb2ed11a1c52353a759363216a4ad2", + "reference": "576aab9b5abb2ed11a1c52353a759363216a4ad2", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2018-08-16T14:57:12+00:00" + }, + { + "name": "composer/semver", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2016-08-30T16:08:34+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b", + "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "time": "2018-04-30T10:33:04+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "b8e9745fb9b06ea6664d8872c4505fb16df4611c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/b8e9745fb9b06ea6664d8872c4505fb16df4611c", + "reference": "b8e9745fb9b06ea6664d8872c4505fb16df4611c", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2018-08-31T19:07:57+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "0.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", + "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "@stable" + }, + "type": "project", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "time": "2014-10-24T07:27:01+00:00" + }, + { + "name": "jakub-onderka/php-console-color", + "version": "v0.2", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "1.0", + "jakub-onderka/php-parallel-lint": "1.0", + "jakub-onderka/php-var-dump-check": "0.*", + "phpunit/phpunit": "~4.3", + "squizlabs/php_codesniffer": "1.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "JakubOnderka\\PhpConsoleColor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com" + } + ], + "time": "2018-09-29T17:23:10+00:00" + }, + { + "name": "jakub-onderka/php-console-highlighter", + "version": "v0.4", + "source": { + "type": "git", + "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "jakub-onderka/php-console-color": "~0.2", + "php": ">=5.4.0" + }, + "require-dev": { + "jakub-onderka/php-code-style": "~1.0", + "jakub-onderka/php-parallel-lint": "~1.0", + "jakub-onderka/php-var-dump-check": "~0.1", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "JakubOnderka\\PhpConsoleHighlighter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jakub Onderka", + "email": "acci@acci.cz", + "homepage": "http://www.acci.cz/" + } + ], + "description": "Highlight PHP code in terminal", + "time": "2018-09-29T18:48:56+00:00" + }, + { + "name": "jasny/twig-extensions", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/jasny/twig-extensions.git", + "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/30bdf3a3903c021544f36332c9d5d4d563527da4", + "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4", + "shasum": "" + }, + "require": { + "php": ">=7.0.0 | >=5.6.0", + "twig/twig": "^2.0 | ^1.12" + }, + "require-dev": { + "ext-intl": "*", + "ext-pcre": "*", + "jasny/php-code-quality": "^2.1", + "phpunit/phpunit": "^5.0" + }, + "suggest": { + "ext-intl": "Required for the use of the LocalDate Twig extension", + "ext-pcre": "Required for the use of the PCRE Twig extension" + }, + "type": "library", + "autoload": { + "psr-4": { + "Jasny\\Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Arnold Daniels", + "email": "arnold@jasny.net", + "homepage": "http://www.jasny.net" + } + ], + "description": "A set of useful Twig filters", + "homepage": "http://github.com/jasny/twig-extensions#README", + "keywords": [ + "PCRE", + "array", + "date", + "datetime", + "preg", + "regex", + "templating", + "text", + "time" + ], + "time": "2017-09-13T07:38:01+00:00" + }, + { + "name": "jdorn/sql-formatter", + "version": "v1.2.17", + "source": { + "type": "git", + "url": "https://github.com/jdorn/sql-formatter.git", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "lib" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/jdorn/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "time": "2014-01-12T16:20:24+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.7", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "8560d4314577199ba51bf2032f02cd1315587c23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23", + "reference": "8560d4314577199ba51bf2032f02cd1315587c23", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2018-02-14T22:26:30+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "d0230c5c77a7e3cfa69446febf340978540958c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0", + "reference": "d0230c5c77a7e3cfa69446febf340978540958c0", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^7.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2018-10-10T09:24:14+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.9.9", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", + "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1", + "ext-json": "*", + "ext-tokenizer": "*", + "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", + "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", + "php": ">=5.4.0", + "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", + "symfony/var-dumper": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "~2.15|~3.16", + "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2018-10-13T15:16:03+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "1f17195b44543017a9c9b2d437c670627e96ad06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06", + "reference": "1f17195b44543017a9c9b2d437c670627e96ad06", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-10-03T08:47:56+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/95c50420b0baed23852452a7f0c7b527303ed5ae", + "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/process", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/ee33c0322a8fee0855afcc11fff81e6b1011b529", + "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2018-10-02T12:40:59+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "60319b45653580b0cdacca499344577d87732f16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16", + "reference": "60319b45653580b0cdacca499344577d87732f16", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/process": "~3.4|~4.0", + "twig/twig": "~1.34|~2.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2018-10-02T16:36:10+00:00" + }, + { + "name": "twig/twig", + "version": "v1.35.4", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/7e081e98378a1e78c29cc9eba4aefa5d78a05d2a", + "reference": "7e081e98378a1e78c29cc9eba4aefa5d78a05d2a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.35-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "https://twig.symfony.com/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "time": "2018-07-13T07:12:17+00:00" + }, + { + "name": "umpirsky/twig-php-function", + "version": "v0.1", + "source": { + "type": "git", + "url": "https://github.com/umpirsky/twig-php-function.git", + "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/umpirsky/twig-php-function/zipball/53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc", + "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "twig/twig": "~1.12" + }, + "require-dev": { + "phpspec/phpspec": "~2.0", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "Umpirsky\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "SaÅ¡a Stamenković", + "email": "umpirsky@gmail.com" + } + ], + "description": "Call (almost) any PHP function from your Twig templates.", + "time": "2016-03-12T16:36:32+00:00" + }, + { + "name": "wyrihaximus/twig-view", + "version": "4.3.5", + "source": { + "type": "git", + "url": "https://github.com/WyriHaximus/TwigView.git", + "reference": "ec2771e6a1fe799f9b16eff19da424cd04d593b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WyriHaximus/TwigView/zipball/ec2771e6a1fe799f9b16eff19da424cd04d593b7", + "reference": "ec2771e6a1fe799f9b16eff19da424cd04d593b7", + "shasum": "" + }, + "require": { + "ajgl/breakpoint-twig-extension": "^0.3.0", + "aptoma/twig-markdown": "^2.0", + "asm89/twig-cache-extension": "^1.0", + "cakephp/cakephp": "^3.5", + "jasny/twig-extensions": "^1.0", + "php": "^5.6 || ^7.0", + "twig/twig": "^1.27", + "umpirsky/twig-php-function": "0.1" + }, + "require-dev": { + "cakephp/bake": "^1.5", + "cakephp/debug_kit": "^3.0", + "phake/phake": "^1.0.4", + "phpunit/phpunit": "^5.7.14", + "squizlabs/php_codesniffer": "^1.5.6", + "wyrihaximus/phpunit-class-reflection-helpers": "dev-master" + }, + "type": "cakephp-plugin", + "autoload": { + "psr-4": { + "WyriHaximus\\TwigView\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cees-Jan Kiewiet", + "email": "ceesjank@gmail.com", + "homepage": "http://wyrihaximus.net/" + } + ], + "description": "Twig powered View for CakePHP3", + "keywords": [ + "cakephp", + "cakephp3", + "twig", + "view" + ], + "time": "2018-07-03T15:46:29+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "cakephp/migrations": 0, + "siteavenger/avmaps": 20, + "psy/psysh": 0 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=5.6" + }, + "platform-dev": [] +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170421142733_create_locations_table.php b/production/example_apps/zippy_maps/config/Migrations/20170421142733_create_locations_table.php new file mode 100644 index 00000000..29b48336 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170421142733_create_locations_table.php @@ -0,0 +1,41 @@ +table('locations', ['id' => false, 'primary_key' => ['id']]) + ->addColumn('id', 'integer', ['identity' => true, 'signed' => false]) + ->addColumn('name', 'string', ['length' => 255, 'null' => false]) + ->addColumn('location', 'string', ['length' => 1024, 'null' => false]) + ->addColumn('latlong', 'string', ['length' => 255, 'null' => true]) + ->addColumn('created', 'datetime') + ->addColumn('modified', 'datetime') + ->addIndex('name', ['unique' => true]) + ->addIndex('location') + ->create(); + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170426140248_create_categories_table.php b/production/example_apps/zippy_maps/config/Migrations/20170426140248_create_categories_table.php new file mode 100644 index 00000000..95610e8c --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170426140248_create_categories_table.php @@ -0,0 +1,41 @@ +table('categories', ['id' => false, 'primary_key' => ['id']]) + ->addColumn('id', 'integer', ['identity' => true, 'signed' => false]) + ->addColumn('name', 'string', ['length' => 255, 'null' => false]) + ->addColumn('parent', 'integer', ['signed' => false, 'null' => true]) + ->addColumn('created', 'datetime') + ->addColumn('modified', 'datetime') + ->addIndex('name', ['unique' => true]) + ->create(); + } +} + + diff --git a/production/example_apps/zippy_maps/config/Migrations/20170426150747_create_location_categories_table.php b/production/example_apps/zippy_maps/config/Migrations/20170426150747_create_location_categories_table.php new file mode 100644 index 00000000..c9fb4c57 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170426150747_create_location_categories_table.php @@ -0,0 +1,42 @@ +table('locations_categories', ['id' => false, 'primary_key' => ['id']]) + ->addColumn('id', 'integer', ['identity' => true, 'signed' => false]) + ->addColumn('location_id', 'integer', ['signed' => false]) + ->addColumn('category_id', 'integer', ['signed' => false]) + ->addColumn('created', 'datetime') + ->addColumn('modified', 'datetime') + ->addForeignKey('location_id', 'locations', 'id') + //not nullable, array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION') + ->addForeignKey('category_id', 'categories', 'id') + ->create(); + + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170501180455_drop_location_categories_table.php b/production/example_apps/zippy_maps/config/Migrations/20170501180455_drop_location_categories_table.php new file mode 100644 index 00000000..92fbd7cf --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170501180455_drop_location_categories_table.php @@ -0,0 +1,51 @@ +table('locations_categories') + ->drop(); + } + + public function down() + { + $this->table('locations_categories', ['id' => false, 'primary_key' => ['id']]) + ->addColumn('id', 'integer', ['identity' => true, 'signed' => false]) + ->addColumn('location_id', 'integer', ['signed' => false]) + ->addColumn('category_id', 'integer', ['signed' => false]) + ->addColumn('created', 'datetime') + ->addColumn('modified', 'datetime') + ->addForeignKey('location_id', 'locations', 'id') + //not nullable, array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION') + ->addForeignKey('category_id', 'categories', 'id') + ->create(); + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170501183019_create_categories_locations_table.php b/production/example_apps/zippy_maps/config/Migrations/20170501183019_create_categories_locations_table.php new file mode 100644 index 00000000..b718f356 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170501183019_create_categories_locations_table.php @@ -0,0 +1,42 @@ +table('categories_locations', ['id' => false, 'primary_key' => ['id']]) + ->addColumn('id', 'integer', ['identity' => true, 'signed' => false]) + ->addColumn('location_id', 'integer', ['signed' => false]) + ->addColumn('category_id', 'integer', ['signed' => false]) + ->addColumn('created', 'datetime') + ->addColumn('modified', 'datetime') + ->addForeignKey('location_id', 'locations', 'id') + //not nullable, array('delete'=> 'SET_NULL', 'update'=> 'NO_ACTION') + ->addForeignKey('category_id', 'categories', 'id') + ->create(); + + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170519145000_add_image_to_categories.php b/production/example_apps/zippy_maps/config/Migrations/20170519145000_add_image_to_categories.php new file mode 100644 index 00000000..dfb68675 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170519145000_add_image_to_categories.php @@ -0,0 +1,34 @@ +table('categories') + ->addColumn('image', 'string', ['length' => 1024, 'null' => true]) + ->update(); + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170525190322_drop_parent_from_categories.php b/production/example_apps/zippy_maps/config/Migrations/20170525190322_drop_parent_from_categories.php new file mode 100644 index 00000000..5c9f0142 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170525190322_drop_parent_from_categories.php @@ -0,0 +1,38 @@ +table ( 'categories' )->removeColumn ( 'parent' )->update (); + } + + public function down() { + $this->table ( 'categories' )->addColumn ( 'parent', 'integer', [ + 'signed' => false + ] )->update (); + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170712140650_AddLatLongColumnsToLocationsTable.php b/production/example_apps/zippy_maps/config/Migrations/20170712140650_AddLatLongColumnsToLocationsTable.php new file mode 100644 index 00000000..71c9b424 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170712140650_AddLatLongColumnsToLocationsTable.php @@ -0,0 +1,24 @@ +table('locations'); + + $table->addColumn('lat', 'float', ['null' => true]); + $table->addColumn('lng', 'float', ['null' => true]); + + $table->update(); + + + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170712142151_TransmogrifyLatLongDataInLocations.php b/production/example_apps/zippy_maps/config/Migrations/20170712142151_TransmogrifyLatLongDataInLocations.php new file mode 100644 index 00000000..d62aad2a --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170712142151_TransmogrifyLatLongDataInLocations.php @@ -0,0 +1,77 @@ +find (); + + // iterate across table on latlong. + foreach ( $query as $locat ) { + Log::write ( 'debug', 'id=' . var_export ( $locat->id, true ) . ' L&L=' . var_export ( $locat->latlong, true ) ); + // do nothing if the field is empty. + if ($locat->latlong) { + // break out the two pieces. + $latlongExploded = explode ( ',', $locat->latlong ); + Log::write ( 'debug', 'broke into lat=' . $latlongExploded [0] . ' lng=' . $latlongExploded [1] ); + + // now update the row where we got this info with same lat and long values in two columns. + $loc_update = $locations->get ( $locat->id ); + $loc_update->lat = floatval ( $latlongExploded [0] ); + $loc_update->lng = floatval ( $latlongExploded [1] ); + $locations->save ( $loc_update ); + } + } + } + + /** + * performs the reverse case of migrating the two columns back into one. + * if we don't do this, we can't slide up and down the migration and rollback scale properly while keeping our lat and long data. + */ + public function down() { + $locations = TableRegistry::get ( 'Locations' ); + + $query = $locations->find (); + + // iterate across table on lat and long values. + foreach ( $query as $locat ) { + Log::write ( 'debug', 'id=' . var_export ( $locat->id, true ) . ' lat=' . var_export ( $locat->lat, true ) + .' lng=' . var_export ( $locat->lng, true )); + // do nothing if the fields are empty. + if ($locat->lat && $locat->lng) { + // combine the two pieces. + $latlong = '' . $locat->lat . ',' . $locat->lng; + Log::write ( 'debug', 'combo is=' . $latlong); + + // now update the row where we got these values to reproduce the single column. + $loc_update = $locations->get ( $locat->id ); + $loc_update->latlong = $latlong; + $locations->save ( $loc_update ); + } + } + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/20170712152942_DropLatlongFromLocationsTable.php b/production/example_apps/zippy_maps/config/Migrations/20170712152942_DropLatlongFromLocationsTable.php new file mode 100644 index 00000000..1939f5f9 --- /dev/null +++ b/production/example_apps/zippy_maps/config/Migrations/20170712152942_DropLatlongFromLocationsTable.php @@ -0,0 +1,23 @@ +table ( 'locations' )->removeColumn ( 'latlong' )->update (); + } + /** + * but for preservation of former realities, we re-add the latlong column if we're going backwards. + * this supports our code for transmogrifying the coordinates between two column format and one + * column fomat. + */ + public function down() { + $this->table ( 'locations' )->addColumn ( 'latlong', 'string', [ + 'length' => 255, + 'null' => true + ] )->update (); + } +} diff --git a/production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock b/production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock new file mode 100644 index 00000000..45d23890 Binary files /dev/null and b/production/example_apps/zippy_maps/config/Migrations/schema-dump-default.lock differ diff --git a/production/example_apps/zippy_maps/config/app.default.php b/production/example_apps/zippy_maps/config/app.default.php new file mode 100644 index 00000000..c06599e2 --- /dev/null +++ b/production/example_apps/zippy_maps/config/app.default.php @@ -0,0 +1,346 @@ + filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN), + + /** + * Configure basic information about the application. + * + * - namespace - The namespace to find app classes under. + * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time. + * - encoding - The encoding used for HTML + database connections. + * - base - The base directory the app resides in. If false this + * will be auto detected. + * - dir - Name of app directory. + * - webroot - The webroot directory. + * - wwwRoot - The file path to webroot. + * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to + * use CakePHP pretty URLs, remove these .htaccess + * files: + * /.htaccess + * /webroot/.htaccess + * And uncomment the baseUrl key below. + * - fullBaseUrl - A base URL to use for absolute links. + * - imageBaseUrl - Web path to the public images directory under webroot. + * - cssBaseUrl - Web path to the public css directory under webroot. + * - jsBaseUrl - Web path to the public js directory under webroot. + * - paths - Configure paths for non class based resources. Supports the + * `plugins`, `templates`, `locales` subkeys, which allow the definition of + * paths for plugins, view templates and locale files respectively. + */ + 'App' => [ + 'namespace' => 'App', + 'encoding' => env('APP_ENCODING', 'UTF-8'), + 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), + 'base' => false, + 'dir' => 'src', + 'webroot' => 'webroot', + 'wwwRoot' => WWW_ROOT, + // 'baseUrl' => env('SCRIPT_NAME'), + 'fullBaseUrl' => false, + 'imageBaseUrl' => 'img/', + 'cssBaseUrl' => 'css/', + 'jsBaseUrl' => 'js/', + 'paths' => [ + 'plugins' => [ROOT . DS . 'plugins' . DS], + 'templates' => [APP . 'Template' . DS], + 'locales' => [APP . 'Locale' . DS], + ], + ], + + /** + * Security and encryption configuration + * + * - salt - A random string used in security hashing methods. + * The salt value is also used as the encryption key. + * You should treat it as extremely sensitive data. + */ + 'Security' => [ + 'salt' => env('SECURITY_SALT', '__SALT__'), + ], + + /** + * Apply timestamps with the last modified time to static assets (js, css, images). + * Will append a querystring parameter containing the time the file was modified. + * This is useful for busting browser caches. + * + * Set to true to apply timestamps when debug is true. Set to 'force' to always + * enable timestamping regardless of debug value. + */ + 'Asset' => [ + // 'timestamp' => true, + ], + + /** + * Configure the cache adapters. + */ + 'Cache' => [ + 'default' => [ + 'className' => 'File', + 'path' => CACHE, + 'url' => env('CACHE_DEFAULT_URL', null), + ], + + /** + * Configure the cache used for general framework caching. + * Translation cache files are stored with this configuration. + * Duration will be set to '+2 minutes' in bootstrap.php when debug = true + * If you set 'className' => 'Null' core cache will be disabled. + */ + '_cake_core_' => [ + 'className' => 'File', + 'prefix' => 'myapp_cake_core_', + 'path' => CACHE . 'persistent/', + 'serialize' => true, + 'duration' => '+1 years', + 'url' => env('CACHE_CAKECORE_URL', null), + ], + + /** + * Configure the cache for model and datasource caches. This cache + * configuration is used to store schema descriptions, and table listings + * in connections. + * Duration will be set to '+2 minutes' in bootstrap.php when debug = true + */ + '_cake_model_' => [ + 'className' => 'File', + 'prefix' => 'myapp_cake_model_', + 'path' => CACHE . 'models/', + 'serialize' => true, + 'duration' => '+1 years', + 'url' => env('CACHE_CAKEMODEL_URL', null), + ], + ], + + /** + * Configure the Error and Exception handlers used by your application. + * + * By default errors are displayed using Debugger, when debug is true and logged + * by Cake\Log\Log when debug is false. + * + * In CLI environments exceptions will be printed to stderr with a backtrace. + * In web environments an HTML page will be displayed for the exception. + * With debug true, framework errors like Missing Controller will be displayed. + * When debug is false, framework errors will be coerced into generic HTTP errors. + * + * Options: + * + * - `errorLevel` - int - The level of errors you are interested in capturing. + * - `trace` - boolean - Whether or not backtraces should be included in + * logged errors/exceptions. + * - `log` - boolean - Whether or not you want exceptions logged. + * - `exceptionRenderer` - string - The class responsible for rendering + * uncaught exceptions. If you choose a custom class you should place + * the file for that class in src/Error. This class needs to implement a + * render method. + * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that + * extend one of the listed exceptions will also be skipped for logging. + * E.g.: + * `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']` + * - `extraFatalErrorMemory` - int - The number of megabytes to increase + * the memory limit by when a fatal error is encountered. This allows + * breathing room to complete logging or error handling. + */ + 'Error' => [ + 'errorLevel' => E_ALL, + 'exceptionRenderer' => 'Cake\Error\ExceptionRenderer', + 'skipLog' => [], + 'log' => true, + 'trace' => true, + ], + + /** + * Email configuration. + * + * By defining transports separately from delivery profiles you can easily + * re-use transport configuration across multiple profiles. + * + * You can specify multiple configurations for production, development and + * testing. + * + * Each transport needs a `className`. Valid options are as follows: + * + * Mail - Send using PHP mail function + * Smtp - Send using SMTP + * Debug - Do not send the email, just return the result + * + * You can add custom transports (or override existing transports) by adding the + * appropriate file to src/Mailer/Transport. Transports should be named + * 'YourTransport.php', where 'Your' is the name of the transport. + */ + 'EmailTransport' => [ + 'default' => [ + 'className' => 'Mail', + // The following keys are used in SMTP transports + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'username' => 'user', + 'password' => 'secret', + 'client' => null, + 'tls' => null, + 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), + ], + ], + + /** + * Email delivery profiles + * + * Delivery profiles allow you to predefine various properties about email + * messages from your application and give the settings a name. This saves + * duplication across your application and makes maintenance and development + * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email` + * for more information. + */ + 'Email' => [ + 'default' => [ + 'transport' => 'default', + 'from' => 'you@localhost', + //'charset' => 'utf-8', + //'headerCharset' => 'utf-8', + ], + ], + + /** + * Connection information used by the ORM to connect + * to your application's datastores. + * Do not use periods in database name - it may lead to error. + * See https://github.com/cakephp/cakephp/issues/6471 for details. + * Drivers include Mysql Postgres Sqlite Sqlserver + * See vendor\cakephp\cakephp\src\Database\Driver for complete list + */ + 'Datasources' => [ + 'default' => [ + 'className' => 'Cake\Database\Connection', + 'driver' => 'Cake\Database\Driver\Mysql', + 'persistent' => false, + 'host' => 'localhost', + /** + * CakePHP will use the default DB port based on the driver selected + * MySQL on MAMP uses port 8889, MAMP users will want to uncomment + * the following line and set the port accordingly + */ + //'port' => 'non_standard_port_number', + 'username' => 'my_app', + 'password' => 'secret', + 'database' => 'my_app', + 'encoding' => 'utf8', + 'timezone' => 'UTC', + 'flags' => [], + 'cacheMetadata' => true, + 'log' => false, + + /** + * Set identifier quoting to true if you are using reserved words or + * special characters in your table or column names. Enabling this + * setting will result in queries built using the Query Builder having + * identifiers quoted when creating SQL. It should be noted that this + * decreases performance because each query needs to be traversed and + * manipulated before being executed. + */ + 'quoteIdentifiers' => false, + + /** + * During development, if using MySQL < 5.6, uncommenting the + * following line could boost the speed at which schema metadata is + * fetched from the database. It can also be set directly with the + * mysql configuration directive 'innodb_stats_on_metadata = 0' + * which is the recommended value in production environments + */ + //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], + + 'url' => env('DATABASE_URL', null), + ], + + /** + * The test connection is used during the test suite. + */ + 'test' => [ + 'className' => 'Cake\Database\Connection', + 'driver' => 'Cake\Database\Driver\Mysql', + 'persistent' => false, + 'host' => 'localhost', + //'port' => 'non_standard_port_number', + 'username' => 'my_app', + 'password' => 'secret', + 'database' => 'test_myapp', + 'encoding' => 'utf8', + 'timezone' => 'UTC', + 'cacheMetadata' => true, + 'quoteIdentifiers' => false, + 'log' => false, + //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], + 'url' => env('DATABASE_TEST_URL', null), + ], + ], + + /** + * Configures logging options + */ + 'Log' => [ + 'debug' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'debug', + 'levels' => ['notice', 'info', 'debug'], + 'url' => env('LOG_DEBUG_URL', null), + ], + 'error' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'error', + 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], + 'url' => env('LOG_ERROR_URL', null), + ], + ], + + /** + * Session configuration. + * + * Contains an array of settings to use for session configuration. The + * `defaults` key is used to define a default preset to use for sessions, any + * settings declared here will override the settings of the default config. + * + * ## Options + * + * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. + * - `cookiePath` - The url path for which session cookie is set. Maps to the + * `session.cookie_path` php.ini config. Defaults to base path of app. + * - `timeout` - The time in minutes the session should be valid for. + * Pass 0 to disable checking timeout. + * Please note that php.ini's session.gc_maxlifetime must be equal to or greater + * than the largest Session['timeout'] in all served websites for it to have the + * desired effect. + * - `defaults` - The default configuration set to use as a basis for your session. + * There are four built-in options: php, cake, cache, database. + * - `handler` - Can be used to enable a custom session handler. Expects an + * array with at least the `engine` key, being the name of the Session engine + * class to use for managing the session. CakePHP bundles the `CacheSession` + * and `DatabaseSession` engines. + * - `ini` - An associative array of additional ini values to set. + * + * The built-in `defaults` options are: + * + * - 'php' - Uses settings defined in your php.ini. + * - 'cake' - Saves session files in CakePHP's /tmp directory. + * - 'database' - Uses CakePHP's database sessions. + * - 'cache' - Use the Cache class to save sessions. + * + * To define a custom session handler, save it at src/Network/Session/.php. + * Make sure the class implements PHP's `SessionHandlerInterface` and set + * Session.handler to + * + * To use database sessions, load the SQL file located at config/Schema/sessions.sql + */ + 'Session' => [ + 'defaults' => 'php', + ], +]; diff --git a/production/example_apps/zippy_maps/config/bootstrap.php b/production/example_apps/zippy_maps/config/bootstrap.php new file mode 100644 index 00000000..1ce9edb1 --- /dev/null +++ b/production/example_apps/zippy_maps/config/bootstrap.php @@ -0,0 +1,242 @@ +getMessage() . "\n"); +} + +/* + * Load an environment local configuration file. + * You can use a file like app_local.php to provide local overrides to your + * shared configuration. + */ +//Configure::load('app_local', 'default'); + +/* + * When debug = true the metadata cache should only last + * for a short time. + */ +if (Configure::read('debug')) { + Configure::write('Cache._cake_model_.duration', '+2 minutes'); + Configure::write('Cache._cake_core_.duration', '+2 minutes'); +} + +/* + * Set server timezone to UTC. You can change it to another timezone of your + * choice but using UTC makes time calculations / conversions easier. + */ +date_default_timezone_set('UTC'); + +/* + * Configure the mbstring extension to use the correct encoding. + */ +mb_internal_encoding(Configure::read('App.encoding')); + +/* + * Set the default locale. This controls how dates, number and currency is + * formatted and sets the default language to use for translations. + */ +ini_set('intl.default_locale', Configure::read('App.defaultLocale')); + +/* + * Register application error and exception handlers. + */ +$isCli = PHP_SAPI === 'cli'; +if ($isCli) { + (new ConsoleErrorHandler(Configure::read('Error')))->register(); +} else { + (new ErrorHandler(Configure::read('Error')))->register(); +} + +/* + * Include the CLI bootstrap overrides. + */ +if ($isCli) { + require __DIR__ . '/bootstrap_cli.php'; +} + +/* + * Set the full base URL. + * This URL is used as the base of all absolute links. + * + * If you define fullBaseUrl in your config file you can remove this. + */ +if (!Configure::read('App.fullBaseUrl')) { + $s = null; + if (env('HTTPS')) { + $s = 's'; + } + + $httpHost = env('HTTP_HOST'); + if (isset($httpHost)) { + Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost); + } + unset($httpHost, $s); +} + +Cache::setConfig(Configure::consume('Cache')); +ConnectionManager::setConfig(Configure::consume('Datasources')); +Email::setConfigTransport(Configure::consume('EmailTransport')); +Email::setConfig(Configure::consume('Email')); +Log::setConfig(Configure::consume('Log')); +Security::salt(Configure::consume('Security.salt')); + +/* + * The default crypto extension in 3.0 is OpenSSL. + * If you are migrating from 2.x uncomment this code to + * use a more compatible Mcrypt based implementation + */ +//Security::engine(new \Cake\Utility\Crypto\Mcrypt()); + +/* + * Setup detectors for mobile and tablet. + */ +Request::addDetector('mobile', function ($request) { + $detector = new \Detection\MobileDetect(); + + return $detector->isMobile(); +}); +Request::addDetector('tablet', function ($request) { + $detector = new \Detection\MobileDetect(); + + return $detector->isTablet(); +}); + +/* + * Enable immutable time objects in the ORM. + * + * You can enable default locale format parsing by adding calls + * to `useLocaleParser()`. This enables the automatic conversion of + * locale specific date formats. For details see + * @link http://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data + */ +Type::build('time') + ->useImmutable(); +Type::build('date') + ->useImmutable(); +Type::build('datetime') + ->useImmutable(); +Type::build('timestamp') + ->useImmutable(); + + /* + * Custom Inflector rules, can be set to correctly pluralize or singularize + * table, model, controller names or whatever other string is passed to the + * inflection functions. + */ + // Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']); + // Inflector::rules('irregular', ['red' => 'redlings']); + // Inflector::rules('uninflected', ['dontinflectme']); + // Inflector::rules('transliteration', ['/Ã¥/' => 'aa']); + +/* + * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call + * Uncomment one of the lines below, as you need. make sure you read the documentation on Plugin to use more + * advanced ways of loading plugins + * + * Plugin::loadAll(); // Loads all plugins at once + * Plugin::load('Migrations'); //Loads a single plugin named Migrations + * + */ + +/* + * Only try to load DebugKit in development mode + * Debug Kit should not be installed on a production system + */ +if (Configure::read ( 'debug' )) { + Plugin::load ( 'DebugKit', [ + 'bootstrap' => true + ] ); +} + +Plugin::load ( 'Migrations' ); + +// hoist up the geocoder and maps support, matey. +Plugin::load ( 'Geo', [ + 'bootstrap' => true +] ); + +Plugin::load ( 'DebugKit' ); + + +Plugin::load('Avmaps', ['bootstrap' => false, 'routes' => true]); + + diff --git a/production/example_apps/zippy_maps/config/bootstrap_cli.php b/production/example_apps/zippy_maps/config/bootstrap_cli.php new file mode 100644 index 00000000..f822a557 --- /dev/null +++ b/production/example_apps/zippy_maps/config/bootstrap_cli.php @@ -0,0 +1,38 @@ + [ + 'key' => 'your-api-key-here', + ], +]; + + +?> + diff --git a/production/example_apps/zippy_maps/config/paths.php b/production/example_apps/zippy_maps/config/paths.php new file mode 100644 index 00000000..fcaba5ce --- /dev/null +++ b/production/example_apps/zippy_maps/config/paths.php @@ -0,0 +1,85 @@ +connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); + + /** + * ...and connect the rest of 'Pages' controller's URLs. + */ + $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); + + // enable the categories controller to function as an API. + $routes->resources('Categories', + [ 'actions' => ['create' => 'lookupajax'] ]); + // enable the locations controller to function as an API. + $routes->resources('Locations', + [ 'actions' => ['create' => 'lookupajax'] ]); + + + /** + * Connect catchall routes for all controllers. + * + * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for + * `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']);` + * `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);` + * + * Any route class can be used with this method, such as: + * - DashedRoute + * - InflectedRoute + * - Route + * - Or your own route class + * + * You can remove these routes once you've connected the + * routes you want in your application. + */ + $routes->fallbacks(DashedRoute::class); +}); + +/** + * Load all plugin routes. See the Plugin documentation on + * how to customize the loading of plugin routes. + */ +Plugin::routes(); diff --git a/production/example_apps/zippy_maps/config/schema/i18n.sql b/production/example_apps/zippy_maps/config/schema/i18n.sql new file mode 100644 index 00000000..47cf171d --- /dev/null +++ b/production/example_apps/zippy_maps/config/schema/i18n.sql @@ -0,0 +1,18 @@ +# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# +# Licensed under The MIT License +# For full copyright and license information, please see the LICENSE.txt +# Redistributions of files must retain the above copyright notice. +# MIT License (http://www.opensource.org/licenses/mit-license.php) + +CREATE TABLE i18n ( + id int NOT NULL auto_increment, + locale varchar(6) NOT NULL, + model varchar(255) NOT NULL, + foreign_key int(10) NOT NULL, + field varchar(255) NOT NULL, + content text, + PRIMARY KEY (id), + UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field), + INDEX I18N_FIELD(model, foreign_key, field) +); diff --git a/production/example_apps/zippy_maps/config/schema/sessions.sql b/production/example_apps/zippy_maps/config/schema/sessions.sql new file mode 100644 index 00000000..b5a5276b --- /dev/null +++ b/production/example_apps/zippy_maps/config/schema/sessions.sql @@ -0,0 +1,13 @@ +# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) +# +# Licensed under The MIT License +# For full copyright and license information, please see the LICENSE.txt +# Redistributions of files must retain the above copyright notice. +# MIT License (http://www.opensource.org/licenses/mit-license.php) + +CREATE TABLE sessions ( + id char(40) NOT NULL, + data text, + expires INT(11) NOT NULL, + PRIMARY KEY (id) +); diff --git a/production/example_apps/zippy_maps/docs/google_api_info.txt b/production/example_apps/zippy_maps/docs/google_api_info.txt new file mode 100644 index 00000000..2cb4e90d --- /dev/null +++ b/production/example_apps/zippy_maps/docs/google_api_info.txt @@ -0,0 +1,9 @@ + + +get an api key for your project: +(link) + +add the features required on that api key: +(links) +including distance matrix, geocoder, javascript api, + diff --git a/production/example_apps/zippy_maps/docs/mysql_scratch_sheet_looking_at_tables_v001.sql b/production/example_apps/zippy_maps/docs/mysql_scratch_sheet_looking_at_tables_v001.sql new file mode 100644 index 00000000..e4cad48a --- /dev/null +++ b/production/example_apps/zippy_maps/docs/mysql_scratch_sheet_looking_at_tables_v001.sql @@ -0,0 +1,18 @@ +show databases; +#create database zipcodes; +use zipcodes; + +describe categories; + +select * from categories where image is null; + +describe locations; + +select * from locations where id > 3000; + +# useful floating point compare technique. +select * from locations where abs(lat - '18.17') <= 1e-6; + +select * from locations where id = 607; + +select * from locations ; diff --git a/production/example_apps/zippy_maps/docs/producing_location_tables_from_zip_db_v001.sql b/production/example_apps/zippy_maps/docs/producing_location_tables_from_zip_db_v001.sql new file mode 100644 index 00000000..03c5692c --- /dev/null +++ b/production/example_apps/zippy_maps/docs/producing_location_tables_from_zip_db_v001.sql @@ -0,0 +1,40 @@ +# note: this code was appropriate before migration AddLatLongColumnsToLocationsTable happened in july 2017. +# if one wanted to take a kake zip style db to the map demo db, there would be a few changes (such as getting rid of the +# combining of lat and long into a single field). + +# a bunch of helper bits. real important code is at the end. +use zipcodes; +select database(); +show tables; +select * from kake_zip_code; +select lat, lon, locationtext, country from kake_zip_code ; +select location, concat(lat, ',', lon), concat(locationtext, ' ', zip_code, ', ', country) from kake_zip_code where lat != 0 and lon != 0 limit 500; +describe locations; +describe categories; +describe categories_locations; + +# testing select with concats. +select location, concat(locationtext, ' ', zip_code), concat(lat, ',', lon) from kake_zip_code where lat != 0 and lon != 0 limit 500; + +select * from kake_zip_code limit 500; +select * from locations; +select * from categories; +select * from categories_locations; +delete from locations where id != 0; +ALTER TABLE locations AUTO_INCREMENT = 1; +delete from categories where id != 0; +ALTER TABLE categories AUTO_INCREMENT = 1; +delete from categories_locations where id != 0; +ALTER TABLE categories_locations AUTO_INCREMENT = 1; + +select * from locations where location like '%, AK %'; + +# these are the important actions... + +# the real business gets done by these inserts. +insert into locations (id, name, location, latlong, created, modified) select null, concat(location, '-', zip_code), concat(locationtext, ' ', zip_code), concat(lat, ',', lon), now(), now() from kake_zip_code where lat != 0 and lon != 0 limit 500000; +insert ignore into categories (id, name, created, modified, image) select null, concat(country, '-', state_prefix), now(), now(), null from kake_zip_code where lat != 0 and lon != 0 limit 500000; +# big one, getting the categories done automatically... +insert ignore into categories_locations (id, location_id, category_id, created, modified) + select null, locations.id as location_id, categories.id as category_id, now(), now() from locations inner join categories where locations.name like concat('%', categories.name, '%') limit 500000; + diff --git a/production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip b/production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip new file mode 100644 index 00000000..8cfd2156 Binary files /dev/null and b/production/example_apps/zippy_maps/docs/zipcode_dump-sql.zip differ diff --git a/production/example_apps/zippy_maps/index.php b/production/example_apps/zippy_maps/index.php new file mode 100644 index 00000000..fc5e39cc --- /dev/null +++ b/production/example_apps/zippy_maps/index.php @@ -0,0 +1,16 @@ + + + + + + + + + + + ./tests/TestCase + + + + + + + + + + + + + + + + + ./src/ + ./plugins/*/src/ + + + diff --git a/production/example_apps/zippy_maps/readme.txt b/production/example_apps/zippy_maps/readme.txt new file mode 100644 index 00000000..6231a9e4 --- /dev/null +++ b/production/example_apps/zippy_maps/readme.txt @@ -0,0 +1,42 @@ + +steps to bringing up this maps demo site... + +* need to configure a database in app.php. see default version: config/app.default.php + +* need an api key from google to have separate hit quotas on mapping API. + * refer to: https://developers.google.com/maps/documentation/distance-matrix/get-api-key + * see default version: config/config_google.default.php + * example of using api key: + * https://maps.googleapis.com/maps/api/distancematrix/json?origins=Seattle&destinations=San+Francisco&key=YOUR_API_KEY + +* need to install the cake geo code. + * more details at: https://github.com/dereuromark/cakephp-geo/blob/master/docs/Install.md + +* need to have jquery available and loaded someplace. i got a recent minified version of it and stored it in webroot/js and then added this to default.ctp before the fetch('script') call: + + +* need to load the marker clusterer code for map marker clustering to work. see ClusterMapHelper.php for more info. + +* a bunch of icons for map markers can be found here: https://code.google.com/archive/p/google-maps-icons/downloads + +* need to make links for the plugins: + from: https://book.cakephp.org/3.0/en/deployment.html#symlink-assets + run: bin/cake plugin assets symlink + +--- + +assorted reference notes: + +mysql and php using javascript api with maps: +https://developers.google.com/maps/documentation/javascript/mysql-to-maps + +how to show things in a form with checkboxes: +https://book.cakephp.org/3.0/en/views/helpers/form.html#creating-inputs-for-associated-data + +tagList above is computed this way: +https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#finding-key-value-pairs + +events that can be hooked are listed here: +https://developers.google.com/maps/documentation/javascript/reference + + diff --git a/production/example_apps/zippy_maps/reference/zipcode.php b/production/example_apps/zippy_maps/reference/zipcode.php new file mode 100644 index 00000000..1bfe72f3 --- /dev/null +++ b/production/example_apps/zippy_maps/reference/zipcode.php @@ -0,0 +1,829 @@ +get_zips_in_range($this->zipPageConditions['zip'], $this->zipPageConditions['range'], $this->zipPageConditions['sort']); + $page_data = array(); + //loop through page data + + + return $this->zipInRangeData; + } + + function paginateCount($conditions = null, $recursive = 0) { + return count($this->zipInRangeData); + } + + + + /* + * TAKEN FROM MICCAH CODE + */ + + var $last_error = ""; // last error message set by this class + var $units = _UNIT_MILES; // miles or kilometers + var $decimals = 2; // decimal places for returned distance + + function get_distance($zip1, $zip2) { + + // returns the distance between to zip codes. If there is an error, the + // function will return false and set the $last_error variable. + + if ($zip1 == $zip2) + return 0; // same zip code means 0 miles between. :) + + + // get details from database about each zip and exit if there is an error + + $details1 = $this->get_zip_point($zip1); + $details2 = $this->get_zip_point($zip2); + if ($details1 == false) { + $this->last_error = "No details found for zip code: $zip1"; + return false; + } + if ($details2 == false) { + $this->last_error = "No details found for zip code: $zip2"; + return false; + } + + + // calculate the distance between the two points based on the lattitude + // and longitude pulled out of the database. + + $miles = $this->calculate_mileage($details1['lat'], $details2['lat'], $details1['lon'], $details2['lon']); + + + + if ($this->units == _UNIT_KILOMETERS) return round($miles * _M2KM_FACTOR, $this->decimals); + else return round($miles, $this->decimals); // must be miles + + } + + + /** + * + * Lookups up a zip code and returns single array or multi-array based on sending multiple zip codes in array or just a string + * @param $zip + */ + function lookup($zip, $options = array()) { + $default_options = + array( + 'bare' => false, //set to true to strip outer Zipcode dimension + ); + $options = am($default_options, $options); + + if(is_array($zip)) { + // find all + $data = $this->find('all', array('conditions'=>array('Zipcode.zip_code'=>$zip), 'recursive' => -1)); + } else { + // find first + $data = $this->find('first', array('conditions'=>array('Zipcode.zip_code'=>$zip), 'recursive' => -1)); + } + + if($options['bare']) { + $data = $data['Zipcode']; + } + return $data; + } + + /** + * + * This returns all zip codes (even if one sent) + * @param $zip + */ + function get_zip_details($zip) { + if (!$data = $this->find('all',array('conditions'=>array('zip_code'=>$zip)))){ + return false; + } else { + return $data; + } + } + + function get_details_by_city($cityname) { + + if (!$data = $this->find('all', array('conditions'=>array('city LIKE'=>$cityname),'recursive'=>-1))) { + return false; + } else { + return $data; + } + } + + function get_details_by_lat_lon($geolocation) { + if (!$data = $this->find('all', array('conditions'=>array('lat'=>$geolocation['latitude'],'lon'=>$geolocation['longitude']),'recursive'=>-1))) { + return false; + } else { + return $data; + } + } + function get_details_by_location($locationtext) { + + if (!$data = $this->find('all', array('conditions'=>array('locationtext LIKE'=>$locationtext),'recursive'=>-1))) { + return false; + } else { + return $data; + } + } + + function get_details_by_county($county, $state_id){ + if (!$data = $this->find('all', array('conditions'=>array('county LIKE'=>$county, 'state_prefix LIKE'=>$state_id),'recursive'=>-1))) { + return false; + } else { + return $data; + } + + } + + + function get_locations_by_state($stateprefix) { + if (!$data = $this->find('all', array('conditions'=>array('state_prefix LIKE'=>$stateprefix),'recursive'=>-1,'order'=>array('zip_code'=>'asc')))){ + return false; + } else { + return $data; + } + } + + function get_locations_by_county($county) { + + if (!$data = $this->find('all', array('conditions'=>array('county LIKE'=>$county),'recursive'=>-1))){ + + return false; + } else { + return $data; + } + } + + function get_counties_by_state($stateprefix) { + + if (!$data = $this->find('all', array('fields'=>array('DISTINCT county'),'conditions'=>array('state_prefix LIKE'=>$stateprefix),'recursive'=>-1,'order'=>array('county'=>'asc')))){ + return false; + } else { + return $data; + } + } + + function get_zip_point($zip) { + + // This function pulls just the lattitude and longitude from the + // database for a given zip code. + //$sql = "SELECT lat, lon from {$this->tablePrefix}zip_code WHERE zip_code='$zip'"; + //$r = mysql_query($sql); + + if (!$data = $this->find(array('zip_code'=>$zip), array('lat', 'lon'))) { + //$this->last_error = mysql_error(); + return false; + } else { + //$row = mysql_fetch_array($r); + //mysql_free_result($r); + //var_dump($data['Zipcode']); + //return $row; + return $data['Zipcode']; + } + } + + + function calculate_mileage($lat1, $lat2, $lon1, $lon2) { + + // used internally, this function actually performs that calculation to + // determine the mileage between 2 points defined by lattitude and + // longitude coordinates. This calculation is based on the code found + // at http://www.cryptnet.net/fsp/zipdy/ + + // Convert lattitude/longitude (degrees) to radians for calculations + $lat1 = deg2rad($lat1); + $lon1 = deg2rad($lon1); + $lat2 = deg2rad($lat2); + $lon2 = deg2rad($lon2); + + // Find the deltas + $delta_lat = $lat2 - $lat1; + $delta_lon = $lon2 - $lon1; + + // Find the Great Circle distance + $temp = pow(sin($delta_lat/2.0),2) + cos($lat1) * cos($lat2) * pow(sin($delta_lon/2.0),2); + $distance = 3956 * 2 * atan2(sqrt($temp),sqrt(1-$temp)); + + return $distance; + } + + function get_zips_in_range($zip, $range, $sort=1, $include_base = true, $options = array()) { + $default_options = array('datasource' => null, 'conditions' => array()); + $options = Set::merge($default_options, $options); + + //echo 'kevin'; + // returns an array of the zip codes within $range of $zip. Returns + // an array with keys as zip codes and values as the distance from + // the zipcode defined in $zip. + //var_dump($zip,$range); + + if(is_array($zip)) { + //passing an array with zip code detail(s) known, don't need to lookup + if(isset($zip['latitude'])) { + $zip['lat'] = $zip['latitude']; + unset($zip['latitude']); + } + if(isset($zip['longitude'])) { + $zip['lon'] = $zip['longitude']; + unset($zip['longitude']); + } + $details = $zip; + } else { + $details = $this->get_zip_point($zip); // base zip details + } + + if ($details == false) return false; + + // This portion of the routine calculates the minimum and maximum lat and + // long within a given range. This portion of the code was written + // by Jeff Bearer (http://www.jeffbearer.com). This significanly decreases + // the time it takes to execute a query. My demo took 3.2 seconds in + // v1.0.0 and now executes in 0.4 seconds! Greate job Jeff! + + // Find Max - Min Lat / Long for Radius and zero point and query + // only zips in that range. + + + $lat_range = $range/69.172; + $lon_range = abs($range/(cos($details['lat']) * 69.172)); + $min_lat = number_format($details['lat'] - $lat_range, "4", ".", ""); + $max_lat = number_format($details['lat'] + $lat_range, "4", ".", ""); + $min_lon = number_format($details['lon'] - $lon_range, "4", ".", ""); + $max_lon = number_format($details['lon'] + $lon_range, "4", ".", ""); + + $return = array(); // declared here for scope + + /* $sql = "SELECT zip_code, lat, lon FROM zip_code "; + if (!$include_base) $sql .= "WHERE zip_code <> '$zip' AND "; + else $sql .= "WHERE "; + $sql .= "lat BETWEEN '$min_lat' AND '$max_lat' + AND lon BETWEEN '$min_lon' AND '$max_lon'"; */ + + $conditions = array(); + if($range === 'all') { + // don't want to have a range + // $conditions = array() + } else { + if(!$include_base) { + $conditions['zip_code'] = "<> $zip"; + } else { + $conditions['lat BETWEEN ? AND ?'] = array($min_lat, $max_lat); + $conditions['lon BETWEEN ? AND ?'] = array($min_lon, $max_lon); + } + } + + if($options['conditions']) { + $conditions = Set::merge($options['conditions'], $conditions); + } + + if($options['datasource']) { + $datasource =& ClassRegistry::init($options['datasource'], 'model'); + $data = $datasource->find('all', array('conditions' =>$conditions, 'recursive' => -1)); + + list($pluginName, $modelName) = pluginSplit($options['datasource']); + + } else { + $data = $this->find('all', array('conditions' =>$conditions)); + $pluginName = null; + $modelName = 'Zipcode'; + } + + if (!$data) { // sql error + //var_dump($data); + //$this->last_error = mysql_error(); + return false; + + } else { + //return; + /*while ($row = mysql_fetch_row($r)) { + + // loop through all 40 some thousand zip codes and determine whether + // or not it's within the specified range. + + $dist = $this->calculate_mileage($details[0],$row[1],$details[1],$row[2]); + if ($this->units == _UNIT_KILOMETERS) $dist = $dist * _M2KM_FACTOR; + if ($dist <= $range) { + $return[str_pad($row[0], 5, "0", STR_PAD_LEFT)] = round($dist, $this->decimals); + } + } + mysql_free_result($r);*/ + $zip1VarName = 'zip_code'; + $zip1 = null; + if(isset($details['zip'])) { + $zip1 = $details['zip']; + $zip1VarName = 'zip'; + } else if (isset($details['zipcode'])) { + $zip1 = $details['zipcode']; + $zip1VarName = 'zipcode'; + } else if (isset($details['zip_code'])) { + $zip1 = $details['zip_code']; + $zip1VarName = 'zip_code'; + } + + $zip2VarName = 'zip_code'; + + $dataByZip = array(); + foreach($data as $row) { + if(isset($row[$modelName]['lat']) and isset($row[$modelName]['lon'])) { + $dist = $this->calculate_mileage($details['lat'],$row[$modelName]['lat'],$details['lon'],$row[$modelName]['lon']); + } else { + $zip2 = null; + if(isset($row[$modelName]['zip'])) { + $zip2 = $row[$modelName]['zip']; + $zip2VarName = 'zip'; + } else if (isset($row[$modelName]['zipcode'])) { + $zip2 = $row[$modelName]['zipcode']; + $zip2VarName = 'zipcode'; + } else if (isset($row[$modelName]['zip_code'])) { + $zip2 = $row[$modelName]['zip_code']; + $zip2VarName = 'zip_code'; + } + + $dist = $this->get_distance($zip1, $zip2); + } + + if ($this->units == _UNIT_KILOMETERS) $dist = $dist * _M2KM_FACTOR; + if ($range === 'all' or $dist <= $range) { + $return[str_pad($row[$modelName][$zip2VarName], 5, "0", STR_PAD_LEFT)] = round($dist, $this->decimals); + $dataByZip[str_pad($row[$modelName][$zip2VarName], 5, "0", STR_PAD_LEFT)] = $row; + } + } + } + + // sort array + switch($sort) + { + case _ZIPS_SORT_BY_DISTANCE_ASC: + asort($return); + break; + + case _ZIPS_SORT_BY_DISTANCE_DESC: + arsort($return); + break; + + case _ZIPS_SORT_BY_ZIP_ASC: + ksort($return); + break; + + case _ZIPS_SORT_BY_ZIP_DESC: + krsort($return); + break; + } + + $this->zipInRangeData = $return; + + if($options['datasource']) { + //merge database results back into return (with distance calculated) + $newReturn = array(); + foreach($return as $zip => $distance) { + if(isset($dataByZip[$zip])) { + $tmp = $dataByZip[$zip]; + $tmp['distance'] = $distance; + $newReturn[] = $tmp; + + } + } + $return = $newReturn; + } + + if (empty($return)) return false; + return $return; + } + + function get_detailed_zips_in_range($zip, $range, $sort=1, $include_base = true) { + // returns an array of the zip codes within $range of $zip with their details + //var_dump($zip,$range); + + $details = $this->get_zip_point($zip); // base zip details + + if ($details == false) return false; + + // This portion of the routine calculates the minimum and maximum lat and + // long within a given range. This portion of the code was written + // by Jeff Bearer (http://www.jeffbearer.com). This significanly decreases + // the time it takes to execute a query. My demo took 3.2 seconds in + // v1.0.0 and now executes in 0.4 seconds! Greate job Jeff! + + // Find Max - Min Lat / Long for Radius and zero point and query + // only zips in that range. + $lat_range = $range/69.172; + $lon_range = abs($range/(cos($details['lat']) * 69.172)); + $min_lat = number_format($details['lat'] - $lat_range, "4", ".", ""); + $max_lat = number_format($details['lat'] + $lat_range, "4", ".", ""); + $min_lon = number_format($details['lon'] - $lon_range, "4", ".", ""); + $max_lon = number_format($details['lon'] + $lon_range, "4", ".", ""); + + $return = array(); // declared here for scope + + $conditions = array(); + $conditions['z_primary'] = 'PRIMARY'; + if(!$include_base) { + $conditions['zip_code'] = "<> $zip"; + } else { + $conditions['lat BETWEEN ? AND ?'] = array($min_lat, $max_lat); + $conditions['lon BETWEEN ? AND ?'] = array($min_lon, $max_lon); + } + + if (!$data = $this->find('all', array('conditions' =>$conditions))) { // sql error + + return false; + + } else { + foreach($data as $row) { + + $dist = $this->calculate_mileage($details['lat'],$row['Zipcode']['lat'],$details['lon'],$row['Zipcode']['lon']); + //$return['locationdetails'] = $this->find('all',array('conditions'=>array('zip_code'=>$zip))); + if ($this->units == _UNIT_KILOMETERS) $dist = $dist * _M2KM_FACTOR; + if ($dist <= $range) { + $row['Zipcode']['distance'] = round($dist, $this->decimals); + $return[] = $row; + } + } + } + + // sort array + function dist_sort($a,$b) { + //var_dump($a['Zipcode']['distance']); + if($a['Zipcode']['distance'] > $b['Zipcode']['distance']) + return 1;//here,if you return -1,return 1 below,the result will be descending + if($a['Zipcode']['distance'] < $b['Zipcode']['distance']) + return -1; + if($a['Zipcode']['distance'] == $b['Zipcode']['distance']) + return 0; + } + switch ($sort) { + case '_ZIPS_SORT_BY_DISTANCE_ASC': + //asort($return); + //var_dump('test'); + uasort($return, 'dist_sort'); + + break; + + case '_ZIPS_SORT_BY_DISTANCE_DESC': + arsort($return); + break; + } + + $this->zipInRangeData = $return; + //var_dump($return); + if (empty($return)) return false; + return $return; + } + + + /** + * Returns a flat array (e.g. 04072,03801, etc.) for SQL IN statements + * + * @return array + */ + function getZipsInRangeFlat() { + return array_keys($this->zipInRangeData); + } + + + function zipRangeOrderCase($zips = array(), $column_name = 'zip') { + + /*Order by (CASE City + WHEN 'Paris' THEN 1 + WHEN 'Chicago' THEN 2 + WHEN 'Boston' THEN 3 + WHEN 'New York' THEN 4 + WHEN 'Berkeley' THEN 5 + WHEN 'Dallas' THEN 6 + ELSE 100 END) ASC */ + $order_by = ''; + $zip_count = count($zips); + for($x=0; $x < $zip_count; $x++) { + $order_by .= " WHEN {$zips[$x]} THEN ". ($x + 1); + } + + if(!empty($order_by)) { + $order_by = "(CASE $column_name". $order_by ." ELSE 100 END) ASC"; + return $order_by; + } else { + return false; + } + + } + + /** + * + * Takes a string [from a form] + * @param $search string + * @param $options array + * return false if no zip found; or text if a single zip code or an array if multiple zip codes + */ + function findZipFromText($search, $options = array()) { + App::import('Sanitize'); + + $default_options = + array( + 'distance' => 0, + 'stateList' => array(), //supply list of states, array('SN' => 'State Name');, to use instead of full geography helper list... will increase performance if you supply a small list + 'defaultState' => Configure::read('avorders.avengerDefaultState'), //array('ME'), //an array of state abbreviations to use by default when a state isn't found + 'firstMatch' => true, //will return first zip code that matches if distance is 0 (otherwise, returns all zipcodes) + 'primary' => true, // set to false to return all zip codes, not just primary zip codes + ); + $options = am($default_options, $options); + + if(is_numeric($search)) { + //assume it's a zip code + $zip = trim($search); + $zip = substr($zip, 0, 5); //make sure it's only 5 numbers + + } else { + // searching by a string + // 1. clean/sanitize data + // 2a. see if preg_match finds a zip code in user-entered text, if so use it + // 2b. otherwise, explode on spaces, b/c each word needs can be matched, then find unique zip codes + // 3. create conditions, add in distance condition and zips in range if specified + // 4. append to join conditions + + $location_array = array(); + $location = Sanitize::paranoid($search, array(' ', ',', '.')); + $location = trim($location); + + if(preg_match("/([0-9]{5})(-[0-9]{4})?/i", $location, $match)) { + //zip code entered with text, use it + $zip = $match[0]; + } else { + App::import('Helper', 'Geography'); + $geography = new GeographyHelper(); + + $terms = array(); + $stateFound = false; + + // zip code not in text, so try to find zipcode using city, state if known + // check to see if there is a comma, if so explode on that: portsmouth, new hampshire + if(strpos($location, ',') !== false) { + $location_array = explode(',', $location); + } else { + //look for state names (not abbreviations) contained within search term + $stateAbbr = $geography->isAState($location, array('search' => true, 'list' => $options['stateList'])); // looking to see if a state is buried in this query + if($stateAbbr) { + // state found, set to state_prefix and remove from search terms (for down-the-line processing) + $stateFound = true; + $terms['Zipcode.state_prefix'] = $stateAbbr['state']; + $location = str_ireplace($stateAbbr['term'], '', $location); + $location = trim($location); + } + + // explode remaining search terms on spaces + $location_array = explode(' ', $location); + } + + $cityTerms = array(); + foreach($location_array as $term) { + + if(!$stateFound) { + $stateAbbr = $geography->isAState($term); + if($stateAbbr) { + //we know this is a state, and the 2 letter abbreviation + $terms['Zipcode.state_prefix'] = $stateAbbr; + $stateFound = true; + } else { + //not a state, must be a city, eliminated everything else + $cityTerm = $term .'%'; + if(!empty($cityTerms)) { + $cityTerm = '%'. $cityTerm; // if it's not the first word, need to allow double-sided wild card + } + $cityTerms[] = $cityTerm; + } + } else { + //state already found, these terms must be a city + $cityTerm = $term .'%'; + if(!empty($cityTerms)) { + $cityTerm = '%'. $cityTerm; // if it's not the first word, need to allow double-sided wild card + } + $cityTerms[] = $cityTerm; + } + } + + if(!empty($cityTerms)) { + if(count($cityTerms) == 1) { + $terms['Zipcode.city LIKE'] = bootArrayFirstValue($cityTerms); + } else { + $terms['AND'] = array(); + foreach($cityTerms as $term) { + $terms['AND'][] = array('Zipcode.city LIKE' => $term); + } + } + } + + //default state to ME, b/c this is originally for MyMaineTherapist + if(!isset($terms['Zipcode.state_prefix'])) { + $terms['Zipcode.state_prefix'] = $options['defaultState']; + } + + // see if we are checking for primary-only zip codes + if($options['primary']) { + $terms['Zipcode.z_primary'] = 'PRIMARY'; + } + + $zips = $this->find('all', array('conditions' => $terms, 'fields' => 'Zipcode.city, Zipcode.state_prefix, Zipcode.zip_code, Zipcode.z_primary', 'group' => 'zip_code', 'recursive' => -1)); + if($zips) { + if($options['firstMatch'] or !empty($options['distance'])) { + // only want the first zip code (if distance is specified, firstMatch is implied) + $zip = bootArrayFirstValue($zips); + $zip = isset($zip['Zipcode']['zip_code']) ? $zip['Zipcode']['zip_code'] : false; + } else { + // for multiple zip codes, you should show a list of available zip codes and allow user to pick zip code in calling function + $zip = Set::extract('/Zipcode/zip_code', $zips); + } + } + } + } + + // ADD IN DISTANCE-BASED SEARCHING + if(!empty($options['distance']) and isset($zip) and $zip) { + + if($options['distance'] == 'all') { + $distance = 'all'; + } else { + $distance = (int) $options['distance']; + $distance = ($distance > 100) ? 100 : $distance; //cap it at 100, that's a lot of zipcodes + } + + $zipsInRange = $this->get_zips_in_range($zip, $distance); + if($zipsInRange) { + $zip = array_keys($zipsInRange); + } + } + + + + if(!isset($zip) or !$zip) { + // basically, turning zipcode off, so no results will be found... + return false; + } + + return $zip; + + } + + + /** + * Performs a Web Service call to FreeGeoIP.net to get IP Whois Information + * @param string $ipaddress + * @return array $location zip, lat, long, etc. of ip address + */ + function fetchFreeGeoIpLocation($ipaddress) { + //http://freegeoip.net/{format}/{ip_or_hostname} + // create curl resource + $location = array(); + + + $ipurl = 'http://freegeoip.net/json/'.$ipaddress; + + $ch = curl_init(); + // set url + curl_setopt( $ch, CURLOPT_TIMEOUT_MS, 1500 ); + curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT_MS, 1500 ); + + curl_setopt($ch, CURLOPT_URL, $ipurl); + //return the transfer as a string + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + // $output contains the output string + $output = curl_exec($ch); + // close curl resource to free up system resources + curl_close($ch); + if(is_string($output) and !empty($output)){ + $location = json_decode($output, true); + + if(!isset($location['zipcode']) or empty($location['zipcode'])){ + //need to find zip code based on geocoded lat/long + if(isset($location['latitude']) and !empty($location['latitude']) and isset($location['longitude']) and !empty($location['longitude'])) { + $zipcode = $this->get_zips_in_range($location, 10); //no zip code supplied, grab the one that is closest within 10 miles + if(is_array($zipcode) and !empty($zipcode)){ + $location['zipcode'] = bootArrayFirstValue(array_keys($zipcode)); + }else{ + $location['zipcode'] = '10001'; + } + } + } + + if(is_array($location) and !empty($location)) { + // change to match format from ZipCode table column names + $location['zip_code'] = $location['zipcode']; + unset($location['zipcode']); + + $location['lat'] = $location['latitude']; + unset($location['latitude']); + + $location['lon'] = $location['longitude']; + unset($location['longitude']); + + $location['state_prefix'] = $location['region_code']; + unset($location['region_code']); + + $location['country'] = $location['country_code']; + unset($location['country_code']); + + $location['locationtext'] = $location['city'].', '.$location['state_prefix']; + } + + } else { + $location = false; + } + + + return $location; + + } + + function getClosestLocation($location, $options = array()) { + $default_options = array('range' => 50); + $options = Set::merge($default_options, $options); + + if($this->hasField('active')) { + $params['conditions'] = array('AvordersStore.active'=>1); + } + return bootArrayFirstValue($this->get_zips_in_range($location, $options['range'], 1, true, null)); + } + +} \ No newline at end of file diff --git a/production/example_apps/zippy_maps/scripts/clean_mapsdemo.sh b/production/example_apps/zippy_maps/scripts/clean_mapsdemo.sh new file mode 100644 index 00000000..e2c8755e --- /dev/null +++ b/production/example_apps/zippy_maps/scripts/clean_mapsdemo.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# some code i wrote to add to revamp that turned out to be unsuitable. +# but it corrects a problem in cakelampvm v002 release that i find annoying, +# so here it is as its own file. + +# clean out some old files that were not checked in in mapsdemo. +echo Doing some git repository maintenance in fred account. +# +# change over to fred folder +pushd /home/fred +exit_on_error "changing dir to fred's home; what have you done with fred?" + +pushd apps/mapsdemo/avenger5 +exit_on_error "changing dir to mapsdemo app" + +rpuffer . &>/dev/null +if [ $? -ne 0 ]; then + # it seems our old files are still conflicting this. + if [ -f config/config_google.php ]; then + \rm -f config/config_google.php + exit_on_error "removing old config for google" + fi + if [ -f config/app.php ]; then + \rm -f config/app.php + exit_on_error "removing old config for app" + fi + + git reset --hard HEAD + exit_on_error "resetting git's hard head" + + rpuffer . +#hmmm: use output saver thing when that exists. + exit_on_error "puffing out mapsdemo app after inadequate corrective action was taken" +fi + +popd + +popd +#...coolness, if we got to here. + + diff --git a/production/example_apps/zippy_maps/scripts/launch_local_cake.sh b/production/example_apps/zippy_maps/scripts/launch_local_cake.sh new file mode 100644 index 00000000..09e2cb51 --- /dev/null +++ b/production/example_apps/zippy_maps/scripts/launch_local_cake.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )" +pushd $THIS_FOLDER/.. + +# does this help? +export DEBUG=true + +./bin/cake server -p 8765 + +popd + + diff --git a/production/example_apps/zippy_maps/scripts/launch_serene_cake.sh b/production/example_apps/zippy_maps/scripts/launch_serene_cake.sh new file mode 100644 index 00000000..c5c79a84 --- /dev/null +++ b/production/example_apps/zippy_maps/scripts/launch_serene_cake.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )" +pushd $THIS_FOLDER/.. + +# does this help? +export DEBUG=true + +./bin/cake server -H 192.241.191.154 -p 12738 + +popd + + diff --git a/production/example_apps/zippy_maps/scripts/prepare_project.sh b/production/example_apps/zippy_maps/scripts/prepare_project.sh new file mode 100644 index 00000000..dfaf24ad --- /dev/null +++ b/production/example_apps/zippy_maps/scripts/prepare_project.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +#hmmm: test this and make sure it's still right. +#hmmm: also test that it's inclusive of all the necessary steps for success. + +#hmmm: aha, this is definitely missing the necessary link creations still. + + +# bails if any step fails. +function check_result() { + if [ $? -ne 0 ]; then + echo -e "failed on: $*" + error_sound + exit 1 + fi +} + +THIS_FOLDER="$( \cd "$(\dirname "$0")" && /bin/pwd )" +pushd $THIS_FOLDER/.. + +echo running composer update process... +composer update +check_result "updating project with composer" + +echo -e "\n\nHave the two config files app.php and config_google.php been configured yet AND has the database for the app been added to mysql? (y/N)" +read line + +if [ $line != 'y' -a $line != 'Y' -a $line != 'yes' -a $line != 'YES' ]; then + echo "Please configure the two config files using their default versions as templates (see the config directory for app.default.php and config_google.default.php)" + exit 1 +fi + +echo running migration code to build the database... +./bin/cake migrations migrate +check_result "running the database migrations" + +echo making asset symlinks +./bin/cake plugin assets symlink +check_result "symlinking web assets" + + + diff --git a/production/example_apps/zippy_maps/src/Application.php b/production/example_apps/zippy_maps/src/Application.php new file mode 100644 index 00000000..9c5999b8 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Application.php @@ -0,0 +1,52 @@ +add(ErrorHandlerMiddleware::class) + + // Handle plugin/theme assets like CakePHP normally does. + ->add(AssetMiddleware::class) + + // Apply routing + ->add(RoutingMiddleware::class); + + return $middleware; + } +} diff --git a/production/example_apps/zippy_maps/src/Console/Installer.php b/production/example_apps/zippy_maps/src/Console/Installer.php new file mode 100644 index 00000000..0756096c --- /dev/null +++ b/production/example_apps/zippy_maps/src/Console/Installer.php @@ -0,0 +1,195 @@ +getIO(); + + $rootDir = dirname(dirname(__DIR__)); + + static::createAppConfig($rootDir, $io); + static::createWritableDirectories($rootDir, $io); + + // ask if the permissions should be changed + if ($io->isInteractive()) { + $validator = function ($arg) { + if (in_array($arg, ['Y', 'y', 'N', 'n'])) { + return $arg; + } + throw new Exception('This is not a valid answer. Please choose Y or n.'); + }; + $setFolderPermissions = $io->askAndValidate( + 'Set Folder Permissions ? (Default to Y) [Y,n]? ', + $validator, + 10, + 'Y' + ); + + if (in_array($setFolderPermissions, ['Y', 'y'])) { + static::setFolderPermissions($rootDir, $io); + } + } else { + static::setFolderPermissions($rootDir, $io); + } + + static::setSecuritySalt($rootDir, $io); + + if (class_exists('\Cake\Codeception\Console\Installer')) { + \Cake\Codeception\Console\Installer::customizeCodeceptionBinary($event); + } + } + + /** + * Create the config/app.php file if it does not exist. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function createAppConfig($dir, $io) + { + $appConfig = $dir . '/config/app.php'; + $defaultConfig = $dir . '/config/app.default.php'; + if (!file_exists($appConfig)) { + copy($defaultConfig, $appConfig); + $io->write('Created `config/app.php` file'); + } + } + + /** + * Create the `logs` and `tmp` directories. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function createWritableDirectories($dir, $io) + { + $paths = [ + 'logs', + 'tmp', + 'tmp/cache', + 'tmp/cache/models', + 'tmp/cache/persistent', + 'tmp/cache/views', + 'tmp/sessions', + 'tmp/tests' + ]; + + foreach ($paths as $path) { + $path = $dir . '/' . $path; + if (!file_exists($path)) { + mkdir($path); + $io->write('Created `' . $path . '` directory'); + } + } + } + + /** + * Set globally writable permissions on the "tmp" and "logs" directory. + * + * This is not the most secure default, but it gets people up and running quickly. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function setFolderPermissions($dir, $io) + { + // Change the permissions on a path and output the results. + $changePerms = function ($path, $perms, $io) { + // Get permission bits from stat(2) result. + $currentPerms = fileperms($path) & 0777; + if (($currentPerms & $perms) == $perms) { + return; + } + + $res = chmod($path, $currentPerms | $perms); + if ($res) { + $io->write('Permissions set on ' . $path); + } else { + $io->write('Failed to set permissions on ' . $path); + } + }; + + $walker = function ($dir, $perms, $io) use (&$walker, $changePerms) { + $files = array_diff(scandir($dir), ['.', '..']); + foreach ($files as $file) { + $path = $dir . '/' . $file; + + if (!is_dir($path)) { + continue; + } + + $changePerms($path, $perms, $io); + $walker($path, $perms, $io); + } + }; + + $worldWritable = bindec('0000000111'); + $walker($dir . '/tmp', $worldWritable, $io); + $changePerms($dir . '/tmp', $worldWritable, $io); + $changePerms($dir . '/logs', $worldWritable, $io); + } + + /** + * Set the security.salt value in the application's config file. + * + * @param string $dir The application's root directory. + * @param \Composer\IO\IOInterface $io IO interface to write to console. + * @return void + */ + public static function setSecuritySalt($dir, $io) + { + $config = $dir . '/config/app.php'; + $content = file_get_contents($config); + + $newKey = hash('sha256', Security::randomBytes(64)); + $content = str_replace('__SALT__', $newKey, $content, $count); + + if ($count == 0) { + $io->write('No Security.salt placeholder to replace.'); + + return; + } + + $result = file_put_contents($config, $content); + if ($result) { + $io->write('Updated Security.salt value in config/app.php'); + + return; + } + $io->write('Unable to update Security.salt value.'); + } +} diff --git a/production/example_apps/zippy_maps/src/Controller/AppController.php b/production/example_apps/zippy_maps/src/Controller/AppController.php new file mode 100644 index 00000000..7483724e --- /dev/null +++ b/production/example_apps/zippy_maps/src/Controller/AppController.php @@ -0,0 +1,71 @@ +loadComponent('Security');` + * + * @return void + */ + public function initialize() + { + parent::initialize(); + + $this->loadComponent('RequestHandler'); + $this->loadComponent('Flash'); + + /* + * Enable the following components for recommended CakePHP security settings. + * see http://book.cakephp.org/3.0/en/controllers/components/security.html + */ + //$this->loadComponent('Security'); + //$this->loadComponent('Csrf'); + } + + /** + * Before render callback. + * + * @param \Cake\Event\Event $event The beforeRender event. + * @return \Cake\Network\Response|null|void + */ + public function beforeRender(Event $event) + { + if (!array_key_exists('_serialize', $this->viewVars) && + in_array($this->response->type(), ['application/json', 'application/xml']) + ) { + $this->set('_serialize', true); + } + } + + + +} diff --git a/production/example_apps/zippy_maps/src/Controller/CategoriesController.php b/production/example_apps/zippy_maps/src/Controller/CategoriesController.php new file mode 100644 index 00000000..eeacbad8 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Controller/CategoriesController.php @@ -0,0 +1,423 @@ +loadComponent('RequestHandler'); + + // configure the request handler to deal with json encoding. + $this->RequestHandler->config('inputTypeMap.json', ['json_decode', true]); + + $this->api_key = SimpleMapsComponent::getGoogleAPIKey(); + + // allow simple access to location db. + $this->loadModel ( 'Locations' ); + + } + + + + /** + * Index method + * + * @return \Cake\Network\Response|null + */ + public function index() + { + $categories = $this->paginate($this->Categories); + + $this->set(compact('categories')); + $this->set('_serialize', ['categories']); + } + + /** + * View method + * + * @param string|null $id Category id. + * @return \Cake\Network\Response|null + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function view($id = null) + { + $category = $this->Categories->get($id, [ + 'contain' => ['Locations'] + ]); + + $this->set('category', $category); + $this->set('_serialize', ['category']); + + // query all the locations belonging to this category but only retrieve part of the info. + $locationBits = $this->Categories->CategoriesLocations->find('list', [ + 'conditions' => [ 'category_id' => $id ], + 'contain' => ['Locations'], + 'valueField' => function ($row) { + return $row->location->get('lat') + . ',' . $row->location->get('lng') + . ' ' . $row->location->get('location'); + } + ]); + $this->set('locationBits', $locationBits); + } + + /** + * queries the locations to display on a map given an "id" to lookup in categories table. + */ + public function map($id = null) + { + $category = $this->Categories->get($id, [ + 'contain' => ['Locations'] + ]); + + $locationsFound = $this->Categories->getLocationsInCategory($id); + $this->set('locationsInCategory', $locationsFound); + + // grab the flags in requests. + $parms = $this->request->getQueryParams(); + + // we will cluster by default, but they can also pass the clustering flag with 0 or 1. + $clustering = (array_key_exists('clustering', $parms) && ($parms['clustering'] == '1')) + || !array_key_exists('clustering', $parms); + //Log::Debug('clustering is: ' . var_export($clustering, true)); + + // set up the selected items in our config chooser. + $selectedList = []; + if ($clustering) { + array_push($selectedList, 'clustering'); + } + $this->set('selectedList', $selectedList); + + // pass the pre-loading function in for the map element. + $this->set('dbProcessor', $this); + $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInCategory, $category );'); + + if ($this->request->is(['post', 'put'])) { + //, 'patch'])) { + $postData = $this->request->getData('view_options')['_ids']; + + $new_clustering = is_array($postData) && in_array('clustering', $postData); + + if ($clustering != $new_clustering) { + $this->redirect(['action' => 'map', + '0' => $id, + '?' => [ + 'clustering' => $new_clustering, + ] + ]); + } + } + + $this->set('category', $category); + +// $this->set('_serialize', ['category']); + } + + /** + * processes a location row by extracting the important information into an array. + * separates the db structure from the pieces needed for google maps. + */ + public function processRow(& $location_row) + { + return [ + 'lat' => $location_row ['location'] ['lat'], + 'lng' => $location_row ['location'] ['lng'], + 'title' => $location_row ['location'] ['name'], + // kludge below adds extra space on content, since someone is not left justifying these. + 'content' => h ( $location_row ['location'] ['location'] ) . '      ', + ]; + } + + public function extractCategoryImage(& $category) + { + return $category->image; + } + + + /** + * attempts to jump to the center of the category, given a particular interpretation of the + * category. if possible we will decide that the category is a state name, and then attempt + * to jump to the center of that state. + * will also show markers in the category. + */ + public function center($id = null) + { + $category = $this->Categories->get($id, [ + 'contain' => ['Locations'] + ]); + + // grab the flags in requests. + $parms = $this->request->getQueryParams(); + + // we will cluster by default, but they can also pass the clustering flag with 0 or 1. + $clustering = (array_key_exists('clustering', $parms) && ($parms['clustering'] == '1')) + || !array_key_exists('clustering', $parms); + //Log::Debug('clustering is: ' . var_export($clustering, true)); + + // set up the selected items in our config chooser. + $selectedList = []; + if ($clustering) { + array_push($selectedList, 'clustering'); + } + $this->set('selectedList', $selectedList); + + $state = null; + // interpret the category name as a state if possible. + if (substr($category->name, 0, 3) == 'US-') { + // bingo, we have a US prefix on the string, so decide what state they mean. + $state = substr($category->name, 3, 2); + + } + // perform the lookup to get the readable name. otherwise a state like indiana (IN) will + // not get geocoded properly. probably others as well. + $state = SimpleMapsComponent::lookupStateFromAbbreviation($state); + + $this->set('state', $state); + + Log::debug('state was found as: ' . $state); + + if ($state !== null) { + $centeredPoint = SimpleMapsComponent::geocode($state . " USA", [ + 'key' => $this->api_key + ]); + $mapCenter = [ 'lat' => $centeredPoint[0], 'lng' => $centeredPoint[1] ] ; + $this->set('mapCenter', $mapCenter); + Log::Debug('computed a map center of: ' . var_export($mapCenter, true)); + } + + + // thoughts on algorithm: is the center of the state according to google what we want to rely on? + // we could at least start there, record the lat/longs and then edit them later as we decide. + + $radius = null; + $lat = null; + $long = null; + if ($mapCenter) { + $radius = 40; // miles from center to show markers. + $lat = $mapCenter['lat']; + $long = $mapCenter['lng']; + } + + Log::Debug('given lat=' . $lat . ' long='. $long . ' radius=' . $radius); + + Log::Debug('loading locations in category within radius'); + + // compute the lat/long bounding box for our search. + $bounds = SimpleMapsComponent::calculateLatLongBoundingBox ( $lat, $long, $radius ); + + if (! $bounds) { + Log::Debug("failed to calculate the bounding box!"); + } else { + Log::Debug("bounding box: " . var_export($bounds, true)); + } + + // query all the locations belonging to this category within the box. + $locationsInCategory = $this->Categories->getLocationsInCategoryInBox($id, + $bounds [0], $bounds [1], $bounds [2], $bounds [3] ); + + $this->set('locationsInCategory', $locationsInCategory); + + $this->set('dbProcessor', $this); + $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInCategory, $category );'); + + if ($this->request->is(['post', 'put'])) { + //, 'patch'])) { + $postData = $this->request->getData('view_options')['_ids']; + + $new_clustering = is_array($postData) && in_array('clustering', $postData); + + if ($clustering != $new_clustering) { + $this->redirect(['action' => 'map', + '0' => $id, + '?' => [ + 'clustering' => $new_clustering, + ] + ]); + } + } + + $this->set('category', $category); +// $this->set('_serialize', ['category','selectedList']); + } + + /** + * Add method + * + * @return \Cake\Network\Response|null Redirects on successful add, renders view otherwise. + */ + public function add() + { + $category = $this->Categories->newEntity(); + if ($this->request->is('post')) { + $category = $this->Categories->patchEntity($category, $this->request->getData()); + if ($this->Categories->save($category)) { + $this->Flash->success(__('The category has been saved.')); + + return $this->redirect(['action' => 'index']); + } + $this->Flash->error(__('The category could not be saved. Please, try again.')); + } + $this->set(compact('category')); + $this->set('_serialize', ['category']); + } + + /** + * Edit method + * + * @param string|null $id Category id. + * @return \Cake\Network\Response|null Redirects on successful edit, renders view otherwise. + * @throws \Cake\Network\Exception\NotFoundException When record not found. + */ + public function edit($id = null) + { + $category = $this->Categories->get($id, [ + 'contain' => [] + ]); + if ($this->request->is(['patch', 'post', 'put'])) { + $category = $this->Categories->patchEntity($category, $this->request->getData()); + if ($this->Categories->save($category)) { + $this->Flash->success(__('The category has been saved.')); + + return $this->redirect(['action' => 'index']); + } + $this->Flash->error(__('The category could not be saved. Please, try again.')); + } + $this->set(compact('category')); + $this->set('_serialize', ['category']); + } + + /** + * Delete method + * + * @param string|null $id Category id. + * @return \Cake\Network\Response|null Redirects to index. + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function delete($id = null) + { + $this->request->allowMethod(['post', 'delete']); + $category = $this->Categories->get($id); + if ($this->Categories->delete($category)) { + $this->Flash->success(__('The category has been deleted.')); + } else { + $this->Flash->error(__('The category could not be deleted. Please, try again.')); + } + + return $this->redirect(['action' => 'index']); + } + + /** + * provides ajax friendly responses. expects to be passed 'category' in post data. + * requires bounding box for lookup be passed as 'sw_lat', 'sw_lng', 'ne_lat', 'ne_lng'. + */ + public function lookupajax() + { + $reqData = $this->request->getData(); + + Log::Debug('got to lookup with data: ' . var_export($reqData, true)); + + // check that this is a post method, since we don't support anything else. + if (! $this->request->is(['post'])) { + die('this is a post method'); + } + + if (array_key_exists('action', $reqData)) { + $action = $reqData['action']; + + if (strcasecmp($action, 'lookupBox') == 0) { + $this->findLocationsInCategoryWithinBounds($reqData); + } else if (strcasecmp($action, 'getInfo') == 0) { + $this->getInfoOnLocation($reqData); + } else { + die('lookupajax call was given unknown action: ' . $action); + } + + } else { + die('lookupajax call has no action specified'); + } + } + + public function findLocationsInCategoryWithinBounds($reqData) + { + if (array_key_exists('category', $reqData)) { + $id = $reqData['category']; + } else { + // throw an exception here? + $message = 'failed to find category id in request data'; + Log::Debug($message); + die($message); + } + + $category = $this->Categories->get($id, [ + 'contain' => ['Locations'] + ]); + $this->set('category', $category); + + if (array_key_exists('sw_lat', $reqData)) { + $sw_lat = $reqData['sw_lat']; + } + if (array_key_exists('sw_lng', $reqData)) { + $sw_lng = $reqData['sw_lng']; + } + if (array_key_exists('ne_lat', $reqData)) { + $ne_lat = $reqData['ne_lat']; + } + if (array_key_exists('ne_lng', $reqData)) { + $ne_lng = $reqData['ne_lng']; + } + + //temp! fails over to using whole range. + if ($sw_lat === null) { $sw_lat = -90; } + if ($sw_lng === null) { $sw_lng = -180; } + if ($ne_lat === null) { $ne_lat = 90; } + if ($ne_lng === null) { $ne_lng = 180; } + + $start = null; + if (array_key_exists('start', $reqData)) { + $start = $reqData['start']; + } + $end = null; + if (array_key_exists('end', $reqData)) { + $end = $reqData['end']; + } + + // lookup the locations inside that box and store for view. + $locationsToSerialize = $this->Categories->getChewedLocationsInCategoryInBox($id, $sw_lat, $sw_lng, $ne_lat, $ne_lng, $start, $end); + //Log::debug('before encoding, php array looks like: ' . var_export($locationsToSerialize, true)); + Log::Debug("returning json now..."); + $encoded = json_encode($locationsToSerialize); + // Log::debug('encoded json is: ' . var_export($encoded, true)); + die($encoded); + } + + public function getInfoOnLocation($reqData) + { + if (array_key_exists('id', $reqData)) { + $id = $reqData['id']; + } else { + // throw an exception here? + $message = 'failed to find location id in request data'; + Log::Debug($message); + die($message); + } + + $location = $this->Locations->get($id, [ + ]); + return die(json_encode($location)); + } +} diff --git a/production/example_apps/zippy_maps/src/Controller/Component/empty b/production/example_apps/zippy_maps/src/Controller/Component/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/src/Controller/ErrorController.php b/production/example_apps/zippy_maps/src/Controller/ErrorController.php new file mode 100644 index 00000000..cf0ebd5b --- /dev/null +++ b/production/example_apps/zippy_maps/src/Controller/ErrorController.php @@ -0,0 +1,68 @@ +loadComponent('RequestHandler'); + } + + /** + * beforeFilter callback. + * + * @param \Cake\Event\Event $event Event. + * @return \Cake\Network\Response|null|void + */ + public function beforeFilter(Event $event) + { + } + + /** + * beforeRender callback. + * + * @param \Cake\Event\Event $event Event. + * @return \Cake\Network\Response|null|void + */ + public function beforeRender(Event $event) + { + parent::beforeRender($event); + + $this->viewBuilder()->setTemplatePath('Error'); + } + + /** + * afterFilter callback. + * + * @param \Cake\Event\Event $event Event. + * @return \Cake\Network\Response|null|void + */ + public function afterFilter(Event $event) + { + } +} diff --git a/production/example_apps/zippy_maps/src/Controller/LocationsController.php b/production/example_apps/zippy_maps/src/Controller/LocationsController.php new file mode 100644 index 00000000..4068be31 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Controller/LocationsController.php @@ -0,0 +1,530 @@ +loadComponent ( 'Avmaps.SimpleMaps' ); + $this->loadModel ( 'Categories' ); + + $this->api_key = SimpleMapsComponent::getGoogleAPIKey (); + } + + /** + * Index method + * + * @return \Cake\Network\Response|null + */ + public function index() { + $locations = $this->paginate ( $this->Locations, [ + 'contain' => 'Categories' + ] ); + $this->set ( compact ( 'locations' ) ); + $this->set ( '_serialize', [ + 'locations' + ] ); + } + + /** + * sets two variables for the view: 'categoriesList' with *all* the category names that exist and + * 'selectedList' with the categories associated with the location 'id'. + * + * @param int $id + */ + public function loadAssociatedCategories($id) { + // find all of the categories available. + $this->set ( 'categoriesList', $this->Categories->getAllCategories()); + + // turn the chosen categories into a list of category ids for the multi-select. + $selectedCategories = $this->Locations->getSelectedCategories($id); + $selectedList = array_keys ( $selectedCategories->toArray () ); + $this->set ( 'selectedList', $selectedList ); + } + + /** + * calculates the set of locations within a certain range from a starting point and returns the + * full set. + */ + public function loadLocationsInRange($lat, $long, $radius) { + Log::debug ( 'into ranged locations calculator' ); + + // compute the lat/long bounding box for our search. + $bounds = SimpleMapsComponent::calculateLatLongBoundingBox ( $lat, $long, $radius ); + + if (! $bounds) { + Log::debug ( "failed to calculate the bounding box!" ); + } else { + Log::debug ( "bounding box: " . var_export ( $bounds, true ) ); + } + + // use the boundaries to restrict the lookup so we aren't crushed. + // order: min_lat, min_long, max_lat, max_long. + $locationsInRange = $this->Locations->getLocationsInBox($bounds [0], $bounds [1], $bounds [2], $bounds [3]); + + // heavy! + // Log::debug('got a list of locations: ' + var_export($locationsInRange->toArray(), true)); + + $this->set ( 'locationsInRange', $locationsInRange ); + } + + /** + * View method + * + * @param string|null $id + * Location id. + * @return \Cake\Network\Response|null + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function view($id = null) { + $location = $this->Locations->get ( $id, [ + 'contain' => [ + 'Categories' + ] + ] ); + + $this->loadAssociatedCategories ( $id ); + + $this->set ( 'api_key', $this->api_key ); + + $this->set ( 'location', $location ); + $this->set ( '_serialize', [ + 'location' + ] ); + } + + /** + * Add method + * + * @return \Cake\Network\Response|null Redirects on successful add, renders view otherwise. + */ + public function add() { + $location = $this->Locations->newEntity (); + + $categoriesList = $this->Categories->find ( 'list', [ + 'keyField' => 'id', + 'valueField' => 'name' + ] ); + $this->set ( 'categoriesList', $categoriesList ); + + if ($this->request->is ( 'post' )) { + $location = $this->Locations->patchEntity ( $location, $this->request->getData () ); + + Log::debug ("patching with " . var_export($location, true) ); + + $location = $this->SimpleMaps->fillInGeoPosition ( $location, [ + 'key' => $this->api_key + ] ); + + if ($location !== false && $this->Locations->save ( $location )) { + $this->Flash->success ( __ ( 'The location has been saved.' ) ); + + return $this->redirect ( [ + 'action' => 'index' + ] ); + } + $this->Flash->error ( __ ( 'The location could not be saved. Please, try again.' ) ); + } + + $this->set ( compact ( 'location' ) ); + $this->set ( '_serialize', [ + 'location' + ] ); + } + + /** + * Edit method + * + * @param string|null $id + * Location id. + * @return \Cake\Network\Response|null Redirects on successful edit, renders view otherwise. + * @throws \Cake\Network\Exception\NotFoundException When record not found. + */ + public function edit($id = null) { + $location = $this->Locations->get ( $id, [ + 'contain' => [ + 'Categories' + ] + ] ); + + $this->loadAssociatedCategories ( $id ); + + if ($this->request->is ( [ + 'patch', + 'post', + 'put' + ] )) { + $location = $this->Locations->patchEntity ( $location, $this->request->getData () ); + + $new_location = $this->SimpleMaps->fillInGeoPosition ( $location, [ + 'key' => $this->api_key + ] ); + if ($new_location === false) { + $this->Flash->error ( __ ( 'The location could not be geocoded. Please, try again.' ) ); + } else { + $location = $new_location; + if ($this->Locations->save ( $location )) { + $this->Flash->success ( __ ( 'The location has been saved.' ) ); + return $this->redirect ( [ + 'action' => 'index' + ] ); + } + $this->Flash->error ( __ ( 'The location could not be saved. Please, try again.' ) ); + } + } + $this->set ( compact ( 'location' ) ); + $this->set ( '_serialize', [ + 'location' + ] ); + } + + /** + * Delete method + * + * @param string|null $id + * Location id. + * @return \Cake\Network\Response|null Redirects to index. + * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. + */ + public function delete($id = null) { + $this->request->allowMethod ( [ + 'post', + 'delete' + ] ); + $location = $this->Locations->get ( $id ); + if ($this->Locations->delete ( $location )) { + $this->Flash->success ( __ ( 'The location has been deleted.' ) ); + } else { + $this->Flash->error ( __ ( 'The location could not be deleted. Please, try again.' ) ); + } + + return $this->redirect ( [ + 'action' => 'index' + ] ); + } + + + // global locations list, loaded once per object creation. + private $locationsListGlobal = null; + + /** + * generates a random list of locations with a limited number of items. + */ + public function grabLocationsList() + { + if ($this->locationsListGlobal) + return $this->locationsListGlobal; + + /* + * load up a list of randomly chosen locations for the selection lists. we will keep this + * around if possible, rather than reloading per page view. + */ + $this->locationsListGlobal = $this->Locations->find ( 'list', [ + 'keyField' => 'id', + 'valueField' => 'name' + ] )->limit ( 1000 )->order ( 'rand()' )->toArray (); + + // $Log::debug('got a result array: ' . var_export($this->locationsListGlobal, true)); + + return $this->locationsListGlobal; + } + + /** + * adds an item to the location list to ensure a user will not see their previous choice disappear. + */ + public function addLocationToHeldList($id, $entry) { + $this->locationsListGlobal [$id1] = $entry; + } + + + /** + * calculate the distance between two locations in the db. + * will allow picking if one or both + * location ids are missing. + */ + public function distance($id1 = null, $id2 = null) { + // pretty kludgy approach here; don't yet know how to make the form refresh + // without reloading it, but reloading it clears the selections. so we're redirecting + // the form to itself but with the id parameters filled in. + + // process the parameters, if any were provided. + $this->set ( 'fromId', $id1 ); + $this->set ( 'toId', $id2 ); + + // load the actual location info if they specified the ids already. + if ($id1 !== null) { + $this->set ( 'fromAddress', $this->Locations->get ( $id1 ) ['location'] ); + $fromGeoCoord = $this->Locations->get ( $id1 ) ['lat'] . ',' . $this->Locations->get ( $id1 ) ['lng']; + // ensure it's in our global list also, or it won't get selected. + $this->addLocationToHeldList($id1, $this->Locations->get ( $id1 ) ['name']); + } else { + $this->set ( 'fromAddress', null ); + } + if ($id2 !== null) { + $this->set ( 'toAddress', $this->Locations->get ( $id2 ) ['location'] ); + $toGeoCoord = $this->Locations->get ( $id2 ) ['lat'] . ',' . $this->Locations->get ( $id2 ) ['lng']; + ; + // add to our global list for selection. + $this->addLocationToHeldList($id2, $this->Locations->get ( $id2 ) ['name']); + } else { + $this->set ( 'toAddress', null ); + } + + if ($id1 === null || $id2 === null) { + // set default value for distance. + $distance = 'unknown'; + } else { + // calculate distance between locations. + $distance = $this->SimpleMaps->calculateDrivingDistance ( $fromGeoCoord, $toGeoCoord, [ + 'key' => $this->api_key + ] ); + // $this->Flash->log ( 'distance calculated is ' . $distance ); + if ($distance === false) { + // failed to calculate this, so we let the user know. + $distance = "Unable to calculate a route using Google Maps Distance Matrix"; + } + } + // store in distance calculated variable. + $this->set ( 'distanceCalculated', $distance ); + + // load up the selection lists for from and to addresses. + $this->set ( 'locationsFrom', $this->grabLocationsList()); + $this->set ( 'locationsTo', $this->grabLocationsList() ); + + if ($this->request->is ( 'post' )) { + $datapack = $this->request->getData (); + + $fromId = $datapack ['from'] ['_ids']; + $this->Flash->log ( h ( 'from id is ' . $fromId ) ); + $toId = $datapack ['to'] ['_ids']; + $this->Flash->log ( h ( 'to id is ' . $toId ) ); + + $fromGeoCoord = $this->Locations->get ( $fromId ) ['lat'] . ',' . $this->Locations->get ( $fromId ) ['lng']; + + $this->Flash->log ( 'from coord is ' . $fromGeoCoord ); + $toGeoCoord = $this->Locations->get ( $toId ) ['lat'] . ',' . $this->Locations->get ( $toId ) ['lng']; + ; + $this->Flash->log ( 'to coord is ' . $toGeoCoord ); + + // how to make the form show the same data but with updated distance? + // currently kludged... + return $this->redirect ( [ + 'action' => 'distance', + $fromId, + $toId + ] ); + } + } + + /** + * finds all the locations within a given radius (in miles) from the location with 'id'. + */ + public function radius($id = null, $radius = 20) { + Log::debug ( 'into the radius method in controller...' ); + + $this->set ( 'id', $id ); + if ($id != null) { + $this->set ( 'fromAddress', $this->Locations->get ( $id ) ['location'] ); + $fromLat = $this->Locations->get ( $id ) ['lat']; + $this->set ( 'fromLat', $fromLat ); + $fromLong = $this->Locations->get ( $id ) ['lng']; + $this->set ( 'fromLong', $fromLong ); + } + + if ($this->request->is ( 'post' )) { + + $datapack = $this->request->getData (); + + // look for approximate array index. + Log::debug ( 'got datapack: ' . var_export ( $datapack, true ) ); + foreach ( $datapack as $key => $value ) { + if ("radius" == substr ( $key, 0, 6 )) { + $radius = $value; + } + } + } + + $this->set ( 'radius', $radius ); + + $this->set('dbProcessor', $this); + $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInRange, null, $radius, $fromLat . \',\'. $fromLong);'); + + $this->loadLocationsInRange ( $fromLat, $fromLong, $radius ); + } + +//hmmm: the below should be listed in an interface. + /** + * processes a location row by extracting the important information into an array. + * separates the db structure from the pieces needed for google maps. + */ + public function processRow(& $location_row) + { + return [ + 'lat' => $location_row ['lat'], + 'lng' => $location_row ['lng'], + 'title' => $location_row ['name'], + // kludge below adds extra space on content, since someone is not left justifying these. + 'content' => h ( $location_row ['location'] ) . '      ', + ]; + } + + public function extractCategoryImage(& $category) + { + return $category->image; + } + + + /** + * jumps to a particular location as the center of the map and shows locations nearby. + */ + public function jump($id) { + Log::debug ( 'into the jump method in locations controller...' ); + + $this->set ( 'id', $id ); + if ($id != null) { + $fromLat = $this->Locations->get ( $id ) ['lat']; + $this->set ( 'fromLat', $fromLat ); + $fromLong = $this->Locations->get ( $id ) ['lng']; + $this->set ( 'fromLong', $fromLong ); + } + + $locationsInRange = $this->Locations->find ( 'all', [ + 'conditions' => [ + 'id' => $id + ] + ] ); + + // we were handed a list of locations that match our query, so we can now add them as markers. + $this->set('dbProcessor', $this); + $this->set('preloader', '$this->MapDisplay->addMarkers($dbProcessor, $locationsInRange, null, 1000, $fromLat . \',\'. $fromLong);'); + + + // heavy! + // Log::debug('got a list of locations: ' + var_export($locationsInRange->toArray(), true)); + + $this->set ( 'locationsInRange', $locationsInRange ); + } + + /** + * provides restful api for looking up locations within two lat/long boundaries. + */ + public function lookupajax() { + Log::debug ( 'into lookupajax method in locations controller...' ); + + $reqData = $this->request->getData (); + + Log::Debug ( 'got to locations lookup with data: ' . var_export ( $reqData, true ) ); + + // check that this is a post method, since we don't support anything else. + if (! $this->request->is ( [ + 'post' + ] )) { + die ( 'this is a post method' ); + } + + + if (array_key_exists('action', $reqData)) { + $action = $reqData['action']; + + if (strcasecmp($action, 'lookupBox') == 0) { + $this->findLocationsWithinBounds($reqData); + } else if (strcasecmp($action, 'getInfo') == 0) { + $this->getInfoOnLocation($reqData); + } else { + die('lookupajax call was given unknown action: ' . $action); + } + + } else { + die('lookupajax call has no action specified'); + } + } + + public function findLocationsWithinBounds($reqData) + { + if (array_key_exists ( 'sw_lat', $reqData )) { + $sw_lat = $reqData ['sw_lat']; + } + if (array_key_exists ( 'sw_lng', $reqData )) { + $sw_lng = $reqData ['sw_lng']; + } + if (array_key_exists ( 'ne_lat', $reqData )) { + $ne_lat = $reqData ['ne_lat']; + } + if (array_key_exists ( 'ne_lng', $reqData )) { + $ne_lng = $reqData ['ne_lng']; + } + + if (array_key_exists ( 'radius', $reqData )) { + $radius = $reqData ['radius']; + } + + $start = null; + if (array_key_exists('start', $reqData)) { + $start = $reqData['start']; + } + $end = null; + if (array_key_exists('end', $reqData)) { + $end = $reqData['end']; + } + + // temp! fails over to using whole range. + if ($sw_lat === null) { + $sw_lat = - 90; + } + if ($sw_lng === null) { + $sw_lng = - 180; + } + if ($ne_lat === null) { + $ne_lat = 90; + } + if ($ne_lng === null) { + $ne_lng = 180; + } + + // lookup the locations inside that box and store for view. + $locationsToSerialize = $this->Locations->getChewedLocationsInBox($sw_lat, $sw_lng, $ne_lat, $ne_lng, $start, $end); + Log::debug('db found ' . sizeof($locationsToSerialize) . ' rows for query (' . $start . '-' . $end . ')'); + + // simple implementation here since cakephp v3.4 was doing weird stuff instead of returning object we chose to serialize. + // ajax method would consistently return the name of the variable and 'undefined' as the only value, rather than properly + // serializing. + $encoded = json_encode ( $locationsToSerialize ); + // Log::debug('encoded json is: ' . var_export($encoded, true)); + + die ( $encoded ); + } + + public function getInfoOnLocation($reqData) + { + if (array_key_exists('id', $reqData)) { + $id = $reqData['id']; + } else { + // throw an exception here? + $message = 'failed to find location id in request data'; + Log::Debug($message); + die($message); + } + + $location = $this->Locations->get($id, [ + ]); + return die(json_encode($location)); + } + +} diff --git a/production/example_apps/zippy_maps/src/Controller/PagesController.php b/production/example_apps/zippy_maps/src/Controller/PagesController.php new file mode 100644 index 00000000..55792c8e --- /dev/null +++ b/production/example_apps/zippy_maps/src/Controller/PagesController.php @@ -0,0 +1,69 @@ +redirect('/'); + } + if (in_array('..', $path, true) || in_array('.', $path, true)) { + throw new ForbiddenException(); + } + $page = $subpage = null; + + if (!empty($path[0])) { + $page = $path[0]; + } + if (!empty($path[1])) { + $subpage = $path[1]; + } + $this->set(compact('page', 'subpage')); + + try { + $this->render(implode('/', $path)); + } catch (MissingTemplateException $e) { + if (Configure::read('debug')) { + throw $e; + } + throw new NotFoundException(); + } + } +} diff --git a/production/example_apps/zippy_maps/src/Model/Behavior/empty b/production/example_apps/zippy_maps/src/Model/Behavior/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/src/Model/Entity/CategoriesLocation.php b/production/example_apps/zippy_maps/src/Model/Entity/CategoriesLocation.php new file mode 100644 index 00000000..f21e91d6 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Model/Entity/CategoriesLocation.php @@ -0,0 +1,34 @@ + true, + 'id' => false + ]; +} diff --git a/production/example_apps/zippy_maps/src/Model/Entity/Category.php b/production/example_apps/zippy_maps/src/Model/Entity/Category.php new file mode 100644 index 00000000..a2d97ec8 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Model/Entity/Category.php @@ -0,0 +1,31 @@ + true, + 'id' => false + ]; +} diff --git a/production/example_apps/zippy_maps/src/Model/Entity/Location.php b/production/example_apps/zippy_maps/src/Model/Entity/Location.php new file mode 100644 index 00000000..83d5bbb6 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Model/Entity/Location.php @@ -0,0 +1,33 @@ + true, + 'id' => false + ]; +} diff --git a/production/example_apps/zippy_maps/src/Model/Table/CategoriesLocationsTable.php b/production/example_apps/zippy_maps/src/Model/Table/CategoriesLocationsTable.php new file mode 100644 index 00000000..f47763c2 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Model/Table/CategoriesLocationsTable.php @@ -0,0 +1,83 @@ +setTable('categories_locations'); + $this->setDisplayField('id'); + $this->setPrimaryKey('id'); + + $this->addBehavior('Timestamp'); + + $this->belongsTo('Locations', [ + 'foreignKey' => 'location_id', + 'joinType' => 'INNER' + ]); + $this->belongsTo('Categories', [ + 'foreignKey' => 'category_id', + 'joinType' => 'INNER' + ]); + } + + /** + * Default validation rules. + * + * @param \Cake\Validation\Validator $validator Validator instance. + * @return \Cake\Validation\Validator + */ + public function validationDefault(Validator $validator) + { + $validator + ->integer('id') + ->allowEmpty('id', 'create'); + + return $validator; + } + + /** + * Returns a rules checker object that will be used for validating + * application integrity. + * + * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. + * @return \Cake\ORM\RulesChecker + */ + public function buildRules(RulesChecker $rules) + { + $rules->add($rules->existsIn(['location_id'], 'Locations')); + $rules->add($rules->existsIn(['category_id'], 'Categories')); + + return $rules; + } +} diff --git a/production/example_apps/zippy_maps/src/Model/Table/CategoriesTable.php b/production/example_apps/zippy_maps/src/Model/Table/CategoriesTable.php new file mode 100644 index 00000000..4d6af560 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Model/Table/CategoriesTable.php @@ -0,0 +1,186 @@ +setTable('categories'); + $this->setDisplayField('name'); + $this->setPrimaryKey('id'); + + $this->addBehavior('Timestamp'); + + $this->belongsToMany('Locations', + [ + 'targetForeignKey' => 'location_id', + 'foreignKey' => 'category_id', + 'joinTable' => 'categories_locations', + 'through' => 'CategoriesLocations', + ]); + + } + + /** + * Default validation rules. + * + * @param \Cake\Validation\Validator $validator Validator instance. + * @return \Cake\Validation\Validator + */ + public function validationDefault(Validator $validator) + { + $validator + ->integer('id') + ->allowEmpty('id', 'create'); + + $validator + ->requirePresence('name', 'create') + ->notEmpty('name') + ->add('name', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); + + $validator + ->integer('parent') + ->allowEmpty('parent'); + + return $validator; + } + + /** + * Returns a rules checker object that will be used for validating + * application integrity. + * + * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. + * @return \Cake\ORM\RulesChecker + */ + public function buildRules(RulesChecker $rules) + { + $rules->add($rules->isUnique(['name'])); + + return $rules; + } + + /** + * returns a query that will find all the categories as a list. + */ + public function getAllCategories() { + // find the full list of categories to show the user. + $categoriesList = $this->find ( 'list', [ + 'keyField' => 'id', + 'valueField' => 'name', + 'order' => [ + 'name' => 'asc' + ] + ] ); + return $categoriesList; + } + + /** + * returns a query that will locate all of the locations in the specified category with 'id'. + */ + public function getLocationsInCategory($id) + { + // query all the locations belonging to this category. + $locationsInCategory = $this->CategoriesLocations->find('all', [ + 'conditions' => [ 'category_id' => $id ], + 'contain' => ['Locations'] + ]); + return $locationsInCategory; + } + + /** + * returns a query that finds all locations in the category that fit within the southwest and northeast + * corners specified. + */ + public function getLocationsInCategoryInBox($id, $sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null) + { + // query all the locations belonging to this category. + $locationsInCategory = $this->CategoriesLocations->find('all', [ + 'conditions' => [ 'category_id' => $id ], + 'contain' => ['Locations', 'Categories'] + ]); + + Log::Debug('bounds=' . $sw_lat . ', '. $sw_long . ' to ' . $ne_lat . ', ' . $ne_long); + + $bounds = [ $sw_lat , $sw_long , $ne_lat , $ne_long ]; + + if (! $bounds) { + Log::Debug("failed to calculate the bounding box!"); + } else { + Log::Debug("bounding box: " . var_export($bounds, true)); + } + + // use the boundaries to restrict the lookup. + // order: min_lat, min_long, max_lat, max_long. + $locationsInCategory = $locationsInCategory->where ( + function ($exp) use ($bounds) { + return $exp->gte ( 'lat', $bounds [0] )->gte ( 'lng', $bounds [1] )->lte ( 'lat', $bounds [2] )->lte ( 'lng', $bounds [3] ); + } + ); + + if (($start !== null) && ($end !== null)) { + Log::debug('start of range = ' . $start . ' and end = ' . $end); + $locationsInCategory= $locationsInCategory->order(['lat desc', 'lng desc']); + $chunk = $end - $start + 1; + $locationsInCategory= $locationsInCategory->limit($chunk); + $page = 1 + (int)($start / $chunk); + $locationsInCategory= $locationsInCategory->page($page); + Log::debug('page = ' . $page . ' and chunk = ' . $chunk); + } + + return $locationsInCategory; + } + + public function getChewedLocationsInCategoryInBox($id, $sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null) + { + $locationsInCategory = $this->getLocationsInCategoryInBox($id, $sw_lat, $sw_long, $ne_lat, $ne_long, $start, $end); + + $locationsToSerialize = []; + + // make an array with the useful parts of the location data. + foreach ($locationsInCategory as $location) { + $lat_and_long = $location->location->lat. ',' . $location->location->lng; + if (array_key_exists ( $lat_and_long, $locationsToSerialize)) { + continue; // already got it. + } + +//Log::debug('got an icon value of: ' . $location->category->image); + + // we don't include lat and lng below since they are encoded as array key. + $locationsToSerialize[$lat_and_long] = ['name' => $location->location->name, + 'loc' => $location->location->location, + 'icon' => $location->category->image, + 'id' => $location->location_id, + ]; + } + + return $locationsToSerialize; + } +} diff --git a/production/example_apps/zippy_maps/src/Model/Table/LocationsTable.php b/production/example_apps/zippy_maps/src/Model/Table/LocationsTable.php new file mode 100644 index 00000000..57d43f73 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Model/Table/LocationsTable.php @@ -0,0 +1,191 @@ +setTable('locations'); + $this->setDisplayField('name'); + $this->setPrimaryKey('id'); + + $this->addBehavior('Timestamp'); + + $this->belongsToMany('Categories', + [ + 'targetForeignKey' => 'category_id', + 'foreignKey' => 'location_id', + 'joinTable' => 'categories_locations', + 'through' => 'CategoriesLocations', + ]); + + + } + + /** + * Default validation rules. + * + * @param \Cake\Validation\Validator $validator Validator instance. + * @return \Cake\Validation\Validator + */ + public function validationDefault(Validator $validator) + { + $validator + ->integer('id') + ->allowEmpty('id', 'create'); + + $validator + ->requirePresence('name', 'create') + ->notEmpty('name') + ->add('name', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); + + $validator->requirePresence ( 'location', 'create' )->notEmpty ( 'location' ); + + $validator + ->allowEmpty('lat'); + $validator + ->allowEmpty('lng'); + + return $validator; + } + + /** + * Returns a rules checker object that will be used for validating + * application integrity. + * + * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. + * @return \Cake\ORM\RulesChecker + */ + public function buildRules(RulesChecker $rules) + { + $rules->add($rules->isUnique(['name'])); + + return $rules; + } + + + /** + * returns a query that will find the category records associated with a location 'id' + * as a list. + */ + public function getSelectedCategories($id) + { + // find the categories that are chosen for this item, if any. + $selectedCategories = $this->CategoriesLocations->find ( 'list', [ + 'keyField' => 'category_id', + 'valueField' => 'location_id', + 'conditions' => [ + 'location_id' => $id + ], + 'contain' => [ + 'Categories' + ] + ] ); + return $selectedCategories; + } + + /** + * returns a query that will find all of the locations within the bounding box. + */ + public function getLocationsInBox($sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null) { + $locationsInRange = $this->find ( 'all', [ + 'contain' => ['Categories'], + ] ); + + Log::Debug ( 'bounds=' . $sw_lat . ', ' . $sw_long . ' to ' . $ne_lat . ', ' . $ne_long ); + + $bounds = [ + $sw_lat, + $sw_long, + $ne_lat, + $ne_long + ]; + + if (! $bounds) { + Log::Debug ( "failed to calculate the bounding box!" ); + } else { + Log::Debug ( "bounding box: " . var_export ( $bounds, true ) ); + } + + // use the boundaries to restrict the lookup so we aren't crushed. + // order: min_lat, min_long, max_lat, max_long. + $locationsInRange = $locationsInRange->where ( function ($exp) use ($bounds) { + return $exp->gte ( 'lat', $bounds [0] )->gte ( 'lng', $bounds [1] )->lte ( 'lat', $bounds [2] )->lte ( 'lng', $bounds [3] ); + } ); + + if (($start !== null) && ($end !== null)) { + Log::debug('start of range = ' . $start . ' and end = ' . $end); + $locationsInRange = $locationsInRange->order(['lat desc', 'lng desc']); + $chunk = $end - $start + 1; + $locationsInRange = $locationsInRange->limit($chunk); + $page = 1 + (int)($start / $chunk); + $locationsInRange = $locationsInRange->page($page); + Log::debug('page = ' . $page . ' and chunk = ' . $chunk); + } + + return $locationsInRange; + } + + /** + * retrieves all of the locations within the bounding box as a list of partial location data. + */ + public function getChewedLocationsInBox($sw_lat, $sw_long, $ne_lat, $ne_long, $start = null, $end = null) { + $locationsInRange = $this->getLocationsInBox($sw_lat, $sw_long, $ne_lat, $ne_long, $start, $end); + + // track locations we've already added and do not add ones at exactly the same lat/long. + // if we did add these, google maps screws up in representing them. + $locationsToSerialize = [ ]; + + foreach ( $locationsInRange as $location ) { + $lat_and_long = $location->lat . ',' . $location->lng; + if (array_key_exists ( $lat_and_long, $locationsToSerialize )) { + continue; // already got it. + } + +// Log::debug('dumping location row: ' . var_export($location, true)); + + // we don't include lat and lng below since they are encoded as array key. + $locationsToSerialize [$lat_and_long] = [ + 'name' => $location->name, + 'loc' => $location->location, + 'id' => $location->id + ]; + + // only try to add the image if the location actually has a category membership (at least one). + if ($location->categories) { + $locationsToSerialize [$lat_and_long]['icon'] = $location->categories[0]->image; + } + } + + return $locationsToSerialize; + } + +} diff --git a/production/example_apps/zippy_maps/src/Shell/ConsoleShell.php b/production/example_apps/zippy_maps/src/Shell/ConsoleShell.php new file mode 100644 index 00000000..c84bd97a --- /dev/null +++ b/production/example_apps/zippy_maps/src/Shell/ConsoleShell.php @@ -0,0 +1,81 @@ +err('Unable to load Psy\Shell.'); + $this->err(''); + $this->err('Make sure you have installed psysh as a dependency,'); + $this->err('and that Psy\Shell is registered in your autoloader.'); + $this->err(''); + $this->err('If you are using composer run'); + $this->err(''); + $this->err('$ php composer.phar require --dev psy/psysh'); + $this->err(''); + + return self::CODE_ERROR; + } + + $this->out("You can exit with `CTRL-C` or `exit`"); + $this->out(''); + + Log::drop('debug'); + Log::drop('error'); + $this->_io->setLoggers(false); + restore_error_handler(); + restore_exception_handler(); + + $psy = new PsyShell(); + $psy->run(); + } + + /** + * Display help for this console. + * + * @return \Cake\Console\ConsoleOptionParser + */ + public function getOptionParser() + { + $parser = new ConsoleOptionParser('console'); + $parser->setDescription( + 'This shell provides a REPL that you can use to interact ' . + 'with your application in an interactive fashion. You can use ' . + 'it to run adhoc queries with your models, or experiment ' . + 'and explore the features of CakePHP and your application.' . + "\n\n" . + 'You will need to have psysh installed for this Shell to work.' + ); + + return $parser; + } +} diff --git a/production/example_apps/zippy_maps/src/Template/Categories/add.ctp b/production/example_apps/zippy_maps/src/Template/Categories/add.ctp new file mode 100644 index 00000000..3aaada7a --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Categories/add.ctp @@ -0,0 +1,27 @@ + + +
+ Form->create($category) ?> +
+ + Form->control('name'); + echo $this->Form->control('image'); + ?> +
+ Form->button(__('Submit')) ?> + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/center.ctp b/production/example_apps/zippy_maps/src/Template/Categories/center.ctp new file mode 100644 index 00000000..ede0b27f --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Categories/center.ctp @@ -0,0 +1,133 @@ + + +
+

name) ?>

+ + + + + + + + + + + + + + + +
name) ?>
+log("state is: " . $state); + + // kludgey attempt to focus a little better, based on state size. + $small_state = false; + $medium_state = false; + // is the state small? + $small_state = ($state == 'DE' || $state == 'RI' || $state == 'NH'); +// $this->log('small_state=' . var_export($small_state, true)); + // if not small, we assume medium until told otherwise. + if (! $small_state) $medium_state = true; +// $this->log('medium_state=' . var_export($medium_state, true)); + // if certain known fat states, then not medium sized. + if ($state == 'TX' || $state == 'CA' || $state == 'AK') $medium_state = false; + $zoomFactor = $small_state? 8 : ( $medium_state? 7 : 5 ); + $this->log('zooming at ' . $zoomFactor); + //question: how to pick a more useful zoom factor? maybe record in db a starting zoom factor per state? + + // list options we want to override or add for the map. + $map_options = [ + // automatically encompass markers and auto-center if they haven't told us where to start. + 'autoCenter' => ($mapCenter === null)? true : false, + 'clustering' => $clustering, + 'zoom' => $zoomFactor, + ]; + + // start at a specified center if one is given. + if ($mapCenter) { + $map_options = array_merge($map_options, $mapCenter); + } + + //$this->log('new options set: ' . var_export($map_options, true)); + + + // provide the element with all the info it needs to set up the map. + $element_options = + [ + 'map_options' => $map_options, + 'map_colors' => 'avmaps/js/sg2_map_colors.js', + 'the_map' => $this->GoogleMap, + // no options to pass to ajax so far... + 'ajax_options' => '{ + }', + 'default_options' => '{ + json_provider: "/categories.json", + iconColor: "' . $this->MapDisplay->defaultIconColor() . '", + }', + ]; + + echo $this->element('Avmaps.google_map', $element_options); + + /* + // create the basic map framework using google maps api. + $this->MapDisplay->setupMap ( $map_options, $this->GoogleMap ); + + // plug in our chosen color scheme for land, roads, etc. + $this->MapDisplay->applyColors ( 'avmaps/js/sg2_map_colors.js' ); + + // after the intial configuration items are done, we can emit the map code. + // we can still add markers after this point, and do so below. + $this->MapDisplay->emitMap ( false ); + + // we were handed a list of locations that match our query, so we can now add them as markers. + $this->MapDisplay->addMarkersInCategory ( $locationsInCategory, $category ); + + // set up our event handler for this view. +// $this->MapDisplay->injectJSFile('avmaps/js/event_trappers.js'); + + // now we think we are ready to go. let's get the map displayed. + $this->MapDisplay->finallyDisplayMap (); + */ + + // end of dynamic map preparation. +?> +
+ Form->create($category) ?> + Form->control ( 'view_options._ids', [ + 'type' => 'select', + 'multiple' => true, + 'val' => $selectedList, + 'options' => [ + 'clustering' => 'clustering' + ] + ] ); + ?> + + Form->button(__('Modify View')) ?> + Form->end() ?> + +
+
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/edit.ctp b/production/example_apps/zippy_maps/src/Template/Categories/edit.ctp new file mode 100644 index 00000000..9161c952 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Categories/edit.ctp @@ -0,0 +1,32 @@ + + +
+ Form->create($category) ?> +
+ + Form->control('name'); + echo $this->Form->control('image'); + ?> +
+ Form->button(__('Submit')) ?> + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/index.ctp b/production/example_apps/zippy_maps/src/Template/Categories/index.ctp new file mode 100644 index 00000000..1a0381b0 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Categories/index.ctp @@ -0,0 +1,56 @@ + + +
+

+ + + + + + + + + + + + + + + + + + + + + + + +
Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('image') ?>Paginator->sort('created') ?>Paginator->sort('modified') ?>
Number->format($category->id) ?>name) ?>image) ?>created) ?>modified) ?> + Html->link(__('Map'), ['action' => 'map', $category->id]) ?> + Html->link(__('Center'), ['action' => 'center', $category->id]) ?> + Html->link(__('View'), ['action' => 'view', $category->id]) ?> + Html->link(__('Edit'), ['action' => 'edit', $category->id]) ?> + Form->postLink(__('Delete'), ['action' => 'delete', $category->id], ['confirm' => __('Are you sure you want to delete # {0}?', $category->id)]) ?> +
+
+
    + Paginator->first('<< ' . __('first')) ?> + Paginator->prev('< ' . __('previous')) ?> + Paginator->numbers() ?> + Paginator->next(__('next') . ' >') ?> + Paginator->last(__('last') . ' >>') ?> +
+

Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

+
+
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/map.ctp b/production/example_apps/zippy_maps/src/Template/Categories/map.ctp new file mode 100644 index 00000000..03a3cc53 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Categories/map.ctp @@ -0,0 +1,85 @@ + + +
+

name) ?>

+ + + + + + + + + + + + + + + +
name) ?>
+ true, // automatically encompass markers. + 'clustering' => $clustering, + ]; + + // provide the element with all the info it needs to set up the map. + $element_options = [ + 'map_options' => $map_options, + 'map_colors' => 'avmaps/js/sg2_map_colors.js', + 'the_map' => $this->GoogleMap, + // we want to include the category ID when making ajax calls. + 'ajax_options' => '{ category: "' . $category->id . '"}', + 'default_options' => '{ + iconColor: "' . $this->MapDisplay->defaultIconColor() . '", + json_provider: "/categories.json", + }', + ]; + + echo $this->element('Avmaps.google_map', $element_options); + + // end of dynamic map preparation. + +?> +
+ Form->create($category) ?> + Form->control ( 'view_options._ids', [ + 'type' => 'select', + 'multiple' => true, + 'val' => $selectedList, + 'options' => [ + 'clustering' => 'clustering' + ] + ] ); + ?> + + Form->button(__('Modify View')) ?> + Form->end() ?> + +
+
diff --git a/production/example_apps/zippy_maps/src/Template/Categories/view.ctp b/production/example_apps/zippy_maps/src/Template/Categories/view.ctp new file mode 100644 index 00000000..8eec91d5 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Categories/view.ctp @@ -0,0 +1,56 @@ + + +
+

name) ?>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
name) ?>
Number->format($category->id) ?>
image) ?>
created) ?>
modified) ?>
+ Form->control('locations._ids', [ + 'type' => 'select', + 'multiple' => true, + 'disabled' => true, + 'options' => $locationBits, + ]); + ?> +
+
diff --git a/production/example_apps/zippy_maps/src/Template/Element/Flash/default.ctp b/production/example_apps/zippy_maps/src/Template/Element/Flash/default.ctp new file mode 100644 index 00000000..736b27db --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Element/Flash/default.ctp @@ -0,0 +1,10 @@ + +
diff --git a/production/example_apps/zippy_maps/src/Template/Element/Flash/error.ctp b/production/example_apps/zippy_maps/src/Template/Element/Flash/error.ctp new file mode 100644 index 00000000..e7c4af10 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Element/Flash/error.ctp @@ -0,0 +1,6 @@ + +
diff --git a/production/example_apps/zippy_maps/src/Template/Element/Flash/success.ctp b/production/example_apps/zippy_maps/src/Template/Element/Flash/success.ctp new file mode 100644 index 00000000..becd5a1f --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Element/Flash/success.ctp @@ -0,0 +1,6 @@ + +
diff --git a/production/example_apps/zippy_maps/src/Template/Email/html/default.ctp b/production/example_apps/zippy_maps/src/Template/Email/html/default.ctp new file mode 100644 index 00000000..386674a1 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Email/html/default.ctp @@ -0,0 +1,22 @@ + + ' . $line . "

\n"; +endforeach; +?> diff --git a/production/example_apps/zippy_maps/src/Template/Email/text/default.ctp b/production/example_apps/zippy_maps/src/Template/Email/text/default.ctp new file mode 100644 index 00000000..704b46f0 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Email/text/default.ctp @@ -0,0 +1,16 @@ + + diff --git a/production/example_apps/zippy_maps/src/Template/Error/error400.ctp b/production/example_apps/zippy_maps/src/Template/Error/error400.ctp new file mode 100644 index 00000000..2aebac6c --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Error/error400.ctp @@ -0,0 +1,38 @@ +layout = 'error'; + +if (Configure::read('debug')): + $this->layout = 'dev_error'; + + $this->assign('title', $message); + $this->assign('templateName', 'error400.ctp'); + + $this->start('file'); +?> +queryString)) : ?> +

+ SQL Query: + queryString) ?> +

+ +params)) : ?> + SQL Query Params: + params) ?> + +element('auto_table_warning') ?> +end(); +endif; +?> +

+

+ : + '{$url}'") ?> +

diff --git a/production/example_apps/zippy_maps/src/Template/Error/error500.ctp b/production/example_apps/zippy_maps/src/Template/Error/error500.ctp new file mode 100644 index 00000000..d8014f84 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Error/error500.ctp @@ -0,0 +1,43 @@ +layout = 'error'; + +if (Configure::read('debug')): + $this->layout = 'dev_error'; + + $this->assign('title', $message); + $this->assign('templateName', 'error500.ctp'); + + $this->start('file'); +?> +queryString)) : ?> +

+ SQL Query: + queryString) ?> +

+ +params)) : ?> + SQL Query Params: + params) ?> + + + Error in: + getFile()), $error->getLine()) ?> + +element('auto_table_warning'); + + if (extension_loaded('xdebug')): + xdebug_print_function_stack(); + endif; + + $this->end(); +endif; +?> +

+

+ : + +

diff --git a/production/example_apps/zippy_maps/src/Template/Layout/Email/html/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/Email/html/default.ctp new file mode 100644 index 00000000..2b439700 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Layout/Email/html/default.ctp @@ -0,0 +1,24 @@ + + + + + <?= $this->fetch('title') ?> + + + fetch('content') ?> + + diff --git a/production/example_apps/zippy_maps/src/Template/Layout/Email/text/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/Email/text/default.ctp new file mode 100644 index 00000000..871dcfb4 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Layout/Email/text/default.ctp @@ -0,0 +1,16 @@ + +fetch('content') ?> diff --git a/production/example_apps/zippy_maps/src/Template/Layout/ajax.ctp b/production/example_apps/zippy_maps/src/Template/Layout/ajax.ctp new file mode 100644 index 00000000..871dcfb4 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Layout/ajax.ctp @@ -0,0 +1,16 @@ + +fetch('content') ?> diff --git a/production/example_apps/zippy_maps/src/Template/Layout/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/default.ctp new file mode 100644 index 00000000..24a4dd0b --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Layout/default.ctp @@ -0,0 +1,66 @@ + + + + + Html->charset() ?> + + + <?= $pageDescription ?>: + <?= $this->fetch('title') ?> + + Html->meta('icon') ?> + + Html->css('base.css') ?> + Html->css('cake.css') ?> + + fetch('meta') ?> + fetch('css') ?> + + + + + + + + fetch('script') ?> + + + + + Flash->render() ?> +
+ fetch('content') ?> +
+
+
+ + diff --git a/production/example_apps/zippy_maps/src/Template/Layout/error.ctp b/production/example_apps/zippy_maps/src/Template/Layout/error.ctp new file mode 100644 index 00000000..5304ec43 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Layout/error.ctp @@ -0,0 +1,47 @@ + + + + + Html->charset() ?> + + <?= $this->fetch('title') ?> + + Html->meta('icon') ?> + + Html->css('base.css') ?> + Html->css('cake.css') ?> + + fetch('meta') ?> + fetch('css') ?> + fetch('script') ?> + + +
+ +
+ Flash->render() ?> + + fetch('content') ?> +
+ +
+ + diff --git a/production/example_apps/zippy_maps/src/Template/Layout/rss/default.ctp b/production/example_apps/zippy_maps/src/Template/Layout/rss/default.ctp new file mode 100644 index 00000000..5c15a198 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Layout/rss/default.ctp @@ -0,0 +1,14 @@ +fetch('title'); +endif; + +echo $this->Rss->document( + $this->Rss->channel( + [], $channel, $this->fetch('content') + ) +); +?> diff --git a/production/example_apps/zippy_maps/src/Template/Locations/add.ctp b/production/example_apps/zippy_maps/src/Template/Locations/add.ctp new file mode 100644 index 00000000..e50d32c7 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/add.ctp @@ -0,0 +1,30 @@ + + +
+ Form->create($location) ?> +
+ + Form->control('name'); + echo $this->Form->control('location'); + + echo $this->Form->control('categories._ids', [ + 'type' => 'select', + 'multiple' => true, + 'options' => $categoriesList, + ]); + + ?> +
+ Form->button(__('Submit')) ?> + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/distance.ctp b/production/example_apps/zippy_maps/src/Template/Locations/distance.ctp new file mode 100644 index 00000000..76f7b125 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/distance.ctp @@ -0,0 +1,58 @@ + + +
+ Form->create('DistanceCalculator') ?> +
+ + Form->control('from._ids', [ + 'type' => 'select', + 'options' => $locationsFrom, + 'value' => $fromId, + ]); + + if ($fromAddress !== null) { + echo $this->Form->control('from-address', [ + 'type' => 'textarea', + 'rows' => 1, + 'default' => $fromAddress, + 'disabled' => 'disabled' + ]); + } + + echo $this->Form->control('to._ids', [ + 'type' => 'select', + 'options' => $locationsTo, + 'value' => $toId, + ]); + + if ($toAddress !== null) { + echo $this->Form->control('to-address', [ + 'type' => 'textarea', + 'rows' => 1, + 'default' => $toAddress, + 'disabled' => 'disabled' + ]); + } + + echo $this->Form->control('distance', [ + 'type' => 'textarea', + 'rows' => 1, + 'default' => $distanceCalculated, + 'disabled' => 'disabled' + ]); + + ?> +
+ Form->button(__('Calculate')) ?> + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/edit.ctp b/production/example_apps/zippy_maps/src/Template/Locations/edit.ctp new file mode 100644 index 00000000..2a1e2580 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/edit.ctp @@ -0,0 +1,37 @@ + + +
+ Form->create($location) ?> +
+ + Form->control('name'); + echo $this->Form->control('location'); + + echo $this->Form->control('categories._ids', [ + 'type' => 'select', + 'multiple' => true, + 'val' => $selectedList, + 'options' => $categoriesList, + ]); + + ?> +
+ Form->button(__('Submit')) ?> + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/index.ctp b/production/example_apps/zippy_maps/src/Template/Locations/index.ctp new file mode 100644 index 00000000..ac967333 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/index.ctp @@ -0,0 +1,55 @@ + + +
+

+ + + + + + + + + + + + + + + + + + + + + + + +
Paginator->sort('id') ?>Paginator->sort('name') ?>Paginator->sort('location') ?>Paginator->sort('lat') ?>Paginator->sort('lng') ?>
Number->format($location->id) ?>name) ?>location) ?>lat) ?>lng) ?> + Html->link(__('Jump'), ['action' => 'jump', $location->id]) ?> + Html->link(__('Radius'), ['action' => 'radius', $location->id]) ?> + Html->link(__('View'), ['action' => 'view', $location->id]) ?> + Html->link(__('Edit'), ['action' => 'edit', $location->id]) ?> + Form->postLink(__('Delete'), ['action' => 'delete', $location->id], ['confirm' => __('Are you sure you want to delete # {0}?', $location->id)]) ?> +
+
+
    + Paginator->first('<< ' . __('first')) ?> + Paginator->prev('< ' . __('previous')) ?> + Paginator->numbers() ?> + Paginator->next(__('next') . ' >') ?> + Paginator->last(__('last') . ' >>') ?> +
+

Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>

+
+
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/jump.ctp b/production/example_apps/zippy_maps/src/Template/Locations/jump.ctp new file mode 100644 index 00000000..a4631bdc --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/jump.ctp @@ -0,0 +1,53 @@ + + +
+ Form->create('Jump') ?> +
+ + true, // automatically encompass markers. + 'clustering' => true, // cluster the markers. + 'zoom' => 12, // zoom in pretty far but not as a microscope. + 'lat' => $fromLat, + 'lng' => $fromLong, + ]; + + // provide the element with all the info it needs to set up the map. + $element_options = + [ + 'map_options' => $map_options, + 'map_colors' => 'avmaps/js/sg2_map_colors.js', + 'the_map' => $this->GoogleMap, + // no options to pass to ajax so far... + 'ajax_options' => '{ + }', + 'default_options' => '{ + iconColor: "' . $this->MapDisplay->defaultIconColor() . '", + json_provider: "/locations.json", + }', + ]; + + echo $this->element('Avmaps.google_map', $element_options); + } + ?> +
+ + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/radius.ctp b/production/example_apps/zippy_maps/src/Template/Locations/radius.ctp new file mode 100644 index 00000000..11b483e4 --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/radius.ctp @@ -0,0 +1,56 @@ + + +
+ Form->create('RadiusFinder') ?> +
+ + Form->control ( 'from-address', [ + 'type' => 'textarea', + 'rows' => 1, + 'default' => $fromAddress, + 'disabled' => 'disabled' + ] ); + + echo $this->Form->control ( 'radius (in miles)' , ['default' => $radius]); + + // list options we want to override or add for the map. + $map_options = [ + 'autoCenter' => true, // automatically encompass markers. + 'clustering' => true, // cluster the markers. + ]; + + // provide the element with all the info it needs to set up the map. + $element_options = + [ + 'map_options' => $map_options, + 'map_colors' => 'avmaps/js/sg2_map_colors.js', + 'the_map' => $this->GoogleMap, + // no options to pass to ajax so far... + 'ajax_options' => '{ + }', + // not passing json provider, since we are doing a special radius thing here. so no updates. + 'default_options' => '{ + iconColor: "' . $this->MapDisplay->defaultIconColor() . '", + }', + ]; + + echo $this->element('Avmaps.google_map', $element_options); + } + ?> +
+ Form->button(__('Calculate')) ?> + Form->end() ?> +
diff --git a/production/example_apps/zippy_maps/src/Template/Locations/view.ctp b/production/example_apps/zippy_maps/src/Template/Locations/view.ctp new file mode 100644 index 00000000..855df52f --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Locations/view.ctp @@ -0,0 +1,97 @@ + + +
+

name) ?>

+ + + + + + + + + + + + + + + + + + + + + + + + +
name) ?>
location) ?> + $location->lat + . ',' . $location->lng + ], + ]; + + $marker_options = [ + 'color' => $this->MapDisplay->defaultIconColor(), + 'shadow' => 'false' + ]; + + $markers = $this->GoogleMap->staticMarkers($addresses, $marker_options); + + $map_options = [ + 'center' => $location->lat + . ',' . $location->lng, + 'markers' => $markers, + 'zoom' => 8, + ]; + + $map = $this->GoogleMap->staticMap($map_options); + + echo $map; + + $this->GoogleMap->finalize(); + + //end static map junk. + ?> + +
lat . ',' . $location->lng) ?>
+ lat, $location->lng, [ + 'key' => $api_key + ]); + if ($results) { + echo h($results[0]); + } else { + echo h('failed to reverse geocode'); + } + + ?> +
+ Form->control('categories._ids', [ + 'type' => 'select', + 'multiple' => true, + 'val' => $selectedList, + 'options' => $categoriesList, + ]); + ?> +
+
diff --git a/production/example_apps/zippy_maps/src/Template/Pages/home.ctp b/production/example_apps/zippy_maps/src/Template/Pages/home.ctp new file mode 100644 index 00000000..b495ee8a --- /dev/null +++ b/production/example_apps/zippy_maps/src/Template/Pages/home.ctp @@ -0,0 +1,290 @@ +layout = false; + +if (!Configure::read('debug')): + throw new NotFoundException('Please replace src/Template/Pages/home.ctp with your own version.'); +endif; + +$cakeDescription = 'Maps Demo - showing what we can do to google maps'; +?> + + + + Html->charset() ?> + + + <?= $cakeDescription ?> + + + Html->meta('icon') ?> + Html->css('base.css') ?> + Html->css('cake.css') ?> + Html->css('home.css') ?> + + + + +
+
Html->image('/img/charlottesville_minimap.png') ?>
+
+

Maps are not the territory.

+
+
+ +
+ +
+ +
+
+
+

Based on CakePHP Red Velvet.

+
+
+

Please be aware that this page will not be shown if you turn off debug mode unless you replace src/Template/Pages/home.ctp with your own version.

+
+
+ +
+ +
+
+ +
+
+

Environment

+
    + =')): ?> +
  • Your version of PHP is 5.6.0 or higher (detected ).
  • + +
  • Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected ).
  • + + + +
  • Your version of PHP has the mbstring extension loaded.
  • + +
  • Your version of PHP does NOT have the mbstring extension loaded.
  • ; + + + +
  • Your version of PHP has the openssl extension loaded.
  • + +
  • Your version of PHP has the mcrypt extension loaded.
  • + +
  • Your version of PHP does NOT have the openssl or mcrypt extension loaded.
  • + + + +
  • Your version of PHP has the intl extension loaded.
  • + +
  • Your version of PHP does NOT have the intl extension loaded.
  • + +
+
+
+

Filesystem

+
    + +
  • Your tmp directory is writable.
  • + +
  • Your tmp directory is NOT writable.
  • + + + +
  • Your logs directory is writable.
  • + +
  • Your logs directory is NOT writable.
  • + + + + +
  • The Engine is being used for core caching. To change the config edit config/app.php
  • + +
  • Your cache is NOT working. Please check the settings in config/app.php
  • + +
+
+
+
+ +
+
+

Database

+ connect(); + } catch (Exception $connectionError) { + $connected = false; + $errorMsg = $connectionError->getMessage(); + if (method_exists($connectionError, 'getAttributes')): + $attributes = $connectionError->getAttributes(); + if (isset($errorMsg['message'])): + $errorMsg .= '
' . $attributes['message']; + endif; + endif; + } + ?> +
    + +
  • CakePHP is able to connect to the database.
  • + +
  • CakePHP is NOT able to connect to the database.
  • + +
+
+
+

DebugKit

+
    + +
  • DebugKit is loaded.
  • + +
  • DebugKit is NOT loaded. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
  • + +
+
+
+
+ +
+
+

Editing this Page

+
    +
  • To change the content of this page, edit: src/Template/Pages/home.ctp.
  • +
  • You can also add some CSS styles for your pages at: webroot/css/.
  • +
+
+ +
+ +
+
+

More about Cake

+

+ CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Front Controller and MVC.
+ Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility. +

+
+
+
+ +
+
+ P +

Help and Bug Reports

+ +
+
+ r +

Docs and Downloads

+ +
+
+ s +

Training and Certification

+ +
+
+ + + diff --git a/production/example_apps/zippy_maps/src/View/AjaxView.php b/production/example_apps/zippy_maps/src/View/AjaxView.php new file mode 100644 index 00000000..594e2d80 --- /dev/null +++ b/production/example_apps/zippy_maps/src/View/AjaxView.php @@ -0,0 +1,49 @@ +response->type('ajax'); + } +} diff --git a/production/example_apps/zippy_maps/src/View/AppView.php b/production/example_apps/zippy_maps/src/View/AppView.php new file mode 100644 index 00000000..afbb42ee --- /dev/null +++ b/production/example_apps/zippy_maps/src/View/AppView.php @@ -0,0 +1,48 @@ +loadHelper('Html');` + * + * @return void + */ + public function initialize() + { + // code added to load mapping view helper. + $config = [ + 'autoScript' => true, + 'className' => 'Avmaps.ClusteringMap' + ]; + $this->loadHelper('Geo.GoogleMap', $config); + + $this->loadHelper('Avmaps.MapDisplay'); + } +} diff --git a/production/example_apps/zippy_maps/src/View/Helper/empty b/production/example_apps/zippy_maps/src/View/Helper/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/tests/Fixture/CategoriesFixture.php b/production/example_apps/zippy_maps/tests/Fixture/CategoriesFixture.php new file mode 100644 index 00000000..75021793 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/Fixture/CategoriesFixture.php @@ -0,0 +1,50 @@ + ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], + 'name' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], + 'parent' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], + 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + '_constraints' => [ + 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], + 'name' => ['type' => 'unique', 'columns' => ['name'], 'length' => []], + ], + '_options' => [ + 'engine' => 'InnoDB', + 'collation' => 'utf8_general_ci' + ], + ]; + // @codingStandardsIgnoreEnd + + /** + * Records + * + * @var array + */ + public $records = [ + [ + 'id' => 1, + 'name' => 'Lorem ipsum dolor sit amet', + 'parent' => 1, + 'created' => '2017-04-26 14:08:10', + 'modified' => '2017-04-26 14:08:10' + ], + ]; +} diff --git a/production/example_apps/zippy_maps/tests/Fixture/CategoriesLocationsFixture.php b/production/example_apps/zippy_maps/tests/Fixture/CategoriesLocationsFixture.php new file mode 100644 index 00000000..6c515f25 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/Fixture/CategoriesLocationsFixture.php @@ -0,0 +1,55 @@ + ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], + 'location_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], + 'category_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], + 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + '_indexes' => [ + 'location_id' => ['type' => 'index', 'columns' => ['location_id'], 'length' => []], + 'category_id' => ['type' => 'index', 'columns' => ['category_id'], 'length' => []], + ], + '_constraints' => [ + 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], + 'categories_locations_ibfk_1' => ['type' => 'foreign', 'columns' => ['location_id'], 'references' => ['locations', 'id'], 'update' => 'restrict', 'delete' => 'restrict', 'length' => []], + 'categories_locations_ibfk_2' => ['type' => 'foreign', 'columns' => ['category_id'], 'references' => ['categories', 'id'], 'update' => 'restrict', 'delete' => 'restrict', 'length' => []], + ], + '_options' => [ + 'engine' => 'InnoDB', + 'collation' => 'utf8_general_ci' + ], + ]; + // @codingStandardsIgnoreEnd + + /** + * Records + * + * @var array + */ + public $records = [ + [ + 'id' => 1, + 'location_id' => 1, + 'category_id' => 1, + 'created' => '2017-05-01 18:36:01', + 'modified' => '2017-05-01 18:36:01' + ], + ]; +} diff --git a/production/example_apps/zippy_maps/tests/Fixture/LocationsFixture.php b/production/example_apps/zippy_maps/tests/Fixture/LocationsFixture.php new file mode 100644 index 00000000..fe44867a --- /dev/null +++ b/production/example_apps/zippy_maps/tests/Fixture/LocationsFixture.php @@ -0,0 +1,57 @@ + ['type' => 'integer', 'length' => 11, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null], + 'name' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], + 'location' => ['type' => 'string', 'length' => 1024, 'null' => false, 'default' => null, 'collate' => 'utf8_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null], + 'lat' => ['type' => 'float', 'null' => true, 'default' => null, ], + 'lng' => ['type' => 'float', 'null' => true, 'default' => null, ], + 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null], + '_indexes' => [ + 'location' => ['type' => 'index', 'columns' => ['location'], 'length' => []], + ], + '_constraints' => [ + 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], + 'name' => ['type' => 'unique', 'columns' => ['name'], 'length' => []], + ], + '_options' => [ + 'engine' => 'InnoDB', + 'collation' => 'utf8_general_ci' + ], + ]; + // @codingStandardsIgnoreEnd + + /** + * Records + * + * @var array + */ + public $records = [ + [ + 'id' => 1, + 'name' => 'Lorem ipsum dolor sit amet', + 'location' => 'Lorem ipsum dolor sit amet', + 'lat' => 30.8, + 'lng' => -12.6, + 'created' => '2017-04-21 14:54:02', + 'modified' => '2017-04-21 14:54:02' + ], + ]; +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/ApplicationTest.php b/production/example_apps/zippy_maps/tests/TestCase/ApplicationTest.php new file mode 100644 index 00000000..d397fa1c --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/ApplicationTest.php @@ -0,0 +1,46 @@ +middleware($middleware); + + $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0)); + $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1)); + $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2)); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/CategoriesControllerTest.php b/production/example_apps/zippy_maps/tests/TestCase/Controller/CategoriesControllerTest.php new file mode 100644 index 00000000..f0884e4f --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/Controller/CategoriesControllerTest.php @@ -0,0 +1,71 @@ +markTestIncomplete('Not implemented yet.'); + } + + /** + * Test view method + * + * @return void + */ + public function testView() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test add method + * + * @return void + */ + public function testAdd() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test edit method + * + * @return void + */ + public function testEdit() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test delete method + * + * @return void + */ + public function testDelete() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/Component/empty b/production/example_apps/zippy_maps/tests/TestCase/Controller/Component/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/LocationsControllerTest.php b/production/example_apps/zippy_maps/tests/TestCase/Controller/LocationsControllerTest.php new file mode 100644 index 00000000..014f2fa5 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/Controller/LocationsControllerTest.php @@ -0,0 +1,71 @@ +markTestIncomplete('Not implemented yet.'); + } + + /** + * Test view method + * + * @return void + */ + public function testView() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test add method + * + * @return void + */ + public function testAdd() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test edit method + * + * @return void + */ + public function testEdit() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test delete method + * + * @return void + */ + public function testDelete() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/Controller/PagesControllerTest.php b/production/example_apps/zippy_maps/tests/TestCase/Controller/PagesControllerTest.php new file mode 100644 index 00000000..1b478a31 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/Controller/PagesControllerTest.php @@ -0,0 +1,97 @@ +get('/'); + $this->assertResponseOk(); + $this->get('/'); + $this->assertResponseOk(); + } + + /** + * testDisplay method + * + * @return void + */ + public function testDisplay() + { + $this->get('/pages/home'); + $this->assertResponseOk(); + $this->assertResponseContains('CakePHP'); + $this->assertResponseContains(''); + } + + /** + * Test that missing template renders 404 page in production + * + * @return void + */ + public function testMissingTemplate() + { + Configure::write('debug', false); + $this->get('/pages/not_existing'); + + $this->assertResponseError(); + $this->assertResponseContains('Error'); + } + + /** + * Test that missing template in debug mode renders missing_template error page + * + * @return void + */ + public function testMissingTemplateInDebug() + { + Configure::write('debug', true); + $this->get('/pages/not_existing'); + + $this->assertResponseFailure(); + $this->assertResponseContains('Missing Template'); + $this->assertResponseContains('Stacktrace'); + $this->assertResponseContains('not_existing.ctp'); + } + + /** + * Test directory traversal protection + * + * @return void + */ + public function testDirectoryTraversalProtection() + { + $this->get('/pages/../Layout/ajax'); + $this->assertResponseCode(403); + $this->assertResponseContains('Forbidden'); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Behavior/empty b/production/example_apps/zippy_maps/tests/TestCase/Model/Behavior/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesLocationsTableTest.php b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesLocationsTableTest.php new file mode 100644 index 00000000..1a457956 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesLocationsTableTest.php @@ -0,0 +1,85 @@ + 'App\Model\Table\CategoriesLocationsTable']; + $this->CategoriesLocations = TableRegistry::get('CategoriesLocations', $config); + } + + /** + * tearDown method + * + * @return void + */ + public function tearDown() + { + unset($this->CategoriesLocations); + + parent::tearDown(); + } + + /** + * Test initialize method + * + * @return void + */ + public function testInitialize() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test validationDefault method + * + * @return void + */ + public function testValidationDefault() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test buildRules method + * + * @return void + */ + public function testBuildRules() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesTableTest.php b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesTableTest.php new file mode 100644 index 00000000..a618e677 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/CategoriesTableTest.php @@ -0,0 +1,83 @@ + 'App\Model\Table\CategoriesTable']; + $this->Categories = TableRegistry::get('Categories', $config); + } + + /** + * tearDown method + * + * @return void + */ + public function tearDown() + { + unset($this->Categories); + + parent::tearDown(); + } + + /** + * Test initialize method + * + * @return void + */ + public function testInitialize() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test validationDefault method + * + * @return void + */ + public function testValidationDefault() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test buildRules method + * + * @return void + */ + public function testBuildRules() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/Model/Table/LocationsTableTest.php b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/LocationsTableTest.php new file mode 100644 index 00000000..59669719 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/TestCase/Model/Table/LocationsTableTest.php @@ -0,0 +1,83 @@ + 'App\Model\Table\LocationsTable']; + $this->Locations = TableRegistry::get('Locations', $config); + } + + /** + * tearDown method + * + * @return void + */ + public function tearDown() + { + unset($this->Locations); + + parent::tearDown(); + } + + /** + * Test initialize method + * + * @return void + */ + public function testInitialize() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test validationDefault method + * + * @return void + */ + public function testValidationDefault() + { + $this->markTestIncomplete('Not implemented yet.'); + } + + /** + * Test buildRules method + * + * @return void + */ + public function testBuildRules() + { + $this->markTestIncomplete('Not implemented yet.'); + } +} diff --git a/production/example_apps/zippy_maps/tests/TestCase/View/Helper/empty b/production/example_apps/zippy_maps/tests/TestCase/View/Helper/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/tests/bootstrap.php b/production/example_apps/zippy_maps/tests/bootstrap.php new file mode 100644 index 00000000..0ca191e4 --- /dev/null +++ b/production/example_apps/zippy_maps/tests/bootstrap.php @@ -0,0 +1,12 @@ + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/production/example_apps/zippy_maps/webroot/css/base.css b/production/example_apps/zippy_maps/webroot/css/base.css new file mode 100644 index 00000000..f8bd4f62 --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/css/base.css @@ -0,0 +1,450 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +/* + * Copyright (c) 2013-2014 ZURB, inc. +* MIT License +* 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. +*/ + +meta.foundation-version{font-family:"{{ VERSION }}"}meta.foundation-mq-small{font-family:"/only screen/";width:0}meta.foundation-mq-small-only{font-family:"/only screen and (max-width: 40em)/";width:0}meta.foundation-mq-medium{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}meta.foundation-mq-medium-only{font-family:"/only screen and (min-width:40.0625em) and (max-width:64em)/";width:40.0625em}meta.foundation-mq-large{font-family:"/only screen and (min-width:64.0625em)/";width:64.0625em}meta.foundation-mq-large-only{font-family:"/only screen and (min-width:64.0625em) and (max-width:90em)/";width:64.0625em}meta.foundation-mq-xlarge{font-family:"/only screen and (min-width:90.0625em)/";width:90.0625em}meta.foundation-mq-xlarge-only{font-family:"/only screen and (min-width:90.0625em) and (max-width:120em)/";width:90.0625em}meta.foundation-mq-xxlarge{font-family:"/only screen and (min-width:120.0625em)/";width:120.0625em}meta.foundation-data-attribute-namespace{font-family:false}html,body{height:100%}html{box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}html,body{font-size:100%}body{background:#fff;color:#222;cursor:auto;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.5;margin:0;padding:0;position:relative}a:hover{cursor:pointer}img{max-width:100%;height:auto}img{-ms-interpolation-mode:bicubic}#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}.left{float:left !important}.right{float:right !important}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.hide{display:none}.invisible{visibility:hidden}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.row{margin:0 auto;max-width:62.5rem;width:100%}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.row.collapse>.column,.row.collapse>.columns{padding-left:0;padding-right:0}.row.collapse .row{margin-left:0;margin-right:0}.row .row{margin:0 -0.9375rem;max-width:none;width:auto}.row .row:before,.row .row:after{content:" ";display:table}.row .row:after{clear:both}.row .row.collapse{margin:0;max-width:none;width:auto}.row .row.collapse:before,.row .row.collapse:after{content:" ";display:table}.row .row.collapse:after{clear:both}.column,.columns{padding-left:0.9375rem;padding-right:0.9375rem;width:100%;float:left}.column+.column:last-child,.columns+.column:last-child,.column+.columns:last-child,.columns+.columns:last-child{float:right}.column+.column.end,.columns+.column.end,.column+.columns.end,.columns+.columns.end{float:left}@media only screen{.small-push-0{position:relative;left:0;right:auto}.small-pull-0{position:relative;right:0;left:auto}.small-push-1{position:relative;left:8.33333%;right:auto}.small-pull-1{position:relative;right:8.33333%;left:auto}.small-push-2{position:relative;left:16.66667%;right:auto}.small-pull-2{position:relative;right:16.66667%;left:auto}.small-push-3{position:relative;left:25%;right:auto}.small-pull-3{position:relative;right:25%;left:auto}.small-push-4{position:relative;left:33.33333%;right:auto}.small-pull-4{position:relative;right:33.33333%;left:auto}.small-push-5{position:relative;left:41.66667%;right:auto}.small-pull-5{position:relative;right:41.66667%;left:auto}.small-push-6{position:relative;left:50%;right:auto}.small-pull-6{position:relative;right:50%;left:auto}.small-push-7{position:relative;left:58.33333%;right:auto}.small-pull-7{position:relative;right:58.33333%;left:auto}.small-push-8{position:relative;left:66.66667%;right:auto}.small-pull-8{position:relative;right:66.66667%;left:auto}.small-push-9{position:relative;left:75%;right:auto}.small-pull-9{position:relative;right:75%;left:auto}.small-push-10{position:relative;left:83.33333%;right:auto}.small-pull-10{position:relative;right:83.33333%;left:auto}.small-push-11{position:relative;left:91.66667%;right:auto}.small-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.small-1{width:8.33333%}.small-2{width:16.66667%}.small-3{width:25%}.small-4{width:33.33333%}.small-5{width:41.66667%}.small-6{width:50%}.small-7{width:58.33333%}.small-8{width:66.66667%}.small-9{width:75%}.small-10{width:83.33333%}.small-11{width:91.66667%}.small-12{width:100%}.small-offset-0{margin-left:0 !important}.small-offset-1{margin-left:8.33333% !important}.small-offset-2{margin-left:16.66667% !important}.small-offset-3{margin-left:25% !important}.small-offset-4{margin-left:33.33333% !important}.small-offset-5{margin-left:41.66667% !important}.small-offset-6{margin-left:50% !important}.small-offset-7{margin-left:58.33333% !important}.small-offset-8{margin-left:66.66667% !important}.small-offset-9{margin-left:75% !important}.small-offset-10{margin-left:83.33333% !important}.small-offset-11{margin-left:91.66667% !important}.small-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.small-centered,.columns.small-centered{margin-left:auto;margin-right:auto;float:none}.column.small-uncentered,.columns.small-uncentered{float:left;margin-left:0;margin-right:0}.column.small-centered:last-child,.columns.small-centered:last-child{float:none}.column.small-uncentered:last-child,.columns.small-uncentered:last-child{float:left}.column.small-uncentered.opposite,.columns.small-uncentered.opposite{float:right}.row.small-collapse>.column,.row.small-collapse>.columns{padding-left:0;padding-right:0}.row.small-collapse .row{margin-left:0;margin-right:0}.row.small-uncollapse>.column,.row.small-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}}@media only screen and (min-width: 40.0625em){.medium-push-0{position:relative;left:0;right:auto}.medium-pull-0{position:relative;right:0;left:auto}.medium-push-1{position:relative;left:8.33333%;right:auto}.medium-pull-1{position:relative;right:8.33333%;left:auto}.medium-push-2{position:relative;left:16.66667%;right:auto}.medium-pull-2{position:relative;right:16.66667%;left:auto}.medium-push-3{position:relative;left:25%;right:auto}.medium-pull-3{position:relative;right:25%;left:auto}.medium-push-4{position:relative;left:33.33333%;right:auto}.medium-pull-4{position:relative;right:33.33333%;left:auto}.medium-push-5{position:relative;left:41.66667%;right:auto}.medium-pull-5{position:relative;right:41.66667%;left:auto}.medium-push-6{position:relative;left:50%;right:auto}.medium-pull-6{position:relative;right:50%;left:auto}.medium-push-7{position:relative;left:58.33333%;right:auto}.medium-pull-7{position:relative;right:58.33333%;left:auto}.medium-push-8{position:relative;left:66.66667%;right:auto}.medium-pull-8{position:relative;right:66.66667%;left:auto}.medium-push-9{position:relative;left:75%;right:auto}.medium-pull-9{position:relative;right:75%;left:auto}.medium-push-10{position:relative;left:83.33333%;right:auto}.medium-pull-10{position:relative;right:83.33333%;left:auto}.medium-push-11{position:relative;left:91.66667%;right:auto}.medium-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.medium-1{width:8.33333%}.medium-2{width:16.66667%}.medium-3{width:25%}.medium-4{width:33.33333%}.medium-5{width:41.66667%}.medium-6{width:50%}.medium-7{width:58.33333%}.medium-8{width:66.66667%}.medium-9{width:75%}.medium-10{width:83.33333%}.medium-11{width:91.66667%}.medium-12{width:100%}.medium-offset-0{margin-left:0 !important}.medium-offset-1{margin-left:8.33333% !important}.medium-offset-2{margin-left:16.66667% !important}.medium-offset-3{margin-left:25% !important}.medium-offset-4{margin-left:33.33333% !important}.medium-offset-5{margin-left:41.66667% !important}.medium-offset-6{margin-left:50% !important}.medium-offset-7{margin-left:58.33333% !important}.medium-offset-8{margin-left:66.66667% !important}.medium-offset-9{margin-left:75% !important}.medium-offset-10{margin-left:83.33333% !important}.medium-offset-11{margin-left:91.66667% !important}.medium-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.medium-centered,.columns.medium-centered{margin-left:auto;margin-right:auto;float:none}.column.medium-uncentered,.columns.medium-uncentered{float:left;margin-left:0;margin-right:0}.column.medium-centered:last-child,.columns.medium-centered:last-child{float:none}.column.medium-uncentered:last-child,.columns.medium-uncentered:last-child{float:left}.column.medium-uncentered.opposite,.columns.medium-uncentered.opposite{float:right}.row.medium-collapse>.column,.row.medium-collapse>.columns{padding-left:0;padding-right:0}.row.medium-collapse .row{margin-left:0;margin-right:0}.row.medium-uncollapse>.column,.row.medium-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}@media only screen and (min-width: 64.0625em){.large-push-0{position:relative;left:0;right:auto}.large-pull-0{position:relative;right:0;left:auto}.large-push-1{position:relative;left:8.33333%;right:auto}.large-pull-1{position:relative;right:8.33333%;left:auto}.large-push-2{position:relative;left:16.66667%;right:auto}.large-pull-2{position:relative;right:16.66667%;left:auto}.large-push-3{position:relative;left:25%;right:auto}.large-pull-3{position:relative;right:25%;left:auto}.large-push-4{position:relative;left:33.33333%;right:auto}.large-pull-4{position:relative;right:33.33333%;left:auto}.large-push-5{position:relative;left:41.66667%;right:auto}.large-pull-5{position:relative;right:41.66667%;left:auto}.large-push-6{position:relative;left:50%;right:auto}.large-pull-6{position:relative;right:50%;left:auto}.large-push-7{position:relative;left:58.33333%;right:auto}.large-pull-7{position:relative;right:58.33333%;left:auto}.large-push-8{position:relative;left:66.66667%;right:auto}.large-pull-8{position:relative;right:66.66667%;left:auto}.large-push-9{position:relative;left:75%;right:auto}.large-pull-9{position:relative;right:75%;left:auto}.large-push-10{position:relative;left:83.33333%;right:auto}.large-pull-10{position:relative;right:83.33333%;left:auto}.large-push-11{position:relative;left:91.66667%;right:auto}.large-pull-11{position:relative;right:91.66667%;left:auto}.column,.columns{position:relative;padding-left:0.9375rem;padding-right:0.9375rem;float:left}.large-1{width:8.33333%}.large-2{width:16.66667%}.large-3{width:25%}.large-4{width:33.33333%}.large-5{width:41.66667%}.large-6{width:50%}.large-7{width:58.33333%}.large-8{width:66.66667%}.large-9{width:75%}.large-10{width:83.33333%}.large-11{width:91.66667%}.large-12{width:100%}.large-offset-0{margin-left:0 !important}.large-offset-1{margin-left:8.33333% !important}.large-offset-2{margin-left:16.66667% !important}.large-offset-3{margin-left:25% !important}.large-offset-4{margin-left:33.33333% !important}.large-offset-5{margin-left:41.66667% !important}.large-offset-6{margin-left:50% !important}.large-offset-7{margin-left:58.33333% !important}.large-offset-8{margin-left:66.66667% !important}.large-offset-9{margin-left:75% !important}.large-offset-10{margin-left:83.33333% !important}.large-offset-11{margin-left:91.66667% !important}.large-reset-order{float:left;left:auto;margin-left:0;margin-right:0;right:auto}.column.large-centered,.columns.large-centered{margin-left:auto;margin-right:auto;float:none}.column.large-uncentered,.columns.large-uncentered{float:left;margin-left:0;margin-right:0}.column.large-centered:last-child,.columns.large-centered:last-child{float:none}.column.large-uncentered:last-child,.columns.large-uncentered:last-child{float:left}.column.large-uncentered.opposite,.columns.large-uncentered.opposite{float:right}.row.large-collapse>.column,.row.large-collapse>.columns{padding-left:0;padding-right:0}.row.large-collapse .row{margin-left:0;margin-right:0}.row.large-uncollapse>.column,.row.large-uncollapse>.columns{padding-left:0.9375rem;padding-right:0.9375rem;float:left}.push-0{position:relative;left:0;right:auto}.pull-0{position:relative;right:0;left:auto}.push-1{position:relative;left:8.33333%;right:auto}.pull-1{position:relative;right:8.33333%;left:auto}.push-2{position:relative;left:16.66667%;right:auto}.pull-2{position:relative;right:16.66667%;left:auto}.push-3{position:relative;left:25%;right:auto}.pull-3{position:relative;right:25%;left:auto}.push-4{position:relative;left:33.33333%;right:auto}.pull-4{position:relative;right:33.33333%;left:auto}.push-5{position:relative;left:41.66667%;right:auto}.pull-5{position:relative;right:41.66667%;left:auto}.push-6{position:relative;left:50%;right:auto}.pull-6{position:relative;right:50%;left:auto}.push-7{position:relative;left:58.33333%;right:auto}.pull-7{position:relative;right:58.33333%;left:auto}.push-8{position:relative;left:66.66667%;right:auto}.pull-8{position:relative;right:66.66667%;left:auto}.push-9{position:relative;left:75%;right:auto}.pull-9{position:relative;right:75%;left:auto}.push-10{position:relative;left:83.33333%;right:auto}.pull-10{position:relative;right:83.33333%;left:auto}.push-11{position:relative;left:91.66667%;right:auto}.pull-11{position:relative;right:91.66667%;left:auto}}button,.button{-webkit-appearance:none;-moz-appearance:none;border-radius:0;border-style:solid;border-width:0;cursor:pointer;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:normal;margin:0 0 1.25rem;position:relative;text-align:center;text-decoration:none;display:inline-block;padding:1rem 2rem 1.0625rem 2rem;font-size:1rem;background-color:#008CBA;border-color:#007095;color:#fff;transition:background-color 300ms ease-out}button:hover,button:focus,.button:hover,.button:focus{background-color:#007095}button:hover,button:focus,.button:hover,.button:focus{color:#fff}button.secondary,.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{background-color:#b9b9b9}button.secondary:hover,button.secondary:focus,.button.secondary:hover,.button.secondary:focus{color:#333}button.success,.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{background-color:#368a55}button.success:hover,button.success:focus,.button.success:hover,.button.success:focus{color:#fff}button.alert,.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{background-color:#cf2a0e}button.alert:hover,button.alert:focus,.button.alert:hover,.button.alert:focus{color:#fff}button.warning,.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{background-color:#cf6e0e}button.warning:hover,button.warning:focus,.button.warning:hover,.button.warning:focus{color:#fff}button.info,.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{background-color:#61b6d9}button.info:hover,button.info:focus,.button.info:hover,.button.info:focus{color:#fff}button.large,.button.large{padding:1.125rem 2.25rem 1.1875rem 2.25rem;font-size:1.25rem}button.small,.button.small{padding:0.875rem 1.75rem 0.9375rem 1.75rem;font-size:0.8125rem}button.tiny,.button.tiny{padding:0.625rem 1.25rem 0.6875rem 1.25rem;font-size:0.6875rem}button.expand,.button.expand{padding-left:0;padding-right:0;width:100%}button.left-align,.button.left-align{text-align:left;text-indent:0.75rem}button.right-align,.button.right-align{text-align:right;padding-right:0.75rem}button.radius,.button.radius{border-radius:3px}button.round,.button.round{border-radius:1000px}button.disabled,button[disabled],.button.disabled,.button[disabled]{background-color:#008CBA;border-color:#007095;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#007095}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{color:#fff}button.disabled:hover,button.disabled:focus,button[disabled]:hover,button[disabled]:focus,.button.disabled:hover,.button.disabled:focus,.button[disabled]:hover,.button[disabled]:focus{background-color:#008CBA}button.disabled.secondary,button[disabled].secondary,.button.disabled.secondary,.button[disabled].secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#b9b9b9}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{color:#333}button.disabled.secondary:hover,button.disabled.secondary:focus,button[disabled].secondary:hover,button[disabled].secondary:focus,.button.disabled.secondary:hover,.button.disabled.secondary:focus,.button[disabled].secondary:hover,.button[disabled].secondary:focus{background-color:#e7e7e7}button.disabled.success,button[disabled].success,.button.disabled.success,.button[disabled].success{background-color:#43AC6A;border-color:#368a55;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#368a55}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{color:#fff}button.disabled.success:hover,button.disabled.success:focus,button[disabled].success:hover,button[disabled].success:focus,.button.disabled.success:hover,.button.disabled.success:focus,.button[disabled].success:hover,.button[disabled].success:focus{background-color:#43AC6A}button.disabled.alert,button[disabled].alert,.button.disabled.alert,.button[disabled].alert{background-color:#f04124;border-color:#cf2a0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#cf2a0e}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{color:#fff}button.disabled.alert:hover,button.disabled.alert:focus,button[disabled].alert:hover,button[disabled].alert:focus,.button.disabled.alert:hover,.button.disabled.alert:focus,.button[disabled].alert:hover,.button[disabled].alert:focus{background-color:#f04124}button.disabled.warning,button[disabled].warning,.button.disabled.warning,.button[disabled].warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff;box-shadow:none;cursor:default;opacity:0.7}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#cf6e0e}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{color:#fff}button.disabled.warning:hover,button.disabled.warning:focus,button[disabled].warning:hover,button[disabled].warning:focus,.button.disabled.warning:hover,.button.disabled.warning:focus,.button[disabled].warning:hover,.button[disabled].warning:focus{background-color:#f08a24}button.disabled.info,button[disabled].info,.button.disabled.info,.button[disabled].info{background-color:#a0d3e8;border-color:#61b6d9;color:#333;box-shadow:none;cursor:default;opacity:0.7}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#61b6d9}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{color:#fff}button.disabled.info:hover,button.disabled.info:focus,button[disabled].info:hover,button[disabled].info:focus,.button.disabled.info:hover,.button.disabled.info:focus,.button[disabled].info:hover,.button[disabled].info:focus{background-color:#a0d3e8}button::-moz-focus-inner{border:0;padding:0}@media only screen and (min-width: 40.0625em){button,.button{display:inline-block}}form{margin:0 0 1rem}form .row .row{margin:0 -0.5rem}form .row .row .column,form .row .row .columns{padding:0 0.5rem}form .row .row.collapse{margin:0}form .row .row.collapse .column,form .row .row.collapse .columns{padding:0}form .row .row.collapse input{-webkit-border-bottom-right-radius:0;-webkit-border-top-right-radius:0;border-bottom-right-radius:0;border-top-right-radius:0}form .row input.column,form .row input.columns,form .row textarea.column,form .row textarea.columns{padding-left:0.5rem}label{color:#4d4d4d;cursor:pointer;display:block;font-size:0.875rem;font-weight:normal;line-height:1.5;margin-bottom:0}label.right{float:none !important;text-align:right}label.inline{margin:0 0 1rem 0;padding:0.5625rem 0}label small{text-transform:capitalize;color:#676767}.prefix,.postfix{border-style:solid;border-width:1px;display:block;font-size:0.875rem;height:2.3125rem;line-height:2.3125rem;overflow:visible;padding-bottom:0;padding-top:0;position:relative;text-align:center;width:100%;z-index:2}.postfix.button{border-color:true}.prefix.button{border:none;padding-left:0;padding-right:0;padding-bottom:0;padding-top:0;text-align:center}.prefix.button.radius{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.postfix.button.radius{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.prefix.button.round{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.postfix.button.round{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}span.prefix,label.prefix{background:#f2f2f2;border-right:none;color:#333;border-color:#ccc}span.postfix,label.postfix{background:#f2f2f2;color:#333;border-color:#ccc}input[type="text"],input[type="password"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="week"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="time"],input[type="url"],input[type="color"],textarea{-webkit-appearance:none;-moz-appearance:none;border-radius:0;background-color:#fff;border-style:solid;border-width:1px;border-color:#ccc;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);color:rgba(0,0,0,0.75);display:block;font-family:inherit;font-size:0.875rem;height:2.3125rem;margin:0 0 1rem 0;padding:0.5rem;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 0.15s linear,background 0.15s linear;-moz-transition:border-color 0.15s linear,background 0.15s linear;-ms-transition:border-color 0.15s linear,background 0.15s linear;-o-transition:border-color 0.15s linear,background 0.15s linear;transition:border-color 0.15s linear,background 0.15s linear}input[type="text"]:focus,input[type="password"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="week"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="color"]:focus,textarea:focus{background:#fafafa;border-color:#999;outline:none}input[type="text"]:disabled,input[type="password"]:disabled,input[type="date"]:disabled,input[type="datetime"]:disabled,input[type="datetime-local"]:disabled,input[type="month"]:disabled,input[type="week"]:disabled,input[type="email"]:disabled,input[type="number"]:disabled,input[type="search"]:disabled,input[type="tel"]:disabled,input[type="time"]:disabled,input[type="url"]:disabled,input[type="color"]:disabled,textarea:disabled{background-color:#ddd;cursor:default}input[type="text"][disabled],input[type="text"][readonly],fieldset[disabled] input[type="text"],input[type="password"][disabled],input[type="password"][readonly],fieldset[disabled] input[type="password"],input[type="date"][disabled],input[type="date"][readonly],fieldset[disabled] input[type="date"],input[type="datetime"][disabled],input[type="datetime"][readonly],fieldset[disabled] input[type="datetime"],input[type="datetime-local"][disabled],input[type="datetime-local"][readonly],fieldset[disabled] input[type="datetime-local"],input[type="month"][disabled],input[type="month"][readonly],fieldset[disabled] input[type="month"],input[type="week"][disabled],input[type="week"][readonly],fieldset[disabled] input[type="week"],input[type="email"][disabled],input[type="email"][readonly],fieldset[disabled] input[type="email"],input[type="number"][disabled],input[type="number"][readonly],fieldset[disabled] input[type="number"],input[type="search"][disabled],input[type="search"][readonly],fieldset[disabled] input[type="search"],input[type="tel"][disabled],input[type="tel"][readonly],fieldset[disabled] input[type="tel"],input[type="time"][disabled],input[type="time"][readonly],fieldset[disabled] input[type="time"],input[type="url"][disabled],input[type="url"][readonly],fieldset[disabled] input[type="url"],input[type="color"][disabled],input[type="color"][readonly],fieldset[disabled] input[type="color"],textarea[disabled],textarea[readonly],fieldset[disabled] textarea{background-color:#ddd;cursor:default}input[type="text"].radius,input[type="password"].radius,input[type="date"].radius,input[type="datetime"].radius,input[type="datetime-local"].radius,input[type="month"].radius,input[type="week"].radius,input[type="email"].radius,input[type="number"].radius,input[type="search"].radius,input[type="tel"].radius,input[type="time"].radius,input[type="url"].radius,input[type="color"].radius,textarea.radius{border-radius:3px}form .row .prefix-radius.row.collapse input,form .row .prefix-radius.row.collapse textarea,form .row .prefix-radius.row.collapse select,form .row .prefix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-radius.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse input,form .row .postfix-radius.row.collapse textarea,form .row .postfix-radius.row.collapse select,form .row .postfix-radius.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}form .row .postfix-radius.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}form .row .prefix-round.row.collapse input,form .row .prefix-round.row.collapse textarea,form .row .prefix-round.row.collapse select,form .row .prefix-round.row.collapse button{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}form .row .prefix-round.row.collapse .prefix{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse input,form .row .postfix-round.row.collapse textarea,form .row .postfix-round.row.collapse select,form .row .postfix-round.row.collapse button{border-radius:0;-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}form .row .postfix-round.row.collapse .postfix{border-radius:0;-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}input[type="submit"]{-webkit-appearance:none;-moz-appearance:none;border-radius:0}textarea[rows]{height:auto}textarea{max-width:100%}::-webkit-input-placeholder{color:#ccc}:-moz-placeholder{color:#ccc}::-moz-placeholder{color:#ccc}:-ms-input-placeholder{color:#ccc}select{-webkit-appearance:none !important;-moz-appearance:none !important;background-color:#FAFAFA;border-radius:0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);background-position:100% center;background-repeat:no-repeat;border-style:solid;border-width:1px;border-color:#ccc;color:rgba(0,0,0,0.75);font-family:inherit;font-size:0.875rem;line-height:normal;padding:0.5rem;border-radius:0;height:2.3125rem}select::-ms-expand{display:none}select.radius{border-radius:3px}select:hover{background-color:#f3f3f3;border-color:#999}select:disabled{background-color:#ddd;cursor:default}select[multiple]{height:auto}input[type="file"],input[type="checkbox"],input[type="radio"],select{margin:0 0 1rem 0}input[type="checkbox"]+label,input[type="radio"]+label{display:inline-block;margin-left:0.5rem;margin-right:1rem;margin-bottom:0;vertical-align:baseline}input[type="file"]{width:100%}fieldset{border:1px solid #ddd;margin:1.125rem 0;padding:1.25rem}fieldset legend{background:#fff;font-weight:bold;margin-left:-0.1875rem;margin:0;padding:0 0.1875rem}[data-abide] .error small.error,[data-abide] .error span.error,[data-abide] span.error,[data-abide] small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}[data-abide] span.error,[data-abide] small.error{display:none}span.error,small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error input,.error textarea,.error select{margin-bottom:0}.error input[type="checkbox"],.error input[type="radio"]{margin-bottom:1rem}.error label,.error label.error{color:#f04124}.error small.error{display:block;font-size:0.75rem;font-style:italic;font-weight:normal;margin-bottom:1rem;margin-top:-1px;padding:0.375rem 0.5625rem 0.5625rem;background:#f04124;color:#fff}.error>label>small{background:transparent;color:#676767;display:inline;font-size:60%;font-style:normal;margin:0;padding:0;text-transform:capitalize}.error span.error-message{display:block}input.error,textarea.error,select.error{margin-bottom:0}label.error{color:#f04124}meta.foundation-mq-topbar{font-family:"/only screen and (min-width:40.0625em)/";width:40.0625em}.contain-to-grid{width:100%;background:#333}.contain-to-grid .top-bar{margin-bottom:0}.fixed{position:fixed;top:0;width:100%;z-index:99;left:0}.fixed.expanded:not(.top-bar){height:auto;max-height:100%;overflow-y:auto;width:100%}.fixed.expanded:not(.top-bar) .title-area{position:fixed;width:100%;z-index:99}.fixed.expanded:not(.top-bar) .top-bar-section{margin-top:2.8125rem;z-index:98}.top-bar{background:#333;height:2.8125rem;line-height:2.8125rem;margin-bottom:0;overflow:hidden;position:relative}.top-bar ul{list-style:none;margin-bottom:0}.top-bar .row{max-width:none}.top-bar form,.top-bar input,.top-bar select{margin-bottom:0}.top-bar input,.top-bar select{font-size:0.75rem;height:1.75rem;padding-bottom:.35rem;padding-top:.35rem}.top-bar .button,.top-bar button{font-size:0.75rem;margin-bottom:0;padding-bottom:0.4125rem;padding-top:0.4125rem}@media only screen and (max-width: 40em){.top-bar .button,.top-bar button{position:relative;top:-1px}}.top-bar .title-area{margin:0;position:relative}.top-bar .name{font-size:16px;height:2.8125rem;margin:0}.top-bar .name h1,.top-bar .name h2,.top-bar .name h3,.top-bar .name h4,.top-bar .name p,.top-bar .name span{font-size:1.0625rem;line-height:2.8125rem;margin:0}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name p a,.top-bar .name span a{color:#fff;display:block;font-weight:normal;padding:0 0.9375rem;width:75%}.top-bar .toggle-topbar{position:absolute;right:0;top:0}.top-bar .toggle-topbar a{color:#fff;display:block;font-size:0.8125rem;font-weight:bold;height:2.8125rem;line-height:2.8125rem;padding:0 0.9375rem;position:relative;text-transform:uppercase}.top-bar .toggle-topbar.menu-icon{margin-top:-16px;top:50%}.top-bar .toggle-topbar.menu-icon a{color:#fff;height:34px;line-height:33px;padding:0 2.5rem 0 0.9375rem;position:relative}.top-bar .toggle-topbar.menu-icon a span::after{content:"";display:block;height:0;position:absolute;margin-top:-8px;top:50%;right:0.9375rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:16px}.top-bar .toggle-topbar.menu-icon a span:hover:after{box-shadow:0 0 0 1px "",0 7px 0 1px "",0 14px 0 1px ""}.top-bar.expanded{background:transparent;height:auto}.top-bar.expanded .title-area{background:#333}.top-bar.expanded .toggle-topbar a{color:#888}.top-bar.expanded .toggle-topbar a span::after{box-shadow:0 0 0 1px #888,0 7px 0 1px #888,0 14px 0 1px #888}@media screen and (-webkit-min-device-pixel-ratio: 0){.top-bar.expanded .top-bar-section .has-dropdown.moved>.dropdown,.top-bar.expanded .top-bar-section .dropdown{clip:initial}.top-bar.expanded .top-bar-section .has-dropdown:not(.moved)>ul{padding:0}}.top-bar-section{left:0;position:relative;width:auto;transition:left 300ms ease-out}.top-bar-section ul{display:block;font-size:16px;height:auto;margin:0;padding:0;width:100%}.top-bar-section .divider,.top-bar-section [role="separator"]{border-top:solid 1px #1a1a1a;clear:both;height:1px;width:100%}.top-bar-section ul li{background:#333}.top-bar-section ul li>a{color:#fff;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.8125rem;font-weight:normal;padding-left:0.9375rem;padding:12px 0 12px 0.9375rem;text-transform:none;width:100%}.top-bar-section ul li>a.button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{background-color:#007095}.top-bar-section ul li>a.button:hover,.top-bar-section ul li>a.button:focus{color:#fff}.top-bar-section ul li>a.button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>a.button.secondary:hover,.top-bar-section ul li>a.button.secondary:focus{color:#333}.top-bar-section ul li>a.button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{background-color:#368a55}.top-bar-section ul li>a.button.success:hover,.top-bar-section ul li>a.button.success:focus{color:#fff}.top-bar-section ul li>a.button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>a.button.alert:hover,.top-bar-section ul li>a.button.alert:focus{color:#fff}.top-bar-section ul li>a.button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>a.button.warning:hover,.top-bar-section ul li>a.button.warning:focus{color:#fff}.top-bar-section ul li>a.button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{background-color:#61b6d9}.top-bar-section ul li>a.button.info:hover,.top-bar-section ul li>a.button.info:focus{color:#fff}.top-bar-section ul li>button{font-size:0.8125rem;padding-left:0.9375rem;padding-right:0.9375rem;background-color:#008CBA;border-color:#007095;color:#fff}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{background-color:#007095}.top-bar-section ul li>button:hover,.top-bar-section ul li>button:focus{color:#fff}.top-bar-section ul li>button.secondary{background-color:#e7e7e7;border-color:#b9b9b9;color:#333}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{background-color:#b9b9b9}.top-bar-section ul li>button.secondary:hover,.top-bar-section ul li>button.secondary:focus{color:#333}.top-bar-section ul li>button.success{background-color:#43AC6A;border-color:#368a55;color:#fff}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{background-color:#368a55}.top-bar-section ul li>button.success:hover,.top-bar-section ul li>button.success:focus{color:#fff}.top-bar-section ul li>button.alert{background-color:#f04124;border-color:#cf2a0e;color:#fff}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{background-color:#cf2a0e}.top-bar-section ul li>button.alert:hover,.top-bar-section ul li>button.alert:focus{color:#fff}.top-bar-section ul li>button.warning{background-color:#f08a24;border-color:#cf6e0e;color:#fff}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{background-color:#cf6e0e}.top-bar-section ul li>button.warning:hover,.top-bar-section ul li>button.warning:focus{color:#fff}.top-bar-section ul li>button.info{background-color:#a0d3e8;border-color:#61b6d9;color:#333}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{background-color:#61b6d9}.top-bar-section ul li>button.info:hover,.top-bar-section ul li>button.info:focus{color:#fff}.top-bar-section ul li:hover:not(.has-form)>a{background-color:#555;color:#fff;background:#222}.top-bar-section ul li.active>a{background:#008CBA;color:#fff}.top-bar-section ul li.active>a:hover{background:#0078a0;color:#fff}.top-bar-section .has-form{padding:0.9375rem}.top-bar-section .has-dropdown{position:relative}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent rgba(255,255,255,0.4);border-left-style:solid;margin-right:0.9375rem;margin-top:-4.5px;position:absolute;top:50%;right:0}.top-bar-section .has-dropdown.moved{position:static}.top-bar-section .has-dropdown.moved>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important;width:100%}.top-bar-section .has-dropdown.moved>a:after{display:none}.top-bar-section .dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block;padding:0;position:absolute;top:0;z-index:99;left:100%}.top-bar-section .dropdown li{height:auto;width:100%}.top-bar-section .dropdown li a{font-weight:normal;padding:8px 0.9375rem}.top-bar-section .dropdown li a.parent-link{font-weight:normal}.top-bar-section .dropdown li.title h5,.top-bar-section .dropdown li.parent-link{margin-bottom:0;margin-top:0;font-size:1.125rem}.top-bar-section .dropdown li.title h5 a,.top-bar-section .dropdown li.parent-link a{color:#fff;display:block}.top-bar-section .dropdown li.title h5 a:hover,.top-bar-section .dropdown li.parent-link a:hover{background:none}.top-bar-section .dropdown li.has-form{padding:8px 0.9375rem}.top-bar-section .dropdown li .button,.top-bar-section .dropdown li button{top:auto}.top-bar-section .dropdown label{color:#777;font-size:0.625rem;font-weight:bold;margin-bottom:0;padding:8px 0.9375rem 2px;text-transform:uppercase}.js-generated{display:block}@media only screen and (min-width: 40.0625em){.top-bar{background:#333;overflow:visible}.top-bar:before,.top-bar:after{content:" ";display:table}.top-bar:after{clear:both}.top-bar .toggle-topbar{display:none}.top-bar .title-area{float:left}.top-bar .name h1 a,.top-bar .name h2 a,.top-bar .name h3 a,.top-bar .name h4 a,.top-bar .name h5 a,.top-bar .name h6 a{width:auto}.top-bar input,.top-bar select,.top-bar .button,.top-bar button{font-size:0.875rem;height:1.75rem;position:relative;top:0.53125rem}.top-bar.expanded{background:#333}.contain-to-grid .top-bar{margin-bottom:0;margin:0 auto;max-width:62.5rem}.top-bar-section{transition:none 0 0;left:0 !important}.top-bar-section ul{display:inline;height:auto !important;width:auto}.top-bar-section ul li{float:left}.top-bar-section ul li .js-generated{display:none}.top-bar-section li.hover>a:not(.button){background-color:#555;background:#222;color:#fff}.top-bar-section li:not(.has-form) a:not(.button){background:#333;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li:not(.has-form) a:not(.button):hover{background-color:#555;background:#222}.top-bar-section li.active:not(.has-form) a:not(.button){background:#008CBA;color:#fff;line-height:2.8125rem;padding:0 0.9375rem}.top-bar-section li.active:not(.has-form) a:not(.button):hover{background:#0078a0;color:#fff}.top-bar-section .has-dropdown>a{padding-right:2.1875rem !important}.top-bar-section .has-dropdown>a:after{border:inset 5px;content:"";display:block;height:0;width:0;border-color:rgba(255,255,255,0.4) transparent transparent transparent;border-top-style:solid;margin-top:-2.5px;top:1.40625rem}.top-bar-section .has-dropdown.moved{position:relative}.top-bar-section .has-dropdown.moved>.dropdown{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px;display:block}.top-bar-section .has-dropdown.hover>.dropdown,.top-bar-section .has-dropdown.not-click:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.top-bar-section .has-dropdown .dropdown li.has-dropdown>a:after{border:none;content:"\00bb";top:0.1875rem;right:5px}.top-bar-section .dropdown{left:0;background:transparent;min-width:100%;top:auto}.top-bar-section .dropdown li a{background:#333;color:#fff;line-height:2.8125rem;padding:12px 0.9375rem;white-space:nowrap}.top-bar-section .dropdown li:not(.has-form):not(.active)>a:not(.button){background:#333;color:#fff}.top-bar-section .dropdown li:not(.has-form):not(.active):hover>a:not(.button){background-color:#555;color:#fff;background:#222}.top-bar-section .dropdown li label{background:#333;white-space:nowrap}.top-bar-section .dropdown li .dropdown{left:100%;top:0}.top-bar-section>ul>.divider,.top-bar-section>ul>[role="separator"]{border-right:solid 1px #4e4e4e;border-bottom:none;border-top:none;clear:none;height:2.8125rem;width:0}.top-bar-section .has-form{background:#333;height:2.8125rem;padding:0 0.9375rem}.top-bar-section .right li .dropdown{left:auto;right:0}.top-bar-section .right li .dropdown li .dropdown{right:100%}.top-bar-section .left li .dropdown{right:auto;left:0}.top-bar-section .left li .dropdown li .dropdown{left:100%}.no-js .top-bar-section ul li:hover>a{background-color:#555;background:#222;color:#fff}.no-js .top-bar-section ul li:active>a{background:#008CBA;color:#fff}.no-js .top-bar-section .has-dropdown:hover>.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}.no-js .top-bar-section .has-dropdown>a:focus+.dropdown{position:static !important;height:auto;width:auto;overflow:visible;clip:auto;display:block;position:absolute !important}}.breadcrumbs{border-style:solid;border-width:1px;display:block;list-style:none;margin-left:0;overflow:hidden;padding:0.5625rem 0.875rem 0.5625rem;background-color:#f4f4f4;border-color:#dcdcdc;border-radius:3px}.breadcrumbs>*{color:#008CBA;float:left;font-size:0.6875rem;line-height:0.6875rem;margin:0;text-transform:uppercase}.breadcrumbs>*:hover a,.breadcrumbs>*:focus a{text-decoration:underline}.breadcrumbs>* a{color:#008CBA}.breadcrumbs>*.current{color:#333;cursor:default}.breadcrumbs>*.current a{color:#333;cursor:default}.breadcrumbs>*.current:hover,.breadcrumbs>*.current:hover a,.breadcrumbs>*.current:focus,.breadcrumbs>*.current:focus a{text-decoration:none}.breadcrumbs>*.unavailable{color:#999}.breadcrumbs>*.unavailable a{color:#999}.breadcrumbs>*.unavailable:hover,.breadcrumbs>*.unavailable:hover a,.breadcrumbs>*.unavailable:focus,.breadcrumbs>*.unavailable a:focus{color:#999;cursor:not-allowed;text-decoration:none}.breadcrumbs>*:before{color:#aaa;content:"/";margin:0 0.75rem;position:relative;top:1px}.breadcrumbs>*:first-child:before{content:" ";margin:0}[aria-label="breadcrumbs"] [aria-hidden="true"]:after{content:"/"}.alert-box{border-style:solid;border-width:1px;display:block;font-size:0.8125rem;font-weight:normal;margin-bottom:1.25rem;padding:0.875rem 1.5rem 0.875rem 0.875rem;position:relative;transition:opacity 300ms ease-out;background-color:#008CBA;border-color:#0078a0;color:#fff}.alert-box .close{right:0.25rem;background:inherit;color:#333;font-size:1.375rem;line-height:.9;margin-top:-0.6875rem;opacity:0.3;padding:0 6px 4px;position:absolute;top:50%}.alert-box .close:hover,.alert-box .close:focus{opacity:0.5}.alert-box.radius{border-radius:3px}.alert-box.round{border-radius:1000px}.alert-box.success{background-color:#43AC6A;border-color:#3a945b;color:#fff}.alert-box.alert{background-color:#f04124;border-color:#de2d0f;color:#fff}.alert-box.secondary{background-color:#e7e7e7;border-color:#c7c7c7;color:#4f4f4f}.alert-box.warning{background-color:#f08a24;border-color:#de770f;color:#fff}.alert-box.info{background-color:#a0d3e8;border-color:#74bfdd;color:#4f4f4f}.alert-box.alert-close{opacity:0}.inline-list{list-style:none;margin-left:-1.375rem;margin-right:0;margin:0 auto 1.0625rem auto;overflow:hidden;padding:0}.inline-list>li{display:block;float:left;list-style:none;margin-left:1.375rem}.inline-list>li>*{display:block}.button-group{list-style:none;margin:0;left:0}.button-group:before,.button-group:after{content:" ";display:table}.button-group:after{clear:both}.button-group.even-2 li{display:inline-block;margin:0 -2px;width:50%}.button-group.even-2 li>button,.button-group.even-2 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-2 li:first-child button,.button-group.even-2 li:first-child .button{border-left:0}.button-group.even-2 li button,.button-group.even-2 li .button{width:100%}.button-group.even-3 li{display:inline-block;margin:0 -2px;width:33.33333%}.button-group.even-3 li>button,.button-group.even-3 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-3 li:first-child button,.button-group.even-3 li:first-child .button{border-left:0}.button-group.even-3 li button,.button-group.even-3 li .button{width:100%}.button-group.even-4 li{display:inline-block;margin:0 -2px;width:25%}.button-group.even-4 li>button,.button-group.even-4 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-4 li:first-child button,.button-group.even-4 li:first-child .button{border-left:0}.button-group.even-4 li button,.button-group.even-4 li .button{width:100%}.button-group.even-5 li{display:inline-block;margin:0 -2px;width:20%}.button-group.even-5 li>button,.button-group.even-5 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-5 li:first-child button,.button-group.even-5 li:first-child .button{border-left:0}.button-group.even-5 li button,.button-group.even-5 li .button{width:100%}.button-group.even-6 li{display:inline-block;margin:0 -2px;width:16.66667%}.button-group.even-6 li>button,.button-group.even-6 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-6 li:first-child button,.button-group.even-6 li:first-child .button{border-left:0}.button-group.even-6 li button,.button-group.even-6 li .button{width:100%}.button-group.even-7 li{display:inline-block;margin:0 -2px;width:14.28571%}.button-group.even-7 li>button,.button-group.even-7 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-7 li:first-child button,.button-group.even-7 li:first-child .button{border-left:0}.button-group.even-7 li button,.button-group.even-7 li .button{width:100%}.button-group.even-8 li{display:inline-block;margin:0 -2px;width:12.5%}.button-group.even-8 li>button,.button-group.even-8 li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.even-8 li:first-child button,.button-group.even-8 li:first-child .button{border-left:0}.button-group.even-8 li button,.button-group.even-8 li .button{width:100%}.button-group>li{display:inline-block;margin:0 -2px}.button-group>li>button,.button-group>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group>li:first-child button,.button-group>li:first-child .button{border-left:0}.button-group.stack>li{display:block;margin:0;float:none}.button-group.stack>li>button,.button-group.stack>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-left:0}.button-group.stack>li>button,.button-group.stack>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack>li>button{width:100%}.button-group.stack>li:first-child button,.button-group.stack>li:first-child .button{border-top:0}.button-group.stack-for-small>li{display:inline-block;margin:0 -2px}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}@media only screen and (max-width: 40em){.button-group.stack-for-small>li{display:block;margin:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-left:0}.button-group.stack-for-small>li>button,.button-group.stack-for-small>li .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.stack-for-small>li>button{width:100%}.button-group.stack-for-small>li:first-child button,.button-group.stack-for-small>li:first-child .button{border-top:0}}.button-group.radius>*{display:inline-block;margin:0 -2px}.button-group.radius>*>button,.button-group.radius>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius>*:first-child button,.button-group.radius>*:first-child .button{border-left:0}.button-group.radius>*,.button-group.radius>*>a,.button-group.radius>*>button,.button-group.radius>*>.button{border-radius:0}.button-group.radius>*:first-child,.button-group.radius>*:first-child>a,.button-group.radius>*:first-child>button,.button-group.radius>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius>*:last-child,.button-group.radius>*:last-child>a,.button-group.radius>*:last-child>button,.button-group.radius>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*{display:block;margin:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-left:0}.button-group.radius.stack>*>button,.button-group.radius.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack>*>button{width:100%}.button-group.radius.stack>*:first-child button,.button-group.radius.stack>*:first-child .button{border-top:0}.button-group.radius.stack>*,.button-group.radius.stack>*>a,.button-group.radius.stack>*>button,.button-group.radius.stack>*>.button{border-radius:0}.button-group.radius.stack>*:first-child,.button-group.radius.stack>*:first-child>a,.button-group.radius.stack>*:first-child>button,.button-group.radius.stack>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack>*:last-child,.button-group.radius.stack>*:last-child>a,.button-group.radius.stack>*:last-child>button,.button-group.radius.stack>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}@media only screen and (min-width: 40.0625em){.button-group.radius.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}}@media only screen and (max-width: 40em){.button-group.radius.stack-for-small>*{display:block;margin:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-left:0}.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.radius.stack-for-small>*>button{width:100%}.button-group.radius.stack-for-small>*:first-child button,.button-group.radius.stack-for-small>*:first-child .button{border-top:0}.button-group.radius.stack-for-small>*,.button-group.radius.stack-for-small>*>a,.button-group.radius.stack-for-small>*>button,.button-group.radius.stack-for-small>*>.button{border-radius:0}.button-group.radius.stack-for-small>*:first-child,.button-group.radius.stack-for-small>*:first-child>a,.button-group.radius.stack-for-small>*:first-child>button,.button-group.radius.stack-for-small>*:first-child>.button{-webkit-top-left-radius:3px;-webkit-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.button-group.radius.stack-for-small>*:last-child,.button-group.radius.stack-for-small>*:last-child>a,.button-group.radius.stack-for-small>*:last-child>button,.button-group.radius.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:3px;-webkit-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}}.button-group.round>*{display:inline-block;margin:0 -2px}.button-group.round>*>button,.button-group.round>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round>*:first-child button,.button-group.round>*:first-child .button{border-left:0}.button-group.round>*,.button-group.round>*>a,.button-group.round>*>button,.button-group.round>*>.button{border-radius:0}.button-group.round>*:first-child,.button-group.round>*:first-child>a,.button-group.round>*:first-child>button,.button-group.round>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round>*:last-child,.button-group.round>*:last-child>a,.button-group.round>*:last-child>button,.button-group.round>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.button-group.round.stack>*{display:block;margin:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-left:0}.button-group.round.stack>*>button,.button-group.round.stack>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack>*>button{width:100%}.button-group.round.stack>*:first-child button,.button-group.round.stack>*:first-child .button{border-top:0}.button-group.round.stack>*,.button-group.round.stack>*>a,.button-group.round.stack>*>button,.button-group.round.stack>*>.button{border-radius:0}.button-group.round.stack>*:first-child,.button-group.round.stack>*:first-child>a,.button-group.round.stack>*:first-child>button,.button-group.round.stack>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack>*:last-child,.button-group.round.stack>*:last-child>a,.button-group.round.stack>*:last-child>button,.button-group.round.stack>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}@media only screen and (min-width: 40.0625em){.button-group.round.stack-for-small>*{display:inline-block;margin:0 -2px}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-border-bottom-left-radius:1000px;-webkit-border-top-left-radius:1000px;border-bottom-left-radius:1000px;border-top-left-radius:1000px}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}}@media only screen and (max-width: 40em){.button-group.round.stack-for-small>*{display:block;margin:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-left:1px solid;border-color:rgba(255,255,255,0.5)}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-left:0}.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>* .button{border-color:rgba(255,255,255,0.5);border-left-width:0;border-top:1px solid;display:block;margin:0}.button-group.round.stack-for-small>*>button{width:100%}.button-group.round.stack-for-small>*:first-child button,.button-group.round.stack-for-small>*:first-child .button{border-top:0}.button-group.round.stack-for-small>*,.button-group.round.stack-for-small>*>a,.button-group.round.stack-for-small>*>button,.button-group.round.stack-for-small>*>.button{border-radius:0}.button-group.round.stack-for-small>*:first-child,.button-group.round.stack-for-small>*:first-child>a,.button-group.round.stack-for-small>*:first-child>button,.button-group.round.stack-for-small>*:first-child>.button{-webkit-top-left-radius:1rem;-webkit-top-right-radius:1rem;border-top-left-radius:1rem;border-top-right-radius:1rem}.button-group.round.stack-for-small>*:last-child,.button-group.round.stack-for-small>*:last-child>a,.button-group.round.stack-for-small>*:last-child>button,.button-group.round.stack-for-small>*:last-child>.button{-webkit-bottom-left-radius:1rem;-webkit-bottom-right-radius:1rem;border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}}.button-bar:before,.button-bar:after{content:" ";display:table}.button-bar:after{clear:both}.button-bar .button-group{float:left;margin-right:0.625rem}.button-bar .button-group div{overflow:hidden}.panel{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#f2f2f2;color:#333}.panel>:first-child{margin-top:0}.panel>:last-child{margin-bottom:0}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6,.panel p,.panel li,.panel dl{color:#333}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{line-height:1;margin-bottom:0.625rem}.panel h1.subheader,.panel h2.subheader,.panel h3.subheader,.panel h4.subheader,.panel h5.subheader,.panel h6.subheader{line-height:1.4}.panel.callout{border-style:solid;border-width:1px;border-color:#d8d8d8;margin-bottom:1.25rem;padding:1.25rem;background:#ecfaff;color:#333}.panel.callout>:first-child{margin-top:0}.panel.callout>:last-child{margin-bottom:0}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6,.panel.callout p,.panel.callout li,.panel.callout dl{color:#333}.panel.callout h1,.panel.callout h2,.panel.callout h3,.panel.callout h4,.panel.callout h5,.panel.callout h6{line-height:1;margin-bottom:0.625rem}.panel.callout h1.subheader,.panel.callout h2.subheader,.panel.callout h3.subheader,.panel.callout h4.subheader,.panel.callout h5.subheader,.panel.callout h6.subheader{line-height:1.4}.panel.callout a:not(.button){color:#008CBA}.panel.callout a:not(.button):hover,.panel.callout a:not(.button):focus{color:#0078a0}.panel.radius{border-radius:3px}.dropdown.button,button.dropdown{position:relative;padding-right:3.5625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent;border-style:solid;content:"";display:block;height:0;position:absolute;top:50%;width:0}.dropdown.button::after,button.dropdown::after{border-width:0.375rem;right:1.40625rem;margin-top:-0.15625rem}.dropdown.button::after,button.dropdown::after{border-color:#fff transparent transparent transparent}.dropdown.button.tiny,button.dropdown.tiny{padding-right:2.625rem}.dropdown.button.tiny:after,button.dropdown.tiny:after{border-width:0.375rem;right:1.125rem;margin-top:-0.125rem}.dropdown.button.tiny::after,button.dropdown.tiny::after{border-color:#fff transparent transparent transparent}.dropdown.button.small,button.dropdown.small{padding-right:3.0625rem}.dropdown.button.small::after,button.dropdown.small::after{border-width:0.4375rem;right:1.3125rem;margin-top:-0.15625rem}.dropdown.button.small::after,button.dropdown.small::after{border-color:#fff transparent transparent transparent}.dropdown.button.large,button.dropdown.large{padding-right:3.625rem}.dropdown.button.large::after,button.dropdown.large::after{border-width:0.3125rem;right:1.71875rem;margin-top:-0.15625rem}.dropdown.button.large::after,button.dropdown.large::after{border-color:#fff transparent transparent transparent}.dropdown.button.secondary:after,button.dropdown.secondary:after{border-color:#333 transparent transparent transparent}.th{border:solid 4px #fff;box-shadow:0 0 0 1px rgba(0,0,0,0.2);display:inline-block;line-height:0;max-width:100%;transition:all 200ms ease-out}.th:hover,.th:focus{box-shadow:0 0 6px 1px rgba(0,140,186,0.5)}.th.radius{border-radius:3px}.pricing-table{border:solid 1px #ddd;margin-left:0;margin-bottom:1.25rem}.pricing-table *{list-style:none;line-height:1}.pricing-table .title{background-color:#333;color:#eee;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .price{background-color:#F6F6F6;color:#333;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:2rem;font-weight:normal;padding:0.9375rem 1.25rem;text-align:center}.pricing-table .description{background-color:#fff;border-bottom:dotted 1px #ddd;color:#777;font-size:0.75rem;font-weight:normal;line-height:1.4;padding:0.9375rem;text-align:center}.pricing-table .bullet-item{background-color:#fff;border-bottom:dotted 1px #ddd;color:#333;font-size:0.875rem;font-weight:normal;padding:0.9375rem;text-align:center}.pricing-table .cta-button{background-color:#fff;padding:1.25rem 1.25rem 0;text-align:center}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.slideshow-wrapper{position:relative}.slideshow-wrapper ul{list-style-type:none;margin:0}.slideshow-wrapper ul li,.slideshow-wrapper ul li .orbit-caption{display:none}.slideshow-wrapper ul li:first-child{display:block}.slideshow-wrapper .orbit-container{background-color:transparent}.slideshow-wrapper .orbit-container li{display:block}.slideshow-wrapper .orbit-container li .orbit-caption{display:block}.slideshow-wrapper .orbit-container .orbit-bullets li{display:inline-block}.slideshow-wrapper .preloader{border-radius:1000px;animation-duration:1.5s;animation-iteration-count:infinite;animation-name:rotate;animation-timing-function:linear;border-color:#555 #fff;border:solid 3px;display:block;height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px}.orbit-container{background:none;overflow:hidden;position:relative;width:100%}.orbit-container .orbit-slides-container{list-style:none;margin:0;padding:0;position:relative;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.orbit-container .orbit-slides-container img{display:block;max-width:100%}.orbit-container .orbit-slides-container>*{position:absolute;top:0;width:100%;margin-left:100%}.orbit-container .orbit-slides-container>*:first-child{margin-left:0}.orbit-container .orbit-slides-container>* .orbit-caption{bottom:0;position:absolute;background-color:rgba(51,51,51,0.8);color:#fff;font-size:0.875rem;padding:0.625rem 0.875rem;width:100%}.orbit-container .orbit-slide-number{left:10px;background:transparent;color:#fff;font-size:12px;position:absolute;top:10px;z-index:10}.orbit-container .orbit-slide-number span{font-weight:700;padding:0.3125rem}.orbit-container .orbit-timer{position:absolute;top:12px;right:10px;height:6px;width:100px;z-index:10}.orbit-container .orbit-timer .orbit-progress{height:3px;background-color:rgba(255,255,255,0.3);display:block;width:0;position:relative;right:20px;top:5px}.orbit-container .orbit-timer>span{border:solid 4px #fff;border-bottom:none;border-top:none;display:none;height:14px;position:absolute;top:0;width:11px;right:0}.orbit-container .orbit-timer.paused>span{top:0;width:11px;height:14px;border:inset 8px;border-left-style:solid;border-color:transparent;border-left-color:#fff;right:-4px}.orbit-container .orbit-timer.paused>span.dark{border-left-color:#333}.orbit-container:hover .orbit-timer>span{display:block}.orbit-container .orbit-prev,.orbit-container .orbit-next{background-color:transparent;color:white;height:60px;line-height:50px;margin-top:-25px;position:absolute;text-indent:-9999px !important;top:45%;width:36px;z-index:10}.orbit-container .orbit-prev:hover,.orbit-container .orbit-next:hover{background-color:rgba(0,0,0,0.3)}.orbit-container .orbit-prev>span,.orbit-container .orbit-next>span{border:inset 10px;display:block;height:0;margin-top:-10px;position:absolute;top:50%;width:0}.orbit-container .orbit-prev{left:0}.orbit-container .orbit-prev>span{border-right-style:solid;border-color:transparent;border-right-color:#fff}.orbit-container .orbit-prev:hover>span{border-right-color:#fff}.orbit-container .orbit-next{right:0}.orbit-container .orbit-next>span{border-color:transparent;border-left-style:solid;border-left-color:#fff;left:50%;margin-left:-4px}.orbit-container .orbit-next:hover>span{border-left-color:#fff}.orbit-bullets-container{text-align:center}.orbit-bullets{display:block;float:none;margin:0 auto 30px auto;overflow:hidden;position:relative;text-align:center;top:10px}.orbit-bullets li{background:#ccc;cursor:pointer;display:inline-block;float:none;height:0.5625rem;margin-right:6px;width:0.5625rem;border-radius:1000px}.orbit-bullets li.active{background:#999}.orbit-bullets li:last-child{margin-right:0}.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:none}.touch .orbit-bullets{display:none}@media only screen and (min-width: 40.0625em){.touch .orbit-container .orbit-prev,.touch .orbit-container .orbit-next{display:inherit}.touch .orbit-bullets{display:block}}@media only screen and (max-width: 40em){.orbit-stack-on-small .orbit-slides-container{height:auto !important}.orbit-stack-on-small .orbit-slides-container>*{margin:0 !important;opacity:1 !important;position:relative}.orbit-stack-on-small .orbit-slide-number{display:none}.orbit-timer{display:none}.orbit-next,.orbit-prev{display:none}.orbit-bullets{display:none}}[data-magellan-expedition],[data-magellan-expedition-clone]{background:#fff;min-width:100%;padding:10px;z-index:50}[data-magellan-expedition] .sub-nav,[data-magellan-expedition-clone] .sub-nav{margin-bottom:0}[data-magellan-expedition] .sub-nav dd,[data-magellan-expedition-clone] .sub-nav dd{margin-bottom:0}[data-magellan-expedition] .sub-nav a,[data-magellan-expedition-clone] .sub-nav a{line-height:1.8em}.icon-bar{display:inline-block;font-size:0;width:100%;background:#333}.icon-bar>*{display:block;float:left;font-size:1rem;margin:0 auto;padding:1.25rem;text-align:center;width:25%}.icon-bar>* i,.icon-bar>* img{display:block;margin:0 auto}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem}.icon-bar>* i{font-size:1.875rem;vertical-align:middle}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar.label-right>* i,.icon-bar.label-right>* img{display:inline-block;margin:0 .0625rem 0 0}.icon-bar.label-right>* i+label,.icon-bar.label-right>* img+label{margin-top:0}.icon-bar.label-right>* label{display:inline-block}.icon-bar.vertical.label-right>*{text-align:left}.icon-bar.vertical,.icon-bar.small-vertical{height:100%;width:auto}.icon-bar.vertical .item,.icon-bar.small-vertical .item{float:none;margin:auto;width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.medium-vertical{height:100%;width:auto}.icon-bar.medium-vertical .item{float:none;margin:auto;width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.large-vertical{height:100%;width:auto}.icon-bar.large-vertical .item{float:none;margin:auto;width:auto}}.icon-bar>*{font-size:1rem;padding:1.25rem}.icon-bar>* i+label,.icon-bar>* img+label{margin-top:.0625rem;font-size:1rem}.icon-bar>* i{font-size:1.875rem}.icon-bar>* img{height:1.875rem;width:1.875rem}.icon-bar>* label{color:#fff}.icon-bar>* i{color:#fff}.icon-bar>a:hover{background:#008CBA}.icon-bar>a:hover label{color:#fff}.icon-bar>a:hover i{color:#fff}.icon-bar>a.active{background:#008CBA}.icon-bar>a.active label{color:#fff}.icon-bar>a.active i{color:#fff}.icon-bar .item.disabled{cursor:not-allowed;opacity:0.7;pointer-events:none}.icon-bar .item.disabled>*{opacity:0.7;cursor:not-allowed}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.icon-bar.two-up .item{width:50%}.icon-bar.two-up.vertical .item,.icon-bar.two-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.two-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.two-up.large-vertical .item{width:auto}}.icon-bar.three-up .item{width:33.3333%}.icon-bar.three-up.vertical .item,.icon-bar.three-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.three-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.three-up.large-vertical .item{width:auto}}.icon-bar.four-up .item{width:25%}.icon-bar.four-up.vertical .item,.icon-bar.four-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.four-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.four-up.large-vertical .item{width:auto}}.icon-bar.five-up .item{width:20%}.icon-bar.five-up.vertical .item,.icon-bar.five-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.five-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.five-up.large-vertical .item{width:auto}}.icon-bar.six-up .item{width:16.66667%}.icon-bar.six-up.vertical .item,.icon-bar.six-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.six-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.six-up.large-vertical .item{width:auto}}.icon-bar.seven-up .item{width:14.28571%}.icon-bar.seven-up.vertical .item,.icon-bar.seven-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.seven-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.seven-up.large-vertical .item{width:auto}}.icon-bar.eight-up .item{width:12.5%}.icon-bar.eight-up.vertical .item,.icon-bar.eight-up.small-vertical .item{width:auto}@media only screen and (min-width: 40.0625em){.icon-bar.eight-up.medium-vertical .item{width:auto}}@media only screen and (min-width: 64.0625em){.icon-bar.eight-up.large-vertical .item{width:auto}}.tabs{margin-bottom:0 !important;margin-left:0}.tabs:before,.tabs:after{content:" ";display:table}.tabs:after{clear:both}.tabs dd,.tabs .tab-title{float:left;list-style:none;margin-bottom:0 !important;position:relative}.tabs dd>a,.tabs .tab-title>a{display:block;background-color:#EFEFEF;color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem 2rem}.tabs dd>a:hover,.tabs .tab-title>a:hover{background-color:#e1e1e1}.tabs dd.active a,.tabs .tab-title.active a{background-color:#fff;color:#222}.tabs.radius dd:first-child a,.tabs.radius .tab:first-child a{-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px}.tabs.radius dd:last-child a,.tabs.radius .tab:last-child a{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.tabs.vertical dd,.tabs.vertical .tab-title{position:inherit;float:none;display:block;top:auto}.tabs-content{margin-bottom:1.5rem;width:100%}.tabs-content:before,.tabs-content:after{content:" ";display:table}.tabs-content:after{clear:both}.tabs-content>.content{display:none;float:left;padding:0.9375rem 0;width:100%}.tabs-content>.content.active{display:block;float:none}.tabs-content>.content.contained{padding:0.9375rem}.tabs-content.vertical{display:block}.tabs-content.vertical>.content{padding:0 0.9375rem}@media only screen and (min-width: 40.0625em){.tabs.vertical{float:left;margin:0;margin-bottom:1.25rem !important;max-width:20%;width:20%}.tabs-content.vertical{float:left;margin-left:-1px;max-width:80%;padding-left:1rem;width:80%}}.no-js .tabs-content>.content{display:block;float:none}ul.pagination{display:block;margin-left:-0.3125rem;min-height:1.5rem}ul.pagination li{color:#222;font-size:0.875rem;height:1.5rem;margin-left:0.3125rem}ul.pagination li a,ul.pagination li button{border-radius:3px;transition:background-color 300ms ease-out;background:none;color:#999;display:block;font-size:1em;font-weight:normal;line-height:inherit;padding:0.0625rem 0.625rem 0.0625rem}ul.pagination li:hover a,ul.pagination li a:focus,ul.pagination li:hover button,ul.pagination li button:focus{background:#e6e6e6}ul.pagination li.unavailable a,ul.pagination li.unavailable button{cursor:default;color:#999}ul.pagination li.unavailable:hover a,ul.pagination li.unavailable a:focus,ul.pagination li.unavailable:hover button,ul.pagination li.unavailable button:focus{background:transparent}ul.pagination li.current a,ul.pagination li.current button{background:#008CBA;color:#fff;cursor:default;font-weight:bold}ul.pagination li.current a:hover,ul.pagination li.current a:focus,ul.pagination li.current button:hover,ul.pagination li.current button:focus{background:#008CBA}ul.pagination li{display:block;float:left}.pagination-centered{text-align:center}.pagination-centered ul.pagination li{display:inline-block;float:none}.side-nav{display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;list-style-position:outside;list-style-type:none;margin:0;padding:0.875rem 0}.side-nav li{font-size:0.875rem;font-weight:normal;margin:0 0 0.4375rem 0}.side-nav li a:not(.button){color:#008CBA;display:block;margin:0;padding:0.4375rem 0.875rem}.side-nav li a:not(.button):hover,.side-nav li a:not(.button):focus{background:rgba(0,0,0,0.025);color:#1cc7ff}.side-nav li a:not(.button):active{color:#1cc7ff}.side-nav li.active>a:first-child:not(.button){color:#1cc7ff;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal}.side-nav li.divider{border-top:1px solid;height:0;list-style:none;padding:0;border-top-color:#e6e6e6}.side-nav li.heading{color:#008CBA;font-size:0.875rem;font-weight:bold;text-transform:uppercase}.accordion{margin-bottom:0}.accordion:before,.accordion:after{content:" ";display:table}.accordion:after{clear:both}.accordion .accordion-navigation,.accordion dd{display:block;margin-bottom:0 !important}.accordion .accordion-navigation.active>a,.accordion dd.active>a{background:#e8e8e8}.accordion .accordion-navigation>a,.accordion dd>a{background:#EFEFEF;color:#222;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:1rem;padding:1rem}.accordion .accordion-navigation>a:hover,.accordion dd>a:hover{background:#e3e3e3}.accordion .accordion-navigation>.content,.accordion dd>.content{display:none;padding:0.9375rem}.accordion .accordion-navigation>.content.active,.accordion dd>.content.active{background:#fff;display:block}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}.text-justify{text-align:justify !important}@media only screen and (max-width: 40em){.small-only-text-left{text-align:left !important}.small-only-text-right{text-align:right !important}.small-only-text-center{text-align:center !important}.small-only-text-justify{text-align:justify !important}}@media only screen{.small-text-left{text-align:left !important}.small-text-right{text-align:right !important}.small-text-center{text-align:center !important}.small-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em) and (max-width: 64em){.medium-only-text-left{text-align:left !important}.medium-only-text-right{text-align:right !important}.medium-only-text-center{text-align:center !important}.medium-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 40.0625em){.medium-text-left{text-align:left !important}.medium-text-right{text-align:right !important}.medium-text-center{text-align:center !important}.medium-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em) and (max-width: 90em){.large-only-text-left{text-align:left !important}.large-only-text-right{text-align:right !important}.large-only-text-center{text-align:center !important}.large-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 64.0625em){.large-text-left{text-align:left !important}.large-text-right{text-align:right !important}.large-text-center{text-align:center !important}.large-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em) and (max-width: 120em){.xlarge-only-text-left{text-align:left !important}.xlarge-only-text-right{text-align:right !important}.xlarge-only-text-center{text-align:center !important}.xlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 90.0625em){.xlarge-text-left{text-align:left !important}.xlarge-text-right{text-align:right !important}.xlarge-text-center{text-align:center !important}.xlarge-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em) and (max-width: 6249999.9375em){.xxlarge-only-text-left{text-align:left !important}.xxlarge-only-text-right{text-align:right !important}.xxlarge-only-text-center{text-align:center !important}.xxlarge-only-text-justify{text-align:justify !important}}@media only screen and (min-width: 120.0625em){.xxlarge-text-left{text-align:left !important}.xxlarge-text-right{text-align:right !important}.xxlarge-text-center{text-align:center !important}.xxlarge-text-justify{text-align:justify !important}}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}a{color:#008CBA;line-height:inherit;text-decoration:none}a:hover,a:focus{color:#0078a0}a img{border:none}p{font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.6;margin-bottom:1.25rem;text-rendering:optimizeLegibility}p.lead{font-size:1.21875rem;line-height:1.6}p aside{font-size:0.875rem;font-style:italic;line-height:1.35}h1,h2,h3,h4,h5,h6{color:#222;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;line-height:1.4;margin-bottom:0.5rem;margin-top:0.2rem;text-rendering:optimizeLegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#6f6f6f;font-size:60%;line-height:0}h1{font-size:2.125rem}h2{font-size:1.6875rem}h3{font-size:1.375rem}h4{font-size:1.125rem}h5{font-size:1.125rem}h6{font-size:1rem}.subheader{line-height:1.4;color:#6f6f6f;font-weight:normal;margin-top:0.2rem;margin-bottom:0.5rem}hr{border:solid #ddd;border-width:1px 0 0;clear:both;height:0;margin:1.25rem 0 1.1875rem}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{background-color:#f8f8f8;border-color:#dfdfdf;border-style:solid;border-width:1px;color:#333;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;padding:0.125rem 0.3125rem 0.0625rem}ul,ol,dl{font-family:inherit;font-size:1rem;line-height:1.6;list-style-position:outside;margin-bottom:1.25rem}ul{margin-left:1.1rem}ul.no-bullet{margin-left:0}ul.no-bullet li ul,ul.no-bullet li ol{margin-left:1.25rem;margin-bottom:0;list-style:none}ul li ul,ul li ol{margin-left:1.25rem;margin-bottom:0}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square;margin-left:1.1rem}ul.circle{list-style-type:circle;margin-left:1.1rem}ul.disc{list-style-type:disc;margin-left:1.1rem}ul.no-bullet{list-style:none}ol{margin-left:1.4rem}ol li ul,ol li ol{margin-left:1.25rem;margin-bottom:0}dl dt{margin-bottom:0.3rem;font-weight:bold}dl dd{margin-bottom:0.75rem}abbr,acronym{text-transform:uppercase;font-size:90%;color:#222;cursor:help}abbr{text-transform:none}abbr[title]{border-bottom:1px dotted #ddd}blockquote{margin:0 0 1.25rem;padding:0.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #ddd}blockquote cite{display:block;font-size:0.8125rem;color:#555}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:#555}blockquote,blockquote p{line-height:1.6;color:#6f6f6f}.vcard{display:inline-block;margin:0 0 1.25rem 0;border:1px solid #ddd;padding:0.625rem 0.75rem}.vcard li{margin:0;display:block}.vcard .fn{font-weight:bold;font-size:0.9375rem}.vevent .summary{font-weight:bold}.vevent abbr{cursor:default;text-decoration:none;font-weight:bold;border:none;padding:0 0.0625rem}@media only screen and (min-width: 40.0625em){h1,h2,h3,h4,h5,h6{line-height:1.4}h1{font-size:2.75rem}h2{font-size:2.3125rem}h3{font-size:1.6875rem}h4{font-size:1.4375rem}h5{font-size:1.125rem}h6{font-size:1rem}}.split.button{position:relative;padding-right:5.0625rem}.split.button span{display:block;height:100%;position:absolute;right:0;top:0;border-left:solid 1px}.split.button span:after{position:absolute;content:"";width:0;height:0;display:block;border-style:inset;top:50%;left:50%}.split.button span:active{background-color:rgba(0,0,0,0.1)}.split.button span{border-left-color:rgba(255,255,255,0.5)}.split.button span{width:3.09375rem}.split.button span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button span:after{border-color:#fff transparent transparent transparent}.split.button.secondary span{border-left-color:rgba(255,255,255,0.5)}.split.button.secondary span:after{border-color:#fff transparent transparent transparent}.split.button.alert span{border-left-color:rgba(255,255,255,0.5)}.split.button.success span{border-left-color:rgba(255,255,255,0.5)}.split.button.tiny{padding-right:3.75rem}.split.button.tiny span{width:2.25rem}.split.button.tiny span:after{border-top-style:solid;border-width:0.375rem;margin-left:-0.375rem;top:48%}.split.button.small{padding-right:4.375rem}.split.button.small span{width:2.625rem}.split.button.small span:after{border-top-style:solid;border-width:0.4375rem;margin-left:-0.375rem;top:48%}.split.button.large{padding-right:5.5rem}.split.button.large span{width:3.4375rem}.split.button.large span:after{border-top-style:solid;border-width:0.3125rem;margin-left:-0.375rem;top:48%}.split.button.expand{padding-left:2rem}.split.button.secondary span:after{border-color:#333 transparent transparent transparent}.split.button.radius span{-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}.split.button.round span{-webkit-border-bottom-right-radius:1000px;-webkit-border-top-right-radius:1000px;border-bottom-right-radius:1000px;border-top-right-radius:1000px}.split.button.no-pip span:before{border-style:none}.split.button.no-pip span:after{border-style:none}.split.button.no-pip span>i{display:block;left:50%;margin-left:-0.28889em;margin-top:-0.48889em;position:absolute;top:50%}.reveal-modal-bg{background:#000;background:rgba(0,0,0,0.45);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1004;left:0}.reveal-modal{border-radius:3px;display:none;position:absolute;top:0;visibility:hidden;width:100%;z-index:1005;left:0;background-color:#fff;padding:1.875rem;border:solid 1px #666;box-shadow:0 0 10px rgba(0,0,0,0.4)}@media only screen and (max-width: 40em){.reveal-modal{min-height:100vh}}.reveal-modal .column,.reveal-modal .columns{min-width:0}.reveal-modal>:first-child{margin-top:0}.reveal-modal>:last-child{margin-bottom:0}@media only screen and (min-width: 40.0625em){.reveal-modal{left:0;margin:0 auto;max-width:62.5rem;right:0;width:80%}}@media only screen and (min-width: 40.0625em){.reveal-modal{top:6.25rem}}.reveal-modal.radius{border-radius:3px}.reveal-modal.round{border-radius:1000px}.reveal-modal.collapse{padding:0}@media only screen and (min-width: 40.0625em){.reveal-modal.tiny{left:0;margin:0 auto;max-width:62.5rem;right:0;width:30%}}@media only screen and (min-width: 40.0625em){.reveal-modal.small{left:0;margin:0 auto;max-width:62.5rem;right:0;width:40%}}@media only screen and (min-width: 40.0625em){.reveal-modal.medium{left:0;margin:0 auto;max-width:62.5rem;right:0;width:60%}}@media only screen and (min-width: 40.0625em){.reveal-modal.large{left:0;margin:0 auto;max-width:62.5rem;right:0;width:70%}}@media only screen and (min-width: 40.0625em){.reveal-modal.xlarge{left:0;margin:0 auto;max-width:62.5rem;right:0;width:95%}}.reveal-modal.full{height:100vh;height:100%;left:0;margin-left:0 !important;max-width:none !important;min-height:100vh;top:0}@media only screen and (min-width: 40.0625em){.reveal-modal.full{left:0;margin:0 auto;max-width:62.5rem;right:0;width:100%}}.reveal-modal.toback{z-index:1003}.reveal-modal .close-reveal-modal{color:#aaa;cursor:pointer;font-size:2.5rem;font-weight:bold;line-height:1;position:absolute;top:0.625rem;right:1.375rem}.has-tip{border-bottom:dotted 1px #ccc;color:#333;cursor:help;font-weight:bold}.has-tip:hover,.has-tip:focus{border-bottom:dotted 1px #003f54;color:#008CBA}.has-tip.tip-left,.has-tip.tip-right{float:none !important}.tooltip{background:#333;color:#fff;display:none;font-size:0.875rem;font-weight:normal;line-height:1.3;max-width:300px;padding:0.75rem;position:absolute;width:100%;z-index:1006;left:50%}.tooltip>.nub{border-color:transparent transparent #333 transparent;border:solid 5px;display:block;height:0;pointer-events:none;position:absolute;top:-10px;width:0;left:5px}.tooltip>.nub.rtl{left:auto;right:5px}.tooltip.radius{border-radius:3px}.tooltip.round{border-radius:1000px}.tooltip.round>.nub{left:2rem}.tooltip.opened{border-bottom:dotted 1px #003f54 !important;color:#008CBA !important}.tap-to-close{color:#777;display:block;font-size:0.625rem;font-weight:normal}@media only screen and (min-width: 40.0625em){.tooltip>.nub{border-color:transparent transparent #333 transparent;top:-10px}.tooltip.tip-top>.nub{border-color:#333 transparent transparent transparent;bottom:-10px;top:auto}.tooltip.tip-left,.tooltip.tip-right{float:none !important}.tooltip.tip-left>.nub{border-color:transparent transparent transparent #333;left:auto;margin-top:-5px;right:-10px;top:50%}.tooltip.tip-right>.nub{border-color:transparent #333 transparent transparent;left:-10px;margin-top:-5px;right:auto;top:50%}}.clearing-thumbs,[data-clearing]{list-style:none;margin-left:0;margin-bottom:0}.clearing-thumbs:before,.clearing-thumbs:after,[data-clearing]:before,[data-clearing]:after{content:" ";display:table}.clearing-thumbs:after,[data-clearing]:after{clear:both}.clearing-thumbs li,[data-clearing] li{float:left;margin-right:10px}.clearing-thumbs[class*="block-grid-"] li,[data-clearing][class*="block-grid-"] li{margin-right:0}.clearing-blackout{background:#333;height:100%;position:fixed;top:0;width:100%;z-index:998;left:0}.clearing-blackout .clearing-close{display:block}.clearing-container{height:100%;margin:0;overflow:hidden;position:relative;z-index:998}.clearing-touch-label{color:#aaa;font-size:.6em;left:50%;position:absolute;top:50%}.visible-img{height:95%;position:relative}.visible-img img{position:absolute;left:50%;top:50%;-webkit-transform:translateY(-50%) translateX(-50%);-moz-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);-o-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%);max-height:100%;max-width:100%}.clearing-caption{background:#333;bottom:0;color:#ccc;font-size:0.875em;line-height:1.3;margin-bottom:0;padding:10px 30px 20px;position:absolute;text-align:center;width:100%;left:0}.clearing-close{color:#ccc;display:none;font-size:30px;line-height:1;padding-left:20px;padding-top:10px;z-index:999}.clearing-close:hover,.clearing-close:focus{color:#ccc}.clearing-assembled .clearing-container{height:100%}.clearing-assembled .clearing-container .carousel>ul{display:none}.clearing-feature li{display:none}.clearing-feature li.clearing-featured-img{display:block}@media only screen and (min-width: 40.0625em){.clearing-main-prev,.clearing-main-next{height:100%;position:absolute;top:0;width:40px}.clearing-main-prev>span,.clearing-main-next>span{border:solid 12px;display:block;height:0;position:absolute;top:50%;width:0}.clearing-main-prev>span:hover,.clearing-main-next>span:hover{opacity:.8}.clearing-main-prev{left:0}.clearing-main-prev>span{left:5px;border-color:transparent;border-right-color:#ccc}.clearing-main-next{right:0}.clearing-main-next>span{border-color:transparent;border-left-color:#ccc}.clearing-main-prev.disabled,.clearing-main-next.disabled{opacity:.3}.clearing-assembled .clearing-container .carousel{background:rgba(51,51,51,0.8);height:120px;margin-top:10px;text-align:center}.clearing-assembled .clearing-container .carousel>ul{display:inline-block;z-index:999;height:100%;position:relative;float:none}.clearing-assembled .clearing-container .carousel>ul li{clear:none;cursor:pointer;display:block;float:left;margin-right:0;min-height:inherit;opacity:.4;overflow:hidden;padding:0;position:relative;width:120px}.clearing-assembled .clearing-container .carousel>ul li.fix-height img{height:100%;max-width:none}.clearing-assembled .clearing-container .carousel>ul li a.th{border:none;box-shadow:none;display:block}.clearing-assembled .clearing-container .carousel>ul li img{cursor:pointer !important;width:100% !important}.clearing-assembled .clearing-container .carousel>ul li.visible{opacity:1}.clearing-assembled .clearing-container .carousel>ul li:hover{opacity:.8}.clearing-assembled .clearing-container .visible-img{background:#333;height:85%;overflow:hidden}.clearing-close{padding-left:0;padding-top:0;position:absolute;top:10px;right:20px}}.progress{background-color:#F6F6F6;border:1px solid #fff;height:1.5625rem;margin-bottom:0.625rem;padding:0.125rem}.progress .meter{background:#008CBA;display:block;height:100%}.progress.secondary .meter{background:#e7e7e7;display:block;height:100%}.progress.success .meter{background:#43AC6A;display:block;height:100%}.progress.alert .meter{background:#f04124;display:block;height:100%}.progress.radius{border-radius:3px}.progress.radius .meter{border-radius:2px}.progress.round{border-radius:1000px}.progress.round .meter{border-radius:999px}.sub-nav{display:block;margin:-0.25rem 0 1.125rem;overflow:hidden;padding-top:0.25rem;width:auto}.sub-nav dt{text-transform:uppercase}.sub-nav dt,.sub-nav dd,.sub-nav li{color:#999;float:left;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:0.875rem;font-weight:normal;margin-left:1rem;margin-bottom:0}.sub-nav dt a,.sub-nav dd a,.sub-nav li a{color:#999;padding:0.1875rem 1rem;text-decoration:none}.sub-nav dt a:hover,.sub-nav dd a:hover,.sub-nav li a:hover{color:#737373}.sub-nav dt.active a,.sub-nav dd.active a,.sub-nav li.active a{border-radius:3px;background:#008CBA;color:#fff;cursor:default;font-weight:normal;padding:0.1875rem 1rem}.sub-nav dt.active a:hover,.sub-nav dd.active a:hover,.sub-nav li.active a:hover{background:#0078a0}.joyride-list{display:none}.joyride-tip-guide{background:#333;color:#fff;display:none;font-family:inherit;font-weight:normal;position:absolute;top:0;width:95%;z-index:101;left:2.5%}.lt-ie9 .joyride-tip-guide{margin-left:-400px;max-width:800px;left:50%}.joyride-content-wrapper{padding:1.125rem 1.25rem 1.5rem;width:100%}.joyride-content-wrapper .button{margin-bottom:0 !important}.joyride-content-wrapper .joyride-prev-tip{margin-right:10px}.joyride-tip-guide .joyride-nub{border:10px solid #333;display:block;height:0;position:absolute;width:0;left:22px}.joyride-tip-guide .joyride-nub.top{border-color:#333;border-top-color:transparent !important;border-top-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;top:-20px}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-bottom-style:solid;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{right:-20px}.joyride-tip-guide .joyride-nub.left{left:-20px}.joyride-tip-guide h1,.joyride-tip-guide h2,.joyride-tip-guide h3,.joyride-tip-guide h4,.joyride-tip-guide h5,.joyride-tip-guide h6{color:#fff;font-weight:bold;line-height:1.25;margin:0}.joyride-tip-guide p{font-size:0.875rem;line-height:1.3;margin:0 0 1.125rem 0}.joyride-timer-indicator-wrap{border:solid 1px #555;bottom:1rem;height:3px;position:absolute;width:50px;right:1.0625rem}.joyride-timer-indicator{background:#666;display:block;height:inherit;width:0}.joyride-close-tip{color:#777 !important;font-size:24px;font-weight:normal;line-height:.5 !important;position:absolute;text-decoration:none;top:10px;right:12px}.joyride-close-tip:hover,.joyride-close-tip:focus{color:#eee !important}.joyride-modal-bg{background:rgba(0,0,0,0.5);cursor:pointer;display:none;height:100%;position:fixed;top:0;width:100%;z-index:100;left:0}.joyride-expose-wrapper{background-color:#fff;border-radius:3px;box-shadow:0 0 15px #fff;position:absolute;z-index:102}.joyride-expose-cover{background:transparent;border-radius:3px;left:0;position:absolute;top:0;z-index:9999}@media only screen and (min-width: 40.0625em){.joyride-tip-guide{width:300px;left:inherit}.joyride-tip-guide .joyride-nub.bottom{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-right-color:transparent !important;bottom:-20px}.joyride-tip-guide .joyride-nub.right{border-color:#333 !important;border-right-color:transparent !important;border-bottom-color:transparent !important;border-top-color:transparent !important;left:auto;right:-20px;top:22px}.joyride-tip-guide .joyride-nub.left{border-color:#333 !important;border-bottom-color:transparent !important;border-left-color:transparent !important;border-top-color:transparent !important;left:-20px;right:auto;top:22px}}.label{display:inline-block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1;margin-bottom:auto;position:relative;text-align:center;text-decoration:none;white-space:nowrap;padding:0.25rem 0.5rem 0.25rem;font-size:0.6875rem;background-color:#008CBA;color:#fff}.label.radius{border-radius:3px}.label.round{border-radius:1000px}.label.alert{background-color:#f04124;color:#fff}.label.warning{background-color:#f08a24;color:#fff}.label.success{background-color:#43AC6A;color:#fff}.label.secondary{background-color:#e7e7e7;color:#333}.label.info{background-color:#a0d3e8;color:#333}.off-canvas-wrap{-webkit-backface-visibility:hidden;position:relative;width:100%;overflow:hidden}.off-canvas-wrap.move-right,.off-canvas-wrap.move-left{min-height:100%;-webkit-overflow-scrolling:touch}.inner-wrap{position:relative;width:100%;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.inner-wrap:before,.inner-wrap:after{content:" ";display:table}.inner-wrap:after{clear:both}.tab-bar{-webkit-backface-visibility:hidden;background:#333;color:#fff;height:2.8125rem;line-height:2.8125rem;position:relative}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4,.tab-bar h5,.tab-bar h6{color:#fff;font-weight:bold;line-height:2.8125rem;margin:0}.tab-bar h1,.tab-bar h2,.tab-bar h3,.tab-bar h4{font-size:1.125rem}.left-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-right:solid 1px #1a1a1a;left:0}.right-small{height:2.8125rem;position:absolute;top:0;width:2.8125rem;border-left:solid 1px #1a1a1a;right:0}.tab-bar-section{height:2.8125rem;padding:0 0.625rem;position:absolute;text-align:center;top:0}.tab-bar-section.left{text-align:left}.tab-bar-section.right{text-align:right}.tab-bar-section.left{left:0;right:2.8125rem}.tab-bar-section.right{left:2.8125rem;right:0}.tab-bar-section.middle{left:2.8125rem;right:2.8125rem}.tab-bar .menu-icon{color:#fff;display:block;height:2.8125rem;padding:0;position:relative;text-indent:2.1875rem;transform:translate3d(0, 0, 0);width:2.8125rem}.tab-bar .menu-icon span::after{content:"";display:block;height:0;position:absolute;top:50%;margin-top:-0.5rem;left:0.90625rem;box-shadow:0 0 0 1px #fff,0 7px 0 1px #fff,0 14px 0 1px #fff;width:1rem}.tab-bar .menu-icon span:hover:after{box-shadow:0 0 0 1px #b3b3b3,0 7px 0 1px #b3b3b3,0 14px 0 1px #b3b3b3}.left-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.left-off-canvas-menu *{-webkit-backface-visibility:hidden}.right-off-canvas-menu{-webkit-backface-visibility:hidden;background:#333;bottom:0;box-sizing:content-box;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;transition:transform 500ms ease 0s;width:15.625rem;z-index:1001;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0}.right-off-canvas-menu *{-webkit-backface-visibility:hidden}ul.off-canvas-list{list-style-type:none;margin:0;padding:0}ul.off-canvas-list li label{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;display:block;font-size:0.75rem;font-weight:bold;margin:0;padding:0.3rem 0.9375rem;text-transform:uppercase}ul.off-canvas-list li a{border-bottom:1px solid #262626;color:rgba(255,255,255,0.7);display:block;padding:0.66667rem;transition:background 300ms ease}ul.off-canvas-list li a:hover{background:#242424}ul.off-canvas-list li a:active{background:#242424}.move-right>.inner-wrap{-webkit-transform:translate3d(15.625rem, 0, 0);-moz-transform:translate3d(15.625rem, 0, 0);-ms-transform:translate(15.625rem, 0);-ms-transform:translate3d(15.625rem, 0, 0);-o-transform:translate3d(15.625rem, 0, 0);transform:translate3d(15.625rem, 0, 0)}.move-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.move-left>.inner-wrap{-webkit-transform:translate3d(-15.625rem, 0, 0);-moz-transform:translate3d(-15.625rem, 0, 0);-ms-transform:translate(-15.625rem, 0);-ms-transform:translate3d(-15.625rem, 0, 0);-o-transform:translate3d(-15.625rem, 0, 0);transform:translate3d(-15.625rem, 0, 0)}.move-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.move-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap .left-off-canvas-menu,.offcanvas-overlap .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-left .right-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-left .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-left .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.offcanvas-overlap-right .left-off-canvas-menu{-ms-transform:none;-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none;z-index:1003}.offcanvas-overlap-right .exit-off-canvas{-webkit-backface-visibility:hidden;box-shadow:-4px 0 4px rgba(0,0,0,0.5),4px 0 4px rgba(0,0,0,0.5);cursor:pointer;transition:background 300ms ease;-webkit-tap-highlight-color:transparent;background:rgba(255,255,255,0.2);bottom:0;display:block;left:0;position:absolute;right:0;top:0;z-index:1002}@media only screen and (min-width: 40.0625em){.offcanvas-overlap-right .exit-off-canvas:hover{background:rgba(255,255,255,0.05)}}.no-csstransforms .left-off-canvas-menu{left:-15.625rem}.no-csstransforms .right-off-canvas-menu{right:-15.625rem}.no-csstransforms .move-left>.inner-wrap{right:15.625rem}.no-csstransforms .move-right>.inner-wrap{left:15.625rem}.left-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(-100%, 0, 0);-moz-transform:translate3d(-100%, 0, 0);-ms-transform:translate(-100%, 0);-ms-transform:translate3d(-100%, 0, 0);-o-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.left-submenu *{-webkit-backface-visibility:hidden}.left-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.left-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.left-submenu .back>a:before{content:"\AB";margin-right:.5rem;display:inline}.left-submenu.move-right,.left-submenu.offcanvas-overlap-right,.left-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.right-submenu{-webkit-backface-visibility:hidden;-webkit-overflow-scrolling:touch;background:#333;bottom:0;box-sizing:content-box;margin:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:0;width:15.625rem;z-index:1002;-webkit-transform:translate3d(100%, 0, 0);-moz-transform:translate3d(100%, 0, 0);-ms-transform:translate(100%, 0);-ms-transform:translate3d(100%, 0, 0);-o-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);right:0;-webkit-transition:-webkit-transform 500ms ease;-moz-transition:-moz-transform 500ms ease;-ms-transition:-ms-transform 500ms ease;-o-transition:-o-transform 500ms ease;transition:transform 500ms ease}.right-submenu *{-webkit-backface-visibility:hidden}.right-submenu .back>a{background:#444;border-bottom:none;border-top:1px solid #5e5e5e;color:#999;font-weight:bold;padding:0.3rem 0.9375rem;text-transform:uppercase;margin:0}.right-submenu .back>a:hover{background:#303030;border-bottom:none;border-top:1px solid #5e5e5e}.right-submenu .back>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-submenu.move-left,.right-submenu.offcanvas-overlap-left,.right-submenu.offcanvas-overlap{-webkit-transform:translate3d(0%, 0, 0);-moz-transform:translate3d(0%, 0, 0);-ms-transform:translate(0%, 0);-ms-transform:translate3d(0%, 0, 0);-o-transform:translate3d(0%, 0, 0);transform:translate3d(0%, 0, 0)}.left-off-canvas-menu ul.off-canvas-list li.has-submenu>a:after{content:"\BB";margin-left:.5rem;display:inline}.right-off-canvas-menu ul.off-canvas-list li.has-submenu>a:before{content:"\AB";margin-right:.5rem;display:inline}.f-dropdown{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:2px;max-width:200px}.f-dropdown.open{display:block}.f-dropdown>*:first-child{margin-top:0}.f-dropdown>*:last-child{margin-bottom:0}.f-dropdown:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent #fff transparent;border-bottom-style:solid;position:absolute;top:-12px;left:10px;z-index:89}.f-dropdown:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent #ccc transparent;border-bottom-style:solid;position:absolute;top:-14px;left:9px;z-index:88}.f-dropdown.right:before{left:auto;right:10px}.f-dropdown.right:after{left:auto;right:9px}.f-dropdown.drop-right{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:2px;max-width:200px}.f-dropdown.drop-right.open{display:block}.f-dropdown.drop-right>*:first-child{margin-top:0}.f-dropdown.drop-right>*:last-child{margin-bottom:0}.f-dropdown.drop-right:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent #fff transparent transparent;border-right-style:solid;position:absolute;top:10px;left:-12px;z-index:89}.f-dropdown.drop-right:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent #ccc transparent transparent;border-right-style:solid;position:absolute;top:9px;left:-14px;z-index:88}.f-dropdown.drop-left{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-top:0;margin-left:-2px;max-width:200px}.f-dropdown.drop-left.open{display:block}.f-dropdown.drop-left>*:first-child{margin-top:0}.f-dropdown.drop-left>*:last-child{margin-bottom:0}.f-dropdown.drop-left:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #fff;border-left-style:solid;position:absolute;top:10px;right:-12px;left:auto;z-index:89}.f-dropdown.drop-left:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:transparent transparent transparent #ccc;border-left-style:solid;position:absolute;top:9px;right:-14px;left:auto;z-index:88}.f-dropdown.drop-top{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;width:100%;z-index:89;margin-left:0;margin-top:-2px;max-width:200px}.f-dropdown.drop-top.open{display:block}.f-dropdown.drop-top>*:first-child{margin-top:0}.f-dropdown.drop-top>*:last-child{margin-bottom:0}.f-dropdown.drop-top:before{border:inset 6px;content:"";display:block;height:0;width:0;border-color:#fff transparent transparent transparent;border-top-style:solid;bottom:-12px;position:absolute;top:auto;left:10px;right:auto;z-index:89}.f-dropdown.drop-top:after{border:inset 7px;content:"";display:block;height:0;width:0;border-color:#ccc transparent transparent transparent;border-top-style:solid;bottom:-14px;position:absolute;top:auto;left:9px;right:auto;z-index:88}.f-dropdown li{cursor:pointer;font-size:0.875rem;line-height:1.125rem;margin:0}.f-dropdown li:hover,.f-dropdown li:focus{background:#eee}.f-dropdown li.radius{border-radius:3px}.f-dropdown li a{display:block;padding:0.5rem;color:#555}.f-dropdown.content{display:none;left:-9999px;list-style:none;margin-left:0;position:absolute;background:#fff;border:solid 1px #ccc;font-size:0.875rem;height:auto;max-height:none;padding:1.25rem;width:100%;z-index:89;max-width:200px}.f-dropdown.content.open{display:block}.f-dropdown.content>*:first-child{margin-top:0}.f-dropdown.content>*:last-child{margin-bottom:0}.f-dropdown.tiny{max-width:200px}.f-dropdown.small{max-width:300px}.f-dropdown.medium{max-width:500px}.f-dropdown.large{max-width:800px}.f-dropdown.mega{width:100% !important;max-width:100% !important}.f-dropdown.mega.open{left:0 !important}table{background:#fff;border:solid 1px #ddd;margin-bottom:1.25rem;table-layout:auto}table caption{background:transparent;color:#222;font-size:1rem;font-weight:bold}table thead{background:#F5F5F5}table thead tr th,table thead tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tfoot{background:#F5F5F5}table tfoot tr th,table tfoot tr td{color:#222;font-size:0.875rem;font-weight:bold;padding:0.5rem 0.625rem 0.625rem}table tr th,table tr td{color:#222;font-size:0.875rem;padding:0.5625rem 0.625rem;text-align:left}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#F9F9F9}table thead tr th,table tfoot tr th,table tfoot tr td,table tbody tr th,table tbody tr td,table tr td{display:table-cell;line-height:1.125rem}.range-slider{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:block;height:1rem;width:100%;background:#FAFAFA}.range-slider.vertical-range{border:1px solid #ddd;margin:1.25rem 0;position:relative;-ms-touch-action:none;touch-action:none;display:inline-block;height:12.5rem;width:1rem}.range-slider.vertical-range .range-slider-handle{bottom:-10.5rem;margin-left:-0.5rem;margin-top:0;position:absolute}.range-slider.vertical-range .range-slider-active-segment{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-top-left-radius:initial;bottom:0;height:auto;width:0.875rem}.range-slider.radius{background:#FAFAFA;border-radius:3px}.range-slider.radius .range-slider-handle{background:#008CBA;border-radius:3px}.range-slider.radius .range-slider-handle:hover{background:#007ba4}.range-slider.round{background:#FAFAFA;border-radius:1000px}.range-slider.round .range-slider-handle{background:#008CBA;border-radius:1000px}.range-slider.round .range-slider-handle:hover{background:#007ba4}.range-slider.disabled,.range-slider[disabled]{background:#FAFAFA;cursor:not-allowed;opacity:0.7}.range-slider.disabled .range-slider-handle,.range-slider[disabled] .range-slider-handle{background:#008CBA;cursor:default;opacity:0.7}.range-slider.disabled .range-slider-handle:hover,.range-slider[disabled] .range-slider-handle:hover{background:#007ba4}.range-slider-active-segment{background:#e5e5e5;border-bottom-left-radius:inherit;border-top-left-radius:inherit;display:inline-block;height:0.875rem;position:absolute}.range-slider-handle{border:1px solid none;cursor:pointer;display:inline-block;height:1.375rem;position:absolute;top:-0.3125rem;width:2rem;z-index:1;-ms-touch-action:manipulation;touch-action:manipulation;background:#008CBA}.range-slider-handle:hover{background:#007ba4}[class*="block-grid-"]{display:block;padding:0;margin:0 -0.625rem}[class*="block-grid-"]:before,[class*="block-grid-"]:after{content:" ";display:table}[class*="block-grid-"]:after{clear:both}[class*="block-grid-"]>li{display:block;float:left;height:auto;padding:0 0.625rem 1.25rem}@media only screen{.small-block-grid-1>li{list-style:none;width:100%}.small-block-grid-1>li:nth-of-type(1n){clear:none}.small-block-grid-1>li:nth-of-type(1n+1){clear:both}.small-block-grid-2>li{list-style:none;width:50%}.small-block-grid-2>li:nth-of-type(1n){clear:none}.small-block-grid-2>li:nth-of-type(2n+1){clear:both}.small-block-grid-3>li{list-style:none;width:33.33333%}.small-block-grid-3>li:nth-of-type(1n){clear:none}.small-block-grid-3>li:nth-of-type(3n+1){clear:both}.small-block-grid-4>li{list-style:none;width:25%}.small-block-grid-4>li:nth-of-type(1n){clear:none}.small-block-grid-4>li:nth-of-type(4n+1){clear:both}.small-block-grid-5>li{list-style:none;width:20%}.small-block-grid-5>li:nth-of-type(1n){clear:none}.small-block-grid-5>li:nth-of-type(5n+1){clear:both}.small-block-grid-6>li{list-style:none;width:16.66667%}.small-block-grid-6>li:nth-of-type(1n){clear:none}.small-block-grid-6>li:nth-of-type(6n+1){clear:both}.small-block-grid-7>li{list-style:none;width:14.28571%}.small-block-grid-7>li:nth-of-type(1n){clear:none}.small-block-grid-7>li:nth-of-type(7n+1){clear:both}.small-block-grid-8>li{list-style:none;width:12.5%}.small-block-grid-8>li:nth-of-type(1n){clear:none}.small-block-grid-8>li:nth-of-type(8n+1){clear:both}.small-block-grid-9>li{list-style:none;width:11.11111%}.small-block-grid-9>li:nth-of-type(1n){clear:none}.small-block-grid-9>li:nth-of-type(9n+1){clear:both}.small-block-grid-10>li{list-style:none;width:10%}.small-block-grid-10>li:nth-of-type(1n){clear:none}.small-block-grid-10>li:nth-of-type(10n+1){clear:both}.small-block-grid-11>li{list-style:none;width:9.09091%}.small-block-grid-11>li:nth-of-type(1n){clear:none}.small-block-grid-11>li:nth-of-type(11n+1){clear:both}.small-block-grid-12>li{list-style:none;width:8.33333%}.small-block-grid-12>li:nth-of-type(1n){clear:none}.small-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 40.0625em){.medium-block-grid-1>li{list-style:none;width:100%}.medium-block-grid-1>li:nth-of-type(1n){clear:none}.medium-block-grid-1>li:nth-of-type(1n+1){clear:both}.medium-block-grid-2>li{list-style:none;width:50%}.medium-block-grid-2>li:nth-of-type(1n){clear:none}.medium-block-grid-2>li:nth-of-type(2n+1){clear:both}.medium-block-grid-3>li{list-style:none;width:33.33333%}.medium-block-grid-3>li:nth-of-type(1n){clear:none}.medium-block-grid-3>li:nth-of-type(3n+1){clear:both}.medium-block-grid-4>li{list-style:none;width:25%}.medium-block-grid-4>li:nth-of-type(1n){clear:none}.medium-block-grid-4>li:nth-of-type(4n+1){clear:both}.medium-block-grid-5>li{list-style:none;width:20%}.medium-block-grid-5>li:nth-of-type(1n){clear:none}.medium-block-grid-5>li:nth-of-type(5n+1){clear:both}.medium-block-grid-6>li{list-style:none;width:16.66667%}.medium-block-grid-6>li:nth-of-type(1n){clear:none}.medium-block-grid-6>li:nth-of-type(6n+1){clear:both}.medium-block-grid-7>li{list-style:none;width:14.28571%}.medium-block-grid-7>li:nth-of-type(1n){clear:none}.medium-block-grid-7>li:nth-of-type(7n+1){clear:both}.medium-block-grid-8>li{list-style:none;width:12.5%}.medium-block-grid-8>li:nth-of-type(1n){clear:none}.medium-block-grid-8>li:nth-of-type(8n+1){clear:both}.medium-block-grid-9>li{list-style:none;width:11.11111%}.medium-block-grid-9>li:nth-of-type(1n){clear:none}.medium-block-grid-9>li:nth-of-type(9n+1){clear:both}.medium-block-grid-10>li{list-style:none;width:10%}.medium-block-grid-10>li:nth-of-type(1n){clear:none}.medium-block-grid-10>li:nth-of-type(10n+1){clear:both}.medium-block-grid-11>li{list-style:none;width:9.09091%}.medium-block-grid-11>li:nth-of-type(1n){clear:none}.medium-block-grid-11>li:nth-of-type(11n+1){clear:both}.medium-block-grid-12>li{list-style:none;width:8.33333%}.medium-block-grid-12>li:nth-of-type(1n){clear:none}.medium-block-grid-12>li:nth-of-type(12n+1){clear:both}}@media only screen and (min-width: 64.0625em){.large-block-grid-1>li{list-style:none;width:100%}.large-block-grid-1>li:nth-of-type(1n){clear:none}.large-block-grid-1>li:nth-of-type(1n+1){clear:both}.large-block-grid-2>li{list-style:none;width:50%}.large-block-grid-2>li:nth-of-type(1n){clear:none}.large-block-grid-2>li:nth-of-type(2n+1){clear:both}.large-block-grid-3>li{list-style:none;width:33.33333%}.large-block-grid-3>li:nth-of-type(1n){clear:none}.large-block-grid-3>li:nth-of-type(3n+1){clear:both}.large-block-grid-4>li{list-style:none;width:25%}.large-block-grid-4>li:nth-of-type(1n){clear:none}.large-block-grid-4>li:nth-of-type(4n+1){clear:both}.large-block-grid-5>li{list-style:none;width:20%}.large-block-grid-5>li:nth-of-type(1n){clear:none}.large-block-grid-5>li:nth-of-type(5n+1){clear:both}.large-block-grid-6>li{list-style:none;width:16.66667%}.large-block-grid-6>li:nth-of-type(1n){clear:none}.large-block-grid-6>li:nth-of-type(6n+1){clear:both}.large-block-grid-7>li{list-style:none;width:14.28571%}.large-block-grid-7>li:nth-of-type(1n){clear:none}.large-block-grid-7>li:nth-of-type(7n+1){clear:both}.large-block-grid-8>li{list-style:none;width:12.5%}.large-block-grid-8>li:nth-of-type(1n){clear:none}.large-block-grid-8>li:nth-of-type(8n+1){clear:both}.large-block-grid-9>li{list-style:none;width:11.11111%}.large-block-grid-9>li:nth-of-type(1n){clear:none}.large-block-grid-9>li:nth-of-type(9n+1){clear:both}.large-block-grid-10>li{list-style:none;width:10%}.large-block-grid-10>li:nth-of-type(1n){clear:none}.large-block-grid-10>li:nth-of-type(10n+1){clear:both}.large-block-grid-11>li{list-style:none;width:9.09091%}.large-block-grid-11>li:nth-of-type(1n){clear:none}.large-block-grid-11>li:nth-of-type(11n+1){clear:both}.large-block-grid-12>li{list-style:none;width:8.33333%}.large-block-grid-12>li:nth-of-type(1n){clear:none}.large-block-grid-12>li:nth-of-type(12n+1){clear:both}}.flex-video{height:0;margin-bottom:1rem;overflow:hidden;padding-bottom:67.5%;padding-top:1.5625rem;position:relative}.flex-video.widescreen{padding-bottom:56.34%}.flex-video.vimeo{padding-top:0}.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{height:100%;position:absolute;top:0;width:100%;left:0}.keystroke,kbd{background-color:#ededed;border-color:#ddd;color:#222;border-style:solid;border-width:1px;font-family:"Consolas","Menlo","Courier",monospace;font-size:inherit;margin:0;padding:0.125rem 0.25rem 0;border-radius:3px}.switch{border:none;margin-bottom:1.5rem;outline:0;padding:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{background:#ddd;color:transparent;cursor:pointer;display:block;margin-bottom:1rem;position:relative;text-indent:100%;width:4rem;height:2rem;transition:left 0.15s ease-out}.switch input{left:10px;opacity:0;padding:0;position:absolute;top:9px}.switch input+label{margin-left:0;margin-right:0}.switch label:after{background:#fff;content:"";display:block;height:1.5rem;left:.25rem;position:absolute;top:.25rem;width:1.5rem;-webkit-transition:left 0.15s ease-out;-moz-transition:left 0.15s ease-out;-o-transition:translate3d(0, 0, 0);transition:left 0.15s ease-out;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.switch input:checked+label{background:#008CBA}.switch input:checked+label:after{left:2.25rem}.switch label{height:2rem;width:4rem}.switch label:after{height:1.5rem;width:1.5rem}.switch input:checked+label:after{left:2.25rem}.switch label{color:transparent;background:#ddd}.switch label:after{background:#fff}.switch input:checked+label{background:#008CBA}.switch.large label{height:2.5rem;width:5rem}.switch.large label:after{height:2rem;width:2rem}.switch.large input:checked+label:after{left:2.75rem}.switch.small label{height:1.75rem;width:3.5rem}.switch.small label:after{height:1.25rem;width:1.25rem}.switch.small input:checked+label:after{left:2rem}.switch.tiny label{height:1.5rem;width:3rem}.switch.tiny label:after{height:1rem;width:1rem}.switch.tiny input:checked+label:after{left:1.75rem}.switch.radius label{border-radius:4px}.switch.radius label:after{border-radius:3px}.switch.round{border-radius:1000px}.switch.round label{border-radius:2rem}.switch.round label:after{border-radius:2rem}@media only screen{.show-for-small-only,.show-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.hide-for-small-only,.hide-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.visible-for-small-only,.visible-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.hidden-for-small-only,.hidden-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.show-for-small-only,table.show-for-small-up,table.show-for-small,table.show-for-small-down,table.hide-for-medium-only,table.hide-for-medium-up,table.hide-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.show-for-small-only,thead.show-for-small-up,thead.show-for-small,thead.show-for-small-down,thead.hide-for-medium-only,thead.hide-for-medium-up,thead.hide-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.show-for-small-only,tbody.show-for-small-up,tbody.show-for-small,tbody.show-for-small-down,tbody.hide-for-medium-only,tbody.hide-for-medium-up,tbody.hide-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.show-for-small-only,tr.show-for-small-up,tr.show-for-small,tr.show-for-small-down,tr.hide-for-medium-only,tr.hide-for-medium-up,tr.hide-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.show-for-small-only,td.show-for-small-only,th.show-for-small-up,td.show-for-small-up,th.show-for-small,td.show-for-small,th.show-for-small-down,td.show-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.hide-for-medium-up,td.hide-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 40.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.show-for-medium-only,.show-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.hide-for-medium-only,.hide-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.visible-for-medium-only,.visible-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.hidden-for-medium-only,.hidden-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.show-for-medium-only,table.show-for-medium-up,table.show-for-medium,table.show-for-medium-down,table.hide-for-large-only,table.hide-for-large-up,table.hide-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.show-for-medium-only,thead.show-for-medium-up,thead.show-for-medium,thead.show-for-medium-down,thead.hide-for-large-only,thead.hide-for-large-up,thead.hide-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.show-for-medium-only,tbody.show-for-medium-up,tbody.show-for-medium,tbody.show-for-medium-down,tbody.hide-for-large-only,tbody.hide-for-large-up,tbody.hide-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.show-for-medium-only,tr.show-for-medium-up,tr.show-for-medium,tr.show-for-medium-down,tr.hide-for-large-only,tr.hide-for-large-up,tr.hide-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.show-for-medium-only,td.show-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.show-for-medium,td.show-for-medium,th.show-for-medium-down,td.show-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.hide-for-large-up,td.hide-for-large-up,th.hide-for-large,td.hide-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 64.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.show-for-large-only,.show-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.hide-for-large-only,.hide-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.visible-for-large-only,.visible-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.hidden-for-large-only,.hidden-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.show-for-large-only,table.show-for-large-up,table.show-for-large,table.show-for-large-down,table.hide-for-xlarge-only,table.hide-for-xlarge-up,table.hide-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.show-for-large-only,thead.show-for-large-up,thead.show-for-large,thead.show-for-large-down,thead.hide-for-xlarge-only,thead.hide-for-xlarge-up,thead.hide-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.show-for-large-only,tbody.show-for-large-up,tbody.show-for-large,tbody.show-for-large-down,tbody.hide-for-xlarge-only,tbody.hide-for-xlarge-up,tbody.hide-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.show-for-large-only,tr.show-for-large-up,tr.show-for-large,tr.show-for-large-down,tr.hide-for-xlarge-only,tr.hide-for-xlarge-up,tr.hide-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.show-for-large-only,td.show-for-large-only,th.show-for-large-up,td.show-for-large-up,th.show-for-large,td.show-for-large,th.show-for-large-down,td.show-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.hide-for-xlarge-up,td.hide-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 90.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.show-for-xlarge-only,.show-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.hide-for-xlarge-only,.hide-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.visible-for-xlarge-only,.visible-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.hidden-for-xlarge-only,.hidden-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.show-for-xlarge-only,table.show-for-xlarge-up,table.show-for-xlarge,table.show-for-xlarge-down,table.hide-for-xxlarge-only,table.hide-for-xxlarge-up,table.hide-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.show-for-xlarge-only,thead.show-for-xlarge-up,thead.show-for-xlarge,thead.show-for-xlarge-down,thead.hide-for-xxlarge-only,thead.hide-for-xxlarge-up,thead.hide-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.show-for-xlarge-only,tbody.show-for-xlarge-up,tbody.show-for-xlarge,tbody.show-for-xlarge-down,tbody.hide-for-xxlarge-only,tbody.hide-for-xxlarge-up,tbody.hide-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.show-for-xlarge-only,tr.show-for-xlarge-up,tr.show-for-xlarge,tr.show-for-xlarge-down,tr.hide-for-xxlarge-only,tr.hide-for-xxlarge-up,tr.hide-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.show-for-xlarge-only,td.show-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.show-for-xlarge,td.show-for-xlarge,th.show-for-xlarge-down,td.show-for-xlarge-down,th.hide-for-xxlarge-only,td.hide-for-xxlarge-only,th.hide-for-xxlarge-up,td.hide-for-xxlarge-up,th.hide-for-xxlarge,td.hide-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}@media only screen and (min-width: 120.0625em){.hide-for-small-only,.show-for-small-up,.hide-for-small,.hide-for-small-down,.hide-for-medium-only,.show-for-medium-up,.hide-for-medium,.hide-for-medium-down,.hide-for-large-only,.show-for-large-up,.hide-for-large,.hide-for-large-down,.hide-for-xlarge-only,.show-for-xlarge-up,.hide-for-xlarge,.hide-for-xlarge-down,.show-for-xxlarge-only,.show-for-xxlarge-up,.show-for-xxlarge,.show-for-xxlarge-down{display:inherit !important}.show-for-small-only,.hide-for-small-up,.show-for-small,.show-for-small-down,.show-for-medium-only,.hide-for-medium-up,.show-for-medium,.show-for-medium-down,.show-for-large-only,.hide-for-large-up,.show-for-large,.show-for-large-down,.show-for-xlarge-only,.hide-for-xlarge-up,.show-for-xlarge,.show-for-xlarge-down,.hide-for-xxlarge-only,.hide-for-xxlarge-up,.hide-for-xxlarge,.hide-for-xxlarge-down{display:none !important}.hidden-for-small-only,.visible-for-small-up,.hidden-for-small,.hidden-for-small-down,.hidden-for-medium-only,.visible-for-medium-up,.hidden-for-medium,.hidden-for-medium-down,.hidden-for-large-only,.visible-for-large-up,.hidden-for-large,.hidden-for-large-down,.hidden-for-xlarge-only,.visible-for-xlarge-up,.hidden-for-xlarge,.hidden-for-xlarge-down,.visible-for-xxlarge-only,.visible-for-xxlarge-up,.visible-for-xxlarge,.visible-for-xxlarge-down{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.visible-for-small-only,.hidden-for-small-up,.visible-for-small,.visible-for-small-down,.visible-for-medium-only,.hidden-for-medium-up,.visible-for-medium,.visible-for-medium-down,.visible-for-large-only,.hidden-for-large-up,.visible-for-large,.visible-for-large-down,.visible-for-xlarge-only,.hidden-for-xlarge-up,.visible-for-xlarge,.visible-for-xlarge-down,.hidden-for-xxlarge-only,.hidden-for-xxlarge-up,.hidden-for-xxlarge,.hidden-for-xxlarge-down{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}table.hide-for-small-only,table.show-for-small-up,table.hide-for-small,table.hide-for-small-down,table.hide-for-medium-only,table.show-for-medium-up,table.hide-for-medium,table.hide-for-medium-down,table.hide-for-large-only,table.show-for-large-up,table.hide-for-large,table.hide-for-large-down,table.hide-for-xlarge-only,table.show-for-xlarge-up,table.hide-for-xlarge,table.hide-for-xlarge-down,table.show-for-xxlarge-only,table.show-for-xxlarge-up,table.show-for-xxlarge,table.show-for-xxlarge-down{display:table !important}thead.hide-for-small-only,thead.show-for-small-up,thead.hide-for-small,thead.hide-for-small-down,thead.hide-for-medium-only,thead.show-for-medium-up,thead.hide-for-medium,thead.hide-for-medium-down,thead.hide-for-large-only,thead.show-for-large-up,thead.hide-for-large,thead.hide-for-large-down,thead.hide-for-xlarge-only,thead.show-for-xlarge-up,thead.hide-for-xlarge,thead.hide-for-xlarge-down,thead.show-for-xxlarge-only,thead.show-for-xxlarge-up,thead.show-for-xxlarge,thead.show-for-xxlarge-down{display:table-header-group !important}tbody.hide-for-small-only,tbody.show-for-small-up,tbody.hide-for-small,tbody.hide-for-small-down,tbody.hide-for-medium-only,tbody.show-for-medium-up,tbody.hide-for-medium,tbody.hide-for-medium-down,tbody.hide-for-large-only,tbody.show-for-large-up,tbody.hide-for-large,tbody.hide-for-large-down,tbody.hide-for-xlarge-only,tbody.show-for-xlarge-up,tbody.hide-for-xlarge,tbody.hide-for-xlarge-down,tbody.show-for-xxlarge-only,tbody.show-for-xxlarge-up,tbody.show-for-xxlarge,tbody.show-for-xxlarge-down{display:table-row-group !important}tr.hide-for-small-only,tr.show-for-small-up,tr.hide-for-small,tr.hide-for-small-down,tr.hide-for-medium-only,tr.show-for-medium-up,tr.hide-for-medium,tr.hide-for-medium-down,tr.hide-for-large-only,tr.show-for-large-up,tr.hide-for-large,tr.hide-for-large-down,tr.hide-for-xlarge-only,tr.show-for-xlarge-up,tr.hide-for-xlarge,tr.hide-for-xlarge-down,tr.show-for-xxlarge-only,tr.show-for-xxlarge-up,tr.show-for-xxlarge,tr.show-for-xxlarge-down{display:table-row}th.hide-for-small-only,td.hide-for-small-only,th.show-for-small-up,td.show-for-small-up,th.hide-for-small,td.hide-for-small,th.hide-for-small-down,td.hide-for-small-down,th.hide-for-medium-only,td.hide-for-medium-only,th.show-for-medium-up,td.show-for-medium-up,th.hide-for-medium,td.hide-for-medium,th.hide-for-medium-down,td.hide-for-medium-down,th.hide-for-large-only,td.hide-for-large-only,th.show-for-large-up,td.show-for-large-up,th.hide-for-large,td.hide-for-large,th.hide-for-large-down,td.hide-for-large-down,th.hide-for-xlarge-only,td.hide-for-xlarge-only,th.show-for-xlarge-up,td.show-for-xlarge-up,th.hide-for-xlarge,td.hide-for-xlarge,th.hide-for-xlarge-down,td.hide-for-xlarge-down,th.show-for-xxlarge-only,td.show-for-xxlarge-only,th.show-for-xxlarge-up,td.show-for-xxlarge-up,th.show-for-xxlarge,td.show-for-xxlarge,th.show-for-xxlarge-down,td.show-for-xxlarge-down{display:table-cell !important}}.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.hide-for-landscape,table.show-for-portrait{display:table !important}thead.hide-for-landscape,thead.show-for-portrait{display:table-header-group !important}tbody.hide-for-landscape,tbody.show-for-portrait{display:table-row-group !important}tr.hide-for-landscape,tr.show-for-portrait{display:table-row !important}td.hide-for-landscape,td.show-for-portrait,th.hide-for-landscape,th.show-for-portrait{display:table-cell !important}@media only screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:inherit !important}.hide-for-landscape,.show-for-portrait{display:none !important}table.show-for-landscape,table.hide-for-portrait{display:table !important}thead.show-for-landscape,thead.hide-for-portrait{display:table-header-group !important}tbody.show-for-landscape,tbody.hide-for-portrait{display:table-row-group !important}tr.show-for-landscape,tr.hide-for-portrait{display:table-row !important}td.show-for-landscape,td.hide-for-portrait,th.show-for-landscape,th.hide-for-portrait{display:table-cell !important}}@media only screen and (orientation: portrait){.show-for-portrait,.hide-for-landscape{display:inherit !important}.hide-for-portrait,.show-for-landscape{display:none !important}table.show-for-portrait,table.hide-for-landscape{display:table !important}thead.show-for-portrait,thead.hide-for-landscape{display:table-header-group !important}tbody.show-for-portrait,tbody.hide-for-landscape{display:table-row-group !important}tr.show-for-portrait,tr.hide-for-landscape{display:table-row !important}td.show-for-portrait,td.hide-for-landscape,th.show-for-portrait,th.hide-for-landscape{display:table-cell !important}}.show-for-touch{display:none !important}.hide-for-touch{display:inherit !important}.touch .show-for-touch{display:inherit !important}.touch .hide-for-touch{display:none !important}table.hide-for-touch{display:table !important}.touch table.show-for-touch{display:table !important}thead.hide-for-touch{display:table-header-group !important}.touch thead.show-for-touch{display:table-header-group !important}tbody.hide-for-touch{display:table-row-group !important}.touch tbody.show-for-touch{display:table-row-group !important}tr.hide-for-touch{display:table-row !important}.touch tr.show-for-touch{display:table-row !important}td.hide-for-touch{display:table-cell !important}.touch td.show-for-touch{display:table-cell !important}th.hide-for-touch{display:table-cell !important}.touch th.show-for-touch{display:table-cell !important}.show-for-sr{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus{clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute !important;width:1px}.show-on-focus:focus,.show-on-focus:active{position:static !important;height:auto;width:auto;overflow:visible;clip:auto}.print-only{display:none !important}@media print{*{background:transparent !important;box-shadow:none !important;color:#000 !important;text-shadow:none !important}.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.hide-on-print{display:none !important}.print-only{display:block !important}.hide-for-print{display:none !important}.show-for-print{display:inherit !important}}@media print{.show-for-print{display:block}.hide-for-print{display:none}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}}@media not print{.show-for-print{display:none !important}} \ No newline at end of file diff --git a/production/example_apps/zippy_maps/webroot/css/cake.css b/production/example_apps/zippy_maps/webroot/css/cake.css new file mode 100644 index 00000000..10841c89 --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/css/cake.css @@ -0,0 +1,525 @@ +.disabled a, +a.disabled { + pointer-events: none; +} + +a:hover { + color: #15848F; +} + +a { + color: #1798A5; +} + +.side-nav li a:not(.button) { + color: #15848F; +} + +.side-nav li a:not(.button):hover { + color: #15848F; +} + +header { + background-color: #D33C44; + color: #ffffff; + font-size: 30px; + height: 84px; + line-height: 64px; + padding: 16px 0px; + box-shadow: 0px 1px rgba(0, 0, 0, 0.24); +} + +header .header-title { + padding-left:80px +} + +legend { + color:#15848F; +} + +.row { + max-width: 80rem; +} + +.actions.columns { + margin-top:1rem; + border-left: 5px solid #15848F; + padding-left: 15px; + padding: 32px 20px; +} + +.actions.columns h3 { + color:#15848F; +} + +.related table { + border: 0; + width: 100%; + table-layout: fixed; +} + +.index table thead { + height: 3.5rem; +} + +.header-help { + float: right; + margin-right:2rem; + margin-top: -80px; + font-size:16px; +} + +.header-help span { + font-weight: normal; + text-align: center; + text-decoration: none; + line-height: 1; + white-space: nowrap; + display: inline-block; + padding: 0.25rem 0.5rem 0.375rem; + font-size: 0.8rem; + background-color: #0097a7; + color: #FFF; + border-radius: 1000px; +} + +.header-help a { + color: #fff; +} + +ul.pagination li a { + color: rgba(0, 0 ,0 , 0.54); +} + +ul.pagination li.active a { + background-color: #DCE47E; + color: #FFF; + font-weight: bold; + cursor: default; +} +ul.pagination .disabled:hover a { + background: none; +} + +.paginator { + text-align: center; +} + +.paginator ul.pagination li { + float: none; + display: inline-block; +} + +.paginator p { + text-align: right; + color: rgba(0, 0 ,0 , 0.54); +} + +.asc:after { + content: " \2193"; +} +.desc:after { + content: " \2191"; +} + +.form .error-message { + display: block; + padding: 0.375rem 0.5625rem 0.5625rem; + margin-top: -1px; + margin-bottom: 1rem; + font-size: 0.75rem; + font-weight: normal; + font-style: italic; + color: rgba(0, 0, 0, 0.54); +} + +.required > label { + font-weight: bold; +} +.required > label:after { + content: ' *'; + color: #C3232D; +} + +select[multiple] { + min-height:150px; + background: none; +} +input[type=checkbox], +input[type=radio] { + margin-right: 0.5em; +} + +.date select, +.time select, +.datetime select { + display: inline; + width: auto; + margin-right: 10px; +} + +.error label, +.error label.error { + color: #C3232D; +} + +.view h2 { + color: #6F6F6F; +} + +.view .columns.strings { + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right:0.7rem; +} + +.view .numbers { + background-color: #B7E3EC; + color: #FFF; + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right: 0.7rem; +} + +.view .columns.dates { + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right:0.7rem; + background-color:#DCE47E; + color: #fff; +} + +.view .columns.booleans { + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-right:0.7rem; + background-color: #8D6E65; + color: #fff; +} + +.view .strings p { + border-bottom: 1px solid #eee; +} +.view .numbers .subheader, .view .dates .subheader { + color:#747474; +} +.view .booleans .subheader { + color: #E9E9E9 +} + +.view .texts .columns { + margin-top:1.2rem; + border-bottom: 1px solid #eee; +} + +/** Notices and Errors **/ +.cake-error, +.cake-debug, +.notice, +p.error, +p.notice { + display: block; + clear: both; + background-repeat: repeat-x; + margin-bottom: 18px; + padding: 7px 14px; + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); +} + +.cake-debug, +.notice, +p.notice { + color: #000000; + background: #ffcc00; +} + +.cake-error, +p.error { + color: #fff; + background: #C3232D; +} + +pre { + background: none repeat scroll 0% 0% #FFF; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin: 15px 0px; + color: rgba(0, 0 ,0 , 0.74); + padding:5px; +} + +.cake-error .cake-stack-trace { + margin-top:10px; +} + +.cake-stack-trace code { + background: inherit; + border:0; +} + +.cake-code-dump .code-highlight { + display: block; + background-color: #FFC600; +} + +.cake-error a, +.cake-error a:hover { + color:#fff; + text-decoration: underline; +} + +.checks { + padding:30px; + color: #626262; + background-color: #B7E3EC; + border-radius: 3px; + box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.24); + margin-bottom: 2em; +} + +.checks h4 { + margin-bottom: 1.5rem; +} + +.checks hr { + border: 0; + height: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.3); +} + +.checks .success, +.checks .problem { + margin-left: 10px; +} +.checks .success:before, +.checks .problem:before { + line-height: 0px; + font-size: 28px; + height: 12px; + width: 12px; + border-radius: 15px; + text-align: center; + vertical-align: middle; + display: inline-block; + position: relative; + left: -11px; +} + +.checks .success:before { + content: "✓"; + color: green; + margin-right: 9px; +} + +.checks .problem:before { + content: "✘"; + color: red; + margin-right: 9px; +} + +.top-bar.expanded .title-area { + background: #01545b; +} + +.top-bar.expanded, .top-bar,.top-bar-section ul li,.top-bar-section li:not(.has-form) a:not(.button) { + background: #116d76; +} + +.top-bar-section li:not(.has-form) a:not(.button):hover { + background-color: #308e97; + background: #308e97; +} + +.side-nav li.heading { + color: #1798A5; + font-size: 0.875rem; + font-weight: bold; + text-transform: uppercase; + padding: 0.4375rem 0.875rem; +} + +#actions-sidebar { + background: #fafafa; +} + +.index table { + margin-top: 0rem; + border: 0; + width: 100%; + table-layout: fixed; +} + +table { + background: #fff; + margin-bottom: 1.25rem; + border: none; + table-layout: fixed; + width: 100%; +} + +table thead { + background: none; +} + +table tr { + border-bottom: 1px solid #ebebec; +} + +table thead tr { + border-bottom: 1px solid #1798A5; +} + +table tr th { + padding: 0.5625rem 0.625rem; + font-size: 0.875rem; + color: #1798A5; + text-align: left; + border-bottom: 2px solid #1798A5; +} + +table tr:nth-of-type(even) { + background: none; +} + +fieldset { + border: none; + padding: 1.25rem; + margin: 1.125rem 0; +} + +fieldset legend { + border-bottom: 2px solid #1798A5; + width: 100%; + line-height: 2rem; +} + +.form button[type="submit"] { + float: right; + text-transform: uppercase; + box-shadow: none; +} + +.form button:hover, .form button:focus { + background: #BE840B; + box-shadow: none; +} + +button { + background: #966600; +} + +div.message { + text-align: center; + cursor: pointer; + display: block; + font-weight: normal; + padding: 0 1.5rem 0 1.5rem; + transition: height 300ms ease-out 0s; + background-color: #a0d3e8; + color: #626262; + top: 15px; + right: 15px; + z-index: 999; + overflow: hidden; + height: 50px; + line-height: 2.5em; + box-radius: 5px; +} + +div.message:before { + line-height: 0px; + font-size: 20px; + height: 12px; + width: 12px; + border-radius: 15px; + text-align: center; + vertical-align: middle; + display: inline-block; + position: relative; + left: -11px; + background-color: #FFF; + padding: 12px 14px 12px 10px; + content: "i"; + color: #a0d3e8; +} + +div.message.error { + background-color: #C3232D; + color: #FFF; +} + +div.message.error:before { + padding: 11px 16px 14px 7px; + color: #C3232D; + content: "x"; +} +div.message.hidden { + height: 0; +} + + +.vertical-table th { + padding: 0.5625rem 0.625rem; + font-size: 0.875rem; + color: #1798A5; + border: none; + text-align: left; +} + +.vertical-table { + vertical-align: middle; +} + +.vertical-table td { + text-align: right; +} + +.content { + padding: 2rem; +} + +/* Use 'one true layout' methods to get equal height columns */ +.container { + overflow: hidden; + min-height: 92%; /* full height almost always */ +} + +/* Force equal height by overflowing */ +.content, +#actions-sidebar { + margin-bottom: -99999px; + padding-bottom: 99999px; +} +@media(max-width: 640px) { + #actions-sidebar { + padding-bottom: 2rem; + margin-bottom: 0; + } +} + +.content h3 { + color: #be140b; + padding-bottom: 0.5rem; + margin-bottom: 20px; +} + +.content h4 { + color: #be140b; + padding-bottom: 0.5rem; + margin-bottom: 20px; + border-bottom: 2px solid #be140b; +} + +.content .related h4 { + color: #4d8f97; + padding-bottom: 0.5rem; + margin-top: 20px; + margin-bottom: 10px; + border-bottom: 0px; +} + +table td { + vertical-align: top; + word-break: break-all; +} diff --git a/production/example_apps/zippy_maps/webroot/css/home.css b/production/example_apps/zippy_maps/webroot/css/home.css new file mode 100644 index 00000000..d1db7780 --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/css/home.css @@ -0,0 +1,250 @@ +@font-face { + font-family: 'cakefont'; + src: url('../font/cakedingbats-webfont.eot'); + src: url('../font/cakedingbats-webfont.eot?#iefix') format('embedded-opentype'), + url('../font/cakedingbats-webfont.woff2') format('woff2'), + url('../font/cakedingbats-webfont.woff') format('woff'), + url('../font/cakedingbats-webfont.ttf') format('truetype'), + url('../font/cakedingbats-webfont.svg#cake_dingbatsregular') format('svg'); + font-weight: normal; + font-style: normal; +} + +.home { + font-family: 'Roboto', sans-serif; + font-size: 14px; + line-height: 27px; + color: #404041; +} + +.fredmenu { + font-size: 28px; + text-align: center; +} + +.fredmenu li { + font-size: 28px; +} + +a { + color: #0071BC; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -ms-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +a:hover, a:active { + color: #d33d44; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -ms-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +ul, ol, dl, p { + font-size: 0.85rem; +} + +p { + line-height: 2; +} + +header { + height: auto; + line-height: 1em; + padding: 0; + box-shadow: none; +} + +header.row { + margin-bottom: 30px; +} + +header .header-image { + text-align: center; + padding: 64px 0; + background: #b060f1; +} + +header .header-title { + padding: 0; + display: block; + background: #404041; + text-align: center; +} + +header .header-title h1 { + font-family: 'Raleway', sans-serif; + margin: 0; + font-style: italic; + font-size: 18px; + font-weight: 500; + padding: 18px 30px; + color: #DEDED5; +} + +header h1 { + color: #fff; +} + +h3, h4 { + font-family: 'Roboto', sans-serif; + font-size: 27px; + line-height: 30px; + font-weight: 300; + -webkit-font-smoothing: antialiased; + margin-top: 0; + margin-bottom: 20px; +} + +.more { + color: #ffffff; + background-color: #d33d44; + padding: 15px; + margin-top: 10px; +} + +.row { + max-width: 1000px; +} + +.alert { + background-color: #fff9e1; + font-size: 12px; + text-align: center; + display: block; + padding: 12px; + border-bottom: 2px solid #ffcf06; +} + +.alert { + background-color: #fff9e1; + font-size: 12px; + display: block; + padding: 12px; + border-bottom: 2px solid #ffcf06; + margin-bottom: 30px; + color: #404041; +} + +.alert p { + margin: 0; + font-size: 12px; + line-height: 1.4; +} + +.alert p:before { + color: #ffcf06; + content: "\0055"; + font-family: 'cakefont', sans-serif; + font-size: 21px; + margin-left: -0.8em; + width: 2.3em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 0 10px 0 15px; + vertical-align: -2px; +} + +.alert ul { + margin: 0; + font-size: 12px; +} + +.alert.url-rewriting { + background-color: #F0F0F0; + border-color: #cccccc; + display: none; +} + +.text-center { + text-align: center; +} + +ul { + list-style-type: none; + margin: 0 0 30px 0; +} + +li { + padding-left: 1.8em; +} + +ul li ul, ul li ul li { + margin: 0; + padding: 0; +} + +.bullet:before { + font-family: 'cakefont', sans-serif; + font-size: 18px; + display: inline-block; + margin-left: -1.3em; + width: 1.2em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: -1px; +} + +.success:before { + color: #88c671; + content: "\0056"; +} + +.problem:before { + color: #d33d44; + content: "\0057"; +} + +.cutlery:before { + color: #404041; + content: "\0059"; +} + +.book:before { + color: #404041; + content: "\0042"; + width: 1.7em; +} + +hr { + border-bottom: 1px solid #e7e7e7; + border-top: 0; + margin-bottom: 35px; + margin-left: 30px; + margin-right: 30px; +} + + +.icon { + color: #404041; + font-style: normal; + font-family: 'cakefont', sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.icon.support { + font-size: 60px; +} +.icon.docs { + font-size: 57px; +} +.icon.training { + font-size: 39px; +} + +@media (min-width: 768px) { + .columns { + padding-left: 30px; + padding-right: 30px; + } +} + +@media (min-width: 992px) { + header.row { + max-width: 940px; + } +} diff --git a/production/example_apps/zippy_maps/webroot/favicon.ico b/production/example_apps/zippy_maps/webroot/favicon.ico new file mode 100644 index 00000000..49a060fc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/favicon.ico differ diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot new file mode 100644 index 00000000..e8605d92 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.eot differ diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.svg b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.svg new file mode 100644 index 00000000..d1e0c98f --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf new file mode 100644 index 00000000..13d54454 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.ttf differ diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff new file mode 100644 index 00000000..073baab1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff differ diff --git a/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2 b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2 new file mode 100644 index 00000000..6e71eaf5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/font/cakedingbats-webfont.woff2 differ diff --git a/production/example_apps/zippy_maps/webroot/img/cake-logo.png b/production/example_apps/zippy_maps/webroot/img/cake-logo.png new file mode 100644 index 00000000..41939ef5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/cake-logo.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/cake.icon.png b/production/example_apps/zippy_maps/webroot/img/cake.icon.png new file mode 100644 index 00000000..394fa42d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/cake.icon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/cake.logo.svg b/production/example_apps/zippy_maps/webroot/img/cake.logo.svg new file mode 100644 index 00000000..e73abb54 --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/img/cake.logo.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/production/example_apps/zippy_maps/webroot/img/cake.power.gif b/production/example_apps/zippy_maps/webroot/img/cake.power.gif new file mode 100644 index 00000000..8f8d570a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/cake.power.gif differ diff --git a/production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png b/production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png new file mode 100644 index 00000000..b8e9bfb3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/charlottesville_minimap.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/2hand.png b/production/example_apps/zippy_maps/webroot/img/icons/2hand.png new file mode 100644 index 00000000..b351f943 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/2hand.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/360degrees.png b/production/example_apps/zippy_maps/webroot/img/icons/360degrees.png new file mode 100644 index 00000000..3f288968 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/360degrees.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/_readme-license.txt b/production/example_apps/zippy_maps/webroot/img/icons/_readme-license.txt new file mode 100644 index 00000000..d7b056af --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/img/icons/_readme-license.txt @@ -0,0 +1,10 @@ +The project "Map Icons Collection" was created by Nicolas Mollet under the Creative Commons Attribution-Share Alike 3.0 Unported license (CC BY SA 3.0 - http://creativecommons.org/licenses/by-sa/3.0/). + +This license lets you remix, tweak, and build upon our work even for commercial reasons, as long as you credit the project and license your new creations under the identical terms. + +Please credit: Maps Icons Collection https://mapicons.mapsmarker.com +Logo available at https://mapicons.mapsmarker.com/wp-content/uploads/2011/03/miclogo-88x31.gif + +Some icons are derived from the project SJJB Map Icons (http://www.sjjb.co.uk/mapicons/) by SJJB Management (http://www.sjjb.co.uk/), licensed under Creative Commons Public Domain Dedication (http://creativecommons.org/licenses/publicdomain/). + +Some icons are derived from the project User Interface Design Framework (http://www.webalys.com/design-interface-application-framework.php) by Webalys (http://www.webalys.com/). \ No newline at end of file diff --git a/production/example_apps/zippy_maps/webroot/img/icons/abduction.png b/production/example_apps/zippy_maps/webroot/img/icons/abduction.png new file mode 100644 index 00000000..860d9ce6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/abduction.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png b/production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png new file mode 100644 index 00000000..9eba194f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aboriginal.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png b/production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png new file mode 100644 index 00000000..db0c6fe8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/accesdenied.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png b/production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png new file mode 100644 index 00000000..bbe74964 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/acupuncture.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/administration.png b/production/example_apps/zippy_maps/webroot/img/icons/administration.png new file mode 100644 index 00000000..610fb8d5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/administration.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png b/production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png new file mode 100644 index 00000000..695ee40a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/administrativeboundary.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aed-2.png b/production/example_apps/zippy_maps/webroot/img/icons/aed-2.png new file mode 100644 index 00000000..dff6ca75 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aed-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/agritourism.png b/production/example_apps/zippy_maps/webroot/img/icons/agritourism.png new file mode 100644 index 00000000..73968669 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/agritourism.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png b/production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png new file mode 100644 index 00000000..62032d82 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/air_fixwing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png b/production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png new file mode 100644 index 00000000..28ed51d5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aircraftcarrier.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png b/production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png new file mode 100644 index 00000000..047bdb4c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aircraftsmall.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport.png b/production/example_apps/zippy_maps/webroot/img/icons/airport.png new file mode 100644 index 00000000..a03d4d77 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png b/production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png new file mode 100644 index 00000000..203468eb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport_apron.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png b/production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png new file mode 100644 index 00000000..33d4e40b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport_runway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png b/production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png new file mode 100644 index 00000000..c270f21f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airport_terminal.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png b/production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png new file mode 100644 index 00000000..c40adaa3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/airshow-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/algae.png b/production/example_apps/zippy_maps/webroot/img/icons/algae.png new file mode 100644 index 00000000..04da6faf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/algae.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/alien.png b/production/example_apps/zippy_maps/webroot/img/icons/alien.png new file mode 100644 index 00000000..071d697c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/alien.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/alligator.png b/production/example_apps/zippy_maps/webroot/img/icons/alligator.png new file mode 100644 index 00000000..db0c903b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/alligator.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png new file mode 100644 index 00000000..27e539fc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png new file mode 100644 index 00000000..0d6b1239 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/amphitheater.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png b/production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png new file mode 100644 index 00000000..0ab61bdb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anchorpier.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png b/production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png new file mode 100644 index 00000000..8056a3e7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anemometer_mono.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png b/production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png new file mode 100644 index 00000000..e578f556 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/animal-shelter-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anniversary.png b/production/example_apps/zippy_maps/webroot/img/icons/anniversary.png new file mode 100644 index 00000000..05b5e187 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anniversary.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ant-export.png b/production/example_apps/zippy_maps/webroot/img/icons/ant-export.png new file mode 100644 index 00000000..494d4964 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ant-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/anthropo.png b/production/example_apps/zippy_maps/webroot/img/icons/anthropo.png new file mode 100644 index 00000000..13be8711 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/anthropo.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png b/production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png new file mode 100644 index 00000000..9d8ad2f3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/apartment-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/apple.png b/production/example_apps/zippy_maps/webroot/img/icons/apple.png new file mode 100644 index 00000000..e19c9e75 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/apple.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/aquarium.png b/production/example_apps/zippy_maps/webroot/img/icons/aquarium.png new file mode 100644 index 00000000..72ccb782 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/aquarium.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/arch.png b/production/example_apps/zippy_maps/webroot/img/icons/arch.png new file mode 100644 index 00000000..a695569a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/arch.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/archery.png b/production/example_apps/zippy_maps/webroot/img/icons/archery.png new file mode 100644 index 00000000..b11bca8d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/archery.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/army.png b/production/example_apps/zippy_maps/webroot/img/icons/army.png new file mode 100644 index 00000000..f5556e02 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/army.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png b/production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png new file mode 100644 index 00000000..67ba8e3f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/art-museum-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/artgallery.png b/production/example_apps/zippy_maps/webroot/img/icons/artgallery.png new file mode 100644 index 00000000..8efffeb4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/artgallery.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/atm-2.png b/production/example_apps/zippy_maps/webroot/img/icons/atm-2.png new file mode 100644 index 00000000..922e0eb2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/atm-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/atv.png b/production/example_apps/zippy_maps/webroot/img/icons/atv.png new file mode 100644 index 00000000..a594333f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/atv.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/audio.png b/production/example_apps/zippy_maps/webroot/img/icons/audio.png new file mode 100644 index 00000000..93079238 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/audio.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png b/production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png new file mode 100644 index 00000000..c1650461 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/australianfootball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png b/production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png new file mode 100644 index 00000000..9b03a9bf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/avalanche1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/award.png b/production/example_apps/zippy_maps/webroot/img/icons/award.png new file mode 100644 index 00000000..e3ac637d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/award.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png b/production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png new file mode 100644 index 00000000..6b65545f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/badminton-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bags.png b/production/example_apps/zippy_maps/webroot/img/icons/bags.png new file mode 100644 index 00000000..69f8a6fc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bags.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bank.png b/production/example_apps/zippy_maps/webroot/img/icons/bank.png new file mode 100644 index 00000000..9a427cbd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bank.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bar.png b/production/example_apps/zippy_maps/webroot/img/icons/bar.png new file mode 100644 index 00000000..92d9b710 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bar.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png b/production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png new file mode 100644 index 00000000..75252115 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bar_coktail.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png b/production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png new file mode 100644 index 00000000..9fc4c819 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bar_juice.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/barbecue.png b/production/example_apps/zippy_maps/webroot/img/icons/barbecue.png new file mode 100644 index 00000000..de349a5c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/barbecue.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/barber.png b/production/example_apps/zippy_maps/webroot/img/icons/barber.png new file mode 100644 index 00000000..884f0523 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/barber.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/barrier.png b/production/example_apps/zippy_maps/webroot/img/icons/barrier.png new file mode 100644 index 00000000..4021455d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/barrier.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/baseball.png b/production/example_apps/zippy_maps/webroot/img/icons/baseball.png new file mode 100644 index 00000000..4e81eaf9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/baseball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/basketball.png b/production/example_apps/zippy_maps/webroot/img/icons/basketball.png new file mode 100644 index 00000000..1906c331 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/basketball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bats.png b/production/example_apps/zippy_maps/webroot/img/icons/bats.png new file mode 100644 index 00000000..7978bdc1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bats.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/battlefield.png b/production/example_apps/zippy_maps/webroot/img/icons/battlefield.png new file mode 100644 index 00000000..1f9d7c30 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/battlefield.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png b/production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png new file mode 100644 index 00000000..ee96f349 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/battleship-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beach.png b/production/example_apps/zippy_maps/webroot/img/icons/beach.png new file mode 100644 index 00000000..58c79fad Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beach.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png b/production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png new file mode 100644 index 00000000..25f840f9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beachvolleyball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png b/production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png new file mode 100644 index 00000000..1b7008db Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beautifulview.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png b/production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png new file mode 100644 index 00000000..ce88e7d7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beautysalon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png b/production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png new file mode 100644 index 00000000..af0e8174 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bed_breakfast1-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/beergarden.png b/production/example_apps/zippy_maps/webroot/img/icons/beergarden.png new file mode 100644 index 00000000..e6fbc073 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/beergarden.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png b/production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png new file mode 100644 index 00000000..19db88da Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bicycle_shop.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bigcity.png b/production/example_apps/zippy_maps/webroot/img/icons/bigcity.png new file mode 100644 index 00000000..cdc265d0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bigcity.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png b/production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png new file mode 100644 index 00000000..85911880 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bike_downhill.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png b/production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png new file mode 100644 index 00000000..694c56ea Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bike_rising.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png b/production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png new file mode 100644 index 00000000..cb614fa0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/billiard-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/binoculars.png b/production/example_apps/zippy_maps/webroot/img/icons/binoculars.png new file mode 100644 index 00000000..94f9d19f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/binoculars.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/birds-2.png b/production/example_apps/zippy_maps/webroot/img/icons/birds-2.png new file mode 100644 index 00000000..096537d6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/birds-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/blast.png b/production/example_apps/zippy_maps/webroot/img/icons/blast.png new file mode 100644 index 00000000..4bce6393 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/blast.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boardercross.png b/production/example_apps/zippy_maps/webroot/img/icons/boardercross.png new file mode 100644 index 00000000..dd24010a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boardercross.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boat.png b/production/example_apps/zippy_maps/webroot/img/icons/boat.png new file mode 100644 index 00000000..4ce1c591 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boat.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png b/production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png new file mode 100644 index 00000000..702801fc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boatcrane.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png b/production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png new file mode 100644 index 00000000..0b136b2a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bobsleigh.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bollie.png b/production/example_apps/zippy_maps/webroot/img/icons/bollie.png new file mode 100644 index 00000000..8f4f6dd9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bollie.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bomb.png b/production/example_apps/zippy_maps/webroot/img/icons/bomb.png new file mode 100644 index 00000000..2ae136e0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bomb.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png b/production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png new file mode 100644 index 00000000..b6ee09b0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bomber-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bouddha.png b/production/example_apps/zippy_maps/webroot/img/icons/bouddha.png new file mode 100644 index 00000000..990ce75d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bouddha.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bowling.png b/production/example_apps/zippy_maps/webroot/img/icons/bowling.png new file mode 100644 index 00000000..693c708a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bowling.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/boxing.png b/production/example_apps/zippy_maps/webroot/img/icons/boxing.png new file mode 100644 index 00000000..bd01e4ad Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/boxing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bread.png b/production/example_apps/zippy_maps/webroot/img/icons/bread.png new file mode 100644 index 00000000..ee607119 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bread.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/brewery1.png b/production/example_apps/zippy_maps/webroot/img/icons/brewery1.png new file mode 100644 index 00000000..f5478b9f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/brewery1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png b/production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png new file mode 100644 index 00000000..834514ac Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bridge_modern.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png b/production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png new file mode 100644 index 00000000..8edc9480 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bridge_old.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png b/production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png new file mode 100644 index 00000000..381ed7b3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bulldozer.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bullfight.png b/production/example_apps/zippy_maps/webroot/img/icons/bullfight.png new file mode 100644 index 00000000..848fda20 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bullfight.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png b/production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png new file mode 100644 index 00000000..9af84eab Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bunker-2-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bus.png b/production/example_apps/zippy_maps/webroot/img/icons/bus.png new file mode 100644 index 00000000..47ea3c88 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bus.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/busstop.png b/production/example_apps/zippy_maps/webroot/img/icons/busstop.png new file mode 100644 index 00000000..6361a859 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/busstop.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/bustour.png b/production/example_apps/zippy_maps/webroot/img/icons/bustour.png new file mode 100644 index 00000000..06ab4f00 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/bustour.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png b/production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png new file mode 100644 index 00000000..8745cc47 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/butcher-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png b/production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png new file mode 100644 index 00000000..6329061a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/butterfly-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png b/production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png new file mode 100644 index 00000000..3c9bde96 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cabin-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cablecar.png b/production/example_apps/zippy_maps/webroot/img/icons/cablecar.png new file mode 100644 index 00000000..9c1b8be4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cablecar.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png b/production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png new file mode 100644 index 00000000..40bf1d08 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cafetaria.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png b/production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png new file mode 100644 index 00000000..fc18408a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/calendar-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png b/production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png new file mode 100644 index 00000000..023710b4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/campfire-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/camping-2.png b/production/example_apps/zippy_maps/webroot/img/icons/camping-2.png new file mode 100644 index 00000000..d877e40a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/camping-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/candy.png b/production/example_apps/zippy_maps/webroot/img/icons/candy.png new file mode 100644 index 00000000..68629802 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/candy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png b/production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png new file mode 100644 index 00000000..a186b6e9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/canyon-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/car.png b/production/example_apps/zippy_maps/webroot/img/icons/car.png new file mode 100644 index 00000000..f529bbc7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/car.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/caraccident.png b/production/example_apps/zippy_maps/webroot/img/icons/caraccident.png new file mode 100644 index 00000000..39d16cd2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/caraccident.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/carrental.png b/production/example_apps/zippy_maps/webroot/img/icons/carrental.png new file mode 100644 index 00000000..17eeed77 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/carrental.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/carwash.png b/production/example_apps/zippy_maps/webroot/img/icons/carwash.png new file mode 100644 index 00000000..fb43f3ac Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/carwash.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/casino-2.png b/production/example_apps/zippy_maps/webroot/img/icons/casino-2.png new file mode 100644 index 00000000..279d796d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/casino-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/castle-2.png b/production/example_apps/zippy_maps/webroot/img/icons/castle-2.png new file mode 100644 index 00000000..b0214e8b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/castle-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cathedral.png b/production/example_apps/zippy_maps/webroot/img/icons/cathedral.png new file mode 100644 index 00000000..893329fa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cathedral.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png b/production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png new file mode 100644 index 00000000..5b3a5a10 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/catholicgrave.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/caution.png b/production/example_apps/zippy_maps/webroot/img/icons/caution.png new file mode 100644 index 00000000..22870806 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/caution.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cave-2.png b/production/example_apps/zippy_maps/webroot/img/icons/cave-2.png new file mode 100644 index 00000000..af4fee28 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cave-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cctv.png b/production/example_apps/zippy_maps/webroot/img/icons/cctv.png new file mode 100644 index 00000000..c0894fbe Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cctv.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cemetary.png b/production/example_apps/zippy_maps/webroot/img/icons/cemetary.png new file mode 100644 index 00000000..0786fcc1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cemetary.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/channelchange.png b/production/example_apps/zippy_maps/webroot/img/icons/channelchange.png new file mode 100644 index 00000000..dea2df0a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/channelchange.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png new file mode 100644 index 00000000..aaf52019 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chapel-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chart-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chart-2.png new file mode 100644 index 00000000..b785ad7e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chart-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cheese.png b/production/example_apps/zippy_maps/webroot/img/icons/cheese.png new file mode 100644 index 00000000..6f33a177 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cheese.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png new file mode 100644 index 00000000..1303bf83 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chemistry-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png b/production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png new file mode 100644 index 00000000..5fca0625 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chicken-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png b/production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png new file mode 100644 index 00000000..461a2da8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/childmuseum01.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png b/production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png new file mode 100644 index 00000000..59cc506e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/chiropractor.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png b/production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png new file mode 100644 index 00000000..f31cce34 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/christmasmarket.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/church-2.png b/production/example_apps/zippy_maps/webroot/img/icons/church-2.png new file mode 100644 index 00000000..963ddc17 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/church-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cinema.png b/production/example_apps/zippy_maps/webroot/img/icons/cinema.png new file mode 100644 index 00000000..8b367053 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cinema.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/circus.png b/production/example_apps/zippy_maps/webroot/img/icons/circus.png new file mode 100644 index 00000000..63d38432 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/circus.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/citysquare.png b/production/example_apps/zippy_maps/webroot/img/icons/citysquare.png new file mode 100644 index 00000000..c7fa3836 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/citysquare.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/citywalls.png b/production/example_apps/zippy_maps/webroot/img/icons/citywalls.png new file mode 100644 index 00000000..dc08aa0b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/citywalls.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/climbing.png b/production/example_apps/zippy_maps/webroot/img/icons/climbing.png new file mode 100644 index 00000000..1773b5aa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/climbing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/clock.png b/production/example_apps/zippy_maps/webroot/img/icons/clock.png new file mode 100644 index 00000000..7bb357af Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/clock.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/closedroad.png b/production/example_apps/zippy_maps/webroot/img/icons/closedroad.png new file mode 100644 index 00000000..79b936ef Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/closedroad.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png b/production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png new file mode 100644 index 00000000..cf748bd4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/clothers_female.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png b/production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png new file mode 100644 index 00000000..18f6bb11 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/clothers_male.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cloudy.png b/production/example_apps/zippy_maps/webroot/img/icons/cloudy.png new file mode 100644 index 00000000..86c76d91 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cloudy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png b/production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png new file mode 100644 index 00000000..b58a6582 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cloudysunny.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/coffee.png b/production/example_apps/zippy_maps/webroot/img/icons/coffee.png new file mode 100644 index 00000000..47da029d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/coffee.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/coins.png b/production/example_apps/zippy_maps/webroot/img/icons/coins.png new file mode 100644 index 00000000..3604df40 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/coins.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png b/production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png new file mode 100644 index 00000000..f6723f11 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/comedyclub.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/comics.png b/production/example_apps/zippy_maps/webroot/img/icons/comics.png new file mode 100644 index 00000000..a0692093 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/comics.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png b/production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png new file mode 100644 index 00000000..7440b648 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/comment-map-icon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png b/production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png new file mode 100644 index 00000000..6a458e49 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/communitycentre.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/company.png b/production/example_apps/zippy_maps/webroot/img/icons/company.png new file mode 100644 index 00000000..df9728d8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/company.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/compost.png b/production/example_apps/zippy_maps/webroot/img/icons/compost.png new file mode 100644 index 00000000..7fb98bb0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/compost.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/computers.png b/production/example_apps/zippy_maps/webroot/img/icons/computers.png new file mode 100644 index 00000000..b82761ff Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/computers.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/condominium.png b/production/example_apps/zippy_maps/webroot/img/icons/condominium.png new file mode 100644 index 00000000..34699b9b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/condominium.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/conference.png b/production/example_apps/zippy_maps/webroot/img/icons/conference.png new file mode 100644 index 00000000..9c995d60 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/conference.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/congress.png b/production/example_apps/zippy_maps/webroot/img/icons/congress.png new file mode 100644 index 00000000..9ca27202 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/congress.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/construction.png b/production/example_apps/zippy_maps/webroot/img/icons/construction.png new file mode 100644 index 00000000..31955bcf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/construction.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png b/production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png new file mode 100644 index 00000000..86b4f083 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/constructioncrane.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/contract.png b/production/example_apps/zippy_maps/webroot/img/icons/contract.png new file mode 100644 index 00000000..1b6c528e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/contract.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png b/production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png new file mode 100644 index 00000000..76fb1ae0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/conveniencestore.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/convent-2.png b/production/example_apps/zippy_maps/webroot/img/icons/convent-2.png new file mode 100644 index 00000000..6cf6c7f2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/convent-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png b/production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png new file mode 100644 index 00000000..8cad7a48 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/conversation-map-icon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/convertible.png b/production/example_apps/zippy_maps/webroot/img/icons/convertible.png new file mode 100644 index 00000000..6427150c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/convertible.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/corral.png b/production/example_apps/zippy_maps/webroot/img/icons/corral.png new file mode 100644 index 00000000..529563da Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/corral.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/country.png b/production/example_apps/zippy_maps/webroot/img/icons/country.png new file mode 100644 index 00000000..d58ff91f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/country.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/court.png b/production/example_apps/zippy_maps/webroot/img/icons/court.png new file mode 100644 index 00000000..2bbcc4f7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/court.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cow-export.png b/production/example_apps/zippy_maps/webroot/img/icons/cow-export.png new file mode 100644 index 00000000..308a7ecd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cow-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png b/production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png new file mode 100644 index 00000000..c791b689 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cowabduction.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/craftstore.png b/production/example_apps/zippy_maps/webroot/img/icons/craftstore.png new file mode 100644 index 00000000..d7348f27 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/craftstore.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cramschool.png b/production/example_apps/zippy_maps/webroot/img/icons/cramschool.png new file mode 100644 index 00000000..536e6795 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cramschool.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cricket.png b/production/example_apps/zippy_maps/webroot/img/icons/cricket.png new file mode 100644 index 00000000..1a486763 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cricket.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/crimescene.png b/production/example_apps/zippy_maps/webroot/img/icons/crimescene.png new file mode 100644 index 00000000..f7d97bdc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/crimescene.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cromlech.png b/production/example_apps/zippy_maps/webroot/img/icons/cromlech.png new file mode 100644 index 00000000..01678b82 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cromlech.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png b/production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png new file mode 100644 index 00000000..4febb9d9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cropcircles.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cross-2.png b/production/example_apps/zippy_maps/webroot/img/icons/cross-2.png new file mode 100644 index 00000000..508436a6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cross-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png b/production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png new file mode 100644 index 00000000..d8957d32 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/crossingguard.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png b/production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png new file mode 100644 index 00000000..3e316ecd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cruiseship.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cup.png b/production/example_apps/zippy_maps/webroot/img/icons/cup.png new file mode 100644 index 00000000..45610d21 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cup.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/curling-2.png b/production/example_apps/zippy_maps/webroot/img/icons/curling-2.png new file mode 100644 index 00000000..575c0325 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/curling-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png b/production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png new file mode 100644 index 00000000..4854fc22 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/currencyexchange.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/customs.png b/production/example_apps/zippy_maps/webroot/img/icons/customs.png new file mode 100644 index 00000000..765a36c5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/customs.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cycling.png b/production/example_apps/zippy_maps/webroot/img/icons/cycling.png new file mode 100644 index 00000000..32495851 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cycling.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png b/production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png new file mode 100644 index 00000000..b5253d9f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cycling_feed.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png b/production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png new file mode 100644 index 00000000..ac4c49da Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/cycling_sprint.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dam.png b/production/example_apps/zippy_maps/webroot/img/icons/dam.png new file mode 100644 index 00000000..3f95aa02 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dam.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dance_class.png b/production/example_apps/zippy_maps/webroot/img/icons/dance_class.png new file mode 100644 index 00000000..ffbdf817 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dance_class.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png b/production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png new file mode 100644 index 00000000..ac85e6c5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dancinghall.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/database.png b/production/example_apps/zippy_maps/webroot/img/icons/database.png new file mode 100644 index 00000000..c165320b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/database.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/daycare.png b/production/example_apps/zippy_maps/webroot/img/icons/daycare.png new file mode 100644 index 00000000..01a0f158 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/daycare.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png b/production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png new file mode 100644 index 00000000..7d3bafca Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/deepseafishing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/deer.png b/production/example_apps/zippy_maps/webroot/img/icons/deer.png new file mode 100644 index 00000000..e7c18423 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/deer.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dentist.png b/production/example_apps/zippy_maps/webroot/img/icons/dentist.png new file mode 100644 index 00000000..db929f65 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dentist.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png b/production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png new file mode 100644 index 00000000..50066de2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/departmentstore.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/desert-2.png b/production/example_apps/zippy_maps/webroot/img/icons/desert-2.png new file mode 100644 index 00000000..80cba1e0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/desert-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dinopark.png b/production/example_apps/zippy_maps/webroot/img/icons/dinopark.png new file mode 100644 index 00000000..ee291276 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dinopark.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/direction_down.png b/production/example_apps/zippy_maps/webroot/img/icons/direction_down.png new file mode 100644 index 00000000..137d6693 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/direction_down.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/disability.png b/production/example_apps/zippy_maps/webroot/img/icons/disability.png new file mode 100644 index 00000000..29edde1c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/disability.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/diving.png b/production/example_apps/zippy_maps/webroot/img/icons/diving.png new file mode 100644 index 00000000..7c33a246 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/diving.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png b/production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png new file mode 100644 index 00000000..e4aac25c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dogs_leash.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/dolphins.png b/production/example_apps/zippy_maps/webroot/img/icons/dolphins.png new file mode 100644 index 00000000..f7b45829 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/dolphins.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png b/production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png new file mode 100644 index 00000000..5f122c47 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/doublebendright.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png b/production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png new file mode 100644 index 00000000..0f1f47c4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/downloadicon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png b/production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png new file mode 100644 index 00000000..e1db9f45 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/drinkingfountain.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png b/production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png new file mode 100644 index 00000000..84134b72 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/drinkingwater.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/drugstore.png b/production/example_apps/zippy_maps/webroot/img/icons/drugstore.png new file mode 100644 index 00000000..c46e6a1a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/drugstore.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/duck-export.png b/production/example_apps/zippy_maps/webroot/img/icons/duck-export.png new file mode 100644 index 00000000..a3bca91a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/duck-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png b/production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png new file mode 100644 index 00000000..74414cdf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/earthquake-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/eggs.png b/production/example_apps/zippy_maps/webroot/img/icons/eggs.png new file mode 100644 index 00000000..9f5368db Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/eggs.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elephants.png b/production/example_apps/zippy_maps/webroot/img/icons/elephants.png new file mode 100644 index 00000000..cbaefdaa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elephants.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elevator.png b/production/example_apps/zippy_maps/webroot/img/icons/elevator.png new file mode 100644 index 00000000..92673479 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elevator.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png b/production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png new file mode 100644 index 00000000..834e02da Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elevator_down.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png b/production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png new file mode 100644 index 00000000..57f11fbc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/elevator_up.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/embassy.png b/production/example_apps/zippy_maps/webroot/img/icons/embassy.png new file mode 100644 index 00000000..87b65d4f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/embassy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/entrance.png b/production/example_apps/zippy_maps/webroot/img/icons/entrance.png new file mode 100644 index 00000000..186ee6fd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/entrance.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/exchequer.png b/production/example_apps/zippy_maps/webroot/img/icons/exchequer.png new file mode 100644 index 00000000..3c8cc22d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/exchequer.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/exit.png b/production/example_apps/zippy_maps/webroot/img/icons/exit.png new file mode 100644 index 00000000..d7af8369 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/exit.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/expert.png b/production/example_apps/zippy_maps/webroot/img/icons/expert.png new file mode 100644 index 00000000..a876f35f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/expert.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/factory.png b/production/example_apps/zippy_maps/webroot/img/icons/factory.png new file mode 100644 index 00000000..d9213def Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/factory.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png b/production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png new file mode 100644 index 00000000..5509d858 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fallingrocks.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/family.png b/production/example_apps/zippy_maps/webroot/img/icons/family.png new file mode 100644 index 00000000..473b2fbb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/family.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/farm-2.png b/production/example_apps/zippy_maps/webroot/img/icons/farm-2.png new file mode 100644 index 00000000..7021e76b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/farm-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/farmstand.png b/production/example_apps/zippy_maps/webroot/img/icons/farmstand.png new file mode 100644 index 00000000..7fe36781 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/farmstand.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fastfood.png b/production/example_apps/zippy_maps/webroot/img/icons/fastfood.png new file mode 100644 index 00000000..4373485d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fastfood.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/female-2.png b/production/example_apps/zippy_maps/webroot/img/icons/female-2.png new file mode 100644 index 00000000..b74dfbf4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/female-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png b/production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png new file mode 100644 index 00000000..4b703258 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ferriswheel.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ferry.png b/production/example_apps/zippy_maps/webroot/img/icons/ferry.png new file mode 100644 index 00000000..34cb864a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ferry.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/festival.png b/production/example_apps/zippy_maps/webroot/img/icons/festival.png new file mode 100644 index 00000000..0d6577f0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/festival.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png b/production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png new file mode 100644 index 00000000..a7c87f69 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fetalalcoholsyndrom.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/field.png b/production/example_apps/zippy_maps/webroot/img/icons/field.png new file mode 100644 index 00000000..8c2637c3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/field.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png b/production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png new file mode 100644 index 00000000..c50baba5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fillingstation.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/findajob.png b/production/example_apps/zippy_maps/webroot/img/icons/findajob.png new file mode 100644 index 00000000..7f2d27f8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/findajob.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/finish.png b/production/example_apps/zippy_maps/webroot/img/icons/finish.png new file mode 100644 index 00000000..85756164 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/finish.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png b/production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png new file mode 100644 index 00000000..97b62e7d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fire-hydrant-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fire.png b/production/example_apps/zippy_maps/webroot/img/icons/fire.png new file mode 100644 index 00000000..b1fe48ad Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fire.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png b/production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png new file mode 100644 index 00000000..6517b7d7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fireexstinguisher.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/firemen.png b/production/example_apps/zippy_maps/webroot/img/icons/firemen.png new file mode 100644 index 00000000..2f5f7c77 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/firemen.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fireworks.png b/production/example_apps/zippy_maps/webroot/img/icons/fireworks.png new file mode 100644 index 00000000..a091e783 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fireworks.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/firstaid.png b/production/example_apps/zippy_maps/webroot/img/icons/firstaid.png new file mode 100644 index 00000000..fdb5b59e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/firstaid.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishchips.png b/production/example_apps/zippy_maps/webroot/img/icons/fishchips.png new file mode 100644 index 00000000..a0dedac4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishchips.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishing.png b/production/example_apps/zippy_maps/webroot/img/icons/fishing.png new file mode 100644 index 00000000..5e482f02 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png b/production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png new file mode 100644 index 00000000..3aa4a526 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishingboat.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png b/production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png new file mode 100644 index 00000000..50dc155f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fishingstore.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fitness.png b/production/example_apps/zippy_maps/webroot/img/icons/fitness.png new file mode 100644 index 00000000..9cf72d0e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fitness.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png b/production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png new file mode 100644 index 00000000..637784a8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fjord-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/flag-export.png b/production/example_apps/zippy_maps/webroot/img/icons/flag-export.png new file mode 100644 index 00000000..c9637979 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/flag-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/flood.png b/production/example_apps/zippy_maps/webroot/img/icons/flood.png new file mode 100644 index 00000000..2ab1b9fd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/flood.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/flowers.png b/production/example_apps/zippy_maps/webroot/img/icons/flowers.png new file mode 100644 index 00000000..e80d390b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/flowers.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/folder-2.png b/production/example_apps/zippy_maps/webroot/img/icons/folder-2.png new file mode 100644 index 00000000..762a869e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/folder-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png b/production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png new file mode 100644 index 00000000..b27badee Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fooddeliveryservice.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png b/production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png new file mode 100644 index 00000000..586d6705 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/foodtruck.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/footprint.png b/production/example_apps/zippy_maps/webroot/img/icons/footprint.png new file mode 100644 index 00000000..5f19ddb2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/footprint.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ford-2.png b/production/example_apps/zippy_maps/webroot/img/icons/ford-2.png new file mode 100644 index 00000000..a48d1cc7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ford-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/forest.png b/production/example_apps/zippy_maps/webroot/img/icons/forest.png new file mode 100644 index 00000000..b9c8eeed Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/forest.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/forest2.png b/production/example_apps/zippy_maps/webroot/img/icons/forest2.png new file mode 100644 index 00000000..4102937f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/forest2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fossils.png b/production/example_apps/zippy_maps/webroot/img/icons/fossils.png new file mode 100644 index 00000000..423ef396 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fossils.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png b/production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png new file mode 100644 index 00000000..0c16b099 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/foundry-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png b/production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png new file mode 100644 index 00000000..d5c8a04f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fountain-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png b/production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png new file mode 100644 index 00000000..60e8232b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fourbyfour.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/freqchg.png b/production/example_apps/zippy_maps/webroot/img/icons/freqchg.png new file mode 100644 index 00000000..8d081538 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/freqchg.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/frog-2.png b/production/example_apps/zippy_maps/webroot/img/icons/frog-2.png new file mode 100644 index 00000000..27d2d4f8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/frog-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/fruits.png b/production/example_apps/zippy_maps/webroot/img/icons/fruits.png new file mode 100644 index 00000000..c147a118 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/fruits.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ft.png b/production/example_apps/zippy_maps/webroot/img/icons/ft.png new file mode 100644 index 00000000..e95706c5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ft.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png b/production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png new file mode 100644 index 00000000..ade87fbf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/funicolar-22x22.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png b/production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png new file mode 100644 index 00000000..26bebccd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gas_cylinder1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gay-female.png b/production/example_apps/zippy_maps/webroot/img/icons/gay-female.png new file mode 100644 index 00000000..bd8fa805 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gay-female.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gay-male.png b/production/example_apps/zippy_maps/webroot/img/icons/gay-male.png new file mode 100644 index 00000000..1379043f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gay-male.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png b/production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png new file mode 100644 index 00000000..067210c6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/geocaching-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png b/production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png new file mode 100644 index 00000000..a7d112e7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/geothermal-site.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png b/production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png new file mode 100644 index 00000000..2cf4a579 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/geyser-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png b/production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png new file mode 100644 index 00000000..fc92196b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ghosttown.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gifts.png b/production/example_apps/zippy_maps/webroot/img/icons/gifts.png new file mode 100644 index 00000000..90869705 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gifts.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png b/production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png new file mode 100644 index 00000000..3fb47e70 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/glacier-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/glasses.png b/production/example_apps/zippy_maps/webroot/img/icons/glasses.png new file mode 100644 index 00000000..cf908fe4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/glasses.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/golfing.png b/production/example_apps/zippy_maps/webroot/img/icons/golfing.png new file mode 100644 index 00000000..0a48c674 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/golfing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png b/production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png new file mode 100644 index 00000000..806ab79a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gondola-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png new file mode 100644 index 00000000..436b707a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gourmet_0star.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/grass.png b/production/example_apps/zippy_maps/webroot/img/icons/grass.png new file mode 100644 index 00000000..6f2fe5e4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/grass.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/grocery.png b/production/example_apps/zippy_maps/webroot/img/icons/grocery.png new file mode 100644 index 00000000..ffa7fbf1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/grocery.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/group-2.png b/production/example_apps/zippy_maps/webroot/img/icons/group-2.png new file mode 100644 index 00000000..7bf96939 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/group-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png b/production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png new file mode 100644 index 00000000..ff56abb1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/gumball_machine.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/handball.png b/production/example_apps/zippy_maps/webroot/img/icons/handball.png new file mode 100644 index 00000000..672ad076 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/handball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png b/production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png new file mode 100644 index 00000000..00ddbb61 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hanggliding.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/harbor.png b/production/example_apps/zippy_maps/webroot/img/icons/harbor.png new file mode 100644 index 00000000..382ac8a3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/harbor.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hare1.png b/production/example_apps/zippy_maps/webroot/img/icons/hare1.png new file mode 100644 index 00000000..10bcc4f5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hare1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hats.png b/production/example_apps/zippy_maps/webroot/img/icons/hats.png new file mode 100644 index 00000000..68760007 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hats.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/haybale.png b/production/example_apps/zippy_maps/webroot/img/icons/haybale.png new file mode 100644 index 00000000..53337ba9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/haybale.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png b/production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png new file mode 100644 index 00000000..356b2053 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/headstone-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/helicopter.png b/production/example_apps/zippy_maps/webroot/img/icons/helicopter.png new file mode 100644 index 00000000..d34a824c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/helicopter.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/highhills.png b/production/example_apps/zippy_maps/webroot/img/icons/highhills.png new file mode 100644 index 00000000..e0159c56 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/highhills.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/highschool.png b/production/example_apps/zippy_maps/webroot/img/icons/highschool.png new file mode 100644 index 00000000..afe7796f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/highschool.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/highway.png b/production/example_apps/zippy_maps/webroot/img/icons/highway.png new file mode 100644 index 00000000..ac77fbf6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/highway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hiking.png b/production/example_apps/zippy_maps/webroot/img/icons/hiking.png new file mode 100644 index 00000000..4b3222de Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hiking.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png b/production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png new file mode 100644 index 00000000..cdb12c0d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/historical_museum.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png b/production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png new file mode 100644 index 00000000..f122de29 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/historicalquarter.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png b/production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png new file mode 100644 index 00000000..0827eff9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hoergeraeteakustiker_22px.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/home-2.png b/production/example_apps/zippy_maps/webroot/img/icons/home-2.png new file mode 100644 index 00000000..8ee55446 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/home-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/homecenter.png b/production/example_apps/zippy_maps/webroot/img/icons/homecenter.png new file mode 100644 index 00000000..1adce316 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/homecenter.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png b/production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png new file mode 100644 index 00000000..8a9c3fb2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/honeycomb.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png b/production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png new file mode 100644 index 00000000..eab39f5f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hookah_final.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/horseriding.png b/production/example_apps/zippy_maps/webroot/img/icons/horseriding.png new file mode 100644 index 00000000..913afeb2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/horseriding.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png b/production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png new file mode 100644 index 00000000..49b5ffc5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hospital-building.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png new file mode 100644 index 00000000..b12cef11 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hostel_0star.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png b/production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png new file mode 100644 index 00000000..b22c75e1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hotairbaloon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png new file mode 100644 index 00000000..62ac992b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hotel_0star.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hotspring.png b/production/example_apps/zippy_maps/webroot/img/icons/hotspring.png new file mode 100644 index 00000000..9cc39807 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hotspring.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/house.png b/production/example_apps/zippy_maps/webroot/img/icons/house.png new file mode 100644 index 00000000..5b609b82 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/house.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hunting.png b/production/example_apps/zippy_maps/webroot/img/icons/hunting.png new file mode 100644 index 00000000..c509e4c5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hunting.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/hut.png b/production/example_apps/zippy_maps/webroot/img/icons/hut.png new file mode 100644 index 00000000..0669aa7f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/hut.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/icecream.png b/production/example_apps/zippy_maps/webroot/img/icons/icecream.png new file mode 100644 index 00000000..56e0689e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/icecream.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/icehockey.png b/production/example_apps/zippy_maps/webroot/img/icons/icehockey.png new file mode 100644 index 00000000..6c3414ec Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/icehockey.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/iceskating.png b/production/example_apps/zippy_maps/webroot/img/icons/iceskating.png new file mode 100644 index 00000000..fc15fc3c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/iceskating.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/icy_road.png b/production/example_apps/zippy_maps/webroot/img/icons/icy_road.png new file mode 100644 index 00000000..b825030d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/icy_road.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png b/production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png new file mode 100644 index 00000000..540c9177 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/indoor-arena.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/information.png b/production/example_apps/zippy_maps/webroot/img/icons/information.png new file mode 100644 index 00000000..6ac10a48 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/information.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/iobridge.png b/production/example_apps/zippy_maps/webroot/img/icons/iobridge.png new file mode 100644 index 00000000..6d29eb05 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/iobridge.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png b/production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png new file mode 100644 index 00000000..a2f96d19 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jacuzzi.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png new file mode 100644 index 00000000..2425c5ba Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-food.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png new file mode 100644 index 00000000..54dec40a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-lantern.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png new file mode 100644 index 00000000..f1e030e6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sake.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png new file mode 100644 index 00000000..41d87a16 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-sweet-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png b/production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png new file mode 100644 index 00000000..d9a8e821 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/japanese-temple.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png b/production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png new file mode 100644 index 00000000..36dd64fc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jazzclub.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jeep.png b/production/example_apps/zippy_maps/webroot/img/icons/jeep.png new file mode 100644 index 00000000..a6dad3b4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jeep.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png b/production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png new file mode 100644 index 00000000..88a88645 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jetfighter.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jewelry.png b/production/example_apps/zippy_maps/webroot/img/icons/jewelry.png new file mode 100644 index 00000000..574d087d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jewelry.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png b/production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png new file mode 100644 index 00000000..4ad43d66 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jewishgrave.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png b/production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png new file mode 100644 index 00000000..d796d113 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jewishquarter.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/jogging.png b/production/example_apps/zippy_maps/webroot/img/icons/jogging.png new file mode 100644 index 00000000..889437c3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/jogging.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/judo.png b/production/example_apps/zippy_maps/webroot/img/icons/judo.png new file mode 100644 index 00000000..df11b1b9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/judo.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/junction.png b/production/example_apps/zippy_maps/webroot/img/icons/junction.png new file mode 100644 index 00000000..cefaf8ed Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/junction.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/karate.png b/production/example_apps/zippy_maps/webroot/img/icons/karate.png new file mode 100644 index 00000000..7d569102 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/karate.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/karting.png b/production/example_apps/zippy_maps/webroot/img/icons/karting.png new file mode 100644 index 00000000..9bccb76a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/karting.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kayak1.png b/production/example_apps/zippy_maps/webroot/img/icons/kayak1.png new file mode 100644 index 00000000..1b1c3c65 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kayak1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kayaking.png b/production/example_apps/zippy_maps/webroot/img/icons/kayaking.png new file mode 100644 index 00000000..c2ad2aad Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kayaking.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kebab.png b/production/example_apps/zippy_maps/webroot/img/icons/kebab.png new file mode 100644 index 00000000..f70089ad Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kebab.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kingair.png b/production/example_apps/zippy_maps/webroot/img/icons/kingair.png new file mode 100644 index 00000000..71d41273 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kingair.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kiosk.png b/production/example_apps/zippy_maps/webroot/img/icons/kiosk.png new file mode 100644 index 00000000..55ddef42 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kiosk.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png b/production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png new file mode 100644 index 00000000..345f3711 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/kitesurfing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/laboratory.png b/production/example_apps/zippy_maps/webroot/img/icons/laboratory.png new file mode 100644 index 00000000..b6159dfb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/laboratory.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lake.png b/production/example_apps/zippy_maps/webroot/img/icons/lake.png new file mode 100644 index 00000000..2ebb5ba3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lake.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/landfill.png b/production/example_apps/zippy_maps/webroot/img/icons/landfill.png new file mode 100644 index 00000000..569f3b8d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/landfill.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/landmark.png b/production/example_apps/zippy_maps/webroot/img/icons/landmark.png new file mode 100644 index 00000000..bfa95e39 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/landmark.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/laterne.png b/production/example_apps/zippy_maps/webroot/img/icons/laterne.png new file mode 100644 index 00000000..899b4e02 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/laterne.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/laundromat.png b/production/example_apps/zippy_maps/webroot/img/icons/laundromat.png new file mode 100644 index 00000000..dc5ccbff Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/laundromat.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png b/production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png new file mode 100644 index 00000000..65c20b2d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/levelcrossing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/library.png b/production/example_apps/zippy_maps/webroot/img/icons/library.png new file mode 100644 index 00000000..2df51af4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/library.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png b/production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png new file mode 100644 index 00000000..5db8c77c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lifeguard-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png b/production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png new file mode 100644 index 00000000..7b698a1d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lighthouse-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/linedown.png b/production/example_apps/zippy_maps/webroot/img/icons/linedown.png new file mode 100644 index 00000000..03337d09 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/linedown.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lingerie.png b/production/example_apps/zippy_maps/webroot/img/icons/lingerie.png new file mode 100644 index 00000000..9c285d80 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lingerie.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/liquor.png b/production/example_apps/zippy_maps/webroot/img/icons/liquor.png new file mode 100644 index 00000000..be5b352b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/liquor.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png b/production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png new file mode 100644 index 00000000..0b8424db Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lobster-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lock.png b/production/example_apps/zippy_maps/webroot/img/icons/lock.png new file mode 100644 index 00000000..7fbd7834 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lock.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png b/production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png new file mode 100644 index 00000000..75c6cfcb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lockerrental.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png b/production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png new file mode 100644 index 00000000..b122791d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/lodging_0star.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/love_date.png b/production/example_apps/zippy_maps/webroot/img/icons/love_date.png new file mode 100644 index 00000000..1a50c223 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/love_date.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png b/production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png new file mode 100644 index 00000000..e374e5e6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/loveinterest.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/magicshow.png b/production/example_apps/zippy_maps/webroot/img/icons/magicshow.png new file mode 100644 index 00000000..0dd7a3d9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/magicshow.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mainroad.png b/production/example_apps/zippy_maps/webroot/img/icons/mainroad.png new file mode 100644 index 00000000..6733f535 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mainroad.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/male-2.png b/production/example_apps/zippy_maps/webroot/img/icons/male-2.png new file mode 100644 index 00000000..b0e4b403 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/male-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mall.png b/production/example_apps/zippy_maps/webroot/img/icons/mall.png new file mode 100644 index 00000000..74c05f8e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mall.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/map.png b/production/example_apps/zippy_maps/webroot/img/icons/map.png new file mode 100644 index 00000000..8935d3fe Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/map.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mapicon.png b/production/example_apps/zippy_maps/webroot/img/icons/mapicon.png new file mode 100644 index 00000000..8d7691cb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mapicon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/marina-2.png b/production/example_apps/zippy_maps/webroot/img/icons/marina-2.png new file mode 100644 index 00000000..58f859e2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/marina-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/market.png b/production/example_apps/zippy_maps/webroot/img/icons/market.png new file mode 100644 index 00000000..01db73d6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/market.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/massage.png b/production/example_apps/zippy_maps/webroot/img/icons/massage.png new file mode 100644 index 00000000..7e996eba Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/massage.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png b/production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png new file mode 100644 index 00000000..43e2e20c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mastcrane1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png b/production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png new file mode 100644 index 00000000..bd6207a0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/medicalstore.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/medicine.png b/production/example_apps/zippy_maps/webroot/img/icons/medicine.png new file mode 100644 index 00000000..1fcd3c92 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/medicine.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/megalith.png b/production/example_apps/zippy_maps/webroot/img/icons/megalith.png new file mode 100644 index 00000000..a809cfc0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/megalith.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/memorial.png b/production/example_apps/zippy_maps/webroot/img/icons/memorial.png new file mode 100644 index 00000000..2cd4500f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/memorial.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png b/production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png new file mode 100644 index 00000000..23770e49 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/metronetwork.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/military.png b/production/example_apps/zippy_maps/webroot/img/icons/military.png new file mode 100644 index 00000000..f63477ca Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/military.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mine.png b/production/example_apps/zippy_maps/webroot/img/icons/mine.png new file mode 100644 index 00000000..45224b23 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mine.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/missile-2.png b/production/example_apps/zippy_maps/webroot/img/icons/missile-2.png new file mode 100644 index 00000000..f2a0d218 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/missile-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png b/production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png new file mode 100644 index 00000000..9872a32f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mobilephonetower.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png b/production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png new file mode 100644 index 00000000..274543a5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/modernmonument.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/moderntower.png b/production/example_apps/zippy_maps/webroot/img/icons/moderntower.png new file mode 100644 index 00000000..78adabd1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/moderntower.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png b/production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png new file mode 100644 index 00000000..298ea761 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/monkey-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png b/production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png new file mode 100644 index 00000000..566b39dc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/monument-historique-icon-white-22x22.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/monument.png b/production/example_apps/zippy_maps/webroot/img/icons/monument.png new file mode 100644 index 00000000..516c0d8b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/monument.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/moonstar.png b/production/example_apps/zippy_maps/webroot/img/icons/moonstar.png new file mode 100644 index 00000000..30fd02e3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/moonstar.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mosquee.png b/production/example_apps/zippy_maps/webroot/img/icons/mosquee.png new file mode 100644 index 00000000..1827972f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mosquee.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png b/production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png new file mode 100644 index 00000000..54f7d1e8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mosquito-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/motel-2.png b/production/example_apps/zippy_maps/webroot/img/icons/motel-2.png new file mode 100644 index 00000000..eafd06c3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/motel-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/motorbike.png b/production/example_apps/zippy_maps/webroot/img/icons/motorbike.png new file mode 100644 index 00000000..6590c6ca Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/motorbike.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png b/production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png new file mode 100644 index 00000000..c8fdea0b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/motorcycle.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png b/production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png new file mode 100644 index 00000000..e8b71fbf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mountain-pass-locator-diagonal-reverse-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png b/production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png new file mode 100644 index 00000000..55ebb37b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mountainbiking-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mountains.png b/production/example_apps/zippy_maps/webroot/img/icons/mountains.png new file mode 100644 index 00000000..a6559e73 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mountains.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/movierental.png b/production/example_apps/zippy_maps/webroot/img/icons/movierental.png new file mode 100644 index 00000000..22068737 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/movierental.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png b/production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png new file mode 100644 index 00000000..0fa5388a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/moving-walkway-enter-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png b/production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png new file mode 100644 index 00000000..bd8ae9c0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/muffin_bagle.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mural.png b/production/example_apps/zippy_maps/webroot/img/icons/mural.png new file mode 100644 index 00000000..846476cc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mural.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png new file mode 100644 index 00000000..0924e1f5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_archeological.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_art.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_art.png new file mode 100644 index 00000000..f7e8033c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_art.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png new file mode 100644 index 00000000..783eacc0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_crafts.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png new file mode 100644 index 00000000..566fe3a1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_industry.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png new file mode 100644 index 00000000..b977ea0d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_naval.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png new file mode 100644 index 00000000..34315c30 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_openair.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_science.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_science.png new file mode 100644 index 00000000..4c9ada58 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_science.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/museum_war.png b/production/example_apps/zippy_maps/webroot/img/icons/museum_war.png new file mode 100644 index 00000000..4adbc117 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/museum_war.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/mushroom.png b/production/example_apps/zippy_maps/webroot/img/icons/mushroom.png new file mode 100644 index 00000000..90c9a2c4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/mushroom.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music.png b/production/example_apps/zippy_maps/webroot/img/icons/music.png new file mode 100644 index 00000000..08923333 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_choral.png b/production/example_apps/zippy_maps/webroot/img/icons/music_choral.png new file mode 100644 index 00000000..d8a8f3c4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_choral.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_classical.png b/production/example_apps/zippy_maps/webroot/img/icons/music_classical.png new file mode 100644 index 00000000..bdbd38ca Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_classical.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png b/production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png new file mode 100644 index 00000000..2297968e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_hiphop.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_live.png b/production/example_apps/zippy_maps/webroot/img/icons/music_live.png new file mode 100644 index 00000000..47d2d78c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_live.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/music_rock.png b/production/example_apps/zippy_maps/webroot/img/icons/music_rock.png new file mode 100644 index 00000000..590e8b2b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/music_rock.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nanny.png b/production/example_apps/zippy_maps/webroot/img/icons/nanny.png new file mode 100644 index 00000000..375014d3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nanny.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png b/production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png new file mode 100644 index 00000000..78ca58ec Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ne_barn-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/newsagent.png b/production/example_apps/zippy_maps/webroot/img/icons/newsagent.png new file mode 100644 index 00000000..2fcf253d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/newsagent.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png b/production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png new file mode 100644 index 00000000..1f8881a7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/no-nuke-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nordicski.png b/production/example_apps/zippy_maps/webroot/img/icons/nordicski.png new file mode 100644 index 00000000..7b806c28 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nordicski.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/notvisited.png b/production/example_apps/zippy_maps/webroot/img/icons/notvisited.png new file mode 100644 index 00000000..f93316f3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/notvisited.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nursery.png b/production/example_apps/zippy_maps/webroot/img/icons/nursery.png new file mode 100644 index 00000000..ad6fe04a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nursery.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png b/production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png new file mode 100644 index 00000000..27d8bb20 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/nursing_home_icon.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/observatory.png b/production/example_apps/zippy_maps/webroot/img/icons/observatory.png new file mode 100644 index 00000000..213e8075 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/observatory.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/office-building.png b/production/example_apps/zippy_maps/webroot/img/icons/office-building.png new file mode 100644 index 00000000..0d519b98 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/office-building.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oil-2.png b/production/example_apps/zippy_maps/webroot/img/icons/oil-2.png new file mode 100644 index 00000000..89d5dc9e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oil-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png b/production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png new file mode 100644 index 00000000..bfa74686 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oilpumpjack.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png b/production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png new file mode 100644 index 00000000..63fd5c53 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oilrig2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png b/production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png new file mode 100644 index 00000000..29c9fb20 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/olympicsite.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png b/production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png new file mode 100644 index 00000000..1a0ce4f5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ophthalmologist.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/outlet2.png b/production/example_apps/zippy_maps/webroot/img/icons/outlet2.png new file mode 100644 index 00000000..4bb19e90 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/outlet2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png b/production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png new file mode 100644 index 00000000..a04c0b42 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/oyster-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png b/production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png new file mode 100644 index 00000000..f0e162f8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pagoda-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/paint.png b/production/example_apps/zippy_maps/webroot/img/icons/paint.png new file mode 100644 index 00000000..44e5ff8e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/paint.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/paintball.png b/production/example_apps/zippy_maps/webroot/img/icons/paintball.png new file mode 100644 index 00000000..34f4b8a8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/paintball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/palace-2.png b/production/example_apps/zippy_maps/webroot/img/icons/palace-2.png new file mode 100644 index 00000000..187109c6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/palace-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png b/production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png new file mode 100644 index 00000000..e1396659 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/palm-tree-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png b/production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png new file mode 100644 index 00000000..30717aab Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/panoramicview.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/paragliding.png b/production/example_apps/zippy_maps/webroot/img/icons/paragliding.png new file mode 100644 index 00000000..61056bb5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/paragliding.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parasailing.png b/production/example_apps/zippy_maps/webroot/img/icons/parasailing.png new file mode 100644 index 00000000..56366ba3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parasailing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parkandride.png b/production/example_apps/zippy_maps/webroot/img/icons/parkandride.png new file mode 100644 index 00000000..a8e303e2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parkandride.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png b/production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png new file mode 100644 index 00000000..948663b4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parking-meter-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png b/production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png new file mode 100644 index 00000000..58b87caf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/parkinggarage.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/party-2.png b/production/example_apps/zippy_maps/webroot/img/icons/party-2.png new file mode 100644 index 00000000..3ed02b39 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/party-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/patisserie.png b/production/example_apps/zippy_maps/webroot/img/icons/patisserie.png new file mode 100644 index 00000000..5de98669 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/patisserie.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/peace.png b/production/example_apps/zippy_maps/webroot/img/icons/peace.png new file mode 100644 index 00000000..496ac93b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/peace.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png b/production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png new file mode 100644 index 00000000..a115b8d9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pedestriancrossing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png b/production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png new file mode 100644 index 00000000..a1dd3d41 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/penguin-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pens.png b/production/example_apps/zippy_maps/webroot/img/icons/pens.png new file mode 100644 index 00000000..78b59d0f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pens.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/perfumery.png b/production/example_apps/zippy_maps/webroot/img/icons/perfumery.png new file mode 100644 index 00000000..61d61eda Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/perfumery.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/petanque.png b/production/example_apps/zippy_maps/webroot/img/icons/petanque.png new file mode 100644 index 00000000..3672dfbd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/petanque.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png b/production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png new file mode 100644 index 00000000..4b7c9478 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/petroglyphs-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pets.png b/production/example_apps/zippy_maps/webroot/img/icons/pets.png new file mode 100644 index 00000000..883bb4db Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pets.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/phantom.png b/production/example_apps/zippy_maps/webroot/img/icons/phantom.png new file mode 100644 index 00000000..131b4894 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/phantom.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/phones.png b/production/example_apps/zippy_maps/webroot/img/icons/phones.png new file mode 100644 index 00000000..889081e6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/phones.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/photo.png b/production/example_apps/zippy_maps/webroot/img/icons/photo.png new file mode 100644 index 00000000..f5168560 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/photo.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/photography.png b/production/example_apps/zippy_maps/webroot/img/icons/photography.png new file mode 100644 index 00000000..279659bf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/photography.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png b/production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png new file mode 100644 index 00000000..2286f352 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/picnic-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pig.png b/production/example_apps/zippy_maps/webroot/img/icons/pig.png new file mode 100644 index 00000000..697127be Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pig.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pin-export.png b/production/example_apps/zippy_maps/webroot/img/icons/pin-export.png new file mode 100644 index 00000000..14e0b2db Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pin-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pirates.png b/production/example_apps/zippy_maps/webroot/img/icons/pirates.png new file mode 100644 index 00000000..fef930f0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pirates.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png b/production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png new file mode 100644 index 00000000..faa51f79 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pizzaria.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/planecrash.png b/production/example_apps/zippy_maps/webroot/img/icons/planecrash.png new file mode 100644 index 00000000..bdee2902 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/planecrash.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png b/production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png new file mode 100644 index 00000000..05357efa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/planetarium-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/playground.png b/production/example_apps/zippy_maps/webroot/img/icons/playground.png new file mode 100644 index 00000000..4257fdaa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/playground.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png b/production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png new file mode 100644 index 00000000..18a7b986 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pleasurepier.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/poker.png b/production/example_apps/zippy_maps/webroot/img/icons/poker.png new file mode 100644 index 00000000..c66fdbe1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/poker.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/police.png b/production/example_apps/zippy_maps/webroot/img/icons/police.png new file mode 100644 index 00000000..f93a9edc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/police.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/postal.png b/production/example_apps/zippy_maps/webroot/img/icons/postal.png new file mode 100644 index 00000000..890e05a4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/postal.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png b/production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png new file mode 100644 index 00000000..349ef141 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/powerlinepole.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png b/production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png new file mode 100644 index 00000000..89cfcce5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/poweroutage.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/powerplant.png b/production/example_apps/zippy_maps/webroot/img/icons/powerplant.png new file mode 100644 index 00000000..69d821b1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/powerplant.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png b/production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png new file mode 100644 index 00000000..90f03abf Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/powersubstation.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/prayer.png b/production/example_apps/zippy_maps/webroot/img/icons/prayer.png new file mode 100644 index 00000000..c6abcd19 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/prayer.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/presentation.png b/production/example_apps/zippy_maps/webroot/img/icons/presentation.png new file mode 100644 index 00000000..4b881d81 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/presentation.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png b/production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png new file mode 100644 index 00000000..8788016f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/price-tag-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/printer-2.png b/production/example_apps/zippy_maps/webroot/img/icons/printer-2.png new file mode 100644 index 00000000..3f1ce527 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/printer-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/prison.png b/production/example_apps/zippy_maps/webroot/img/icons/prison.png new file mode 100644 index 00000000..2967b250 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/prison.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/publicart.png b/production/example_apps/zippy_maps/webroot/img/icons/publicart.png new file mode 100644 index 00000000..4523333a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/publicart.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/pyramid.png b/production/example_apps/zippy_maps/webroot/img/icons/pyramid.png new file mode 100644 index 00000000..0ca76181 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/pyramid.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png b/production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png new file mode 100644 index 00000000..4cfb9b06 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/quadrifoglio.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radar.png b/production/example_apps/zippy_maps/webroot/img/icons/radar.png new file mode 100644 index 00000000..0a2aeeb4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radar.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radiation.png b/production/example_apps/zippy_maps/webroot/img/icons/radiation.png new file mode 100644 index 00000000..92b81f60 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radiation.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png b/production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png new file mode 100644 index 00000000..3c6ade8a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radio-control-model-car.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png b/production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png new file mode 100644 index 00000000..197e95a2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/radio-station-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rainy.png b/production/example_apps/zippy_maps/webroot/img/icons/rainy.png new file mode 100644 index 00000000..79bf0dfc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rainy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rape.png b/production/example_apps/zippy_maps/webroot/img/icons/rape.png new file mode 100644 index 00000000..198495cb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rape.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png b/production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png new file mode 100644 index 00000000..6b459d41 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/reatorlogowhite-22x22.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/recycle.png b/production/example_apps/zippy_maps/webroot/img/icons/recycle.png new file mode 100644 index 00000000..2a03eca7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/recycle.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/regroup.png b/production/example_apps/zippy_maps/webroot/img/icons/regroup.png new file mode 100644 index 00000000..a5554b6d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/regroup.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/repair.png b/production/example_apps/zippy_maps/webroot/img/icons/repair.png new file mode 100644 index 00000000..afc22ea3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/repair.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png b/production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png new file mode 100644 index 00000000..fb3b6dd5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rescue-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/resort.png b/production/example_apps/zippy_maps/webroot/img/icons/resort.png new file mode 100644 index 00000000..5ad7c49a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/resort.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant.png new file mode 100644 index 00000000..76792f52 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png new file mode 100644 index 00000000..d486d14a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_african.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png new file mode 100644 index 00000000..4b081750 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_breakfast.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png new file mode 100644 index 00000000..c97f89f3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_buffet.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png new file mode 100644 index 00000000..457ec141 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_chinese.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png new file mode 100644 index 00000000..1d69fdb7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_fish.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png new file mode 100644 index 00000000..b30b6172 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_greek.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png new file mode 100644 index 00000000..5900e4e7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_indian.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png new file mode 100644 index 00000000..ae58f53f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_italian.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png new file mode 100644 index 00000000..ff45f5d5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_korean.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png new file mode 100644 index 00000000..fc4202ef Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mediterranean.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png new file mode 100644 index 00000000..a32f50ef Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_mexican.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png new file mode 100644 index 00000000..da0a53ae Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_romantic.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png new file mode 100644 index 00000000..a36f6637 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_steakhouse.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png new file mode 100644 index 00000000..f00384d8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_tapas.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png new file mode 100644 index 00000000..7791309d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_thai.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png new file mode 100644 index 00000000..a861bc0c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_turkish.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png new file mode 100644 index 00000000..6b202618 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/restaurant_vegetarian.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/revolt.png b/production/example_apps/zippy_maps/webroot/img/icons/revolt.png new file mode 100644 index 00000000..2cee54f0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/revolt.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png b/production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png new file mode 100644 index 00000000..ff255887 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/riparianhabitat.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/river-2.png b/production/example_apps/zippy_maps/webroot/img/icons/river-2.png new file mode 100644 index 00000000..2ece442d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/river-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/road.png b/production/example_apps/zippy_maps/webroot/img/icons/road.png new file mode 100644 index 00000000..a4cef604 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/road.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png b/production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png new file mode 100644 index 00000000..72665983 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/roadtype_gravel.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png b/production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png new file mode 100644 index 00000000..c6640a89 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rockhouse.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rodent.png b/production/example_apps/zippy_maps/webroot/img/icons/rodent.png new file mode 100644 index 00000000..836bf619 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rodent.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png b/production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png new file mode 100644 index 00000000..05c33e70 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rollerskate.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png b/production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png new file mode 100644 index 00000000..c35fe2ae Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ropescourse.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rowboat.png b/production/example_apps/zippy_maps/webroot/img/icons/rowboat.png new file mode 100644 index 00000000..31d2fe83 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rowboat.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png b/production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png new file mode 100644 index 00000000..bce98000 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/rugbyfield.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png b/production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png new file mode 100644 index 00000000..4fd075f2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ruins-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sailing.png b/production/example_apps/zippy_maps/webroot/img/icons/sailing.png new file mode 100644 index 00000000..7d0dc493 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sailing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png new file mode 100644 index 00000000..2eb44269 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sandwich-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sauna.png b/production/example_apps/zippy_maps/webroot/img/icons/sauna.png new file mode 100644 index 00000000..4ae5ec48 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sauna.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png new file mode 100644 index 00000000..89f65145 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sawmill-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/school.png b/production/example_apps/zippy_maps/webroot/img/icons/school.png new file mode 100644 index 00000000..785bf0f9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/school.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png b/production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png new file mode 100644 index 00000000..a604f72c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/schreibwaren_web.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png b/production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png new file mode 100644 index 00000000..dd33abcd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/scoutgroup.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png b/production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png new file mode 100644 index 00000000..0242ada5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/scubadiving.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/seals.png b/production/example_apps/zippy_maps/webroot/img/icons/seals.png new file mode 100644 index 00000000..dba195ed Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/seals.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/segway.png b/production/example_apps/zippy_maps/webroot/img/icons/segway.png new file mode 100644 index 00000000..138da355 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/segway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png b/production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png new file mode 100644 index 00000000..32ed4090 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/seniorsite.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png b/production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png new file mode 100644 index 00000000..a01752df Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/septic_tank.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/share.png b/production/example_apps/zippy_maps/webroot/img/icons/share.png new file mode 100644 index 00000000..f805cd68 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/share.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shark-export.png b/production/example_apps/zippy_maps/webroot/img/icons/shark-export.png new file mode 100644 index 00000000..fcb54443 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shark-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png b/production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png new file mode 100644 index 00000000..82ace96d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shintoshrine.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png b/production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png new file mode 100644 index 00000000..c256c0d7 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shipwreck.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shoes.png b/production/example_apps/zippy_maps/webroot/img/icons/shoes.png new file mode 100644 index 00000000..870b5e61 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shoes.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shooting.png b/production/example_apps/zippy_maps/webroot/img/icons/shooting.png new file mode 100644 index 00000000..5e6ead4b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shooting.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png b/production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png new file mode 100644 index 00000000..b4f2f99f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shootingrange.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shore-2.png b/production/example_apps/zippy_maps/webroot/img/icons/shore-2.png new file mode 100644 index 00000000..a9783482 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shore-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/shower.png b/production/example_apps/zippy_maps/webroot/img/icons/shower.png new file mode 100644 index 00000000..3503e843 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/shower.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sight-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sight-2.png new file mode 100644 index 00000000..2cbfca36 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sight-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png b/production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png new file mode 100644 index 00000000..4fb7cbd6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/signpost-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sikh.png b/production/example_apps/zippy_maps/webroot/img/icons/sikh.png new file mode 100644 index 00000000..df2e67d8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sikh.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png b/production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png new file mode 100644 index 00000000..21bebe36 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ski_shoe1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skiing.png b/production/example_apps/zippy_maps/webroot/img/icons/skiing.png new file mode 100644 index 00000000..b3ee65d2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skiing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skijump.png b/production/example_apps/zippy_maps/webroot/img/icons/skijump.png new file mode 100644 index 00000000..f814af20 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skijump.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skilifting.png b/production/example_apps/zippy_maps/webroot/img/icons/skilifting.png new file mode 100644 index 00000000..b9ab1fae Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skilifting.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skis.png b/production/example_apps/zippy_maps/webroot/img/icons/skis.png new file mode 100644 index 00000000..871a43c6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skis.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/skull.png b/production/example_apps/zippy_maps/webroot/img/icons/skull.png new file mode 100644 index 00000000..20196c48 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/skull.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sledge.png b/production/example_apps/zippy_maps/webroot/img/icons/sledge.png new file mode 100644 index 00000000..b61d2833 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sledge.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png b/production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png new file mode 100644 index 00000000..3be838aa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sledge_summer.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png b/production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png new file mode 100644 index 00000000..75bacab1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sledgerental.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/slipway.png b/production/example_apps/zippy_maps/webroot/img/icons/slipway.png new file mode 100644 index 00000000..81ad5da5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/slipway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/smallcity.png b/production/example_apps/zippy_maps/webroot/img/icons/smallcity.png new file mode 100644 index 00000000..4b8d354e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/smallcity.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png b/production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png new file mode 100644 index 00000000..5b3b9a3f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/smiley_happy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/smoking.png b/production/example_apps/zippy_maps/webroot/img/icons/smoking.png new file mode 100644 index 00000000..afcea98d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/smoking.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snail.png b/production/example_apps/zippy_maps/webroot/img/icons/snail.png new file mode 100644 index 00000000..42597180 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snail.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snakes.png b/production/example_apps/zippy_maps/webroot/img/icons/snakes.png new file mode 100644 index 00000000..3947eff0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snakes.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sneakers.png b/production/example_apps/zippy_maps/webroot/img/icons/sneakers.png new file mode 100644 index 00000000..39cae03c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sneakers.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png b/production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png new file mode 100644 index 00000000..dcbd9ed0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snorkeling.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png b/production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png new file mode 100644 index 00000000..88203801 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowboarding.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png b/production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png new file mode 100644 index 00000000..f66a3581 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowmobiling.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png b/production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png new file mode 100644 index 00000000..10619fb0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowpark_arc.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png b/production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png new file mode 100644 index 00000000..d5de482a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowshoeing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png b/production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png new file mode 100644 index 00000000..756ad6b9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/snowy-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/soccer.png b/production/example_apps/zippy_maps/webroot/img/icons/soccer.png new file mode 100644 index 00000000..5acbb91b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/soccer.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png b/production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png new file mode 100644 index 00000000..6795f464 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/solarenergy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png b/production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png new file mode 100644 index 00000000..51f49d68 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sozialeeinrichtung.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spa.png b/production/example_apps/zippy_maps/webroot/img/icons/spa.png new file mode 100644 index 00000000..dbafb862 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spa.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png b/production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png new file mode 100644 index 00000000..6d73e121 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spaceport-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/speed_50.png b/production/example_apps/zippy_maps/webroot/img/icons/speed_50.png new file mode 100644 index 00000000..06569da5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/speed_50.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/speedhump.png b/production/example_apps/zippy_maps/webroot/img/icons/speedhump.png new file mode 100644 index 00000000..5e270a2a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/speedhump.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/speedriding.png b/production/example_apps/zippy_maps/webroot/img/icons/speedriding.png new file mode 100644 index 00000000..53d1f357 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/speedriding.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spelunking.png b/production/example_apps/zippy_maps/webroot/img/icons/spelunking.png new file mode 100644 index 00000000..0d2d0bf0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spelunking.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/spider.png b/production/example_apps/zippy_maps/webroot/img/icons/spider.png new file mode 100644 index 00000000..3608abc4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/spider.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/splice.png b/production/example_apps/zippy_maps/webroot/img/icons/splice.png new file mode 100644 index 00000000..8f470c18 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/splice.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sportscar.png b/production/example_apps/zippy_maps/webroot/img/icons/sportscar.png new file mode 100644 index 00000000..7c84dee0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sportscar.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png b/production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png new file mode 100644 index 00000000..d333ae7a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sportutilityvehicle.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/square-compass.png b/production/example_apps/zippy_maps/webroot/img/icons/square-compass.png new file mode 100644 index 00000000..ba514fe4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/square-compass.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/squash-2.png b/production/example_apps/zippy_maps/webroot/img/icons/squash-2.png new file mode 100644 index 00000000..418bed62 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/squash-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stadium.png b/production/example_apps/zippy_maps/webroot/img/icons/stadium.png new file mode 100644 index 00000000..1e434d01 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stadium.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stairs.png b/production/example_apps/zippy_maps/webroot/img/icons/stairs.png new file mode 100644 index 00000000..801f9674 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stairs.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/star-3.png b/production/example_apps/zippy_maps/webroot/img/icons/star-3.png new file mode 100644 index 00000000..18f55ca5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/star-3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png b/production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png new file mode 100644 index 00000000..5fa69f39 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stargate-raw.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png b/production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png new file mode 100644 index 00000000..82b1188b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/start-race-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/statue-2.png b/production/example_apps/zippy_maps/webroot/img/icons/statue-2.png new file mode 100644 index 00000000..0f48d010 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/statue-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png b/production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png new file mode 100644 index 00000000..19ef504f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/steamtrain.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stop.png b/production/example_apps/zippy_maps/webroot/img/icons/stop.png new file mode 100644 index 00000000..f7ffb612 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stop.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/strike.png b/production/example_apps/zippy_maps/webroot/img/icons/strike.png new file mode 100644 index 00000000..89c27d43 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/strike.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png b/production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png new file mode 100644 index 00000000..bea9db58 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/stripclub2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png b/production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png new file mode 100644 index 00000000..6b5ad6a6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/submarine-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png b/production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png new file mode 100644 index 00000000..8e201c1f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sugar-shack.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/summercamp.png b/production/example_apps/zippy_maps/webroot/img/icons/summercamp.png new file mode 100644 index 00000000..dcb656f9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/summercamp.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png b/production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png new file mode 100644 index 00000000..f70fe620 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sumo-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sunny.png b/production/example_apps/zippy_maps/webroot/img/icons/sunny.png new file mode 100644 index 00000000..c34075d8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sunny.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png b/production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png new file mode 100644 index 00000000..41c4bd0c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/sunsetland.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/supermarket.png b/production/example_apps/zippy_maps/webroot/img/icons/supermarket.png new file mode 100644 index 00000000..b2bd45d6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/supermarket.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png b/production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png new file mode 100644 index 00000000..166a56e5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surfacelift.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surfing.png b/production/example_apps/zippy_maps/webroot/img/icons/surfing.png new file mode 100644 index 00000000..f86e83ec Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surfing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png b/production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png new file mode 100644 index 00000000..d0fcf599 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surfpaddle.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png b/production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png new file mode 100644 index 00000000..2dcf0279 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/surveying-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/swimming.png b/production/example_apps/zippy_maps/webroot/img/icons/swimming.png new file mode 100644 index 00000000..491f81b2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/swimming.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png b/production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png new file mode 100644 index 00000000..64f3a368 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/synagogue-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png b/production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png new file mode 100644 index 00000000..3609c3f8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taekwondo-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tailor.png b/production/example_apps/zippy_maps/webroot/img/icons/tailor.png new file mode 100644 index 00000000..404744af Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tailor.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/takeaway.png b/production/example_apps/zippy_maps/webroot/img/icons/takeaway.png new file mode 100644 index 00000000..f1757167 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/takeaway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/targ.png b/production/example_apps/zippy_maps/webroot/img/icons/targ.png new file mode 100644 index 00000000..06b9d1aa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/targ.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taxi.png b/production/example_apps/zippy_maps/webroot/img/icons/taxi.png new file mode 100644 index 00000000..b09359ec Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taxi.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png b/production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png new file mode 100644 index 00000000..6eaed945 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taxiboat.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/taxiway.png b/production/example_apps/zippy_maps/webroot/img/icons/taxiway.png new file mode 100644 index 00000000..698719e0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/taxiway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/teahouse.png b/production/example_apps/zippy_maps/webroot/img/icons/teahouse.png new file mode 100644 index 00000000..a7ac062e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/teahouse.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png b/production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png new file mode 100644 index 00000000..bb6fa718 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tebletennis.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/telephone.png b/production/example_apps/zippy_maps/webroot/img/icons/telephone.png new file mode 100644 index 00000000..97121b0a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/telephone.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/temple-2.png b/production/example_apps/zippy_maps/webroot/img/icons/temple-2.png new file mode 100644 index 00000000..e0dcb6a9 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/temple-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/templehindu.png b/production/example_apps/zippy_maps/webroot/img/icons/templehindu.png new file mode 100644 index 00000000..987c1f76 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/templehindu.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tennis.png b/production/example_apps/zippy_maps/webroot/img/icons/tennis.png new file mode 100644 index 00000000..f6f372b1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tennis.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/terrace.png b/production/example_apps/zippy_maps/webroot/img/icons/terrace.png new file mode 100644 index 00000000..aef05b47 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/terrace.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/text.png b/production/example_apps/zippy_maps/webroot/img/icons/text.png new file mode 100644 index 00000000..04e7bdb0 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/text.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/textiles.png b/production/example_apps/zippy_maps/webroot/img/icons/textiles.png new file mode 100644 index 00000000..630f372a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/textiles.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theater.png b/production/example_apps/zippy_maps/webroot/img/icons/theater.png new file mode 100644 index 00000000..627fb556 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theater.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theft.png b/production/example_apps/zippy_maps/webroot/img/icons/theft.png new file mode 100644 index 00000000..1dbf9222 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theft.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/themepark.png b/production/example_apps/zippy_maps/webroot/img/icons/themepark.png new file mode 100644 index 00000000..92ddc01f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/themepark.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/therapy.png b/production/example_apps/zippy_maps/webroot/img/icons/therapy.png new file mode 100644 index 00000000..d20b0cc6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/therapy.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png b/production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png new file mode 100644 index 00000000..c6361691 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theravadapagoda.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png b/production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png new file mode 100644 index 00000000..7bf618ef Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/theravadatemple.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png b/production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png new file mode 100644 index 00000000..193fa5f3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/thunderstorm.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png b/production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png new file mode 100644 index 00000000..9a74e625 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ticket_office2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png b/production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png new file mode 100644 index 00000000..c36df0b8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tidaldiamond.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png b/production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png new file mode 100644 index 00000000..824c1a23 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tiger-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tires.png b/production/example_apps/zippy_maps/webroot/img/icons/tires.png new file mode 100644 index 00000000..19670004 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tires.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/toilets.png b/production/example_apps/zippy_maps/webroot/img/icons/toilets.png new file mode 100644 index 00000000..327834a4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/toilets.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tollstation.png b/production/example_apps/zippy_maps/webroot/img/icons/tollstation.png new file mode 100644 index 00000000..8733d3ae Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tollstation.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tools.png b/production/example_apps/zippy_maps/webroot/img/icons/tools.png new file mode 100644 index 00000000..8b42712a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tools.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png b/production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png new file mode 100644 index 00000000..a9b9fe1e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tornado-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/torture.png b/production/example_apps/zippy_maps/webroot/img/icons/torture.png new file mode 100644 index 00000000..b67a1318 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/torture.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tower.png b/production/example_apps/zippy_maps/webroot/img/icons/tower.png new file mode 100644 index 00000000..e2af01ab Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tower.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/townhouse.png b/production/example_apps/zippy_maps/webroot/img/icons/townhouse.png new file mode 100644 index 00000000..37dc9e6d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/townhouse.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/toys.png b/production/example_apps/zippy_maps/webroot/img/icons/toys.png new file mode 100644 index 00000000..f9e10036 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/toys.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png b/production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png new file mode 100644 index 00000000..c408c074 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trafficcamera.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png b/production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png new file mode 100644 index 00000000..19ea65f4 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trafficlight.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/train.png b/production/example_apps/zippy_maps/webroot/img/icons/train.png new file mode 100644 index 00000000..63e386ed Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/train.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tramway.png b/production/example_apps/zippy_maps/webroot/img/icons/tramway.png new file mode 100644 index 00000000..5e80bc12 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tramway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trash.png b/production/example_apps/zippy_maps/webroot/img/icons/trash.png new file mode 100644 index 00000000..05f610af Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trash.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png b/production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png new file mode 100644 index 00000000..f4f27c8c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/travel_agency.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png b/production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png new file mode 100644 index 00000000..c2c6d247 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/treasure-mark.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/treedown.png b/production/example_apps/zippy_maps/webroot/img/icons/treedown.png new file mode 100644 index 00000000..560eba5f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/treedown.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/triskelion.png b/production/example_apps/zippy_maps/webroot/img/icons/triskelion.png new file mode 100644 index 00000000..def53ba1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/triskelion.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/trolley.png b/production/example_apps/zippy_maps/webroot/img/icons/trolley.png new file mode 100644 index 00000000..24d431cb Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/trolley.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/truck3.png b/production/example_apps/zippy_maps/webroot/img/icons/truck3.png new file mode 100644 index 00000000..c4e1320d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/truck3.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tsunami.png b/production/example_apps/zippy_maps/webroot/img/icons/tsunami.png new file mode 100644 index 00000000..5caf387d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tsunami.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tunnel.png b/production/example_apps/zippy_maps/webroot/img/icons/tunnel.png new file mode 100644 index 00000000..31be93fd Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tunnel.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png b/production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png new file mode 100644 index 00000000..ca4121d1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/turtle-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/tweet.png b/production/example_apps/zippy_maps/webroot/img/icons/tweet.png new file mode 100644 index 00000000..55a8a1d1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/tweet.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png b/production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png new file mode 100644 index 00000000..dc1a779e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/u-pick_stand.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/ufo.png b/production/example_apps/zippy_maps/webroot/img/icons/ufo.png new file mode 100644 index 00000000..521c1632 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/ufo.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png b/production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png new file mode 100644 index 00000000..a0ab615f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/umbrella-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/underground.png b/production/example_apps/zippy_maps/webroot/img/icons/underground.png new file mode 100644 index 00000000..02490a0e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/underground.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/university.png b/production/example_apps/zippy_maps/webroot/img/icons/university.png new file mode 100644 index 00000000..2cdb09df Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/university.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/usfootball.png b/production/example_apps/zippy_maps/webroot/img/icons/usfootball.png new file mode 100644 index 00000000..dc357f1b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/usfootball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/van.png b/production/example_apps/zippy_maps/webroot/img/icons/van.png new file mode 100644 index 00000000..eef87115 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/van.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/vespa.png b/production/example_apps/zippy_maps/webroot/img/icons/vespa.png new file mode 100644 index 00000000..6804ed7f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/vespa.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/veterinary.png b/production/example_apps/zippy_maps/webroot/img/icons/veterinary.png new file mode 100644 index 00000000..8827f8ab Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/veterinary.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/video.png b/production/example_apps/zippy_maps/webroot/img/icons/video.png new file mode 100644 index 00000000..49f1bcd5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/video.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/videogames.png b/production/example_apps/zippy_maps/webroot/img/icons/videogames.png new file mode 100644 index 00000000..22d29568 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/videogames.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/villa.png b/production/example_apps/zippy_maps/webroot/img/icons/villa.png new file mode 100644 index 00000000..3fe6b795 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/villa.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png b/production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png new file mode 100644 index 00000000..c5257bad Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/vineyard-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png b/production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png new file mode 100644 index 00000000..033152e8 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/volcano-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/volleyball.png b/production/example_apps/zippy_maps/webroot/img/icons/volleyball.png new file mode 100644 index 00000000..cc4a8f66 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/volleyball.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waiting.png b/production/example_apps/zippy_maps/webroot/img/icons/waiting.png new file mode 100644 index 00000000..eda32d2a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waiting.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png b/production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png new file mode 100644 index 00000000..4e4e9baa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/walkingtour.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/war.png b/production/example_apps/zippy_maps/webroot/img/icons/war.png new file mode 100644 index 00000000..fc82796d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/war.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png b/production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png new file mode 100644 index 00000000..91d4f5df Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/warehouse-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/water.png b/production/example_apps/zippy_maps/webroot/img/icons/water.png new file mode 100644 index 00000000..593fe652 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/water.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/watercraft.png b/production/example_apps/zippy_maps/webroot/img/icons/watercraft.png new file mode 100644 index 00000000..eab5c36e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/watercraft.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png b/production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png new file mode 100644 index 00000000..dc4636bc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterfall-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png b/production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png new file mode 100644 index 00000000..99d5c646 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/watermill-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterpark.png b/production/example_apps/zippy_maps/webroot/img/icons/waterpark.png new file mode 100644 index 00000000..97871054 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterpark.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png b/production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png new file mode 100644 index 00000000..ede6e97e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterskiing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/watertower.png b/production/example_apps/zippy_maps/webroot/img/icons/watertower.png new file mode 100644 index 00000000..6b4c7b4b Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/watertower.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterwell.png b/production/example_apps/zippy_maps/webroot/img/icons/waterwell.png new file mode 100644 index 00000000..743406e3 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterwell.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png b/production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png new file mode 100644 index 00000000..661c9286 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/waterwellpump.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/webcam.png b/production/example_apps/zippy_maps/webroot/img/icons/webcam.png new file mode 100644 index 00000000..da16de26 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/webcam.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wedding.png b/production/example_apps/zippy_maps/webroot/img/icons/wedding.png new file mode 100644 index 00000000..c8c40b7e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wedding.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/weights.png b/production/example_apps/zippy_maps/webroot/img/icons/weights.png new file mode 100644 index 00000000..39e83b7a Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/weights.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wetlands.png b/production/example_apps/zippy_maps/webroot/img/icons/wetlands.png new file mode 100644 index 00000000..a474c17e Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wetlands.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/whale-2.png b/production/example_apps/zippy_maps/webroot/img/icons/whale-2.png new file mode 100644 index 00000000..3f1b368f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/whale-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wifi.png b/production/example_apps/zippy_maps/webroot/img/icons/wifi.png new file mode 100644 index 00000000..2c7c3609 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wifi.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png b/production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png new file mode 100644 index 00000000..cb940556 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wiki-export.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png b/production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png new file mode 100644 index 00000000..bb7a3aa5 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wildlifecrossing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wind-2.png b/production/example_apps/zippy_maps/webroot/img/icons/wind-2.png new file mode 100644 index 00000000..89c4dc73 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wind-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png b/production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png new file mode 100644 index 00000000..ce6af24d Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/windmill-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png b/production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png new file mode 100644 index 00000000..16a1123f Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/windsurfing.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/windturbine.png b/production/example_apps/zippy_maps/webroot/img/icons/windturbine.png new file mode 100644 index 00000000..2606aefa Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/windturbine.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/winebar.png b/production/example_apps/zippy_maps/webroot/img/icons/winebar.png new file mode 100644 index 00000000..c9279503 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/winebar.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/winetasting.png b/production/example_apps/zippy_maps/webroot/img/icons/winetasting.png new file mode 100644 index 00000000..c85f42f6 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/winetasting.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/woodshed.png b/production/example_apps/zippy_maps/webroot/img/icons/woodshed.png new file mode 100644 index 00000000..d62f0026 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/woodshed.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/workoffice.png b/production/example_apps/zippy_maps/webroot/img/icons/workoffice.png new file mode 100644 index 00000000..24f95875 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/workoffice.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/workshop.png b/production/example_apps/zippy_maps/webroot/img/icons/workshop.png new file mode 100644 index 00000000..c50ea96c Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/workshop.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/world.png b/production/example_apps/zippy_maps/webroot/img/icons/world.png new file mode 100644 index 00000000..524744fc Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/world.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png b/production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png new file mode 100644 index 00000000..02cabb92 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/worldwildway.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png b/production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png new file mode 100644 index 00000000..779f6e64 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/wrestling-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/yoga.png b/production/example_apps/zippy_maps/webroot/img/icons/yoga.png new file mode 100644 index 00000000..120ecda2 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/yoga.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/yooner.png b/production/example_apps/zippy_maps/webroot/img/icons/yooner.png new file mode 100644 index 00000000..d471f134 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/yooner.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png b/production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png new file mode 100644 index 00000000..2ace63b1 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/you-are-here-2.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png b/production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png new file mode 100644 index 00000000..6441e760 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/youthhostel.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png b/production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png new file mode 100644 index 00000000..21b18e88 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/zombie-outbreak1.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/zoo.png b/production/example_apps/zippy_maps/webroot/img/icons/zoo.png new file mode 100644 index 00000000..adc20f33 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/zoo.png differ diff --git a/production/example_apps/zippy_maps/webroot/img/icons/zoom.png b/production/example_apps/zippy_maps/webroot/img/icons/zoom.png new file mode 100644 index 00000000..a5391872 Binary files /dev/null and b/production/example_apps/zippy_maps/webroot/img/icons/zoom.png differ diff --git a/production/example_apps/zippy_maps/webroot/index.php b/production/example_apps/zippy_maps/webroot/index.php new file mode 100644 index 00000000..6791f475 --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/index.php @@ -0,0 +1,37 @@ +emit($server->run()); diff --git a/production/example_apps/zippy_maps/webroot/js/empty b/production/example_apps/zippy_maps/webroot/js/empty new file mode 100644 index 00000000..e69de29b diff --git a/production/example_apps/zippy_maps/webroot/js/jquery-3.2.1.min.js b/production/example_apps/zippy_maps/webroot/js/jquery-3.2.1.min.js new file mode 100644 index 00000000..644d35e2 --- /dev/null +++ b/production/example_apps/zippy_maps/webroot/js/jquery-3.2.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"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){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=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={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.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=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$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("fieldset");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=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;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 function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(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 qa(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},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=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),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){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):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(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return 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&&C.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.escape=function(a){return(a+"").replace(ba,ca)},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:V,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(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===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 V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.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(_,aa).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("(^|"+K+")"+a+"("+K+"|$)"))&&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(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||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=I(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(P,"$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(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).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:oa(!1),disabled:oa(!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 X.test(a.nodeName)},input:function(a){return W.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:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(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}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};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=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return 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){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.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 W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),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),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==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,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.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 Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(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&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("