From 13e2fd6e7492d46d12acf94af97e588fff358dfb Mon Sep 17 00:00:00 2001 From: Jeremy Kidwell Date: Mon, 26 Jun 2017 20:57:02 +0100 Subject: [PATCH] first commit --- LICENSE | 3 + Makefile | 49 + README.md | 5 + archetypes/default.markdown | 16 + config.yaml | 30 + content/403/index.html | 8 + content/404/index.html | 8 + content/archive/index.html | 5 + content/resources/_index.md | 70 + content/resources/emacs-starter-kit/_index.md | 108 + content/resources/github/_index.md | 10 + content/teaching/religion_public_sphere.md | 15 + content/teaching/theological_ethics.md | 12 + layouts/404.html | 142 + layouts/archive/li.html | 4 + layouts/archive/single.html | 36 + layouts/blog/li.html | 6 + layouts/blog/single.html | 49 + layouts/blog/summary.html | 11 + layouts/index.html | 122 + layouts/indexes/blog.html | 37 + layouts/indexes/category.html | 34 + layouts/indexes/indexes.html | 36 + layouts/indexes/page.html | 19 + layouts/other/single.html | 41 + layouts/page/single.html | 28 + layouts/partials/allcats.html | 1 + layouts/partials/archive.html | 9 + layouts/partials/comingsoon.html | 1 + layouts/partials/details.html | 2 + layouts/partials/foot.html | 4 + layouts/partials/footer-front.html | 6 + layouts/partials/footer.html | 5 + layouts/partials/head.html | 18 + layouts/partials/head_includes.html | 5 + layouts/partials/header.html | 16 + layouts/partials/javascripts.html | 28 + layouts/partials/menu.html | 18 + layouts/partials/meta.html | 22 + layouts/partials/meta_aside.html | 13 + layouts/partials/nowon.html | 1 + layouts/partials/paging.html | 26 + layouts/partials/sidebar.html | 9 + layouts/partials/social.html | 20 + layouts/partials/subheader.html | 0 layouts/partials/typekit.html | 3 + layouts/partials/whatisthis.html | 39 + layouts/publications/single.html | 42 + layouts/published/single.html | 41 + layouts/resources/list.html | 29 + layouts/retired/single.html | 43 + layouts/rss.xml | 20 + layouts/section/publications.html | 120 + layouts/section/teaching.html | 51 + layouts/shortcodes/ghStarred.html | 11 + layouts/shortcodes/highlight.html | 2 + layouts/shortcodes/img.html | 1 + layouts/shortcodes/scribd.html | 1 + layouts/shortcodes/slideshare.html | 3 + layouts/shortcodes/speakerdeck.html | 1 + layouts/shortcodes/vimeo.html | 3 + layouts/shortcodes/youtube.html | 4 + layouts/teaching/li.html | 4 + layouts/teaching/single.html | 31 + layouts/teaching/summary.html | 11 + layouts/unpublished/single.html | 42 + public/.htaccess | 1059 +++++ public/403/index.html | 144 + public/403/index.xml | 24 + public/404.html | 159 + public/404/index.html | 143 + public/404/index.xml | 23 + public/apple-touch-icon.png | Bin 0 -> 25361 bytes public/archive/index.xml | 21 + public/blog/archives.html | 148 + public/blog/archives/.htaccess | 1 + public/categories/index.html | 148 + public/categories/index.xml | 12 + public/css/bigfoot-default.css | 249 ++ public/css/bigfoot-default.scss | 619 +++ public/css/demo.css | 327 ++ public/css/kube.css | 3646 +++++++++++++++++ public/css/kube.min.css | 1 + public/css/mine.css | 22 + public/css/syntax.css | 70 + public/files/papers/.htaccess | 11 + public/index.html | 200 + public/index.xml | 71 + public/javascripts/bigfoot.js | 638 +++ public/javascripts/bigfoot.min.js | 1 + public/javascripts/d3-3.5.2/d3.min.js | 5 + .../htmlwidgets-0.5/htmlwidgets.js | 625 +++ .../javascripts/sankey-1/d3-3.5.2/d3.min.js | 5 + public/javascripts/sankey-1/sankey.js | 397 ++ .../sankeyNetwork.js | 230 ++ public/resources/emacs-starter-kit.html | 1 + public/resources/emacs-starter-kit/index.html | 238 ++ public/resources/emacs-starter-kit/index.xml | 12 + public/resources/github/index.html | 361 ++ public/resources/github/index.xml | 12 + public/resources/index.html | 209 + public/resources/index.xml | 12 + public/sitemap.xml | 71 + public/teaching/index.html | 172 + public/teaching/index.xml | 39 + .../religion_public_sphere/index.html | 150 + public/teaching/theological_ethics/index.html | 151 + static/.htaccess | 1059 +++++ static/apple-touch-icon.png | Bin 0 -> 25361 bytes static/blog/archives/.htaccess | 1 + static/css/bigfoot-default.css | 249 ++ static/css/bigfoot-default.scss | 619 +++ static/css/demo.css | 327 ++ static/css/kube.css | 3646 +++++++++++++++++ static/css/kube.min.css | 1 + static/css/mine.css | 22 + static/css/syntax.css | 70 + static/files/papers/.htaccess | 11 + static/javascripts/bigfoot.js | 638 +++ static/javascripts/bigfoot.min.js | 1 + static/javascripts/d3-3.5.2/d3.min.js | 5 + .../htmlwidgets-0.5/htmlwidgets.js | 625 +++ .../javascripts/sankey-1/d3-3.5.2/d3.min.js | 5 + static/javascripts/sankey-1/sankey.js | 397 ++ .../sankeyNetwork.js | 230 ++ 125 files changed, 19943 insertions(+) create mode 100755 LICENSE create mode 100755 Makefile create mode 100755 README.md create mode 100755 archetypes/default.markdown create mode 100755 config.yaml create mode 100755 content/403/index.html create mode 100755 content/404/index.html create mode 100755 content/archive/index.html create mode 100755 content/resources/_index.md create mode 100755 content/resources/emacs-starter-kit/_index.md create mode 100755 content/resources/github/_index.md create mode 100755 content/teaching/religion_public_sphere.md create mode 100755 content/teaching/theological_ethics.md create mode 100755 layouts/404.html create mode 100755 layouts/archive/li.html create mode 100755 layouts/archive/single.html create mode 100755 layouts/blog/li.html create mode 100755 layouts/blog/single.html create mode 100755 layouts/blog/summary.html create mode 100755 layouts/index.html create mode 100755 layouts/indexes/blog.html create mode 100755 layouts/indexes/category.html create mode 100755 layouts/indexes/indexes.html create mode 100755 layouts/indexes/page.html create mode 100755 layouts/other/single.html create mode 100755 layouts/page/single.html create mode 100755 layouts/partials/allcats.html create mode 100755 layouts/partials/archive.html create mode 100755 layouts/partials/comingsoon.html create mode 100755 layouts/partials/details.html create mode 100755 layouts/partials/foot.html create mode 100755 layouts/partials/footer-front.html create mode 100755 layouts/partials/footer.html create mode 100755 layouts/partials/head.html create mode 100755 layouts/partials/head_includes.html create mode 100755 layouts/partials/header.html create mode 100755 layouts/partials/javascripts.html create mode 100755 layouts/partials/menu.html create mode 100755 layouts/partials/meta.html create mode 100755 layouts/partials/meta_aside.html create mode 100755 layouts/partials/nowon.html create mode 100755 layouts/partials/paging.html create mode 100755 layouts/partials/sidebar.html create mode 100755 layouts/partials/social.html create mode 100755 layouts/partials/subheader.html create mode 100755 layouts/partials/typekit.html create mode 100755 layouts/partials/whatisthis.html create mode 100755 layouts/publications/single.html create mode 100755 layouts/published/single.html create mode 100755 layouts/resources/list.html create mode 100755 layouts/retired/single.html create mode 100755 layouts/rss.xml create mode 100755 layouts/section/publications.html create mode 100755 layouts/section/teaching.html create mode 100755 layouts/shortcodes/ghStarred.html create mode 100755 layouts/shortcodes/highlight.html create mode 100755 layouts/shortcodes/img.html create mode 100755 layouts/shortcodes/scribd.html create mode 100755 layouts/shortcodes/slideshare.html create mode 100755 layouts/shortcodes/speakerdeck.html create mode 100755 layouts/shortcodes/vimeo.html create mode 100755 layouts/shortcodes/youtube.html create mode 100755 layouts/teaching/li.html create mode 100755 layouts/teaching/single.html create mode 100755 layouts/teaching/summary.html create mode 100755 layouts/unpublished/single.html create mode 100755 public/.htaccess create mode 100644 public/403/index.html create mode 100644 public/403/index.xml create mode 100644 public/404.html create mode 100644 public/404/index.html create mode 100644 public/404/index.xml create mode 100755 public/apple-touch-icon.png create mode 100644 public/archive/index.xml create mode 100644 public/blog/archives.html create mode 100755 public/blog/archives/.htaccess create mode 100644 public/categories/index.html create mode 100644 public/categories/index.xml create mode 100755 public/css/bigfoot-default.css create mode 100755 public/css/bigfoot-default.scss create mode 100755 public/css/demo.css create mode 100755 public/css/kube.css create mode 100755 public/css/kube.min.css create mode 100755 public/css/mine.css create mode 100755 public/css/syntax.css create mode 100755 public/files/papers/.htaccess create mode 100644 public/index.html create mode 100644 public/index.xml create mode 100755 public/javascripts/bigfoot.js create mode 100755 public/javascripts/bigfoot.min.js create mode 100755 public/javascripts/d3-3.5.2/d3.min.js create mode 100755 public/javascripts/htmlwidgets-0.5/htmlwidgets.js create mode 100755 public/javascripts/sankey-1/d3-3.5.2/d3.min.js create mode 100755 public/javascripts/sankey-1/sankey.js create mode 100755 public/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js create mode 100644 public/resources/emacs-starter-kit.html create mode 100644 public/resources/emacs-starter-kit/index.html create mode 100644 public/resources/emacs-starter-kit/index.xml create mode 100644 public/resources/github/index.html create mode 100644 public/resources/github/index.xml create mode 100644 public/resources/index.html create mode 100644 public/resources/index.xml create mode 100644 public/sitemap.xml create mode 100644 public/teaching/index.html create mode 100644 public/teaching/index.xml create mode 100644 public/teaching/religion_public_sphere/index.html create mode 100644 public/teaching/theological_ethics/index.html create mode 100755 static/.htaccess create mode 100755 static/apple-touch-icon.png create mode 100755 static/blog/archives/.htaccess create mode 100755 static/css/bigfoot-default.css create mode 100755 static/css/bigfoot-default.scss create mode 100755 static/css/demo.css create mode 100755 static/css/kube.css create mode 100755 static/css/kube.min.css create mode 100755 static/css/mine.css create mode 100755 static/css/syntax.css create mode 100755 static/files/papers/.htaccess create mode 100755 static/javascripts/bigfoot.js create mode 100755 static/javascripts/bigfoot.min.js create mode 100755 static/javascripts/d3-3.5.2/d3.min.js create mode 100755 static/javascripts/htmlwidgets-0.5/htmlwidgets.js create mode 100755 static/javascripts/sankey-1/d3-3.5.2/d3.min.js create mode 100755 static/javascripts/sankey-1/sankey.js create mode 100755 static/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..5ed4d96 --- /dev/null +++ b/LICENSE @@ -0,0 +1,3 @@ +The material in `/content/` is copyright, Kieran Healy. All rights reserved. + +Other code and style files belong to their respective owners and are used in accordance with their licenses. diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..9faa3aa --- /dev/null +++ b/Makefile @@ -0,0 +1,49 @@ +### Build and deploy http://kieranhealy.org + +### If you want to use this file as-is, then you +### need to change the variables below to your +### own SSH user, document root, etc. +### However, you will most likely also want to +### customize the various steps (e.g. the css target) +### so that it matches the details of your own +### setup. +### +### Apart from hugo, you will also need rsync to deploy +### the site, and the java-based yuicompressor to +### minify the CSS, should you keep that step. + + +SSH_USER = khealy@kieranhealy.org +STAGING_USER = kjhealy@kjhealy.co +DOCUMENT_ROOT = ~/kieranhealy.org +STAGING_ROOT = ~/public/kjhealy.co/public_html +PUBLIC_DIR = public/ + +all: deploy + +staging: site + rsync -crzve 'ssh -p 22' $(PUBLIC_DIR) $(STAGING_USER):$(STAGING_ROOT) + +server: css + hugo server -ws . + +deploy: compress site + rsync -crzve 'ssh -p 22' $(PUBLIC_DIR) $(SSH_USER):$(DOCUMENT_ROOT) + +compress: css + java -jar ~/bin/yuicompressor-2.4.8.jar static/css/stylesheet.css -o static/css/stylesheet-min.css --charset utf-8 + +site: css .FORCE + hugo + find public -type d -print0 | xargs -0 chmod 755 + find public -type f -print0 | xargs -0 chmod 644 + +css: + touch static/css/stylesheet.css + rm -f static/css/stylesheet.css + cat static/css/kube.css static/css/demo.css static/css/syntax.css static/css/bigfoot-default.css > static/css/stylesheet.css + +clean: + rm -rf public/ + +.FORCE: diff --git a/README.md b/README.md new file mode 100755 index 0000000..7ec250d --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# kieranhealy.hugo + +This is the code and much of the content for my website, http://kieranhealy.org. As detailed [in this post](http://kieranhealy.org/blog/archives/2014/02/24/powered-by-hugo/) the site is created using [Hugo](http://gohugo.io/), a very fast static site generator written by Steve Francia. The present version uses the [Kube CSS framework](http://imperavi.com/kube/), takes advantage of a site design by [Greg Restall](http://consequently.org), and requires Hugo version 0.15 or higher. + +# jeremykidwell.info diff --git a/archetypes/default.markdown b/archetypes/default.markdown new file mode 100755 index 0000000..c5c7228 --- /dev/null +++ b/archetypes/default.markdown @@ -0,0 +1,16 @@ +--- +categories: [x,y] +footnotes: false +htmlwidgets: false +mathjax: false +--- + + +{{% figure src="" alt="" caption="" %}} + + +{{% highlight r %}} + + +{{% /highlight %}} + diff --git a/config.yaml b/config.yaml new file mode 100755 index 0000000..1bec93a --- /dev/null +++ b/config.yaml @@ -0,0 +1,30 @@ +--- +MetaDataFormat: "yaml" +contentdir: "content" +layoutdir: "layouts" +publishdir: "public" +builddrafts: false +pygmentsuseclasses: true +baseurl: "https://jeremykidwell.info/" +indexes: + category: "categories" +title: "jeremykidwell.info" +CanonifyUrls: true +menu: + main: + - Name: "Publications" + URL: "/publications" + Weight: 2 + - Name: "Resources" + URL: "/resources" + Weight: 3 + - Name: "Teaching" + URL: "/teaching" + Weight: 4 + - Name: "Blog" + URL: "/blog" + Weight: 5 +permalinks: + blog: /blog/archives/:year/:month/:day/:slug + archive: /blog/archives/ +... diff --git a/content/403/index.html b/content/403/index.html new file mode 100755 index 0000000..6d7152e --- /dev/null +++ b/content/403/index.html @@ -0,0 +1,8 @@ +--- +type: page +title: 403 +--- + +

Sorry, you don't have permission to do that

+ + diff --git a/content/404/index.html b/content/404/index.html new file mode 100755 index 0000000..c6025fe --- /dev/null +++ b/content/404/index.html @@ -0,0 +1,8 @@ +--- +type: page +title: 404 +--- + +

404: File not found

+ +

Sorry, that doesn't seem to be here

\ No newline at end of file diff --git a/content/archive/index.html b/content/archive/index.html new file mode 100755 index 0000000..af5c085 --- /dev/null +++ b/content/archive/index.html @@ -0,0 +1,5 @@ +--- +type: archive +title: Archives +--- + diff --git a/content/resources/_index.md b/content/resources/_index.md new file mode 100755 index 0000000..1dee7ed --- /dev/null +++ b/content/resources/_index.md @@ -0,0 +1,70 @@ +--- +type: page +title: "Resources" +--- + +## Code and Data +

This page has links to configuration files, templates, and a few other things that might be of use to people who want to write well-formatted social science papers in plain text, with data, figures, and +references.

+ +
The Sausage Factory
+ + +
+
+

The Plain Person's Guide to Plain Text Social Science

+

As a beginning graduate student in the social sciences, what sort of software should you use to do your work? More importantly, what principles should guide your choices? This article offers some answers. The short +version is: you should use tools that give you more control over the process of data analysis and writing. I recommend you write prose and code using a good text editor; analyze quantitative data with R or Stata; minimize +error by storing your work in a simple format (plain text is best), and make a habit of documenting what you've done. For data analysis, consider using a format like Rmarkdown and tools like Knitr to make your work more +easily reproducible for your future self. Use Pandoc to turn your plain-text documents into PDF, HTML, or Word files to share with others. Keep your projects in a version control system. Back everything up regularly. Make +your computer work for you by automating as many of these steps as you can. To help you get started, I briefly discuss a drop-in set of useful defaults to get started with Emacs (a powerful, free text-editor). I share +some templates and style files that can get you quickly from plain text to various output formats. And I point to several alternatives, because no humane person should recommend Emacs without presenting some other options +as well. There is a sample github repository that contains the .md source file the PDF is created from. This material is also available as a website at http://plain-text.co.

+ + +

An Emacs Starter Kit for the Social Sciences

+

This is a fork of Eric Schulte's Emacs Starter Kit (itself an offshoot of Phil Hagelberg's +original) with additional tools included for social scientists, mostly related to writing books or papers in LaTeX and analyzing quantitative data using ESS and R. The goal is to provide a drop-in configuration for Emacs that makes it easier to use right from the get-go. If you know about Git, you can clone the repository.

+ +

Data Visualization Course Notes

+

Notes, links, and code from a Data Visualization short-course I taught in the Fall of 2015. The course is focused on the practical presentation of real data, mostly using R's `ggplot2` library. We also read some +material on principles of data visualization, in order to help develop a good working sense of why some graphs and figures work well while others either fail to inform or actively mislead. +

+ +
+ +
+

LaTeX Templates and Styles

+

A collection of LaTeX style files, templates, and org-mode documents providing some nice layouts for typesetting articles using pdfLaTeX or XeLaTeX. They make a pipeline that lets you begin with an +.org file in Emacs (as set up in the Starter Kit), and go from there to a nice, fully-processed PDF in one step. Or the pieces can be used separately +to set up a .tex file with a nice Article layout.

+ +

Pandoc Templates

+

Some Pandoc templates meant to go in ~/.pandoc/templates. Point to them directly with the --template or --css switches as appropriate, and use them with what's provided in latex-custom-kjh. Includes a shell script for setting pandoc up to work with the Marked app, a handy HTML live +previewer for .md files. +

+ + +

So You Like My Vita

+

Every few months I get an email asking to see the LaTeX markup that I use to generate my Curriculum Vitae. So, here it is. Feel free to adapt it yourself. If you make stylistic modifications, I encourage you to fork the project on GitHub and make them available to others in the same way.

+ +

So You Like My Website

+

This site is produced using Hugo, a very fast static site generator, which you can read more about here. I've written about my own experience setting it up, too. The design is borrowed mostly from Greg Restall. If you want to look +under the bonnet, the entire site is on GitHub. Feel free to adapt it yourself. If you make stylistic modifications, I encourage you +to fork the project on GitHub and make them available to others in the same way. You should also change the Google Analytics information in the footer partial, or I will receive analytics information about your site.

+ + +

All GitHub Projects

+

Here is a full list of the various public code and data repositories that I have put on GitHub. They range from the configuration and templating tools listed above to data +visualization exercises and other bits of data analysis, mostly written in R. +

+
+ + + diff --git a/content/resources/emacs-starter-kit/_index.md b/content/resources/emacs-starter-kit/_index.md new file mode 100755 index 0000000..b24a38c --- /dev/null +++ b/content/resources/emacs-starter-kit/_index.md @@ -0,0 +1,108 @@ +--- +type: page +title: "An Emacs Starter Kit for the Social Sciences" +aliases: + - /resources/emacs-starter-kit.html +--- + + + +

An Emacs Starter Kit for the Social Sciences

+ +

+To accompany the Choosing Your Workflow Applications paper, here is the Emacs Starter Kit for the Social Sciences. It is a version of Phil Hagelberg's emacs starter kit by way of Eric Schulte's Org-Mode implementation. I've made some further tweaks and added some tools of particular use to social scientists. The starter-kit includes up-to-date versions of Emacs Speaks Statistics, AucTeX, Magit, Markdown mode, Yasnippet, and assorted other useful bits and pieces. It should work immediately on Mac OS X with the current version of Emacs. +

+

+ + + +

+ +

+ +Solarized (Light) Theme. Some other themes are also included. + +

+

+What's the motivation for the starter kit? Emacs is a very powerful editor but it is less useful out-of-the-box than it might be, in part because many convenient settings and modes are not activated by default. The starter kit is a drop-in set of nice default settings. The idea is for you to be able to download GNU Emacs, put the starter kit into ~/.emacs.d/, and get to work. If you already use Emacs and have a .emacs file or ~/.emacs.d directory, the starter kit is designed to replace them, while leaving a place for you to easily append your own customizations. +

+

+The starter kit is designed to be used with GNU Emacs. Version 24.4 (released October 2014) or later is required. It will not work with Aquamacs without modification. More detailed commentary and documentation is provided inside the kit's .org files. +

+

+Installation Instructions (Mac OS X) +

+ +

Before you Begin

+

If you want to use the tools that the starter-kit works with—LaTeX, R, Git, Pandoc, and all the rest—then you will need to install them on your Mac. The ground floor is Apple's own suite of Developer Tools, which allow you to compile software yourself and include things like Git. The most straightforward way to get these tools is to install Xcode. Xcode is what software developers use to write Mac and iOS applications. As such it comes with a bunch of things we are not so interested in, but it makes it easy to install what we do need. It's available for free via the Mac App Store. Once downloaded, launch Xcode, go to Xcode > Preferences > Downloads and install the Command Line Tools for Xcode. At that point you can quit Xcode and never use it again. Alternatively, go to Apple's Developer Site, login with your Apple ID and download the Command Line Tools for Xcode package by itself, without the Xcode application.

+ +

If you have used Emacs before and already have a .emacs file or .emacs.d directory, back them up and then delete them. See below for details on how to add customizations to the kit.

+ +

Getting the Starter Kit

+

You have two choices. You can download a .zip file of the kit. This will give you a static snapshot of the most recent version. But if you want to keep up with changes to the kit, you should clone the source code using git rather than simply copying a static version of it. You should be using version control on your plain-text documents anyway, so I recommend this second option.

+ +

+Prerequisites +

+ +

+0.1 Get Emacs. The starter kit requires Emacs 24.4 (released October 2014). Download Emacs here. Alternatively, if you are comfortable with Homebrew, compile and install it. +

+

+0.2 Install a Modern TeX Distribution and the Skim PDF reader. If you are using OS X, download MacTeX here and install it. The kit is set up to use the Skim PDF reader to display PDF files created from .tex files. You can use other readers, but will need to modify the setup in the starter-kit-latex.org file. +

+

+0.3 Install R and Pandoc. These are not strictly required for the installation to work, and you can skip this step if you like. But you will probably be using them anyway, if you're not already. If you're doing statistical work you will probably want to use R or Stata. R is free and you can download it here. Pandoc is a very useful utility that lets you convert easily between many different forms of plain-text markup (such as Markdown, HTML, LaTeX, and others). Get Pandoc here. +

+

+0.4 Note your user name or the name of your computer. If you don't know either, open the Terminal application and do +

+
+$ whoami
+
+

+for your user name and +

+
+$ hostname
+
+

+for the system name. You will need to know your login name to activate the final customization file properly. You can use the system name as well (or instead). +

+

+Setup +

+

+1. If you downloaded a .zip file of the kit, you must uncompress it, move the resulting folder to the top level of your home director and rename it .emacs.d. Assuming the downloaded zip file is in your ~/Downloads folder, open a Terminal window and do this:

+ +
+$ cd ~/Downloads
+$ unzip emacs-starter-kit-master.zip
+$ mv emacs-starter-kit-master ~/.emacs.d
+
+ +Alternatively, if you are using git (the preferred method), then clone the starter kit from github. Open a Terminal window and do this: +

+
+$ git clone git://github.com/kjhealy/emacs-starter-kit ~/.emacs.d
+
+

+2. Inside the file kjhealy.org, change the paths to any BibTeX databases as described at the top of that file. +

+

+3. Rename the starter kit's kjhealy.org file to that of %your-username%.org or %your-systemname%.org, based on the information you noted in 0.4 above. This is where you can add in any of your own further customizations to Emacs. +

+

+4. Launch Emacs. +

+

+When you first start Emacs after installing the starter-kit, it will try to contact several package repositories, so make sure you have an internet connection. The kit will download packages mainly from the official GNU ELPA repository and the MELPA Repo. Each package will be fetched, compiled by Emacs, and stored in the ~/.emacs.d directory. This process is sometimes prone to hiccups as packages are fetched from the servers, so please be patient with it. If it doesn't get everything first time around, quit and relaunch Emacs, and it will try again. If the problem persists—especially if you get a message saying "The package 'auctex' is not available for installation"—you can manually install packages as follows. Open Emacs, do M-x list-packages and in the resulting buffer search or scroll down the list to, e.g. Auctex, mark it for installation by pressing i and then install it (or them) by hitting x. With the packages in place, restart Emacs and the starter kit will finish setting itself up. Unfortunately, I can't control these intermittent installation errors. They seem to have something to do with the way Emacs talks to the GNU ELPA package server. + + + +

+

+5. (Optional.) Once Emacs is up and running, do M-x starter-kit-compile to byte-compile the starter-kit's files, for slightly faster loading. +

+ + diff --git a/content/resources/github/_index.md b/content/resources/github/_index.md new file mode 100755 index 0000000..d828ed3 --- /dev/null +++ b/content/resources/github/_index.md @@ -0,0 +1,10 @@ +--- +type: page +title: "Code and Data" +--- + +

Code on GitHub

+ +

These are ordered by most recent commit to the repository.

+ +{{< ghStarred url="https://api.github.com/user/5760/repos?type=public&sort=pushed&user:kjhealy" >}} diff --git a/content/teaching/religion_public_sphere.md b/content/teaching/religion_public_sphere.md new file mode 100755 index 0000000..5f84a45 --- /dev/null +++ b/content/teaching/religion_public_sphere.md @@ -0,0 +1,15 @@ +--- +title: Religion in the Public Sphere +date: "2017-09-25T00:00:00+11:00" +enddate: "2014-12-30T00:00:00+11:00" +publishdate: "2016-01-08" +host: "University of Birmingham" +duration: 7776000 +--- + +This second year undergraduate course... + + + +#### [Syllabus (PDF)](http://www.kieranhealy.org/files/teaching/gradtheory.pdf) + diff --git a/content/teaching/theological_ethics.md b/content/teaching/theological_ethics.md new file mode 100755 index 0000000..666ae7b --- /dev/null +++ b/content/teaching/theological_ethics.md @@ -0,0 +1,12 @@ +--- +title: Theological Ethics +date: "2017-09-25T00:00:00+11:00" +enddate: "2017-12-30T00:00:00+11:00" +publishdate: "2016-09-01" +host: "University of Birmingham" +duration: 7776000 +--- + +Description + +#### [Syllabus (PDF)](http://kieranhealy.org/files/teaching/taboo-markets.pdf) diff --git a/layouts/404.html b/layouts/404.html new file mode 100755 index 0000000..4741a38 --- /dev/null +++ b/layouts/404.html @@ -0,0 +1,142 @@ +{{ partial "head.html" . }} +{{ $baseurl := .Site.BaseURL }} + +
+ +
+ +
+ +
+ +
+

404: Page Not Found

+

+ There is no page here at the address you requested. Perhaps try a search to find what you are looking for? +

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

Recent News

+
    + {{ range first 10 (where .Data.Pages.ByDate "Section" "news").Reverse }} +
  • {{ .Title | safeHTML }}{{if not (isset .Params "grlog") }}, {{ end }}
  • + {{ end }} +
+ + + + + +

Recent Writing

+
    + {{ range first 5 (where .Data.Pages.ByDate "Section" "writing").Reverse }} +
  • {{ .Params.citation | safeHTML }} +Abstract +{{ if isset .Params "file" }} pdf{{ end }} +
  • + {{ end }} +
+ + + + +

Recent & Upcoming Presentations

+
    + {{ range (where .Data.Pages.ByDate "Section" "presentation").Reverse }} + {{ if (ge .Date.Unix now.Unix) }} + {{ if (le .Date.Unix (add now.Unix 10368000)) }} +
  • {{ .Title | safeHTML }}, {{ .Params.host | safeHTML }} ({{ .Date.Format "2 January 2006" }}). {{ partial "comingsoon.html" . }} +
  • + {{ end }} + {{ end }} + {{ if (ge now.Unix .Date.Unix ) }} + {{ if (le now.Unix (add .Date.Unix 12368000)) }} +
  • {{ .Title | safeHTML }}, {{ .Params.host | safeHTML }} ({{ .Date.Format "2 January 2006" }}). +
  • + {{ end }} + {{ end }} + {{ end }} +
+ + +

Recent & Upcoming Classes

+
    + {{ range (where .Data.Pages.ByDate "Section" "class").Reverse }} + {{ if (ge .Date.Unix now.Unix) }} + {{ if (le .Date.Unix (add now.Unix 7776000)) }} +
  • {{ .Title }}, {{ .Date.Format "January" }}–{{ .Params.enddate | dateFormat "January 2006" }}. {{ partial "comingsoon.html" . }} +
  • + {{ end }} + {{ end }} + {{ end }} + + {{ range (where .Data.Pages.ByDate "Section" "class").Reverse }} + {{ if (le .Date.Unix now.Unix) }} + {{ if (le now.Unix (add .Date.Unix .Params.duration)) }} +
  • {{ .Title }}, {{ .Date.Format "January" }}–{{ .Params.enddate | dateFormat "January 2006" }}. {{ partial "nowon.html" . }} +
  • + {{ end }} + {{ end }} + {{ end }} + {{ range (where .Data.Pages.ByDate "Section" "class").Reverse }} + {{ $classend := (add .Date.Unix .Params.duration) }} + {{ if (ge now.Unix $classend ) }} + {{ if (le now.Unix (add $classend 10368000)) }} + +
  • {{ .Title }}, {{ .Date.Format "January" }}–{{ .Params.enddate | dateFormat "January 2006" }}. completed +
  • + {{ end }} + {{ end }} + {{ end }} +
+ + + +
+
+ +
+ + +
+ +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} + + \ No newline at end of file diff --git a/layouts/archive/li.html b/layouts/archive/li.html new file mode 100755 index 0000000..c305257 --- /dev/null +++ b/layouts/archive/li.html @@ -0,0 +1,4 @@ +
  • +

    {{ .Title }}

    +
    {{ .Date.Format "Jan 2, 2006" }}
    +
  • diff --git a/layouts/archive/single.html b/layouts/archive/single.html new file mode 100755 index 0000000..8eb4975 --- /dev/null +++ b/layouts/archive/single.html @@ -0,0 +1,36 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
    + {{ range $index, $value := (where .Site.Pages "Type" "blog").GroupByDate "January 2006" }} +

    {{ .Key }}

    +

    + {{ range .Pages }} · {{if not (isset .Params "grlog") }}, {{ end }}{{ .Title | safeHTML }} {{ end }}

    + {{ end }} + + {{ template "partials/allcats.html"}} + +
    +
    +

    Links to all the blog entires on this site since 2002.

    +
    +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + diff --git a/layouts/blog/li.html b/layouts/blog/li.html new file mode 100755 index 0000000..247926a --- /dev/null +++ b/layouts/blog/li.html @@ -0,0 +1,6 @@ +
    +
  • +

    {{ .Title }}

    +
    {{ .Date.Format "Jan 2, 2006" }}
    +
  • +
    diff --git a/layouts/blog/single.html b/layouts/blog/single.html new file mode 100755 index 0000000..e15a72c --- /dev/null +++ b/layouts/blog/single.html @@ -0,0 +1,49 @@ +{{ partial "header.html" . }} +{{ $baseurl := .Site.BaseURL }} + +
    +
    +
    + {{ partial "sidebar.html" . }} +
    +
    +
    + +
    +
    +
     
    + +
    +
    +
    {{if not (isset .Params "grlog") }}

    {{ .Date.Format "January 2, 2006" }}

    {{ else }} {{ end }} + + + {{ range .Params.categories }} + · {{ . }} + {{ end }} + + +
    +
    + + {{ .Content }} + + +{{ partial "meta_aside.html" . }} + +{{ partial "allcats.html" . }} + +
    + +
    + +
    + + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} + + diff --git a/layouts/blog/summary.html b/layouts/blog/summary.html new file mode 100755 index 0000000..68e57d5 --- /dev/null +++ b/layouts/blog/summary.html @@ -0,0 +1,11 @@ + diff --git a/layouts/index.html b/layouts/index.html new file mode 100755 index 0000000..1ddb92a --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,122 @@ + + + + + + {{ partial "meta.html" . }} + + + {{ .Site.Title }} + + + + {{ partial "head_includes.html" . }} + + +
    +
    +
    + {{ partial "sidebar.html" . }} +
    +
    +
    + +
    +
    +
    +
    +
    +   +
    +
    +

    +
    +
    + {{ range first 2 ((where .Data.Pages.ByDate "Section" "blog").Reverse) }} +
    +
    +

    {{ .Title }}

    +

    {{ .Date.Format "2 January 2006" }}

    +
    +
    + {{ if .Truncated }} + {{ .Summary }} +

    Read More…

    + {{ else }} + {{ .Content }} + {{ end }} +
    +
    + + {{ end }} + +
    + +
    +
     
    +
    +
    + +
    + +

    Recent Papers

    +
      + {{ range first 5 (where .Data.Pages.ByDate "Section" "publications").Reverse }} +
    • {{ .Params.citation | safeHTML }} + Abstract + {{ if isset .Params "file" }} pdf{{ end }} +
    • + {{ end }} +
    + + + +

    Current Teaching

    +
      + {{ range (where .Data.Pages.ByDate "Section" "teaching").Reverse }} + {{ if (ge .Date.Unix now.Unix) }} + {{ if (le .Date.Unix (add now.Unix 7776000)) }} +
    • {{ .Title }}, {{ .Date.Format "January" }}–{{ .Params.enddate | dateFormat "January 2006" }}. {{ partial "comingsoon.html" . }} +
    • + {{ end }} + {{ end }} + {{ end }} + + {{ range (where .Data.Pages.ByDate "Section" "teaching").Reverse }} + {{ if (le .Date.Unix now.Unix) }} + {{ if (le now.Unix (add .Date.Unix .Params.duration)) }} +
    • {{ .Title }}, {{ .Date.Format "January" }}–{{ .Params.enddate | dateFormat "January 2006" }}. {{ partial "nowon.html" . }} +
    • + {{ end }} + {{ end }} + {{ end }} + {{ range (where .Data.Pages.ByDate "Section" "teaching").Reverse }} + {{ $classend := (add .Date.Unix .Params.duration) }} + {{ if (ge now.Unix $classend ) }} + {{ if (le now.Unix (add $classend 10368000)) }} + +
    • {{ .Title }}, {{ .Date.Format "January" }}–{{ .Params.enddate | dateFormat "January 2006" }}. completed +
    • + {{ end }} + {{ end }} + {{ end }} +
    + + + +
    +
    + +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "foot.html" . }} + + diff --git a/layouts/indexes/blog.html b/layouts/indexes/blog.html new file mode 100755 index 0000000..a68d7ed --- /dev/null +++ b/layouts/indexes/blog.html @@ -0,0 +1,37 @@ +{{ partial "header.html" . }} + + +
    +
    +
    + {{ partial "sidebar.html" . }} + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + + +
    +
    +
    + + {{ range (.Paginator 10).Pages }} + {{ .Render "summary" }} + {{ end }} +
    +
    +

    +

    Sociology and other distractions, since 2002. View all posts by date, or an index of posts by category.

    +
    +
    +
    + +{{partial "paging.html" . }} + +
    + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} diff --git a/layouts/indexes/category.html b/layouts/indexes/category.html new file mode 100755 index 0000000..b6e75d7 --- /dev/null +++ b/layouts/indexes/category.html @@ -0,0 +1,34 @@ +{{ partial "header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    + +

    Categories ▸ {{ .Title }}

    + + +
      + {{ range (.Paginator 10).Pages }} + {{ .Render "summary"}} + {{ end }} +
    + +
    + +{{partial "paging.html" . }} + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} + diff --git a/layouts/indexes/indexes.html b/layouts/indexes/indexes.html new file mode 100755 index 0000000..6a7cca0 --- /dev/null +++ b/layouts/indexes/indexes.html @@ -0,0 +1,36 @@ +{{ partial "header.html" . }} + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
    + +

    Category Index

    +

    + {{ $data := .Data }} + {{ range $key,$value := .Data.Index.ByCount }} + · {{ $value.Name }} ({{ $value.Count }}) + {{ end }} +

    + {{ partial "allcats.html" . }} +
    +
    +
    +
    + + {{ partial "whatisthis.html" . }} + {{ partial "foot.html" . }} + + + + + diff --git a/layouts/indexes/page.html b/layouts/indexes/page.html new file mode 100755 index 0000000..fee661e --- /dev/null +++ b/layouts/indexes/page.html @@ -0,0 +1,19 @@ +{{ partial "header.html" . }} + +{{ partial "sidebar.html" . }} + +
    + +
    +
    +
      + {{ range first 10 .Data.Pages }} + {{ .Render "summary"}} + {{ end }} +
    +
    +
    + + +{{ partial "footer.html" . }} + diff --git a/layouts/other/single.html b/layouts/other/single.html new file mode 100755 index 0000000..9d1d82f --- /dev/null +++ b/layouts/other/single.html @@ -0,0 +1,41 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    + +
    +

    {{.Params.author}}, {{ .Params.citation | safeHTML }}

    + {{ if .Params.doi }}

    doi:{{.Params.doi}}

    {{ end }} + {{ if .Params.file }}

     download pdf

    {{ end }} +
    +
    + {{ .Content }} +
    + {{ if .PrevInSection }} + « {{.PrevInSection.Title}} | {{ end }}Publications List{{ if .NextInSection }} | {{.NextInSection.Title}} » + {{ end }} +
    +
    +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + + + diff --git a/layouts/page/single.html b/layouts/page/single.html new file mode 100755 index 0000000..410fcef --- /dev/null +++ b/layouts/page/single.html @@ -0,0 +1,28 @@ +{{ partial "header.html" . }} + +
    +
    +
    + + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
    +
    + {{ .Content }} +
    +
    +
    +
    + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} diff --git a/layouts/partials/allcats.html b/layouts/partials/allcats.html new file mode 100755 index 0000000..2aa29d8 --- /dev/null +++ b/layouts/partials/allcats.html @@ -0,0 +1 @@ + All Posts by Date · All Posts by Category diff --git a/layouts/partials/archive.html b/layouts/partials/archive.html new file mode 100755 index 0000000..5016af7 --- /dev/null +++ b/layouts/partials/archive.html @@ -0,0 +1,9 @@ + +
      + + {{ range .Site.Pages }} +

      {{ .Title }}

      +

      {{ .Date.Format "Jan 2, 2006" }}

      + {{ end }} +
    + diff --git a/layouts/partials/comingsoon.html b/layouts/partials/comingsoon.html new file mode 100755 index 0000000..32b5b32 --- /dev/null +++ b/layouts/partials/comingsoon.html @@ -0,0 +1 @@ +{{ if ge .Date.Unix now.Unix }}{{ if (le .Date.Unix (add now.Unix 7776000)) }}coming soon{{ end }}{{ end }} \ No newline at end of file diff --git a/layouts/partials/details.html b/layouts/partials/details.html new file mode 100755 index 0000000..139597f --- /dev/null +++ b/layouts/partials/details.html @@ -0,0 +1,2 @@ + + diff --git a/layouts/partials/foot.html b/layouts/partials/foot.html new file mode 100755 index 0000000..e202ac1 --- /dev/null +++ b/layouts/partials/foot.html @@ -0,0 +1,4 @@ +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–{{ now.Format "2006" }}. +
    +
    \ No newline at end of file diff --git a/layouts/partials/footer-front.html b/layouts/partials/footer-front.html new file mode 100755 index 0000000..08d7d94 --- /dev/null +++ b/layouts/partials/footer-front.html @@ -0,0 +1,6 @@ +
    +
    + + + + diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html new file mode 100755 index 0000000..006d0dc --- /dev/null +++ b/layouts/partials/footer.html @@ -0,0 +1,5 @@ + + + + + diff --git a/layouts/partials/head.html b/layouts/partials/head.html new file mode 100755 index 0000000..b619518 --- /dev/null +++ b/layouts/partials/head.html @@ -0,0 +1,18 @@ + + + + + + + {{ .Title }} + + + + + + + + + + + diff --git a/layouts/partials/head_includes.html b/layouts/partials/head_includes.html new file mode 100755 index 0000000..35f270b --- /dev/null +++ b/layouts/partials/head_includes.html @@ -0,0 +1,5 @@ + + + + {{ partial "javascripts.html" . }} + {{ partial "typekit.html" . }} diff --git a/layouts/partials/header.html b/layouts/partials/header.html new file mode 100755 index 0000000..3adcacb --- /dev/null +++ b/layouts/partials/header.html @@ -0,0 +1,16 @@ + + + + + + {{ partial "meta.html" . }} + + + {{ .Title }} + + {{ if .RSSLink }}{{ end }} + + {{ partial "head_includes.html" . }} + + + diff --git a/layouts/partials/javascripts.html b/layouts/partials/javascripts.html new file mode 100755 index 0000000..1cfde3a --- /dev/null +++ b/layouts/partials/javascripts.html @@ -0,0 +1,28 @@ + + + + +{{ if and (isset .Params "footnotes") (eq .Params.footnotes true) }} + + + +{{ end }} + + +{{ if and (isset .Params "htmlwidgets") (eq .Params.htmlwidgets true) }} + + + + +{{ end }} + + +{{ if and (isset .Params "mathjax") (eq .Params.mathjax true) }} + + +{{ end }} diff --git a/layouts/partials/menu.html b/layouts/partials/menu.html new file mode 100755 index 0000000..4df49fc --- /dev/null +++ b/layouts/partials/menu.html @@ -0,0 +1,18 @@ + diff --git a/layouts/partials/meta.html b/layouts/partials/meta.html new file mode 100755 index 0000000..b48a30a --- /dev/null +++ b/layouts/partials/meta.html @@ -0,0 +1,22 @@ + + + + + + + + + +{{ range .Keywords }} +{{ end }} + + + + + + + + + + + diff --git a/layouts/partials/meta_aside.html b/layouts/partials/meta_aside.html new file mode 100755 index 0000000..ed28947 --- /dev/null +++ b/layouts/partials/meta_aside.html @@ -0,0 +1,13 @@ +{{ $baseurl := .Site.BaseURL }} + + + + + + + diff --git a/layouts/partials/nowon.html b/layouts/partials/nowon.html new file mode 100755 index 0000000..3df78b2 --- /dev/null +++ b/layouts/partials/nowon.html @@ -0,0 +1 @@ +{{ if (le .Date.Unix now.Unix) }}{{ if (le now.Unix (add .Date.Unix .Params.duration)) }}now on{{ end }}{{ end }} \ No newline at end of file diff --git a/layouts/partials/paging.html b/layouts/partials/paging.html new file mode 100755 index 0000000..ac5801c --- /dev/null +++ b/layouts/partials/paging.html @@ -0,0 +1,26 @@ +
    +
    +
    +
      + + {{ if .Paginator.HasNext }} +
    • + « Older  + +
    • + {{ end }} +
    • Page {{.Paginator.PageNumber}} of {{.Paginator.TotalPages}}
    • + {{ if .Paginator.HasPrev }} +
    • + +  Newer » + +
    • + {{ end }} +
    + + {{ partial "allcats.html" . }} + +
    +
    +
    diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html new file mode 100755 index 0000000..697b12a --- /dev/null +++ b/layouts/partials/sidebar.html @@ -0,0 +1,9 @@ + diff --git a/layouts/partials/social.html b/layouts/partials/social.html new file mode 100755 index 0000000..9bb89bb --- /dev/null +++ b/layouts/partials/social.html @@ -0,0 +1,20 @@ + +
    + + + + + + diff --git a/layouts/partials/subheader.html b/layouts/partials/subheader.html new file mode 100755 index 0000000..e69de29 diff --git a/layouts/partials/typekit.html b/layouts/partials/typekit.html new file mode 100755 index 0000000..2074a4d --- /dev/null +++ b/layouts/partials/typekit.html @@ -0,0 +1,3 @@ + + + diff --git a/layouts/partials/whatisthis.html b/layouts/partials/whatisthis.html new file mode 100755 index 0000000..6917a31 --- /dev/null +++ b/layouts/partials/whatisthis.html @@ -0,0 +1,39 @@ +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    +
    diff --git a/layouts/publications/single.html b/layouts/publications/single.html new file mode 100755 index 0000000..045ef1b --- /dev/null +++ b/layouts/publications/single.html @@ -0,0 +1,42 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
     
    + +
    +
    +

    {{ .Date.Format "January 2, 2006" }}

    +
    + {{ .Content }} +
    + {{ if .PrevInSection }} + «  {{.PrevInSection.Title}} + {{ if .NextInSection }} | {{ end }} + {{ end }} + {{ if .NextInSection }} + {{.NextInSection.Title}} » + {{ end }} +
    +
    +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + + + diff --git a/layouts/published/single.html b/layouts/published/single.html new file mode 100755 index 0000000..ed273a3 --- /dev/null +++ b/layouts/published/single.html @@ -0,0 +1,41 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    + +
    +

    {{.Params.author}}, {{ .Params.citation | safeHTML }}

    + {{ if .Params.doi }}

    doi:{{.Params.doi}}

    {{ end }} + {{ if .Params.file }}

     download pdf

    {{ end }} +
    +
    + {{ .Content }} +
    + {{ if .PrevInSection }} + « {{.PrevInSection.Title}} | {{ end }}Publications List{{ if .NextInSection }} | {{.NextInSection.Title}} » + {{ end }} +
    +
    +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + + + diff --git a/layouts/resources/list.html b/layouts/resources/list.html new file mode 100755 index 0000000..041293d --- /dev/null +++ b/layouts/resources/list.html @@ -0,0 +1,29 @@ +{{ partial "header.html" . }} + +
    +
    +
    + + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
    +
    + {{ .Content }} +
    +
    +
    +
    + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} + diff --git a/layouts/retired/single.html b/layouts/retired/single.html new file mode 100755 index 0000000..c8ad8e5 --- /dev/null +++ b/layouts/retired/single.html @@ -0,0 +1,43 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    + +
    +

    {{.Params.author}}, {{ .Params.citation | safeHTML }}

    +{{ if .Params.doi }}

    doi:{{.Params.doi}}

    {{ end }} +{{ if .Params.file }}

     download pdf

    {{ end }} +
    +
    +{{ .Content }} + +
    +{{ if .PrevInSection }} + « {{.PrevInSection.Title}} | {{ end }}Publications List{{ if .NextInSection }} | {{.NextInSection.Title}} » +{{ end }} +
    + +
    +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + + + diff --git a/layouts/rss.xml b/layouts/rss.xml new file mode 100755 index 0000000..cf24577 --- /dev/null +++ b/layouts/rss.xml @@ -0,0 +1,20 @@ + + + {{ .Title }} on jeremykidwell.info + {{ .Permalink }} + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 MST" }} + {{ range first 10 .Data.Pages }} + + {{ .Title }} + {{ .Permalink }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 MST" }} + Jeremy Kidwell + {{ .Permalink }} + {{ .Content | html }} + + {{ end }} + + diff --git a/layouts/section/publications.html b/layouts/section/publications.html new file mode 100755 index 0000000..5f04c95 --- /dev/null +++ b/layouts/section/publications.html @@ -0,0 +1,120 @@ +{{ partial "header.html" . }} + +
    +
    +
    + + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    +
    +
    +
    +

    Curriculum Vitae  pdf

    +

    Much of my research has been about exchange in human blood and organs, cultural goods, software, and ideas. My current work focuses on the moral order of market society, the effect of models and measurement on social classification, and the link between those two topics, especially in the consumer credit market. I'm also interested in techniques and methods for data visualization.

    +
    +
    +
    +
    +
    +
    +

    Working Papers

    + {{ range (where .Data.Pages "Type" "unpublished").GroupByDate "2006" "desc" }} +
    +
    +

    {{ .Key }}

    +
    +
    +
      + {{ range .Pages.ByDate.Reverse }} +
    • {{ .Params.citation | safeHTML }} + Abstract + {{ if isset .Params "file" }} +  pdf + {{ end }} +
    • + {{ end }} +
    +
    +
    + {{ end }} +

    Articles and Book Chapters

    + {{ range (where .Data.Pages "Type" "published").GroupByDate "2006" "desc" }} +
    +
    +

    {{ .Key }}

    +
    +
    +
      + {{ range .Pages.ByDate.Reverse }} +
    • {{ .Params.citation | safeHTML }} + Abstract + {{ if isset .Params "file" }} +  pdf + {{ end }} +
    • + {{ end }} +
    +
    +
    + {{ end }} +
    + +
    +

    Retired Papers

    + + {{ range (where .Data.Pages "Type" "retired").GroupByDate "2006" "desc" }} +
    +
    +

    {{ .Key }}

    +
    +
    +
      + {{ range .Pages.ByDate.Reverse }} +
    • {{ .Params.citation | safeHTML }} + Abstract + {{ if isset .Params "file" }} +  pdf + {{ end }} +
    • + {{ end }} +
    +
    +
    + {{ end }} +

    Essays and Reviews

    + {{ range (where .Data.Pages "Type" "other").GroupByDate "2006" "desc" }} +
    +
    +

    {{ .Key }}

    +
    +
    +
      + {{ range .Pages.ByDate.Reverse }} +
    • {{ .Params.citation | safeHTML }} + Abstract + {{ if isset .Params "file" }} +  pdf + {{ end }} +
    • + {{ end }} +
    +
    +
    + {{ end }} +
    +
    + + +
    + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} + + diff --git a/layouts/section/teaching.html b/layouts/section/teaching.html new file mode 100755 index 0000000..621e589 --- /dev/null +++ b/layouts/section/teaching.html @@ -0,0 +1,51 @@ +{{ partial "header.html" . }} + +
    +
    +
    + + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    + +

    Classes and Seminars

    +
    +
    + {{ range .Data.Pages.GroupByDate "2006" }} +
    +
    +

    {{ .Key }}

    +
    +
    + +
    +
    + {{ end }} +
    +
    +

    Some of the classes I have offered in recent years, including pointers to upcoming courses and other resources, when they are available. Classes are listed once but are typically taught more frequently than that.

    +
    +
    +
    + +
    + +
    + +{{ partial "whatisthis.html" . }} + +{{ partial "foot.html" . }} + + diff --git a/layouts/shortcodes/ghStarred.html b/layouts/shortcodes/ghStarred.html new file mode 100755 index 0000000..e94ba02 --- /dev/null +++ b/layouts/shortcodes/ghStarred.html @@ -0,0 +1,11 @@ + diff --git a/layouts/shortcodes/highlight.html b/layouts/shortcodes/highlight.html new file mode 100755 index 0000000..597cdbe --- /dev/null +++ b/layouts/shortcodes/highlight.html @@ -0,0 +1,2 @@ +{{ $lang := index .Params 0 }} +{{ highlight .Inner $lang "" }} diff --git a/layouts/shortcodes/img.html b/layouts/shortcodes/img.html new file mode 100755 index 0000000..6fa2753 --- /dev/null +++ b/layouts/shortcodes/img.html @@ -0,0 +1 @@ + diff --git a/layouts/shortcodes/scribd.html b/layouts/shortcodes/scribd.html new file mode 100755 index 0000000..b067151 --- /dev/null +++ b/layouts/shortcodes/scribd.html @@ -0,0 +1 @@ + diff --git a/layouts/shortcodes/slideshare.html b/layouts/shortcodes/slideshare.html new file mode 100755 index 0000000..e6c8825 --- /dev/null +++ b/layouts/shortcodes/slideshare.html @@ -0,0 +1,3 @@ +
    + +
    diff --git a/layouts/shortcodes/speakerdeck.html b/layouts/shortcodes/speakerdeck.html new file mode 100755 index 0000000..a5aebca --- /dev/null +++ b/layouts/shortcodes/speakerdeck.html @@ -0,0 +1 @@ + diff --git a/layouts/shortcodes/vimeo.html b/layouts/shortcodes/vimeo.html new file mode 100755 index 0000000..9dd8e7f --- /dev/null +++ b/layouts/shortcodes/vimeo.html @@ -0,0 +1,3 @@ +
    + +
    diff --git a/layouts/shortcodes/youtube.html b/layouts/shortcodes/youtube.html new file mode 100755 index 0000000..610240b --- /dev/null +++ b/layouts/shortcodes/youtube.html @@ -0,0 +1,4 @@ +
    + +
    diff --git a/layouts/teaching/li.html b/layouts/teaching/li.html new file mode 100755 index 0000000..88b1d3b --- /dev/null +++ b/layouts/teaching/li.html @@ -0,0 +1,4 @@ +
  • +

    {{ .Title }}

    +
    {{ .Date.Format "Jan 2, 2006" }}
    +
  • diff --git a/layouts/teaching/single.html b/layouts/teaching/single.html new file mode 100755 index 0000000..b5bb85b --- /dev/null +++ b/layouts/teaching/single.html @@ -0,0 +1,31 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
    +
    +

    {{ .Title }}

    + {{ .Content }} +
    +
    +
    +
    +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + + + diff --git a/layouts/teaching/summary.html b/layouts/teaching/summary.html new file mode 100755 index 0000000..68e57d5 --- /dev/null +++ b/layouts/teaching/summary.html @@ -0,0 +1,11 @@ + diff --git a/layouts/unpublished/single.html b/layouts/unpublished/single.html new file mode 100755 index 0000000..1a107e5 --- /dev/null +++ b/layouts/unpublished/single.html @@ -0,0 +1,42 @@ +{{ template "partials/header.html" . }} + + +
    +
    +
    + {{ template "partials/sidebar.html" . }} + + {{ $baseurl := .Site.BaseURL }} +
    +
    +
    + +
    +
    +
     
    + +
    +
    +

    {{.Params.author}}, {{ .Params.citation | safeHTML }}

    + {{ if .Params.doi }}

    doi:{{.Params.doi}}

    {{ end }} + {{ if .Params.file }}

     download pdf

    If you want to cite the paper, please check with me first. Thanks.

    {{ end }} +
    +
    + {{ .Content }} +
    + {{ if .PrevInSection }} + « {{.PrevInSection.Title}} | {{ end }}Publications List{{ if .NextInSection }} | {{.NextInSection.Title}} » + {{ end }} +
    + +
    +
    + +
    + + {{ partial "whatisthis.html" . }} + + {{ partial "footer.html" . }} + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100755 index 0000000..3478fe8 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,1059 @@ +#Options -Indexes + + +AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript + + +RewriteEngine on + +RewriteEngine On +RewriteCond %{HTTPS} !=on +RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] + +Redirect 301 /gender https://www.kieranhealy.org/blog/archives/category/gender +Redirect 301 /blog/bingo-in-utopia https://kieranhealy.org/blog/archives/2012/08/13/bingo-in-utopia +ErrorDocument 404 https://www.kieranhealy.org/404/ +ErrorDocument 403 https://www.kieranhealy.org/403/ + +# Redirect kieranhealy.org/+ to google+ +# Redirect 301 /+ https://plus.google.com/113787556843462277865 + +AddIcon https://www.kieranhealy.org/img/icon-up.png .. +AddIcon https://www.kieranhealy.org/img/icon-folder.png ^^DIRECTORY^^ +#AddIcon https://www.kieranhealy.org/img/blank.gif ^^BLANKICON^^ +#AddIcon https://www.kieranhealy.org/img/icon-text.png *txt *html *text *htm *HTM *TXT *TEXT sources.list .dsc .pl .c .h +AddIcon /images/icon-tarball.png *zip *ZIP *gz *GZ *bz2 *BZ2 +AddIcon https://www.kieranhealy.org/img/text.png *.pdf *.ps +AddIcon https://www.kieranhealy.org/img/icon-tarball.png *.tar *.gz +#AddIcon https://www.kieranhealy.org/img/icon-deb.png *deb +#AddIcon https://www.kieranhealy.org/img/icon-mp3.png *mp3 *MP3 +#AddIconByType https://www.kieranhealy.org/img/icon-mp3.png audio/* +#AddIcon https://www.kieranhealy.org/img/icon-video.png *mpeg *mpg *MPG *MPEG +AddIconByType https://www.kieranhealy.org/img/icon-image.png image/* +DefaultIcon https://www.kieranhealy.org/img/icon-text.png + +AddDescription "ZIP file" *.zip +AddDescription "GZIP archive" *.gz *.tgz +AddDescription "Gimp brush file" *.gbr +AddDescription "Adobe PDF document" *.pdf +AddDescription "Postscript file" *.ps +AddDescription "Device Independent file" *.dvi +AddDescription "LaTeX source file" *.tex +AddDescription "LaTeX style file" *.sty +AddDescription "LaTeX package" *.idx +AddDescription "BibTeX style file" *.bst +AddDescription "BibTeX Bibliography" *.bib +AddDescription "My dot-emacs file" *.emacs +AddDescription "Image" *.jpg *.JPG *.JPEG *.gif *.GIF *.png *.PNG + +HeaderName HEADER.html +ReadmeName README.html + +#FancyIndexing on +#IndexIgnore * + + +order allow,deny +deny from all + + + +order allow,deny +deny from 110.89.60.232 +allow from all + + +SetEnvIf User-Agent EmailCollector BAD_BOT +SetEnvIf User-Agent CherryPicker BAD_BOT +SetEnvIf User-Agent BecomeBot BAD_BOT +SetEnvIf User-Agent almaden BAD_BOT +SetEnvIf User-Agent RSSScheduler BAD_BOT +SetEnvIf User-Agent grub-client BAD_BOT +SetEnvIf User-Agent "Fast Crawler" BAD_BOT +SetEnvIf User-Agent "Fetch API Request" BAD_BOT +SetEnvIf User-Agent ia_archiver BAD_BOT +SetEnvIf User-Agent Schmozilla BAD_BOT +SetEnvIf User-Agent WISEnutbot BAD_BOT +SetEnvIf User-Agent "Schmozilla/v9.14 Platinum" BAD_BOT +SetEnvIf User-Agent "Schmozilla/v9.14 Platinum" BAD_BOT +SetEnvIf User-Agent "ysearch/slurp" BAD_BOT +SetEnvIf User-Agent "BDFetch" BAD_BOT +#SetEnvIf User-Agent "Maxthon" BAD_BOT +SetEnvIf User-Agent "www.abot.com" BAD_BOT +SetEnvIf User-Agent "www.aipbot.com" BAD_BOT +SetEnvIf User-Agent Missigua BAD_BOT +SetEnvIf User-Agent "herbert.groot.jebbink.nl" BAD_BOT +SetEnvIf User-Agent "poker-" BAD_BOT +SetEnvIf User-Agent "-poker" BAD_BOT +SetEnvIf User-Agent "Kitenga" BAD_BOT +SetEnvIf User-Agent "telnet0.1" BAD_BOT +SetEnvIf User-Agent "heritrix" BAD_BOT +SetEnvIf User-Agent "Teoma" BAD_BOT +SetEnvIf User-Agent "fast-search-engine" BAD_BOT +SetEnvIf User-Agent "JetBrains" BAD_BOT +SetEnvIf User-Agent "NewzCrawler" BAD_BOT +SetEnvIf User-Agent "Wells Search II" BAD_BOT +SetEnvIf User-Agent "yahoo.com/help/us/ysearch/slurp" BAD_BOT +SetEnvIf User-Agent "MSRBOT/0.1" BAD_BOT +SetEnvIf User-Agent "EverbeeCrawler" BAD_BOT +# SetEnvIf User-Agent "BitTorrent/4.0.0" BAD_BOT + + + +# Code Red and Nimda +SetEnvIf Request_URI ^/default\.ida BAD_BOT=worm +SetEnvIf Request_URI root\.exe BAD_BOT=worm + +# Trackback spammers +SetEnvIf Request_URI mt-tb.cgi BAD_BOT +SetEnvIf Request_URI mt-comments.cgi BAD_BOT + +# Referrer spam +SetEnvIfNoCase Referer ^http://(www\.)?xopy\.com BAD_BOT=spammer +SetEnvIfNoCase Referer ^http://(www\.)?aizzo\.com BAD_BOT=spammer +SetEnvIfNoCase Referer ^http://(www\.)?varied-poker\.com BAD_BOT +SetEnvIfNoCase Referer ^http://(www\.)?antiquejunkyard\.com BAD_BOT +SetEnvIfNoCase Referer ^http://(www\.)?bitlocker\.net BAD_BOT +SetEnvIfNoCase Referer ^http://(www\.)?freedownloadbooks\.net BAD_BOT + +# Bad bot, bugger off +Order Deny,Allow +Deny from env=BAD_BOT + +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)nutzu(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)adult(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)anal(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)mature(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)nude(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)porn(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)pus*y(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)sex(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)teen(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)holdem(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)tits(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*accepted.cc$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*episodesusdbz/.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?advancedmoneyloans.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?affiliplanet.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?apart-?design.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?auktion.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?autogewinne24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?autospiele24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?babay.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?euromillionen.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?eurowins.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?gsm-support.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?gzltax.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?qw8.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?geldspiele24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?goovle.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?heil-fasten.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?immobiliengewinne24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?incest-.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?keywordmaster.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?one2onemag.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?reisegewinne24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?rootfood.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?shemale.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?single66.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?slamhost.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?spielepsychatrie.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?superface.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?topgewinn24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?topspiele24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?transexual.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?usa-wins.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?vendini.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?webmasterplan.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?wseeker.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?xmaster.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?referrer-script.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://www14\.blogspot.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?yahh+oo.*$[OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?tigerdroppings.*$ +RewriteRule .* - [F,L] + +#Redirect Permanent /index.rdf http://crookedtimber.org/feed/rss/ +#Redirect Permanent /index.xml http://crookedtimber.org/feed/ +#Redirect Permanent /comments.xml http://crookedtimber.org/comments/feed/ + +# These rules follow up on Octopress/Hugo and deal with orphaned WP category pages +RewriteRule ^blog/archives/category/(.+)/$ /categories/$1 [L,R=301] +RewriteRule ^blog/archives/category/(.+)/atom.xml$ /categories/$1/index.xml [L,R=301] +#RewriteRule ^blog/categories/([^/]+)/page/.*$ /blog/categories/$1 [L,R=301] +#RewriteRule ^blog/archives/([^/]+)/$ /blog/archives/ [L,R=301] +#RewriteRule ^blog/archives/([^/]+)/([^/]+)/$ /blog/archives/ [L,R=301] +#RewriteRule ^blog/archives/([^/]+)/page/([^/]+)/$ /blog/archives/ [L,R=301] +#RewriteRule ^blog/feed$ /atom.xml [L,R=301] +#RewriteRule ^blog/feed/$ /atom.xml [L,R=301] +#RewriteRule ^blog/rss$ /atom.xml [L,R=301] +RewriteRule ^blog/feed/atom/ /blog/index.xml [L,R=301] +RewriteRule ^blog/categories/([^/]+)/atom.xml*$ /categories/$1/index.xml [L,R=301] +Redirect Permanent /atom.xml http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog.xml http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog/feed/ http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog/feed http://kieranhealy.org/blog/index.xml +Redirect Permanent /feed http://kieranhealy.org/blog/index.xml +Redirect Permanent /feed/ http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog/index.rdf http://kieranhealy.org/blog/index.xml + +# Moved items to their own directories +RewriteRule ^publications.html /publications [L,R=301] +RewriteRule ^teaching.html /teaching [L,R=301] +RewriteRule ^resources.html /resources [L,R=301] +RewriteRule ^emacs-starter-kit.html /resources/emacs-starter-kit.html [L,R=301] + + +Redirect Permanent /blog/archives/category http://kieranhealy.org/categories +Redirect Permanent /blog/categories http://kieranhealy.org/categories + +# Redirect Permanent blog/archives/2011/12/04/sweave-dot-sty-and-the-minionpro-package/ http://kieranhealy.org/blog/archives/2011/12/04/sweave-sty-and-the-minionpro-package/ + +Redirect Permanent /blog/archives/001211.html https://www.kieranhealy.org/blog/archives/2005/10/10/economics-nobel-for-schelling-and-aumann +Redirect Permanent /blog/archives/001210.html https://www.kieranhealy.org/blog/archives/2005/10/08/drive-stanley-drive +Redirect Permanent /blog/archives/001209.html https://www.kieranhealy.org/blog/archives/2005/10/06/miers +Redirect Permanent /blog/archives/001207.html https://www.kieranhealy.org/blog/archives/2005/09/30/left-vs-right-vs-cactus +Redirect Permanent /blog/archives/001206.html https://www.kieranhealy.org/blog/archives/2005/09/28/left-vs-right-pt-cclxi +Redirect Permanent /blog/archives/001205.html https://www.kieranhealy.org/blog/archives/2005/09/27/making-a-success-of-grad-school +Redirect Permanent /blog/archives/001202.html https://www.kieranhealy.org/blog/archives/2005/09/22/some-data-on-families-in-the-workforce +Redirect Permanent /blog/archives/001201.html https://www.kieranhealy.org/blog/archives/2005/09/21/selecting-future-moms +Redirect Permanent /blog/archives/001200.html https://www.kieranhealy.org/blog/archives/2005/09/20/mommy-tracking-the-ivy-leaguers +Redirect Permanent /blog/archives/001199.html https://www.kieranhealy.org/blog/archives/2005/09/19/moondoggle-returns +Redirect Permanent /blog/archives/001198.html https://www.kieranhealy.org/blog/archives/2005/09/19/ts +Redirect Permanent /blog/archives/001193.html https://www.kieranhealy.org/blog/archives/2005/09/16/tax-and-spend-or-just-spend +Redirect Permanent /blog/archives/001192.html https://www.kieranhealy.org/blog/archives/2005/09/14/academic-nutjobs +Redirect Permanent /blog/archives/001190.html https://www.kieranhealy.org/blog/archives/2005/09/13/maybe-they-can-put-my-name-on-the-cover-of-suicide +Redirect Permanent /blog/archives/001189.html https://www.kieranhealy.org/blog/archives/2005/09/12/ct-is-down +Redirect Permanent /blog/archives/001188.html https://www.kieranhealy.org/blog/archives/2005/09/12/god-loves-flags +Redirect Permanent /blog/archives/001187.html https://www.kieranhealy.org/blog/archives/2005/09/07/crossing-the-great-divide +Redirect Permanent /blog/archives/001186.html https://www.kieranhealy.org/blog/archives/2005/09/05/love-story +Redirect Permanent /blog/archives/001185.html https://www.kieranhealy.org/blog/archives/2005/09/04/elsewhere +Redirect Permanent /blog/archives/001183.html https://www.kieranhealy.org/blog/archives/2005/09/03/this-is-all-the-perspective-you-need +Redirect Permanent /blog/archives/001184.html https://www.kieranhealy.org/blog/archives/2005/09/03/dhs-selling-bullshit-cnn-not-buying +Redirect Permanent /blog/archives/001182.html https://www.kieranhealy.org/blog/archives/2005/09/02/the-drowned-and-the-saved +Redirect Permanent /blog/archives/001181.html https://www.kieranhealy.org/blog/archives/2005/09/01/social-disasters-ii +Redirect Permanent /blog/archives/001180.html https://www.kieranhealy.org/blog/archives/2005/09/01/social-disasters +Redirect Permanent /blog/archives/001179.html https://www.kieranhealy.org/blog/archives/2005/08/31/teaching-adam-smith +Redirect Permanent /blog/archives/001171.html https://www.kieranhealy.org/blog/archives/2005/08/22/why-does-chuck-hagel-hate-america +Redirect Permanent /blog/archives/001170.html https://www.kieranhealy.org/blog/archives/2005/08/19/flaming-the-left +Redirect Permanent /blog/archives/001169.html https://www.kieranhealy.org/blog/archives/2005/08/19/kinds-of-quagmires-ii +Redirect Permanent /blog/archives/001167.html https://www.kieranhealy.org/blog/archives/2005/08/10/the-future-lasts-a-long-time +Redirect Permanent /blog/archives/001164.html https://www.kieranhealy.org/blog/archives/2005/07/28/ira-says-its-armed-campaign-is-over +Redirect Permanent /blog/archives/001161.html https://www.kieranhealy.org/blog/archives/2005/07/28/cos-its-too-darn-hot +Redirect Permanent /blog/archives/001153.html https://www.kieranhealy.org/blog/archives/2005/07/23/ideology-and-integrity +Redirect Permanent /blog/archives/001151.html https://www.kieranhealy.org/blog/archives/2005/07/20/the-moor-by-a-length +Redirect Permanent /blog/archives/001150.html https://www.kieranhealy.org/blog/archives/2005/07/17/cold-comfort-farm +Redirect Permanent /blog/archives/001149.html https://www.kieranhealy.org/blog/archives/2005/07/16/harry-potter +Redirect Permanent /blog/archives/001148.html https://www.kieranhealy.org/blog/archives/2005/07/14/one-week-on +Redirect Permanent /blog/archives/001147.html https://www.kieranhealy.org/blog/archives/2005/07/04/work-family-balance-in-theory-and-practice +Redirect Permanent /blog/archives/001139.html https://www.kieranhealy.org/blog/archives/2005/06/29/cryptonomicon +Redirect Permanent /blog/archives/001138.html https://www.kieranhealy.org/blog/archives/2005/06/26/scientology +Redirect Permanent /blog/archives/001137.html https://www.kieranhealy.org/blog/archives/2005/06/24/early-draft-of-the-kelo-opinion-surfaces +Redirect Permanent /blog/archives/001127.html https://www.kieranhealy.org/blog/archives/2005/06/08/summer-vertigo +Redirect Permanent /blog/archives/001126.html https://www.kieranhealy.org/blog/archives/2005/06/07/apple-switches +Redirect Permanent /blog/archives/001119.html https://www.kieranhealy.org/blog/archives/2005/06/03/women-drivers +Redirect Permanent /blog/archives/001118.html https://www.kieranhealy.org/blog/archives/2005/05/29/regexps-rule +Redirect Permanent /blog/archives/001117.html https://www.kieranhealy.org/blog/archives/2005/05/27/lessig-and-the-choir +Redirect Permanent /blog/archives/001115.html https://www.kieranhealy.org/blog/archives/2005/05/23/a-wealth-of-notions +Redirect Permanent /blog/archives/001114.html https://www.kieranhealy.org/blog/archives/2005/05/22/lucasaid +Redirect Permanent /blog/archives/001109.html https://www.kieranhealy.org/blog/archives/2005/05/17/savage-minds +Redirect Permanent /blog/archives/001103.html https://www.kieranhealy.org/blog/archives/2005/05/09/revenge-of-the-sith +Redirect Permanent /blog/archives/001102.html https://www.kieranhealy.org/blog/archives/2005/05/05/janice-rogers-brown-revisited +Redirect Permanent /blog/archives/001101.html https://www.kieranhealy.org/blog/archives/2005/05/04/la-traffic +Redirect Permanent /blog/archives/001096.html https://www.kieranhealy.org/blog/archives/2005/04/27/fetishizing-the-text +Redirect Permanent /blog/archives/001092.html https://www.kieranhealy.org/blog/archives/2005/04/24/transatlantic-chancers +Redirect Permanent /blog/archives/001091.html https://www.kieranhealy.org/blog/archives/2005/04/22/crooked-timbers-field-of-positions +Redirect Permanent /blog/archives/001090.html https://www.kieranhealy.org/blog/archives/2005/04/21/perpetual-is-as-perpetual-does +Redirect Permanent /blog/archives/001089.html https://www.kieranhealy.org/blog/archives/2005/04/21/annals-of-academic-putdowns +Redirect Permanent /blog/archives/001088.html https://www.kieranhealy.org/blog/archives/2005/04/13/my-health-care-co-pay +Redirect Permanent /blog/archives/001087.html https://www.kieranhealy.org/blog/archives/2005/04/12/occupational-hazards +Redirect Permanent /blog/archives/001086.html https://www.kieranhealy.org/blog/archives/2005/04/11/the-frontier-is-not-out-there +Redirect Permanent /blog/archives/001081.html https://www.kieranhealy.org/blog/archives/2005/04/10/confidential-business-proposal +Redirect Permanent /blog/archives/001077.html https://www.kieranhealy.org/blog/archives/2005/04/08/press-clippings +Redirect Permanent /blog/archives/001076.html https://www.kieranhealy.org/blog/archives/2005/04/04/berkeleys-idealism +Redirect Permanent /blog/archives/001075.html https://www.kieranhealy.org/blog/archives/2005/04/02/when-the-pope-came-to-ireland +Redirect Permanent /blog/archives/001074.html https://www.kieranhealy.org/blog/archives/2005/04/02/sociologically-improbable-phrases +Redirect Permanent /blog/archives/001073.html https://www.kieranhealy.org/blog/archives/2005/04/01/the-minuteman-project +Redirect Permanent /blog/archives/001072.html https://www.kieranhealy.org/blog/archives/2005/03/31/burger-queen +Redirect Permanent /blog/archives/001069.html https://www.kieranhealy.org/blog/archives/2005/03/27/at-this-point-i-am-beyond-surprise +Redirect Permanent /blog/archives/001068.html https://www.kieranhealy.org/blog/archives/2005/03/26/credentials +Redirect Permanent /blog/archives/001067.html https://www.kieranhealy.org/blog/archives/2005/03/24/storming-the-hospice +Redirect Permanent /blog/archives/001066.html https://www.kieranhealy.org/blog/archives/2005/03/24/violent-societies +Redirect Permanent /blog/archives/001065.html https://www.kieranhealy.org/blog/archives/2005/03/23/deterrence-and-the-death-penalty +Redirect Permanent /blog/archives/001064.html https://www.kieranhealy.org/blog/archives/2005/03/22/hot-in-the-city +Redirect Permanent /blog/archives/001063.html https://www.kieranhealy.org/blog/archives/2005/03/21/addhealth-returns +Redirect Permanent /blog/archives/001061.html https://www.kieranhealy.org/blog/archives/2005/03/20/the-schiavo-case +Redirect Permanent /blog/archives/001057.html https://www.kieranhealy.org/blog/archives/2005/03/18/george-kennan +Redirect Permanent /blog/archives/001055.html https://www.kieranhealy.org/blog/archives/2005/03/17/crooked-timber-is-down +Redirect Permanent /blog/archives/001056.html https://www.kieranhealy.org/blog/archives/2005/03/17/volokh-and-cruelty +Redirect Permanent /blog/archives/001054.html https://www.kieranhealy.org/blog/archives/2005/03/15/she-stalks-the-internets +Redirect Permanent /blog/archives/001053.html https://www.kieranhealy.org/blog/archives/2005/03/15/needles-under-the-nails +Redirect Permanent /blog/archives/001052.html https://www.kieranhealy.org/blog/archives/2005/03/14/torture +Redirect Permanent /blog/archives/001049.html https://www.kieranhealy.org/blog/archives/2005/03/03/body-parts-sociology +Redirect Permanent /blog/archives/001048.html https://www.kieranhealy.org/blog/archives/2005/02/28/life-imitating-art +Redirect Permanent /blog/archives/001047.html https://www.kieranhealy.org/blog/archives/2005/02/27/not-the-kind-of-bottle-i-need +Redirect Permanent /blog/archives/001046.html https://www.kieranhealy.org/blog/archives/2005/02/26/numa-numa-new-york-times +Redirect Permanent /blog/archives/001045.html https://www.kieranhealy.org/blog/archives/2005/02/21/followup-on-tal-afar +Redirect Permanent /blog/archives/001043.html https://www.kieranhealy.org/blog/archives/2005/02/18/minding-the-kids-again +Redirect Permanent /blog/archives/001042.html https://www.kieranhealy.org/blog/archives/2005/02/17/beat-the-market +Redirect Permanent /blog/archives/001041.html https://www.kieranhealy.org/blog/archives/2005/02/14/nb-bs +Redirect Permanent /blog/archives/001040.html https://www.kieranhealy.org/blog/archives/2005/02/12/henry-on-npr +Redirect Permanent /blog/archives/001039.html https://www.kieranhealy.org/blog/archives/2005/02/10/me-and-christopher-hitchens +Redirect Permanent /blog/archives/001038.html https://www.kieranhealy.org/blog/archives/2005/02/08/instead-of-a-muffin-with-your-coffee-this-morning +Redirect Permanent /blog/archives/001035.html https://www.kieranhealy.org/blog/archives/2005/02/03/roosevelt-and-bush +Redirect Permanent /blog/archives/001033.html https://www.kieranhealy.org/blog/archives/2005/02/01/high-school-autocrats +Redirect Permanent /blog/archives/001031.html https://www.kieranhealy.org/blog/archives/2005/01/30/prospects-for-iraqi-democracy +Redirect Permanent /blog/archives/001030.html https://www.kieranhealy.org/blog/archives/2005/01/27/specialization-and-status-in-philosophy +Redirect Permanent /blog/archives/001029.html https://www.kieranhealy.org/blog/archives/2005/01/26/self-esteem +Redirect Permanent /blog/archives/001020.html https://www.kieranhealy.org/blog/archives/2005/01/14/and-this-is-jesuss-skull-when-he-was-a-little-boy +Redirect Permanent /blog/archives/001019.html https://www.kieranhealy.org/blog/archives/2005/01/14/dont-mention-the-war +Redirect Permanent /blog/archives/001015.html https://www.kieranhealy.org/blog/archives/2005/01/08/sociology-in-cafe-society +Redirect Permanent /blog/archives/001008.html https://www.kieranhealy.org/blog/archives/2004/12/29/a-sociologist-amongst-philosophers +Redirect Permanent /blog/archives/001007.html https://www.kieranhealy.org/blog/archives/2004/12/15/identity-politics-for-all +Redirect Permanent /blog/archives/001006.html https://www.kieranhealy.org/blog/archives/2004/12/13/our-law-and-gods +Redirect Permanent /blog/archives/001004.html https://www.kieranhealy.org/blog/archives/2004/12/11/indispensible-applications +Redirect Permanent /blog/archives/001003.html https://www.kieranhealy.org/blog/archives/2004/12/10/testing-mars-edit +Redirect Permanent /blog/archives/001001.html https://www.kieranhealy.org/blog/archives/2004/12/07/invading-the-moon +Redirect Permanent /blog/archives/001000.html https://www.kieranhealy.org/blog/archives/2004/12/06/posner-and-becker-comedy-gold +Redirect Permanent /blog/archives/000998.html https://www.kieranhealy.org/blog/archives/2004/12/05/academic-job-markets-and-status-hierarchies +Redirect Permanent /blog/archives/000995.html https://www.kieranhealy.org/blog/archives/2004/12/04/draft-contribution-to-tech-central-station +Redirect Permanent /blog/archives/000994.html https://www.kieranhealy.org/blog/archives/2004/12/03/freedom-on-the-march +Redirect Permanent /blog/archives/000992.html https://www.kieranhealy.org/blog/archives/2004/12/01/brio +Redirect Permanent /blog/archives/000979.html https://www.kieranhealy.org/blog/archives/2004/11/25/the-wrong-pie +Redirect Permanent /blog/archives/000978.html https://www.kieranhealy.org/blog/archives/2004/11/23/because-the-base-wouldnt-want-to-see-a-fairy-up-there +Redirect Permanent /blog/archives/000977.html https://www.kieranhealy.org/blog/archives/2004/11/23/framing +Redirect Permanent /blog/archives/000970.html https://www.kieranhealy.org/blog/archives/2004/11/21/my-semi-conscious-mind +Redirect Permanent /blog/archives/000969.html https://www.kieranhealy.org/blog/archives/2004/11/20/economics-and-philosophy +Redirect Permanent /blog/archives/000968.html https://www.kieranhealy.org/blog/archives/2004/11/19/further-analysis-of-electronic-voting-patterns +Redirect Permanent /blog/archives/000957.html https://www.kieranhealy.org/blog/archives/2004/11/12/delicious-monster +Redirect Permanent /blog/archives/000955.html https://www.kieranhealy.org/blog/archives/2004/11/11/going-home-to-a-foreign-country +Redirect Permanent /blog/archives/000954.html https://www.kieranhealy.org/blog/archives/2004/11/09/the-obvious-solution-to-spam +Redirect Permanent /blog/archives/000947.html https://www.kieranhealy.org/blog/archives/2004/11/06/religion-and-social-justice +Redirect Permanent /blog/archives/000946.html https://www.kieranhealy.org/blog/archives/2004/11/05/moral-values-again +Redirect Permanent /blog/archives/000945.html https://www.kieranhealy.org/blog/archives/2004/11/04/no-child-left-behind-alive +Redirect Permanent /blog/archives/000943.html https://www.kieranhealy.org/blog/archives/2004/11/04/red-counties-blue-counties-and-occupied-counties +Redirect Permanent /blog/archives/000938.html https://www.kieranhealy.org/blog/archives/2004/11/03/moral-values +Redirect Permanent /blog/archives/000934.html https://www.kieranhealy.org/blog/archives/2004/10/31/trick-or-treat +Redirect Permanent /blog/archives/000932.html https://www.kieranhealy.org/blog/archives/2004/10/31/redskins-lose +Redirect Permanent /blog/archives/000929.html https://www.kieranhealy.org/blog/archives/2004/10/29/acknowledging-your-limitations +Redirect Permanent /blog/archives/000925.html https://www.kieranhealy.org/blog/archives/2004/10/26/blogging-and-blog-ads +Redirect Permanent /blog/archives/000920.html https://www.kieranhealy.org/blog/archives/2004/10/24/mobilizing-the-base +Redirect Permanent /blog/archives/000911.html https://www.kieranhealy.org/blog/archives/2004/10/21/in-cambodia-i-imagine +Redirect Permanent /blog/archives/000907.html https://www.kieranhealy.org/blog/archives/2004/10/20/over-enthusiastic-organ-procurement +Redirect Permanent /blog/archives/000904.html https://www.kieranhealy.org/blog/archives/2004/10/19/may-december-marriages-again +Redirect Permanent /blog/archives/000899.html https://www.kieranhealy.org/blog/archives/2004/10/15/brad-delong-discovers-cultural-capital +Redirect Permanent /blog/archives/000898.html https://www.kieranhealy.org/blog/archives/2004/10/15/oh-the-humanity +Redirect Permanent /blog/archives/000895.html https://www.kieranhealy.org/blog/archives/2004/10/14/marrying-up +Redirect Permanent /blog/archives/000892.html https://www.kieranhealy.org/blog/archives/2004/10/13/statistical-methods +Redirect Permanent /blog/archives/000886.html https://www.kieranhealy.org/blog/archives/2004/10/11/comic-disaster-relief +Redirect Permanent /blog/archives/000885.html https://www.kieranhealy.org/blog/archives/2004/10/10/i-could-do-that-on-a-bike-maybe +Redirect Permanent /blog/archives/000881.html https://www.kieranhealy.org/blog/archives/2004/10/05/my-first-is-in-quick-but-not-in-thick +Redirect Permanent /blog/archives/000879.html https://www.kieranhealy.org/blog/archives/2004/10/02/hes-baaack-and-hes-shrillllll +Redirect Permanent /blog/archives/000877.html https://www.kieranhealy.org/blog/archives/2004/09/29/education-and-terror +Redirect Permanent /blog/archives/000874.html https://www.kieranhealy.org/blog/archives/2004/09/28/all-things-depressing +Redirect Permanent /blog/archives/000871.html https://www.kieranhealy.org/blog/archives/2004/09/26/dubya-channels-calvin-or-vice-versa +Redirect Permanent /blog/archives/000869.html https://www.kieranhealy.org/blog/archives/2004/09/25/advice-to-authors +Redirect Permanent /blog/archives/000868.html https://www.kieranhealy.org/blog/archives/2004/09/24/lead-on-david-brooks +Redirect Permanent /blog/archives/000867.html https://www.kieranhealy.org/blog/archives/2004/09/23/song-of-the-schmibertarians +Redirect Permanent /blog/archives/000865.html https://www.kieranhealy.org/blog/archives/2004/09/22/business-opportunity +Redirect Permanent /blog/archives/000864.html https://www.kieranhealy.org/blog/archives/2004/09/21/the-condition-of-the-working-class-in-manchester-and-new-england +Redirect Permanent /blog/archives/000859.html https://www.kieranhealy.org/blog/archives/2004/09/16/sui-generis +Redirect Permanent /blog/archives/000853.html https://www.kieranhealy.org/blog/archives/2004/09/12/synergistic-annoyance-convergence +Redirect Permanent /blog/archives/000848.html https://www.kieranhealy.org/blog/archives/2004/09/10/dick-cheney-on-employment +Redirect Permanent /blog/archives/000847.html https://www.kieranhealy.org/blog/archives/2004/09/09/theory-and-practice +Redirect Permanent /blog/archives/000846.html https://www.kieranhealy.org/blog/archives/2004/09/08/secrets-of-the-bush-presidency +Redirect Permanent /blog/archives/000845.html https://www.kieranhealy.org/blog/archives/2004/09/08/iem-analysis-spitnpolish-dept +Redirect Permanent /blog/archives/000843.html https://www.kieranhealy.org/blog/archives/2004/09/07/your-alan-keyes-moment-of-the-day +Redirect Permanent /blog/archives/000840.html https://www.kieranhealy.org/blog/archives/2004/09/06/afflicting-the-comfortable +Redirect Permanent /blog/archives/000838.html https://www.kieranhealy.org/blog/archives/2004/09/06/the-cane-mutiny +Redirect Permanent /blog/archives/000833.html https://www.kieranhealy.org/blog/archives/2004/09/05/crutches +Redirect Permanent /blog/archives/000831.html https://www.kieranhealy.org/blog/archives/2004/09/04/religion-and-class +Redirect Permanent /blog/archives/000830.html https://www.kieranhealy.org/blog/archives/2004/09/02/emile-durkheim-on-zell-miller +Redirect Permanent /blog/archives/000829.html https://www.kieranhealy.org/blog/archives/2004/09/01/wibbly-wobbly +Redirect Permanent /blog/archives/000824.html https://www.kieranhealy.org/blog/archives/2004/08/31/the-man-says-he-is-irish-he-is-also-drunk +Redirect Permanent /blog/archives/000817.html https://www.kieranhealy.org/blog/archives/2004/08/27/altruism-as-an-organizational-problem +Redirect Permanent /blog/archives/000815.html https://www.kieranhealy.org/blog/archives/2004/08/24/back-to-school-week-at-the-university-of-arizona +Redirect Permanent /blog/archives/000810.html https://www.kieranhealy.org/blog/archives/2004/08/23/pleasant-surprise +Redirect Permanent /blog/archives/000802.html https://www.kieranhealy.org/blog/archives/2004/08/21/swift-boat-bloggers-for-denying-the-bleedin-obvious +Redirect Permanent /blog/archives/000801.html https://www.kieranhealy.org/blog/archives/2004/08/20/ipods-in-the-classroom +Redirect Permanent /blog/archives/000800.html https://www.kieranhealy.org/blog/archives/2004/08/20/a-man-after-his-own-heart +Redirect Permanent /blog/archives/000798.html https://www.kieranhealy.org/blog/archives/2004/08/19/roll-10-or-better-on-2-d8s-to-make-the-obvious-joke +Redirect Permanent /blog/archives/000797.html https://www.kieranhealy.org/blog/archives/2004/08/18/krugman-at-the-asa +Redirect Permanent /blog/archives/000796.html https://www.kieranhealy.org/blog/archives/2004/08/14/conferencing +Redirect Permanent /blog/archives/000795.html https://www.kieranhealy.org/blog/archives/2004/08/14/love-is-a-battlefield-spanning-tree-network-with-no-4-cycles +Redirect Permanent /blog/archives/000793.html https://www.kieranhealy.org/blog/archives/2004/08/11/good-stuff-from-the-decembrist +Redirect Permanent /blog/archives/000792.html https://www.kieranhealy.org/blog/archives/2004/08/10/egalitarian-capitalism +Redirect Permanent /blog/archives/000788.html https://www.kieranhealy.org/blog/archives/2004/08/08/testing-positive +Redirect Permanent /blog/archives/000787.html https://www.kieranhealy.org/blog/archives/2004/08/06/flying-the-friendly-skies +Redirect Permanent /blog/archives/000783.html https://www.kieranhealy.org/blog/archives/2004/07/27/road-movie-to-berlin-little-rock +Redirect Permanent /blog/archives/000782.html https://www.kieranhealy.org/blog/archives/2004/07/24/markets-firms-and-planning +Redirect Permanent /blog/archives/000781.html https://www.kieranhealy.org/blog/archives/2004/07/24/on-the-road-again +Redirect Permanent /blog/archives/000780.html https://www.kieranhealy.org/blog/archives/2004/07/19/for-all-your-causal-counterfactual-needs +Redirect Permanent /blog/archives/000779.html https://www.kieranhealy.org/blog/archives/2004/07/19/faux-pas +Redirect Permanent /blog/archives/000778.html https://www.kieranhealy.org/blog/archives/2004/07/16/a-new-analysis-of-incarceration-and-inequality +Redirect Permanent /blog/archives/000776.html https://www.kieranhealy.org/blog/archives/2004/07/15/my-irresistible-rise +Redirect Permanent /blog/archives/000775.html https://www.kieranhealy.org/blog/archives/2004/07/13/public-and-private-health-care +Redirect Permanent /blog/archives/000772.html https://www.kieranhealy.org/blog/archives/2004/07/06/vacation +Redirect Permanent /blog/archives/000771.html https://www.kieranhealy.org/blog/archives/2004/07/02/public-sociologists +Redirect Permanent /blog/archives/000770.html https://www.kieranhealy.org/blog/archives/2004/07/01/rabies-via-organ-transplant +Redirect Permanent /blog/archives/000769.html https://www.kieranhealy.org/blog/archives/2004/06/30/in-order-to-destroy-the-village-we-had-to-sue-it +Redirect Permanent /blog/archives/000768.html https://www.kieranhealy.org/blog/archives/2004/06/26/sociologys-final-frontier +Redirect Permanent /blog/archives/000767.html https://www.kieranhealy.org/blog/archives/2004/06/23/big-dog-bites-man +Redirect Permanent /blog/archives/000766.html https://www.kieranhealy.org/blog/archives/2004/06/23/mosquitos +Redirect Permanent /blog/archives/000765.html https://www.kieranhealy.org/blog/archives/2004/06/21/crooked-timbers-greatest-hits +Redirect Permanent /blog/archives/000764.html https://www.kieranhealy.org/blog/archives/2004/06/20/this-is-an-outrage +Redirect Permanent /blog/archives/000762.html https://www.kieranhealy.org/blog/archives/2004/06/15/biblical-literalism +Redirect Permanent /blog/archives/000761.html https://www.kieranhealy.org/blog/archives/2004/06/14/fair-warning +Redirect Permanent /blog/archives/000759.html https://www.kieranhealy.org/blog/archives/2004/06/12/eugene-volokh-hits-the-eject-button +Redirect Permanent /blog/archives/000758.html https://www.kieranhealy.org/blog/archives/2004/06/12/wtf +Redirect Permanent /blog/archives/000757.html https://www.kieranhealy.org/blog/archives/2004/06/09/the-social-production-of-libertarians +Redirect Permanent /blog/archives/000756.html https://www.kieranhealy.org/blog/archives/2004/06/08/on-a-wing-and-a-prayer +Redirect Permanent /blog/archives/000755.html https://www.kieranhealy.org/blog/archives/2004/06/07/compartmentalization +Redirect Permanent /blog/archives/000754.html https://www.kieranhealy.org/blog/archives/2004/06/07/alan-turing +Redirect Permanent /blog/archives/000753.html https://www.kieranhealy.org/blog/archives/2004/06/07/d-day-in-the-public-mind +Redirect Permanent /blog/archives/000752.html https://www.kieranhealy.org/blog/archives/2004/06/06/down-in-cork-hed-be-known-as-a-langer +Redirect Permanent /blog/archives/000751.html https://www.kieranhealy.org/blog/archives/2004/06/05/plagiarism +Redirect Permanent /blog/archives/000750.html https://www.kieranhealy.org/blog/archives/2004/06/04/dont-upgrade +Redirect Permanent /blog/archives/000749.html https://www.kieranhealy.org/blog/archives/2004/06/02/geek-moment +Redirect Permanent /blog/archives/000748.html https://www.kieranhealy.org/blog/archives/2004/05/31/sociology-of-culture +Redirect Permanent /blog/archives/000747.html https://www.kieranhealy.org/blog/archives/2004/05/30/a-government-of-laws-and-not-of-men +Redirect Permanent /blog/archives/000746.html https://www.kieranhealy.org/blog/archives/2004/05/28/professional-misconduct +Redirect Permanent /blog/archives/000745.html https://www.kieranhealy.org/blog/archives/2004/05/27/rumsfeld-speaks +Redirect Permanent /blog/archives/000744.html https://www.kieranhealy.org/blog/archives/2004/05/26/your-commencement-speaker-roster +Redirect Permanent /blog/archives/000743.html https://www.kieranhealy.org/blog/archives/2004/05/24/compare-and-contrast +Redirect Permanent /blog/archives/000742.html https://www.kieranhealy.org/blog/archives/2004/05/24/another-one-for-the-pile +Redirect Permanent /blog/archives/000739.html https://www.kieranhealy.org/blog/archives/2004/05/22/something-like-fire-or-the-wheel +Redirect Permanent /blog/archives/000738.html https://www.kieranhealy.org/blog/archives/2004/05/18/the-day-after-tomorrow +Redirect Permanent /blog/archives/000737.html https://www.kieranhealy.org/blog/archives/2004/05/18/quick-eurovision-followup +Redirect Permanent /blog/archives/000736.html https://www.kieranhealy.org/blog/archives/2004/05/14/fingerprints +Redirect Permanent /blog/archives/000735.html https://www.kieranhealy.org/blog/archives/2004/05/13/torture-of-a-different-kind +Redirect Permanent /blog/archives/000730.html https://www.kieranhealy.org/blog/archives/2004/05/03/conspicuous-by-his-absence +Redirect Permanent /blog/archives/000734.html https://www.kieranhealy.org/blog/archives/2004/05/03/bristol +Redirect Permanent /blog/archives/000726.html https://www.kieranhealy.org/blog/archives/2004/04/25/nielsen-hayden-isms +Redirect Permanent /blog/archives/000725.html https://www.kieranhealy.org/blog/archives/2004/04/25/red-and-blue-america +Redirect Permanent /blog/archives/000724.html https://www.kieranhealy.org/blog/archives/2004/04/25/culture-matters +Redirect Permanent /blog/archives/000723.html https://www.kieranhealy.org/blog/archives/2004/04/20/freebies +Redirect Permanent /blog/archives/000722.html https://www.kieranhealy.org/blog/archives/2004/04/20/botching-the-job +Redirect Permanent /blog/archives/000720.html https://www.kieranhealy.org/blog/archives/2004/04/19/smoking-in-public +Redirect Permanent /blog/archives/000719.html https://www.kieranhealy.org/blog/archives/2004/04/13/great-but-avoid-open-top-cars +Redirect Permanent /blog/archives/000716.html https://www.kieranhealy.org/blog/archives/2004/04/07/shelf-life +Redirect Permanent /blog/archives/000715.html https://www.kieranhealy.org/blog/archives/2004/04/06/who-fears-to-speak-of-easter-week +Redirect Permanent /blog/archives/000713.html https://www.kieranhealy.org/blog/archives/2004/03/29/the-full-lineout +Redirect Permanent /blog/archives/000712.html https://www.kieranhealy.org/blog/archives/2004/03/26/seduced-by-a-model +Redirect Permanent /blog/archives/000711.html https://www.kieranhealy.org/blog/archives/2004/03/25/bloggers-incarnate +Redirect Permanent /blog/archives/000709.html https://www.kieranhealy.org/blog/archives/2004/03/24/more-of-the-same +Redirect Permanent /blog/archives/000707.html https://www.kieranhealy.org/blog/archives/2004/03/22/bobo-brutalism-in-pasadena +Redirect Permanent /blog/archives/000706.html https://www.kieranhealy.org/blog/archives/2004/03/19/men-from-mars-women-from-venus-phds-from-uranus +Redirect Permanent /blog/archives/000705.html https://www.kieranhealy.org/blog/archives/2004/03/18/2-bed-1-bath-appalling-vista-3000year +Redirect Permanent /blog/archives/000703.html https://www.kieranhealy.org/blog/archives/2004/03/17/from-the-irish +Redirect Permanent /blog/archives/000701.html https://www.kieranhealy.org/blog/archives/2004/03/15/science-in-action +Redirect Permanent /blog/archives/000700.html https://www.kieranhealy.org/blog/archives/2004/03/14/moria-im-lost-in-a-mine-named-moria +Redirect Permanent /blog/archives/000695.html https://www.kieranhealy.org/blog/archives/2004/03/09/the-sociology-of-blood-and-guts +Redirect Permanent /blog/archives/000694.html https://www.kieranhealy.org/blog/archives/2004/03/09/on-being-put-off-wagner-forever +Redirect Permanent /blog/archives/000693.html https://www.kieranhealy.org/blog/archives/2004/03/08/the-gay-divorcee +Redirect Permanent /blog/archives/000688.html https://www.kieranhealy.org/blog/archives/2004/02/28/he-wishes-for-the-cloths-of-heaven +Redirect Permanent /blog/archives/000687.html https://www.kieranhealy.org/blog/archives/2004/02/28/memo-to-peter-jackson-eugene-volokh-et-al +Redirect Permanent /blog/archives/000686.html https://www.kieranhealy.org/blog/archives/2004/02/28/visible-libertarians +Redirect Permanent /blog/archives/000683.html https://www.kieranhealy.org/blog/archives/2004/02/27/writing-history +Redirect Permanent /blog/archives/000681.html https://www.kieranhealy.org/blog/archives/2004/02/23/economics-of-mozart-and-happiness +Redirect Permanent /blog/archives/000678.html https://www.kieranhealy.org/blog/archives/2004/02/19/awards-are-their-own-reward +Redirect Permanent /blog/archives/000677.html https://www.kieranhealy.org/blog/archives/2004/02/18/ow +Redirect Permanent /blog/archives/000676.html https://www.kieranhealy.org/blog/archives/2004/02/18/dont-be-afraid +Redirect Permanent /blog/archives/000674.html https://www.kieranhealy.org/blog/archives/2004/02/17/left-wing-conspirators +Redirect Permanent /blog/archives/000673.html https://www.kieranhealy.org/blog/archives/2004/02/16/the-world-city-system +Redirect Permanent /blog/archives/000672.html https://www.kieranhealy.org/blog/archives/2004/02/15/knowing-about-religion +Redirect Permanent /blog/archives/000671.html https://www.kieranhealy.org/blog/archives/2004/02/14/quiz-night-at-crooked-timber +Redirect Permanent /blog/archives/000669.html https://www.kieranhealy.org/blog/archives/2004/02/12/you-old-romantic-me +Redirect Permanent /blog/archives/000667.html https://www.kieranhealy.org/blog/archives/2004/02/10/conservatives-in-academia +Redirect Permanent /blog/archives/000666.html https://www.kieranhealy.org/blog/archives/2004/02/10/transcripts +Redirect Permanent /blog/archives/000665.html https://www.kieranhealy.org/blog/archives/2004/02/09/textile-2 +Redirect Permanent /blog/archives/000662.html https://www.kieranhealy.org/blog/archives/2004/02/06/hell-is-other-pupils +Redirect Permanent /blog/archives/000661.html https://www.kieranhealy.org/blog/archives/2004/02/05/the-five-standard-excuses +Redirect Permanent /blog/archives/000659.html https://www.kieranhealy.org/blog/archives/2004/02/03/walking-to-school +Redirect Permanent /blog/archives/000657.html https://www.kieranhealy.org/blog/archives/2004/02/01/book-titles +Redirect Permanent /blog/archives/000655.html https://www.kieranhealy.org/blog/archives/2004/01/31/for-all-suitably-restricted-definitions-of-world +Redirect Permanent /blog/archives/000654.html https://www.kieranhealy.org/blog/archives/2004/01/31/id-rebutted-c1805 +Redirect Permanent /blog/archives/000652.html https://www.kieranhealy.org/blog/archives/2004/01/28/inequality-and-the-varieties-of-capitalism +Redirect Permanent /blog/archives/000650.html https://www.kieranhealy.org/blog/archives/2004/01/28/drugs-and-deterrence +Redirect Permanent /blog/archives/000649.html https://www.kieranhealy.org/blog/archives/2004/01/27/testing-ecto +Redirect Permanent /blog/archives/000647.html https://www.kieranhealy.org/blog/archives/2004/01/25/koufax-awards-update +Redirect Permanent /blog/archives/000641.html https://www.kieranhealy.org/blog/archives/2004/01/25/after-the-new-economy +Redirect Permanent /blog/archives/000636.html https://www.kieranhealy.org/blog/archives/2004/01/21/democracy-in-america +Redirect Permanent /blog/archives/000634.html https://www.kieranhealy.org/blog/archives/2004/01/20/artistic-temperaments +Redirect Permanent /blog/archives/000629.html https://www.kieranhealy.org/blog/archives/2004/01/15/vocab-words +Redirect Permanent /blog/archives/000627.html https://www.kieranhealy.org/blog/archives/2004/01/15/irregular-verb-watch +Redirect Permanent /blog/archives/000628.html https://www.kieranhealy.org/blog/archives/2004/01/09/moondoggle +Redirect Permanent /blog/archives/000614.html https://www.kieranhealy.org/blog/archives/2004/01/07/coffee-time +Redirect Permanent /blog/archives/000613.html https://www.kieranhealy.org/blog/archives/2004/01/05/social-engineering-in-the-1790s +Redirect Permanent /blog/archives/000612.html https://www.kieranhealy.org/blog/archives/2004/01/04/illocutionary-vegas-act +Redirect Permanent /blog/archives/000611.html https://www.kieranhealy.org/blog/archives/2004/01/03/mob-rule-at-the-bbc +Redirect Permanent /blog/archives/000610.html https://www.kieranhealy.org/blog/archives/2003/12/31/ct-left-exposed-again +Redirect Permanent /blog/archives/000609.html https://www.kieranhealy.org/blog/archives/2003/12/27/return-of-the-king +Redirect Permanent /blog/archives/000606.html https://www.kieranhealy.org/blog/archives/2003/12/24/christmas-in-oz +Redirect Permanent /blog/archives/000605.html https://www.kieranhealy.org/blog/archives/2003/12/21/the-dead-of-winter +Redirect Permanent /blog/archives/000604.html https://www.kieranhealy.org/blog/archives/2003/12/21/cry-me-a-river +Redirect Permanent /blog/archives/000603.html https://www.kieranhealy.org/blog/archives/2003/12/19/the-beast-with-two-robacks +Redirect Permanent /blog/archives/000602.html https://www.kieranhealy.org/blog/archives/2003/12/18/blasphemy +Redirect Permanent /blog/archives/000601.html https://www.kieranhealy.org/blog/archives/2003/12/17/eyesores +Redirect Permanent /blog/archives/000600.html https://www.kieranhealy.org/blog/archives/2003/12/15/books-i-did-not-read-this-year +Redirect Permanent /blog/archives/000596.html https://www.kieranhealy.org/blog/archives/2003/12/13/another-important-endorsement +Redirect Permanent /blog/archives/000595.html https://www.kieranhealy.org/blog/archives/2003/12/12/sociology-of-cultures +Redirect Permanent /blog/archives/000590.html https://www.kieranhealy.org/blog/archives/2003/12/11/in-a-word +Redirect Permanent /blog/archives/000589.html https://www.kieranhealy.org/blog/archives/2003/12/09/gore-and-dean +Redirect Permanent /blog/archives/000588.html https://www.kieranhealy.org/blog/archives/2003/12/09/islam-and-economic-growth +Redirect Permanent /blog/archives/000587.html https://www.kieranhealy.org/blog/archives/2003/12/08/the-poetry-of-sadness +Redirect Permanent /blog/archives/000586.html https://www.kieranhealy.org/blog/archives/2003/12/06/love-is-a-many-legged-thing +Redirect Permanent /blog/archives/000585.html https://www.kieranhealy.org/blog/archives/2003/12/03/historians-of-the-world-unite +Redirect Permanent /blog/archives/000584.html https://www.kieranhealy.org/blog/archives/2003/12/03/plame-kerfuffle +Redirect Permanent /blog/archives/000582.html https://www.kieranhealy.org/blog/archives/2003/11/27/oliver-cromwells-head +Redirect Permanent /blog/archives/000581.html https://www.kieranhealy.org/blog/archives/2003/11/24/tenure-and-toddlers +Redirect Permanent /blog/archives/000576.html https://www.kieranhealy.org/blog/archives/2003/11/22/in-black-and-white-and-red +Redirect Permanent /blog/archives/000575.html https://www.kieranhealy.org/blog/archives/2003/11/19/democracy-by-example +Redirect Permanent /blog/archives/000574.html https://www.kieranhealy.org/blog/archives/2003/11/19/stranger-than-fiction +Redirect Permanent /blog/archives/000573.html https://www.kieranhealy.org/blog/archives/2003/11/15/hypocritical-moi +Redirect Permanent /blog/archives/000572.html https://www.kieranhealy.org/blog/archives/2003/11/13/suv-luv +Redirect Permanent /blog/archives/000571.html https://www.kieranhealy.org/blog/archives/2003/11/12/rhetorical-moderation-for-thee +Redirect Permanent /blog/archives/000570.html https://www.kieranhealy.org/blog/archives/2003/11/10/solidarity-and-hierarchy-in-academic-job-markets +Redirect Permanent /blog/archives/000569.html https://www.kieranhealy.org/blog/archives/2003/11/06/no-one-can-be-told-what-the-meatrix-is +Redirect Permanent /blog/archives/000562.html https://www.kieranhealy.org/blog/archives/2003/11/05/interview-with-the-moor +Redirect Permanent /blog/archives/000568.html https://www.kieranhealy.org/blog/archives/2003/11/05/annals-of-premature-accusations +Redirect Permanent /blog/archives/000567.html https://www.kieranhealy.org/blog/archives/2003/11/03/janice-r-brown-speaks +Redirect Permanent /blog/archives/000566.html https://www.kieranhealy.org/blog/archives/2003/11/01/its-like-the-king +Redirect Permanent /blog/archives/000565.html https://www.kieranhealy.org/blog/archives/2003/10/31/vrwc +Redirect Permanent /blog/archives/000564.html https://www.kieranhealy.org/blog/archives/2003/10/30/dept-of-fair-and-balanced +Redirect Permanent /blog/archives/000560.html https://www.kieranhealy.org/blog/archives/2003/10/29/number-crunching +Redirect Permanent /blog/archives/000559.html https://www.kieranhealy.org/blog/archives/2003/10/28/all-things-bright-and-easterbrook +Redirect Permanent /blog/archives/000558.html https://www.kieranhealy.org/blog/archives/2003/10/27/gregg-easterbrook-is-having-a-bad-month +Redirect Permanent /blog/archives/000557.html https://www.kieranhealy.org/blog/archives/2003/10/27/blogs-for-the-boys +Redirect Permanent /blog/archives/000556.html https://www.kieranhealy.org/blog/archives/2003/10/26/geras-on-copyeditors-revised +Redirect Permanent /blog/archives/000555.html https://www.kieranhealy.org/blog/archives/2003/10/23/plus-25-for-yourself +Redirect Permanent /blog/archives/000554.html https://www.kieranhealy.org/blog/archives/2003/10/22/bush-capital-hosts-bush-president +Redirect Permanent /blog/archives/000552.html https://www.kieranhealy.org/blog/archives/2003/10/21/bumper-stickers +Redirect Permanent /blog/archives/000551.html https://www.kieranhealy.org/blog/archives/2003/10/20/international-monetary-fun +Redirect Permanent /blog/archives/000550.html https://www.kieranhealy.org/blog/archives/2003/10/19/the-micropolitics-of-melbourne-cafe-society +Redirect Permanent /blog/archives/000543.html https://www.kieranhealy.org/blog/archives/2003/10/13/god-is-undead +Redirect Permanent /blog/archives/000542.html https://www.kieranhealy.org/blog/archives/2003/10/09/the-new-catechism-of-cliche +Redirect Permanent /blog/archives/000541.html https://www.kieranhealy.org/blog/archives/2003/10/08/big-changes-in-california +Redirect Permanent /blog/archives/000540.html https://www.kieranhealy.org/blog/archives/2003/10/06/all-things-nice +Redirect Permanent /blog/archives/000539.html https://www.kieranhealy.org/blog/archives/2003/10/06/israel-bombs-syria +Redirect Permanent /blog/archives/000538.html https://www.kieranhealy.org/blog/archives/2003/10/04/l-ron-at-ground-zero +Redirect Permanent /blog/archives/000537.html https://www.kieranhealy.org/blog/archives/2003/09/28/even-further-down-under +Redirect Permanent /blog/archives/000536.html https://www.kieranhealy.org/blog/archives/2003/09/21/loaves-and-fishes-and-beers +Redirect Permanent /blog/archives/000535.html https://www.kieranhealy.org/blog/archives/2003/09/19/this-just-in-from-cnn +Redirect Permanent /blog/archives/000534.html https://www.kieranhealy.org/blog/archives/2003/09/18/there-are-no-stupid-questions +Redirect Permanent /blog/archives/000533.html https://www.kieranhealy.org/blog/archives/2003/09/18/irregular-verbs +Redirect Permanent /blog/archives/000532.html https://www.kieranhealy.org/blog/archives/2003/09/17/rubber-duckies +Redirect Permanent /blog/archives/000531.html https://www.kieranhealy.org/blog/archives/2003/09/15/word-salad +Redirect Permanent /blog/archives/000530.html https://www.kieranhealy.org/blog/archives/2003/09/15/capital-mobility +Redirect Permanent /blog/archives/000529.html https://www.kieranhealy.org/blog/archives/2003/09/12/yes-prime-minister +Redirect Permanent /blog/archives/000528.html https://www.kieranhealy.org/blog/archives/2003/09/08/snark +Redirect Permanent /blog/archives/000527.html https://www.kieranhealy.org/blog/archives/2003/09/07/right-wing-postmodernism-again +Redirect Permanent /blog/archives/000526.html https://www.kieranhealy.org/blog/archives/2003/09/07/existence-theorems-are-reductios +Redirect Permanent /blog/archives/000525.html https://www.kieranhealy.org/blog/archives/2003/09/05/euphony-in-language +Redirect Permanent /blog/archives/000524.html https://www.kieranhealy.org/blog/archives/2003/09/04/testing-kung-log +Redirect Permanent /blog/archives/000523.html https://www.kieranhealy.org/blog/archives/2003/09/04/google-functionality-marches-on +Redirect Permanent /blog/archives/000522.html https://www.kieranhealy.org/blog/archives/2003/09/03/minding-the-kids +Redirect Permanent /blog/archives/000521.html https://www.kieranhealy.org/blog/archives/2003/09/01/kinds-of-quagmires +Redirect Permanent /blog/archives/000520.html https://www.kieranhealy.org/blog/archives/2003/08/31/funding-basic-research +Redirect Permanent /blog/archives/000519.html https://www.kieranhealy.org/blog/archives/2003/08/31/get-a-lifestyle +Redirect Permanent /blog/archives/000518.html https://www.kieranhealy.org/blog/archives/2003/08/29/russia-and-china +Redirect Permanent /blog/archives/000517.html https://www.kieranhealy.org/blog/archives/2003/08/28/real-and-unreal +Redirect Permanent /blog/archives/000516.html https://www.kieranhealy.org/blog/archives/2003/08/27/conference-advice +Redirect Permanent /blog/archives/000515.html https://www.kieranhealy.org/blog/archives/2003/08/25/incarceration-and-the-labor-market +Redirect Permanent /blog/archives/000514.html https://www.kieranhealy.org/blog/archives/2003/08/24/take-the-money-open-the-box +Redirect Permanent /blog/archives/000513.html https://www.kieranhealy.org/blog/archives/2003/08/20/cosmic-inevitability +Redirect Permanent /blog/archives/000512.html https://www.kieranhealy.org/blog/archives/2003/08/17/conference-blues +Redirect Permanent /blog/archives/000511.html https://www.kieranhealy.org/blog/archives/2003/08/14/power-outages +Redirect Permanent /blog/archives/000510.html https://www.kieranhealy.org/blog/archives/2003/08/11/comings-and-goings +Redirect Permanent /blog/archives/000509.html https://www.kieranhealy.org/blog/archives/2003/08/11/bad-movie +Redirect Permanent /blog/archives/000508.html https://www.kieranhealy.org/blog/archives/2003/08/08/scenes-from-canberra-traffic +Redirect Permanent /blog/archives/000507.html https://www.kieranhealy.org/blog/archives/2003/08/08/deliberative-democracy-and-social-choice +Redirect Permanent /blog/archives/000506.html https://www.kieranhealy.org/blog/archives/2003/08/06/great-headlines-of-the-world +Redirect Permanent /blog/archives/000505.html https://www.kieranhealy.org/blog/archives/2003/08/03/harry-potter-and-the-implausible-plot-device +Redirect Permanent /blog/archives/000504.html https://www.kieranhealy.org/blog/archives/2003/08/01/wandering-the-halls +Redirect Permanent /blog/archives/000503.html https://www.kieranhealy.org/blog/archives/2003/07/29/frustration-is-not-a-strategy +Redirect Permanent /blog/archives/000502.html https://www.kieranhealy.org/blog/archives/2003/07/28/completely-mental +Redirect Permanent /blog/archives/000501.html https://www.kieranhealy.org/blog/archives/2003/07/26/reason-truth-and-history +Redirect Permanent /blog/archives/000500.html https://www.kieranhealy.org/blog/archives/2003/07/20/shakenbake-social-theory +Redirect Permanent /blog/archives/000499.html https://www.kieranhealy.org/blog/archives/2003/07/19/rhetorical-equivalence +Redirect Permanent /blog/archives/000498.html https://www.kieranhealy.org/blog/archives/2003/07/15/take-my-money-please +Redirect Permanent /blog/archives/000497.html https://www.kieranhealy.org/blog/archives/2003/07/15/intercontinental-ballistic-missive +Redirect Permanent /blog/archives/000496.html https://www.kieranhealy.org/blog/archives/2003/07/11/open-source-stuff +Redirect Permanent /blog/archives/000495.html https://www.kieranhealy.org/blog/archives/2003/07/10/moving-images-of-society +Redirect Permanent /blog/archives/000494.html https://www.kieranhealy.org/blog/archives/2003/07/08/crooked-timber +Redirect Permanent /blog/archives/000493.html https://www.kieranhealy.org/blog/archives/2003/07/07/tarred-with-the-same-brush +Redirect Permanent /blog/archives/000492.html https://www.kieranhealy.org/blog/archives/2003/07/07/nepotism +Redirect Permanent /blog/archives/000491.html https://www.kieranhealy.org/blog/archives/2003/07/06/open-source-again +Redirect Permanent /blog/archives/000490.html https://www.kieranhealy.org/blog/archives/2003/07/05/two-previews +Redirect Permanent /blog/archives/000489.html https://www.kieranhealy.org/blog/archives/2003/07/04/is-that-a-good-or-bad-sign +Redirect Permanent /blog/archives/000488.html https://www.kieranhealy.org/blog/archives/2003/07/04/100-confident +Redirect Permanent /blog/archives/000486.html https://www.kieranhealy.org/blog/archives/2003/07/02/the-cliche-kid-part-xi-redux +Redirect Permanent /blog/archives/000482.html https://www.kieranhealy.org/blog/archives/2003/07/01/british-sporting-heroes +Redirect Permanent /blog/archives/000481.html https://www.kieranhealy.org/blog/archives/2003/06/30/professionalization +Redirect Permanent /blog/archives/000480.html https://www.kieranhealy.org/blog/archives/2003/06/30/watch-closely +Redirect Permanent /blog/archives/000479.html https://www.kieranhealy.org/blog/archives/2003/06/29/katharine-hepburn +Redirect Permanent /blog/archives/000478.html https://www.kieranhealy.org/blog/archives/2003/06/28/writing-home +Redirect Permanent /blog/archives/000477.html https://www.kieranhealy.org/blog/archives/2003/06/26/classification-problems +Redirect Permanent /blog/archives/000473.html https://www.kieranhealy.org/blog/archives/2003/06/26/surgical-strike +Redirect Permanent /blog/archives/000472.html https://www.kieranhealy.org/blog/archives/2003/06/24/false-necessity +Redirect Permanent /blog/archives/000471.html https://www.kieranhealy.org/blog/archives/2003/06/24/twenty-questions +Redirect Permanent /blog/archives/000470.html https://www.kieranhealy.org/blog/archives/2003/06/23/read-any-good-books-lately +Redirect Permanent /blog/archives/000469.html https://www.kieranhealy.org/blog/archives/2003/06/22/wmd +Redirect Permanent /blog/archives/000468.html https://www.kieranhealy.org/blog/archives/2003/06/22/as-any-fule-kno +Redirect Permanent /blog/archives/000467.html https://www.kieranhealy.org/blog/archives/2003/06/22/the-aspen-fire +Redirect Permanent /blog/archives/000466.html https://www.kieranhealy.org/blog/archives/2003/06/19/open-source +Redirect Permanent /blog/archives/000464.html https://www.kieranhealy.org/blog/archives/2003/06/18/whats-happening-in-iran +Redirect Permanent /blog/archives/000463.html https://www.kieranhealy.org/blog/archives/2003/06/17/moral-clarity +Redirect Permanent /blog/archives/000462.html https://www.kieranhealy.org/blog/archives/2003/06/17/pomes-penyeach +Redirect Permanent /blog/archives/000461.html https://www.kieranhealy.org/blog/archives/2003/06/16/drones-club +Redirect Permanent /blog/archives/000460.html https://www.kieranhealy.org/blog/archives/2003/06/16/not-geniuses +Redirect Permanent /blog/archives/000459.html https://www.kieranhealy.org/blog/archives/2003/06/16/introibo-ad-altare-dei +Redirect Permanent /blog/archives/000457.html https://www.kieranhealy.org/blog/archives/2003/06/14/two-views-of-society +Redirect Permanent /blog/archives/000456.html https://www.kieranhealy.org/blog/archives/2003/06/14/gilding-the-lily +Redirect Permanent /blog/archives/000455.html https://www.kieranhealy.org/blog/archives/2003/06/13/you-might-be-a-liberal-if +Redirect Permanent /blog/archives/000454.html https://www.kieranhealy.org/blog/archives/2003/06/12/bernard-williams +Redirect Permanent /blog/archives/000453.html https://www.kieranhealy.org/blog/archives/2003/06/12/invisible-adjunct-returns +Redirect Permanent /blog/archives/000451.html https://www.kieranhealy.org/blog/archives/2003/06/11/markets-and-cultural-diversity +Redirect Permanent /blog/archives/000450.html https://www.kieranhealy.org/blog/archives/2003/06/08/light-in-the-sky +Redirect Permanent /blog/archives/000449.html https://www.kieranhealy.org/blog/archives/2003/06/07/money-making-opportunity +Redirect Permanent /blog/archives/000448.html https://www.kieranhealy.org/blog/archives/2003/06/04/one-short +Redirect Permanent /blog/archives/000447.html https://www.kieranhealy.org/blog/archives/2003/06/04/your-new-weekly-lineup +Redirect Permanent /blog/archives/000446.html https://www.kieranhealy.org/blog/archives/2003/06/04/elusive-gains +Redirect Permanent /blog/archives/000445.html https://www.kieranhealy.org/blog/archives/2003/06/03/there-are-some-things-money-cant-buy +Redirect Permanent /blog/archives/000444.html https://www.kieranhealy.org/blog/archives/2003/06/02/chat-up-lines +Redirect Permanent /blog/archives/000442.html https://www.kieranhealy.org/blog/archives/2003/06/01/blood-and-guts +Redirect Permanent /blog/archives/000441.html https://www.kieranhealy.org/blog/archives/2003/05/31/the-secret-of-my-success +Redirect Permanent /blog/archives/000439.html https://www.kieranhealy.org/blog/archives/2003/05/30/scholar-bloggers +Redirect Permanent /blog/archives/000438.html https://www.kieranhealy.org/blog/archives/2003/05/29/weak-ties-and-all-that +Redirect Permanent /blog/archives/000437.html https://www.kieranhealy.org/blog/archives/2003/05/29/a-nasty-powerbook-problem +Redirect Permanent /blog/archives/000436.html https://www.kieranhealy.org/blog/archives/2003/05/27/risks-rewards-and-the-wage-bargain +Redirect Permanent /blog/archives/000435.html https://www.kieranhealy.org/blog/archives/2003/05/26/second-lowest-form-of-wit +Redirect Permanent /blog/archives/000434.html https://www.kieranhealy.org/blog/archives/2003/05/25/matrix-algebra +Redirect Permanent /blog/archives/000433.html https://www.kieranhealy.org/blog/archives/2003/05/24/the-eurovision +Redirect Permanent /blog/archives/000432.html https://www.kieranhealy.org/blog/archives/2003/05/23/friday-lunchtime-ideas +Redirect Permanent /blog/archives/000431.html https://www.kieranhealy.org/blog/archives/2003/05/22/all-the-news-thats +Redirect Permanent /blog/archives/000430.html https://www.kieranhealy.org/blog/archives/2003/05/21/one-year-old +Redirect Permanent /blog/archives/000429.html https://www.kieranhealy.org/blog/archives/2003/05/21/chalk-and-talk +Redirect Permanent /blog/archives/000428.html https://www.kieranhealy.org/blog/archives/2003/05/20/max-weber-call-your-office +Redirect Permanent /blog/archives/000427.html https://www.kieranhealy.org/blog/archives/2003/05/20/by-any-other-name +Redirect Permanent /blog/archives/000426.html https://www.kieranhealy.org/blog/archives/2003/05/18/left-vs-right-godzilla-vs-mothra-etc +Redirect Permanent /blog/archives/000425.html https://www.kieranhealy.org/blog/archives/2003/05/17/get-out-of-california-kid +Redirect Permanent /blog/archives/000424.html https://www.kieranhealy.org/blog/archives/2003/05/16/on-the-road-again +Redirect Permanent /blog/archives/000423.html https://www.kieranhealy.org/blog/archives/2003/05/15/my-thoughts-exactly +Redirect Permanent /blog/archives/000422.html https://www.kieranhealy.org/blog/archives/2003/05/15/what-do-you-mean-i-failed +Redirect Permanent /blog/archives/000421.html https://www.kieranhealy.org/blog/archives/2003/05/14/out-of-the-blue +Redirect Permanent /blog/archives/000420.html https://www.kieranhealy.org/blog/archives/2003/05/13/choose-wisely +Redirect Permanent /blog/archives/000419.html https://www.kieranhealy.org/blog/archives/2003/05/12/robust-action +Redirect Permanent /blog/archives/000418.html https://www.kieranhealy.org/blog/archives/2003/05/12/builders-defenders-etc +Redirect Permanent /blog/archives/000417.html https://www.kieranhealy.org/blog/archives/2003/05/11/krispy-kraziness +Redirect Permanent /blog/archives/000416.html https://www.kieranhealy.org/blog/archives/2003/05/10/hard-red-throbbing-america +Redirect Permanent /blog/archives/000415.html https://www.kieranhealy.org/blog/archives/2003/05/10/gender-again +Redirect Permanent /blog/archives/000414.html https://www.kieranhealy.org/blog/archives/2003/05/09/id-like-to-thank-the-academy +Redirect Permanent /blog/archives/000411.html https://www.kieranhealy.org/blog/archives/2003/05/09/economics-philosophy-gender +Redirect Permanent /blog/archives/000410.html https://www.kieranhealy.org/blog/archives/2003/05/08/if-theres-a-hell-below-were-all-gonna-go +Redirect Permanent /blog/archives/000409.html https://www.kieranhealy.org/blog/archives/2003/05/08/copycats +Redirect Permanent /blog/archives/000408.html https://www.kieranhealy.org/blog/archives/2003/05/07/bang +Redirect Permanent /blog/archives/000407.html https://www.kieranhealy.org/blog/archives/2003/05/07/marx-vs-weber +Redirect Permanent /blog/archives/000406.html https://www.kieranhealy.org/blog/archives/2003/05/07/law-vs-economics +Redirect Permanent /blog/archives/000405.html https://www.kieranhealy.org/blog/archives/2003/05/07/alter-ego +Redirect Permanent /blog/archives/000404.html https://www.kieranhealy.org/blog/archives/2003/05/06/oh-not-again +Redirect Permanent /blog/archives/000403.html https://www.kieranhealy.org/blog/archives/2003/05/05/take-a-chance-on-me +Redirect Permanent /blog/archives/000402.html https://www.kieranhealy.org/blog/archives/2003/05/05/na-gallglaigh +Redirect Permanent /blog/archives/000401.html https://www.kieranhealy.org/blog/archives/2003/05/04/movers-and-shakers +Redirect Permanent /blog/archives/000400.html https://www.kieranhealy.org/blog/archives/2003/05/02/blogger-gets-taste-of-power +Redirect Permanent /blog/archives/000399.html https://www.kieranhealy.org/blog/archives/2003/05/02/blogger-gets-taste-of-power +Redirect Permanent /blog/archives/000398.html https://www.kieranhealy.org/blog/archives/2003/05/01/hats-off-to-d-squared +Redirect Permanent /blog/archives/000397.html https://www.kieranhealy.org/blog/archives/2003/05/01/muahahahaha +Redirect Permanent /blog/archives/000396.html https://www.kieranhealy.org/blog/archives/2003/05/01/paths-to-neoliberalism +Redirect Permanent /blog/archives/000394.html https://www.kieranhealy.org/blog/archives/2003/05/01/marxs-revenge +Redirect Permanent /blog/archives/000393.html https://www.kieranhealy.org/blog/archives/2003/05/01/bushs-foreign-policy-attacked +Redirect Permanent /blog/archives/000392.html https://www.kieranhealy.org/blog/archives/2003/04/29/brainstorm-in-a-teacup +Redirect Permanent /blog/archives/000391.html https://www.kieranhealy.org/blog/archives/2003/04/29/science-as-a-vocation +Redirect Permanent /blog/archives/000390.html https://www.kieranhealy.org/blog/archives/2003/04/28/bleah +Redirect Permanent /blog/archives/000389.html https://www.kieranhealy.org/blog/archives/2003/04/24/were-gonna-have-a-problem-here +Redirect Permanent /blog/archives/000388.html https://www.kieranhealy.org/blog/archives/2003/04/23/santorum +Redirect Permanent /blog/archives/000387.html https://www.kieranhealy.org/blog/archives/2003/04/23/newt-and-such +Redirect Permanent /blog/archives/000386.html https://www.kieranhealy.org/blog/archives/2003/04/23/variations-on-a-theme +Redirect Permanent /blog/archives/000385.html https://www.kieranhealy.org/blog/archives/2003/04/22/scholar-vs-blogger +Redirect Permanent /blog/archives/000384.html https://www.kieranhealy.org/blog/archives/2003/04/21/academedia +Redirect Permanent /blog/archives/000383.html https://www.kieranhealy.org/blog/archives/2003/04/21/nina-simone +Redirect Permanent /blog/archives/000382.html https://www.kieranhealy.org/blog/archives/2003/04/20/apt-quotations-ii +Redirect Permanent /blog/archives/000381.html https://www.kieranhealy.org/blog/archives/2003/04/20/apt-quotations +Redirect Permanent /blog/archives/000380.html https://www.kieranhealy.org/blog/archives/2003/04/19/calpundit +Redirect Permanent /blog/archives/000379.html https://www.kieranhealy.org/blog/archives/2003/04/19/freedom-markets +Redirect Permanent /blog/archives/000378.html https://www.kieranhealy.org/blog/archives/2003/04/19/gender-humbug-ii +Redirect Permanent /blog/archives/000377.html https://www.kieranhealy.org/blog/archives/2003/04/18/gender-humbug +Redirect Permanent /blog/archives/000376.html https://www.kieranhealy.org/blog/archives/2003/04/17/state-sponsored-terror +Redirect Permanent /blog/archives/000374.html https://www.kieranhealy.org/blog/archives/2003/04/16/new-gmos +Redirect Permanent /blog/archives/000375.html https://www.kieranhealy.org/blog/archives/2003/04/16/stares-at-tv-open-mouthed +Redirect Permanent /blog/archives/000373.html https://www.kieranhealy.org/blog/archives/2003/04/15/voting-systems +Redirect Permanent /blog/archives/000372.html https://www.kieranhealy.org/blog/archives/2003/04/15/a-useful-iq-test +Redirect Permanent /blog/archives/000371.html https://www.kieranhealy.org/blog/archives/2003/04/15/tax-day +Redirect Permanent /blog/archives/000370.html https://www.kieranhealy.org/blog/archives/2003/04/14/pascal-on-tyranny +Redirect Permanent /blog/archives/000369.html https://www.kieranhealy.org/blog/archives/2003/04/14/ignatz-throws-a-brick +Redirect Permanent /blog/archives/000368.html https://www.kieranhealy.org/blog/archives/2003/04/14/lott-again +Redirect Permanent /blog/archives/000367.html https://www.kieranhealy.org/blog/archives/2003/04/14/history-lesson +Redirect Permanent /blog/archives/000366.html https://www.kieranhealy.org/blog/archives/2003/04/14/paging-gender-scholars +Redirect Permanent /blog/archives/000365.html https://www.kieranhealy.org/blog/archives/2003/04/14/worth-a-thousand-words +Redirect Permanent /blog/archives/000364.html https://www.kieranhealy.org/blog/archives/2003/04/11/dirty-minds +Redirect Permanent /blog/archives/000363.html https://www.kieranhealy.org/blog/archives/2003/04/11/its-called-sampling-on-the-dependent-variable +Redirect Permanent /blog/archives/000362.html https://www.kieranhealy.org/blog/archives/2003/04/10/innately-flexible +Redirect Permanent /blog/archives/000361.html https://www.kieranhealy.org/blog/archives/2003/04/10/three-quarks +Redirect Permanent /blog/archives/000360.html https://www.kieranhealy.org/blog/archives/2003/04/10/drezner-aghast-movie-at-11 +Redirect Permanent /blog/archives/000359.html https://www.kieranhealy.org/blog/archives/2003/04/08/battleground-god +Redirect Permanent /blog/archives/000358.html https://www.kieranhealy.org/blog/archives/2003/04/08/could-have-been-worse +Redirect Permanent /blog/archives/000357.html https://www.kieranhealy.org/blog/archives/2003/04/08/an-irish-ritual +Redirect Permanent /blog/archives/000356.html https://www.kieranhealy.org/blog/archives/2003/04/07/insta-reversal +Redirect Permanent /blog/archives/000355.html https://www.kieranhealy.org/blog/archives/2003/04/07/how-significant-is-the-anti-war-movement +Redirect Permanent /blog/archives/000354.html https://www.kieranhealy.org/blog/archives/2003/04/07/pulitzers +Redirect Permanent /blog/archives/000353.html https://www.kieranhealy.org/blog/archives/2003/04/07/the-hand-of-god +Redirect Permanent /blog/archives/000352.html https://www.kieranhealy.org/blog/archives/2003/04/06/betrayed-by-consumerism +Redirect Permanent /blog/archives/000351.html https://www.kieranhealy.org/blog/archives/2003/04/06/what-a-shower-of +Redirect Permanent /blog/archives/000350.html https://www.kieranhealy.org/blog/archives/2003/04/01/traffic-report +Redirect Permanent /blog/archives/000349.html https://www.kieranhealy.org/blog/archives/2003/03/31/remind-me +Redirect Permanent /blog/archives/000347.html https://www.kieranhealy.org/blog/archives/2003/03/31/mixing-it-up +Redirect Permanent /blog/archives/000346.html https://www.kieranhealy.org/blog/archives/2003/03/30/english-as-she-is-wrote +Redirect Permanent /blog/archives/000345.html https://www.kieranhealy.org/blog/archives/2003/03/29/what-is-a-child +Redirect Permanent /blog/archives/000344.html https://www.kieranhealy.org/blog/archives/2003/03/29/clean-hands-dirty-hands +Redirect Permanent /blog/archives/000343.html https://www.kieranhealy.org/blog/archives/2003/03/28/aaron-brown-transcript-fun-ii +Redirect Permanent /blog/archives/000342.html https://www.kieranhealy.org/blog/archives/2003/03/28/a-argh +Redirect Permanent /blog/archives/000341.html https://www.kieranhealy.org/blog/archives/2003/03/27/things-i-cant-be-wrong-about +Redirect Permanent /blog/archives/000340.html https://www.kieranhealy.org/blog/archives/2003/03/26/the-persistence-of-the-old-regime +Redirect Permanent /blog/archives/000339.html https://www.kieranhealy.org/blog/archives/2003/03/26/new-in-print +Redirect Permanent /blog/archives/000338.html https://www.kieranhealy.org/blog/archives/2003/03/26/heavy-traffic-ii +Redirect Permanent /blog/archives/000336.html https://www.kieranhealy.org/blog/archives/2003/03/25/food-for-cynics +Redirect Permanent /blog/archives/000335.html https://www.kieranhealy.org/blog/archives/2003/03/25/between-facts-and-norms +Redirect Permanent /blog/archives/000334.html https://www.kieranhealy.org/blog/archives/2003/03/25/a-short-telegram +Redirect Permanent /blog/archives/000333.html https://www.kieranhealy.org/blog/archives/2003/03/25/heavy-traffic +Redirect Permanent /blog/archives/000332.html https://www.kieranhealy.org/blog/archives/2003/03/24/cnn-gets-a-dose-of-itself +Redirect Permanent /blog/archives/000331.html https://www.kieranhealy.org/blog/archives/2003/03/23/new-books-on-the-list +Redirect Permanent /blog/archives/000330.html https://www.kieranhealy.org/blog/archives/2003/03/23/editorial-judgments +Redirect Permanent /blog/archives/000329.html https://www.kieranhealy.org/blog/archives/2003/03/23/the-honeymoons-over +Redirect Permanent /blog/archives/000327.html https://www.kieranhealy.org/blog/archives/2003/03/20/san-francisco-protests +Redirect Permanent /blog/archives/000326.html https://www.kieranhealy.org/blog/archives/2003/03/20/self-defense +Redirect Permanent /blog/archives/000325.html https://www.kieranhealy.org/blog/archives/2003/03/19/war-begins +Redirect Permanent /blog/archives/000324.html https://www.kieranhealy.org/blog/archives/2003/03/19/live-from-san-francisco +Redirect Permanent /blog/archives/000323.html https://www.kieranhealy.org/blog/archives/2003/03/16/media-coverage +Redirect Permanent /blog/archives/000322.html https://www.kieranhealy.org/blog/archives/2003/03/13/teeny-tech-meets-tiny-norm +Redirect Permanent /blog/archives/000321.html https://www.kieranhealy.org/blog/archives/2003/03/12/blogging-sociologists +Redirect Permanent /blog/archives/000320.html https://www.kieranhealy.org/blog/archives/2003/03/11/strategic-analysis +Redirect Permanent /blog/archives/000319.html https://www.kieranhealy.org/blog/archives/2003/03/11/reason-as-religion +Redirect Permanent /blog/archives/000318.html https://www.kieranhealy.org/blog/archives/2003/03/11/freedom-kissin-in-the-usa +Redirect Permanent /blog/archives/000317.html https://www.kieranhealy.org/blog/archives/2003/03/11/age-related +Redirect Permanent /blog/archives/000316.html https://www.kieranhealy.org/blog/archives/2003/03/10/more-traitors +Redirect Permanent /blog/archives/000315.html https://www.kieranhealy.org/blog/archives/2003/03/10/consultant-for-evil +Redirect Permanent /blog/archives/000314.html https://www.kieranhealy.org/blog/archives/2003/03/09/target-acquired +Redirect Permanent /blog/archives/000313.html https://www.kieranhealy.org/blog/archives/2003/03/09/busy +Redirect Permanent /blog/archives/000312.html https://www.kieranhealy.org/blog/archives/2003/03/06/the-press-conference +Redirect Permanent /blog/archives/000311.html https://www.kieranhealy.org/blog/archives/2003/03/06/on-pious-hypocrisy +Redirect Permanent /blog/archives/000310.html https://www.kieranhealy.org/blog/archives/2003/03/06/chaos-at-home-and-abroad +Redirect Permanent /blog/archives/000309.html https://www.kieranhealy.org/blog/archives/2003/03/06/a-few-quick-ones +Redirect Permanent /blog/archives/000308.html https://www.kieranhealy.org/blog/archives/2003/03/04/rapid-development +Redirect Permanent /blog/archives/000307.html https://www.kieranhealy.org/blog/archives/2003/03/03/dept-of-dangling-modifiers +Redirect Permanent /blog/archives/000306.html https://www.kieranhealy.org/blog/archives/2003/03/02/i-am-of-ireland +Redirect Permanent /blog/archives/000305.html https://www.kieranhealy.org/blog/archives/2003/03/01/liberal-hawk-nightmares +Redirect Permanent /blog/archives/000304.html https://www.kieranhealy.org/blog/archives/2003/03/01/strategy-and-realism +Redirect Permanent /blog/archives/000303.html https://www.kieranhealy.org/blog/archives/2003/02/28/the-blimp-menace +Redirect Permanent /blog/archives/000302.html https://www.kieranhealy.org/blog/archives/2003/02/28/your-cheatin-hormone +Redirect Permanent /blog/archives/000301.html https://www.kieranhealy.org/blog/archives/2003/02/27/this-is-your-brain-on-drugs +Redirect Permanent /blog/archives/000300.html https://www.kieranhealy.org/blog/archives/2003/02/25/sauce-for-the-kettle +Redirect Permanent /blog/archives/000298.html https://www.kieranhealy.org/blog/archives/2003/02/25/aint-ism +Redirect Permanent /blog/archives/000297.html https://www.kieranhealy.org/blog/archives/2003/02/24/visions-and-revisions-again +Redirect Permanent /blog/archives/000296.html https://www.kieranhealy.org/blog/archives/2003/02/23/robert-k-merton-1910-2003 +Redirect Permanent /blog/archives/000295.html https://www.kieranhealy.org/blog/archives/2003/02/23/spiffy-tech-ii +Redirect Permanent /blog/archives/000294.html https://www.kieranhealy.org/blog/archives/2003/02/22/spiffy-tech +Redirect Permanent /blog/archives/000292.html https://www.kieranhealy.org/blog/archives/2003/02/21/thats-just-ancient-history +Redirect Permanent /blog/archives/000291.html https://www.kieranhealy.org/blog/archives/2003/02/21/smart-bomb +Redirect Permanent /blog/archives/000290.html https://www.kieranhealy.org/blog/archives/2003/02/20/public-service-announcement +Redirect Permanent /blog/archives/000289.html https://www.kieranhealy.org/blog/archives/2003/02/19/close-reading +Redirect Permanent /blog/archives/000288.html https://www.kieranhealy.org/blog/archives/2003/02/19/oh-not-another-one +Redirect Permanent /blog/archives/000287.html https://www.kieranhealy.org/blog/archives/2003/02/19/bite-size-items +Redirect Permanent /blog/archives/000286.html https://www.kieranhealy.org/blog/archives/2003/02/17/metaphysical-fame +Redirect Permanent /blog/archives/000285.html https://www.kieranhealy.org/blog/archives/2003/02/17/speak-memory +Redirect Permanent /blog/archives/000284.html https://www.kieranhealy.org/blog/archives/2003/02/16/biking +Redirect Permanent /blog/archives/000283.html https://www.kieranhealy.org/blog/archives/2003/02/16/dealing-with-philosophers +Redirect Permanent /blog/archives/000282.html https://www.kieranhealy.org/blog/archives/2003/02/15/collective-action +Redirect Permanent /blog/archives/000281.html https://www.kieranhealy.org/blog/archives/2003/02/14/the-blogger-to-his-valentine +Redirect Permanent /blog/archives/000280.html https://www.kieranhealy.org/blog/archives/2003/02/13/war-talk +Redirect Permanent /blog/archives/000279.html https://www.kieranhealy.org/blog/archives/2003/02/13/in-other-news-ii +Redirect Permanent /blog/archives/000278.html https://www.kieranhealy.org/blog/archives/2003/02/13/how-you-play-the-game +Redirect Permanent /blog/archives/000277.html https://www.kieranhealy.org/blog/archives/2003/02/12/in-other-news +Redirect Permanent /blog/archives/000276.html https://www.kieranhealy.org/blog/archives/2003/02/12/problems +Redirect Permanent /blog/archives/000271.html https://www.kieranhealy.org/blog/archives/2003/02/12/taking-it-for-granted +Redirect Permanent /blog/archives/000275.html https://www.kieranhealy.org/blog/archives/2003/02/12/sharing-birthdays +Redirect Permanent /blog/archives/000274.html https://www.kieranhealy.org/blog/archives/2003/02/12/everybodys-moving +Redirect Permanent /blog/archives/000273.html https://www.kieranhealy.org/blog/archives/2003/02/12/francophobia +Redirect Permanent /blog/archives/000272.html https://www.kieranhealy.org/blog/archives/2003/02/11/the-hermeneutics-of-terror +Redirect Permanent /blog/archives/000270.html https://www.kieranhealy.org/blog/archives/2003/02/10/in-with-a-bullet +Redirect Permanent /blog/archives/000269.html https://www.kieranhealy.org/blog/archives/2003/02/09/politics-as-a-vocation +Redirect Permanent /blog/archives/000268.html https://www.kieranhealy.org/blog/archives/2003/02/08/first-new-post +Redirect Permanent /blog/archives/000267.html https://www.kieranhealy.org/blog/archives/2003/02/07/question +Redirect Permanent /blog/archives/000266.html https://www.kieranhealy.org/blog/archives/2003/02/07/counter-intelligence +Redirect Permanent /blog/archives/000265.html https://www.kieranhealy.org/blog/archives/2003/02/07/democracy-in-action +Redirect Permanent /blog/archives/000264.html https://www.kieranhealy.org/blog/archives/2003/02/06/objections-to-the-labor-theory-of-value-432 +Redirect Permanent /blog/archives/000263.html https://www.kieranhealy.org/blog/archives/2003/02/06/the-dead-pool +Redirect Permanent /blog/archives/000262.html https://www.kieranhealy.org/blog/archives/2003/02/05/single-malt-bile +Redirect Permanent /blog/archives/000261.html https://www.kieranhealy.org/blog/archives/2003/02/05/audammit +Redirect Permanent /blog/archives/000260.html https://www.kieranhealy.org/blog/archives/2003/02/03/rorschach-test +Redirect Permanent /blog/archives/000259.html https://www.kieranhealy.org/blog/archives/2003/02/01/big-brother-is-watching-you +Redirect Permanent /blog/archives/000258.html https://www.kieranhealy.org/blog/archives/2003/02/01/the-high-untrespassed-sanctity-of-space +Redirect Permanent /blog/archives/000257.html https://www.kieranhealy.org/blog/archives/2003/02/01/whatever +Redirect Permanent /blog/archives/000256.html https://www.kieranhealy.org/blog/archives/2003/02/01/columbia +Redirect Permanent /blog/archives/000255.html https://www.kieranhealy.org/blog/archives/2003/02/01/lott-again +Redirect Permanent /blog/archives/000254.html https://www.kieranhealy.org/blog/archives/2003/01/31/and-so-to-bed +Redirect Permanent /blog/archives/000253.html https://www.kieranhealy.org/blog/archives/2003/01/30/costs-and-claims +Redirect Permanent /blog/archives/000252.html https://www.kieranhealy.org/blog/archives/2003/01/29/reverse-tinkerbell-example +Redirect Permanent /blog/archives/000251.html https://www.kieranhealy.org/blog/archives/2003/01/29/the-ecology-of-open-source-software +Redirect Permanent /blog/archives/000250.html https://www.kieranhealy.org/blog/archives/2003/01/29/blackwhite-wealth-gap +Redirect Permanent /blog/archives/000249.html https://www.kieranhealy.org/blog/archives/2003/01/29/in-small-things-and-large +Redirect Permanent /blog/archives/000248.html https://www.kieranhealy.org/blog/archives/2003/01/27/bark-bark +Redirect Permanent /blog/archives/000247.html https://www.kieranhealy.org/blog/archives/2003/01/26/et-in-canadia-alter-ego +Redirect Permanent /blog/archives/000246.html https://www.kieranhealy.org/blog/archives/2003/01/25/inside-the-firm +Redirect Permanent /blog/archives/000245.html https://www.kieranhealy.org/blog/archives/2003/01/25/the-sql-worm +Redirect Permanent /blog/archives/000244.html https://www.kieranhealy.org/blog/archives/2003/01/24/more-on-dgus +Redirect Permanent /blog/archives/000243.html https://www.kieranhealy.org/blog/archives/2003/01/23/when-i-was-a-young-man-i-carried-my-pack +Redirect Permanent /blog/archives/000242.html https://www.kieranhealy.org/blog/archives/2003/01/23/a-lott-of-old-rosh +Redirect Permanent /blog/archives/000241.html https://www.kieranhealy.org/blog/archives/2003/01/23/mind-the-gap +Redirect Permanent /blog/archives/000240.html https://www.kieranhealy.org/blog/archives/2003/01/22/that-blissful-hour +Redirect Permanent /blog/archives/000239.html https://www.kieranhealy.org/blog/archives/2003/01/22/evil-scientist-dreams +Redirect Permanent /blog/archives/000238.html https://www.kieranhealy.org/blog/archives/2003/01/21/gawkers-dirty-secret +Redirect Permanent /blog/archives/000237.html https://www.kieranhealy.org/blog/archives/2003/01/20/talking-points +Redirect Permanent /blog/archives/000236.html https://www.kieranhealy.org/blog/archives/2003/01/20/the-length-of-two-lives +Redirect Permanent /blog/archives/000234.html https://www.kieranhealy.org/blog/archives/2003/01/19/funny-ha-ha +Redirect Permanent /blog/archives/000233.html https://www.kieranhealy.org/blog/archives/2003/01/18/chancellor-clinton +Redirect Permanent /blog/archives/000232.html https://www.kieranhealy.org/blog/archives/2003/01/18/anti-war-protests +Redirect Permanent /blog/archives/000231.html https://www.kieranhealy.org/blog/archives/2003/01/16/mr-happy +Redirect Permanent /blog/archives/000230.html https://www.kieranhealy.org/blog/archives/2003/01/16/sacked +Redirect Permanent /blog/archives/000229.html https://www.kieranhealy.org/blog/archives/2003/01/15/popper +Redirect Permanent /blog/archives/000228.html https://www.kieranhealy.org/blog/archives/2003/01/15/eldred-vs-ashcroft +Redirect Permanent /blog/archives/000227.html https://www.kieranhealy.org/blog/archives/2003/01/15/two-religious-items +Redirect Permanent /blog/archives/000226.html https://www.kieranhealy.org/blog/archives/2003/01/13/how-peculiar +Redirect Permanent /blog/archives/000225.html https://www.kieranhealy.org/blog/archives/2003/01/13/blood-suckers +Redirect Permanent /blog/archives/000224.html https://www.kieranhealy.org/blog/archives/2003/01/10/ladybird-books +Redirect Permanent /blog/archives/000223.html https://www.kieranhealy.org/blog/archives/2003/01/09/preemptive-policing +Redirect Permanent /blog/archives/000222.html https://www.kieranhealy.org/blog/archives/2003/01/08/trent-lotte +Redirect Permanent /blog/archives/000221.html https://www.kieranhealy.org/blog/archives/2003/01/08/race-and-reality +Redirect Permanent /blog/archives/000220.html https://www.kieranhealy.org/blog/archives/2003/01/08/marketing-the-tax-cut +Redirect Permanent /blog/archives/000219.html https://www.kieranhealy.org/blog/archives/2003/01/07/anglosphere-iii-and-final +Redirect Permanent /blog/archives/000218.html https://www.kieranhealy.org/blog/archives/2003/01/06/character-assassin-for-hire +Redirect Permanent /blog/archives/000217.html https://www.kieranhealy.org/blog/archives/2003/01/06/anglosphere-ii +Redirect Permanent /blog/archives/000216.html https://www.kieranhealy.org/blog/archives/2003/01/06/anglosphere +Redirect Permanent /blog/archives/000215.html https://www.kieranhealy.org/blog/archives/2003/01/04/pop-quiz-answers +Redirect Permanent /blog/archives/000214.html https://www.kieranhealy.org/blog/archives/2003/01/04/empty-questions +Redirect Permanent /blog/archives/000213.html https://www.kieranhealy.org/blog/archives/2003/01/03/sociological-theory +Redirect Permanent /blog/archives/000212.html https://www.kieranhealy.org/blog/archives/2003/01/03/tandem-novum-quidem-et-inauditum-consilium-capit +Redirect Permanent /blog/archives/000211.html https://www.kieranhealy.org/blog/archives/2003/01/02/political-state-report +Redirect Permanent /blog/archives/000210.html https://www.kieranhealy.org/blog/archives/2003/01/01/another-one +Redirect Permanent /blog/archives/000209.html https://www.kieranhealy.org/blog/archives/2003/01/01/the-best-of-me +Redirect Permanent /blog/archives/000208.html https://www.kieranhealy.org/blog/archives/2003/01/01/digby-goes-up +Redirect Permanent /blog/archives/000207.html https://www.kieranhealy.org/blog/archives/2002/12/28/internet-diffusion +Redirect Permanent /blog/archives/000206.html https://www.kieranhealy.org/blog/archives/2002/12/28/great-headline +Redirect Permanent /blog/archives/000205.html https://www.kieranhealy.org/blog/archives/2002/12/27/precautionary-principles-and-smallpox +Redirect Permanent /blog/archives/000204.html https://www.kieranhealy.org/blog/archives/2002/12/27/d-squared-on-race-in-america +Redirect Permanent /blog/archives/000203.html https://www.kieranhealy.org/blog/archives/2002/12/27/quintessence-of-trivia +Redirect Permanent /blog/archives/000202.html https://www.kieranhealy.org/blog/archives/2002/12/26/smallpox-uncertainties +Redirect Permanent /blog/archives/000201.html https://www.kieranhealy.org/blog/archives/2002/12/22/the-golden-apples-of-the-sun +Redirect Permanent /blog/archives/000200.html https://www.kieranhealy.org/blog/archives/2002/12/19/ringoism +Redirect Permanent /blog/archives/000199.html https://www.kieranhealy.org/blog/archives/2002/12/18/to-boldly-go +Redirect Permanent /blog/archives/000197.html https://www.kieranhealy.org/blog/archives/2002/12/18/qualia +Redirect Permanent /blog/archives/000196.html https://www.kieranhealy.org/blog/archives/2002/12/18/koufax +Redirect Permanent /blog/archives/000195.html https://www.kieranhealy.org/blog/archives/2002/12/17/grammar-round-up +Redirect Permanent /blog/archives/000194.html https://www.kieranhealy.org/blog/archives/2002/12/17/open-wide +Redirect Permanent /blog/archives/000193.html https://www.kieranhealy.org/blog/archives/2002/12/17/cuts-both-ways +Redirect Permanent /blog/archives/000192.html https://www.kieranhealy.org/blog/archives/2002/12/15/the-right-remark +Redirect Permanent /blog/archives/000191.html https://www.kieranhealy.org/blog/archives/2002/12/14/sign-me-up +Redirect Permanent /blog/archives/000190.html https://www.kieranhealy.org/blog/archives/2002/12/14/bach +Redirect Permanent /blog/archives/000189.html https://www.kieranhealy.org/blog/archives/2002/12/14/philosophy-discovers-society +Redirect Permanent /blog/archives/000188.html https://www.kieranhealy.org/blog/archives/2002/12/13/lynching +Redirect Permanent /blog/archives/000187.html https://www.kieranhealy.org/blog/archives/2002/12/13/anurlan-long-aprovincebe +Redirect Permanent /blog/archives/000186.html https://www.kieranhealy.org/blog/archives/2002/12/12/names +Redirect Permanent /blog/archives/000185.html https://www.kieranhealy.org/blog/archives/2002/12/12/auditing-employer-discrimination +Redirect Permanent /blog/archives/000184.html https://www.kieranhealy.org/blog/archives/2002/12/12/ah-beaver-lodge +Redirect Permanent /blog/archives/000183.html https://www.kieranhealy.org/blog/archives/2002/12/12/argumentum-ad +Redirect Permanent /blog/archives/000182.html https://www.kieranhealy.org/blog/archives/2002/12/12/plus-ca-change +Redirect Permanent /blog/archives/000181.html https://www.kieranhealy.org/blog/archives/2002/12/11/ok-i-laughed +Redirect Permanent /blog/archives/000180.html https://www.kieranhealy.org/blog/archives/2002/12/11/opposites-intact +Redirect Permanent /blog/archives/000179.html https://www.kieranhealy.org/blog/archives/2002/12/11/sociological +Redirect Permanent /blog/archives/000178.html https://www.kieranhealy.org/blog/archives/2002/12/10/unto-this-last +Redirect Permanent /blog/archives/000177.html https://www.kieranhealy.org/blog/archives/2002/12/09/do-you-reject-the-devil-and-all-his-works +Redirect Permanent /blog/archives/000176.html https://www.kieranhealy.org/blog/archives/2002/12/09/laurie-in-the-blogosphere +Redirect Permanent /blog/archives/000175.html https://www.kieranhealy.org/blog/archives/2002/12/07/market-discipline-and-organizational-responsibility +Redirect Permanent /blog/archives/000174.html https://www.kieranhealy.org/blog/archives/2002/12/04/diiulio-opens-lid-gets-himself-canned +Redirect Permanent /blog/archives/000173.html https://www.kieranhealy.org/blog/archives/2002/12/04/ka-chunk +Redirect Permanent /blog/archives/000172.html https://www.kieranhealy.org/blog/archives/2002/12/04/harry-potter-v +Redirect Permanent /blog/archives/000171.html https://www.kieranhealy.org/blog/archives/2002/12/03/sociology-sneaks-in +Redirect Permanent /blog/archives/000170.html https://www.kieranhealy.org/blog/archives/2002/12/01/redeye-madness +Redirect Permanent /blog/archives/000169.html https://www.kieranhealy.org/blog/archives/2002/11/29/i-switched +Redirect Permanent /blog/archives/000168.html https://www.kieranhealy.org/blog/archives/2002/11/27/scribble-scribble-scribble +Redirect Permanent /blog/archives/000167.html https://www.kieranhealy.org/blog/archives/2002/11/27/keats-and-chapman +Redirect Permanent /blog/archives/000166.html https://www.kieranhealy.org/blog/archives/2002/11/26/harry-potter-pt-iii +Redirect Permanent /blog/archives/000165.html https://www.kieranhealy.org/blog/archives/2002/11/26/the-network-of-ideas +Redirect Permanent /blog/archives/000164.html https://www.kieranhealy.org/blog/archives/2002/11/25/creative-excuse +Redirect Permanent /blog/archives/000163.html https://www.kieranhealy.org/blog/archives/2002/11/25/oz-blog +Redirect Permanent /blog/archives/000162.html https://www.kieranhealy.org/blog/archives/2002/11/24/tinker-tailor +Redirect Permanent /blog/archives/000161.html https://www.kieranhealy.org/blog/archives/2002/11/24/moonlighting +Redirect Permanent /blog/archives/000160.html https://www.kieranhealy.org/blog/archives/2002/11/22/when-he-was-funny +Redirect Permanent /blog/archives/000159.html https://www.kieranhealy.org/blog/archives/2002/11/20/yerp +Redirect Permanent /blog/archives/000158.html https://www.kieranhealy.org/blog/archives/2002/11/20/harry-potter-again +Redirect Permanent /blog/archives/000157.html https://www.kieranhealy.org/blog/archives/2002/11/18/varia +Redirect Permanent /blog/archives/000156.html https://www.kieranhealy.org/blog/archives/2002/11/15/the-majesty-of-the-law +Redirect Permanent /blog/archives/000155.html https://www.kieranhealy.org/blog/archives/2002/11/14/ta-rax-rum +Redirect Permanent /blog/archives/000154.html https://www.kieranhealy.org/blog/archives/2002/11/14/political-sociology +Redirect Permanent /blog/archives/000153.html https://www.kieranhealy.org/blog/archives/2002/11/12/never-mind-the-volokhs +Redirect Permanent /blog/archives/000152.html https://www.kieranhealy.org/blog/archives/2002/11/12/cash-for-kidneys +Redirect Permanent /blog/archives/000151.html https://www.kieranhealy.org/blog/archives/2002/11/12/attack-of-the-clones-indeed +Redirect Permanent /blog/archives/000150.html https://www.kieranhealy.org/blog/archives/2002/11/11/machine-dreams-again +Redirect Permanent /blog/archives/000149.html https://www.kieranhealy.org/blog/archives/2002/11/11/the-chickenhawk-that-didnt-bark +Redirect Permanent /blog/archives/000148.html https://www.kieranhealy.org/blog/archives/2002/11/11/political-philosophy +Redirect Permanent /blog/archives/000147.html https://www.kieranhealy.org/blog/archives/2002/11/09/moral-luck +Redirect Permanent /blog/archives/000146.html https://www.kieranhealy.org/blog/archives/2002/11/08/and-on-balance +Redirect Permanent /blog/archives/000145.html https://www.kieranhealy.org/blog/archives/2002/11/06/busy-busy +Redirect Permanent /blog/archives/000144.html https://www.kieranhealy.org/blog/archives/2002/11/01/if-i-were-you +Redirect Permanent /blog/archives/000143.html https://www.kieranhealy.org/blog/archives/2002/11/01/what-is-the-stars +Redirect Permanent /blog/archives/000142.html https://www.kieranhealy.org/blog/archives/2002/10/31/cooling-the-mark-out +Redirect Permanent /blog/archives/000141.html https://www.kieranhealy.org/blog/archives/2002/10/31/strawman-chickenhawk +Redirect Permanent /blog/archives/000140.html https://www.kieranhealy.org/blog/archives/2002/10/30/stand-down-vs-gear-up +Redirect Permanent /blog/archives/000139.html https://www.kieranhealy.org/blog/archives/2002/10/29/philosophical-gourmet +Redirect Permanent /blog/archives/000138.html https://www.kieranhealy.org/blog/archives/2002/10/28/playing-with-the-wrong-team +Redirect Permanent /blog/archives/000137.html https://www.kieranhealy.org/blog/archives/2002/10/28/well-heres-my-answer +Redirect Permanent /blog/archives/000136.html https://www.kieranhealy.org/blog/archives/2002/10/28/shooting-at-the-university-of-arizona +Redirect Permanent /blog/archives/000135.html https://www.kieranhealy.org/blog/archives/2002/10/27/unanticipated-solution +Redirect Permanent /blog/archives/000134.html https://www.kieranhealy.org/blog/archives/2002/10/27/causal-and-moral-responsibility +Redirect Permanent /blog/archives/000133.html https://www.kieranhealy.org/blog/archives/2002/10/25/two-posters +Redirect Permanent /blog/archives/000132.html https://www.kieranhealy.org/blog/archives/2002/10/24/the-blame-of-those-ye-better +Redirect Permanent /blog/archives/000131.html https://www.kieranhealy.org/blog/archives/2002/10/23/theres-antimony-arsenic-aluminum +Redirect Permanent /blog/archives/000130.html https://www.kieranhealy.org/blog/archives/2002/10/23/all-sniper-all-the-time +Redirect Permanent /blog/archives/000129.html https://www.kieranhealy.org/blog/archives/2002/10/23/fingerprinting +Redirect Permanent /blog/archives/000128.html https://www.kieranhealy.org/blog/archives/2002/10/19/error-dinosaur-not-found +Redirect Permanent /blog/archives/000127.html https://www.kieranhealy.org/blog/archives/2002/10/19/i-like-your-manifesto-put-it-to-the-testo +Redirect Permanent /blog/archives/000126.html https://www.kieranhealy.org/blog/archives/2002/10/19/radical-goals +Redirect Permanent /blog/archives/000125.html https://www.kieranhealy.org/blog/archives/2002/10/18/swaying-the-jury +Redirect Permanent /blog/archives/000124.html https://www.kieranhealy.org/blog/archives/2002/10/17/khs-weblog-reveals-secret-wrd-program +Redirect Permanent /blog/archives/000123.html https://www.kieranhealy.org/blog/archives/2002/10/16/war-games +Redirect Permanent /blog/archives/000122.html https://www.kieranhealy.org/blog/archives/2002/10/16/david-lewis +Redirect Permanent /blog/archives/000121.html https://www.kieranhealy.org/blog/archives/2002/10/15/no-more-like-this-please +Redirect Permanent /blog/archives/000120.html https://www.kieranhealy.org/blog/archives/2002/10/14/what-would-happen-if-everyone-sung-that +Redirect Permanent /blog/archives/000119.html https://www.kieranhealy.org/blog/archives/2002/10/11/oh-dear +Redirect Permanent /blog/archives/000118.html https://www.kieranhealy.org/blog/archives/2002/10/10/economics-nobel-part-ii +Redirect Permanent /blog/archives/000117.html https://www.kieranhealy.org/blog/archives/2002/10/09/kahnemans-nobel +Redirect Permanent /blog/archives/000116.html https://www.kieranhealy.org/blog/archives/2002/10/09/fsk-fsk-fsk +Redirect Permanent /blog/archives/000115.html https://www.kieranhealy.org/blog/archives/2002/10/08/more-on-the-north +Redirect Permanent /blog/archives/000114.html https://www.kieranhealy.org/blog/archives/2002/10/08/robot-wars +Redirect Permanent /blog/archives/000113.html https://www.kieranhealy.org/blog/archives/2002/10/07/easy-targets +Redirect Permanent /blog/archives/000112.html https://www.kieranhealy.org/blog/archives/2002/10/07/dept-of-soup-and-forks +Redirect Permanent /blog/archives/000111.html https://www.kieranhealy.org/blog/archives/2002/10/06/news-from-the-domestic-front +Redirect Permanent /blog/archives/000110.html https://www.kieranhealy.org/blog/archives/2002/10/06/pining-for-jersey +Redirect Permanent /blog/archives/000109.html https://www.kieranhealy.org/blog/archives/2002/10/04/a-great-piece-of-free-software +Redirect Permanent /blog/archives/000108.html https://www.kieranhealy.org/blog/archives/2002/10/02/this-is-so-cool +Redirect Permanent /blog/archives/000107.html https://www.kieranhealy.org/blog/archives/2002/10/01/vive-le-diff-no-wait +Redirect Permanent /blog/archives/000106.html https://www.kieranhealy.org/blog/archives/2002/10/01/holes +Redirect Permanent /blog/archives/000105.html https://www.kieranhealy.org/blog/archives/2002/10/01/round-up-the-usual-suspects +Redirect Permanent /blog/archives/000104.html https://www.kieranhealy.org/blog/archives/2002/09/30/jaw-jaw-war-war +Redirect Permanent /blog/archives/000103.html https://www.kieranhealy.org/blog/archives/2002/09/27/insert-monkey-joke-here +Redirect Permanent /blog/archives/000102.html https://www.kieranhealy.org/blog/archives/2002/09/26/beyond-the-pale +Redirect Permanent /blog/archives/000101.html https://www.kieranhealy.org/blog/archives/2002/09/25/font-junkie +Redirect Permanent /blog/archives/000100.html https://www.kieranhealy.org/blog/archives/2002/09/23/found-the-damn-thing +Redirect Permanent /blog/archives/000099.html https://www.kieranhealy.org/blog/archives/2002/09/23/inhale-exhale +Redirect Permanent /blog/archives/000098.html https://www.kieranhealy.org/blog/archives/2002/09/22/innovation-machine +Redirect Permanent /blog/archives/000097.html https://www.kieranhealy.org/blog/archives/2002/09/20/tweaking-william-morris +Redirect Permanent /blog/archives/000096.html https://www.kieranhealy.org/blog/archives/2002/09/19/crime-and-punishment-part-3 +Redirect Permanent /blog/archives/000095.html https://www.kieranhealy.org/blog/archives/2002/09/18/free-software-socialism-death +Redirect Permanent /blog/archives/000094.html https://www.kieranhealy.org/blog/archives/2002/09/17/naaas-redux +Redirect Permanent /blog/archives/000093.html https://www.kieranhealy.org/blog/archives/2002/09/16/incarceration-and-inequality-again +Redirect Permanent /blog/archives/000092.html https://www.kieranhealy.org/blog/archives/2002/09/15/marx-and-human-nature +Redirect Permanent /blog/archives/000091.html https://www.kieranhealy.org/blog/archives/2002/09/13/another-essay-service +Redirect Permanent /blog/archives/000090.html https://www.kieranhealy.org/blog/archives/2002/09/12/another-bookmark +Redirect Permanent /blog/archives/000089.html https://www.kieranhealy.org/blog/archives/2002/09/12/ideology-and-policy-in-one-easy-lesson +Redirect Permanent /blog/archives/000088.html https://www.kieranhealy.org/blog/archives/2002/09/11/mast-hemmd-manhattan +Redirect Permanent /blog/archives/000087.html https://www.kieranhealy.org/blog/archives/2002/09/10/inequality-and-incarceration +Redirect Permanent /blog/archives/000086.html https://www.kieranhealy.org/blog/archives/2002/09/10/the-language-of-influence +Redirect Permanent /blog/archives/000085.html https://www.kieranhealy.org/blog/archives/2002/09/09/sweden-and-mississippi +Redirect Permanent /blog/archives/000084.html https://www.kieranhealy.org/blog/archives/2002/09/08/look-a-little-closer-at-the-data +Redirect Permanent /blog/archives/000083.html https://www.kieranhealy.org/blog/archives/2002/09/07/the-ideal-transport-situation +Redirect Permanent /blog/archives/000082.html https://www.kieranhealy.org/blog/archives/2002/09/05/adobe-on-the-sharp-end-of-the-dmca +Redirect Permanent /blog/archives/000081.html https://www.kieranhealy.org/blog/archives/2002/09/04/helpful-and-unhelpful-solutions-to-workfamily-issues +Redirect Permanent /blog/archives/000080.html https://www.kieranhealy.org/blog/archives/2002/09/03/doorknob-rattling +Redirect Permanent /blog/archives/000079.html https://www.kieranhealy.org/blog/archives/2002/09/03/trackback-feedforward +Redirect Permanent /blog/archives/000078.html https://www.kieranhealy.org/blog/archives/2002/09/02/work-health-and-social-structure +Redirect Permanent /blog/archives/000077.html https://www.kieranhealy.org/blog/archives/2002/08/31/mapblasts-linedrive +Redirect Permanent /blog/archives/000076.html https://www.kieranhealy.org/blog/archives/2002/08/30/fisa-and-john-ashcroft +Redirect Permanent /blog/archives/000075.html https://www.kieranhealy.org/blog/archives/2002/08/29/hidden-in-plain-sight +Redirect Permanent /blog/archives/000074.html https://www.kieranhealy.org/blog/archives/2002/08/27/fall-brown-bag-schedule +Redirect Permanent /blog/archives/000073.html https://www.kieranhealy.org/blog/archives/2002/08/27/comparison-cases-for-iraq-the-us-and-terrorism +Redirect Permanent /blog/archives/000072.html https://www.kieranhealy.org/blog/archives/2002/08/25/a-bird-in-the-hand +Redirect Permanent /blog/archives/000071.html https://www.kieranhealy.org/blog/archives/2002/08/24/read-and-learn +Redirect Permanent /blog/archives/000070.html https://www.kieranhealy.org/blog/archives/2002/08/24/monster-truck +Redirect Permanent /blog/archives/000069.html https://www.kieranhealy.org/blog/archives/2002/08/23/how-to-run-an-auction-in-1660 +Redirect Permanent /blog/archives/000068.html https://www.kieranhealy.org/blog/archives/2002/08/22/just-plain-folks-at-waco +Redirect Permanent /blog/archives/000067.html https://www.kieranhealy.org/blog/archives/2002/08/21/economic-sociology-syllabus +Redirect Permanent /blog/archives/000066.html https://www.kieranhealy.org/blog/archives/2002/08/21/post-asa-reading-list +Redirect Permanent /blog/archives/000065.html https://www.kieranhealy.org/blog/archives/2002/08/20/wilco-and-coase +Redirect Permanent /blog/archives/000064.html https://www.kieranhealy.org/blog/archives/2002/08/19/firms-markets-and-information +Redirect Permanent /blog/archives/000063.html https://www.kieranhealy.org/blog/archives/2002/08/19/internet-signal-to-noise +Redirect Permanent /blog/archives/000062.html https://www.kieranhealy.org/blog/archives/2002/08/16/money-and-happiness +Redirect Permanent /blog/archives/000058.html https://www.kieranhealy.org/blog/archives/2002/08/14/data-and-its-perverse-pleasures +Redirect Permanent /blog/archives/000057.html https://www.kieranhealy.org/blog/archives/2002/08/13/purchasing-the-right-personality-for-college +Redirect Permanent /blog/archives/000056.html https://www.kieranhealy.org/blog/archives/2002/08/13/mackenzie-reads-mirowski +Redirect Permanent /blog/archives/000055.html https://www.kieranhealy.org/blog/archives/2002/08/12/against-the-dead-hand +Redirect Permanent /blog/archives/000054.html https://www.kieranhealy.org/blog/archives/2002/08/11/more-on-post-war-economics +Redirect Permanent /blog/archives/000053.html https://www.kieranhealy.org/blog/archives/2002/08/09/more-on-unc-and-bill-oreilly +Redirect Permanent /blog/archives/000052.html https://www.kieranhealy.org/blog/archives/2002/08/09/uncs-islamic-reading-assignment +Redirect Permanent /blog/archives/000051.html https://www.kieranhealy.org/blog/archives/2002/08/08/jamls-article +Redirect Permanent /blog/archives/000050.html https://www.kieranhealy.org/blog/archives/2002/08/07/back-in-tucson +Redirect Permanent /blog/archives/000049.html https://www.kieranhealy.org/blog/archives/2002/08/03/last-one-to-know +Redirect Permanent /blog/archives/000048.html https://www.kieranhealy.org/blog/archives/2002/07/29/bureaucracy-and-its-benefits +Redirect Permanent /blog/archives/000047.html https://www.kieranhealy.org/blog/archives/2002/07/28/fries-lies-and-apple-pies +Redirect Permanent /blog/archives/000046.html https://www.kieranhealy.org/blog/archives/2002/07/23/more-sellers-than-buyers +Redirect Permanent /blog/archives/000045.html https://www.kieranhealy.org/blog/archives/2002/07/22/that-photo-doesnt-look-like-you +Redirect Permanent /blog/archives/000044.html https://www.kieranhealy.org/blog/archives/2002/07/20/visions-and-revisions-and-a-hundred-indecisions +Redirect Permanent /blog/archives/000043.html https://www.kieranhealy.org/blog/archives/2002/07/18/amazon-meets-google +Redirect Permanent /blog/archives/000042.html https://www.kieranhealy.org/blog/archives/2002/07/17/philip-mirowskis-machine-dreams +Redirect Permanent /blog/archives/000041.html https://www.kieranhealy.org/blog/archives/2002/07/16/ira-apology-to-noncombatants +Redirect Permanent /blog/archives/000040.html https://www.kieranhealy.org/blog/archives/2002/07/15/bet-they-dont-have-a-word-for-gaffe-either +Redirect Permanent /blog/archives/000039.html https://www.kieranhealy.org/blog/archives/2002/07/11/dept-of-alternative-careers +Redirect Permanent /blog/archives/000038.html https://www.kieranhealy.org/blog/archives/2002/07/11/grammar-pop-quiz +Redirect Permanent /blog/archives/000037.html https://www.kieranhealy.org/blog/archives/2002/07/11/membership-has-its-privileges +Redirect Permanent /blog/archives/000036.html https://www.kieranhealy.org/blog/archives/2002/07/11/a-primer-on-irish-political-scandal +Redirect Permanent /blog/archives/000035.html https://www.kieranhealy.org/blog/archives/2002/07/10/dick-cheney-shilling-for-andersen +Redirect Permanent /blog/archives/000034.html https://www.kieranhealy.org/blog/archives/2002/07/10/photographs-by-david-krewinghaus +Redirect Permanent /blog/archives/000033.html https://www.kieranhealy.org/blog/archives/2002/07/10/counterfactual-plausibility +Redirect Permanent /blog/archives/000032.html https://www.kieranhealy.org/blog/archives/2002/07/09/asrs-unavailability-on-the-internet +Redirect Permanent /blog/archives/000031.html https://www.kieranhealy.org/blog/archives/2002/07/08/biking-in-brian-head +Redirect Permanent /blog/archives/000030.html https://www.kieranhealy.org/blog/archives/2002/07/03/another-kuro5hin-story +Redirect Permanent /blog/archives/000029.html https://www.kieranhealy.org/blog/archives/2002/07/02/eternal-ambition-single-goal-er-ryan-and-jacob +Redirect Permanent /blog/archives/000028.html https://www.kieranhealy.org/blog/archives/2002/07/02/stephen-wolfram-and-the-obsession-with-discovering-lone-geniuses +Redirect Permanent /blog/archives/000027.html https://www.kieranhealy.org/blog/archives/2002/07/01/weblog-antidote +Redirect Permanent /blog/archives/000026.html https://www.kieranhealy.org/blog/archives/2002/07/01/trackback-explained-to-myself +Redirect Permanent /blog/archives/000025.html https://www.kieranhealy.org/blog/archives/2002/06/30/clueless-noob +Redirect Permanent /blog/archives/000024.html https://www.kieranhealy.org/blog/archives/2002/06/30/minority-reports-vision-of-the-future +Redirect Permanent /blog/archives/000023.html https://www.kieranhealy.org/blog/archives/2002/06/30/amazon-recommendations-on-crack +Redirect Permanent /blog/archives/000022.html https://www.kieranhealy.org/blog/archives/2002/06/28/on-being-an-obscure-google-search-result +Redirect Permanent /blog/archives/000021.html https://www.kieranhealy.org/blog/archives/2002/06/28/culture-and-the-creative-industries +Redirect Permanent /blog/archives/000020.html https://www.kieranhealy.org/blog/archives/2002/06/27/my-pledge-of-allegiance-article-on-kuro5hin +Redirect Permanent /blog/archives/000019.html https://www.kieranhealy.org/blog/archives/2002/06/27/i-pledge-allegiance-to-the-flag +Redirect Permanent /blog/archives/000018.html https://www.kieranhealy.org/blog/archives/2002/06/26/lundy-fastnet-irish-sea-rockall-fair-isle-faeroes +Redirect Permanent /blog/archives/000017.html https://www.kieranhealy.org/blog/archives/2002/06/21/google-api-and-movable-type-hack +Redirect Permanent /blog/archives/000016.html https://www.kieranhealy.org/blog/archives/2002/06/19/catholic-church-abuse-policy-one-liner +Redirect Permanent /blog/archives/000015.html https://www.kieranhealy.org/blog/archives/2002/06/18/creativity-the-culture-industries-and-the-new-economy-no-such-thing +Redirect Permanent /blog/archives/000014.html https://www.kieranhealy.org/blog/archives/2002/06/15/good-company +Redirect Permanent /blog/archives/000013.html https://www.kieranhealy.org/blog/archives/2002/06/15/digital-tech-and-cultural-goods-paper +Redirect Permanent /blog/archives/000012.html https://www.kieranhealy.org/blog/archives/2002/06/12/fashion-police +Redirect Permanent /blog/archives/000011.html https://www.kieranhealy.org/blog/archives/2002/06/11/cheaper-than-hubble +Redirect Permanent /blog/archives/000010.html https://www.kieranhealy.org/blog/archives/2002/06/06/jumping-into-the-abyss +Redirect Permanent /blog/archives/000009.html https://www.kieranhealy.org/blog/archives/2002/06/02/national-football-strategies +Redirect Permanent /blog/archives/000008.html https://www.kieranhealy.org/blog/archives/2002/06/01/poetic-headline-justice +Redirect Permanent /blog/archives/000007.html https://www.kieranhealy.org/blog/archives/2002/05/30/the-fire +Redirect Permanent /blog/archives/000006.html https://www.kieranhealy.org/blog/archives/2002/05/26/copyright-law-and-bathroom-breaks +Redirect Permanent /blog/archives/000005.html https://www.kieranhealy.org/blog/archives/2002/05/23/chalkcheesechoose +Redirect Permanent /blog/archives/000004.html https://www.kieranhealy.org/blog/archives/2002/05/22/book-review +Redirect Permanent /blog/archives/000003.html https://www.kieranhealy.org/blog/archives/2002/05/22/teething-trouble +Redirect Permanent /blog/archives/000002.html https://www.kieranhealy.org/blog/archives/2002/05/21/best-to-jump-right-in +Redirect Permanent /blog/archives/000001.html https://www.kieranhealy.org/blog/archives/2002/05/21/the-hello-world-entry + + +#RewriteCond %{HTTP_REFERER} !^$ +#RewriteCond %{HTTP_REFERER} !^http://kieranhealy.org/.*$ [NC] +#RewriteCond %{HTTP_REFERER} !^https://www.kieranhealy.org/.*$ [NC] +#RewriteCond %{HTTP_REFERER} !^http://crookedtimber.org/.*$ [NC] +#RewriteCond %{HTTP_REFERER} !^http://www.crookedtimber.org/.*$ [NC] +#RewriteRule .*\.(gif|jpg|png)$ - [N,F,L] diff --git a/public/403/index.html b/public/403/index.html new file mode 100644 index 0000000..f050127 --- /dev/null +++ b/public/403/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 403 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    + +
    +
    +
    +
    +

    Sorry, you don't have permission to do that

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

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    diff --git a/public/403/index.xml b/public/403/index.xml new file mode 100644 index 0000000..c2397f8 --- /dev/null +++ b/public/403/index.xml @@ -0,0 +1,24 @@ + + + + 403s on jeremykidwell.info + https://jeremykidwell.info/403/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + 403 + https://jeremykidwell.info/403/ + Mon, 01 Jan 0001 00:00:00 UTC + Jeremy Kidwell + https://jeremykidwell.info/403/ + <h2>Sorry, you don't have permission to do that</h2> + + + + + + + diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..93bb5f1 --- /dev/null +++ b/public/404.html @@ -0,0 +1,159 @@ + + + + + + + 404 Page not found + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + +
    +

    404: Page Not Found

    +

    + There is no page here at the address you requested. Perhaps try a search to find what you are looking for? +

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

    Recent News

    +
      + +
    + + + + + +

    Recent Writing

    +
      + +
    + + + + +

    Recent & Upcoming Presentations

    +
      + +
    + + +

    Recent & Upcoming Classes

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

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + + \ No newline at end of file diff --git a/public/404/index.html b/public/404/index.html new file mode 100644 index 0000000..853b622 --- /dev/null +++ b/public/404/index.html @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 404 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    + +
    +
    +
    +
    +

    404: File not found

    + +

    Sorry, that doesn't seem to be here

    +
    +
    +
    +
    + +
    + +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    diff --git a/public/404/index.xml b/public/404/index.xml new file mode 100644 index 0000000..25806ad --- /dev/null +++ b/public/404/index.xml @@ -0,0 +1,23 @@ + + + + 404s on jeremykidwell.info + https://jeremykidwell.info/404/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + 404 + https://jeremykidwell.info/404/ + Mon, 01 Jan 0001 00:00:00 UTC + Jeremy Kidwell + https://jeremykidwell.info/404/ + <h2>404: File not found</h2> + +<h4>Sorry, that doesn't seem to be here</h4> + + + + diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..aeef0f15035823cf19473a95884dfc0c6550171a GIT binary patch literal 25361 zcmZ^|1CS=&wk=w=ZQHhO+qP}nwr!hTwr#t*TwShu{qJ+`x%=%n_lw9cGshfb%{gYS zm5~uEQbA4}777ar00011QbI)O?>Xb20|Mype|kZ?8vp>5prx>|f~2r8fr690nWc>> z0DuH+ZkoG_@&;P?TrYd?JQ5KB=@XV0B*7xL1S*JPq-1~sP*@0=n+T{F3L>SNiOMfP z@o*wzQ55LlAfq+N2Ly%D0YwqflbslA$lF@h$K9;2G0nY=v-Y(O^IPAwE&zqkAdo>9 z4Zr}FLJgFgs{tJ(Lc>KuFPk>UCn@2F2en2LlQYo3j7@5!tA&Y8=j)v=P{*<3m zcTZ%blN}dgY0hHyu;j&bE9_>G9u&ub6zXJqGUP z?0POwFeXoP&*r*@z84MP4~bSbZgXF%DnN@Zn83+Fjr=VEzyl~i%WlpiUYLzu((oY+ zIdt^(wT&}izBL{7Ir~R`ko{zT80Smo)Xj$)cNsc=Ah9GWv#IDwS$UbX$n-P}T>6~J z*9*eW(JxNRnTa8qocv$t_o3&iisvbiA(0l{p*(>a33MhK)zSn2#iqUeLWVniS^F$OkUq-@A%LYzBak62M&wpjZOw7=UODU~vMN9e{TU073#J5P;Kw=_G(G1wfhv z`PTnVLB@4Jw_qy=faO51c@ViEHU}^r5cOZM4$v?G;sQ`%1JVqDyMdMvL3aqKMS@ic zXeIEOLaPYaS`ePXf(jfcz$3zu2?$97Z}Vgo7*xSkg~AHFPsA=*T@bp#?*-uV1T0`* zfW9G!89+;huGK@3SWYAC9%n+CZ--1ewRvODR$ZPoBAlVSJV`+!g4B`#68`2wr*A1_^ap1;& zVIJZ*_;q0DFxj!zfwaS~#dHT;4Z$9e-Fx&fekVk zyfQ0cmc}H+on)P{jI~&3LAQcvooJo4>M^8d-b|~Qkv2zj7S`7NE~j1KE7_^$tu?M_ z)-W%YYo0~cO`_9g7i`yQS9TYYm!{XC*RNN+E#y{*w_Nw!AGkk6A7mel;Jo1; z;k|G#>n?5--66g!h*#$a9kcf_N8se%%1FZ9Us*2((sAm(PJs)$!Az|(0UQ+ z_3DZ0_3cS7Mz>bC<$PRxk$kay$bD{o)xPwvhF?HmZtpvfYjsv;4}r&( zDG4dXl+2Y2l{1zhEw3$0LZpUK4b-~KyyU&~LoCG%!d;V=D>tghMFIkNiqnXvPsdruc2l?$j}sq$tY)n4uI7Di-(jBvtT)zh zwV|tZI$ND`?z#hA2hV+1@wNoE5*v3@VpFlE*n4(SyUU6NiVb}R7R|S(qe7iRiU+;4 zv)XVrBQ~fuzjw@DXYr>k9Ys8hZtM3fo|8(rDw6GgW|olccoy&s>d>DA_S zoVwh;xxT%>!@goy@w)TU^soIaFIsPHdoLWCztWCsysnv5_C8$~tQpKT zN0`TlbqLe{q`uY54}s2A&QXiCh+T@;iqFNo#q4-BK8@T>#iTDCh4xc^x4on;ROkD- zfApFgO$^^zFI;8vOYK(lalWtqu{|?6KVEXTye%t_+O6*6{}cFC_+k7smUwY3|0G$`W64F6J(-{B&8u_0C5FjfD0{{So#8O4WMMGAG z%h=wQ&d|i($dt~**5NN30D#AX>+hwlsf!_jhpmmBGnWT1(Z3j6f3N?6>4^ybMRBp_ zCDM>pAP}~9G9_T8W1(Xp;)5a}AmDK_G2>Da5&LiX-#cC+3l|p$E_!-*cXv8>W;%N( zb9zQjPEL9TCVD0&+P@51XHPp9Ll0UzXX5`FUjH&$xz0_O33x zL`452`k&u_)#+ks_J1?kIsdn@uK%<^ z)y~p|kCEqJhW-=&za9B6m9V|7gOjPV^IsVs>wioB9s5td#{W&j$IkTMf`149Qy}kT z`PZr8KXv_2P5+MlCtve_OYraDzX|?nJ(q%|hpCN*h~?jg{>ud;>)*2e*T{b=h3#$Z zos=C6jZOcl>|c_9gZ`8KuRNOn&piJY`8TDBF_*Kek(H^j%fCIZzfbL7vtP*2oc`Zn z9{T^4&GUCIaLL-6Seki?7`mA9F)=W*&@wR5GO?&IGI235adEQn(EkVL-zxYgBJ5;p z=wk1rVsCH5_b(f^|J)KV)BUympYi{e^3eaYj{a?3{nw)X7y5VA@#> z%ozZH0Dz>3po#}zYOZF`PDh>TZ;PClnV;rUMdd2OWm)kfEo=LLMM!S@-Z2FQ0tg$I zl9DBk&##})+n?v(TkW@&d3kx~X9k0#^Go!8*Ul~kA68OdLY;?5#f7`=`u#ku3lP%+FiqP{;rJCrSJ1VJr^oXIH&|8BY4~#kOVJQ#PhZ)P zUWeh|*}g!vL*hs?mO+-q%7NqiYaJ{(Vk`<=RsNRfBMDCdt02o8S#M$LTP=Ua+z2z5 zDz<)hzsEm`+Kf-tX5-ArN-Q;Ts+(WPBt6r5dyI zN6_yai9|^&el!>xJ~$gM)S6{*j5)2V?Pz!*$bhg5FHuhaAkNtFRS^+j0G7Z5F$g>G zC{PTvaK%fa)|>He%$SUs+$MuLcY8o{dm5^GQO^Rbl*SY^K6N_BK)PgYy$fx#F+^{L zmKP#fD32;A4*E*=>>@rggHIx!t%#j;SxnK&mGB_6(Yyh6x$yg3=j;8?S2A^v-vWTF z5HwdrRheaV1Ck&gQSIUCViJ=*N1mN5s2{ZI8Zk=aZNJvc^s2T7)!op>2&_r~qx*#iPp!7Y1RZjv%oU?a$hvkd{DkV%TiQ(l(<7QJ2f>&lXK8496TcF)IOi-dQ_ zmOM%v6df!`$&yfrlMSsb&6tx{CY#krZrU=DCHwkX0a$ge7z3~;4QK26TX96qMtZcJ zQ>KVN<<;=`)?mq7nq)1+9Gqg*to5A}mnU#yp7se@Naxx6gqdzCZZO>mO&P$w&EEFx_~kemz03_Vy3llb^8iSKb)Rz@(^ zcxl;k!%}Zx2;%OjRR!=}FF$0eepE0S4C=S2n3!c_LGpbL3gnS+`WvECQpte~e>1DA zV5BsV^tDNKbkuTy!JU$Uy2ckQkp8}~a+fG42N1PALM-YM8W%pX*884ub9N2zat$`4*|V_LYj*emI^GhvRd^Ph!7he5vwd~? z)WWKjst23y#HcU4(0UkyshXtal7{If-r=__r)_$!nC;WTi;F!py__`Sy@f^mUR9Pl zO0KLrU)nxlAU)8zauxuofhn|$4Skq7T`lnK>pSnXgqokD>Ri0^O-E3joG2oBePl<0 z)MBS(VVV}UJb`Vx(%3zOk^(7xg~S-)N`_Rk!0A}sycGslza9N6XA={;9Omi!uNXFT zI=ULBCT62hLh&!hY)j#GG=%pA87gS<_dCpj{G5;q7OVxxoP-ha_T6|xS@JAGK4od! z^J5n1NR0wG+!$5Ya>yjWC4cZ^Ea5 zdm0T;mtxzwm}Mo!6%SUSjAa!wb;>(2P~vi62(e>g%jasmiSeM_PDXaOwa>{2nz@E) z<786BXXjal#qpDuo4A_WhsG&qo_DKHioxw5^55Li_)5?Lza4;dSPEV}UIHXQO`z149dmWhYK$rgFt z&O_KH!eyOR+Q}ZbWb*6;`SeEflT30!1_oIop~tLD0bibfXDvATRs6*Yatg-lB& z#&c@#y4sGK-?@KcB6bTZVS8NITAG%7X=z>z2*?v9jAI9A2o>d=gUC!8Q+20wTk2S{ zg;K8+U;`f;nmLr0r&YVgjafJr9-ZdmE&E;^dx0ptwzqhkh7(tr9zoIRXK*$vUSH&s zzAcYwA$*}M?O9k0h!s$f-j872V@xNEVQUPV8u{ z%^X3eMOvwr@%+ro`r=|b%Q0gjHtQyHhz5Ja2XTAG!-(@F~a@HMdV>@Ga%t=(eAm-$I z7;>sH=NxiMaYGW9Gl(U@36);1&RQvy_XZ85|*&c|{~| zrx6^*2U1^7z>Pk`D6O1-A=n3NnH;d->Gdcu#V$G0sa=uSge(=Q)~B7Q%?l$+#7r!7 z8H;>Y42TrD~3Z5f)gMBrz@)-tG_p?m^>M4)QkVg8TE?I zxP82eNsABRTB*kz^EEdQ$r0Hso}{kRB?GO8ff897Krf%iAr?eRBETkxkL^sp<1DtR zWoeSE$IHwbk5~J3zVG#Xe0YPbK;p{nT_p8|2fNh6ozk5_AGTdF&MK4`jDoHT`l}SQ zF#Q=f?l)O*!T?6&CmxXLp#zNrhs=e67EXw~wbHG!;qT=y8rq2Oi(cS#FO7G?E4x!s z#f+2o{`p{r&2bdaFP*d)e38a>+Dy#M9e=`Wh7)r)2jf&e=@&2~vJ87>2*S7LY`LDE zVv1hLq2D69@gblpjJR1kiIm-BHOfZPLWq@JuU!HdvVmoso04l{WaQqnYB0=`r^Gdi zHSYmq&!wEfNCL+3g5rc3L2<#U=|0CP^w_%EWk+74eQ`M$*wK`6d+hrf5-;8pu7=cD zz;3C%JeDnk4-5U6rSUs9lN?EMKLj*dsxnxwyyWz;xie<_zA6Y!&j+W-v*`AC{E%`7fw9y(xv} z52I1bJTvOov}`QR_;{0WU%~NFkLpaw4GWJ99GX-PXI&D(L=?q3B8;{}NJPJdQ>})| zSQnNl5r#jTbTAo_iFAcc`#dou({K}*eli?9lr1pc;bBtE5~W*l#@ED|w;3Qt+My|| zU`e1>*?vmFCaG!=N~-HqF}s9*@(Xg!uNEdTRSJgNDC`e$*ncU* z>EiNKA+X`9`B7}1suw2f1tRBqr@?*B%t!(wP)5aK2O}XD>6v+tYV+M5KT08M+VuOq zR;PoORrBn1ZEy{fS|}GoKV*iHKNKI1s?d`(2%{D(@f3z{l&=+^;FI0PVcPL-%=73b z6Sr;%Yly|Bzn~Y9GTaii;u;)v2)w40f#ku9GG1f@AhcG0p53pZ`g(9CHB!-$@iV`C zYsFBogoG3Deu-sOuiVakzs{zSwSg5^heF5$E~&25;R)uCH7zRb78I_TaY!~BI6iSs z+GO$$dJ^izQH^7MC|DN4f|+?~qX1`InqX;w8uvI0YEa6IzDBLr=T(dwF)!DdXsrwm zb#YR+tg#!o-9;AI1YH;-A;;b+-G&fx;)Tb~GOk>2FQpSIBb4aV@p@Id%iGeCM(1~l z%^qg5r>;*O?Ye@iWuSGQeWW>3yUB`PDD6sDi(ca(*v%C){%!?gm$VDQab*>YL9X+R z)Y50_#$}YZ3}ew8CY4kf?qoq41=IB${R7FNDuK4jifY4K?tuxX96;Y#2vA-jY{51< zhNid+y;1N1MV|CrK@iYVj4C4GqpCf@=$jGY56%Lq_e7EQY$<-ZZzD=Me=OI}WsC1M7QJmMpSLZdUn~F4!e=|4 zhZW^(BQ0^F{-!$C(bf!Om|f8aXsDqpJu40~;dBv96;}WVvtT&!klTzI+)wsW@QWXS z2o6JN>zL>X17(i|-g{V>-vv=!%-Jhj$puve;oG$M6?16>4RCGvz7j)RlE{DtY5|UzMkBgv@#6wkC3J4nn`;dYl4=yqt(ed|e}C{@52*_683TgA_VX z>CJ+E`%A~7IWg_E418 z9oK6bt8J2-hiMd5o}JNzA~aB6U6@3OH^zvE(ujtP`;-tFT-#a^VjuwRn%I#z$nZ?w zdSxR3rP9Dux?F0T_-dtbbUIfp?_K27h|5wU14Q3WY=Wf z^Bt516US4%+GJF`vKej&$XPY4eF&N?<$5R4+{*Mw6EGJzvim_K6y}Jg?{b9B#7(rw zg0}wMy-va?6-#`8n3&f`nOF97pRKf*HS2ZkK)X^qsaAW%|7xV^{eovDa1YJu zxkYNWC@i2JH$#!U?`9VA5T*{R!reYl!k~PqoWp$ruo$xAVKJ1Vnb}z9`-Q(RuEb!H zKICBpmT?6Kx}#L5oqd=kI3+vT!ZzFh!WSEep;d(3N4_FIhNkd~D()R~EF&xfV=7L` zz_c3d1d*22j;^YNKt}GKIHzhl$Bzmr@&b1&#cidw{zMMHcCnj@Jqf(CKGSc9LgsP8pOTOQzKSc^S$^33Gc z4}sR4#69fZ=PJ0F3YMbD10~Hy>wI8xjPQIjCpt|8Tlh;NiK#R}|FtkWs5%ERU5y|6 z=bL9>Z8S^O0`cd7=TWsjk=QcDqs=0m-jHeO@bDOK6s_q|6h8-CKf~~PCG~V{2pe@! zoo-cX`xmD9@^X(AW-M{x!9GIk(|GHaJKrMD^A_714&|Swq!|l8Vg;tQ2ZT0*3MLlyQ%a#qn;! z;fVsE1DO7tNv!sME$RB_3NE0~@>L<+GBhi;S=j!zBBQpI=~>7stg&&$2+)N?1sg-g z)A)(kAm`)+uW*FLiFWv@oV z2?q-Q`nC(Bugj}Jf_ET$@94#rfc%Cot9&8*zE7qvQ2 zP|dTJahab>j}mNDEtn&Nz#1M6bBWTjA%cj%_BjhxJ2Z!6KrsJ|wu5ygsVBQ8URAYy zndGx5kHAA&MjJ*C(0rkgvl>nwycQwX4oaM~dtJV2yR#DD77Q;6#K?_b?8MDo zOAPvt?wPZb?nxPNf`T=QqG;!V;cExDa#G2`BMP2hA6gl5Kbko2zh`#$sZq;OGy4l0 z%*W6iH})UOFidExB58^}Z62s+n#hX*ga8`FUJRoa@h#75xNa1!Co!)e`T5<=IKfT6 z5$a5lot#SHbEyW!M!qiUeOMi{MK$aV6<4B_R28L}bwJAU2cZBZt@f84tv1`yv((j; ztcISAgkX~ulnoG|DNLe}sGF)8S(vx8mdlLw3y5&nsf?=_rT*Qo5s^vAIxlryX2SlI z(hZ{tt`6ec_5A8KVFTgN=2opu6O!R3w${?UAgIWVZMSFyrc5PmiTV>%%H+X^I+1Q& z8$B4%Y;*qc4%ZQ7E=;{FG#J~4ZVjT4rN1J4g;`h|yp5FaQBo+6R%zDv9Vgv!P-u<^ zhCxn-HD3dXY{ZNyB;$IMy)D#`Liom!fGcBiMe`|r2!`|m%0?!RZtN+!x()ie2;O&V#X zt&H-*OA2tf+&d#5KU8j%g!Gt&@9QJ2s@BotOqz-d4HsP77|VS$9O=Y} zS%4SMOylg&i}YxTX|FKfl?1czFANye(<{5XiOtRRE*nGR zvGM0qnm7HvLZsTTFM^O2wi#UB>7r;kW@TqyZNMU?#4v&=t7H^^O1}ko`Wzqu(Z(e^ z*vjZ;6-?=DBtfsf9z*2$6e#QG5Rnrbs@R7<%QLYs>J9Ot{4yZ!Qyyw>cei>&P7=}* zNFLX0^r;)B2wi6M9a17(OMa#H%UO`1c|QIle}wW)afQ_1^*hW4m9p@=|8*|-?(^j9 z3IkQdgv}P$WdYq*if;?Y)o<+%MCEPPyoqe3}-A!g8-0poGyXDl$N7X^opM14Eov6YeL z0CVBftVvddMyu#p-~(?O(xOS-;#QR|9EBW|m*%5_Td_AiVj((kcHg$Gc2PQ8nh^cJ zeLg;J^OqlP^9daHj;pF8;`#Z;yn?5xlb^iIW!@53Sz*0Y;Ws$13DOVGP)aeyz)S6@ zKqwECt6tyU2f{v&!7zK`*VbrgzI(~!d2b|$N8m(90bUK%}NUtBt{>0Z;kFEg!4 zLTzX%$>q6r2s#zJh%1f9&#@z?3%Q9asTvv5@!Dl9cw~}>h_cBd+oa{iI9U65{_M*|GV`Q(O0R`mDEHz-VIlJW$_TIs&z2Ln&vTVc>9EG~<+{GlbU57bB%V(m**sN$4n4M|6R;w?`*XyX=w zyA8MrTGdAFdEE0mf2ifv>h~jt`Z8-|emN`}Elo@``u)3R(n@LmTm+AwlTxHRRgLhP6pKM+ba94XgP3*dezFudJ|!yPLNM``-2mN?N=wK_YgW}*{o-M!E0xtk zz>UEj?cYxH2Mgo|g#vYZ>eVBeW-z(%1LI6xydEDSP(DMvm%t+j5ZM%Z$KAh`jBRCM z{q9Jm0CN6<2C`9wqU1s7JwG7KVod2OV~eT9y=bTV2BteDGTVmbk|S6o+#Yp04JAcO zMw55BWRaGjd^-VZvSipUshS_4KA(^{#0BSI>^8d+f1c3_Buk93IWiPoq2032+7m(eW@Tzc@JOh+ifrV%8NSBT>Dw?z&5TFCD+w>Y>RBIY$4OVnbL$X$ zvVgCiWTZPNV3qDiA#4TGs*OWhhNSh9-->fA^^ME8$Uq}3r z*uLQT$BKubgEtwTS+%&XtIZ}jVaV}7wWf#|&5rzXMF59zwD1|`@O@SeAgAg%MS9nZ zq11_j>=9MPEL2Tx7GOUVh*6D5Pn@0TsIjp7c|1kCY2u;oc&Z&DYlctfZdr>Wv0jjy+oof@T_!2{ghz!f`sf< z&!)DrHQ=yH3e-s#e9DXv*y0A03IB~};a5Wy7}|A7E4zew&AL5p4{`z6@bl%OXwH?) zp#=MYKsSQ1D5xvYASFvV$NDsmS=j+#yp9m&eRw*4(bsB{Y3IOG3;$xH+XcwxAocX8 z;;JLI*^%&(Y`pLl^8-pF_d_VVQeM7(zP`tHIYrNnoTVq?4RgPP!Eaut?R^xMq&R@? zNEYl?{E&EXN&D0*-qsxdGGO(1Utj*Z8?h&>8P~k_i`S;fEzaLR=uRv*Ud96|LU3v|grR46 zE-k8Qj1Y)pZ?FL*(aaQ88LcY!V^de{YjbmJ?D@fZ9B=9=OsX;MD6><*@QOVYUUQd0 zq4K92)syslC9de&3o7ag1c(FJ)%8AC70i057UgTIy{nYxygHT*POXkqd_Ui`TxNLK zQncfQLB*+T6oGTUXpYy4)NJI4kuTirC|$f&pmA@7?Z)QL(&x_N*Ur>;x6Jhy`5r6A z_v*yMwhPYXts$+8W>_^dKgn-$<|n^^dAKLvPV(^f zpCJ!!I)0IP9#0}&+olGz+6vMYS+mF3beaIWC#{#j#jUi6rS zWpmHNy9ULDY_mVnbIv$JVFirv^Vp_QHOixJ6P}*H$hJZ4-IjvTQOsxn!1_<@Z zj4sjd)%zXL;@M@weCU~{Md*27L2KxWbC$8*%1%C}As5H37E+l=6iLczkqj;;ZzKB3 zwaAI>zCxF=lTNB5$A8860sI?U#*ku4h>6lF1C>6F7nyFliu5cKE-kPwk+N4^v^G0ID1eB4`J7Sph!$=_K9A{rs14gc8HW>?yiFq?ZHcVTVhI(7nTma zP9=G$1B4|zt{DR@VveQ5kg8DcIUqJ$M?5~w~Jc6oWAzNZu6R> zyxkU4g>Z9FCW3X4LU@+z)QZW{?fdpmRrtV|juX0~F5)9eF3kI!z~1@SP}i>_X4dZ% z!(GghwWd%K^d8iku@QT{#BpgfZ@i~g12v87l*|{ExAQ8|((t*`b?fzk<&pJsu4Q9_s!c|DTB!zW9P3^?2o1W5UWa zJuS@?`Z;=)1)GPK-ytzx@RyrTU0Q;t7OTa1=cBykN7PKiF*z5I@bXnC0GjtJd_WPiPW$w9 z_s6MJO%1~z7ollWy{O;&uJeyC?d&Z*+z+P3t4TtAeHxm^r`)`J!$is4ee^gEVbloZ z4X3*?J0QoHbd`fpn_wKu2-AP&k-y~VrxtXyNLOqViriKNRO+6~`d@Pww=9FEv9QVl z9u=;S%GQxCR%YHHnBYpiknb~5`cYY&E zbl3I;G<;t7e_PiS@%6dq<;6En+*hYQMR17BV5x?SC7l%zV~TrgMf+OHN7+B`N z4UPIbbZwJ?8XG0e-iX%Gakh+|a2ZQ?gio&vD7AEY75$DPM0TOf2R82=dG75s^&pMk zN=ai)tp>aCI+|7sP8LeCwT`?~<~u5NqQBKKZhRd;W}kD}HnP-eDg~<;E%c)7esuhU zWGnd;?z zz|ebLvjAG!+O?9KhP70U`Lp^ zq6XECU&GlPCzE<9Blqx`Ag^-2Oh=LnT+ z1CA4Ik>0uC8BZ}6P=xCQ_y*@by(x@QT07DHhpMF>`6VSD0dTJDMD_q*;$R~cM}2bN z`kiV+cs;2xe=b|w#CQ%B%<2M++PPD04i#-Jb-U2$A1f!io7j8q%69#&;_|SRtr&8u z1#CU44CtDAMn0cz%1{XHWkvlVMgFM^ceez_+fLPtN;62g5P4Y#>DyOZB&~^? zI6kpMEkB}13{j`7jhd3{DLs`p1se3ll=&j3-zR{}{u@IhX_rb&)fp?n-hO66%^7J) z$1;958+d3-U}gMYvKPke%9$A0pF5&7a!KFI@xNyS3Qizmc z+Em`rPEOfRuOH;xOrgh>W!y~iTotAks8R_6)e zcYm)B7jzxpznIV~%Xup<;G3z;>nbAii14^F{eBN}8dJBg1Hk%>;_f3UnZ1KvC|u*r z8PBtkXSJ=gsB7#a4;V{H9#gqYv2x|^dNa#M9G^$qdPNdQK50u~#z!R;utvuxNqXF_ z!6EtkaV0$JDCBB0h_ULs9h6F7(omuyl5x=LuV>FOcjdE}FobKjlGD6sqUqlRMNDbvqT>w=SeLDhM1xJ z72j&DPAa*tB(&BbmgDKgC5Kq>{^r4b*lXg1lW}Zo&JMeeFzDIa(*nqaI2*y5a=S5I zZAz9}b!)sx7=TtWWpe2Tw$Lac?N{E#SZl&<-a8Vq~x?6SH@Yi{z*96{m9V7@Cc0kaqc z!;c9;z#u;xz!QHFByj+k6B(0cJ4g(lpOoz?3=QFvqQ4prqg!ea=He z12E#_e4O!l$tvUbegtl>+`gm_q<*AaCqeMKa3DYSgFf|ipG?R0uiCh;e zJJRXKZw-!F*U4QGamqrreOieEBeF^rC79WT_|uKJ*$Db$DTtfG?n}XD6d&w>j0Z*z z)9v>+`v8N7JFCQBv{?a;TW|#q@|+2J>o7aTGm6OPPg=2r5rQFj%?f zpDHI%CL-%;FPR4>4)9LVH$$)@+GBc?@PxwJ;diMWO5-4-5yqm)>lEAw4?}RmPr~No z#~CJx%rbiN))E(F)XnSfbAgJNfcRQ4ViW0=N7n)FE38*ZFGogAKW4ep{H$}@qjNrzy(R9l-J$j4}AK{6EIg9rX0|^elal$C%?``|kGdNVE7_cVGh&hfCM~?raIY z^8EH%8PTxn1Q;Z!wrUe$1FJhmjkXqS;Zd_heph7FjHPW9rbs{?mS93~*$CIo@hRbX zk!=6_s;FJtTdXR?2AFGa`@;^(Emrb|BlZ-(8&lU0r#X864Dr2i${MY84{r$OhM>SK zrgDyP&4vf`sfQEGZsW6A7!`5;fGX&y<1e^qlT3li87rH?N6QLHr){3-`lBQfqAPEy zMxZDZvdu{w^@g1&^cD88iwHbN!k75-Az-iUMl>_BpS z(WchVhB6n2qst*HYEq0oQ;2rpxUSgLG?{mA6+<3;{J<>_Xfw?2PBKPrpW8(2=?t*Z z?q1Twf0r_D>xjvOSh93N1`K5hjTUcwr4->sQk=+@w54;D^+qNN3tJMs;6X>8b{Vzb z){)eV&awtfJsc~31v|7AN}X~7*`KBWV8A&1hTjIh!tn+UKv&y!Hk~J}52Xa50|UB< z*P-fed;9(yZbiMGr3d9+ zvrS!{Rf87L2EV;byEu|7Z~+l5deRk@UdK99iQG?&b5`mNKahx%8F&2cwk_Bf#fqL= z6fXgm`^AUvvawO`?LdFN^sKnMS@qDR0nL+$@RN-_xF=U$CF29WFS`puVjWEiWj-LN zb%XQQNex5sW`vV~SK|3$z(Q>%?k0GSO5F(XHvp=EPlj@gUK;fkM@lxaEh!F`v(mxf z-W+kJLH&k4zE+ivC<1e1<&;fBUueS<62LjStsbhMp8fA4w~gu z*P61_rJpXwOJq5rOk7G`&5xufDXuI_>UzzMZ#}AN#u*VL7^7!6g=_KP9iF_WDL$luoSJtBzd)^MzrrxvE%d|hYN@_? zscF(%mi%5q*Dj~y(FY?s$(W0*XA-w^#_VvmU!xH!Bn2F6aK%QyRFV{d*hbC7!Ea(; zGY09>be(tsMi~Pw_%rk33k`y z`PCq@8QD9TacATQ9(v675wje)p~@#&b9W0!rxmR%XYzbU8~u8ro{^SiEhd*Ku%xs{ z0wsM9Rh#;nUdO4!pVI&6n)YM|jTBS9g%Aad#`NQZGD?f#PupBo*%GQXFGtkH z=LBc85A-wz%)m>CjA+-;XsjmALGWFjh-O@6nS-OqV%hI>QZpXzs?bNo1(qjg%t!6JZWW?h!Y5u)mo|Cy$~MtF5-~-uFj3!z5{q5M zeHml-i?B7(j3h!#0SIU?h9C{zXJ>vYBfAo%s_dcQO+#X?5A_0~{~{R5i4q2ug!Fs~ z^F7qMK05Yae+{xtrk~v6+)ZDuo+T3~M%3>6VvTk|| zzuDZG3St5mh!R>%UxP8XnLH_LXC9yK7*1-P)txl&p>q%;rhFEoAK=^@6P%jwym`VK zQngTL2`QquBP7Mf6x|D9jd`zgJQ^N(j^m8KCk;c1?>983GTu)ER!AL$NIThIvoKs7 zX($XY8-gcC)y5&6V@Oe^J4sP7I1c27+IxoGd9!U!C4{;xWoFL zGH1%Y$m8hjNMDNZ(Ru!2z28|uH?@p6nqH%08;Nq3IA=p^vzDRo7&u+qa$1Nh4*!<{ z(ZBI9Dqs}_Tk)_*b0wUmY27dexVZUh91oFzFoU3K8oOUXj(xIVPp1yjVJg zMjkSobvy{kRBkFh+<9r8t7{))VZfGeB5k*L1&IR? z4=v^{&Y4|;$c8-BnL@1ztuag0pG+M4%GVbKZd9DKvwr7Rsxy-uNp)QfO0HbQzYwW-8gz3rB7>?W{9N?Qo`q#~TRc z0%qqpJ3yvMkDG3(7|HgsT0W_A&I`wRXSFXp(re6r++*;N{%$jB8CrduS&2WgabpW3 ziOg_{#-|@ZGLq<^w3d)WubUFI;TmhknbnCj#dW?@o)}jN@f^{E zhkP!fmXOy`zV`3S$K3e=QP~DS?nmVeTrI2%u>*X|8!nwiXsfe33Qw;Du~f6__=bQ% zs!88kh8~prDPhSlUUAg&tfrt2r;5TUH?k8M=JVEZG~y~^=wyNWPC9?yiq9$eD*`+m zx#HJkEy|#l+0I(FUIxfzJBaZJ?r|&jV*v+do%-@rr8IHR0eGv}n9!>nJu1{gRlH`J zOFot3?#>rG`1EmV=}Sq2!Sfi^m12ohFpUJ+`VO}<%38fzm3P(BL2KtUE}s~{k2?Pn zQ_`fQMcg_&TA`uKQ8dCiMGi?hNyJPI|9~(j8dpW1c2sp=W{0_!dEVjMF8tAH|N28; zqI|sY*UBtrr0KKI-P1iL08ZL6x@}9vq}qWXfsr&%-LcVedYV)mwp0ruXoff*eiXbN z+=uamdmiuJKpj&z&n|+{Fl)Vcctl^syzNcXIm3MctTW&S^eahMUc( z(;}R#AXZ*_;b}6%cHH$9K5>@aQTw&($mxn;L?ZgI2;7Gq7C8S(`}O&W@78h1#!`OO z9%aOdp{@{$l!JP`p1b?jqVDRZ)`Fvo)Q&@TWT|X94XvUU>~$vhf;gQ=?pD-y=J3}= z>7G2PLcEvOu^8ysuSdZZIu`77Gy;t+oRwNfI>wiX1~Y%2h50Z|P@LU-TmYerVp{Sv z%(BW^0nTxaxw6tH4_0A?$*^JPk(Eu!zw%*qvnlz{ZYDLBZFETw9*7*q1ku3bapTt= z1tMf$t5Qu7IPoo0c4I+B$Z$B1{|wVGs$Di4F7Y_M&uF+^+CEiOW@B8CRI@mX=Xu>O z%~(D8^-#ho+iygxh;*X*@-dcSME9r_C4E9N&e-yVaOcClgv5wHlk?R?8p+-!p-Bv1 zK=+@B<}&r^_fGt0S@}Cj{ixYpX{{riB%60F#e{%0m2k$J`s7@x(|a8tN8k{AC+Qsp zS~~p3)gj7gt?*fPeO~pmj(KqH_jGz4Q9=A3Aan)kM@yumP#HjHy1isvi-;Oun*4~C z*h)_!!~CN0b(mNh&`wPPz}g3uUta@grYFCldhXY+v5>#C0C z`hlp5)m+%R_E^Yqr^Oqqo=OVSc5?`ZG2RZB!~LrscO6r*ArC(%efv{`eQe$4v$jm& zO|1}R5V(I&H#?HISb4V`hj_-}mju~TN)iMp9S1HmND(xdiLFr!tRpcz^M1IA>bjLp z84;|9DNHCe7Zio9V&;5O_L}Ol!Y?l&`@EyGv-pG*EBVWLAZsWUpd*M)SZo6APr{0% z0~-)SIZ`W~5KdUYP@Jzf1Qey|gH?<#H8IyB zoBFBN3syq^8^<{~Y15s;2`7_Pot&r=7T&>b>=WF(w zshofn7To{j?Dw|X$$4P^Z~?;EV^Ijl;oSGKd3MgJ=`q@2Ge_K6<5r8CrT;u6M|Wel zBm!|(#d9=Th6ga5vfIb1`zoytr$(3W>)*&EB~@EPEvg_=$e-`&bYC8CdkYBQqN!Bl zcZX8Y&O~4=Ab6w(;FR{7+v?RxSA^P1AKT>ww-NmPd zTzxiGYnLZg1w-^6xmEO$mBT#>W>>QY)3Wnigr+q0J00^_z}y!V^-h$BxHFZooieqW ze<)<-{?LOZ41kQ|x=G;n%oTcs&*;yEY_%WptErWk zn)8JkyAD+wF;1Z!N;`eIT_L^X*Xt*n(hs)Sk^9XFpDXzFqe-itv?8SY0o%xYgbCA0 zZ}MI46LrF=fb&A-B#M;3x^{XPBy!4`i6|rn#dAAopXV{IE2;z_6|-o%5Ve%E*j6)m z$Fpb^-HE2oF`g+3#DMe(PnMjPh|#p)3V946aN)1`;T&RTVzernX1?hn-_nQ$dE7eK zl|z)5(xivy*6hM=$GOJ(hlu!`gzu%JZI%2dqs@-Ejn{}bM~D&UjO$p&rl2*9Lw515 zqeOzzVxs6#j%tx*!R26i(e`;Y&IbS~ONq37jfco~>_n=3QcyMfCI_sz5Iz9q0@s-9 ziPCr`e%n<@ZO^gOoDZaM4sJ%`W?)ufjEw9$)V*_%YB=!*52b8Jmo-lk{68N)4Z1J$ zfiqWE{*M9P^5Neb@HVVqxxOajO_k6S(`?N;M5K8;UB@HIGBAR~!P&uTMg+`k<`hp4 zArSG!Zd^Ur)jW~K!(2ar)O(NEQPrVl)517cR%Sugk|GgWvJ7|_6>co-5h z$kB?=Yuye#Wu73PkaFjem&_hvlwT|FpoBMNE6Lr8uk5x|N zLEH!^op9sBWn8LE)iInjcV3-9W(s!(y|a90rsD_hVU4C4m^MUDop$C@Kcc2xv1W2b zTvP}X#ZgI(kRu_HXR+^7tFN^4Sm-pbHS<7`%$idnbRkfxZcC1sGjr^u8mm1_n06#B zr{@YEZ&J1v@ANLRlq>(1?A*V7UUgGG_iyO`NgxNQ`UUVO|%g2YYJ zw$ei(6ee;(*-L97?TZKXh<}+m6e8NFs)n1==84`}*<;FtDsc{9-}7|Cd}U2T9}DwL z-&frEXEFZ8;tw*&hhJWh=6kLh+=>Q7Q#Mc=xx$cRRmZfDbsn0@h}6$<46oxj?s-K; ziz;%RprdU4m*rgiFZ$Vgb}k-P@&vuE)T87ktb2zSwDvve{8xVB3*2 zu3Nr1^ViMDqR+O_cKj~T)CsK^7^ie2rbLY2MTQx6{czIO+(;pcQ+jn3LvtK)$Un9l zmvT|fZ4%eK5r7i6BW$MwwFM-^BrQvdxlC2y^y{de3{!71bm^4>R$@XJAjbE1c191b0Ok_fTl8k246)j>IYGXts9>2a_??dUy01`{Kv8KVE*l@s5FCr{K$m z{$*5ZnST`{Gf0BG&r}qXx43)nDnl<(c++dnNFF)Mj$FH|If4!$ z+ax+Ttj*7g+|NL-)5zC>RPq{}cR@|p_=hZq8S#r0`KXAG;QeoozrXp_7~Yt*kX&Q4 zL|qv^!m52*c5Ix~a=geW0#FW6DDTWbWFwjz|Di%ar#5W6EF=B#`v9q5dM~gq{7(YE z{2w83yHOv|HT2-$adZe{S$AYrSbs)fPG5#mN)?m6+#^TiE?IOSvQakhn};!UX*hGk|t9aEweFg+4e%UmnR|ng;rjX{9RDY5jql ziQ+(0DnBuGQ$C#+xbs}y2W}*G_VEju;{wmgw=kKrlkD$-rUZ20wV~Z;pKM+Lo%^9?mj>x`dU*?V`)>kzLTNMi|=%^KiFs~=wb(}xw~F&%H}#EmqJ zYjb2eITYy9t(rX%Mg{WPk(xDd&o^wj$%j+r+h=84pyFp3(J#72A>SyI9<4uUCir$LIZ*W1B09yUnnX@$c#V`LMQ1X+rd${Q3dCs)@#g5m0B#|lg!!4+jf9BT-`RBY=P!RaEe&S6%q z{PZV{(RVr?^RN@!i=UMUN|^SDufPGnoDjOxULCJCw3n8WyWKAlDCSVkg3$FIa@#PB zk1TpB+Q$tN=fR_gA6~|=&l!T(alVa_e-_fU6xUlBqRUH#urIUgIUIQCp0rk6%kAVqeX0LqZYOAZ`skzeYa12M>TRWH5 z;So&2)t(kL8Y1Tv@@#5E%O$ArvY}eOOkh~kwO=j!v`CIO8f7!aX{s>SRZ@y^UZ(MC zm;W^T2Y>7A`H4RU!s7-L{SULav$`$ancb1@%HSA4^36TX66uOf(KPKDhYiAr*u2Ol zE?K;UePtK^*I$4A*T2}2KmPTX!~7w=e59Q36R{(!aDY%1&(7#?&4kUcb~6qMe^x@& z6+6mC#7JHXT$C0@e*W;TF$R3B7!RcADWyp$OJ=|#PRBr{s3R6rbZR@5gmx(@JK+l4 zrtZ=a@Z)0$e%S&1KX3g1H~w*D|I+IZUj}@8e&bsA!hb}F8vj6q#^toV)-6%Xq+eDt zTiTNkJ#8r@R?N=LJc#I|XKyOXa^m@v%KhsvN=W7C|N7UzAYOm)k8<FAYo4SD>>>9^aO5>HuDHg`7+4f`b=~0fY_5$@V&cCyK!2WT~Q&$emtZ zV5~@{<5nc)+}qc2ympQIHnhfgP)$y=lk)$haCze&`hdnx>_*Jr2{rX8q9y8LQoR>J z5aY{~Su4m~$r?9j(RG%dLb54aOW!2_>j(c1mqJp--XPiX=B9NZu7o{cUaK{7TEsH? zGNCi^Z#5@r%0@r1bhm6RZdunK-aR4`>m0N$#?d2?kuY##V2R;auOx|H0H?>F3q#gv zvg?=eIP#SS@8QVxT}j#g~m zB)|T|7yVwMC@dzw@aQKnKYaE7!-pLflI6^fWS!`7gA~*w=mFX;G1)b|oF9uE#Yij! zLibfL&|;WTQ@h0%)u&dx(0XPEYECh03X%qeDwnZVRLmw0LW0DxrVWrl_ucZjiVcZ!wtXy~4&qBEqa$sQLKdTy`WprLPvj!#Oh& zXQ1*716^P^eQGtxNt=|Gl0&HsrpsJA1c-M*ZxhLbDdSh%VCUpx;fzN9afHV5mD7j# z!3Ph%kLP8QYbhV((kqIMDWtSRIg}tnjm^VO$k>VqMl=LH-B?w7f%^F5D)7@|-q7(q zUkTp0=MvF}=iQFRDB}1Za%h-X9|JvQ2orPZkDmI4>Aq0>V3i0$YSY{*7~>DGBO^sO zhIJsn!&z^yVGKP~^j6tRT-+;`Lk)3M4uLSV*0t}B_ut2wQ(w=tU`F^*MSV$KQ>$Ec zRKB%HT=@_wc}hX`@f0%K(G{U~%0~U5d}oe#R=Gmt%^kdpL!yjZ!KB+DIme>o@FusK zlaX7A3yOBRwpx{N?r_Q4V=y#WsQVe<49Z+caWpXBsq@h#ak>+Hr8e)U`0x{iyn|rItCMe9iG0fqiPiXUV!QWEAoQ+}u&clO zJMM{#DnY20&WnwT91}nahofGMb3q15wCF}iUvKR`gmx*+nt7;POvlm~3Ph~`mQtsF zyR;rVhqyU`d@it2#NXP8J2xo<$B(!eT3^#5pW;^}35Ha3z>rH07^aqH2lr9(1q8C* zpTKLPHlJ0F#o7fXyku2JM?Pf%h8;Gs%q~_so+Yc0m%~!YV0j6qk%$}5AzIO%U7Dy& zL-wYAX2ygBP__ep?)gj4YqK(PH_Ys`oeceGR1;2_-;SxzqMA0sK5OcCyRm)q`KEmd zo5~&Sd01vw)1Eoy9?&g@iZ>oSpmcob>@Cd_q;OQ?KE{QLJJ?aV#|hcz6qb=r z0M3zj`h2mWskk9VA(TuOf<-4=Cco0O%wN6M%E~MgV8z#rtKX@6f7hw$nccyjLiP;F9r`7|KEX~NZq+a`*1?Q7# zrW0c4Dj!A>l0IeQ!66FCP^m^nZxMLLPffJx{&S;fLu1gevnk=$Yzb&lcno3|f*@h# z5QhUhoDs^b-&cnPAV&*nE&Z>sX?Z%`dJC~v*#XlD?J6UVHE5-3EATZ~IR0S?O7 z6S7HMATmIrHAtE)7)Zkz17tuREvC%2BFu)Ixv)?)c;pc+8BG_8<+O^>Og{Mre4mWt zl5jLlPR0Y+D#{BYgqA~(7cyjt(n&=#SjHt`AZc@^=1a{)HrUXI)liI{LV8O3o!FWC zS^OjE1g^n5cAWECGEpcoEeml}b22?4(g#G(Xwcf3CTR(g?`fhezd}pzY9AGIZ%UlD zvnal@_a}%{(X)(l-SKK9%7~$(hP4bIMdQl`52)No22(OQS$32f=Ph$EnAq*;L?ASr zgoYEX!x?RuJt8|@cjS>5B>3UPg9yfCRl200oATJ}KPh(J(nPJXxNaL)O^9W(qpOQF!f-QjPAR^5NFz@sMLix%bi|UMf;+Y9cW@=Prklc8 zNT-hJub*Y*S_-y*y4vR?zwk4NO>T4sD@N5up?)&kz?A58aN8||Gg7K`fi)xcN>nQG z3wJhsCv@hvW0Wv0+d?HlUkj<^m{6!G+wcuQF6SV`1Tlme#Tppjj+00H5S3f$d!b+{7fxOdne+ zZ5(39*3~(Sh>QMVDt@{1JHc#MR-{(+XmlOGwv+?@2f)s(0Hd2@ju>W=t}_?W#Fk4R zg3dDB3%s^R!h2*=oU`%@nEDnF^<{R#Uc_)CTqJ|fjHO?cL9&i2P0oQHMfstdI_PBa zAXHx$&=(^972cw55t|oF6q$aD7I}f=C3FuY1w~s7v)JR=ad7tBB0?qTFL5 zs6jasB@zSVB;yuO=QDLk@nd>8(bDo^hN!2?%%Ay$+N2!)RY4ds?sK+;Gm{guH@9mx z;v*D?p@Fv{Al^=nBR!>zQ%QlY^j1?8Y>m0pW6^8(^g3lL`%vb~lgCa@GY^Ymu4pJr_x}Z$H3ef`Ggz6mDB*w~^885^a$flzTt!o)oEAzj1 zQLGU)0rD*c-4~XhaUibNi%e#Itd5NOO^sKE76=@D89d}w>1o_jvMpM@sJPIQkcahB zZOz;p>T>co%@@k~(8Exma{7Ilgj+L{DCC;JV9s(-JmF3c*4ZPMGrxO9)WhTy>x6Zs z!h4y1rbWVzUyjQ_w$zHq-!PE9)FV(Y(+7?~Nh9}W|At_ehzj||w4R7jmvR;*;WzmR z)tZ7Hvx4k4jkA%fEV{kkI zd4Ys#mWo%PB94WqgvR3oP;MN7H^#7Q_6l<8Rba+NaKP^w{KqOLQ(KP-jv@NK94YRG zoBE-UpXiKYO(7niIjKGlG*Teu*l=dK)_;W98meavqzhKpLEs8hk4mfM8V-+@7wCh3 zWd1~;@&)NnQWtMgFU|w?Kf!8_RM+#-Oa||C{5yGlF!oP_2On#N`ur|^9FXYzO0D>g pe^-9s{Das(upg834?^F*{XZYWfreV1(^3Ec002ovPDHLkV1ibIk@^4t literal 0 HcmV?d00001 diff --git a/public/archive/index.xml b/public/archive/index.xml new file mode 100644 index 0000000..d810415 --- /dev/null +++ b/public/archive/index.xml @@ -0,0 +1,21 @@ + + + + Archives on jeremykidwell.info + https://jeremykidwell.info/archive/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + Archives + https://jeremykidwell.info/blog/archives.html + Mon, 01 Jan 0001 00:00:00 UTC + Jeremy Kidwell + https://jeremykidwell.info/blog/archives.html + + + + + diff --git a/public/blog/archives.html b/public/blog/archives.html new file mode 100644 index 0000000..2e2c759 --- /dev/null +++ b/public/blog/archives.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Archives + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    +
    +
    + +
    +
    + +
    +

    Links to all the blog entires on this site since 2002.

    +
    +
    + +
    + +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    +
    + + + + + + + + + diff --git a/public/blog/archives/.htaccess b/public/blog/archives/.htaccess new file mode 100755 index 0000000..5a928f6 --- /dev/null +++ b/public/blog/archives/.htaccess @@ -0,0 +1 @@ +Options -Indexes diff --git a/public/categories/index.html b/public/categories/index.html new file mode 100644 index 0000000..926d6e0 --- /dev/null +++ b/public/categories/index.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Categories + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    + +

    Category Index

    +

    + + +

    + All Posts by Date · All Posts by Category + +
    +
    +
    +
    + +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + + + + + diff --git a/public/categories/index.xml b/public/categories/index.xml new file mode 100644 index 0000000..0cf6148 --- /dev/null +++ b/public/categories/index.xml @@ -0,0 +1,12 @@ + + + + Categories on jeremykidwell.info + https://jeremykidwell.info/categories/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + diff --git a/public/css/bigfoot-default.css b/public/css/bigfoot-default.css new file mode 100755 index 0000000..9774a1e --- /dev/null +++ b/public/css/bigfoot-default.css @@ -0,0 +1,249 @@ +.bigfoot-footnote__button { + position: relative; + z-index: 5; + top: -0.1em; + box-sizing: border-box; + -moz-box-sizing: border-box; + display: inline-block; + padding: 0.35em; + margin: 0 0.1em 0 0.2em; + border: none; + border-radius: 0.3em; + cursor: pointer; + background-color: rgba(110, 110, 110, 0.2); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + font-size: 1rem; + line-height: 0; + vertical-align: middle; + text-decoration: none; + -webkit-font-smoothing: antialiased; + -webkit-transition-property: background-color; + transition-property: background-color; + -webkit-transition-duration: 0.25s; + transition-duration: 0.25s; +} +.bigfoot-footnote__button:hover, .bigfoot-footnote__button:focus { + outline: none; + background-color: rgba(110, 110, 110, 0.5); +} +.bigfoot-footnote__button:active { + background-color: rgba(110, 110, 110, 0.5); +} +.bigfoot-footnote__button.is-active { + background-color: #6e6e6e; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; +} +.bigfoot-footnote__button:after { + content: ''; + display: table; + clear: both; +} + +.bigfoot-footnote__button__circle { + display: inline-block; + width: 0.25em; + height: 0.25em; + margin-right: 0.25em; + float: left; +} +.bigfoot-footnote__button__circle:last-child { + margin-right: 0; +} + +.bigfoot-footnote__container { + display: inline-block; + position: relative; + text-indent: 0; +} + +@media not print { + .footnote-print-only { + display: none !important; + } +} +@media print { + .bigfoot-footnote, + .bigfoot-footnote__button { + display: none !important; + } +} +.bigfoot-footnote { + position: absolute; + z-index: 10; + top: 0; + left: 0; + display: inline-block; + box-sizing: border-box; + max-width: 90%; + margin: 1.96924em 0; + background: #fafafa; + opacity: 0; + border-radius: 0.5em; + border: 1px solid #c3c3c3; + box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); + line-height: 0; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, transform; + -webkit-transition-duration: 0.25s; + transition-duration: 0.25s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transform: scale(0.1) translateZ(0); + transform: scale(0.1) translateZ(0); + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; +} +.bigfoot-footnote.is-positioned-top { + top: auto; + bottom: 0; +} +.bigfoot-footnote.is-active { + -webkit-transform: scale(1) translateZ(0); + transform: scale(1) translateZ(0); + opacity: 0.97; +} +.bigfoot-footnote.is-bottom-fixed { + position: fixed; + bottom: 0; + top: auto; + left: 0; + right: auto; + -webkit-transform: translateY(100%); + -ms-transform: translateY(100%); + transform: translateY(100%); + width: 100%; + margin: 0; + border-radius: 0; + opacity: 1; + border-width: 1px 0 0; + -webkit-transition: -webkit-transform 0.3s ease; + transition: transform 0.3s ease; +} +.bigfoot-footnote.is-bottom-fixed.is-active { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__wrapper { + margin: 0 0 0 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + max-width: 100%; +} +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__wrapper, +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__content { + border-radius: 0; +} +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__tooltip { + display: none; +} +.bigfoot-footnote.is-scrollable:after { + content: ''; + position: absolute; + bottom: 0.3375em; + left: 0.3375em; + z-index: 14; + display: block; + height: 0.78125em; + width: 0.625em; + background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTJweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgMTIgMTUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4iPgogICAgPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkFycm93IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjAwMDAwMCwgMS4wMDAwMDApIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNSwwIEw1LDExLjUiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjUsNy41IEw1LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LjUsNy41IEw5LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuMDAwMDAwLCAxMC4wMDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTcuMDAwMDAwLCAtMTAuMDAwMDAwKSAiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo="); + background-size: cover; + opacity: 0.1; + transition-properties: opacity; + -webkit-transition-duration: 0.25s; + transition-duration: 0.25s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} +.bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:before, .bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:after { + content: ''; + position: absolute; + width: 100%; + z-index: 12; + left: 0; +} +.bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:before { + top: -1px; + height: 1.1em; + border-radius: 0.5em 0.5em 0 0; + background-image: -webkit-linear-gradient(top, #fafafa 50%, rgba(250, 250, 250, 0) 100%); + background-image: linear-gradient(to bottom, #fafafa 50%, rgba(250, 250, 250, 0) 100%); +} +.bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:after { + bottom: -1px; + height: 1.2em; + border-radius: 0 0 0.5em 0.5em; + background-image: -webkit-linear-gradient(bottom, #fafafa 50%, rgba(250, 250, 250, 0) 100%); + background-image: linear-gradient(to top, #fafafa 50%, rgba(250, 250, 250, 0) 100%); +} +.bigfoot-footnote.is-scrollable ::-webkit-scrollbar { + display: none; +} +.bigfoot-footnote.is-fully-scrolled:after, .bigfoot-footnote.is-fully-scrolled:before { + opacity: 0; + -webkit-transition-delay: 0; + transition-delay: 0; +} + +.bigfoot-footnote__wrapper { + position: relative; + z-index: 14; + width: 22em; + display: inline-block; + box-sizing: inherit; + overflow: hidden; + margin: 0; + background-color: #fafafa; + border-radius: 0.5em; + line-height: 0; +} + +.bigfoot-footnote__content { + position: relative; + z-index: 8; + display: inline-block; + max-height: 15em; + padding: 1.1em 1.3em 1.2em; + box-sizing: inherit; + overflow: auto; + -webkit-overflow-scrolling: touch; + background: #fafafa; + border-radius: 0.5em; + -webkit-font-smoothing: subpixel-antialiased; + line-height: normal; +} +.bigfoot-footnote__content img { + max-width: 100%; +} +.bigfoot-footnote__content *:last-child { + margin-bottom: 0 !important; +} +.bigfoot-footnote__content *:first-child { + margin-top: 0 !important; +} + +.bigfoot-footnote__tooltip { + position: absolute; + z-index: 12; + box-sizing: border-box; + margin-left: -0.65em; + width: 1.3em; + height: 1.3em; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + background: #fafafa; + border: 1px solid #c3c3c3; + box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); + border-top-left-radius: 0; +} +.is-positioned-bottom .bigfoot-footnote__tooltip { + top: -0.65em; +} +.is-positioned-top .bigfoot-footnote__tooltip { + bottom: -0.65em; +} diff --git a/public/css/bigfoot-default.scss b/public/css/bigfoot-default.scss new file mode 100755 index 0000000..619bc16 --- /dev/null +++ b/public/css/bigfoot-default.scss @@ -0,0 +1,619 @@ +// bigfoot - v2.1.1 - 2015.04.04 + + +// ___ ___ ___ ___ ___ ___ +// / /\ / /\ / /\ / /\ ___ / /\ / /\ +// / /::\ / /::\ / /::\ / /::\ /__/\ / /:/_ / /::\ +// / /:/\:\ / /:/\:\ / /:/\:\ / /:/\:\ \ \:\ / /:/ /\ / /:/\:\ +// / /:/~/:// /:/ \:\ / /:/~/:// /:/ \:\ \ \:\ / /:/ /:/_ / /:/~/:/ +// /__/:/ /://__/:/ \__\:\/__/:/ /://__/:/ \__\:\ ___ \__\:\/__/:/ /:/ /\/__/:/ /:/___ +// \ \:\/:/ \ \:\ / /:/\ \:\/:/ \ \:\ / /://__/\ | |:|\ \:\/:/ /:/\ \:\/:::::/ +// \ \::/ \ \:\ /:/ \ \::/ \ \:\ /:/ \ \:\| |:| \ \::/ /:/ \ \::/~~~~ +// \ \:\ \ \:\/:/ \ \:\ \ \:\/:/ \ \:\__|:| \ \:\/:/ \ \:\ +// \ \:\ \ \::/ \ \:\ \ \::/ \__\::::/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ ~~~~ \__\/ \__\/ +// +// These are the key variables for styling the popover. +// Just set the variable to none if you don't want that styling. + +// KEY VARIABLES +// ============================================================================= + +// STYLES +$popover-width: 22em !default; // Ideal width of the popover +$popover-max-width: 90% !default; // Best as a % to accommodate smaller viewports +$popover-max-height: 15em !default; // Maximum size of the content area +$popover-color-background: rgb(250, 250, 250) !default; // Color of the popover background +$popover-border-radius: 0.5em !default; // Radius of the corners of the popover +$popover-border: 1px solid rgb(195, 195, 195) !default; // Border of the popover/ tooltip +$popover-inactive-opacity: 0 !default; // Opacity of the popover when instantiated/ deactivating +$popover-active-opacity: 0.97 !default; // Opacity of the popover when active +$popover-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3) !default; // Sets the box shadow under the popover/ tooltip +$popover-bottom-position: auto !default; // Sets the bottom position of the popover. Use only when setting positionPopover to false in the script +$popover-left-position: auto !default; // Sets the left position of the popover. Use only when setting positionPopover to false in the script +$popover-tooltip-size: 1.3em !default; // Sets the side lengths of the tooltip +$popover-scroll-indicator-width: 0.625em !default; // The width of the scroll indicator +$popover-scroll-indicator-aspect-ratio: (15/12) !default; // The ratio of the height over the width of the scroll indicator +$popover-scroll-indicator-opacity: 0.1 !default; // The active opacity of scroll indicators +$popover-initial-transform-state: scale(0.1) translateZ(0) !default; // The inital transform state for the popover +$popover-active-transform-state: scale(1) translateZ(0) !default; // The transform state for the popover once it is fully activated + +// OPTIONAL ELEMENTS +$popover-include-tooltip: true !default; // Adds a tooltip pointing to the footnote button +$popover-include-scroll-indicator: true !default; // Adds an elipsis at the bottom of scrollable popovers +$popover-include-scrolly-fades: true !default; // Fades content in on scrollable popovers +$popover-scroll-indicator-icon: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTJweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgMTIgMTUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4iPgogICAgPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkFycm93IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjAwMDAwMCwgMS4wMDAwMDApIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNSwwIEw1LDExLjUiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjUsNy41IEw1LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LjUsNy41IEw5LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuMDAwMDAwLCAxMC4wMDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTcuMDAwMDAwLCAtMTAuMDAwMDAwKSAiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=") !default; + + +// OTHER VARIABLES +// ============================================================================= + +// POPOVER +$popover-margin-top: 0.1em !default; +$popover-padding-content-horizontal: 1.3em !default; +$popover-padding-content-top: 1.1em !default; +$popover-padding-content-bottom: 1.2em !default; +$popover-z-index: 10 !default; // Set the base so that it's above the other body children +$popover-initial-transform-origin: 50% 0 !default; + +// POPOVER CONTENT WRAPPER +$popover-content-color-background: $popover-color-background !default; +$popover-content-border-radius: $popover-border-radius !default; + +// OTHER POPOVER ELEMENTS +$popover-tooltip-background: $popover-color-background !default; +$popover-tooltip-radius: 0 !default; +$popover-scroll-indicator-bottom-position: 0.45em !default; +$popover-scrolly-fade-gradient-start-location: 50% !default; +$popover-scroll-indicator-padding: (($popover-padding-content-horizontal/2) - ($popover-scroll-indicator-width/2)) !default; + +// TRANSITIONS +$popover-transition-default-duration: 0.25s !default; +$popover-scroll-indicator-transition-properties: opacity !default; + +// Use none for areas you don't want to transition +$popover-transition-properties: opacity, transform !default; // no mixin to do proper prefixing of the transform, so I have to do it manually; see mixin below +$popover-scroll-indicator-transition-properties: opacity !default; +$popover-scroll-up-transition-delay: 0.4s !default; // Sets the delay for the transition of the scroll indicator when scrolling upwards +$popover-transition-default-timing-function: ease !default; + + + + + +// ___ ___ ___ +// _____ /__/\ ___ ___ / /\ /__/\ +// / /::\ \ \:\ / /\ / /\ / /::\ \ \:\ +// / /:/\:\ \ \:\ / /:/ / /:/ / /:/\:\ \ \:\ +// / /:/~/::\ ___ \ \:\ / /:/ / /:/ / /:/ \:\ _____\__\:\ +// /__/:/ /:/\:|/__/\ \__\:\ / /::\ / /::\ /__/:/ \__\:\/__/::::::::\ +// \ \:\/:/~/:/\ \:\ / /://__/:/\:\ /__/:/\:\\ \:\ / /:/\ \:\~~\~~\/ +// \ \::/ /:/ \ \:\ /:/ \__\/ \:\\__\/ \:\\ \:\ /:/ \ \:\ ~~~ +// \ \:\/:/ \ \:\/:/ \ \:\ \ \:\\ \:\/:/ \ \:\ +// \ \::/ \ \::/ \__\/ \__\/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ +// +// These are the key variables for styling the button. +// Just set the variable to none if you don't want that styling. + +// KEY VARIABLES +// ============================================================================= + +$button-height: 0.95em !default; // The total height of the button +$button-width: auto !default; // The total button width (applies only if $button-apply-dimensions is true) +$button-inner-circle-size: 0.25em !default; // Total height/width of the ellipsis circles +$button-border-radius: 0.3em !default; // Border radius on the button itself +$button-left-margin: 0.2em !default; // Margin between the button and the text to its left +$button-right-margin: 0.1em !default; // Margin between the button and the text to its right +$button-vertical-adjust: -0.1em !default; // Pushes the buttons along the vertical axis to align it with text as desired +$button-inner-circle-left-margin: 1*$button-inner-circle-size !default; // Space between the ellipsis circles + +$button-color: rgb(110, 110, 110) !default; // Background color of the button +$button-hovered-color: $button-color !default; // Background color of the button when being hovered +$button-activating-color: $button-color !default; // Background color of the button when being clicked +$button-active-color: $button-color !default; // Background color of the button when active +$button-standard-opacity: 0.2 !default; // Opacity for when the button is just sittin' there +$button-hovered-opacity: 0.5 !default; // Opacity for when the button is being hovered over +$button-activating-opacity: $button-hovered-opacity !default; // Opacity for when the button is being clicked +$button-active-opacity: 1 !default; // Opacity for when the button is active +$button-active-style-delay: 0.1s !default; // Delay before applying .active styles; this can be used to match to the popover activation transition + +$button-inner-circle-color: white !default; // Background color of the ellipsis circle +$button-inner-circle-border: none !default; // Border of the ellipsis circle + + +// OTHER VARIABLES +// ============================================================================= + +$button-total-padding: $button-height - $button-inner-circle-size !default; +$button-per-side-padding: 0.5*$button-total-padding !default; +$button-transition-properties: background-color !default; + + + +// ----- + + +// ___ ___ ___ ___ +// /__/\ ___ /__/| ___ /__/\ / /\ +// | |::\ / /\ | |:| / /\ \ \:\ / /:/_ +// | |:|:\ / /:/ | |:| / /:/ \ \:\ / /:/ /\ +// __|__|:|\:\ /__/::\ __|__|:| /__/::\ _____\__\:\ / /:/ /::\ +// /__/::::| \:\\__\/\:\__/__/::::\____\__\/\:\__ /__/::::::::\/__/:/ /:/\:\ +// \ \:\~~\__\/ \ \:\/\ ~\~~\::::/ \ \:\/\\ \:\~~\~~\/\ \:\/:/~/:/ +// \ \:\ \__\::/ |~~|:|~~ \__\::/ \ \:\ ~~~ \ \::/ /:/ +// \ \:\ /__/:/ | |:| /__/:/ \ \:\ \__\/ /:/ +// \ \:\ \__\/ | |:| \__\/ \ \:\ /__/:/ +// \__\/ |__|/ \__\/ \__\/ + +@mixin print-styles { + // These styles restore the original footnote numbers and texts when the page is printed + @media not print { + .footnote-print-only { + display: none !important; + } + } + + @media print { + .bigfoot-footnote, + .bigfoot-footnote__button { + display: none !important; + } + } +} + + + +// ----- + + +// ___ ___ ___ +// _____ /__/\ ___ ___ / /\ /__/\ +// / /::\ \ \:\ / /\ / /\ / /::\ \ \:\ +// / /:/\:\ \ \:\ / /:/ / /:/ / /:/\:\ \ \:\ +// / /:/~/::\ ___ \ \:\ / /:/ / /:/ / /:/ \:\ _____\__\:\ +// /__/:/ /:/\:|/__/\ \__\:\ / /::\ / /::\ /__/:/ \__\:\/__/::::::::\ +// \ \:\/:/~/:/\ \:\ / /://__/:/\:\ /__/:/\:\\ \:\ / /:/\ \:\~~\~~\/ +// \ \::/ /:/ \ \:\ /:/ \__\/ \:\\__\/ \:\\ \:\ /:/ \ \:\ ~~~ +// \ \:\/:/ \ \:\/:/ \ \:\ \ \:\\ \:\/:/ \ \:\ +// \ \::/ \ \::/ \__\/ \__\/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ + + + +//* +// The button that activates the footnote. By default, this will appear as a +// flat button that has an ellipse contained inside of it. + +// @state .is-active - The associated popover has been activated and is visible. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__button { + // POSITIONING + position: relative; + z-index: 5; + top: $button-vertical-adjust; + + // DISPLAY AND SIZING + box-sizing: border-box; + -moz-box-sizing: border-box;; + display: inline-block; + padding: $button-per-side-padding; + margin: 0 $button-right-margin 0 $button-left-margin; + + // BACKDROP + border: none; + border-radius: $button-border-radius; + cursor: pointer; + background-color: rgba($button-color, $button-standard-opacity); + backface-visibility: hidden; + + // TEXT + font-size: 1rem; + line-height: 0; + vertical-align: middle; + text-decoration: none; + -webkit-font-smoothing: antialiased; + + // TRANSITIONS + transition-property: $button-transition-properties; + transition-duration: $popover-transition-default-duration; + + &:hover, + &:focus { + outline: none; + background-color: rgba($button-hovered-color, $button-hovered-opacity); + } + + &:active { + background-color: rgba($button-activating-color, $button-activating-opacity); + } + + &.is-active { + background-color: rgba($button-active-color, $button-active-opacity); + transition-delay: $button-active-style-delay; + } + + // Clearfix + &:after { + content: ''; + display: table; + clear: both; + } +} + + + + + +// _____ ___ ___ +// / /::\ / /\ ___ / /\ +// / /:/\:\ / /::\ / /\ / /:/_ +// / /:/ \:\ / /:/\:\ / /:/ / /:/ /\ +// /__/:/ \__\:| / /:/ \:\ / /:/ / /:/ /::\ +// \ \:\ / /://__/:/ \__\:\ / /::\ /__/:/ /:/\:\ +// \ \:\ /:/ \ \:\ / /://__/:/\:\\ \:\/:/~/:/ +// \ \:\/:/ \ \:\ /:/ \__\/ \:\\ \::/ /:/ +// \ \::/ \ \:\/:/ \ \:\\__\/ /:/ +// \__\/ \ \::/ \__\/ /__/:/ +// \__\/ \__\/ + +//* +// Each of the three circles forming the ellipse within the button. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__button__circle { + // DISPLAY AND SIZING + display: inline-block; + width: $button-inner-circle-size; + height: $button-inner-circle-size; + margin-right: $button-inner-circle-left-margin; + float: left; + + // Gets rid of margin on the last circle + &:last-child { margin-right: 0; } +} + + + + + +// ___ ___ ___ ___ ___ +// / /\ / /\ /__/\ ___ / /\ ___ /__/\ +// / /:/ / /::\ \ \:\ / /\ / /::\ / /\ \ \:\ +// / /:/ / /:/\:\ \ \:\ / /:/ / /:/\:\ / /:/ \ \:\ +// / /:/ ___ / /:/ \:\ _____\__\:\ / /:/ / /:/~/::\ /__/::\ _____\__\:\ +// /__/:/ / /\/__/:/ \__\:\/__/::::::::\ / /::\ /__/:/ /:/\:\\__\/\:\__ /__/::::::::\ +// \ \:\ / /:/\ \:\ / /:/\ \:\~~\~~\//__/:/\:\\ \:\/:/__\/ \ \:\/\\ \:\~~\~~\/ +// \ \:\ /:/ \ \:\ /:/ \ \:\ ~~~ \__\/ \:\\ \::/ \__\::/ \ \:\ ~~~ +// \ \:\/:/ \ \:\/:/ \ \:\ \ \:\\ \:\ /__/:/ \ \:\ +// \ \::/ \ \::/ \ \:\ \__\/ \ \:\ \__\/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ \__\/ + +//* +// The container for the button and popover. This is required so that the popover +// is guaranteed to have a relatively-positioned container, and to help with the +// positioning calculation. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__container { + display: inline-block; + position: relative; + text-indent: 0; +} + + + + + +// ___ ___ ___ +// / /\ / /\ ___ /__/\ ___ +// / /::\ / /::\ / /\ \ \:\ / /\ +// / /:/\:\ / /:/\:\ / /:/ \ \:\ / /:/ +// / /:/~/:// /:/~/:/ /__/::\ _____\__\:\ / /:/ +// /__/:/ /://__/:/ /:/___\__\/\:\__ /__/::::::::\ / /::\ +// \ \:\/:/ \ \:\/:::::/ \ \:\/\\ \:\~~\~~\//__/:/\:\ +// \ \::/ \ \::/~~~~ \__\::/ \ \:\ ~~~ \__\/ \:\ +// \ \:\ \ \:\ /__/:/ \ \:\ \ \:\ +// \ \:\ \ \:\ \__\/ \ \:\ \__\/ +// \__\/ \__\/ \__\/ + +@include print-styles; + + + +// ----- + + +// ___ ___ ___ ___ ___ ___ +// / /\ / /\ / /\ / /\ ___ / /\ / /\ +// / /::\ / /::\ / /::\ / /::\ /__/\ / /:/_ / /::\ +// / /:/\:\ / /:/\:\ / /:/\:\ / /:/\:\ \ \:\ / /:/ /\ / /:/\:\ +// / /:/~/:// /:/ \:\ / /:/~/:// /:/ \:\ \ \:\ / /:/ /:/_ / /:/~/:/ +// /__/:/ /://__/:/ \__\:\/__/:/ /://__/:/ \__\:\ ___ \__\:\/__/:/ /:/ /\/__/:/ /:/___ +// \ \:\/:/ \ \:\ / /:/\ \:\/:/ \ \:\ / /://__/\ | |:|\ \:\/:/ /:/\ \:\/:::::/ +// \ \::/ \ \:\ /:/ \ \::/ \ \:\ /:/ \ \:\| |:| \ \::/ /:/ \ \::/~~~~ +// \ \:\ \ \:\/:/ \ \:\ \ \:\/:/ \ \:\__|:| \ \:\/:/ \ \:\ +// \ \:\ \ \::/ \ \:\ \ \::/ \__\::::/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ ~~~~ \__\/ \__\/ +// + + + +//* +// The popover for the footnote. This popover will be, by default, be sized and positioned +// by the script. However, many of the sizes can be established in this stylesheet and +// will be respected by the script. `max-width` will limit the width of the popover +// relative to the viewport. `width` (on `bigfoot-footnote__wrapper`) will set the +// absolute max width. Max height can be set via a `max-height` property +// on `bigfoot-footnote__content`. + +// By default, the popover has a light gray background, a shadow for some depth, +// rounded corners, and a tooltip pointing to the footnote button. + +// @state .is-active - The popover has been activated and is visible. +// @state .is-positioned-top - The popover is above the button. +// @state .is-positioned-bottom - The popover is below the button. +// @state .is-scrollable - The popover content is greater than the popover height. +// @state .is-fully-scrolled - The popover content is scrolled to the bottom. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote { + // POSITIONING + position: absolute; + z-index: $popover-z-index; + top: 0; left: 0; + + // DISPLAY AND SIZING + display: inline-block; + box-sizing: border-box; + // Height is set in .footnote-content-wrapper + max-width: $popover-max-width; + // 1.414213... is to get the diagonal height of the tooltip using pythagorus, yo. + margin: ((1.4142135624 * $popover-tooltip-size / 2) + $button-height + $popover-margin-top) 0; + // fits the popover to the contents + + // BACKDROP + background: $popover-color-background; + opacity: $popover-inactive-opacity; + border-radius: $popover-border-radius; + border: $popover-border; + box-shadow: $popover-box-shadow; + + // TEXT + line-height: 0; + + // TRANSITIONS + transition-property: $popover-transition-properties; + transition-duration: $popover-transition-default-duration; + transition-timing-function: $popover-transition-default-timing-function; + + // TRANSFORMS + transform: $popover-initial-transform-state; + transform-origin: $popover-initial-transform-origin; + + &.is-positioned-top { + top: auto; + bottom: 0; + } + + &.is-active { + transform: $popover-active-transform-state; + opacity: $popover-active-opacity; + } + + &.is-bottom-fixed { + // POSITIONING + position: fixed; + bottom: 0; top: auto; + left: 0; right: auto; + transform: translateY(100%); + + // DISPLAY AND SIZING + width: 100%; + margin: 0; + + // BACKDROP + border-radius: 0; + opacity: 1; + border-width: 1px 0 0; + + // TRANSITIONS + transition: transform 0.3s ease; + + &.is-active { + transform: translateY(0); + } + + .bigfoot-footnote__wrapper { + margin: 0 0 0 50%; + transform: translateX(-50%); + max-width: 100%; + } + + .bigfoot-footnote__wrapper, + .bigfoot-footnote__content { + border-radius: 0; + } + + .bigfoot-footnote__tooltip { + display: none; + } + } + + &.is-scrollable { + // A scrollable indicator in the left margin of the popover. + &:after { + // CONTENT + content: ''; + + // POSITIONING + position: absolute; + bottom: $popover-scroll-indicator-padding; + left: $popover-scroll-indicator-padding; + z-index: ($popover-z-index + 4); + + // DISPLAY AND SIZING + display: block; + height: ($popover-scroll-indicator-width*$popover-scroll-indicator-aspect-ratio); + width: $popover-scroll-indicator-width; + + // BACKDROP + background-image: $popover-scroll-indicator-icon; + background-size: cover; + opacity: $popover-scroll-indicator-opacity; + transition-properties: $popover-scroll-indicator-transition-properties; + transition-duration: $popover-transition-default-duration; + transition-timing-function: $popover-transition-default-timing-function; + } + + .bigfoot-footnote__wrapper { + &:before, + &:after { + content: ''; + position: absolute; + width: 100%; + // Above the content + z-index: ($popover-z-index + 2); + left: 0; + } + + &:before { + top: -1px; + height: $popover-padding-content-top; + border-radius: $popover-border-radius $popover-border-radius 0 0; + background-image: linear-gradient(to bottom, $popover-color-background $popover-scrolly-fade-gradient-start-location, transparentize($popover-color-background, 1) 100%); + } + + &:after { + bottom: -1px; + height: $popover-padding-content-bottom; + border-radius: 0 0 $popover-border-radius $popover-border-radius; + background-image: linear-gradient(to top, $popover-color-background $popover-scrolly-fade-gradient-start-location, transparentize($popover-color-background, 1) 100%); + } + } + + ::-webkit-scrollbar { display: none; } + } + + &.is-fully-scrolled { + &:after, + &:before { + opacity: 0; + transition-delay: 0; + } + } +} + + + +//* +// Wraps around the footnote content. This is necessary in order to have an element +// above the tooltip and that can provide top and bottom indicators that there is +// additional content on scrollable popovers. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__wrapper { + // POSITIONING + position: relative; + // Above the outer tooltip, below the inner tooltip + z-index: ($popover-z-index + 4); + + // DISPLAY AND SIZING + width: $popover-width; + display: inline-block; + box-sizing: inherit; + overflow: hidden; + margin: 0; + + // BACKDROP + background-color: $popover-color-background; + border-radius: $popover-border-radius; + + // TEXT + line-height: 0; +} + + + +//* +// Contains the actual footnote content. There is very little prescription here +// on the footnote content itself, except for removing and top margin on the first +// element and bottom margin on the last child. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__content { + // POSITIONING + position: relative; + z-index: ($popover-z-index - 2); // Below fading bars + + // DISPLAY AND SIZING + display: inline-block; + max-height: $popover-max-height; + padding: $popover-padding-content-top $popover-padding-content-horizontal $popover-padding-content-bottom; + box-sizing: inherit; + overflow: auto; + -webkit-overflow-scrolling: touch; + + // BACKDROP + background: $popover-content-color-background; + border-radius: $popover-content-border-radius; + + // TEXT + -webkit-font-smoothing: subpixel-antialiased; + line-height: normal; + + // INTERIOR ELEMENTS + img { max-width: 100%; } + *:last-child { margin-bottom: 0 !important; } + *:first-child { margin-top: 0 !important; } +} + + + +//* +// A triangular shape pointing towards the footnote button. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__tooltip { + // POSITIONING + position: absolute; + // Above the footnote-main-wrapper and the outer tooltip + z-index: ($popover-z-index + 2); + + // DISPLAY AND SIZING + box-sizing: border-box; + margin-left: (-0.5 * $popover-tooltip-size); + // Smaller by one border-width's worth + width: $popover-tooltip-size; + height: $popover-tooltip-size; + transform: rotate(45deg); + + // BACKDROP + background: $popover-tooltip-background; + border: $popover-border; + box-shadow: $popover-box-shadow; + border-top-left-radius: $popover-tooltip-radius; + + .is-positioned-bottom & { + top: (-0.5 * $popover-tooltip-size); + } + + .is-positioned-top & { + bottom: (-0.5 * $popover-tooltip-size); + } +} diff --git a/public/css/demo.css b/public/css/demo.css new file mode 100755 index 0000000..c32b010 --- /dev/null +++ b/public/css/demo.css @@ -0,0 +1,327 @@ +/* =Typography +-----------------------------------------------------------------------------*/ +body { + font-family: 'ff-tisa-web-pro', Georgia, 'Times New Roman', Times, Serif; + font-size: 1.05em; + line-height: 1.6em; + background-color: #faf8f8; +} + +form, input[type="search"], select[multiple="multiple"] {font-family: 'ff-tisa-web-pro', 'Trebuchet MS', Helvetica, Arial, sans-serif;} + +h1, h2, h3, h4, h5 { + font-family: 'ff-tisa-web-pro', 'Trebuchet MS', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-style: italic; + color: #36454f; +} +h2, h3, h4, h5 { + font-weight: normal; + font-style: italic; +} +h2, h3 { + text-transform: lowercase; + font-family: 'ff-meta-serif-sc-web-pro', 'Trebuchet MS', 'Helvetica Neue', Tahoma; + font-style: normal; +} + +.label-red { + background-color: #36454f; +} + +a {color: #36454f; + text-decoration:none; + border-bottom: dotted 1px #A1A3A1;} + +a:hover {text-decoration:underline;} + +a.badge.badge-red { color: #fff;} + +/* =Code +-----------------------------------------------------------------------------*/ +pre, +code, +kbd, +samp, +var, +output { + font-size: 90%; + font-style: normal; + font-family: PragmataPro, Menlo, Monaco, "Andale Mono", "Lucida Console", "Courier New", monospace; +} + +/* =Common +-----------------------------------------------------------------------------*/ +img, +#feedback, +#banner, +#intro li { + border-radius: 3px; +} + +nav {text-transform: lowercase; + font-family: 'ff-meta-serif-sc-web-pro';} + +.hd {font-family: 'ff-tisa-web-pro'; } + +.caps {text-transform: lowercase; +font-family: 'ff-meta-serif-sc-web-pro'; } + + +.compact { margin: 0 0 0 1.3em; } + +hr {border-top: 1px solid #b3cde0; margin-top:5ex; margin-bottom: 5ex;} + +.separator {border-top: 5px solid #b3cde0;} + +h2 {border-bottom: 1px solid #b3cde0;} + +h2 a {border-bottom: none;} + +/* =Layout +-----------------------------------------------------------------------------*/ +.wrapper { + padding: 0 10px; + width: 94%; + max-width: 1300px; + margin: auto; +} +#outer { + padding: 3em 0 1em 0; + margin: 1em 0 3em 0; + background: url(hero-image1.jpg) #282828; + background-size: cover; + background-position: 50% 50%; + box-shadow: 0 0 3px #333 inset; +/* border: 1px solid #000; */ + color: #f2f2f2; + height: 200px; +} +#outer h2, +#outer h3 { + color: #ccc; +} + +#topbar { + background: #536878; + padding:0px; + margin:0ex; + /* border-bottom: 3px solid #36454f; */ +} +#midbar { + background: #eaa; + padding:0px; + margin:0ex; + /* border-bottom: 3px solid #36454f; */ +} + + +#topbar .navbar {padding-bottom:14px; font-size:120%;} +#topbar li a {color: #fff; border-bottom: none;} +#topbar li a {color: #b3cde0;} +#topbar li span a {color: #fff;} + +.avatar { + -webkit-border-radius: 50em; + -moz-border-radius: 50em; + border-radius: 50em; +} + + +.image-left { + float: left; + margin: 0 1em 1em 0; +} + +/* =Header +-----------------------------------------------------------------------------*/ +header { + padding-top: 15px; + margin-bottom: 0em; +} + +/* #header h1 { + float: left; + font-size: 48px; + margin-top: 1px; + margin-bottom: 0; + color: #ffffff; +} */ +/* #header nav { + margin-top: 1.2em; + margin-bottom: 0; + float: right; +} */ + + + +header h1 { font-size: 24px; + margin-top: 1px; + margin-bottom: 0; +/* color: #ffffff;*/ } + + +#topbar form {float:right; display:inline-block; } + + +/* =Promo +-----------------------------------------------------------------------------*/ +#promo { + margin-bottom: 1.5em; +} + +/* =Intro +-----------------------------------------------------------------------------*/ +#intro .subheader { + color: rgba(0, 0, 0, .4); + padding-bottom: .3em; + border-bottom: 1px solid #ccc; +} +#intro li { +/* background-color: #e9e6da;*/ +} + + +/* =Feedback +-----------------------------------------------------------------------------*/ +#feedback { + background-color: rgba(0,0,0,.5); + padding: 2em 3em; +} + +/* =Banner +-----------------------------------------------------------------------------*/ +#banner { + line-height: 0; + padding: 1.5em; + background-color: #e9e6da; +} + +/* =Blocks +-----------------------------------------------------------------------------*/ +#blocks dl { + overflow: hidden; + margin: 0; + padding-bottom: 1.5em; +} +#blocks dt { + float: left; + width: 22%; + margin-right: 4%; +} +#blocks dt img { + padding: 4px; + background-color: #fff; + border: 1px solid #000; + box-shadow: 4px 4px 0 #000; +} +#blocks dd { + margin: 0; + float: left; + width: 74%; + padding-bottom: 1.5em; +} + + +/* =Partners +-----------------------------------------------------------------------------*/ +#partners { + padding-top: 1.5em; +} +#partners h4 { + color: #666; +} +/* =Footer +-----------------------------------------------------------------------------*/ + +.dateblock {text-align:right; } + + +/* =Footer +-----------------------------------------------------------------------------*/ +#footer { + color: #b3cde0; + margin-top: 3ex; + padding-bottom: 20px; + font-size: .9em; + padding-top: 1em; + background-color: #536878; + overflow: hidden; +/* box-shadow: 0 2px 4px #bbb inset;*/ +/* background: #f0f0f0;*/ + border-top: 3px solid #36454f; +} +#footer a { color: #fff; } +#footer section { + float: none; + text-align:center; +} +#footer nav { + float: right; +} +#footer nav ul { + list-style: none; + margin: 0; +} +#footer nav ul li { + float: left; + margin-left: 2em; +} + + + + +/* =Tablet (Portrait) +-----------------------------------------------------------------------------*/ +@media only screen and (min-width: 768px) and (max-width: 959px) { + .wrapper { width: 748px; } +} + + + +/* =Mobile (Portrait) +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { +/* .wrapper { width: 300px; }*/ +/* #header h1 { float: none; text-align:center; font-size: 36px;}*/ +/* #header nav { float:none; text-align:center;}*/ + /* #header nav ul li { margin: 0; margin-right: 1em; } */ + #topbar .navbar {padding-bottom:12px; font-size:120%; } + #topbar .navbar li {float:left; margin-left:1.1em;} + #banner { text-align: center; margin-bottom: 1.5em; } + #footer section, #footer nav { float: none; text-align:center;} + #footer nav ul { margin-top: 1em; text-align:center;} + #footer nav ul li { margin: 0; margin-right: 1em;} + .dateblock {text-align:center;} + h1, h2, h3, h4, h5, form, input {text-align:center;} +} + + +/* =Mobile (Landscape) +-----------------------------------------------------------------------------*/ +@media only screen and (min-width: 480px) and (max-width: 767px) { + .wrapper { width: 420px; } +} + + +.grlog blockquote { font-style:normal; border: 0px ; font-size:1em;} + +.grlog blockquote blockquote { border-left: 2px solid #dddddd; } + +.grlog .datestamp { text-transform: lowercase; + font-family: 'ff-meta-serif-sc-web-pro'; } + +.grlog img { margin-left: 12px; margin-bottom: 12px; margin-top:12px;} + +.grlog p {padding-top:0.5em;} + +.oldcons img { margin-left: 0px; margin-bottom: 24px; margin-top:12px;} + +.oldcons p {padding-top:0.5em;} + +.oldcons h3 {padding-top:0.2em;} + +.logician {float: left; margin-right:16px;} + +p.capitalize { + text-transform: capitalize; +} \ No newline at end of file diff --git a/public/css/kube.css b/public/css/kube.css new file mode 100755 index 0000000..47fdca2 --- /dev/null +++ b/public/css/kube.css @@ -0,0 +1,3646 @@ +/* + Kube Framework 4 +*/ +/* =Reset +-----------------------------------------------------------------------------*/ +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +html, +body, +div, +span, +object, +iframe, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +embed, +object, +iframe, +audio, +video, +canvas, +progress, +meter, +output, +textarea { + display: block; +} +audio:not([controls]) { + display: none; + height: 0; +} +/* To prevent some browsers from inserting quotes on q and p */ +blockquote, +q { + quotes: none; +} +blockquote p:before, +blockquote p:after, +q:before, +q:after { + content: ''; + content: none; +} +/* Table reset */ +table { + border-collapse: collapse; + border-spacing: 0; +} +caption, +th, +td { + text-align: left; + vertical-align: top; +} +thead th, +thead td { + font-weight: bold; + vertical-align: bottom; +} +/* Image inside */ +a img, +th img, +td img { + vertical-align: top; +} +button, +input, +select, +textarea { + margin: 0; +} +textarea { + overflow: auto; + vertical-align: top; + resize: vertical; +} +/* Normalize buttons in IE */ +button { + width: auto; + overflow: visible; +} +/* Hand cursor on clickable controls */ +input[type="reset"], +input[type="submit"], +input[type="file"], +input[type="radio"], +input[type="checkbox"], +select, +button { + cursor: pointer; +} +/* Trick with vertical align for radio and checkbox */ +input[type="radio"], +input[type="checkbox"] { + font-size: 110%; + position: relative; + top: -1px; + margin-right: 3px; +} +/* Normalize search fields */ +input[type="search"] { + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} +/* Normalize horizontal line */ +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ddd; +} +/* Responsive media */ +img, +video, +audio, +embed, +object { + max-width: 100%; +} +img, +video, +embed, +object { + height: auto; +} +embed, +object { + height: 100%; +} +img { + vertical-align: middle; + -ms-interpolation-mode: bicubic; +} +/* =Typography +-----------------------------------------------------------------------------*/ +body { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 0.9375em; + line-height: 1.65em; + background: #ffffff; + color: #222222; +} +/* =Links +-----------------------------------------------------------------------------*/ +a { + color: #134da5; +} +a:focus, +a:hover { + color: #de2c3b; +} +/* =Headings +-----------------------------------------------------------------------------*/ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-weight: bold; + color: #000000; + text-rendering: optimizeLegibility; + margin: 0 0 .5em 0; +} +h1, +.h1, +h2, +.h2 { + line-height: 1.1; +} +h3, +.h3, +h4, +.h4 { + line-height: 1.3; +} +h1, +.h1 { + font-size: 2.25em; +} +h2, +.h2 { + font-size: 1.5em; + margin-bottom: .7em; +} +h3, +.h3 { + font-size: 1.3125em; +} +h4, +.h4 { + font-size: 1.125em; +} +h5, +.h5 { + font-size: 1em; +} +h6, +.h6 { + font-size: 0.75em; + text-transform: uppercase; +} +/* =Lead +-----------------------------------------------------------------------------*/ +.lead { + font-size: 1.3125em; + line-height: 1.5; + margin-bottom: 1.0999999999999999em; +} +/* =Line height and margin +-----------------------------------------------------------------------------*/ +p, +ul, +ol, +dl, +dd, +dt, +blockquote, +td, +th { + line-height: 1.65em; +} +ul, +ol, +ul ul, +ol ol, +ul ol, +ol ul { + margin: 0 0 0 3.3em; +} +ul li, +ol li { + text-align: left; +} +ol ol li { + list-style-type: lower-alpha; +} +ol ol ol li { + list-style-type: lower-roman; +} +p, +ul, +ol, +dl, +blockquote, +hr, +pre, +table, +form, +fieldset, +figure, +address { + margin-bottom: 1.65em; +} +/* =Blockquote +-----------------------------------------------------------------------------*/ +blockquote { + position: relative; + font-style: italic; + font-size: 1.125em; + margin-left: 2.4749999999999996em; + padding-left: 1.65em; + border-left: 2px solid #dddddd; +} +blockquote p { + margin-bottom: .5em; +} +blockquote small, +cite { + color: rgba(0, 0, 0, 0.4); + font-style: italic; +} +small, +blockquote cite { + font-size: 12.75px; + line-height: 1; +} +/* =Address +-----------------------------------------------------------------------------*/ +address { + font-style: normal; +} +/* =Definition list +-----------------------------------------------------------------------------*/ +dl dt { + font-weight: bold; +} +dd { + margin-left: 1.65em; +} +/* =Text-level +-----------------------------------------------------------------------------*/ +s, +del { + text-decoration: line-through; +} +abbr[title], +dfn[title] { + border-bottom: 1px dotted #0f0f0f; + cursor: help; +} +strong, +b { + font-weight: bold; +} +em, +i { + font-style: italic; +} +sub, +sup { + font-size: 11.25px; + line-height: 0; + position: relative; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +figcaption { + margin: .4em 0; + font-size: 12.75px; + font-style: italic; +} +ins, +u { + text-decoration: underline; +} +mark { + background-color: #ffc800; + color: #0f0f0f; + text-decoration: none; +} +/* =Code +-----------------------------------------------------------------------------*/ +pre, +code, +kbd, +samp, +var, +output { + font-size: 90%; + font-style: normal; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +pre { + margin-top: 1.65em; + font-size: 100%; + line-height: 1.5; + color: #222222; + overflow: auto; +} +code, +samp, +kbd { + padding: 3px 6px 2px 6px; + display: inline-block; + line-height: 1; + border-radius: 2px; +} +code { + background: #f4f4f4; + border: 1px solid #d4d4d4; +} +pre code { + font-size: 100%; + border: none; + padding: 0; + background: none; + line-height: 1.65em; +} +var { + color: rgba(0, 0, 0, 0.5); +} +samp { + background: #d3e3fb; + border: 1px solid #b2cef8; +} +kbd { + background: #0f0f0f; + color: rgba(255, 255, 255, 0.85); + white-space: nowrap; +} +/* =Form +-----------------------------------------------------------------------------*/ +button:active, +button:focus { + outline: none; +} +textarea, +select { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 1em; + box-shadow: none; +} +textarea, +select[multiple], +select[multiple="multiple"] { + padding: 0.3em 0.35em; + line-height: 1.35em; + width: 100%; +} +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="phone"], +input[type="tel"], +input[type="number"], +input[type="datetime"], +input[type="date"], +input[type="month"], +input[type="color"], +input[type="time"], +input[type="search"], +input[type="datetime-local"] { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 1em; + box-shadow: none; + padding: 0.3em 0.35em; + line-height: 1.65em; + border-radius: 0; + outline: none; +} +select[multiple], +select[multiple="multiple"], +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="phone"], +input[type="tel"], +input[type="number"], +input[type="datetime"], +input[type="date"], +input[type="month"], +input[type="color"], +input[type="time"], +input[type="search"], +input[type="datetime-local"] { + background: #ffffff; + border: 1px solid #cccccc; + position: relative; + z-index: 2; + -webkit-appearance: none; +} +textarea[disabled], +input[type="text"][disabled], +input[type="password"][disabled], +input[type="email"][disabled], +input[type="url"][disabled], +input[type="phone"][disabled], +input[type="tel"][disabled], +input[type="number"][disabled], +input[type="datetime"][disabled], +input[type="date"][disabled], +input[type="month"][disabled], +input[type="color"][disabled], +input[type="time"][disabled], +input[type="search"][disabled], +input[type="datetime-local"][disabled] { + resize: none; + color: rgba(0, 0, 0, 0.5); +} +select[disabled], +input[type="checkbox"][disabled], +input[type="radio"][disabled] { + cursor: default; +} +input::-moz-focus-inner, +button::-moz-focus-inner { + border: 0; + padding: 0; +} +input[type="range"] { + position: relative; + top: 3px; +} +select { + margin-bottom: 0 !important; +} +fieldset { + padding: 1.65em; + margin-bottom: 1.65em; + border: 1px solid #cccccc; +} +fieldset *:last-child { + margin-bottom: 0 !important; +} +legend { + font-weight: bold; + padding: 0 1em; + margin-left: -1em; +} +/* =Tables +-----------------------------------------------------------------------------*/ +table { + max-width: 100%; + width: 100%; + empty-cells: show; +} +table caption { + text-transform: uppercase; + padding: 0 1.0999999999999999em; + color: rgba(0, 0, 0, 0.4); + font-size: 12.75px; +} +table th, +table td { + border-bottom: 1px solid #eeeeee; + padding: 0.825em 1.0999999999999999em; +} +table tfoot th, +table tfoot td { + color: rgba(0, 0, 0, 0.4); +} +/* =Grid +-----------------------------------------------------------------------------*/ +.units-container:after, +.units-row:after { + content: ""; + display: table; + clear: both; +} +.units-container:after, +.units-row:after { + content: ""; + display: table; + clear: both; +} +.units-container { + /* it's the trick to not collapse padding-top in the child element */ + + padding-top: 1px; + margin-top: -1px; +} +.units-row { + margin-bottom: 1.65em; +} +.width-100, +.unit-100 { + width: 100%; +} +.width-90, +.unit-90 { + width: 90%; +} +.width-80, +.unit-80 { + width: 80%; +} +.width-75, +.unit-75 { + width: 75%; +} +.width-70, +.unit-70 { + width: 70%; +} +.width-66, +.unit-66 { + width: 66.6%; +} +.width-65, +.unit-65 { + width: 65%; +} +.width-60, +.unit-60 { + width: 60%; +} +.width-50, +.unit-50 { + width: 50%; +} +.width-40, +.unit-40 { + width: 40%; +} +.width-35, +.unit-35 { + width: 35%; +} +.width-33, +.unit-33 { + width: 33.3%; +} +.width-30, +.unit-30 { + width: 30%; +} +.width-25, +.unit-25 { + width: 25%; +} +.width-20, +.unit-20 { + width: 20%; +} +.width-10, +.unit-10 { + width: 10%; +} +.units-row .unit-90, +.units-row .unit-80, +.units-row .unit-75, +.units-row .unit-70, +.units-row .unit-66, +.units-row .unit-65, +.units-row .unit-60, +.units-row .unit-50, +.units-row .unit-40, +.units-row .unit-35, +.units-row .unit-33, +.units-row .unit-30, +.units-row .unit-25, +.units-row .unit-20, +.units-row .unit-10 { + float: left; + margin-left: 3%; +} +.units-row .unit-90:first-child, +.units-row .unit-80:first-child, +.units-row .unit-75:first-child, +.units-row .unit-70:first-child, +.units-row .unit-66:first-child, +.units-row .unit-65:first-child, +.units-row .unit-60:first-child, +.units-row .unit-50:first-child, +.units-row .unit-40:first-child, +.units-row .unit-35:first-child, +.units-row .unit-33:first-child, +.units-row .unit-30:first-child, +.units-row .unit-25:first-child, +.units-row .unit-20:first-child, +.units-row .unit-10:first-child { + margin-left: 0; +} +.units-row .unit-90 { + width: 89.7%; +} +.units-row .unit-80 { + width: 79.4%; +} +.units-row .unit-75 { + width: 74.25%; +} +.units-row .unit-70 { + width: 69.1%; +} +.units-row .unit-66 { + width: 65.66666666666666%; +} +.units-row .unit-65 { + width: 65.66666666666666%; +} +.units-row .unit-60 { + width: 58.800000000000004%; +} +.units-row .unit-50 { + width: 48.5%; +} +.units-row .unit-40 { + width: 38.2%; +} +.units-row .unit-35 { + width: 31.333333333333332%; +} +.units-row .unit-33 { + width: 31.333333333333332%; +} +.units-row .unit-30 { + width: 27.9%; +} +.units-row .unit-25 { + width: 22.75%; +} +.units-row .unit-20 { + width: 17.6%; +} +.units-row .unit-10 { + width: 7.3%; +} +.unit-push-90, +.unit-push-80, +.unit-push-75, +.unit-push-70, +.unit-push-66, +.unit-push-65, +.unit-push-60, +.unit-push-50, +.unit-push-40, +.unit-push-35, +.unit-push-33, +.unit-push-30, +.unit-push-25, +.unit-push-20, +.unit-push-10 { + position: relative; +} +.unit-push-90 { + left: 92.7%; +} +.unit-push-80 { + left: 82.4%; +} +.unit-push-75 { + left: 77.25%; +} +.unit-push-70 { + left: 72.1%; +} +.unit-push-66 { + left: 68.66666666666666%; +} +.unit-push-65 { + left: 68.66666666666666%; +} +.unit-push-60 { + left: 61.800000000000004%; +} +.unit-push-50 { + left: 51.5%; +} +.unit-push-40 { + left: 41.2%; +} +.unit-push-35 { + left: 34.33333333333333%; +} +.unit-push-33 { + left: 34.33333333333333%; +} +.unit-push-30 { + left: 30.9%; +} +.unit-push-25 { + left: 25.75%; +} +.unit-push-20 { + left: 20.6%; +} +.unit-push-10 { + left: 10.3%; +} +.units-row .unit-push-right { + float: right; +} +.units-row .unit-role-right { + margin-left: 3%; + float: right; +} +.units-row .unit-role-left { + margin-left: 0; +} +.centered, +.unit-centered { + float: none !important; + margin: 0 auto !important; +} +.unit-padding { + padding: 1.65em; +} +.units-padding .unit-100, +.units-padding .unit-90, +.units-padding .unit-80, +.units-padding .unit-75, +.units-padding .unit-70, +.units-padding .unit-66, +.units-padding .unit-65, +.units-padding .unit-60, +.units-padding .unit-50, +.units-padding .unit-40, +.units-padding .unit-35, +.units-padding .unit-33, +.units-padding .unit-30, +.units-padding .unit-25, +.units-padding .unit-20, +.units-padding .unit-10 { + padding: 1.65em; +} +.units-split .unit-90, +.units-split .unit-80, +.units-split .unit-75, +.units-split .unit-70, +.units-split .unit-66, +.units-split .unit-65, +.units-split .unit-60, +.units-split .unit-50, +.units-split .unit-40, +.units-split .unit-35, +.units-split .unit-33, +.units-split .unit-30, +.units-split .unit-25, +.units-split .unit-20, +.units-split .unit-10 { + margin-left: 0; +} +.units-split .unit-90 { + width: 90%; +} +.units-split .unit-80 { + width: 80%; +} +.units-split .unit-75 { + width: 75%; +} +.units-split .unit-70 { + width: 70%; +} +.units-split .unit-66 { + width: 66.6%; +} +.units-split .unit-65 { + width: 65%; +} +.units-split .unit-60 { + width: 60%; +} +.units-split .unit-50 { + width: 50%; +} +.units-split .unit-40 { + width: 40%; +} +.units-split .unit-35 { + width: 35%; +} +.units-split .unit-33 { + width: 33.3%; +} +.units-split .unit-30 { + width: 30%; +} +.units-split .unit-25 { + width: 25%; +} +.units-split .unit-20 { + width: 20%; +} +.units-split .unit-10 { + width: 10%; +} +/* =Blocks +-----------------------------------------------------------------------------*/ +.blocks-2, +.blocks-3, +.blocks-4, +.blocks-5, +.blocks-6 { + padding-left: 0; + list-style: none; + margin-left: -3%; +} +.blocks-2:after, +.blocks-3:after, +.blocks-4:after, +.blocks-5:after, +.blocks-6:after { + content: ""; + display: table; + clear: both; +} +.blocks-2:after, +.blocks-3:after, +.blocks-4:after, +.blocks-5:after, +.blocks-6:after { + content: ""; + display: table; + clear: both; +} +.blocks-2 > li, +.blocks-3 > li, +.blocks-4 > li, +.blocks-5 > li, +.blocks-6 > li { + height: auto; + float: left; + margin-bottom: 1.65em; + margin-left: 3%; +} +.blocks-2 > li ul, +.blocks-3 > li ul, +.blocks-4 > li ul, +.blocks-5 > li ul, +.blocks-6 > li ul { + list-style-type: disc; +} +.blocks-2 > li ul ul, +.blocks-3 > li ul ul, +.blocks-4 > li ul ul, +.blocks-5 > li ul ul, +.blocks-6 > li ul ul { + list-style-type: circle; +} +.blocks-2 > li li, +.blocks-3 > li li, +.blocks-4 > li li, +.blocks-5 > li li, +.blocks-6 > li li { + float: none; + margin: 0; +} +.blocks-2 > li { + width: 47%; +} +.blocks-3 > li { + width: 30.333333333333332%; +} +.blocks-4 > li { + width: 22%; +} +.blocks-5 > li { + width: 17%; +} +.blocks-6 > li { + width: 13.666666666666666%; +} +.block-first { + clear: both; +} +/* =Tables +-----------------------------------------------------------------------------*/ +table.table-bordered td, +table.table-bordered th { + border: 1px solid #eeeeee; +} +table.table-simple td, +table.table-simple th, +table.table-simple caption { + border: none; + padding-left: 0; +} +table.table-flat td, +table.table-flat th, +table.table-flat caption { + border: none; + padding: 0; +} +table.table-stroked td, +table.table-stroked th { + border-bottom: 1px solid #eeeeee; +} +table.table-stripped tbody tr:nth-child(odd) td { + background: #f8f8f8; +} +table.table-hovered tbody tr:hover td { + background-color: #f4f4f4; +} +/* Responsive Tables */ +.table-container { + width: 100%; + overflow: auto; + margin-bottom: 1.65em; +} +.table-container table { + margin-bottom: 0; +} +.table-container::-webkit-scrollbar { + -webkit-appearance: none; + width: 14px; + height: 14px; +} +.table-container::-webkit-scrollbar-thumb { + border-radius: 8px; + border: 3px solid #fff; + background-color: rgba(0, 0, 0, 0.3); +} +/* =Forms +-----------------------------------------------------------------------------*/ +.forms .btn, +.forms input[type="submit"].btn, +.forms button, +.forms input[type="submit"], +.forms input[type="reset"] { + padding: 0.3625em 1.3em; +} +.forms .btn-outline { + padding: 0.3em 1.3em; +} +.forms .btn-outline.bold { + padding: 0.2375em 1.3em; +} +.forms label { + display: block; + margin-bottom: 1.0999999999999999em; +} +.forms input[type="text"], +.forms input[type="password"], +.forms input[type="email"], +.forms input[type="url"], +.forms input[type="phone"], +.forms input[type="tel"], +.forms input[type="number"], +.forms input[type="datetime"], +.forms input[type="date"], +.forms input[type="month"], +.forms input[type="color"], +.forms input[type="time"], +.forms input[type="search"], +.forms input[type="range"], +.forms input[type="file"], +.forms input[type="datetime-local"], +.forms textarea, +.forms select { + display: block; +} +.forms-inline input[type="text"], +.forms-inline-list input[type="text"], +.forms-inline input[type="password"], +.forms-inline-list input[type="password"], +.forms-inline input[type="email"], +.forms-inline-list input[type="email"], +.forms-inline input[type="url"], +.forms-inline-list input[type="url"], +.forms-inline input[type="phone"], +.forms-inline-list input[type="phone"], +.forms-inline input[type="tel"], +.forms-inline-list input[type="tel"], +.forms-inline input[type="number"], +.forms-inline-list input[type="number"], +.forms-inline input[type="datetime"], +.forms-inline-list input[type="datetime"], +.forms-inline input[type="date"], +.forms-inline-list input[type="date"], +.forms-inline input[type="month"], +.forms-inline-list input[type="month"], +.forms-inline input[type="color"], +.forms-inline-list input[type="color"], +.forms-inline input[type="time"], +.forms-inline-list input[type="time"], +.forms-inline input[type="search"], +.forms-inline-list input[type="search"], +.forms-inline input[type="range"], +.forms-inline-list input[type="range"], +.forms-inline input[type="file"], +.forms-inline-list input[type="file"], +.forms-inline input[type="datetime-local"], +.forms-inline-list input[type="datetime-local"], +.forms-inline textarea, +.forms-inline-list textarea, +.forms-inline select, +.forms-inline-list select { + display: inline-block; +} +.forms-list, +.forms-inline, +.forms-inline-list { + margin: 0; + padding: 0; + margin-bottom: 1.0999999999999999em; + list-style: none; +} +.forms-list label, +.forms-inline label, +.forms-inline-list li, +.forms-inline-list li label { + display: inline-block; + margin-bottom: 0; +} +.forms-inline-list li label { + margin-right: 0.825em; +} +.forms-inline-list li { + margin-bottom: 3px; +} +.forms-list li { + margin-bottom: 6px; +} +.forms-desc { + margin-top: 4px; + color: rgba(0, 0, 0, 0.4); + font-size: 12.75px; + line-height: 1.4em; +} +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="phone"], +input[type="tel"], +input[type="number"], +input[type="datetime"], +input[type="date"], +input[type="month"], +input[type="color"], +input[type="time"], +input[type="search"], +input[type="datetime-local"], +textarea { + -moz-transition: border ease 0.5s; + transition: border ease 0.5s; +} +/* States */ +.error, +.success { + font-weight: normal; + font-size: 12.75px; +} +input.input-error, +textarea.input-error, +select.input-error, +.input-error { + border-color: #de2c3b; + box-shadow: 0 0 0 2px rgba(222, 44, 59, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +input.input-success, +textarea.input-success, +select.input-success, +.input-success { + border-color: #2c9f42; + box-shadow: 0 0 0 2px rgba(44, 159, 66, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +input.input-gray, +textarea.input-gray, +select.input-gray, +.input-gray { + border-color: #b3b6b7; + box-shadow: 0 0 0 2px rgba(179, 182, 183, 0.4), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="phone"]:focus, +input[type="tel"]:focus, +input[type="number"]:focus, +input[type="datetime"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="color"]:focus, +input[type="time"]:focus, +input[type="search"]:focus, +input[type="datetime-local"]:focus, +textarea:focus { + outline: none; + border-color: #2575ed; + box-shadow: 0 0 0 2px rgba(37, 117, 237, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +/* + Search +*/ +input.input-search, +input[type="search"] { + padding-right: .5em; + padding-left: .5em; + margin-bottom: 0; + border-radius: 15px; +} +input.input-on-black { + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.35); +} +input.input-on-black::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.6); +} +input.input-on-black::-moz-placeholder { + color: rgba(255, 255, 255, 0.6); +} +input.input-on-black:focus, +input.input-on-black.active { + border: 1px solid #fff; + background: #fff; + box-shadow: none; +} +input.input-on-black:focus::-webkit-input-placeholder, +input.input-on-black.active::-webkit-input-placeholder { + color: #aaa; +} +input.input-on-black:focus::-moz-placeholder, +input.input-on-black.active::-moz-placeholder { + color: #aaa; +} +/* Sizes */ +input.input-big { + font-size: 18px; +} +input.input-small { + font-size: 12.75px; +} +input.input-smaller { + font-size: 11.25px; +} +/* Append & Prepend */ +.input-groups { + display: table !important; +} +.input-groups input { + width: 100%; +} +.input-groups input, +.input-groups .input-append, +.input-groups .input-prepend, +.input-groups .btn-append { + display: table-cell !important; +} +.input-groups .btn-append, +.input-groups .input-append, +.input-groups .input-prepend { + width: 1%; + vertical-align: middle; +} +.input-groups .input-append, +.input-groups .input-prepend { + background-color: #f4f4f4; + border: 1px solid #d4d4d4; + margin: 0; + padding: .45em .75em .15em .75em; + color: rgba(0, 0, 0, 0.6); + line-height: 1.65em; + font-size: 12.75px; + white-space: nowrap; +} +.input-groups .input-prepend { + border-right: none; +} +.input-groups .input-append { + position: relative; + z-index: 1; + border-left: none; +} +.input-groups .btn-append .btn { + display: block; + height: auto; + border-radius: 0 2px 2px 0; +} +/* =Navs +-----------------------------------------------------------------------------*/ +/* NavBar */ +.navbar { + font-size: 105%; + margin-bottom: 1.65em; +} +.navbar:after { + content: ""; + display: table; + clear: both; +} +.navbar:after { + content: ""; + display: table; + clear: both; +} +.navbar.navbar-left { + float: left; +} +.navbar.navbar-right { + float: right; +} +.navbar ul { + list-style: none; + margin: 0; +} +.navbar ul:after { + content: ""; + display: table; + clear: both; +} +.navbar ul:after { + content: ""; + display: table; + clear: both; +} +.navbar li { + float: left; + margin-right: 1.65em; +} +.navbar.navbar-right li { + margin-right: 0; + margin-left: 1.65em; +} +.navbar a, +.navbar span { + display: block; + text-decoration: none; +} +.navbar a:hover { + color: #de2c3b; + text-decoration: underline; +} +.navbar li.active a, +.navbar span { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); +} +.navigation-toggle { + display: none; + text-transform: uppercase; + position: relative; + color: #0f0f0f; + background-color: #ffffff; +} +.navigation-toggle:after { + position: absolute; + z-index: 1; + top: 50%; + margin-top: -12px; + left: 10px; + content: "\2630"; + font-size: 24px; + line-height: 1; +} +.navigation-toggle.navigation-toggle-black { + background-color: #0f0f0f; + color: #ffffff; +} +.navigation-toggle.navigation-toggle-show { + margin-bottom: 1.65em; +} +.navigation-toggle span { + position: relative; + z-index: 2; + cursor: pointer; + display: block; + padding: 10px 20px 10px 40px; +} +.navigation-fixed { + position: fixed; + top: 0; + left: 0; + z-index: 101; +} +/* Pills */ +.navbar-pills a, +.navbar-pills span { + padding: 0.825em 1.65em; +} +.navbar-pills a:hover { + color: #0f0f0f; + background: #eee; +} +.navbar-pills li.active a, +.navbar-pills span { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); + background: #eee; +} +.navbar-pills li { + margin-right: 1px; +} +.navbar-pills.navbar-right li { + margin-left: 1px; +} +/* Fullwidth */ +.fullwidth ul { + width: 100%; +} +.fullwidth li { + float: none !important; + margin: 0; + display: table-cell; + width: 1%; + text-align: center; +} +.fullwidth li a, +.fullwidth li span { + display: block; +} +/* Vertical */ +.nav { + margin-bottom: 1.65em; +} +.nav ul { + list-style: none; + margin: 0; +} +.nav ul li ul { + margin-left: 2em; + font-size: .95em; +} +.nav a, +.nav span { + display: block; + padding: .5em 0; +} +.nav a { + color: #0f0f0f; + text-decoration: none; +} +.nav a:hover { + color: #de2c3b; + text-decoration: underline; +} +.nav li.active a, +.nav span { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); +} +.nav i.fa { + width: 1.65em; +} +/* Stacked */ +.nav-stacked li { + margin-bottom: 1px; +} +.nav-stacked a, +.nav-stacked span { + padding: .6em .7em; +} +.nav-stacked a { + background: #f6f6f6; +} +.nav-stacked a:hover { + color: #000; + background: #eee; +} +.nav-stacked li.active a, +.nav-stacked span { + background: #ffffff; + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.3); +} +/* Stats */ +.nav-stats li { + position: relative; +} +.nav-stats a, +.nav-stats span { + padding-right: 50px; +} +.nav-stats sup, +.nav-stats .badge { + position: absolute; + top: 50%; + right: 0; +} +.nav-stats sup { + color: rgba(0, 0, 0, 0.4); +} +.nav-stats .badge { + margin-top: -8px; +} +/* =Tabs +-----------------------------------------------------------------------------*/ +.nav-tabs { + border-bottom: 1px solid #e3e3e3; + margin-bottom: 1.65em; +} +.nav-tabs:after { + content: ""; + display: table; + clear: both; +} +.nav-tabs:after { + content: ""; + display: table; + clear: both; +} +.nav-tabs ul { + list-style: none; + margin: 0; +} +.nav-tabs li { + float: left; + margin-right: 2px; +} +.nav-tabs a, +.nav-tabs span { + display: block; + line-height: 1; + padding: 0.825em 1.65em; + border: 1px solid transparent; +} +.nav-tabs a { + color: rgba(0, 0, 0, 0.5); + text-decoration: none; +} +.nav-tabs a:focus, +.nav-tabs a:hover { + color: #0f0f0f; + text-decoration: underline; + background-color: #eee; +} +.nav-tabs li.active a, +.nav-tabs span { + color: #0f0f0f; + background: #fff; + position: relative; + border: 1px solid #ddd; + border-bottom: 1px solid #fff; + bottom: -1px; + cursor: default; + text-decoration: none; +} +/* =Breadcrumbs +-----------------------------------------------------------------------------*/ +.breadcrumbs { + margin-bottom: 1.65em; +} +.breadcrumbs:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs ul { + font-size: .9em; + color: rgba(0, 0, 0, 0.4); + list-style: none; + margin: 0; +} +.breadcrumbs ul:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs ul:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs li { + float: left; + margin-right: 5px; +} +.breadcrumbs li + li:before { + content: " > "; + color: #aaa; + font-size: 12px; + margin: 0 7px 0 5px; + position: relative; + top: -1px; +} +.breadcrumbs.breadcrumbs-path li + li:before { + content: " / "; + top: 0; +} +.breadcrumbs a { + color: #0f0f0f; + text-decoration: none; +} +.breadcrumbs a:hover { + color: #0f0f0f; + text-decoration: underline; +} +.breadcrumbs li.active a, +.breadcrumbs span, +.breadcrumbs li.active a:hover { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); +} +/* =Pagination +-----------------------------------------------------------------------------*/ +.pagination { + position: relative; + left: -9px; + margin-left: 0; + list-style: none; +} +.pagination:after { + content: ""; + display: table; + clear: both; +} +.pagination:after { + content: ""; + display: table; + clear: both; +} +.pagination li { + float: left; + margin-right: 2px; +} +.pagination a, +.pagination span { + display: block; + padding: 7px 9px; + line-height: 1; + border-radius: 2px; + color: #0f0f0f; + text-decoration: none; +} +.pagination span, +.pagination li.active a, +.pagination li.active a:hover { + color: #ffffff; + background-color: #0f0f0f; + cursor: text; +} +.pagination a:focus, +.pagination a:hover { + text-decoration: none; + background-color: #0f0f0f; + color: #fff; +} +/* =Buttons +-----------------------------------------------------------------------------*/ +.btn, +input[type="submit"].btn { + display: inline-block; + vertical-align: top; + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 1em; + font-weight: 400; + line-height: 1.65em; + text-align: center; + text-decoration: none; + color: #222222; + -webkit-appearance: none; + outline: none; + margin: 0; + border: none; + border-radius: 2px; + box-shadow: none; + cursor: pointer; + background: #e0e3e5; + padding: 0.55em 2.5em; +} +.btn:hover, +input[type="submit"].btn:hover { + color: rgba(0, 0, 0, 0.5); + background: #b3b6b7; +} +.btn::-moz-focus-inner { + border: 0; + padding: 0; +} +.btn-big, +input[type="submit"].btn-big { + font-size: 18px; +} +.btn-small, +input[type="submit"].btn-small { + font-size: 12.75px; +} +.btn-smaller, +input[type="submit"].btn-smaller { + font-size: 11.25px; + vertical-align: baseline; +} +.btn-round { + border-radius: 15px; +} +.btn-outline, +input[type="submit"].btn-outline { + background: none; + padding: 0.48750000000000004em 2.5em; + border: 1px solid #0f0f0f; +} +.btn-outline:hover, +input[type="submit"].btn-outline:hover { + border-color: #b3b6b7; +} +.btn-outline.btn-active { + padding: 0.55em 2.5em; +} +.btn-outline.bold { + border-width: 2px; + padding: 0.42500000000000004em 2.5em; +} +.btn-active, +.btn[disabled], +.btn-disabled { + background: none; + background: #b3b6b7; + color: rgba(0, 0, 0, 0.5); +} +.btn-active:hover, +.btn[disabled]:hover, +.btn-disabled:hover { + color: rgba(0, 0, 0, 0.5); + background: #b3b6b7; +} +.btn-active { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4) inset; +} +.btn-outline.btn[disabled], +.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(0, 0, 0, 0.3); + border: 1px solid rgba(0, 0, 0, 0.1); +} +.btn-outline.btn-active { + background: none; + color: rgba(0, 0, 0, 0.4); + border: none; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; +} +.btn[disabled], +.btn-disabled { + cursor: default; + box-shadow: none; +} +.btn-blue, +input[type="submit"].btn-blue { + color: rgba(255, 255, 255, 0.9); + background: #2575ed; +} +.btn-blue:hover, +input[type="submit"].btn-blue:hover { + color: rgba(255, 255, 255, 0.6); + background: #1a52a5; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active, +.btn-blue.btn-disabled, +input[type="submit"].btn-blue.btn-disabled, +.btn-blue.btn[disabled], +input[type="submit"].btn-blue.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #1a52a5; +} +.btn-blue.btn-active:hover, +input[type="submit"].btn-blue.btn-active:hover, +.btn-blue.btn-disabled:hover, +input[type="submit"].btn-blue.btn-disabled:hover, +.btn-blue.btn[disabled]:hover, +input[type="submit"].btn-blue.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-blue.btn-outline, +input[type="submit"].btn-blue.btn-outline { + background: none; + border-color: #2575ed; + color: #2575ed; +} +.btn-blue.btn-outline:hover, +input[type="submit"].btn-blue.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2575ed; +} +.btn-blue.btn-outline.btn[disabled], +input[type="submit"].btn-blue.btn-outline.btn[disabled], +.btn-blue.btn-outline.btn-disabled, +input[type="submit"].btn-blue.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(37, 117, 237, 0.4); + border: 1px solid rgba(37, 117, 237, 0.3); +} +.btn-blue.btn-outline.btn-active, +input[type="submit"].btn-blue.btn-outline.btn-active { + background: none; + color: rgba(37, 117, 237, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(26, 82, 165, 0.6) inset; +} +.btn-blue:hover, +input[type="submit"].btn-blue:hover { + color: rgba(255, 255, 255, 0.6); + background: #1a52a5; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active, +.btn-blue.btn-disabled, +input[type="submit"].btn-blue.btn-disabled, +.btn-blue.btn[disabled], +input[type="submit"].btn-blue.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #1a52a5; +} +.btn-blue.btn-active:hover, +input[type="submit"].btn-blue.btn-active:hover, +.btn-blue.btn-disabled:hover, +input[type="submit"].btn-blue.btn-disabled:hover, +.btn-blue.btn[disabled]:hover, +input[type="submit"].btn-blue.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-blue.btn-outline, +input[type="submit"].btn-blue.btn-outline { + background: none; + border-color: #2575ed; + color: #2575ed; +} +.btn-blue.btn-outline:hover, +input[type="submit"].btn-blue.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2575ed; +} +.btn-blue.btn-outline.btn[disabled], +input[type="submit"].btn-blue.btn-outline.btn[disabled], +.btn-blue.btn-outline.btn-disabled, +input[type="submit"].btn-blue.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(37, 117, 237, 0.4); + border: 1px solid rgba(37, 117, 237, 0.3); +} +.btn-blue.btn-outline.btn-active, +input[type="submit"].btn-blue.btn-outline.btn-active { + background: none; + color: rgba(37, 117, 237, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(26, 82, 165, 0.6) inset; +} +.btn-red, +input[type="submit"].btn-red { + color: rgba(255, 255, 255, 0.9); + background: #de2c3b; +} +.btn-red:hover, +input[type="submit"].btn-red:hover { + color: rgba(255, 255, 255, 0.6); + background: #b2232f; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active, +.btn-red.btn-disabled, +input[type="submit"].btn-red.btn-disabled, +.btn-red.btn[disabled], +input[type="submit"].btn-red.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #b2232f; +} +.btn-red.btn-active:hover, +input[type="submit"].btn-red.btn-active:hover, +.btn-red.btn-disabled:hover, +input[type="submit"].btn-red.btn-disabled:hover, +.btn-red.btn[disabled]:hover, +input[type="submit"].btn-red.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-red.btn-outline, +input[type="submit"].btn-red.btn-outline { + background: none; + border-color: #de2c3b; + color: #de2c3b; +} +.btn-red.btn-outline:hover, +input[type="submit"].btn-red.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #de2c3b; +} +.btn-red.btn-outline.btn[disabled], +input[type="submit"].btn-red.btn-outline.btn[disabled], +.btn-red.btn-outline.btn-disabled, +input[type="submit"].btn-red.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(222, 44, 59, 0.4); + border: 1px solid rgba(222, 44, 59, 0.3); +} +.btn-red.btn-outline.btn-active, +input[type="submit"].btn-red.btn-outline.btn-active { + background: none; + color: rgba(222, 44, 59, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(178, 35, 47, 0.6) inset; +} +.btn-red:hover, +input[type="submit"].btn-red:hover { + color: rgba(255, 255, 255, 0.6); + background: #b2232f; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active, +.btn-red.btn-disabled, +input[type="submit"].btn-red.btn-disabled, +.btn-red.btn[disabled], +input[type="submit"].btn-red.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #b2232f; +} +.btn-red.btn-active:hover, +input[type="submit"].btn-red.btn-active:hover, +.btn-red.btn-disabled:hover, +input[type="submit"].btn-red.btn-disabled:hover, +.btn-red.btn[disabled]:hover, +input[type="submit"].btn-red.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-red.btn-outline, +input[type="submit"].btn-red.btn-outline { + background: none; + border-color: #de2c3b; + color: #de2c3b; +} +.btn-red.btn-outline:hover, +input[type="submit"].btn-red.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #de2c3b; +} +.btn-red.btn-outline.btn[disabled], +input[type="submit"].btn-red.btn-outline.btn[disabled], +.btn-red.btn-outline.btn-disabled, +input[type="submit"].btn-red.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(222, 44, 59, 0.4); + border: 1px solid rgba(222, 44, 59, 0.3); +} +.btn-red.btn-outline.btn-active, +input[type="submit"].btn-red.btn-outline.btn-active { + background: none; + color: rgba(222, 44, 59, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(178, 35, 47, 0.6) inset; +} +.btn-green, +input[type="submit"].btn-green { + color: rgba(255, 255, 255, 0.9); + background: #2c9f42; +} +.btn-green:hover, +input[type="submit"].btn-green:hover { + color: rgba(255, 255, 255, 0.6); + background: #237f35; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active, +.btn-green.btn-disabled, +input[type="submit"].btn-green.btn-disabled, +.btn-green.btn[disabled], +input[type="submit"].btn-green.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #237f35; +} +.btn-green.btn-active:hover, +input[type="submit"].btn-green.btn-active:hover, +.btn-green.btn-disabled:hover, +input[type="submit"].btn-green.btn-disabled:hover, +.btn-green.btn[disabled]:hover, +input[type="submit"].btn-green.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-green.btn-outline, +input[type="submit"].btn-green.btn-outline { + background: none; + border-color: #2c9f42; + color: #2c9f42; +} +.btn-green.btn-outline:hover, +input[type="submit"].btn-green.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2c9f42; +} +.btn-green.btn-outline.btn[disabled], +input[type="submit"].btn-green.btn-outline.btn[disabled], +.btn-green.btn-outline.btn-disabled, +input[type="submit"].btn-green.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(44, 159, 66, 0.4); + border: 1px solid rgba(44, 159, 66, 0.3); +} +.btn-green.btn-outline.btn-active, +input[type="submit"].btn-green.btn-outline.btn-active { + background: none; + color: rgba(44, 159, 66, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(35, 127, 53, 0.6) inset; +} +.btn-green:hover, +input[type="submit"].btn-green:hover { + color: rgba(255, 255, 255, 0.6); + background: #237f35; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active, +.btn-green.btn-disabled, +input[type="submit"].btn-green.btn-disabled, +.btn-green.btn[disabled], +input[type="submit"].btn-green.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #237f35; +} +.btn-green.btn-active:hover, +input[type="submit"].btn-green.btn-active:hover, +.btn-green.btn-disabled:hover, +input[type="submit"].btn-green.btn-disabled:hover, +.btn-green.btn[disabled]:hover, +input[type="submit"].btn-green.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-green.btn-outline, +input[type="submit"].btn-green.btn-outline { + background: none; + border-color: #2c9f42; + color: #2c9f42; +} +.btn-green.btn-outline:hover, +input[type="submit"].btn-green.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2c9f42; +} +.btn-green.btn-outline.btn[disabled], +input[type="submit"].btn-green.btn-outline.btn[disabled], +.btn-green.btn-outline.btn-disabled, +input[type="submit"].btn-green.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(44, 159, 66, 0.4); + border: 1px solid rgba(44, 159, 66, 0.3); +} +.btn-green.btn-outline.btn-active, +input[type="submit"].btn-green.btn-outline.btn-active { + background: none; + color: rgba(44, 159, 66, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(35, 127, 53, 0.6) inset; +} +.btn-black, +input[type="submit"].btn-black { + color: rgba(255, 255, 255, 0.9); + background: #0f0f0f; +} +.btn-black:hover, +input[type="submit"].btn-black:hover { + color: rgba(255, 255, 255, 0.6); + background: #363738; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7) inset; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active, +.btn-black.btn-disabled, +input[type="submit"].btn-black.btn-disabled, +.btn-black.btn[disabled], +input[type="submit"].btn-black.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #363738; +} +.btn-black.btn-active:hover, +input[type="submit"].btn-black.btn-active:hover, +.btn-black.btn-disabled:hover, +input[type="submit"].btn-black.btn-disabled:hover, +.btn-black.btn[disabled]:hover, +input[type="submit"].btn-black.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-black.btn-outline, +input[type="submit"].btn-black.btn-outline { + background: none; + border-color: #0f0f0f; + color: #0f0f0f; +} +.btn-black.btn-outline:hover, +input[type="submit"].btn-black.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #0f0f0f; +} +.btn-black.btn-outline.btn[disabled], +input[type="submit"].btn-black.btn-outline.btn[disabled], +.btn-black.btn-outline.btn-disabled, +input[type="submit"].btn-black.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(15, 15, 15, 0.4); + border: 1px solid rgba(15, 15, 15, 0.3); +} +.btn-black.btn-outline.btn-active, +input[type="submit"].btn-black.btn-outline.btn-active { + background: none; + color: rgba(15, 15, 15, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(54, 55, 56, 0.6) inset; +} +.btn-black:hover, +input[type="submit"].btn-black:hover { + color: rgba(255, 255, 255, 0.6); + background: #363738; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7) inset; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active, +.btn-black.btn-disabled, +input[type="submit"].btn-black.btn-disabled, +.btn-black.btn[disabled], +input[type="submit"].btn-black.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #363738; +} +.btn-black.btn-active:hover, +input[type="submit"].btn-black.btn-active:hover, +.btn-black.btn-disabled:hover, +input[type="submit"].btn-black.btn-disabled:hover, +.btn-black.btn[disabled]:hover, +input[type="submit"].btn-black.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-black.btn-outline, +input[type="submit"].btn-black.btn-outline { + background: none; + border-color: #0f0f0f; + color: #0f0f0f; +} +.btn-black.btn-outline:hover, +input[type="submit"].btn-black.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #0f0f0f; +} +.btn-black.btn-outline.btn[disabled], +input[type="submit"].btn-black.btn-outline.btn[disabled], +.btn-black.btn-outline.btn-disabled, +input[type="submit"].btn-black.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(15, 15, 15, 0.4); + border: 1px solid rgba(15, 15, 15, 0.3); +} +.btn-black.btn-outline.btn-active, +input[type="submit"].btn-black.btn-outline.btn-active { + background: none; + color: rgba(15, 15, 15, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(54, 55, 56, 0.6) inset; +} +.btn-yellow, +input[type="submit"].btn-yellow { + color: rgba(0, 0, 0, 0.9); + background: #ffc800; +} +.btn-yellow:hover, +input[type="submit"].btn-yellow:hover { + color: rgba(0, 0, 0, 0.6); + background: #cca000; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active, +.btn-yellow.btn-disabled, +input[type="submit"].btn-yellow.btn-disabled, +.btn-yellow.btn[disabled], +input[type="submit"].btn-yellow.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #cca000; +} +.btn-yellow.btn-active:hover, +input[type="submit"].btn-yellow.btn-active:hover, +.btn-yellow.btn-disabled:hover, +input[type="submit"].btn-yellow.btn-disabled:hover, +.btn-yellow.btn[disabled]:hover, +input[type="submit"].btn-yellow.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-yellow.btn-outline, +input[type="submit"].btn-yellow.btn-outline { + background: none; + border-color: #ffc800; + color: #ffc800; +} +.btn-yellow.btn-outline:hover, +input[type="submit"].btn-yellow.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffc800; +} +.btn-yellow.btn-outline.btn[disabled], +input[type="submit"].btn-yellow.btn-outline.btn[disabled], +.btn-yellow.btn-outline.btn-disabled, +input[type="submit"].btn-yellow.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 200, 0, 0.4); + border: 1px solid rgba(255, 200, 0, 0.3); +} +.btn-yellow.btn-outline.btn-active, +input[type="submit"].btn-yellow.btn-outline.btn-active { + background: none; + color: rgba(255, 200, 0, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(204, 160, 0, 0.6) inset; +} +.btn-yellow:hover, +input[type="submit"].btn-yellow:hover { + color: rgba(0, 0, 0, 0.6); + background: #cca000; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active, +.btn-yellow.btn-disabled, +input[type="submit"].btn-yellow.btn-disabled, +.btn-yellow.btn[disabled], +input[type="submit"].btn-yellow.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #cca000; +} +.btn-yellow.btn-active:hover, +input[type="submit"].btn-yellow.btn-active:hover, +.btn-yellow.btn-disabled:hover, +input[type="submit"].btn-yellow.btn-disabled:hover, +.btn-yellow.btn[disabled]:hover, +input[type="submit"].btn-yellow.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-yellow.btn-outline, +input[type="submit"].btn-yellow.btn-outline { + background: none; + border-color: #ffc800; + color: #ffc800; +} +.btn-yellow.btn-outline:hover, +input[type="submit"].btn-yellow.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffc800; +} +.btn-yellow.btn-outline.btn[disabled], +input[type="submit"].btn-yellow.btn-outline.btn[disabled], +.btn-yellow.btn-outline.btn-disabled, +input[type="submit"].btn-yellow.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 200, 0, 0.4); + border: 1px solid rgba(255, 200, 0, 0.3); +} +.btn-yellow.btn-outline.btn-active, +input[type="submit"].btn-yellow.btn-outline.btn-active { + background: none; + color: rgba(255, 200, 0, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(204, 160, 0, 0.6) inset; +} +.btn-white, +input[type="submit"].btn-white { + color: rgba(0, 0, 0, 0.9); + background: #ffffff; +} +.btn-white:hover, +input[type="submit"].btn-white:hover { + color: rgba(0, 0, 0, 0.6); + background: #ededed; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2) inset; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active, +.btn-white.btn-disabled, +input[type="submit"].btn-white.btn-disabled, +.btn-white.btn[disabled], +input[type="submit"].btn-white.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #ededed; +} +.btn-white.btn-active:hover, +input[type="submit"].btn-white.btn-active:hover, +.btn-white.btn-disabled:hover, +input[type="submit"].btn-white.btn-disabled:hover, +.btn-white.btn[disabled]:hover, +input[type="submit"].btn-white.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-white.btn-outline, +input[type="submit"].btn-white.btn-outline { + background: none; + border-color: #ffffff; + color: #ffffff; +} +.btn-white.btn-outline:hover, +input[type="submit"].btn-white.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffffff; +} +.btn-white.btn-outline.btn[disabled], +input[type="submit"].btn-white.btn-outline.btn[disabled], +.btn-white.btn-outline.btn-disabled, +input[type="submit"].btn-white.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 255, 255, 0.4); + border: 1px solid rgba(255, 255, 255, 0.3); +} +.btn-white.btn-outline.btn-active, +input[type="submit"].btn-white.btn-outline.btn-active { + background: none; + color: rgba(255, 255, 255, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(237, 237, 237, 0.6) inset; +} +.btn-white:hover, +input[type="submit"].btn-white:hover { + color: rgba(0, 0, 0, 0.6); + background: #ededed; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2) inset; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active, +.btn-white.btn-disabled, +input[type="submit"].btn-white.btn-disabled, +.btn-white.btn[disabled], +input[type="submit"].btn-white.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #ededed; +} +.btn-white.btn-active:hover, +input[type="submit"].btn-white.btn-active:hover, +.btn-white.btn-disabled:hover, +input[type="submit"].btn-white.btn-disabled:hover, +.btn-white.btn[disabled]:hover, +input[type="submit"].btn-white.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-white.btn-outline, +input[type="submit"].btn-white.btn-outline { + background: none; + border-color: #ffffff; + color: #ffffff; +} +.btn-white.btn-outline:hover, +input[type="submit"].btn-white.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffffff; +} +.btn-white.btn-outline.btn[disabled], +input[type="submit"].btn-white.btn-outline.btn[disabled], +.btn-white.btn-outline.btn-disabled, +input[type="submit"].btn-white.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 255, 255, 0.4); + border: 1px solid rgba(255, 255, 255, 0.3); +} +.btn-white.btn-outline.btn-active, +input[type="submit"].btn-white.btn-outline.btn-active { + background: none; + color: rgba(255, 255, 255, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(237, 237, 237, 0.6) inset; +} +.btn-white.btn-outline.btn-active { + box-shadow: none; + border: 1px solid rgba(255, 255, 255, 0.3); + padding: 0.48750000000000004em 2.5em; +} +/* + Buttons Group +*/ +.btn-single, +.btn-group { + display: inline-block; + margin-right: 2px; + vertical-align: bottom; +} +.btn-single:after, +.btn-group:after { + content: ""; + display: table; + clear: both; +} +.btn-single:after, +.btn-group:after { + content: ""; + display: table; + clear: both; +} +.btn-single > .btn, +.btn-single > input, +.btn-group > .btn, +.btn-group > input { + float: left; + border-radius: 0; + margin-left: -1px; +} +.btn-single > .btn { + border-radius: 2px; +} +.btn-group > .btn:first-child { + border-radius: 2px 0 0 2px; +} +.btn-group > .btn:last-child { + border-radius: 0 2px 2px 0; +} +.btn-group > .btn.btn-round:first-child, +.btn-group > .input-search:first-child { + border-radius: 15px 0 0 15px; +} +.btn-group > .btn.btn-round:last-child, +.btn-group > .input-search:last-child { + border-radius: 0 15px 15px 0; +} +/* =Notifications +-----------------------------------------------------------------------------*/ +.tools-alert { + padding: 12px 15px; + background: #f7f8f8; + color: #0f0f0f; + margin-bottom: 1.65em; +} +.tools-message { + display: none; + position: fixed; + z-index: 100; + top: 10px; + right: 10px; + max-width: 350px; + line-height: 1.5; + font-size: 95%; + padding: 12px 15px; + color: #0f0f0f; + background: #e0e3e5; +} +.tools-message ul { + margin: 0; + list-style: none; +} +.tools-message-black, +.tools-message-blue, +.tools-message-red, +.tools-message-green { + color: rgba(255, 255, 255, 0.95); +} +.tools-message-black { + background: #0f0f0f; +} +.tools-message-blue { + background: #2575ed; +} +.tools-message-red { + background: #de2c3b; +} +.tools-message-yellow { + background: #ffc800; +} +.tools-message-green { + background: #2c9f42; +} +.tools-alert-black { + background: #dadada; +} +.tools-alert-blue { + background: #d3e3fb; +} +.tools-alert-red { + background: #f8d5d8; +} +.tools-alert-yellow { + background: #fff4cc; +} +.tools-alert-green { + background: #d5ecd9; +} +/* =Labels +-----------------------------------------------------------------------------*/ +.label, +.badge { + background: #e0e3e5; + font-size: 12.75px; + display: inline-block; + line-height: 1; + padding: 4px 7px 3px 7px; + color: #0f0f0f; + text-align: center; + font-weight: normal; + text-transform: uppercase; +} +.label-outline { + background: none; + border: 1px solid #0f0f0f; + padding: 3px 6px 2px 6px; +} +.badge { + border-radius: 15px; +} +.badge-small { + font-size: 11.25px; + padding: 3px 5px; +} +.label-black, +.label-blue, +.label-red, +.label-green, +.badge-black, +.badge-blue, +.badge-red, +.badge-green { + color: #ffffff; +} +.label-black, +.badge-black { + background: #0f0f0f; +} +.label-blue, +.badge-blue { + background: #2575ed; +} +.label-red, +.badge-red { + background: #de2c3b; +} +.label-green, +.badge-green { + background: #2c9f42; +} +.label-yellow, +.badge-yellow { + background: #ffc800; +} +.label-white, +.badge-white { + background: #ffffff; +} +.label-black.label-outline, +.label-blue.label-outline, +.label-red.label-outline, +.label-green.label-outline, +.label-yellow.label-outline, +.label-white.label-outline { + background: none; + color: #0f0f0f; +} +.label-blue.label-outline { + border-color: #2575ed; + color: #2575ed; +} +.label-red.label-outline { + border-color: #de2c3b; + color: #de2c3b; +} +.label-green.label-outline { + border-color: #2c9f42; + color: #2c9f42; +} +.label-yellow.label-outline { + border-color: #ffc800; + color: #ffc800; +} +.label-white.label-outline { + border-color: #ffffff; + color: #ffffff; +} +/* =Progress +-----------------------------------------------------------------------------*/ +#tools-progress { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000000; + height: 10px; +} +#tools-progress span { + display: block; + width: 100%; + height: 100%; + background-color: #1a52a5; + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + background-size: 40px 40px; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +/* =Accordion +-----------------------------------------------------------------------------*/ +.accordion-title { + position: relative; + display: block; + margin: 0; + margin-bottom: 2px; + padding: 12px 50px 12px 18px; + color: #000; + text-decoration: none; + font-weight: normal; + font-size: 0.9375em; + line-height: 1,4em; + background: #f7f8f8; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.accordion-title.accordion-title-opened { + margin-bottom: 0; + font-weight: bold; + background: #f0f1f2; +} +.accordion-title a, +.accordion-title:hover { + color: #000; + text-decoration: none; +} +.accordion-panel { + padding: 1.65em; + margin-bottom: 10px; +} +.accordion-toggle { + position: absolute; + top: 50%; + margin-top: -8px; + right: 20px; + padding: 0; + font-size: 0; + line-height: 1; +} +.accordion-toggle-closed { + background: #000; + width: 1px; + height: 15px; + margin-left: 1px; +} +.accordion-toggle-closed:before { + position: absolute; + top: 7px; + left: -7px; + content: ""; + width: 15px; + height: 1px; + background: #000; +} +.accordion-toggle-opened:before { + position: absolute; + top: 7px; + left: -8px; + content: ""; + width: 15px; + height: 1px; + background: #000; +} +/* =Filterbox +-----------------------------------------------------------------------------*/ +.filterbox { + position: relative; +} +.filterbox input { + padding-right: 30px; +} +.filterbox span { + position: absolute; + z-index: 2; + top: 0; + right: 1px; + width: 26px; + height: 100%; + cursor: pointer; +} +.filterbox span:after { + content: ""; + display: inline-block; + position: relative; + top: 50%; + margin-left: 8px; + margin-top: -21px; + width: 0; + height: 0; + vertical-align: middle; + border-top: 5px solid rgba(0, 0, 0, 0.6); + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} +.filterbox-list { + z-index: 1000; + position: absolute; + left: 0; + display: none; + margin: 0; + list-style: none; + background: #fff; + width: 100%; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + max-height: 250px; + overflow: auto; +} +.filterbox-list li { + padding: 4px 10px; + color: #000; + cursor: pointer; +} +.filterbox-list li:hover { + background: #f0f1f2; +} +.filterbox-list li.active { + background: #2575ed; + color: #fff; +} +/* =Tooltip +-----------------------------------------------------------------------------*/ +.tooltip { + position: absolute; + z-index: 10000; + display: inline-block; + color: #fff; + padding: 2px 10px; + font-size: 12.75px; + line-height: 1.5em; + max-width: 250px; + background: #0f0f0f; +} +.tooltip-theme-red { + background: #de2c3b; +} +.tooltip-theme-blue { + background: #2575ed; +} +.tooltip-theme-green { + background: #2c9f42; +} +.tooltip-theme-yellow { + background: #ffc800; +} +.tooltip-theme-white { + background: #ffffff; +} +.tooltip-theme-yellow, +.tooltip-theme-white { + color: #000; +} +/* =Dropdown +-----------------------------------------------------------------------------*/ +.dropdown { + display: none; + position: absolute; + z-index: 102; + top: 0; + right: 0; + width: 250px; + color: #0f0f0f; + background: #ffffff; + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + overflow: auto; +} +.dropdown section { + max-height: 250px; + overflow: auto; + padding: 20px; +} +.dropdown footer { + padding: 20px; +} +ul.dropdown { + max-height: 300px; + list-style: none; + margin: 0; + line-height: 1.5; + font-size: 95%; + padding: 0; +} +ul.dropdown a { + display: block; + padding: 7px 15px; + text-decoration: none; + color: #0f0f0f; +} +ul.dropdown a:hover { + background: #eee; +} +ul.dropdown li.divider { + border-bottom: 1px solid #e2e2e2; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: .3em; + vertical-align: middle; + border-top: 5px solid; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} +.caret.caret-up { + border-top: 0; + border-bottom: 4px solid; +} +/* =Livesearch +-----------------------------------------------------------------------------*/ +.livesearch-box { + position: relative; + display: inline-block; + width: 100%; +} +.livesearch-box input { + padding-left: 30px; +} +.livesearch-box .close { + position: absolute; + top: .2em; + right: 5px; + z-index: 2; + padding: 4px 6px; + line-height: 1; + font-size: 20px; + cursor: pointer; + color: #000000; + text-decoration: none; + filter: alpha(opacity=50); + -moz-opacity: 0.5; + opacity: 0.5; +} +.livesearch-box .close:before { + content: '\00D7'; +} +.livesearch-box .close:hover { + filter: alpha(opacity=100); + -moz-opacity: 1; + opacity: 1; +} +.livesearch-box .close:before { + content: '\00D7'; +} +.livesearch-box .close:hover { + filter: alpha(opacity=100); + -moz-opacity: 1; + opacity: 1; +} +.livesearch-icon { + position: absolute; + top: 53%; + left: 10px; + z-index: 2; +} +.livesearch-icon:before, +.livesearch-icon:after { + content: ""; + position: absolute; + top: 50%; + left: 0; + margin: -8px 0 0; + background: rgba(0, 0, 0, 0.5); +} +.livesearch-icon:before { + width: 10px; + height: 10px; + border: 2px solid rgba(0, 0, 0, 0.5); + background: transparent; + border-radius: 12px; +} +.livesearch-icon:after { + left: 10px; + width: 2px; + height: 7px; + margin-top: 0; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +/* =Upload +-----------------------------------------------------------------------------*/ +.tools-droparea { + position: relative; + overflow: hidden; + padding: 80px 20px; + border: 3px dashed rgba(0, 0, 0, 0.1); +} +.tools-droparea.drag-hover { + background: rgba(200, 222, 250, 0.75); +} +.tools-droparea.drag-drop { + background: rgba(250, 248, 200, 0.5); +} +.tools-droparea-placeholder { + text-align: center; + font-size: 11px; + color: rgba(0, 0, 0, 0.5); +} +/* =Autocomplete +-----------------------------------------------------------------------------*/ +.autocomplete { + position: absolute; + z-index: 1000; + left: 0; + display: none; + margin: 0; + list-style: none; + background: #fff; + width: 250px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + max-height: 250px; + overflow: auto; +} +.autocomplete a { + padding: 4px 10px; + color: #000; + display: block; + text-decoration: none; +} +.autocomplete a:hover { + background: #f0f1f2; +} +.autocomplete a.active { + background: #2575ed; + color: #fff; +} +/* =Modal +-----------------------------------------------------------------------------*/ +#modal-overlay { + position: fixed; + top: 0; + left: 0; + margin: auto; + overflow: auto; + width: 100%; + height: 100%; + background-color: #000 !important; + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; + z-index: 100; +} +.modal-blur { + -webkit-filter: blur(3px); + -moz-filter: blur(3px); + -ms-filter: blur(3px); + filter: blur(3px); +} +.modal-box { + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + overflow-x: hidden; + overflow-y: auto; + z-index: 101; +} +.modal { + position: relative; + margin: auto; + margin-bottom: 20px; + padding: 0; + background: #fff; + color: #000; + box-shadow: 0 1px 70px rgba(0, 0, 0, 0.5); +} +.modal header { + padding: 30px 40px 5px 40px; + font-size: 18px; + font-weight: bold; +} +.modal section { + padding: 30px 40px 50px 40px; +} +.modal footer button { + width: 100%; + border-radius: 0; +} +.modal-close { + position: absolute; + top: 8px; + right: 12px; + width: 30px; + height: 30px; + text-align: right; + color: #bbb; + font-size: 30px; + font-weight: 300; + cursor: pointer; +} +.modal-close:hover { + color: #000; +} +/* =Helpers +-----------------------------------------------------------------------------*/ +.group:after { + content: ""; + display: table; + clear: both; +} +.group:after { + content: ""; + display: table; + clear: both; +} +.hide { + display: none; +} +.highlight { + background-color: #f7f3e2; +} +.big { + font-size: 18px; +} +.small { + font-size: 12.75px; +} +.smaller { + font-size: 11.25px; +} +.nowrap, +.nowrap td { + white-space: nowrap; +} +.req, +.required { + font-weight: normal; + color: #de2c3b; +} +.error { + color: #de2c3b; +} +.success { + color: #2c9f42; +} +.text-centered { + text-align: center; +} +.text-right { + text-align: right; +} +.last { + margin-right: 0 !important; +} +.pause { + margin-bottom: 0.825em !important; +} +.end { + margin-bottom: 0 !important; +} +.normal { + font-weight: normal; +} +.light { + font-weight: 300; +} +.bold { + font-weight: bold; +} +.italic { + font-style: italic; +} +.left { + float: left; +} +.right { + float: right; +} +.upper { + text-transform: uppercase; +} +.list-flat { + margin-left: 0; + list-style: none; +} +.color-black { + color: #0f0f0f; +} +.color-white { + color: #ffffff; +} +/* Colors */ +.color-gray-10 { + color: rgba(0, 0, 0, 0.1); +} +.color-gray-20 { + color: rgba(0, 0, 0, 0.2); +} +.color-gray-30 { + color: rgba(0, 0, 0, 0.3); +} +.color-gray-40 { + color: rgba(0, 0, 0, 0.4); +} +.color-gray-50 { + color: rgba(0, 0, 0, 0.5); +} +.color-gray-60 { + color: rgba(0, 0, 0, 0.6); +} +.color-gray-70 { + color: rgba(0, 0, 0, 0.7); +} +.color-gray-80 { + color: rgba(0, 0, 0, 0.8); +} +.color-gray-90 { + color: rgba(0, 0, 0, 0.9); +} +.color-white-10 { + color: rgba(255, 255, 255, 0.1); +} +.color-white-20 { + color: rgba(255, 255, 255, 0.2); +} +.color-white-30 { + color: rgba(255, 255, 255, 0.3); +} +.color-white-40 { + color: rgba(255, 255, 255, 0.4); +} +.color-white-50 { + color: rgba(255, 255, 255, 0.5); +} +.color-white-60 { + color: rgba(255, 255, 255, 0.6); +} +.color-white-70 { + color: rgba(255, 255, 255, 0.7); +} +.color-white-80 { + color: rgba(255, 255, 255, 0.8); +} +.color-white-90 { + color: rgba(255, 255, 255, 0.9); +} +/* Responsive embedded objects */ +.video-wrapper { + height: 0; + padding-bottom: 56.25%; + position: relative; + margin-bottom: 1.65em; +} +.video-wrapper iframe, +.video-wrapper object, +.video-wrapper embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +/* =Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .left, + .right { + float: none; + } + .hide-on-mobile { + display: none; + } +} +/* string content */ +.str { + color: #dd1144; +} +/* a keyword */ +.kwd { + color: #333333; +} +/* a comment */ +.com { + color: #999988; +} +/* a type name */ +.typ { + color: #445588; +} +/* a literal value */ +.lit { + color: #445588; +} +/* punctuation */ +.pun { + color: #888; +} +/* lisp open bracket */ +.opn { + color: #333333; +} +/* lisp close bracket */ +.clo { + color: #333333; +} +/* a markup tag name */ +.tag { + color: #367ac3; +} +/* a markup attribute name */ +.atn { + color: #51a7c9; +} +/* a markup attribute value */ +.atv { + color: #709c1a; +} +/* a declaration */ +.dec { + color: #666; +} +/* a variable name */ +.var { + color: teal; +} +/* a function name */ +.fun { + color: #990000; +} +.linenums ol li { + list-style-type: none; + counter-increment: list; + position: relative; +} +.linenums ol li:after { + content: counter(list); + position: absolute; + left: -3.3em; + border-right: 1px solid #e5e5e5; + padding-right: 9px; + width: 2.45em; + text-align: right; + color: rgba(0, 0, 0, 0.3); + font-size: 12px; +} +/* =Grid Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .mobile-width-100 { + width: 100%; + } + .units-row .unit-90, + .units-row .unit-80, + .units-row .unit-75, + .units-row .unit-70, + .units-row .unit-66, + .units-row .unit-65, + .units-row .unit-60, + .units-row .unit-50, + .units-row .unit-40, + .units-row .unit-35, + .units-row .unit-33, + .units-row .unit-30, + .units-row .unit-25, + .units-row .unit-20, + .units-row .unit-10 { + width: 100%; + float: none; + margin-left: 0; + margin-bottom: 1.65em; + } + .unit-push-90, + .unit-push-80, + .unit-push-75, + .unit-push-70, + .unit-push-66, + .unit-push-65, + .unit-push-60, + .unit-push-50, + .unit-push-40, + .unit-push-35, + .unit-push-33, + .unit-push-30, + .unit-push-25, + .unit-push-20, + .unit-push-10 { + left: 0; + } + .units-row .unit-push-right { + float: none; + } + .units-mobile-50 .unit-90, + .units-mobile-50 .unit-80, + .units-mobile-50 .unit-75, + .units-mobile-50 .unit-70, + .units-mobile-50 .unit-66, + .units-mobile-50 .unit-65, + .units-mobile-50 .unit-60, + .units-mobile-50 .unit-40, + .units-mobile-50 .unit-30, + .units-mobile-50 .unit-35, + .units-mobile-50 .unit-33, + .units-mobile-50 .unit-25, + .units-mobile-50 .unit-20, + .units-mobile-50 .unit-10 { + float: left; + margin-left: 3%; + width: 48.5%; + } + .units-mobile-50 .unit-90:first-child, + .units-mobile-50 .unit-80:first-child, + .units-mobile-50 .unit-75:first-child, + .units-mobile-50 .unit-70:first-child, + .units-mobile-50 .unit-66:first-child, + .units-mobile-50 .unit-65:first-child, + .units-mobile-50 .unit-60:first-child, + .units-mobile-50 .unit-40:first-child, + .units-mobile-50 .unit-35:first-child, + .units-mobile-50 .unit-30:first-child, + .units-mobile-50 .unit-33:first-child, + .units-mobile-50 .unit-25:first-child, + .units-mobile-50 .unit-20:first-child, + .units-mobile-50 .unit-10:first-child { + margin-left: 0; + } +} +/* =Blocks Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .blocks-2, + .blocks-3, + .blocks-4, + .blocks-5, + .blocks-6 { + margin-left: 0; + margin-bottom: 1.65em; + } + .blocks-2 > li, + .blocks-3 > li, + .blocks-4 > li, + .blocks-5 > li, + .blocks-6 > li { + float: none; + margin-left: 0; + width: 100%; + } + .blocks-mobile-50 > li, + .blocks-mobile-33 > li { + float: left; + margin-left: 3%; + } + .blocks-mobile-33, + .blocks-mobile-50 { + margin-left: -3%; + } + .blocks-mobile-50 > li { + width: 47%; + } + .blocks-mobile-33 > li { + width: 30.333333333333332%; + } +} +/* =Typography Responsive +-----------------------------------------------------------------------------*/ +/* Portrait tablet to landscape and desktop */ +@media (min-width: 768px) and (max-width: 979px) { + h1 { + font-size: 2.25em; + line-height: 1.125; + } + h2 { + font-size: 1.5em; + line-height: 1.25; + } + h3 { + font-size: 1.3125em; + line-height: 1.25; + } + h4 { + font-size: 1.125em; + line-height: 1.22222222; + } + h5 { + font-size: 1em; + } + h6 { + font-size: 0.75em; + } +} +/* Landscape phone to portrait tablet */ +@media (max-width: 767px) { + h1 { + font-size: 2.25em; + line-height: 1.25; + } + h2 { + font-size: 1.5em; + line-height: 1.15384615; + } + h3 { + font-size: 1.3125em; + line-height: 1.13636364; + } + h4 { + font-size: 1.125em; + line-height: 1.11111111; + } + h5 { + font-size: 1em; + } + h6 { + font-size: 0.75em; + } + .lead { + font-size: 1.2em; + } + ul, + ol, + ul ul, + ol ol, + ul ol, + ol ul { + margin-left: 1.65em; + } + blockquote { + margin-left: 0; + } +} +/* =Navigation Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .navbar.navbar-left, + .navbar.navbar-right, + .navbar li, + .navbar.navbar-left li, + .navbar.navbar-right li { + float: none; + text-align: center; + width: auto; + } + .navbar li, + .navbar.navbar-right li { + margin-left: 0; + margin-right: 0; + } + .fullwidth ul, + .fullwidth li { + width: auto; + } + .fullwidth li { + display: block; + } +} +/* =Forms Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .forms-list label { + display: inline-block; + } +} +@media print { + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + font-size: 12pt; + } + .h1, + h1 { + font-size: 36pt; + } + .h2, + h2 { + font-size: 24pt; + } + .h3, + h3 { + font-size: 18pt; + } + .h4, + h4 { + font-size: 14pt; + } + .h5, + h5 { + font-size: 12pt; + } + .h6, + h6 { + font-size: 12pt; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + page-break-inside: avoid; + } + blockquote { + border: none; + font-style: italic; + } + img { + max-width: 100% !important; + } + select { + background: #fff !important; + } +} diff --git a/public/css/kube.min.css b/public/css/kube.min.css new file mode 100755 index 0000000..57e8ad4 --- /dev/null +++ b/public/css/kube.min.css @@ -0,0 +1 @@ +*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,body,div,span,object,iframe,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video,h1,h2,h3,h4,h5,h6{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}a:active,a:hover{outline:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,embed,object,iframe,audio,video,canvas,progress,meter,output,textarea{display:block}audio:not([controls]){display:none;height:0}blockquote,q{quotes:none}blockquote p:before,blockquote p:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;vertical-align:top}thead th,thead td{font-weight:bold;vertical-align:bottom}a img,th img,td img{vertical-align:top}button,input,select,textarea{margin:0}textarea{overflow:auto;vertical-align:top;resize:vertical}button{width:auto;overflow:visible}input[type="reset"],input[type="submit"],input[type="file"],input[type="radio"],input[type="checkbox"],select,button{cursor:pointer}input[type="radio"],input[type="checkbox"]{font-size:110%;position:relative;top:-1px;margin-right:3px}input[type="search"]{-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}hr{display:block;height:1px;border:0;border-top:1px solid #ddd}img,video,audio,embed,object{max-width:100%}img,video,embed,object{height:auto}embed,object{height:100%}img{vertical-align:middle;-ms-interpolation-mode:bicubic}body{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:.9375em;line-height:1.65em;background:#fff;color:#222}a{color:#134da5}a:focus,a:hover{color:#de2c3b}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-weight:bold;color:#000;text-rendering:optimizeLegibility;margin:0 0 .5em 0}h1,.h1,h2,.h2{line-height:1.1}h3,.h3,h4,.h4{line-height:1.3}h1,.h1{font-size:2.25em}h2,.h2{font-size:1.5em;margin-bottom:.7em}h3,.h3{font-size:1.3125em}h4,.h4{font-size:1.125em}h5,.h5{font-size:1em}h6,.h6{font-size:.75em;text-transform:uppercase}.lead{font-size:1.3125em;line-height:1.5;margin-bottom:1.0999999999999999em}p,ul,ol,dl,dd,dt,blockquote,td,th{line-height:1.65em}ul,ol,ul ul,ol ol,ul ol,ol ul{margin:0 0 0 3.3em}ul li,ol li{text-align:left}ol ol li{list-style-type:lower-alpha}ol ol ol li{list-style-type:lower-roman}p,ul,ol,dl,blockquote,hr,pre,table,form,fieldset,figure,address{margin-bottom:1.65em}blockquote{position:relative;font-style:italic;font-size:1.125em;margin-left:2.4749999999999996em;padding-left:1.65em;border-left:2px solid #ddd}blockquote p{margin-bottom:.5em}blockquote small,cite{color:rgba(0,0,0,0.4);font-style:italic}small,blockquote cite{font-size:12.75px;line-height:1}address{font-style:normal}dl dt{font-weight:bold}dd{margin-left:1.65em}s,del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted #0f0f0f;cursor:help}strong,b{font-weight:bold}em,i{font-style:italic}sub,sup{font-size:11.25px;line-height:0;position:relative}sup{top:-0.5em}sub{bottom:-0.25em}figcaption{margin:.3em 0;font-size:12.75px;font-style:italic}ins,u{text-decoration:underline}mark{background-color:#ffc800;color:#0f0f0f;text-decoration:none}pre,code,kbd,samp,var,output{font-size:90%;font-style:normal;font-family:Menlo,Monaco,Consolas,"Courier New",monospace}pre{margin-top:1.65em;font-size:100%;line-height:1.5;color:#222;overflow:auto}code,samp,kbd{padding:3px 6px 2px 6px;display:inline-block;line-height:1;border-radius:2px}code{background:#f4f4f4;border:1px solid #d4d4d4}pre code{font-size:100%;border:0;padding:0;background:0;line-height:1.65em}var{color:rgba(0,0,0,0.5)}samp{background:#d3e3fb;border:1px solid #b2cef8}kbd{background:#0f0f0f;color:rgba(255,255,255,0.85);white-space:nowrap}button:active,button:focus{outline:0}textarea,select{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:1em;box-shadow:none}textarea,select[multiple],select[multiple="multiple"]{padding:.3em .35em;line-height:1.35em;width:100%}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="phone"],input[type="tel"],input[type="number"],input[type="datetime"],input[type="date"],input[type="month"],input[type="color"],input[type="time"],input[type="search"],input[type="datetime-local"]{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:1em;box-shadow:none;padding:.3em .35em;line-height:1.65em;border-radius:0;outline:0}select[multiple],select[multiple="multiple"],textarea,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="phone"],input[type="tel"],input[type="number"],input[type="datetime"],input[type="date"],input[type="month"],input[type="color"],input[type="time"],input[type="search"],input[type="datetime-local"]{background:#fff;border:1px solid #ccc;position:relative;z-index:2;-webkit-appearance:none}textarea[disabled],input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="phone"][disabled],input[type="tel"][disabled],input[type="number"][disabled],input[type="datetime"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="color"][disabled],input[type="time"][disabled],input[type="search"][disabled],input[type="datetime-local"][disabled]{resize:none;color:rgba(0,0,0,0.5)}select[disabled],input[type="checkbox"][disabled],input[type="radio"][disabled]{cursor:default}input::-moz-focus-inner,button::-moz-focus-inner{border:0;padding:0}input[type="range"]{position:relative;top:3px}select{margin-bottom:0!important}fieldset{padding:1.65em;margin-bottom:1.65em;border:1px solid #ccc}fieldset *:last-child{margin-bottom:0!important}legend{font-weight:bold;padding:0 1em;margin-left:-1em}table{max-width:100%;width:100%;empty-cells:show}table caption{text-transform:uppercase;padding:0 1.0999999999999999em;color:rgba(0,0,0,0.4);font-size:12.75px}table th,table td{border-bottom:1px solid #eee;padding:.825em 1.0999999999999999em}table tfoot th,table tfoot td{color:rgba(0,0,0,0.4)}.units-container:after,.units-row:after{content:"";display:table;clear:both}.units-container:after,.units-row:after{content:"";display:table;clear:both}.units-container{padding-top:1px;margin-top:-1px}.units-row{margin-bottom:1.65em}.width-100,.unit-100{width:100%}.width-90,.unit-90{width:90%}.width-80,.unit-80{width:80%}.width-75,.unit-75{width:75%}.width-70,.unit-70{width:70%}.width-66,.unit-66{width:66.6%}.width-65,.unit-65{width:65%}.width-60,.unit-60{width:60%}.width-50,.unit-50{width:50%}.width-40,.unit-40{width:40%}.width-35,.unit-35{width:35%}.width-33,.unit-33{width:33.3%}.width-30,.unit-30{width:30%}.width-25,.unit-25{width:25%}.width-20,.unit-20{width:20%}.width-10,.unit-10{width:10%}.units-row .unit-90,.units-row .unit-80,.units-row .unit-75,.units-row .unit-70,.units-row .unit-66,.units-row .unit-65,.units-row .unit-60,.units-row .unit-50,.units-row .unit-40,.units-row .unit-35,.units-row .unit-33,.units-row .unit-30,.units-row .unit-25,.units-row .unit-20,.units-row .unit-10{float:left;margin-left:3%}.units-row .unit-90:first-child,.units-row .unit-80:first-child,.units-row .unit-75:first-child,.units-row .unit-70:first-child,.units-row .unit-66:first-child,.units-row .unit-65:first-child,.units-row .unit-60:first-child,.units-row .unit-50:first-child,.units-row .unit-40:first-child,.units-row .unit-35:first-child,.units-row .unit-33:first-child,.units-row .unit-30:first-child,.units-row .unit-25:first-child,.units-row .unit-20:first-child,.units-row .unit-10:first-child{margin-left:0}.units-row .unit-90{width:89.7%}.units-row .unit-80{width:79.4%}.units-row .unit-75{width:74.25%}.units-row .unit-70{width:69.1%}.units-row .unit-66{width:65.66666666666666%}.units-row .unit-65{width:65.66666666666666%}.units-row .unit-60{width:58.800000000000004%}.units-row .unit-50{width:48.5%}.units-row .unit-40{width:38.2%}.units-row .unit-35{width:31.333333333333332%}.units-row .unit-33{width:31.333333333333332%}.units-row .unit-30{width:27.9%}.units-row .unit-25{width:22.75%}.units-row .unit-20{width:17.6%}.units-row .unit-10{width:7.3%}.unit-push-90,.unit-push-80,.unit-push-75,.unit-push-70,.unit-push-66,.unit-push-65,.unit-push-60,.unit-push-50,.unit-push-40,.unit-push-35,.unit-push-33,.unit-push-30,.unit-push-25,.unit-push-20,.unit-push-10{position:relative}.unit-push-90{left:92.7%}.unit-push-80{left:82.4%}.unit-push-75{left:77.25%}.unit-push-70{left:72.1%}.unit-push-66{left:68.66666666666666%}.unit-push-65{left:68.66666666666666%}.unit-push-60{left:61.800000000000004%}.unit-push-50{left:51.5%}.unit-push-40{left:41.2%}.unit-push-35{left:34.33333333333333%}.unit-push-33{left:34.33333333333333%}.unit-push-30{left:30.9%}.unit-push-25{left:25.75%}.unit-push-20{left:20.6%}.unit-push-10{left:10.3%}.units-row .unit-push-right{float:right}.units-row .unit-role-right{margin-left:3%;float:right}.units-row .unit-role-left{margin-left:0}.centered,.unit-centered{float:none!important;margin:0 auto!important}.unit-padding{padding:1.65em}.units-padding .unit-100,.units-padding .unit-90,.units-padding .unit-80,.units-padding .unit-75,.units-padding .unit-70,.units-padding .unit-66,.units-padding .unit-65,.units-padding .unit-60,.units-padding .unit-50,.units-padding .unit-40,.units-padding .unit-35,.units-padding .unit-33,.units-padding .unit-30,.units-padding .unit-25,.units-padding .unit-20,.units-padding .unit-10{padding:1.65em}.units-split .unit-90,.units-split .unit-80,.units-split .unit-75,.units-split .unit-70,.units-split .unit-66,.units-split .unit-65,.units-split .unit-60,.units-split .unit-50,.units-split .unit-40,.units-split .unit-35,.units-split .unit-33,.units-split .unit-30,.units-split .unit-25,.units-split .unit-20,.units-split .unit-10{margin-left:0}.units-split .unit-90{width:90%}.units-split .unit-80{width:80%}.units-split .unit-75{width:75%}.units-split .unit-70{width:70%}.units-split .unit-66{width:66.6%}.units-split .unit-65{width:65%}.units-split .unit-60{width:60%}.units-split .unit-50{width:50%}.units-split .unit-40{width:40%}.units-split .unit-35{width:35%}.units-split .unit-33{width:33.3%}.units-split .unit-30{width:30%}.units-split .unit-25{width:25%}.units-split .unit-20{width:20%}.units-split .unit-10{width:10%}.blocks-2,.blocks-3,.blocks-4,.blocks-5,.blocks-6{padding-left:0;list-style:none;margin-left:-3%}.blocks-2:after,.blocks-3:after,.blocks-4:after,.blocks-5:after,.blocks-6:after{content:"";display:table;clear:both}.blocks-2:after,.blocks-3:after,.blocks-4:after,.blocks-5:after,.blocks-6:after{content:"";display:table;clear:both}.blocks-2>li,.blocks-3>li,.blocks-4>li,.blocks-5>li,.blocks-6>li{height:auto;float:left;margin-bottom:1.65em;margin-left:3%}.blocks-2>li ul,.blocks-3>li ul,.blocks-4>li ul,.blocks-5>li ul,.blocks-6>li ul{list-style-type:disc}.blocks-2>li ul ul,.blocks-3>li ul ul,.blocks-4>li ul ul,.blocks-5>li ul ul,.blocks-6>li ul ul{list-style-type:circle}.blocks-2>li li,.blocks-3>li li,.blocks-4>li li,.blocks-5>li li,.blocks-6>li li{float:none;margin:0}.blocks-2>li{width:47%}.blocks-3>li{width:30.333333333333332%}.blocks-4>li{width:22%}.blocks-5>li{width:17%}.blocks-6>li{width:13.666666666666666%}.block-first{clear:both}table.table-bordered td,table.table-bordered th{border:1px solid #eee}table.table-simple td,table.table-simple th,table.table-simple caption{border:0;padding-left:0}table.table-flat td,table.table-flat th,table.table-flat caption{border:0;padding:0}table.table-stroked td,table.table-stroked th{border-bottom:1px solid #eee}table.table-stripped tbody tr:nth-child(odd) td{background:#f8f8f8}table.table-hovered tbody tr:hover td{background-color:#f4f4f4}.table-container{width:100%;overflow:auto;margin-bottom:1.65em}.table-container table{margin-bottom:0}.table-container::-webkit-scrollbar{-webkit-appearance:none;width:14px;height:14px}.table-container::-webkit-scrollbar-thumb{border-radius:8px;border:3px solid #fff;background-color:rgba(0,0,0,0.3)}.forms .btn,.forms input[type="submit"].btn,.forms button,.forms input[type="submit"],.forms input[type="reset"]{padding:.3625em 1.3em}.forms .btn-outline{padding:.3em 1.3em}.forms .btn-outline.bold{padding:.2375em 1.3em}.forms label{display:block;margin-bottom:1.0999999999999999em}.forms input[type="text"],.forms input[type="password"],.forms input[type="email"],.forms input[type="url"],.forms input[type="phone"],.forms input[type="tel"],.forms input[type="number"],.forms input[type="datetime"],.forms input[type="date"],.forms input[type="month"],.forms input[type="color"],.forms input[type="time"],.forms input[type="search"],.forms input[type="range"],.forms input[type="file"],.forms input[type="datetime-local"],.forms textarea,.forms select{display:block}.forms-inline input[type="text"],.forms-inline-list input[type="text"],.forms-inline input[type="password"],.forms-inline-list input[type="password"],.forms-inline input[type="email"],.forms-inline-list input[type="email"],.forms-inline input[type="url"],.forms-inline-list input[type="url"],.forms-inline input[type="phone"],.forms-inline-list input[type="phone"],.forms-inline input[type="tel"],.forms-inline-list input[type="tel"],.forms-inline input[type="number"],.forms-inline-list input[type="number"],.forms-inline input[type="datetime"],.forms-inline-list input[type="datetime"],.forms-inline input[type="date"],.forms-inline-list input[type="date"],.forms-inline input[type="month"],.forms-inline-list input[type="month"],.forms-inline input[type="color"],.forms-inline-list input[type="color"],.forms-inline input[type="time"],.forms-inline-list input[type="time"],.forms-inline input[type="search"],.forms-inline-list input[type="search"],.forms-inline input[type="range"],.forms-inline-list input[type="range"],.forms-inline input[type="file"],.forms-inline-list input[type="file"],.forms-inline input[type="datetime-local"],.forms-inline-list input[type="datetime-local"],.forms-inline textarea,.forms-inline-list textarea,.forms-inline select,.forms-inline-list select{display:inline-block}.forms-list,.forms-inline,.forms-inline-list{margin:0;padding:0;margin-bottom:1.0999999999999999em;list-style:none}.forms-list label,.forms-inline label,.forms-inline-list li,.forms-inline-list li label{display:inline-block;margin-bottom:0}.forms-inline-list li label{margin-right:.825em}.forms-inline-list li{margin-bottom:3px}.forms-list li{margin-bottom:6px}.forms-desc{margin-top:4px;color:rgba(0,0,0,0.4);font-size:12.75px;line-height:1.4em}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="phone"],input[type="tel"],input[type="number"],input[type="datetime"],input[type="date"],input[type="month"],input[type="color"],input[type="time"],input[type="search"],input[type="datetime-local"],textarea{-moz-transition:border ease .5s;transition:border ease .5s}.error,.success{font-weight:normal;font-size:12.75px}input.input-error,textarea.input-error,select.input-error,.input-error{border-color:#de2c3b;box-shadow:0 0 0 2px rgba(222,44,59,0.3),0 1px 2px rgba(0,0,0,0.2) inset}input.input-success,textarea.input-success,select.input-success,.input-success{border-color:#2c9f42;box-shadow:0 0 0 2px rgba(44,159,66,0.3),0 1px 2px rgba(0,0,0,0.2) inset}input.input-gray,textarea.input-gray,select.input-gray,.input-gray{border-color:#b3b6b7;box-shadow:0 0 0 2px rgba(179,182,183,0.4),0 1px 2px rgba(0,0,0,0.2) inset}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="phone"]:focus,input[type="tel"]:focus,input[type="number"]:focus,input[type="datetime"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="color"]:focus,input[type="time"]:focus,input[type="search"]:focus,input[type="datetime-local"]:focus,textarea:focus{outline:0;border-color:#2575ed;box-shadow:0 0 0 2px rgba(37,117,237,0.3),0 1px 2px rgba(0,0,0,0.2) inset}input.input-search,input[type="search"]{padding-right:.5em;padding-left:.5em;margin-bottom:0;border-radius:15px}input.input-on-black{border:1px solid rgba(255,255,255,0.1);background:rgba(255,255,255,0.35)}input.input-on-black::-webkit-input-placeholder{color:rgba(255,255,255,0.6)}input.input-on-black::-moz-placeholder{color:rgba(255,255,255,0.6)}input.input-on-black:focus,input.input-on-black.active{border:1px solid #fff;background:#fff;box-shadow:none}input.input-on-black:focus::-webkit-input-placeholder,input.input-on-black.active::-webkit-input-placeholder{color:#aaa}input.input-on-black:focus::-moz-placeholder,input.input-on-black.active::-moz-placeholder{color:#aaa}input.input-big{font-size:18px}input.input-small{font-size:12.75px}input.input-smaller{font-size:11.25px}.input-groups{display:table!important}.input-groups input{width:100%}.input-groups input,.input-groups .input-append,.input-groups .input-prepend,.input-groups .btn-append{display:table-cell!important}.input-groups .btn-append,.input-groups .input-append,.input-groups .input-prepend{width:1%;vertical-align:middle}.input-groups .input-append,.input-groups .input-prepend{background-color:#f4f4f4;border:1px solid #d4d4d4;margin:0;padding:.45em .75em .15em .75em;color:rgba(0,0,0,0.6);line-height:1.65em;font-size:12.75px;white-space:nowrap}.input-groups .input-prepend{border-right:0}.input-groups .input-append{position:relative;z-index:1;border-left:none}.input-groups .btn-append .btn{display:block;height:auto;border-radius:0 2px 2px 0}.navbar{font-size:105%;margin-bottom:1.65em}.navbar:after{content:"";display:table;clear:both}.navbar:after{content:"";display:table;clear:both}.navbar.navbar-left{float:left}.navbar.navbar-right{float:right}.navbar ul{list-style:none;margin:0}.navbar ul:after{content:"";display:table;clear:both}.navbar ul:after{content:"";display:table;clear:both}.navbar li{float:left;margin-right:1.65em}.navbar.navbar-right li{margin-right:0;margin-left:1.65em}.navbar a,.navbar span{display:block;text-decoration:none}.navbar a:hover{color:#de2c3b;text-decoration:underline}.navbar li.active a,.navbar span{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4)}.navigation-toggle{display:none;text-transform:uppercase;position:relative;color:#0f0f0f;background-color:#fff}.navigation-toggle:after{position:absolute;z-index:1;top:50%;margin-top:-12px;left:10px;content:"\2630";font-size:24px;line-height:1}.navigation-toggle.navigation-toggle-black{background-color:#0f0f0f;color:#fff}.navigation-toggle.navigation-toggle-show{margin-bottom:1.65em}.navigation-toggle span{position:relative;z-index:2;cursor:pointer;display:block;padding:10px 20px 10px 40px}.navigation-fixed{position:fixed;top:0;left:0;z-index:101}.navbar-pills a,.navbar-pills span{padding:.825em 1.65em}.navbar-pills a:hover{color:#0f0f0f;background:#eee}.navbar-pills li.active a,.navbar-pills span{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4);background:#eee}.navbar-pills li{margin-right:1px}.navbar-pills.navbar-right li{margin-left:1px}.fullwidth ul{width:100%}.fullwidth li{float:none!important;margin:0;display:table-cell;width:1%;text-align:center}.fullwidth li a,.fullwidth li span{display:block}.nav{margin-bottom:1.65em}.nav ul{list-style:none;margin:0}.nav ul li ul{margin-left:2em;font-size:.95em}.nav a,.nav span{display:block;padding:.5em 0}.nav a{color:#0f0f0f;text-decoration:none}.nav a:hover{color:#de2c3b;text-decoration:underline}.nav li.active a,.nav span{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4)}.nav i.fa{width:1.65em}.nav-stacked li{margin-bottom:1px}.nav-stacked a,.nav-stacked span{padding:.6em .7em}.nav-stacked a{background:#f6f6f6}.nav-stacked a:hover{color:#000;background:#eee}.nav-stacked li.active a,.nav-stacked span{background:#fff;text-decoration:none;cursor:text;color:rgba(0,0,0,0.3)}.nav-stats li{position:relative}.nav-stats a,.nav-stats span{padding-right:50px}.nav-stats sup,.nav-stats .badge{position:absolute;top:50%;right:0}.nav-stats sup{color:rgba(0,0,0,0.4)}.nav-stats .badge{margin-top:-8px}.nav-tabs{border-bottom:1px solid #e3e3e3;margin-bottom:1.65em}.nav-tabs:after{content:"";display:table;clear:both}.nav-tabs:after{content:"";display:table;clear:both}.nav-tabs ul{list-style:none;margin:0}.nav-tabs li{float:left;margin-right:2px}.nav-tabs a,.nav-tabs span{display:block;line-height:1;padding:.825em 1.65em;border:1px solid transparent}.nav-tabs a{color:rgba(0,0,0,0.5);text-decoration:none}.nav-tabs a:focus,.nav-tabs a:hover{color:#0f0f0f;text-decoration:underline;background-color:#eee}.nav-tabs li.active a,.nav-tabs span{color:#0f0f0f;background:#fff;position:relative;border:1px solid #ddd;border-bottom:1px solid #fff;bottom:-1px;cursor:default;text-decoration:none}.breadcrumbs{margin-bottom:1.65em}.breadcrumbs:after{content:"";display:table;clear:both}.breadcrumbs:after{content:"";display:table;clear:both}.breadcrumbs ul{font-size:.9em;color:rgba(0,0,0,0.4);list-style:none;margin:0}.breadcrumbs ul:after{content:"";display:table;clear:both}.breadcrumbs ul:after{content:"";display:table;clear:both}.breadcrumbs li{float:left;margin-right:5px}.breadcrumbs li+li:before{content:" > ";color:#aaa;font-size:12px;margin:0 7px 0 5px;position:relative;top:-1px}.breadcrumbs.breadcrumbs-path li+li:before{content:" / ";top:0}.breadcrumbs a{color:#0f0f0f;text-decoration:none}.breadcrumbs a:hover{color:#0f0f0f;text-decoration:underline}.breadcrumbs li.active a,.breadcrumbs span,.breadcrumbs li.active a:hover{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4)}.pagination{position:relative;left:-9px;margin-left:0;list-style:none}.pagination:after{content:"";display:table;clear:both}.pagination:after{content:"";display:table;clear:both}.pagination li{float:left;margin-right:2px}.pagination a,.pagination span{display:block;padding:7px 9px;line-height:1;border-radius:2px;color:#0f0f0f;text-decoration:none}.pagination span,.pagination li.active a,.pagination li.active a:hover{color:#fff;background-color:#0f0f0f;cursor:text}.pagination a:focus,.pagination a:hover{text-decoration:none;background-color:#0f0f0f;color:#fff}.btn,input[type="submit"].btn{display:inline-block;vertical-align:top;font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:1em;font-weight:400;line-height:1.65em;text-align:center;text-decoration:none;color:#222;-webkit-appearance:none;outline:0;margin:0;border:0;border-radius:2px;box-shadow:none;cursor:pointer;background:#e0e3e5;padding:.55em 2.5em}.btn:hover,input[type="submit"].btn:hover{color:rgba(0,0,0,0.5);background:#b3b6b7}.btn::-moz-focus-inner{border:0;padding:0}.btn-big,input[type="submit"].btn-big{font-size:18px}.btn-small,input[type="submit"].btn-small{font-size:12.75px}.btn-smaller,input[type="submit"].btn-smaller{font-size:11.25px;vertical-align:baseline}.btn-round{border-radius:15px}.btn-outline,input[type="submit"].btn-outline{background:0;padding:.48750000000000004em 2.5em;border:1px solid #0f0f0f}.btn-outline:hover,input[type="submit"].btn-outline:hover{border-color:#b3b6b7}.btn-outline.btn-active{padding:.55em 2.5em}.btn-outline.bold{border-width:2px;padding:.42500000000000004em 2.5em}.btn-active,.btn[disabled],.btn-disabled{background:0;background:#b3b6b7;color:rgba(0,0,0,0.5)}.btn-active:hover,.btn[disabled]:hover,.btn-disabled:hover{color:rgba(0,0,0,0.5);background:#b3b6b7}.btn-active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset}.btn-outline.btn[disabled],.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(0,0,0,0.3);border:1px solid rgba(0,0,0,0.1)}.btn-outline.btn-active{background:0;color:rgba(0,0,0,0.4);border:0;box-shadow:0 1px 3px rgba(0,0,0,0.2) inset}.btn[disabled],.btn-disabled{cursor:default;box-shadow:none}.btn-blue,input[type="submit"].btn-blue{color:rgba(255,255,255,0.9);background:#2575ed}.btn-blue:hover,input[type="submit"].btn-blue:hover{color:rgba(255,255,255,0.6);background:#1a52a5}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active,.btn-blue.btn-disabled,input[type="submit"].btn-blue.btn-disabled,.btn-blue.btn[disabled],input[type="submit"].btn-blue.btn[disabled]{color:rgba(255,255,255,0.5);background:#1a52a5}.btn-blue.btn-active:hover,input[type="submit"].btn-blue.btn-active:hover,.btn-blue.btn-disabled:hover,input[type="submit"].btn-blue.btn-disabled:hover,.btn-blue.btn[disabled]:hover,input[type="submit"].btn-blue.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-blue.btn-outline,input[type="submit"].btn-blue.btn-outline{background:0;border-color:#2575ed;color:#2575ed}.btn-blue.btn-outline:hover,input[type="submit"].btn-blue.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2575ed}.btn-blue.btn-outline.btn[disabled],input[type="submit"].btn-blue.btn-outline.btn[disabled],.btn-blue.btn-outline.btn-disabled,input[type="submit"].btn-blue.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(37,117,237,0.4);border:1px solid rgba(37,117,237,0.3)}.btn-blue.btn-outline.btn-active,input[type="submit"].btn-blue.btn-outline.btn-active{background:0;color:rgba(37,117,237,0.6);border:0;box-shadow:0 1px 3px rgba(26,82,165,0.6) inset}.btn-blue:hover,input[type="submit"].btn-blue:hover{color:rgba(255,255,255,0.6);background:#1a52a5}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active,.btn-blue.btn-disabled,input[type="submit"].btn-blue.btn-disabled,.btn-blue.btn[disabled],input[type="submit"].btn-blue.btn[disabled]{color:rgba(255,255,255,0.5);background:#1a52a5}.btn-blue.btn-active:hover,input[type="submit"].btn-blue.btn-active:hover,.btn-blue.btn-disabled:hover,input[type="submit"].btn-blue.btn-disabled:hover,.btn-blue.btn[disabled]:hover,input[type="submit"].btn-blue.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-blue.btn-outline,input[type="submit"].btn-blue.btn-outline{background:0;border-color:#2575ed;color:#2575ed}.btn-blue.btn-outline:hover,input[type="submit"].btn-blue.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2575ed}.btn-blue.btn-outline.btn[disabled],input[type="submit"].btn-blue.btn-outline.btn[disabled],.btn-blue.btn-outline.btn-disabled,input[type="submit"].btn-blue.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(37,117,237,0.4);border:1px solid rgba(37,117,237,0.3)}.btn-blue.btn-outline.btn-active,input[type="submit"].btn-blue.btn-outline.btn-active{background:0;color:rgba(37,117,237,0.6);border:0;box-shadow:0 1px 3px rgba(26,82,165,0.6) inset}.btn-red,input[type="submit"].btn-red{color:rgba(255,255,255,0.9);background:#de2c3b}.btn-red:hover,input[type="submit"].btn-red:hover{color:rgba(255,255,255,0.6);background:#b2232f}.btn-red.btn-active,input[type="submit"].btn-red.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-red.btn-active,input[type="submit"].btn-red.btn-active,.btn-red.btn-disabled,input[type="submit"].btn-red.btn-disabled,.btn-red.btn[disabled],input[type="submit"].btn-red.btn[disabled]{color:rgba(255,255,255,0.5);background:#b2232f}.btn-red.btn-active:hover,input[type="submit"].btn-red.btn-active:hover,.btn-red.btn-disabled:hover,input[type="submit"].btn-red.btn-disabled:hover,.btn-red.btn[disabled]:hover,input[type="submit"].btn-red.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-red.btn-outline,input[type="submit"].btn-red.btn-outline{background:0;border-color:#de2c3b;color:#de2c3b}.btn-red.btn-outline:hover,input[type="submit"].btn-red.btn-outline:hover{color:rgba(255,255,255,0.9);background:#de2c3b}.btn-red.btn-outline.btn[disabled],input[type="submit"].btn-red.btn-outline.btn[disabled],.btn-red.btn-outline.btn-disabled,input[type="submit"].btn-red.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(222,44,59,0.4);border:1px solid rgba(222,44,59,0.3)}.btn-red.btn-outline.btn-active,input[type="submit"].btn-red.btn-outline.btn-active{background:0;color:rgba(222,44,59,0.6);border:0;box-shadow:0 1px 3px rgba(178,35,47,0.6) inset}.btn-red:hover,input[type="submit"].btn-red:hover{color:rgba(255,255,255,0.6);background:#b2232f}.btn-red.btn-active,input[type="submit"].btn-red.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-red.btn-active,input[type="submit"].btn-red.btn-active,.btn-red.btn-disabled,input[type="submit"].btn-red.btn-disabled,.btn-red.btn[disabled],input[type="submit"].btn-red.btn[disabled]{color:rgba(255,255,255,0.5);background:#b2232f}.btn-red.btn-active:hover,input[type="submit"].btn-red.btn-active:hover,.btn-red.btn-disabled:hover,input[type="submit"].btn-red.btn-disabled:hover,.btn-red.btn[disabled]:hover,input[type="submit"].btn-red.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-red.btn-outline,input[type="submit"].btn-red.btn-outline{background:0;border-color:#de2c3b;color:#de2c3b}.btn-red.btn-outline:hover,input[type="submit"].btn-red.btn-outline:hover{color:rgba(255,255,255,0.9);background:#de2c3b}.btn-red.btn-outline.btn[disabled],input[type="submit"].btn-red.btn-outline.btn[disabled],.btn-red.btn-outline.btn-disabled,input[type="submit"].btn-red.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(222,44,59,0.4);border:1px solid rgba(222,44,59,0.3)}.btn-red.btn-outline.btn-active,input[type="submit"].btn-red.btn-outline.btn-active{background:0;color:rgba(222,44,59,0.6);border:0;box-shadow:0 1px 3px rgba(178,35,47,0.6) inset}.btn-green,input[type="submit"].btn-green{color:rgba(255,255,255,0.9);background:#2c9f42}.btn-green:hover,input[type="submit"].btn-green:hover{color:rgba(255,255,255,0.6);background:#237f35}.btn-green.btn-active,input[type="submit"].btn-green.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-green.btn-active,input[type="submit"].btn-green.btn-active,.btn-green.btn-disabled,input[type="submit"].btn-green.btn-disabled,.btn-green.btn[disabled],input[type="submit"].btn-green.btn[disabled]{color:rgba(255,255,255,0.5);background:#237f35}.btn-green.btn-active:hover,input[type="submit"].btn-green.btn-active:hover,.btn-green.btn-disabled:hover,input[type="submit"].btn-green.btn-disabled:hover,.btn-green.btn[disabled]:hover,input[type="submit"].btn-green.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-green.btn-outline,input[type="submit"].btn-green.btn-outline{background:0;border-color:#2c9f42;color:#2c9f42}.btn-green.btn-outline:hover,input[type="submit"].btn-green.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2c9f42}.btn-green.btn-outline.btn[disabled],input[type="submit"].btn-green.btn-outline.btn[disabled],.btn-green.btn-outline.btn-disabled,input[type="submit"].btn-green.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(44,159,66,0.4);border:1px solid rgba(44,159,66,0.3)}.btn-green.btn-outline.btn-active,input[type="submit"].btn-green.btn-outline.btn-active{background:0;color:rgba(44,159,66,0.6);border:0;box-shadow:0 1px 3px rgba(35,127,53,0.6) inset}.btn-green:hover,input[type="submit"].btn-green:hover{color:rgba(255,255,255,0.6);background:#237f35}.btn-green.btn-active,input[type="submit"].btn-green.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-green.btn-active,input[type="submit"].btn-green.btn-active,.btn-green.btn-disabled,input[type="submit"].btn-green.btn-disabled,.btn-green.btn[disabled],input[type="submit"].btn-green.btn[disabled]{color:rgba(255,255,255,0.5);background:#237f35}.btn-green.btn-active:hover,input[type="submit"].btn-green.btn-active:hover,.btn-green.btn-disabled:hover,input[type="submit"].btn-green.btn-disabled:hover,.btn-green.btn[disabled]:hover,input[type="submit"].btn-green.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-green.btn-outline,input[type="submit"].btn-green.btn-outline{background:0;border-color:#2c9f42;color:#2c9f42}.btn-green.btn-outline:hover,input[type="submit"].btn-green.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2c9f42}.btn-green.btn-outline.btn[disabled],input[type="submit"].btn-green.btn-outline.btn[disabled],.btn-green.btn-outline.btn-disabled,input[type="submit"].btn-green.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(44,159,66,0.4);border:1px solid rgba(44,159,66,0.3)}.btn-green.btn-outline.btn-active,input[type="submit"].btn-green.btn-outline.btn-active{background:0;color:rgba(44,159,66,0.6);border:0;box-shadow:0 1px 3px rgba(35,127,53,0.6) inset}.btn-black,input[type="submit"].btn-black{color:rgba(255,255,255,0.9);background:#0f0f0f}.btn-black:hover,input[type="submit"].btn-black:hover{color:rgba(255,255,255,0.6);background:#363738}.btn-black.btn-active,input[type="submit"].btn-black.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.7) inset}.btn-black.btn-active,input[type="submit"].btn-black.btn-active,.btn-black.btn-disabled,input[type="submit"].btn-black.btn-disabled,.btn-black.btn[disabled],input[type="submit"].btn-black.btn[disabled]{color:rgba(255,255,255,0.5);background:#363738}.btn-black.btn-active:hover,input[type="submit"].btn-black.btn-active:hover,.btn-black.btn-disabled:hover,input[type="submit"].btn-black.btn-disabled:hover,.btn-black.btn[disabled]:hover,input[type="submit"].btn-black.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-black.btn-outline,input[type="submit"].btn-black.btn-outline{background:0;border-color:#0f0f0f;color:#0f0f0f}.btn-black.btn-outline:hover,input[type="submit"].btn-black.btn-outline:hover{color:rgba(255,255,255,0.9);background:#0f0f0f}.btn-black.btn-outline.btn[disabled],input[type="submit"].btn-black.btn-outline.btn[disabled],.btn-black.btn-outline.btn-disabled,input[type="submit"].btn-black.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(15,15,15,0.4);border:1px solid rgba(15,15,15,0.3)}.btn-black.btn-outline.btn-active,input[type="submit"].btn-black.btn-outline.btn-active{background:0;color:rgba(15,15,15,0.6);border:0;box-shadow:0 1px 3px rgba(54,55,56,0.6) inset}.btn-black:hover,input[type="submit"].btn-black:hover{color:rgba(255,255,255,0.6);background:#363738}.btn-black.btn-active,input[type="submit"].btn-black.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.7) inset}.btn-black.btn-active,input[type="submit"].btn-black.btn-active,.btn-black.btn-disabled,input[type="submit"].btn-black.btn-disabled,.btn-black.btn[disabled],input[type="submit"].btn-black.btn[disabled]{color:rgba(255,255,255,0.5);background:#363738}.btn-black.btn-active:hover,input[type="submit"].btn-black.btn-active:hover,.btn-black.btn-disabled:hover,input[type="submit"].btn-black.btn-disabled:hover,.btn-black.btn[disabled]:hover,input[type="submit"].btn-black.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-black.btn-outline,input[type="submit"].btn-black.btn-outline{background:0;border-color:#0f0f0f;color:#0f0f0f}.btn-black.btn-outline:hover,input[type="submit"].btn-black.btn-outline:hover{color:rgba(255,255,255,0.9);background:#0f0f0f}.btn-black.btn-outline.btn[disabled],input[type="submit"].btn-black.btn-outline.btn[disabled],.btn-black.btn-outline.btn-disabled,input[type="submit"].btn-black.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(15,15,15,0.4);border:1px solid rgba(15,15,15,0.3)}.btn-black.btn-outline.btn-active,input[type="submit"].btn-black.btn-outline.btn-active{background:0;color:rgba(15,15,15,0.6);border:0;box-shadow:0 1px 3px rgba(54,55,56,0.6) inset}.btn-yellow,input[type="submit"].btn-yellow{color:rgba(0,0,0,0.9);background:#ffc800}.btn-yellow:hover,input[type="submit"].btn-yellow:hover{color:rgba(0,0,0,0.6);background:#cca000}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active,.btn-yellow.btn-disabled,input[type="submit"].btn-yellow.btn-disabled,.btn-yellow.btn[disabled],input[type="submit"].btn-yellow.btn[disabled]{color:rgba(0,0,0,0.5);background:#cca000}.btn-yellow.btn-active:hover,input[type="submit"].btn-yellow.btn-active:hover,.btn-yellow.btn-disabled:hover,input[type="submit"].btn-yellow.btn-disabled:hover,.btn-yellow.btn[disabled]:hover,input[type="submit"].btn-yellow.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-yellow.btn-outline,input[type="submit"].btn-yellow.btn-outline{background:0;border-color:#ffc800;color:#ffc800}.btn-yellow.btn-outline:hover,input[type="submit"].btn-yellow.btn-outline:hover{color:rgba(0,0,0,0.9);background:#ffc800}.btn-yellow.btn-outline.btn[disabled],input[type="submit"].btn-yellow.btn-outline.btn[disabled],.btn-yellow.btn-outline.btn-disabled,input[type="submit"].btn-yellow.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,200,0,0.4);border:1px solid rgba(255,200,0,0.3)}.btn-yellow.btn-outline.btn-active,input[type="submit"].btn-yellow.btn-outline.btn-active{background:0;color:rgba(255,200,0,0.6);border:0;box-shadow:0 1px 3px rgba(204,160,0,0.6) inset}.btn-yellow:hover,input[type="submit"].btn-yellow:hover{color:rgba(0,0,0,0.6);background:#cca000}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active,.btn-yellow.btn-disabled,input[type="submit"].btn-yellow.btn-disabled,.btn-yellow.btn[disabled],input[type="submit"].btn-yellow.btn[disabled]{color:rgba(0,0,0,0.5);background:#cca000}.btn-yellow.btn-active:hover,input[type="submit"].btn-yellow.btn-active:hover,.btn-yellow.btn-disabled:hover,input[type="submit"].btn-yellow.btn-disabled:hover,.btn-yellow.btn[disabled]:hover,input[type="submit"].btn-yellow.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-yellow.btn-outline,input[type="submit"].btn-yellow.btn-outline{background:0;border-color:#ffc800;color:#ffc800}.btn-yellow.btn-outline:hover,input[type="submit"].btn-yellow.btn-outline:hover{color:rgba(0,0,0,0.9);background:#ffc800}.btn-yellow.btn-outline.btn[disabled],input[type="submit"].btn-yellow.btn-outline.btn[disabled],.btn-yellow.btn-outline.btn-disabled,input[type="submit"].btn-yellow.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,200,0,0.4);border:1px solid rgba(255,200,0,0.3)}.btn-yellow.btn-outline.btn-active,input[type="submit"].btn-yellow.btn-outline.btn-active{background:0;color:rgba(255,200,0,0.6);border:0;box-shadow:0 1px 3px rgba(204,160,0,0.6) inset}.btn-white,input[type="submit"].btn-white{color:rgba(0,0,0,0.9);background:#fff}.btn-white:hover,input[type="submit"].btn-white:hover{color:rgba(0,0,0,0.6);background:#ededed}.btn-white.btn-active,input[type="submit"].btn-white.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.2) inset}.btn-white.btn-active,input[type="submit"].btn-white.btn-active,.btn-white.btn-disabled,input[type="submit"].btn-white.btn-disabled,.btn-white.btn[disabled],input[type="submit"].btn-white.btn[disabled]{color:rgba(0,0,0,0.5);background:#ededed}.btn-white.btn-active:hover,input[type="submit"].btn-white.btn-active:hover,.btn-white.btn-disabled:hover,input[type="submit"].btn-white.btn-disabled:hover,.btn-white.btn[disabled]:hover,input[type="submit"].btn-white.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-white.btn-outline,input[type="submit"].btn-white.btn-outline{background:0;border-color:#fff;color:#fff}.btn-white.btn-outline:hover,input[type="submit"].btn-white.btn-outline:hover{color:rgba(0,0,0,0.9);background:#fff}.btn-white.btn-outline.btn[disabled],input[type="submit"].btn-white.btn-outline.btn[disabled],.btn-white.btn-outline.btn-disabled,input[type="submit"].btn-white.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,255,255,0.4);border:1px solid rgba(255,255,255,0.3)}.btn-white.btn-outline.btn-active,input[type="submit"].btn-white.btn-outline.btn-active{background:0;color:rgba(255,255,255,0.6);border:0;box-shadow:0 1px 3px rgba(237,237,237,0.6) inset}.btn-white:hover,input[type="submit"].btn-white:hover{color:rgba(0,0,0,0.6);background:#ededed}.btn-white.btn-active,input[type="submit"].btn-white.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.2) inset}.btn-white.btn-active,input[type="submit"].btn-white.btn-active,.btn-white.btn-disabled,input[type="submit"].btn-white.btn-disabled,.btn-white.btn[disabled],input[type="submit"].btn-white.btn[disabled]{color:rgba(0,0,0,0.5);background:#ededed}.btn-white.btn-active:hover,input[type="submit"].btn-white.btn-active:hover,.btn-white.btn-disabled:hover,input[type="submit"].btn-white.btn-disabled:hover,.btn-white.btn[disabled]:hover,input[type="submit"].btn-white.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-white.btn-outline,input[type="submit"].btn-white.btn-outline{background:0;border-color:#fff;color:#fff}.btn-white.btn-outline:hover,input[type="submit"].btn-white.btn-outline:hover{color:rgba(0,0,0,0.9);background:#fff}.btn-white.btn-outline.btn[disabled],input[type="submit"].btn-white.btn-outline.btn[disabled],.btn-white.btn-outline.btn-disabled,input[type="submit"].btn-white.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,255,255,0.4);border:1px solid rgba(255,255,255,0.3)}.btn-white.btn-outline.btn-active,input[type="submit"].btn-white.btn-outline.btn-active{background:0;color:rgba(255,255,255,0.6);border:0;box-shadow:0 1px 3px rgba(237,237,237,0.6) inset}.btn-white.btn-outline.btn-active{box-shadow:none;border:1px solid rgba(255,255,255,0.3);padding:.48750000000000004em 2.5em}.btn-single,.btn-group{display:inline-block;margin-right:2px;vertical-align:bottom}.btn-single:after,.btn-group:after{content:"";display:table;clear:both}.btn-single:after,.btn-group:after{content:"";display:table;clear:both}.btn-single>.btn,.btn-single>input,.btn-group>.btn,.btn-group>input{float:left;border-radius:0;margin-left:-1px}.btn-single>.btn{border-radius:2px}.btn-group>.btn:first-child{border-radius:2px 0 0 2px}.btn-group>.btn:last-child{border-radius:0 2px 2px 0}.btn-group>.btn.btn-round:first-child,.btn-group>.input-search:first-child{border-radius:15px 0 0 15px}.btn-group>.btn.btn-round:last-child,.btn-group>.input-search:last-child{border-radius:0 15px 15px 0}.tools-alert{padding:12px 15px;background:#f7f8f8;color:#0f0f0f;margin-bottom:1.65em}.tools-message{display:none;position:fixed;z-index:100;top:10px;right:10px;max-width:350px;line-height:1.5;font-size:95%;padding:12px 15px;color:#0f0f0f;background:#e0e3e5}.tools-message ul{margin:0;list-style:none}.tools-message-black,.tools-message-blue,.tools-message-red,.tools-message-green{color:rgba(255,255,255,0.95)}.tools-message-black{background:#0f0f0f}.tools-message-blue{background:#2575ed}.tools-message-red{background:#de2c3b}.tools-message-yellow{background:#ffc800}.tools-message-green{background:#2c9f42}.tools-alert-black{background:#dadada}.tools-alert-blue{background:#d3e3fb}.tools-alert-red{background:#f8d5d8}.tools-alert-yellow{background:#fff4cc}.tools-alert-green{background:#d5ecd9}.label,.badge{background:#e0e3e5;font-size:12.75px;display:inline-block;line-height:1;padding:4px 7px 3px 7px;color:#0f0f0f;text-align:center;font-weight:normal;text-transform:uppercase}.label-outline{background:0;border:1px solid #0f0f0f;padding:3px 6px 2px 6px}.badge{border-radius:15px}.badge-small{font-size:11.25px;padding:3px 5px}.label-black,.label-blue,.label-red,.label-green,.badge-black,.badge-blue,.badge-red,.badge-green{color:#fff}.label-black,.badge-black{background:#0f0f0f}.label-blue,.badge-blue{background:#2575ed}.label-red,.badge-red{background:#de2c3b}.label-green,.badge-green{background:#2c9f42}.label-yellow,.badge-yellow{background:#ffc800}.label-white,.badge-white{background:#fff}.label-black.label-outline,.label-blue.label-outline,.label-red.label-outline,.label-green.label-outline,.label-yellow.label-outline,.label-white.label-outline{background:0;color:#0f0f0f}.label-blue.label-outline{border-color:#2575ed;color:#2575ed}.label-red.label-outline{border-color:#de2c3b;color:#de2c3b}.label-green.label-outline{border-color:#2c9f42;color:#2c9f42}.label-yellow.label-outline{border-color:#ffc800;color:#ffc800}.label-white.label-outline{border-color:#fff;color:#fff}#tools-progress{position:fixed;top:0;left:0;width:100%;z-index:1000000;height:10px}#tools-progress span{display:block;width:100%;height:100%;background-color:#1a52a5;background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.2) 50%,rgba(255,255,255,0.2) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.2) 50%,rgba(255,255,255,0.2) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.2) 50%,rgba(255,255,255,0.2) 75%,transparent 75%,transparent);-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;background-size:40px 40px}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.accordion-title{position:relative;display:block;margin:0;margin-bottom:2px;padding:12px 50px 12px 18px;color:#000;text-decoration:none;font-weight:normal;font-size:.9375em;line-height:1,4em;background:#f7f8f8;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.accordion-title.accordion-title-opened{margin-bottom:0;font-weight:bold;background:#f0f1f2}.accordion-title a,.accordion-title:hover{color:#000;text-decoration:none}.accordion-panel{padding:1.65em;margin-bottom:10px}.accordion-toggle{position:absolute;top:50%;margin-top:-8px;right:20px;padding:0;font-size:0;line-height:1}.accordion-toggle-closed{background:#000;width:1px;height:15px;margin-left:1px}.accordion-toggle-closed:before{position:absolute;top:7px;left:-7px;content:"";width:15px;height:1px;background:#000}.accordion-toggle-opened:before{position:absolute;top:7px;left:-8px;content:"";width:15px;height:1px;background:#000}.filterbox{position:relative}.filterbox input{padding-right:30px}.filterbox span{position:absolute;z-index:2;top:0;right:1px;width:26px;height:100%;cursor:pointer}.filterbox span:after{content:"";display:inline-block;position:relative;top:50%;margin-left:8px;margin-top:-21px;width:0;height:0;vertical-align:middle;border-top:5px solid rgba(0,0,0,0.6);border-right:5px solid transparent;border-left:5px solid transparent}.filterbox-list{z-index:1000;position:absolute;left:0;display:none;margin:0;list-style:none;background:#fff;width:100%;box-shadow:0 1px 3px rgba(0,0,0,0.2);max-height:250px;overflow:auto}.filterbox-list li{padding:4px 10px;color:#000;cursor:pointer}.filterbox-list li:hover{background:#f0f1f2}.filterbox-list li.active{background:#2575ed;color:#fff}.tooltip{position:absolute;z-index:10000;display:inline-block;color:#fff;padding:2px 10px;font-size:12.75px;line-height:1.5em;max-width:250px;background:#0f0f0f}.tooltip-theme-red{background:#de2c3b}.tooltip-theme-blue{background:#2575ed}.tooltip-theme-green{background:#2c9f42}.tooltip-theme-yellow{background:#ffc800}.tooltip-theme-white{background:#fff}.tooltip-theme-yellow,.tooltip-theme-white{color:#000}.dropdown{display:none;position:absolute;z-index:102;top:0;right:0;width:250px;color:#0f0f0f;background:#fff;box-shadow:0 1px 5px rgba(0,0,0,0.3);overflow:auto}.dropdown section{max-height:250px;overflow:auto;padding:20px}.dropdown footer{padding:20px}ul.dropdown{max-height:300px;list-style:none;margin:0;line-height:1.5;font-size:95%;padding:0}ul.dropdown a{display:block;padding:7px 15px;text-decoration:none;color:#0f0f0f}ul.dropdown a:hover{background:#eee}ul.dropdown li.divider{border-bottom:1px solid #e2e2e2}.caret{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent}.caret.caret-up{border-top:0;border-bottom:4px solid}.livesearch-box{position:relative;display:inline-block;width:100%}.livesearch-box input{padding-left:30px}.livesearch-box .close{position:absolute;top:.2em;right:5px;z-index:2;padding:4px 6px;line-height:1;font-size:20px;cursor:pointer;color:#000;text-decoration:none;filter:alpha(opacity=50);-moz-opacity:.5;opacity:.5}.livesearch-box .close:before{content:'\00D7'}.livesearch-box .close:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}.livesearch-box .close:before{content:'\00D7'}.livesearch-box .close:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}.livesearch-icon{position:absolute;top:53%;left:10px;z-index:2}.livesearch-icon:before,.livesearch-icon:after{content:"";position:absolute;top:50%;left:0;margin:-8px 0 0;background:rgba(0,0,0,0.5)}.livesearch-icon:before{width:10px;height:10px;border:2px solid rgba(0,0,0,0.5);background:transparent;border-radius:12px}.livesearch-icon:after{left:10px;width:2px;height:7px;margin-top:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.tools-droparea{position:relative;overflow:hidden;padding:80px 20px;border:3px dashed rgba(0,0,0,0.1)}.tools-droparea.drag-hover{background:rgba(200,222,250,0.75)}.tools-droparea.drag-drop{background:rgba(250,248,200,0.5)}.tools-droparea-placeholder{text-align:center;font-size:11px;color:rgba(0,0,0,0.5)}.autocomplete{position:absolute;z-index:1000;left:0;display:none;margin:0;list-style:none;background:#fff;width:250px;box-shadow:0 1px 3px rgba(0,0,0,0.2);max-height:250px;overflow:auto}.autocomplete a{padding:4px 10px;color:#000;display:block;text-decoration:none}.autocomplete a:hover{background:#f0f1f2}.autocomplete a.active{background:#2575ed;color:#fff}#modal-overlay{position:fixed;top:0;left:0;margin:auto;overflow:auto;width:100%;height:100%;background-color:#000!important;filter:alpha(opacity=30);-moz-opacity:.3;opacity:.3;z-index:100}.modal-blur{-webkit-filter:blur(3px);-moz-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px)}.modal-box{position:fixed;top:0;left:0;bottom:0;right:0;overflow-x:hidden;overflow-y:auto;z-index:101}.modal{position:relative;margin:auto;margin-bottom:20px;padding:0;background:#fff;color:#000;box-shadow:0 1px 70px rgba(0,0,0,0.5)}.modal header{padding:30px 40px 5px 40px;font-size:18px;font-weight:bold}.modal section{padding:30px 40px 50px 40px}.modal footer button{width:100%;border-radius:0}.modal-close{position:absolute;top:8px;right:12px;width:30px;height:30px;text-align:right;color:#bbb;font-size:30px;font-weight:300;cursor:pointer}.modal-close:hover{color:#000}.group:after{content:"";display:table;clear:both}.group:after{content:"";display:table;clear:both}.hide{display:none}.highlight{background-color:#f7f3e2}.big{font-size:18px}.small{font-size:12.75px}.smaller{font-size:11.25px}.nowrap,.nowrap td{white-space:nowrap}.req,.required{font-weight:normal;color:#de2c3b}.error{color:#de2c3b}.success{color:#2c9f42}.text-centered{text-align:center}.text-right{text-align:right}.last{margin-right:0!important}.pause{margin-bottom:.825em!important}.end{margin-bottom:0!important}.normal{font-weight:normal}.light{font-weight:300}.bold{font-weight:bold}.italic{font-style:italic}.left{float:left}.right{float:right}.upper{text-transform:uppercase}.list-flat{margin-left:0;list-style:none}.color-black{color:#0f0f0f}.color-white{color:#fff}.color-gray-10{color:rgba(0,0,0,0.1)}.color-gray-20{color:rgba(0,0,0,0.2)}.color-gray-30{color:rgba(0,0,0,0.3)}.color-gray-40{color:rgba(0,0,0,0.4)}.color-gray-50{color:rgba(0,0,0,0.5)}.color-gray-60{color:rgba(0,0,0,0.6)}.color-gray-70{color:rgba(0,0,0,0.7)}.color-gray-80{color:rgba(0,0,0,0.8)}.color-gray-90{color:rgba(0,0,0,0.9)}.color-white-10{color:rgba(255,255,255,0.1)}.color-white-20{color:rgba(255,255,255,0.2)}.color-white-30{color:rgba(255,255,255,0.3)}.color-white-40{color:rgba(255,255,255,0.4)}.color-white-50{color:rgba(255,255,255,0.5)}.color-white-60{color:rgba(255,255,255,0.6)}.color-white-70{color:rgba(255,255,255,0.7)}.color-white-80{color:rgba(255,255,255,0.8)}.color-white-90{color:rgba(255,255,255,0.9)}.video-wrapper{height:0;padding-bottom:56.25%;position:relative;margin-bottom:1.65em}.video-wrapper iframe,.video-wrapper object,.video-wrapper embed{position:absolute;top:0;left:0;width:100%;height:100%}@media only screen and (max-width:767px){.left,.right{float:none}.hide-on-mobile{display:none}}.str{color:#d14}.kwd{color:#333}.com{color:#998}.typ{color:#458}.lit{color:#458}.pun{color:#888}.opn{color:#333}.clo{color:#333}.tag{color:#367ac3}.atn{color:#51a7c9}.atv{color:#709c1a}.dec{color:#666}.var{color:teal}.fun{color:#900}.linenums ol li{list-style-type:none;counter-increment:list;position:relative}.linenums ol li:after{content:counter(list);position:absolute;left:-3.3em;border-right:1px solid #e5e5e5;padding-right:9px;width:2.45em;text-align:right;color:rgba(0,0,0,0.3);font-size:12px}@media only screen and (max-width:767px){.mobile-width-100{width:100%}.units-row .unit-90,.units-row .unit-80,.units-row .unit-75,.units-row .unit-70,.units-row .unit-66,.units-row .unit-65,.units-row .unit-60,.units-row .unit-50,.units-row .unit-40,.units-row .unit-35,.units-row .unit-33,.units-row .unit-30,.units-row .unit-25,.units-row .unit-20,.units-row .unit-10{width:100%;float:none;margin-left:0;margin-bottom:1.65em}.unit-push-90,.unit-push-80,.unit-push-75,.unit-push-70,.unit-push-66,.unit-push-65,.unit-push-60,.unit-push-50,.unit-push-40,.unit-push-35,.unit-push-33,.unit-push-30,.unit-push-25,.unit-push-20,.unit-push-10{left:0}.units-row .unit-push-right{float:none}.units-mobile-50 .unit-90,.units-mobile-50 .unit-80,.units-mobile-50 .unit-75,.units-mobile-50 .unit-70,.units-mobile-50 .unit-66,.units-mobile-50 .unit-65,.units-mobile-50 .unit-60,.units-mobile-50 .unit-40,.units-mobile-50 .unit-30,.units-mobile-50 .unit-35,.units-mobile-50 .unit-33,.units-mobile-50 .unit-25,.units-mobile-50 .unit-20,.units-mobile-50 .unit-10{float:left;margin-left:3%;width:48.5%}.units-mobile-50 .unit-90:first-child,.units-mobile-50 .unit-80:first-child,.units-mobile-50 .unit-75:first-child,.units-mobile-50 .unit-70:first-child,.units-mobile-50 .unit-66:first-child,.units-mobile-50 .unit-65:first-child,.units-mobile-50 .unit-60:first-child,.units-mobile-50 .unit-40:first-child,.units-mobile-50 .unit-35:first-child,.units-mobile-50 .unit-30:first-child,.units-mobile-50 .unit-33:first-child,.units-mobile-50 .unit-25:first-child,.units-mobile-50 .unit-20:first-child,.units-mobile-50 .unit-10:first-child{margin-left:0}}@media only screen and (max-width:767px){.blocks-2,.blocks-3,.blocks-4,.blocks-5,.blocks-6{margin-left:0;margin-bottom:1.65em}.blocks-2>li,.blocks-3>li,.blocks-4>li,.blocks-5>li,.blocks-6>li{float:none;margin-left:0;width:100%}.blocks-mobile-50>li,.blocks-mobile-33>li{float:left;margin-left:3%}.blocks-mobile-33,.blocks-mobile-50{margin-left:-3%}.blocks-mobile-50>li{width:47%}.blocks-mobile-33>li{width:30.333333333333332%}}@media(min-width:768px) and (max-width:979px){h1{font-size:2.25em;line-height:1.125}h2{font-size:1.5em;line-height:1.25}h3{font-size:1.3125em;line-height:1.25}h4{font-size:1.125em;line-height:1.22222222}h5{font-size:1em}h6{font-size:.75em}}@media(max-width:767px){h1{font-size:2.25em;line-height:1.25}h2{font-size:1.5em;line-height:1.15384615}h3{font-size:1.3125em;line-height:1.13636364}h4{font-size:1.125em;line-height:1.11111111}h5{font-size:1em}h6{font-size:.75em}.lead{font-size:1.2em}ul,ol,ul ul,ol ol,ul ol,ol ul{margin-left:1.65em}blockquote{margin-left:0}}@media only screen and (max-width:767px){.navbar.navbar-left,.navbar.navbar-right,.navbar li,.navbar.navbar-left li,.navbar.navbar-right li{float:none;text-align:left;width:auto}.navbar li,.navbar.navbar-right li{margin-left:0;margin-right:0}.fullwidth ul,.fullwidth li{width:auto}.fullwidth li{display:block}}@media only screen and (max-width:767px){.forms-list label{display:inline-block}}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important;font-size:12pt}.h1,h1{font-size:36pt}.h2,h2{font-size:24pt}.h3,h3{font-size:18pt}.h4,h4{font-size:14pt}.h5,h5{font-size:12pt}.h6,h6{font-size:12pt}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}blockquote{border:0;font-style:italic}img{max-width:100%!important}select{background:#fff!important}} \ No newline at end of file diff --git a/public/css/mine.css b/public/css/mine.css new file mode 100755 index 0000000..ceb4be4 --- /dev/null +++ b/public/css/mine.css @@ -0,0 +1,22 @@ +/* =Typography +-----------------------------------------------------------------------------*/ +body { + font-family: 'Alegreya', 'Hoefler Text', Times, Serif; + font-size: 1.05em; + line-height: 1.6em; + background-color: #faf8f8; +} +h1, h2, h3, h4, h5 { + font-family: 'Alegreya', 'Trebuchet MS', Helvetica, Arial, sans-serif; + font-style: italic; + color: #b24; +} +h2, h3, h4, h5 { + font-weight: normal; + font-style: italic; +} +h2, h3 { + text-transform: lowercase; + font-family: 'Alegreya SC'; + font-style: normal; +} diff --git a/public/css/syntax.css b/public/css/syntax.css new file mode 100755 index 0000000..ddfd3ea --- /dev/null +++ b/public/css/syntax.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ diff --git a/public/files/papers/.htaccess b/public/files/papers/.htaccess new file mode 100755 index 0000000..dc6c28c --- /dev/null +++ b/public/files/papers/.htaccess @@ -0,0 +1,11 @@ +Options -Indexes +AddDescription "Conceptualising Constraint" constraint98.pdf +AddDescription "JAMLS paper" culture-newecon.pdf +AddDescription "Embedded Altruism" embed-alt.pdf +AddDescription "Social Change review" change4.pdf +AddDescription "Irish Social Policy" socpol31.pdf +AddDescription "HIV and Blood Supply" ts.pdf +AddDescription "OECD Wage Growth 1" wage1.pdf +AddDescription "OECD Wage Growth 2" wage2.pdf +AddDescription "Cultural Goods" jpp.pdf +AddDescription "Healy 2000-corrected" EA-corrected-tables.pdf diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..d0fc1c7 --- /dev/null +++ b/public/index.html @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jeremykidwell.info + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    +   +
    +
    +

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

    Recent Papers

    +
      + +
    + + + +

    Current Teaching

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

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..a4107e5 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,71 @@ + + + + jeremykidwell.info on jeremykidwell.info + https://jeremykidwell.info/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 25 Sep 2017 00:00:00 +1100 + + + Religion in the Public Sphere + https://jeremykidwell.info/teaching/religion_public_sphere/ + Mon, 25 Sep 2017 00:00:00 +1100 + Jeremy Kidwell + https://jeremykidwell.info/teaching/religion_public_sphere/ + <p>This second year undergraduate course&hellip;</p> + +<p></p> + +<h4 id="syllabus-pdf-http-www-kieranhealy-org-files-teaching-gradtheory-pdf"><a href="http://www.kieranhealy.org/files/teaching/gradtheory.pdf">Syllabus (PDF)</a></h4> + + + + Theological Ethics + https://jeremykidwell.info/teaching/theological_ethics/ + Mon, 25 Sep 2017 00:00:00 +1100 + Jeremy Kidwell + https://jeremykidwell.info/teaching/theological_ethics/ + + +<p>Description</p> + +<h4 id="syllabus-pdf-http-kieranhealy-org-files-teaching-taboo-markets-pdf"><a href="http://kieranhealy.org/files/teaching/taboo-markets.pdf">Syllabus (PDF)</a></h4> + + + + + 403 + https://jeremykidwell.info/403/ + Mon, 01 Jan 0001 00:00:00 UTC + Jeremy Kidwell + https://jeremykidwell.info/403/ + <h2>Sorry, you don't have permission to do that</h2> + + + + + + + 404 + https://jeremykidwell.info/404/ + Mon, 01 Jan 0001 00:00:00 UTC + Jeremy Kidwell + https://jeremykidwell.info/404/ + <h2>404: File not found</h2> + +<h4>Sorry, that doesn't seem to be here</h4> + + + + Archives + https://jeremykidwell.info/blog/archives.html + Mon, 01 Jan 0001 00:00:00 UTC + Jeremy Kidwell + https://jeremykidwell.info/blog/archives.html + + + + + diff --git a/public/javascripts/bigfoot.js b/public/javascripts/bigfoot.js new file mode 100755 index 0000000..7def8b2 --- /dev/null +++ b/public/javascripts/bigfoot.js @@ -0,0 +1,638 @@ +(function() { + (function($) { + return $.bigfoot = function(options) { + var addBreakpoint, baseFontSize, bigfoot, buttonHover, calculatePixelDimension, cleanFootnoteLinks, clickButton, createPopover, defaults, deleteEmptyOrHR, escapeKeypress, footnoteInit, getSetting, makeDefaultCallbacks, popoverStates, positionTooltip, removeBackLinks, removeBreakpoint, removePopovers, replaceWithReferenceAttributes, repositionFeet, roomCalc, settings, touchClick, unhoverFeet, updateSetting, viewportDetails; + bigfoot = void 0; + defaults = { + actionOriginalFN: "hide", + activateCallback: function() {}, + activateOnHover: false, + allowMultipleFN: false, + anchorPattern: /(fn|footnote|note)[:\-_\d]/gi, + anchorParentTagname: 'sup', + breakpoints: {}, + deleteOnUnhover: false, + footnoteParentClass: 'footnote', + footnoteTagname: 'li', + hoverDelay: 250, + numberResetSelector: void 0, + popoverDeleteDelay: 300, + popoverCreateDelay: 100, + positionContent: true, + preventPageScroll: true, + scope: false, + useFootnoteOnlyOnce: true, + contentMarkup: "", + buttonMarkup: "
    " + }; + settings = $.extend(defaults, options); + popoverStates = {}; + footnoteInit = function() { + var $curResetElement, $currentLastFootnoteLink, $footnoteAnchors, $footnoteButton, $lastResetElement, $parent, $relevantFNLink, $relevantFootnote, finalFNLinks, footnoteButton, footnoteButtonSearchQuery, footnoteContent, footnoteIDNum, footnoteLinks, footnoteNum, footnotes, i, _i, _ref, _results; + footnoteButtonSearchQuery = settings.scope ? "" + settings.scope + " a[href*=\"#\"]" : "a[href*=\"#\"]"; + $footnoteAnchors = $(footnoteButtonSearchQuery).filter(function() { + var $this, relAttr; + $this = $(this); + relAttr = $this.attr("rel"); + if (relAttr === "null" || (relAttr == null)) { + relAttr = ""; + } + return ("" + ($this.attr("href")) + relAttr).match(settings.anchorPattern) && $this.closest("[class*=" + settings.footnoteParentClass + "]:not(a):not(" + settings.anchorParentTagname + ")").length < 1; + }); + footnotes = []; + footnoteLinks = []; + finalFNLinks = []; + cleanFootnoteLinks($footnoteAnchors, footnoteLinks); + $(footnoteLinks).each(function() { + var $closestFootnoteEl, relatedFN; + relatedFN = $(this).data("footnote-ref").replace(/[:.+~*\]\[]/g, "\\$&"); + if (settings.useFootnoteOnlyOnce) { + relatedFN = "" + relatedFN + ":not(.footnote-processed)"; + } + $closestFootnoteEl = $(relatedFN).closest(settings.footnoteTagname); + if ($closestFootnoteEl.length > 0) { + footnotes.push($closestFootnoteEl.first().addClass("footnote-processed")); + return finalFNLinks.push(this); + } + }); + $currentLastFootnoteLink = $("[data-footnote-identifier]:last"); + footnoteIDNum = $currentLastFootnoteLink.length < 1 ? 0 : +$currentLastFootnoteLink.data("footnote-identifier"); + _results = []; + for (i = _i = 0, _ref = footnotes.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + footnoteContent = removeBackLinks($(footnotes[i]).html().trim(), $(finalFNLinks[i]).data("footnote-backlink-ref")); + footnoteContent = footnoteContent.replace(/"/g, """).replace(/</g, "<sym;").replace(/>/g, ">sym;"); + footnoteIDNum += 1; + footnoteButton = ""; + $relevantFNLink = $(finalFNLinks[i]); + $relevantFootnote = $(footnotes[i]); + if (settings.numberResetSelector != null) { + $curResetElement = $relevantFNLink.closest(settings.numberResetSelector); + if ($curResetElement.is($lastResetElement)) { + footnoteNum += 1; + } else { + footnoteNum = 1; + } + $lastResetElement = $curResetElement; + } else { + footnoteNum = footnoteIDNum; + } + if (footnoteContent.indexOf("<") !== 0) { + footnoteContent = "

    " + footnoteContent + "

    "; + } + footnoteButton = settings.buttonMarkup.replace(/\{\{FOOTNOTENUM\}\}/g, footnoteNum).replace(/\{\{FOOTNOTEID\}\}/g, footnoteIDNum).replace(/\{\{FOOTNOTECONTENT\}\}/g, footnoteContent); + footnoteButton = replaceWithReferenceAttributes(footnoteButton, "SUP", $relevantFNLink); + footnoteButton = replaceWithReferenceAttributes(footnoteButton, "FN", $relevantFootnote); + $footnoteButton = $(footnoteButton).insertBefore($relevantFNLink); + $parent = $relevantFootnote.parent(); + switch (settings.actionOriginalFN.toLowerCase()) { + case "hide": + $relevantFNLink.addClass("footnote-print-only"); + $relevantFootnote.addClass("footnote-print-only"); + _results.push(deleteEmptyOrHR($parent)); + break; + case "delete": + $relevantFNLink.remove(); + $relevantFootnote.remove(); + _results.push(deleteEmptyOrHR($parent)); + break; + default: + _results.push($relevantFNLink.addClass("footnote-print-only")); + } + } + return _results; + }; + cleanFootnoteLinks = function($footnoteAnchors, footnoteLinks) { + var $parent, $supChild, linkHREF, linkID; + if (footnoteLinks == null) { + footnoteLinks = []; + } + $parent = void 0; + $supChild = void 0; + linkHREF = void 0; + linkID = void 0; + $footnoteAnchors.each(function() { + var $child, $this; + $this = $(this); + linkHREF = "#" + ($this.attr("href")).split("#")[1]; + $parent = $this.closest(settings.anchorParentTagname); + $child = $this.find(settings.anchorParentTagname); + if ($parent.length > 0) { + linkID = ($parent.attr("id") || "") + ($this.attr("id") || ""); + return footnoteLinks.push($parent.attr({ + "data-footnote-backlink-ref": linkID, + "data-footnote-ref": linkHREF + })); + } else if ($child.length > 0) { + linkID = ($child.attr("id") || "") + ($this.attr("id") || ""); + return footnoteLinks.push($this.attr({ + "data-footnote-backlink-ref": linkID, + "data-footnote-ref": linkHREF + })); + } else { + linkID = $this.attr("id") || ""; + return footnoteLinks.push($this.attr({ + "data-footnote-backlink-ref": linkID, + "data-footnote-ref": linkHREF + })); + } + }); + }; + deleteEmptyOrHR = function($el) { + var $parent; + $parent = void 0; + if ($el.is(":empty") || $el.children(":not(.footnote-print-only)").length === 0) { + $parent = $el.parent(); + if (settings.actionOriginalFN.toLowerCase() === "delete") { + $el.remove(); + } else { + $el.addClass("footnote-print-only"); + } + return deleteEmptyOrHR($parent); + } else if ($el.children(":not(.footnote-print-only)").length === $el.children("hr:not(.footnote-print-only)").length) { + $parent = $el.parent(); + if (settings.actionOriginalFN.toLowerCase() === "delete") { + $el.remove(); + } else { + $el.children("hr").addClass("footnote-print-only"); + $el.addClass("footnote-print-only"); + } + return deleteEmptyOrHR($parent); + } + }; + removeBackLinks = function(footnoteHTML, backlinkID) { + var regex; + if (backlinkID.indexOf(' ') >= 0) { + backlinkID = backlinkID.trim().replace(/\s+/g, "|").replace(/(.*)/g, "($1)"); + } + regex = new RegExp("(\\s| )*<\\s*a[^#<]*#" + backlinkID + "[^>]*>(.*?)<\\s*/\\s*a>", "g"); + return footnoteHTML.replace(regex, "").replace("[]", ""); + }; + replaceWithReferenceAttributes = function(string, referenceKeyword, $referenceElement) { + var refMatches, refRegex, refReplaceRegex, refReplaceText; + refRegex = new RegExp("\\{\\{" + referenceKeyword + ":([^\\}]*)\\}\\}", "g"); + refMatches = void 0; + refReplaceText = void 0; + refReplaceRegex = void 0; + refMatches = refRegex.exec(string); + while (refMatches) { + if (refMatches[1]) { + refReplaceText = $referenceElement.attr(refMatches[1]) || ""; + string = string.replace("{{" + referenceKeyword + ":" + refMatches[1] + "}}", refReplaceText); + } + refMatches = refRegex.exec(string); + } + return string; + }; + buttonHover = function(event) { + var $buttonHovered, dataIdentifier, otherPopoverSelector; + if (settings.activateOnHover) { + $buttonHovered = $(event.target).closest(".bigfoot-footnote__button"); + dataIdentifier = "[data-footnote-identifier=\"" + ($buttonHovered.attr("data-footnote-identifier")) + "\"]"; + if ($buttonHovered.hasClass("is-active")) { + return; + } + $buttonHovered.addClass("is-hover-instantiated"); + if (!settings.allowMultipleFN) { + otherPopoverSelector = ".bigfoot-footnote:not(" + dataIdentifier + ")"; + removePopovers(otherPopoverSelector); + } + createPopover(".bigfoot-footnote__button" + dataIdentifier).addClass("is-hover-instantiated"); + } + }; + touchClick = function(event) { + var $nearButton, $nearFootnote, $target; + $target = $(event.target); + $nearButton = $target.closest(".bigfoot-footnote__button"); + $nearFootnote = $target.closest(".bigfoot-footnote"); + if ($nearButton.length > 0) { + event.preventDefault(); + clickButton($nearButton); + } else if ($nearFootnote.length < 1) { + if ($(".bigfoot-footnote").length > 0) { + removePopovers(); + } + } + }; + clickButton = function($button) { + var dataIdentifier; + $button.blur(); + dataIdentifier = "data-footnote-identifier=\"" + ($button.attr("data-footnote-identifier")) + "\""; + if ($button.hasClass("changing")) { + return; + } else if (!$button.hasClass("is-active")) { + $button.addClass("changing"); + setTimeout((function() { + return $button.removeClass("changing"); + }), settings.popoverCreateDelay); + createPopover(".bigfoot-footnote__button[" + dataIdentifier + "]"); + $button.addClass("is-click-instantiated"); + if (!settings.allowMultipleFN) { + removePopovers(".bigfoot-footnote:not([" + dataIdentifier + "])"); + } + } else { + if (!settings.allowMultipleFN) { + removePopovers(); + } else { + removePopovers(".bigfoot-footnote[" + dataIdentifier + "]"); + } + } + }; + createPopover = function(selector) { + var $buttons, $popoversCreated; + $buttons = void 0; + if (typeof selector !== "string" && settings.allowMultipleFN) { + $buttons = selector; + } else if (typeof selector !== "string") { + $buttons = selector.first(); + } else if (settings.allowMultipleFN) { + $buttons = $(selector).closest(".bigfoot-footnote__button"); + } else { + $buttons = $(selector + ":first").closest(".bigfoot-footnote__button"); + } + $popoversCreated = $(); + $buttons.each(function() { + var $content, $contentContainer, $this, content; + $this = $(this); + content = void 0; + try { + content = settings.contentMarkup.replace(/\{\{FOOTNOTENUM\}\}/g, $this.attr("data-footnote-number")).replace(/\{\{FOOTNOTEID\}\}/g, $this.attr("data-footnote-identifier")).replace(/\{\{FOOTNOTECONTENT\}\}/g, $this.attr("data-bigfoot-footnote")).replace(/\>sym\;/g, ">").replace(/\<sym\;/g, "<"); + return content = replaceWithReferenceAttributes(content, "BUTTON", $this); + } finally { + $content = $(content); + try { + settings.activateCallback($content, $this); + } catch (_error) {} + $content.insertAfter($buttons); + popoverStates[$this.attr("data-footnote-identifier")] = "init"; + $content.attr("bigfoot-max-width", calculatePixelDimension($content.css("max-width"), $content)); + $content.css("max-width", 10000); + $contentContainer = $content.find(".bigfoot-footnote__content"); + $content.attr("data-bigfoot-max-height", calculatePixelDimension($contentContainer.css("max-height"), $contentContainer)); + repositionFeet(); + $this.addClass("is-active"); + $content.find(".bigfoot-footnote__content").bindScrollHandler(); + $popoversCreated = $popoversCreated.add($content); + } + }); + setTimeout((function() { + return $popoversCreated.addClass("is-active"); + }), settings.popoverCreateDelay); + return $popoversCreated; + }; + baseFontSize = function() { + var el, size; + el = document.createElement("div"); + el.style.cssText = "display:inline-block;padding:0;line-height:1;position:absolute;visibility:hidden;font-size:1em;"; + el.appendChild(document.createElement("M")); + document.body.appendChild(el); + size = el.offsetHeight; + document.body.removeChild(el); + return size; + }; + calculatePixelDimension = function(dim, $el) { + if (dim === "none") { + dim = 10000; + } else if (dim.indexOf("rem") >= 0) { + dim = parseFloat(dim) * baseFontSize(); + } else if (dim.indexOf("em") >= 0) { + dim = parseFloat(dim) * parseFloat($el.css("font-size")); + } else if (dim.indexOf("px") >= 0) { + dim = parseFloat(dim); + if (dim <= 60) { + dim = dim / parseFloat($el.parent().css("width")); + } + } else if (dim.indexOf("%") >= 0) { + dim = parseFloat(dim) / 100; + } + return dim; + }; + $.fn.bindScrollHandler = function() { + if (!settings.preventPageScroll) { + return $(this); + } + $(this).on("DOMMouseScroll mousewheel", function(event) { + var $popover, $this, delta, height, prevent, scrollHeight, scrollTop, up; + $this = $(this); + scrollTop = $this.scrollTop(); + scrollHeight = $this[0].scrollHeight; + height = parseInt($this.css("height")); + $popover = $this.closest(".bigfoot-footnote"); + if ($this.scrollTop() > 0 && $this.scrollTop() < 10) { + $popover.addClass("is-scrollable"); + } + if (!$popover.hasClass("is-scrollable")) { + return; + } + delta = event.type === "DOMMouseScroll" ? event.originalEvent.detail * -40 : event.originalEvent.wheelDelta; + up = delta > 0; + prevent = function() { + event.stopPropagation(); + event.preventDefault(); + event.returnValue = false; + return false; + }; + if (!up && -delta > scrollHeight - height - scrollTop) { + $this.scrollTop(scrollHeight); + $popover.addClass("is-fully-scrolled"); + return prevent(); + } else if (up && delta > scrollTop) { + $this.scrollTop(0); + $popover.removeClass("is-fully-scrolled"); + return prevent(); + } else { + return $popover.removeClass("is-fully-scrolled"); + } + }); + return $(this); + }; + unhoverFeet = function(e) { + if (settings.deleteOnUnhover && settings.activateOnHover) { + return setTimeout((function() { + var $target; + $target = $(e.target).closest(".bigfoot-footnote, .bigfoot-footnote__button"); + if ($(".bigfoot-footnote__button:hover, .bigfoot-footnote:hover").length < 1) { + return removePopovers(); + } + }), settings.hoverDelay); + } + }; + escapeKeypress = function(event) { + if (event.keyCode === 27) { + return removePopovers(); + } + }; + removePopovers = function(footnotes, timeout) { + var $buttonsClosed, $linkedButton, $this, footnoteID; + if (footnotes == null) { + footnotes = ".bigfoot-footnote"; + } + if (timeout == null) { + timeout = settings.popoverDeleteDelay; + } + $buttonsClosed = $(); + footnoteID = void 0; + $linkedButton = void 0; + $this = void 0; + $(footnotes).each(function() { + $this = $(this); + footnoteID = $this.attr("data-footnote-identifier"); + $linkedButton = $(".bigfoot-footnote__button[data-footnote-identifier=\"" + footnoteID + "\"]"); + if (!$linkedButton.hasClass("changing")) { + $buttonsClosed = $buttonsClosed.add($linkedButton); + $linkedButton.removeClass("is-active is-hover-instantiated is-click-instantiated").addClass("changing"); + $this.removeClass("is-active").addClass("disapearing"); + return setTimeout((function() { + $this.remove(); + delete popoverStates[footnoteID]; + return $linkedButton.removeClass("changing"); + }), timeout); + } + }); + return $buttonsClosed; + }; + repositionFeet = function(e) { + var type; + if (settings.positionContent) { + type = e ? e.type : "resize"; + $(".bigfoot-footnote").each(function() { + var $button, $contentWrapper, $mainWrap, $this, dataIdentifier, identifier, lastState, marginSize, maxHeightInCSS, maxHeightOnScreen, maxWidth, maxWidthInCSS, positionOnTop, relativeToWidth, roomLeft, totalHeight; + $this = $(this); + identifier = $this.attr("data-footnote-identifier"); + dataIdentifier = "data-footnote-identifier=\"" + identifier + "\""; + $contentWrapper = $this.find(".bigfoot-footnote__content"); + $button = $this.siblings(".bigfoot-footnote__button"); + roomLeft = roomCalc($button); + marginSize = parseFloat($this.css("margin-top")); + maxHeightInCSS = +($this.attr("data-bigfoot-max-height")); + totalHeight = 2 * marginSize + $this.outerHeight(); + maxHeightOnScreen = 10000; + positionOnTop = roomLeft.bottomRoom < totalHeight && roomLeft.topRoom > roomLeft.bottomRoom; + lastState = popoverStates[identifier]; + if (positionOnTop) { + if (lastState !== "top") { + popoverStates[identifier] = "top"; + $this.addClass("is-positioned-top").removeClass("is-positioned-bottom"); + $this.css("transform-origin", (roomLeft.leftRelative * 100) + "% 100%"); + } + maxHeightOnScreen = roomLeft.topRoom - marginSize - 15; + } else { + if (lastState !== "bottom" || lastState === "init") { + popoverStates[identifier] = "bottom"; + $this.removeClass("is-positioned-top").addClass("is-positioned-bottom"); + $this.css("transform-origin", (roomLeft.leftRelative * 100) + "% 0%"); + } + maxHeightOnScreen = roomLeft.bottomRoom - marginSize - 15; + } + $this.find(".bigfoot-footnote__content").css({ + "max-height": Math.min(maxHeightOnScreen, maxHeightInCSS) + "px" + }); + if (type === "resize") { + maxWidthInCSS = parseFloat($this.attr("bigfoot-max-width")); + $mainWrap = $this.find(".bigfoot-footnote__wrapper"); + maxWidth = maxWidthInCSS; + if (maxWidthInCSS <= 1) { + relativeToWidth = (function() { + var jq, userSpecifiedRelativeElWidth; + userSpecifiedRelativeElWidth = 10000; + if (settings.maxWidthRelativeTo) { + jq = $(settings.maxWidthRelativeTo); + if (jq.length > 0) { + userSpecifiedRelativeElWidth = jq.outerWidth(); + } + } + return Math.min(window.innerWidth, userSpecifiedRelativeElWidth); + })(); + maxWidth = relativeToWidth * maxWidthInCSS; + } + maxWidth = Math.min(maxWidth, $this.find(".bigfoot-footnote__content").outerWidth() + 1); + $mainWrap.css("max-width", maxWidth + "px"); + $this.css({ + left: (-roomLeft.leftRelative * maxWidth + parseFloat($button.css("margin-left")) + $button.outerWidth() / 2) + "px" + }); + positionTooltip($this, roomLeft.leftRelative); + } + if (parseInt($this.outerHeight()) < $this.find(".bigfoot-footnote__content")[0].scrollHeight) { + return $this.addClass("is-scrollable"); + } + }); + } + }; + positionTooltip = function($popover, leftRelative) { + var $tooltip; + if (leftRelative == null) { + leftRelative = 0.5; + } + $tooltip = $popover.find(".bigfoot-footnote__tooltip"); + if ($tooltip.length > 0) { + $tooltip.css("left", "" + (leftRelative * 100) + "%"); + } + }; + roomCalc = function($el) { + var elHeight, elLeftMargin, elWidth, leftRoom, topRoom, w; + elLeftMargin = parseFloat($el.css("margin-left")); + elWidth = parseFloat($el.outerWidth()) - elLeftMargin; + elHeight = parseFloat($el.outerHeight()); + w = viewportDetails(); + topRoom = $el.offset().top - w.scrollY + elHeight / 2; + leftRoom = $el.offset().left - w.scrollX + elWidth / 2; + return { + topRoom: topRoom, + bottomRoom: w.height - topRoom, + leftRoom: leftRoom, + rightRoom: w.width - leftRoom, + leftRelative: leftRoom / w.width, + topRelative: topRoom / w.height + }; + }; + viewportDetails = function() { + var $window; + $window = $(window); + return { + width: window.innerWidth, + height: window.innerHeight, + scrollX: $window.scrollLeft(), + scrollY: $window.scrollTop() + }; + }; + addBreakpoint = function(size, trueCallback, falseCallback, deleteDelay, removeOpen) { + var falseDefaultPositionSetting, minMax, mqListener, mql, query, s, trueDefaultPositionSetting; + if (deleteDelay == null) { + deleteDelay = settings.popoverDeleteDelay; + } + if (removeOpen == null) { + removeOpen = true; + } + mql = void 0; + minMax = void 0; + s = void 0; + if (typeof size === "string") { + s = size.toLowerCase() === "iphone" ? "<320px" : size.toLowerCase() === "ipad" ? "<768px" : size; + minMax = s.charAt(0) === ">" ? "min" : s.charAt(0) === "<" ? "max" : null; + query = minMax ? "(" + minMax + "-width: " + (s.substring(1)) + ")" : s; + mql = window.matchMedia(query); + } else { + mql = size; + } + if (mql.media && mql.media === "invalid") { + return { + added: false, + mq: mql, + listener: null + }; + } + trueDefaultPositionSetting = minMax === "min"; + falseDefaultPositionSetting = minMax === "max"; + trueCallback = trueCallback || makeDefaultCallbacks(removeOpen, deleteDelay, trueDefaultPositionSetting, function($popover) { + return $popover.addClass("is-bottom-fixed"); + }); + falseCallback = falseCallback || makeDefaultCallbacks(removeOpen, deleteDelay, falseDefaultPositionSetting, function() {}); + mqListener = function(mq) { + if (mq.matches) { + trueCallback(removeOpen, bigfoot); + } else { + falseCallback(removeOpen, bigfoot); + } + }; + mql.addListener(mqListener); + mqListener(mql); + settings.breakpoints[size] = { + added: true, + mq: mql, + listener: mqListener + }; + return settings.breakpoints[size]; + }; + makeDefaultCallbacks = function(removeOpen, deleteDelay, position, callback) { + return function(removeOpen, bigfoot) { + var $closedPopovers; + $closedPopovers = void 0; + if (removeOpen) { + $closedPopovers = bigfoot.close(); + bigfoot.updateSetting("activateCallback", callback); + } + return setTimeout((function() { + bigfoot.updateSetting("positionContent", position); + if (removeOpen) { + return bigfoot.activate($closedPopovers); + } + }), deleteDelay); + }; + }; + removeBreakpoint = function(target, callback) { + var b, breakpoint, mq, mqFound; + mq = null; + b = void 0; + mqFound = false; + if (typeof target === "string") { + mqFound = settings.breakpoints[target] !== undefined; + } else { + for (b in settings.breakpoints) { + if (settings.breakpoints.hasOwnProperty(b) && settings.breakpoints[b].mq === target) { + mqFound = true; + } + } + } + if (mqFound) { + breakpoint = settings.breakpoints[b || target]; + if (callback) { + callback({ + matches: false + }); + } else { + breakpoint.listener({ + matches: false + }); + } + breakpoint.mq.removeListener(breakpoint.listener); + delete settings.breakpoints[b || target]; + } + return mqFound; + }; + updateSetting = function(newSettings, value) { + var oldValue, prop; + oldValue = void 0; + if (typeof newSettings === "string") { + oldValue = settings[newSettings]; + settings[newSettings] = value; + } else { + oldValue = {}; + for (prop in newSettings) { + if (newSettings.hasOwnProperty(prop)) { + oldValue[prop] = settings[prop]; + settings[prop] = newSettings[prop]; + } + } + } + return oldValue; + }; + getSetting = function(setting) { + return settings[setting]; + }; + $(document).ready(function() { + footnoteInit(); + $(document).on("mouseenter", ".bigfoot-footnote__button", buttonHover); + $(document).on("touchend click", touchClick); + $(document).on("mouseout", ".is-hover-instantiated", unhoverFeet); + $(document).on("keyup", escapeKeypress); + $(window).on("scroll resize", repositionFeet); + return $(document).on("gestureend", function() { + return repositionFeet(); + }); + }); + bigfoot = { + removePopovers: removePopovers, + close: removePopovers, + createPopover: createPopover, + activate: createPopover, + repositionFeet: repositionFeet, + reposition: repositionFeet, + addBreakpoint: addBreakpoint, + removeBreakpoint: removeBreakpoint, + getSetting: getSetting, + updateSetting: updateSetting + }; + return bigfoot; + }; + })(jQuery); + +}).call(this); diff --git a/public/javascripts/bigfoot.min.js b/public/javascripts/bigfoot.min.js new file mode 100755 index 0000000..7b03600 --- /dev/null +++ b/public/javascripts/bigfoot.min.js @@ -0,0 +1 @@ +(function(){!function(a){return a.bigfoot=function(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;return e=void 0,k={actionOriginalFN:"hide",activateCallback:function(){},activateOnHover:!1,allowMultipleFN:!1,anchorPattern:/(fn|footnote|note)[:\-_\d]/gi,anchorParentTagname:"sup",breakpoints:{},deleteOnUnhover:!1,footnoteParentClass:"footnote",footnoteTagname:"li",hoverDelay:250,numberResetSelector:void 0,popoverDeleteDelay:300,popoverCreateDelay:100,positionContent:!0,preventPageScroll:!0,scope:!1,useFootnoteOnlyOnce:!0,contentMarkup:'',buttonMarkup:'
    '},y=a.extend(k,b),q={},n=function(){var b,c,d,e,f,g,i,j,k,m,n,o,p,q,r,t,u,w,x,z;for(n=y.scope?""+y.scope+' a[href*="#"]':'a[href*="#"]',d=a(n).filter(function(){var b,c;return b=a(this),c=b.attr("rel"),("null"===c||null==c)&&(c=""),(""+b.attr("href")+c).match(y.anchorPattern)&&b.closest("[class*="+y.footnoteParentClass+"]:not(a):not("+y.anchorParentTagname+")").length<1}),t=[],q=[],k=[],h(d,q),a(q).each(function(){var b,c;return c=a(this).data("footnote-ref").replace(/[:.+~*\]\[]/g,"\\$&"),y.useFootnoteOnlyOnce&&(c=""+c+":not(.footnote-processed)"),b=a(c).closest(y.footnoteTagname),b.length>0?(t.push(b.first().addClass("footnote-processed")),k.push(this)):void 0}),c=a("[data-footnote-identifier]:last"),p=c.length<1?0:+c.data("footnote-identifier"),z=[],u=w=0,x=t.length;x>=0?x>w:w>x;u=x>=0?++w:--w)switch(o=s(a(t[u]).html().trim(),a(k[u]).data("footnote-backlink-ref")),o=o.replace(/"/g,""").replace(/</g,"<sym;").replace(/>/g,">sym;"),p+=1,m="",i=a(k[u]),j=a(t[u]),null!=y.numberResetSelector?(b=i.closest(y.numberResetSelector),b.is(f)?r+=1:r=1,f=b):r=p,0!==o.indexOf("<")&&(o="

    "+o+"

    "),m=y.buttonMarkup.replace(/\{\{FOOTNOTENUM\}\}/g,r).replace(/\{\{FOOTNOTEID\}\}/g,p).replace(/\{\{FOOTNOTECONTENT\}\}/g,o),m=v(m,"SUP",i),m=v(m,"FN",j),e=a(m).insertBefore(i),g=j.parent(),y.actionOriginalFN.toLowerCase()){case"hide":i.addClass("footnote-print-only"),j.addClass("footnote-print-only"),z.push(l(g));break;case"delete":i.remove(),j.remove(),z.push(l(g));break;default:z.push(i.addClass("footnote-print-only"))}return z},h=function(b,c){var d,e,f,g;null==c&&(c=[]),d=void 0,e=void 0,f=void 0,g=void 0,b.each(function(){var b,e;return e=a(this),f="#"+e.attr("href").split("#")[1],d=e.closest(y.anchorParentTagname),b=e.find(y.anchorParentTagname),d.length>0?(g=(d.attr("id")||"")+(e.attr("id")||""),c.push(d.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f}))):b.length>0?(g=(b.attr("id")||"")+(e.attr("id")||""),c.push(e.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f}))):(g=e.attr("id")||"",c.push(e.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f})))})},l=function(a){var b;return b=void 0,a.is(":empty")||0===a.children(":not(.footnote-print-only)").length?(b=a.parent(),"delete"===y.actionOriginalFN.toLowerCase()?a.remove():a.addClass("footnote-print-only"),l(b)):a.children(":not(.footnote-print-only)").length===a.children("hr:not(.footnote-print-only)").length?(b=a.parent(),"delete"===y.actionOriginalFN.toLowerCase()?a.remove():(a.children("hr").addClass("footnote-print-only"),a.addClass("footnote-print-only")),l(b)):void 0},s=function(a,b){var c;return b.indexOf(" ")>=0&&(b=b.trim().replace(/\s+/g,"|").replace(/(.*)/g,"($1)")),c=new RegExp("(\\s| )*<\\s*a[^#<]*#"+b+"[^>]*>(.*?)<\\s*/\\s*a>","g"),a.replace(c,"").replace("[]","")},v=function(a,b,c){var d,e,f,g;for(e=new RegExp("\\{\\{"+b+":([^\\}]*)\\}\\}","g"),d=void 0,g=void 0,f=void 0,d=e.exec(a);d;)d[1]&&(g=c.attr(d[1])||"",a=a.replace("{{"+b+":"+d[1]+"}}",g)),d=e.exec(a);return a},f=function(b){var c,d,e;if(y.activateOnHover){if(c=a(b.target).closest(".bigfoot-footnote__button"),d='[data-footnote-identifier="'+c.attr("data-footnote-identifier")+'"]',c.hasClass("is-active"))return;c.addClass("is-hover-instantiated"),y.allowMultipleFN||(e=".bigfoot-footnote:not("+d+")",u(e)),j(".bigfoot-footnote__button"+d).addClass("is-hover-instantiated")}},z=function(b){var c,d,e;e=a(b.target),c=e.closest(".bigfoot-footnote__button"),d=e.closest(".bigfoot-footnote"),c.length>0?(b.preventDefault(),i(c)):d.length<1&&a(".bigfoot-footnote").length>0&&u()},i=function(a){var b;a.blur(),b='data-footnote-identifier="'+a.attr("data-footnote-identifier")+'"',a.hasClass("changing")||(a.hasClass("is-active")?y.allowMultipleFN?u(".bigfoot-footnote["+b+"]"):u():(a.addClass("changing"),setTimeout(function(){return a.removeClass("changing")},y.popoverCreateDelay),j(".bigfoot-footnote__button["+b+"]"),a.addClass("is-click-instantiated"),y.allowMultipleFN||u(".bigfoot-footnote:not(["+b+"])")))},j=function(b){var c,d;return c=void 0,c="string"!=typeof b&&y.allowMultipleFN?b:"string"!=typeof b?b.first():y.allowMultipleFN?a(b).closest(".bigfoot-footnote__button"):a(b+":first").closest(".bigfoot-footnote__button"),d=a(),c.each(function(){var b,e,f,h;f=a(this),h=void 0;try{return h=y.contentMarkup.replace(/\{\{FOOTNOTENUM\}\}/g,f.attr("data-footnote-number")).replace(/\{\{FOOTNOTEID\}\}/g,f.attr("data-footnote-identifier")).replace(/\{\{FOOTNOTECONTENT\}\}/g,f.attr("data-bigfoot-footnote")).replace(/\>sym\;/g,">").replace(/\<sym\;/g,"<"),h=v(h,"BUTTON",f)}finally{b=a(h);try{y.activateCallback(b,f)}catch(i){}b.insertAfter(c),q[f.attr("data-footnote-identifier")]="init",b.attr("bigfoot-max-width",g(b.css("max-width"),b)),b.css("max-width",1e4),e=b.find(".bigfoot-footnote__content"),b.attr("data-bigfoot-max-height",g(e.css("max-height"),e)),w(),f.addClass("is-active"),b.find(".bigfoot-footnote__content").bindScrollHandler(),d=d.add(b)}}),setTimeout(function(){return d.addClass("is-active")},y.popoverCreateDelay),d},d=function(){var a,b;return a=document.createElement("div"),a.style.cssText="display:inline-block;padding:0;line-height:1;position:absolute;visibility:hidden;font-size:1em;",a.appendChild(document.createElement("M")),document.body.appendChild(a),b=a.offsetHeight,document.body.removeChild(a),b},g=function(a,b){return"none"===a?a=1e4:a.indexOf("rem")>=0?a=parseFloat(a)*d():a.indexOf("em")>=0?a=parseFloat(a)*parseFloat(b.css("font-size")):a.indexOf("px")>=0?(a=parseFloat(a),60>=a&&(a/=parseFloat(b.parent().css("width")))):a.indexOf("%")>=0&&(a=parseFloat(a)/100),a},a.fn.bindScrollHandler=function(){return y.preventPageScroll?(a(this).on("DOMMouseScroll mousewheel",function(b){var c,d,e,f,g,h,i,j;return d=a(this),i=d.scrollTop(),h=d[0].scrollHeight,f=parseInt(d.css("height")),c=d.closest(".bigfoot-footnote"),d.scrollTop()>0&&d.scrollTop()<10&&c.addClass("is-scrollable"),c.hasClass("is-scrollable")?(e="DOMMouseScroll"===b.type?-40*b.originalEvent.detail:b.originalEvent.wheelDelta,j=e>0,g=function(){return b.stopPropagation(),b.preventDefault(),b.returnValue=!1,!1},!j&&-e>h-f-i?(d.scrollTop(h),c.addClass("is-fully-scrolled"),g()):j&&e>i?(d.scrollTop(0),c.removeClass("is-fully-scrolled"),g()):c.removeClass("is-fully-scrolled")):void 0}),a(this)):a(this)},A=function(b){return y.deleteOnUnhover&&y.activateOnHover?setTimeout(function(){var c;return c=a(b.target).closest(".bigfoot-footnote, .bigfoot-footnote__button"),a(".bigfoot-footnote__button:hover, .bigfoot-footnote:hover").length<1?u():void 0},y.hoverDelay):void 0},m=function(a){return 27===a.keyCode?u():void 0},u=function(b,c){var d,e,f,g;return null==b&&(b=".bigfoot-footnote"),null==c&&(c=y.popoverDeleteDelay),d=a(),g=void 0,e=void 0,f=void 0,a(b).each(function(){return f=a(this),g=f.attr("data-footnote-identifier"),e=a('.bigfoot-footnote__button[data-footnote-identifier="'+g+'"]'),e.hasClass("changing")?void 0:(d=d.add(e),e.removeClass("is-active is-hover-instantiated is-click-instantiated").addClass("changing"),f.removeClass("is-active").addClass("disapearing"),setTimeout(function(){return f.remove(),delete q[g],e.removeClass("changing")},c))}),d},w=function(b){var c;y.positionContent&&(c=b?b.type:"resize",a(".bigfoot-footnote").each(function(){var b,d,e,f,g,h,i,j,k,l,m,n,o,p,s,t;return f=a(this),h=f.attr("data-footnote-identifier"),g='data-footnote-identifier="'+h+'"',d=f.find(".bigfoot-footnote__content"),b=f.siblings(".bigfoot-footnote__button"),s=x(b),j=parseFloat(f.css("margin-top")),k=+f.attr("data-bigfoot-max-height"),t=2*j+f.outerHeight(),l=1e4,o=s.bottomRooms.bottomRoom,i=q[h],o?("top"!==i&&(q[h]="top",f.addClass("is-positioned-top").removeClass("is-positioned-bottom"),f.css("transform-origin",100*s.leftRelative+"% 100%")),l=s.topRoom-j-15):(("bottom"!==i||"init"===i)&&(q[h]="bottom",f.removeClass("is-positioned-top").addClass("is-positioned-bottom"),f.css("transform-origin",100*s.leftRelative+"% 0%")),l=s.bottomRoom-j-15),f.find(".bigfoot-footnote__content").css({"max-height":Math.min(l,k)+"px"}),"resize"===c&&(n=parseFloat(f.attr("bigfoot-max-width")),e=f.find(".bigfoot-footnote__wrapper"),m=n,1>=n&&(p=function(){var b,c;return c=1e4,y.maxWidthRelativeTo&&(b=a(y.maxWidthRelativeTo),b.length>0&&(c=b.outerWidth())),Math.min(window.innerWidth,c)}(),m=p*n),m=Math.min(m,f.find(".bigfoot-footnote__content").outerWidth()+1),e.css("max-width",m+"px"),f.css({left:-s.leftRelative*m+parseFloat(b.css("margin-left"))+b.outerWidth()/2+"px"}),r(f,s.leftRelative)),parseInt(f.outerHeight())0&&c.css("left",""+100*b+"%")},x=function(a){var b,c,d,e,f,g;return c=parseFloat(a.css("margin-left")),d=parseFloat(a.outerWidth())-c,b=parseFloat(a.outerHeight()),g=C(),f=a.offset().top-g.scrollY+b/2,e=a.offset().left-g.scrollX+d/2,{topRoom:f,bottomRoom:g.height-f,leftRoom:e,rightRoom:g.width-e,leftRelative:e/g.width,topRelative:f/g.height}},C=function(){var b;return b=a(window),{width:window.innerWidth,height:window.innerHeight,scrollX:b.scrollLeft(),scrollY:b.scrollTop()}},c=function(a,b,c,d,f){var g,h,i,j,k,l,m;return null==d&&(d=y.popoverDeleteDelay),null==f&&(f=!0),j=void 0,h=void 0,l=void 0,"string"==typeof a?(l="iphone"===a.toLowerCase()?"<320px":"ipad"===a.toLowerCase()?"<768px":a,h=">"===l.charAt(0)?"min":"<"===l.charAt(0)?"max":null,k=h?"("+h+"-width: "+l.substring(1)+")":l,j=window.matchMedia(k)):j=a,j.media&&"invalid"===j.media?{added:!1,mq:j,listener:null}:(m="min"===h,g="max"===h,b=b||p(f,d,m,function(a){return a.addClass("is-bottom-fixed")}),c=c||p(f,d,g,function(){}),i=function(a){a.matches?b(f,e):c(f,e)},j.addListener(i),i(j),y.breakpoints[a]={added:!0,mq:j,listener:i},y.breakpoints[a])},p=function(a,b,c,d){return function(a,e){var f;return f=void 0,a&&(f=e.close(),e.updateSetting("activateCallback",d)),setTimeout(function(){return e.updateSetting("positionContent",c),a?e.activate(f):void 0},b)}},t=function(a,b){var c,d,e,f;if(e=null,c=void 0,f=!1,"string"==typeof a)f=void 0!==y.breakpoints[a];else for(c in y.breakpoints)y.breakpoints.hasOwnProperty(c)&&y.breakpoints[c].mq===a&&(f=!0);return f&&(d=y.breakpoints[c||a],b?b({matches:!1}):d.listener({matches:!1}),d.mq.removeListener(d.listener),delete y.breakpoints[c||a]),f},B=function(a,b){var c,d;if(c=void 0,"string"==typeof a)c=y[a],y[a]=b;else{c={};for(d in a)a.hasOwnProperty(d)&&(c[d]=y[d],y[d]=a[d])}return c},o=function(a){return y[a]},a(document).ready(function(){return n(),a(document).on("mouseenter",".bigfoot-footnote__button",f),a(document).on("touchend click",z),a(document).on("mouseout",".is-hover-instantiated",A),a(document).on("keyup",m),a(window).on("scroll resize",w),a(document).on("gestureend",function(){return w()})}),e={removePopovers:u,close:u,createPopover:j,activate:j,repositionFeet:w,reposition:w,addBreakpoint:c,removeBreakpoint:t,getSetting:o,updateSetting:B}}}(jQuery)}).call(this); \ No newline at end of file diff --git a/public/javascripts/d3-3.5.2/d3.min.js b/public/javascripts/d3-3.5.2/d3.min.js new file mode 100755 index 0000000..ddaf546 --- /dev/null +++ b/public/javascripts/d3-3.5.2/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===da||n[0]===ma?ma+n:n}function l(n){return(n+="")[0]===ma?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=ya.length;r>e;++e){var u=ya[e]+t;if(u in n)return u}}function y(){}function M(){}function x(n){function t(){for(var t,r=e,u=-1,i=r.length;++ue;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function O(n){return xa(n,Aa),n}function Y(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var l=Ca.get(n);return l&&(n=l,c=V),a?t?u:r:t?y:i}function Z(n,t){return function(e){var r=ta.event;ta.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ta.event=r}}}function V(n,t){var e=Z(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function X(){var n=".dragsuppress-"+ ++qa,t="click"+n,e=ta.select(oa).on("touchmove"+n,b).on("dragstart"+n,b).on("selectstart"+n,b);if(za){var r=ia.style,u=r[za];r[za]="none"}return function(i){if(e.on(n,null),za&&(r[za]=u),i){var o=function(){e.on(t,null)};e.on(t,function(){b(),o()},!0),setTimeout(o,0)}}}function $(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>La&&(oa.scrollX||oa.scrollY)){e=ta.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();La=!(u.f||u.e),e.remove()}return La?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function B(){return ta.event.changedTouches[0].identifier}function W(){return ta.event.target}function J(){return oa}function G(n){return n>0?1:0>n?-1:0}function K(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function Q(n){return n>1?0:-1>n?Da:Math.acos(n)}function nt(n){return n>1?ja:-1>n?-ja:Math.asin(n)}function tt(n){return((n=Math.exp(n))-1/n)/2}function et(n){return((n=Math.exp(n))+1/n)/2}function rt(n){return((n=Math.exp(2*n))-1)/(n+1)}function ut(n){return(n=Math.sin(n/2))*n}function it(){}function ot(n,t,e){return this instanceof ot?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ot?new ot(n.h,n.s,n.l):xt(""+n,bt,ot):new ot(n,t,e)}function at(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new dt(u(n+120),u(n),u(n-120))}function ct(n,t,e){return this instanceof ct?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof ct?new ct(n.h,n.c,n.l):n instanceof st?ht(n.l,n.a,n.b):ht((n=_t((n=ta.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new ct(n,t,e)}function lt(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new st(e,Math.cos(n*=Fa)*t,Math.sin(n)*t)}function st(n,t,e){return this instanceof st?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof st?new st(n.l,n.a,n.b):n instanceof ct?lt(n.h,n.c,n.l):_t((n=dt(n)).r,n.g,n.b):new st(n,t,e)}function ft(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=gt(u)*Ja,r=gt(r)*Ga,i=gt(i)*Ka,new dt(vt(3.2404542*u-1.5371385*r-.4985314*i),vt(-.969266*u+1.8760108*r+.041556*i),vt(.0556434*u-.2040259*r+1.0572252*i))}function ht(n,t,e){return n>0?new ct(Math.atan2(e,t)*Ha,Math.sqrt(t*t+e*e),n):new ct(0/0,0/0,n)}function gt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function pt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function vt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function dt(n,t,e){return this instanceof dt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof dt?new dt(n.r,n.g,n.b):xt(""+n,dt,at):new dt(n,t,e)}function mt(n){return new dt(n>>16,255&n>>8,255&n)}function yt(n){return mt(n)+""}function Mt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function xt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(St(u[0]),St(u[1]),St(u[2]))}return(i=tc.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function bt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new ot(r,u,c)}function _t(n,t,e){n=wt(n),t=wt(t),e=wt(e);var r=pt((.4124564*n+.3575761*t+.1804375*e)/Ja),u=pt((.2126729*n+.7151522*t+.072175*e)/Ga),i=pt((.0193339*n+.119192*t+.9503041*e)/Ka);return st(116*u-16,500*(r-u),200*(u-i))}function wt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function St(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function kt(n){return"function"==typeof n?n:function(){return n}}function Et(n){return n}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Nt(t,e,n,r)}}function Nt(n,t,e,r){function u(){var n,t=c.status;if(!t&&zt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=ta.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!oa.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=ta.event;ta.event=n;try{o.progress.call(i,c)}finally{ta.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(ra(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},ta.rebind(i,o,"on"),null==r?i:i.get(Ct(r))}function Ct(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function zt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qt(){var n=Lt(),t=Tt()-n;t>24?(isFinite(t)&&(clearTimeout(ic),ic=setTimeout(qt,t)),uc=0):(uc=1,ac(qt))}function Lt(){var n=Date.now();for(oc=ec;oc;)n>=oc.t&&(oc.f=oc.c(n-oc.t)),oc=oc.n;return n}function Tt(){for(var n,t=ec,e=1/0;t;)t.f?t=n?n.n=t.n:ec=t.n:(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:Et;return function(n){var e=lc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=sc.get(g)||Ut;var M=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=ta.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=y?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!l&&f&&(x=i(x,1/0));var S=v.length+x.length+b.length+(M?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return M&&(x=i(k+x,k.length?s-b.length:1/0)),u+=v,n=x+b,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(M?n:k+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ft(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new hc(e-1)),1),e}function i(n,e){return t(n=new hc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{hc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{hc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ht(n);return c.floor=c,c.round=Ht(r),c.ceil=Ht(u),c.offset=Ht(i),c.range=a,n}function Ht(n){return function(t,e){try{hc=jt;var r=new jt;return r._=t,n(r,e)._}finally{hc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++aa;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in pc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,N.c.toString(),t,r)}function c(n,t,r){return e(n,N.x.toString(),t,r)}function l(n,t,r){return e(n,N.X.toString(),t,r)}function s(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{hc=jt;var t=new hc;return t._=n,r(t)}finally{hc=Date}}var r=t(n);return e.parse=function(n){try{hc=jt;var t=r.parse(n);return t&&t._}finally{hc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var M=ta.map(),x=It(v),b=Zt(v),_=It(d),w=Zt(d),S=It(m),k=Zt(m),E=It(y),A=Zt(y);p.forEach(function(n,t){M.set(n.toLowerCase(),t)});var N={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Yt(n.getDate(),t,2)},e:function(n,t){return Yt(n.getDate(),t,2)},H:function(n,t){return Yt(n.getHours(),t,2)},I:function(n,t){return Yt(n.getHours()%12||12,t,2)},j:function(n,t){return Yt(1+fc.dayOfYear(n),t,3)},L:function(n,t){return Yt(n.getMilliseconds(),t,3)},m:function(n,t){return Yt(n.getMonth()+1,t,2)},M:function(n,t){return Yt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Yt(n.getSeconds(),t,2)},U:function(n,t){return Yt(fc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Yt(fc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Yt(n.getFullYear()%100,t,2)},Y:function(n,t){return Yt(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:s,S:re,U:Xt,w:Vt,W:$t,x:c,X:l,y:Wt,Y:Bt,Z:Jt,"%":oe};return t}function Yt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function It(n){return new RegExp("^(?:"+n.map(ta.requote).join("|")+")","i")}function Zt(n){for(var t=new a,e=-1,r=n.length;++e68?1900:2e3)}function Kt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|va(t)/60,u=va(t)%60;return e+Yt(r,"0",2)+Yt(u,"0",2)}function oe(n,t,e){dc.lastIndex=0;var r=dc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);_c.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;wc.point=function(o,a){wc.point=n,r=(t=o)*Fa,u=Math.cos(a=(e=a)*Fa/2+Da/4),i=Math.sin(a)},wc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Me(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function xe(n){return[Math.atan2(n[1],n[0]),nt(n[2])]}function be(n,t){return va(n[0]-t[0])a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new qe(e,n,null,!0),l=new qe(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new qe(r,n,null,!1),l=new qe(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),ze(i),ze(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ze(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Te))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=ta.merge(g);var n=Fe(m,p);g.length?(b||(i.polygonStart(),b=!0),Ce(g,De,n,e,i)):n&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=Re(),x=t(M),b=!1;return y}}function Te(n){return n.length>1}function Re(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:y,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function De(n,t){return((n=n.x)[0]<0?n[1]-ja-Ta:ja-n[1])-((t=t.x)[0]<0?t[1]-ja-Ta:ja-t[1])}function Pe(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Da:-Da,c=va(i-e);va(c-Da)0?ja:-ja),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Da&&(va(e-u)Ta?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function je(n,t,e,r){var u;if(null==n)u=e*ja,r.point(-Da,u),r.point(0,u),r.point(Da,u),r.point(Da,0),r.point(Da,-u),r.point(0,-u),r.point(-Da,-u),r.point(-Da,0),r.point(-Da,u);else if(va(n[0]-t[0])>Ta){var i=n[0]a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Da/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+Da/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=b>=0?1:-1,w=_*b,S=w>Da,k=p*M;if(_c.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),i+=S?b+_*Pa:b,S^h>=e^m>=e){var E=de(pe(f),pe(n));Me(E);var A=de(u,E);Me(A);var N=(S^b>=0?-1:1)*nt(A[2]);(r>N||r===N&&(E[0]||E[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=m,p=M,v=x,f=n}}return(-Ta>i||Ta>i&&0>_c)^1&o}function He(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Da:-Da),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(be(e,g)||be(p,g))&&(p[0]+=Ta,p[1]+=Ta,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&be(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),M=m*m-y*(ve(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=ye(d,(-m-x)/y);if(me(b,p),b=xe(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=va(A-Da)A;if(!N&&k>E&&(_=k,k=E,E=_),C?N?k+E>0^b[1]<(va(b[0]-w)Da^(w<=b[0]&&b[0]<=S)){var z=ye(d,(-m+x)/y);return me(z,p),[b,xe(z)]}}}function u(t,e){var r=o?n:Da-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=va(i)>Ta,c=gr(n,6*Fa);return Le(t,e,c,o?[0,-n]:[-Da,n-Da])}function Oe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Ye(n,t,e,r){function u(r,u){return va(r[0]-n)0?0:3:va(r[0]-e)0?2:1:va(r[1]-t)0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&K(l,i,n)>0&&++t:i[1]<=r&&K(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,b=_=0/0}function g(){v&&(p(y,M),x&&w&&A.rejoin(),v.push(A.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Uc,Math.min(Uc,n)),t=Math.max(-Uc,Math.min(Uc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};N(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,m,y,M,x,b,_,w,S,k,E=a,A=Re(),N=Oe(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=ta.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&Ce(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return C}}function Ie(n){var t=0,e=Da/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Da/180,e=n[1]*Da/180):[180*(t/Da),180*(e/Da)]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,nt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){Fc+=u*n-r*t,r=n,u=t}var t,e,r,u;Zc.point=function(i,o){Zc.point=n,t=r=i,e=u=o},Zc.lineEnd=function(){n(t,e)}}function Xe(n,t){Hc>n&&(Hc=n),n>Yc&&(Yc=n),Oc>t&&(Oc=t),t>Ic&&(Ic=t)}function $e(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function We(n,t){Ec+=n,Ac+=t,++Nc}function Je(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Cc+=o*(t+n)/2,zc+=o*(e+r)/2,qc+=o,We(t=n,e=r)}var t,e;Xc.point=function(r,u){Xc.point=n,We(t=r,e=u)}}function Ge(){Xc.point=We}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Cc+=o*(r+n)/2,zc+=o*(u+t)/2,qc+=o,o=u*n-r*t,Lc+=o*(r+n),Tc+=o*(u+t),Rc+=3*o,We(r=n,u=t)}var t,e,r,u;Xc.point=function(i,o){Xc.point=n,We(t=r=i,e=u=o)},Xc.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Pa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:y};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(M,x,y,b,_,w,M=o[0],x=o[1],y=e,b=i[0],_=i[1],w=i[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=va(va(w)-1)i||va((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Fa),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ha,e*Ha])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*Fa,n[1]*Fa),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ha,n[1]*Ha]}function r(){a=Ae(o=lr(m,y,M),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,M=0,x=Pc,b=Et,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(x(o,f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Pc):He((_=+n)*Fa),u()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=n?Ye(n[0][0],n[0][1],n[1][0],n[1][1]):Et,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Fa,d=n[1]%360*Fa,r()):[v*Ha,d*Ha]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Fa,y=n[1]%360*Fa,M=n.length>2?n[2]%360*Fa:0,r()):[m*Ha,y*Ha,M*Ha]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*Fa,e*Fa)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Da?n-Pa:-Da>n?n+Pa:n,t]}function lr(n,t,e){return n?t||e?Ae(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>Da?t-Pa:-Da>t?t+Pa:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),nt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),nt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Pa)):(u=n+o*Pa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=xe([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,Me(e);var r=Q(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ta)%(2*Math.PI)}function vr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function Mr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(ut(r-t)+u*o*ut(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ha,Math.atan2(o,Math.sqrt(r*r+u*u))*Ha]}:function(){return[n*Ha,t*Ha]};return p.distance=h,p}function xr(){function n(n,u){var i=Math.sin(u*=Fa),o=Math.cos(u),a=va((n*=Fa)-t),c=Math.cos(a);$c+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Bc.point=function(u,i){t=u*Fa,e=Math.sin(i*=Fa),r=Math.cos(i),Bc.point=n},Bc.lineEnd=function(){Bc.point=Bc.lineEnd=y}}function br(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function _r(n,t){function e(n,t){o>0?-ja+Ta>t&&(t=-ja+Ta):t>ja-Ta&&(t=ja-Ta);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Da/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=G(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-ja]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return va(u)u;u++){for(;r>1&&K(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function zr(n,t){return n[0]-t[0]||n[1]-t[1]}function qr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Lr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function Tr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=ol.pop()||new Rr;return t.site=n,t}function Pr(n){Xr(n),rl.remove(n),ol.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&va(e-c.circle.x)s;++s)l=a[s],c=a[s-1],Kr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Jr(c.site,l.site,null,u),Vr(c),Vr(l)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=rl._;a;)if(r=Fr(a,o)-i,r>Ta)a=a.L;else{if(u=i-Hr(a,o),!(u>Ta)){r>-Ta?(t=a.P,e=a):u>-Ta?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(rl.insert(t,c),t||e){if(t===e)return Xr(t),e=Dr(t.site),rl.insert(c,e),c.edge=e.edge=Jr(t.site,c.site),Vr(t),Vr(e),void 0;if(!e)return c.edge=Jr(t.site,c.site),void 0;Xr(t),Xr(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,M=v*v+d*d,x={x:(d*y-g*M)/m+s,y:(h*M-v*y)/m+f};Kr(e.edge,l,p,x),c.edge=Jr(l,n,null,x),e.edge=Jr(n,p,null,x),Vr(t),Vr(e)}}function Fr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Hr(n,t){var e=n.N;if(e)return Fr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Yr(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=el,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(va(r-t)>Ta||va(u-e)>Ta)&&(a.splice(o,0,new Qr(Gr(i.site,s,va(r-f)Ta?{x:f,y:va(t-f)Ta?{x:va(e-p)Ta?{x:h,y:va(t-h)Ta?{x:va(e-g)=-Ra)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=al.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,M=il._;M;)if(m.yd||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.yr||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.yg){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.xi||f>o||r>h||u>g)){if(p=n.point){var p,v=t-p[0],d=e-p[1],m=v*v+d*d;if(c>m){var y=Math.sqrt(c=m);r=t-y,u=e-y,i=t+y,o=e+y,a=p}}for(var M=n.nodes,x=.5*(s+h),b=.5*(f+g),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:l(n,s,f,x,b);break;case 1:l(n,x,f,h,b);break;case 2:l(n,s,b,x,g);break;case 3:l(n,x,b,h,g)}}}(n,r,u,i,o),a}function gu(n,t){n=ta.rgb(n),t=ta.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+Mt(Math.round(e+i*n))+Mt(Math.round(r+o*n))+Mt(Math.round(u+a*n))}}function pu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=mu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function vu(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function du(n,t){var e,r,u,i=ll.lastIndex=sl.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=ll.exec(n))&&(r=sl.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:vu(e,r)})),i=sl.lastIndex;return ir;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function mu(n,t){for(var e,r=ta.interpolators.length;--r>=0&&!(e=ta.interpolators[r](n,t)););return e}function yu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(mu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function Mu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function bu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function wu(n){return n*n*n}function Su(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function ku(n){return function(t){return Math.pow(t,n)}}function Eu(n){return 1-Math.cos(n*ja)}function Au(n){return Math.pow(2,10*(n-1))}function Nu(n){return 1-Math.sqrt(1-n*n)}function Cu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Pa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Pa/t)}}function zu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function qu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lu(n,t){n=ta.hcl(n),t=ta.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return lt(e+i*n,r+o*n,u+a*n)+""}}function Tu(n,t){n=ta.hsl(n),t=ta.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return at(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){n=ta.lab(n),t=ta.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ft(e+i*n,r+o*n,u+a*n)+""}}function Du(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Pu(n){var t=[n.a,n.b],e=[n.c,n.d],r=ju(t),u=Uu(t,e),i=ju(Fu(e,t,-u))||0;t[0]*e[1]180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:vu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:vu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:vu(g[0],p[0])},{i:e-2,x:vu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i=0;)e.push(u[r])}function Qu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++oe;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function si(n){return n.reduce(fi,0)}function fi(n,t){return n+t[1]}function hi(n,t){return gi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function gi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function pi(n){return[ta.min(n),ta.max(n)]}function vi(n,t){return n.value-t.value}function di(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function mi(n,t){n._pack_next=t,t._pack_prev=n}function yi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Mi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(xi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],wi(r,u,i),t(i),di(r,i),r._pack_prev=i,di(i,u),u=r._pack_next,o=3;l>o;o++){wi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(yi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!yi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.ro;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(bi)}}function xi(n){n._pack_next=n._pack_prev=n}function bi(n){delete n._pack_next,delete n._pack_prev}function _i(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Ci(n,t,e){return n.a.parent===t.parent?n.a:e}function zi(n){return 1+ta.max(n,function(n){return n.y})}function qi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Li(n){var t=n.children;return t&&t.length?Li(t[0]):n}function Ti(n){var t,e=n.children;return e&&(t=e.length)?Ti(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Di(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Pi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ui(n){return n.rangeExtent?n.rangeExtent():Pi(n.range())}function ji(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Fi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Hi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:bl}function Oi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Oi:ji,c=r?Yu:Ou;return o=u(n,t,c,e),a=u(t,n,c,mu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Du)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Xi(n,t)},i.tickFormat=function(t,e){return $i(n,t,e)},i.nice=function(t){return Zi(n,t),u()},i.copy=function(){return Yi(n,t,e,r)},u()}function Ii(n,t){return ta.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Zi(n,t){return Fi(n,Hi(Vi(n,t)[2]))}function Vi(n,t){null==t&&(t=10);var e=Pi(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Xi(n,t){return ta.range.apply(ta,Vi(n,t))}function $i(n,t,e){var r=Vi(n,t);if(e){var u=lc.exec(e);if(u.shift(),"s"===u[8]){var i=ta.formatPrefix(Math.max(va(r[0]),va(r[1])));return u[7]||(u[7]="."+Bi(i.scale(r[2]))),u[8]="f",e=ta.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Wi(u[8],r)),e=u.join("")}else e=",."+Bi(r[2])+"f";return ta.format(e)}function Bi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Wi(n,t){var e=Bi(t[2]);return n in _l?Math.abs(e-Bi(Math.max(va(t[0]),va(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Ji(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Fi(r.map(u),e?Math:Sl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Pi(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++0;h--)o.push(i(l)*h);for(l=0;o[l]c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return wl;arguments.length<2?t=wl:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ji(n.copy(),t,e,r)},Ii(o,n)}function Gi(n,t,e){function r(t){return n(u(t))}var u=Ki(t),i=Ki(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Xi(e,n)},r.tickFormat=function(n,t){return $i(e,n,t)},r.nice=function(n){return r.domain(Zi(e,n))},r.exponent=function(o){return arguments.length?(u=Ki(t=o),i=Ki(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Gi(n.copy(),t,e)},Ii(r,n)}function Ki(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Qi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++on?[0/0,0/0]:[n>0?a[n-1]:r[0],nt?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return to(n,t,e)},u()}function eo(n,t){function e(e){return e>=e?t[ta.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return eo(n,t)},e}function ro(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Xi(n,t)},t.tickFormat=function(t,e){return $i(n,t,e)},t.copy=function(){return ro(n)},t}function uo(){return 0}function io(n){return n.innerRadius}function oo(n){return n.outerRadius}function ao(n){return n.startAngle}function co(n){return n.endAngle}function lo(n){return n&&n.padAngle}function so(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function fo(n,t,e,r,u){var i=n[0]-t[0],o=n[1]-t[1],a=(u?r:-r)/Math.sqrt(i*i+o*o),c=a*o,l=-a*i,s=n[0]+c,f=n[1]+l,h=t[0]+c,g=t[1]+l,p=(s+h)/2,v=(f+g)/2,d=h-s,m=g-f,y=d*d+m*m,M=e-r,x=s*g-h*f,b=(0>m?-1:1)*Math.sqrt(M*M*y-x*x),_=(x*m-d*b)/y,w=(-x*d-m*b)/y,S=(x*m+d*b)/y,k=(-x*d+m*b)/y,E=_-p,A=w-v,N=S-p,C=k-v;return E*E+A*A>N*N+C*C&&(_=S,w=k),[[_-c,w-l],[_*e/M,w*e/M]]}function ho(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=kt(e),p=kt(r);++f1&&u.push("H",r[0]),u.join("")}function mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function To(n){return n.length<3?go(n):n[0]+_o(n,Lo(n))}function Ro(n){for(var t,e,r,u=-1,i=n.length;++ur)return s();var u=i[i.active];u&&(--i.count,delete i[i.active],u.event&&u.event.interrupt.call(n,n.__data__,u.index)),i.active=r,o.event&&o.event.start.call(n,n.__data__,t),o.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&v.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return p.c=l(e||1)?Ne:l,1},0,c)}function l(e){if(i.active!==r)return 1;for(var u=e/f,a=h(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,n.__data__,t),s()):void 0}function s(){return--i.count?delete i[r]:delete n[e],1}var f,h,g=o.delay,p=oc,v=[];return p.t=g+c,u>=g?a(u-g):(p.c=a,void 0)},0,c)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Wl,u);return i==Wl.length?[t.year,Vi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Wl[i-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Pi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Ii(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.2"};Date.now||(Date.now=function(){return+new Date});var ea=[].slice,ra=function(n){return ea.call(n)},ua=document,ia=ua.documentElement,oa=window;try{ra(ia.childNodes)[0].nodeType}catch(aa){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{ua.createElement("div").style.setProperty("opacity",0,"")}catch(ca){var la=oa.Element.prototype,sa=la.setAttribute,fa=la.setAttributeNS,ha=oa.CSSStyleDeclaration.prototype,ga=ha.setProperty;la.setAttribute=function(n,t){sa.call(this,n,t+"")},la.setAttributeNS=function(n,t,e){fa.call(this,n,t,e+"")},ha.setProperty=function(n,t,e){ga.call(this,n,t+"",e)}}ta.ascending=n,ta.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ta.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ur&&(e=r)}else{for(;++u=r){e=r;break}for(;++ur&&(e=r)}return e},ta.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ue&&(e=r)}else{for(;++u=r){e=r;break}for(;++ue&&(e=r)}return e},ta.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}else{for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}return[e,u]},ta.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o1?c/(s-1):void 0},ta.deviation=function(){var n=ta.variance.apply(this,arguments);return n?Math.sqrt(n):n};var pa=r(n);ta.bisectLeft=pa.left,ta.bisect=ta.bisectRight=pa.right,ta.bisector=function(t){return r(1===t.length?function(e,r){return n(t(e),r)}:t)},ta.shuffle=function(n,t,e){(i=arguments.length)<3&&(e=n.length,2>i&&(t=0));for(var r,u,i=e-t;i;)u=0|Math.random()*i--,r=n[i+t],n[i+t]=n[u+t],n[u+t]=r;return n},ta.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ta.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},ta.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=ta.min(arguments,u),e=new Array(t);++n=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var va=Math.abs;ta.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,u=[],o=i(va(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)u.push(r/o);else for(;(r=n+e*++a)=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,v=i[c++],d=new a;++g=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++ur){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(T(e,n[e],t));return this}if(2>r)return oa.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(T(n,t,e))},ka.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},ka.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},ka.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},ka.append=function(n){return n=D(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},ka.insert=function(n,t){return n=D(n),t=k(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},ka.remove=function(){return this.each(P)},ka.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new a,y=new Array(o);for(r=-1;++rr;++r)p[r]=U(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++ii;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return S(u)},ka.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ka.sort=function(n){n=F.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ka.size=function(){var n=0;return H(this,function(){++n}),n};var Aa=[];ta.selection.enter=O,ta.selection.enter.prototype=Aa,Aa.append=ka.append,Aa.empty=ka.empty,Aa.node=ka.node,Aa.call=ka.call,Aa.size=ka.size,Aa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(I(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(I(n,t,e))};var Ca=ta.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ca.forEach(function(n){"on"+n in ua&&Ca.remove(n)});var za="onselectstart"in ua?null:m(ia.style,"userSelect"),qa=0;ta.mouse=function(n){return $(n,_())};var La=/WebKit/.test(oa.navigator.userAgent)?-1:0;ta.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=_().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return $(n,r)},ta.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],p|=n|e,M=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&ta.event.target===f),g({type:"dragend"}))}var l,s=this,f=ta.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=ta.select(u()).on(i+d,a).on(o+d,c),y=X(),M=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-M[0],l.y-M[1]]):l=[0,0],g({type:"dragstart"})}}var e=w(n,"drag","dragstart","dragend"),r=null,u=t(y,ta.mouse,J,"mousemove","mouseup"),i=t(B,ta.touch,W,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},ta.rebind(n,e,"on")},ta.touches=function(n,t){return arguments.length<2&&(t=_().touches),t?ra(t).map(function(t){var e=$(n,t);return e.identifier=t.identifier,e}):[]};var Ta=1e-6,Ra=Ta*Ta,Da=Math.PI,Pa=2*Da,Ua=Pa-Ta,ja=Da/2,Fa=Da/180,Ha=180/Da,Oa=Math.SQRT2,Ya=2,Ia=4;ta.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=et(v),o=i/(Ya*h)*(e*rt(Oa*t+v)-tt(v));return[r+o*l,u+o*s,i*e/et(Oa*t+v)]}return[r+n*l,u+n*s,i*Math.exp(Oa*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Ia*f)/(2*i*Ya*h),p=(c*c-i*i-Ia*f)/(2*c*Ya*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Oa;return e.duration=1e3*y,e},ta.behavior.zoom=function(){function n(n){n.on(z,s).on(Xa+".zoom",h).on("dblclick.zoom",g).on(T,f)}function t(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function e(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function r(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=e(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function i(t,e,i,o){t.__chart__={x:k.x,y:k.y,k:k.k},r(Math.pow(2,o)),u(v=e,i),t=ta.select(t),N>0&&(t=t.transition().duration(N)),t.call(n.event)}function o(){x&&x.domain(M.range().map(function(n){return(n-k.x)/k.k}).map(M.invert)),S&&S.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function a(n){C++||n({type:"zoomstart"})}function c(n){o(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function l(n){--C||n({type:"zoomend"}),v=null}function s(){function n(){s=1,u(ta.mouse(r),h),c(o)}function e(){f.on(q,null).on(L,null),g(s&&ta.event.target===i),l(o)}var r=this,i=ta.event.target,o=R.of(r,arguments),s=0,f=ta.select(oa).on(q,n).on(L,e),h=t(ta.mouse(r)),g=X();Fl.call(r),a(o)}function f(){function n(){var n=ta.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=t(n))}),n}function e(){var t=ta.event.target;ta.select(t).on(x,o).on(_,h),w.push(t);for(var e=ta.event.changedTouches,r=0,u=e.length;u>r;++r)d[e[r].identifier]=null;var a=n(),c=Date.now();if(1===a.length){if(500>c-y){var l=a[0];i(p,l,d[l.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),b()}y=c}else if(a.length>1){var l=a[0],s=a[1],f=l[0]-s[0],g=l[1]-s[1];m=f*f+g*g}}function o(){var n,t,e,i,o=ta.touches(p);Fl.call(p);for(var a=0,l=o.length;l>a;++a,i=null)if(e=o[a],i=d[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*g)}y=null,u(n,t),c(v)}function h(){if(ta.event.touches.length){for(var t=ta.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var u in d)return void n()}ta.selectAll(w).on(M,null),S.on(z,s).on(T,f),E(),l(v)}var g,p=this,v=R.of(p,arguments),d={},m=0,M=".zoom-"+ta.event.changedTouches[0].identifier,x="touchmove"+M,_="touchend"+M,w=[],S=ta.select(p),E=X();e(),a(v),S.on(z,null).on(T,e)}function h(){var n=R.of(this,arguments);m?clearTimeout(m):(p=t(v=d||ta.mouse(this)),Fl.call(this),a(n)),m=setTimeout(function(){m=null,l(n)},50),b(),r(Math.pow(2,.002*Za())*k.k),u(v,p),c(n)}function g(){var n=ta.mouse(this),e=Math.log(k.k)/Math.LN2;i(this,n,t(n),ta.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}var p,v,d,m,y,M,x,_,S,k={x:0,y:0,k:1},E=[960,500],A=Va,N=250,C=0,z="mousedown.zoom",q="mousemove.zoom",L="mouseup.zoom",T="touchstart.zoom",R=w(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=R.of(this,arguments),t=k;Ul?ta.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},a(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],u=v?v[0]:e/2,i=v?v[1]:r/2,o=ta.interpolateZoom([(u-k.x)/k.k,(i-k.y)/k.k,e/k.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:u-r[0]*a,y:i-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){l(n)}).each("end.zoom",function(){l(n)}):(this.__chart__=k,a(n),c(n),l(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},o(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:+t},o(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Va:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(d=t&&[+t[0],+t[1]],n):d},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(N=+t,n):N},n.x=function(t){return arguments.length?(x=t,M=t.copy(),k={x:0,y:0,k:1},n):x},n.y=function(t){return arguments.length?(S=t,_=t.copy(),k={x:0,y:0,k:1},n):S},ta.rebind(n,R,"on")};var Za,Va=[0,1/0],Xa="onwheel"in ua?(Za=function(){return-ta.event.deltaY*(ta.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ua?(Za=function(){return ta.event.wheelDelta},"mousewheel"):(Za=function(){return-ta.event.detail},"MozMousePixelScroll");ta.color=it,it.prototype.toString=function(){return this.rgb()+""},ta.hsl=ot;var $a=ot.prototype=new it;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,n*this.l)},$a.rgb=function(){return at(this.h,this.s,this.l)},ta.hcl=ct;var Ba=ct.prototype=new it;Ba.brighter=function(n){return new ct(this.h,this.c,Math.min(100,this.l+Wa*(arguments.length?n:1)))},Ba.darker=function(n){return new ct(this.h,this.c,Math.max(0,this.l-Wa*(arguments.length?n:1)))},Ba.rgb=function(){return lt(this.h,this.c,this.l).rgb()},ta.lab=st;var Wa=18,Ja=.95047,Ga=1,Ka=1.08883,Qa=st.prototype=new it;Qa.brighter=function(n){return new st(Math.min(100,this.l+Wa*(arguments.length?n:1)),this.a,this.b)},Qa.darker=function(n){return new st(Math.max(0,this.l-Wa*(arguments.length?n:1)),this.a,this.b)},Qa.rgb=function(){return ft(this.l,this.a,this.b)},ta.rgb=dt;var nc=dt.prototype=new it;nc.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new dt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new dt(u,u,u)},nc.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new dt(n*this.r,n*this.g,n*this.b)},nc.hsl=function(){return bt(this.r,this.g,this.b)},nc.toString=function(){return"#"+Mt(this.r)+Mt(this.g)+Mt(this.b)};var tc=ta.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});tc.forEach(function(n,t){tc.set(n,mt(t))}),ta.functor=kt,ta.xhr=At(Et),ta.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Nt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new v,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},ta.csv=ta.dsv(",","text/csv"),ta.tsv=ta.dsv(" ","text/tab-separated-values");var ec,rc,uc,ic,oc,ac=oa[m(oa,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ta.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};rc?rc.n=i:ec=i,rc=i,uc||(ic=clearTimeout(ic),uc=1,ac(qt))},ta.timer.flush=function(){Lt(),Tt()},ta.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var cc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);ta.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ta.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),cc[8+e/3]};var lc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,sc=ta.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ta.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),fc=ta.time={},hc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){gc.setUTCDate.apply(this._,arguments)},setDay:function(){gc.setUTCDay.apply(this._,arguments)},setFullYear:function(){gc.setUTCFullYear.apply(this._,arguments)},setHours:function(){gc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){gc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){gc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){gc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){gc.setUTCSeconds.apply(this._,arguments)},setTime:function(){gc.setTime.apply(this._,arguments)}};var gc=Date.prototype;fc.year=Ft(function(n){return n=fc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),fc.years=fc.year.range,fc.years.utc=fc.year.utc.range,fc.day=Ft(function(n){var t=new hc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),fc.days=fc.day.range,fc.days.utc=fc.day.utc.range,fc.dayOfYear=function(n){var t=fc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=fc[n]=Ft(function(n){return(n=fc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});fc[n+"s"]=e.range,fc[n+"s"].utc=e.utc.range,fc[n+"OfYear"]=function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)}}),fc.week=fc.sunday,fc.weeks=fc.sunday.range,fc.weeks.utc=fc.sunday.utc.range,fc.weekOfYear=fc.sundayOfYear;var pc={"-":"",_:" ",0:"0"},vc=/^\s*\d+/,dc=/^%/;ta.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var mc=ta.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ta.format=mc.numberFormat,ta.geo={},ce.prototype={s:0,t:0,add:function(n){le(n,this.t,yc),le(yc.s,this.s,this),this.s?this.t+=yc.t:this.s=yc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var yc=new ce;ta.geo.stream=function(n,t){n&&Mc.hasOwnProperty(n.type)?Mc[n.type](n,t):se(n,t)};var Mc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++rn?4*Da+n:n,wc.lineStart=wc.lineEnd=wc.point=y}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*Fa,e*Fa]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);Me(o),o=xe(o);var c=t-p,l=c>0?1:-1,v=o[0]*Ha*l,d=va(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Ha;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Ha;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=va(r)>180?r+(r>0?360:-360):r}else v=n,d=e;wc.point(n,e),t(n,e)}function i(){wc.lineStart()}function o(){u(v,d),wc.lineEnd(),va(y)>Ta&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n_c?(s=-(h=180),f=-(g=90)):y>Ta?g=90:-Ta>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){Sc=kc=Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,Dc);var t=Lc,e=Tc,r=Rc,u=t*t+e*e+r*r;return Ra>u&&(t=Cc,e=zc,r=qc,Ta>kc&&(t=Ec,e=Ac,r=Nc),u=t*t+e*e+r*r,Ra>u)?[0/0,0/0]:[Math.atan2(e,t)*Ha,nt(r/Math.sqrt(u))*Ha]};var Sc,kc,Ec,Ac,Nc,Cc,zc,qc,Lc,Tc,Rc,Dc={sphere:y,point:_e,lineStart:Se,lineEnd:ke,polygonStart:function(){Dc.lineStart=Ee},polygonEnd:function(){Dc.lineStart=Se}},Pc=Le(Ne,Pe,je,[-Da,-Da/2]),Uc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ye(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ta,f+.12*l+Ta],[s-.214*l-Ta,f+.234*l-Ta]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ta,f+.166*l+Ta],[s-.115*l-Ta,f+.234*l-Ta]]).stream(c).point,n},n.scale(1070)};var jc,Fc,Hc,Oc,Yc,Ic,Zc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Fc=0,Zc.lineStart=Ve},polygonEnd:function(){Zc.lineStart=Zc.lineEnd=Zc.point=y,jc+=va(Fc/2)}},Vc={point:Xe,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},Xc={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){Xc.lineStart=Ke},polygonEnd:function(){Xc.point=We,Xc.lineStart=Je,Xc.lineEnd=Ge}};ta.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),ta.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return jc=0,ta.geo.stream(n,u(Zc)),jc},n.centroid=function(n){return Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,u(Xc)),Rc?[Lc/Rc,Tc/Rc]:qc?[Cc/qc,zc/qc]:Nc?[Ec/Nc,Ac/Nc]:[0/0,0/0]},n.bounds=function(n){return Yc=Ic=-(Hc=Oc=1/0),ta.geo.stream(n,u(Vc)),[[Hc,Oc],[Yc,Ic]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Et,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(ta.geo.albersUsa()).context(null)},ta.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ta.geo.projection=ur,ta.geo.projectionMutator=ir,(ta.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,ta.geo.rotation=function(n){function t(t){return t=n(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t}return n=lr(n[0]%360*Fa,n[1]*Fa,n.length>2?n[2]*Fa:0),t.invert=function(t){return t=n.invert(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t},t},cr.invert=ar,ta.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=lr(-n[0]*Fa,-n[1]*Fa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ha,n[1]*=Ha}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*Fa,u*Fa),n):t},n.precision=function(r){return arguments.length?(e=gr(t*Fa,(u=+r)*Fa),n):u},n.angle(90)},ta.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Fa,u=n[1]*Fa,i=t[1]*Fa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},ta.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ta.range(Math.ceil(i/d)*d,u,d).map(h).concat(ta.range(Math.ceil(l/m)*m,c,m).map(g)).concat(ta.range(Math.ceil(r/p)*p,e,p).filter(function(n){return va(n%d)>Ta}).map(s)).concat(ta.range(Math.ceil(a/v)*v,o,v).filter(function(n){return va(n%m)>Ta}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=vr(a,o,90),f=dr(r,e,y),h=vr(l,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Ta],[180,90-Ta]]).minorExtent([[-180,-80-Ta],[180,80+Ta]])},ta.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return ta.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},ta.geo.interpolate=function(n,t){return Mr(n[0]*Fa,n[1]*Fa,t[0]*Fa,t[1]*Fa)},ta.geo.length=function(n){return $c=0,ta.geo.stream(n,Bc),$c};var $c,Bc={sphere:y,point:y,lineStart:xr,lineEnd:y,polygonStart:y,polygonEnd:y},Wc=br(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ta.geo.azimuthalEqualArea=function(){return ur(Wc)}).raw=Wc;var Jc=br(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},Et);(ta.geo.azimuthalEquidistant=function(){return ur(Jc)}).raw=Jc,(ta.geo.conicConformal=function(){return Ie(_r)}).raw=_r,(ta.geo.conicEquidistant=function(){return Ie(wr)}).raw=wr;var Gc=br(function(n){return 1/n},Math.atan);(ta.geo.gnomonic=function(){return ur(Gc)}).raw=Gc,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-ja]},(ta.geo.mercator=function(){return kr(Sr)}).raw=Sr;var Kc=br(function(){return 1},Math.asin);(ta.geo.orthographic=function(){return ur(Kc)}).raw=Kc;var Qc=br(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ta.geo.stereographic=function(){return ur(Qc)}).raw=Qc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-ja]},(ta.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Er,ta.geom={},ta.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=kt(e),i=kt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(zr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Cr(a),s=Cr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ta)*Ta,y:Math.round(o(n,t)/Ta)*Ta,i:t}})}var r=Ar,u=Nr,i=r,o=u,a=cl;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Ir),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c=l,h=r>=s,g=h<<1|f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=su()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,M=kt(a),x=kt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.xm&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);v>b&&(v=b),d>_&&(d=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=su();if(k.add=function(n){i(k,n,+M(n,++g),+x(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},k.find=function(n){return hu(k,n[0],n[1],v,d,m,y)},g=-1,null==t){for(;++g=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||Et,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:pl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=ta.event.x,n.py=ta.event.y,a.resume()}var e,r,u,i,o,a={},c=ta.dispatch("start","tick","end"),l=[1,1],s=.9,f=vl,h=dl,g=-30,p=ml,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,M,x,b=m.length,_=y.length;for(e=0;_>e;++e)a=y[e],f=a.source,h=a.target,M=h.x-f.x,x=h.y-f.y,(p=M*M+x*x)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,M*=p,x*=p,h.x-=M*(d=f.weight/(h.weight+f.weight)),h.y-=x*d,f.x+=M*(d=1-d),f.y+=x*d);if((d=r*v)&&(M=l[0]/2,x=l[1]/2,e=-1,d))for(;++e0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ta.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++at;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=ta.behavior.drag().origin(Et).on("dragstart.force",Xu).on("drag.force",t).on("dragend.force",$u)),arguments.length?(this.on("mouseover.force",Bu).on("mouseout.force",Wu).call(e),void 0):e},ta.rebind(a,c,"on")};var vl=20,dl=1,ml=1/0;ta.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Qu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ei,e=ni,r=ti;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ku(t,function(n){n.children&&(n.value=0)}),Qu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ta.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++lf?-1:1),p=(f-c*g)/ta.sum(l),v=ta.range(c),d=[];return null!=e&&v.sort(e===yl?function(n,t){return l[t]-l[n]}:function(n,t){return e(o[n],o[t])}),v.forEach(function(n){d[n]={data:o[n],value:a=l[n],startAngle:s,endAngle:s+=a*p+g,padAngle:h}}),d}var t=Number,e=yl,r=0,u=Pa,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var yl={};ta.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=ta.permute(l,f),s=ta.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=Et,e=ai,r=ci,u=oi,i=ui,o=ii;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:Ml.get(t)||ai,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:xl.get(t)||ci,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var Ml=ta.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(li),i=n.map(si),o=ta.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ta.range(n.length).reverse()},"default":ai}),xl=ta.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ci});ta.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i0)for(i=-1;++i=s[0]&&a<=s[1]&&(o=c[ta.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=pi,u=hi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=kt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return gi(n,t)}:kt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ta.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Qu(a,function(n){n.r=+s(n.value)}),Qu(a,Mi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Qu(a,function(n){n.r+=f}),Qu(a,Mi),Qu(a,function(n){n.r-=f})}return _i(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=ta.layout.hierarchy().sort(vi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Gu(n,e)},ta.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Qu(h,e),h.parent.m=-h.z,Ku(h,r),l)Ku(f,i);else{var g=f,p=f,v=f;Ku(f,function(n){n.xp.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Ku(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ni(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=Ei(o),u=ki(u),o&&u;)c=ki(c),i=Ei(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ai(Ci(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!Ei(i)&&(i.t=o,i.m+=f-s),u&&!ki(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=ta.layout.hierarchy().sort(null).value(null),a=Si,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Gu(n,o)},ta.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Qu(c,function(n){var t=n.children;t&&t.length?(n.x=qi(t),n.y=zi(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Li(c),f=Ti(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Qu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=ta.layout.hierarchy().sort(null).value(null),e=Si,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Gu(n,t)},ta.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++ut?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++oe&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++ie.dx)&&(s=e.dx);++ie&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var bl={floor:Et,ceil:Et};ta.scale.linear=function(){return Yi([0,1],[0,1],mu,!1)};var _l={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Ji(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var wl=ta.format(".0e"),Sl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Gi(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return Qi([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(kl)},ta.scale.category20=function(){return ta.scale.ordinal().range(El)},ta.scale.category20b=function(){return ta.scale.ordinal().range(Al)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Nl)};var kl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(yt),El=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(yt),Al=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(yt),Nl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(yt);ta.scale.quantile=function(){return no([],[])},ta.scale.quantize=function(){return to(0,1,[0,1])},ta.scale.threshold=function(){return eo([.5],[0,1])},ta.scale.identity=function(){return ro([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-ja,f=a.apply(this,arguments)-ja,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ua)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===Cl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=nt(d/l*Math.sin(m))),n&&(E=nt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=Da?0:1;if(A&&so(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=Da?0:1;if(E&&so(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Lr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=fo(null==S?[_,w]:[S,k],[y,M],l,H,g),Y=fo([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^so(O[1][0],O[1][1],Y[1][0],Y[1][1]),",",g," ",Y[1],"A",H,",",H," 0 0,",v," ",Y[0]):N.push("M",O[0],"A",H,",",H," 0 1,",v," ",Y[0])}else N.push("M",y,",",M);if(null!=S){var I=Math.min(p,(n-F)/(j-1)),Z=fo([y,M],[S,k],n,-I,g),V=fo([_,w],null==x?[y,M]:[x,b],n,-I,g);p===I?N.push("L",V[0],"A",I,",",I," 0 0,",v," ",V[1],"A",n,",",n," 0 ",g^so(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-g," ",Z[1],"A",I,",",I," 0 0,",v," ",Z[0]):N.push("L",V[0],"A",I,",",I," 0 0,",v," ",Z[0])}else N.push("L",_,",",w)}else N.push("M",y,",",M),null!=x&&N.push("A",l,",",l," 0 ",C,",",g," ",x,",",b),N.push("L",_,",",w),null!=S&&N.push("A",n,",",n," 0 ",q,",",1-g," ",S,",",k);return N.push("Z"),N.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=io,r=oo,u=uo,i=Cl,o=ao,a=co,c=lo;return n.innerRadius=function(t){return arguments.length?(e=kt(t),n):e},n.outerRadius=function(t){return arguments.length?(r=kt(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=kt(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==Cl?Cl:kt(t),n):i},n.startAngle=function(t){return arguments.length?(o=kt(t),n):o},n.endAngle=function(t){return arguments.length?(a=kt(t),n):a},n.padAngle=function(t){return arguments.length?(c=kt(t),n):c},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-ja;return[Math.cos(t)*n,Math.sin(t)*n]},n};var Cl="auto";ta.svg.line=function(){return ho(Et)};var zl=ta.map({linear:go,"linear-closed":po,step:vo,"step-before":mo,"step-after":yo,basis:So,"basis-open":ko,"basis-closed":Eo,bundle:Ao,cardinal:bo,"cardinal-open":Mo,"cardinal-closed":xo,monotone:To});zl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var ql=[0,2/3,1/3,0],Ll=[0,1/3,2/3,0],Tl=[0,1/6,2/3,1/6];ta.svg.line.radial=function(){var n=ho(Ro);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},mo.reverse=yo,yo.reverse=mo,ta.svg.area=function(){return Do(Et)},ta.svg.area.radial=function(){var n=Do(Ro);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ta.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)-ja,s=l.call(n,u,r)-ja;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Da)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Po,c=ao,l=co;return n.radius=function(t){return arguments.length?(a=kt(t),n):a},n.source=function(t){return arguments.length?(i=kt(t),n):i},n.target=function(t){return arguments.length?(o=kt(t),n):o},n.startAngle=function(t){return arguments.length?(c=kt(t),n):c},n.endAngle=function(t){return arguments.length?(l=kt(t),n):l},n},ta.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=Uo;return n.source=function(e){return arguments.length?(t=kt(e),n):t},n.target=function(t){return arguments.length?(e=kt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ta.svg.diagonal.radial=function(){var n=ta.svg.diagonal(),t=Uo,e=n.projection;return n.projection=function(n){return arguments.length?e(jo(t=n)):t},n},ta.svg.symbol=function(){function n(n,r){return(Rl.get(t.call(this,n,r))||Oo)(e.call(this,n,r))}var t=Ho,e=Fo;return n.type=function(e){return arguments.length?(t=kt(e),n):t},n.size=function(t){return arguments.length?(e=kt(t),n):e},n};var Rl=ta.map({circle:Oo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Pl)),e=t*Pl;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ta.svg.symbolTypes=Rl.keys();var Dl=Math.sqrt(3),Pl=Math.tan(30*Fa);ka.transition=function(n){for(var t,e,r=Ul||++Ol,u=Xo(n),i=[],o=jl||{time:Date.now(),ease:Su,delay:0,duration:250},a=-1,c=this.length;++ai;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Io(u,this.namespace,this.id)},Hl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):H(this,null==t?function(t){t[r][e].tween.remove(n)}:function(u){u[r][e].tween.set(n,t)})},Hl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Hu:mu,a=ta.ns.qualify(n);return Zo(this,"attr."+n,t,a.local?i:u)},Hl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=ta.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Hl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=oa.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=mu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Zo(this,"style."+n,t,u)},Hl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,oa.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Hl.text=function(n){return Zo(this,"text",n,Vo)},Hl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Hl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ta.ease.apply(ta,arguments)),H(this,function(r){r[e][t].ease=n}))},Hl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:H(this,"function"==typeof n?function(r,u,i){r[e][t].delay=+n.call(r,r.__data__,u,i)}:(n=+n,function(r){r[e][t].delay=n}))},Hl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:H(this,"function"==typeof n?function(r,u,i){r[e][t].duration=Math.max(1,n.call(r,r.__data__,u,i))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Hl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var u=jl,i=Ul;try{Ul=e,H(this,function(t,u,i){jl=t[r][e],n.call(t,t.__data__,u,i)})}finally{jl=u,Ul=i}}else H(this,function(u){var i=u[r][e];(i.event||(i.event=ta.dispatch("start","end","interrupt"))).on(n,t)});return this},Hl.transition=function(){for(var n,t,e,r,u=this.id,i=++Ol,o=this.namespace,a=[],c=0,l=this.length;l>c;c++){a.push(n=[]);for(var t=this[c],s=0,f=t.length;f>s;s++)(e=t[s])&&(r=e[o][u],$o(e,s,o,i,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Io(a,o,i)},ta.svg.axis=function(){function n(n){n.each(function(){var n,l=ta.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):Et:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ta),d=ta.transition(p.exit()).style("opacity",Ta).remove(),m=ta.transition(p.order()).style("opacity",1),y=Math.max(u,0)+o,M=Ui(f),x=l.selectAll(".domain").data([0]),b=(x.enter().append("path").attr("class","domain"),ta.transition(x));v.append("line"),v.append("text");var _,w,S,k,E=v.select("line"),A=m.select("line"),N=p.select("text").text(g),C=v.select("text"),z=m.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Bo,_="x",S="y",w="x2",k="y2",N.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),b.attr("d","M"+M[0]+","+q*i+"V0H"+M[1]+"V"+q*i)):(n=Wo,_="y",S="x",w="y2",k="x2",N.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),b.attr("d","M"+q*i+","+M[0]+"H0V"+M[1]+"H"+q*i)),E.attr(k,q*u),C.attr(S,q*y),A.attr(w,0).attr(k,q*u),z.attr(_,0).attr(S,q*y),f.rangeBand){var L=f,T=L.rangeBand()/2;s=f=function(n){return L(n)+T}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=ta.scale.linear(),r=Yl,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Il?t+"":Yl,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Yl="bottom",Il={top:1,right:1,bottom:1,left:1};ta.svg.brush=function(){function n(i){i.each(function(){var i=ta.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,Et);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Zl[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=ta.transition(i),h=ta.transition(o);c&&(s=Ui(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=Ui(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==ta.event.keyCode&&(N||(y=null,z[0]-=s[1],z[1]-=f[1],N=2),b())}function p(){32==ta.event.keyCode&&2==N&&(z[0]+=s[1],z[1]+=f[1],N=0,b())}function v(){var n=ta.mouse(x),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),N||(ta.event.altKey?(y||(y=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ta.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),w({type:"brushend"})}var y,M,x=this,_=ta.select(ta.event.target),w=a.of(x,arguments),S=ta.select(x),k=_.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,N=_.classed("extent"),C=X(),z=ta.mouse(x),q=ta.select(oa).on("keydown.brush",u).on("keyup.brush",p);if(ta.event.changedTouches?q.on("touchmove.brush",v).on("touchend.brush",m):q.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),N)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var L=+/w$/.test(k),T=+/^n/.test(k);M=[s[1-L]-z[0],f[1-T]-z[1]],z[0]=s[L],z[1]=f[T]}else ta.event.altKey&&(y=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),ta.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=w(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Vl[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ul?ta.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=yu(s,t.x),r=yu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Vl[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Vl[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},ta.rebind(n,a,"on")};var Zl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Vl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Xl=fc.format=mc.timeFormat,$l=Xl.utc,Bl=$l("%Y-%m-%dT%H:%M:%S.%LZ");Xl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:Bl,Jo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Jo.toString=Bl.toString,fc.second=Ft(function(n){return new hc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),fc.seconds=fc.second.range,fc.seconds.utc=fc.second.utc.range,fc.minute=Ft(function(n){return new hc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),fc.minutes=fc.minute.range,fc.minutes.utc=fc.minute.utc.range,fc.hour=Ft(function(n){var t=n.getTimezoneOffset()/60;return new hc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),fc.hours=fc.hour.range,fc.hours.utc=fc.hour.utc.range,fc.month=Ft(function(n){return n=fc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),fc.months=fc.month.range,fc.months.utc=fc.month.utc.range;var Wl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Jl=[[fc.second,1],[fc.second,5],[fc.second,15],[fc.second,30],[fc.minute,1],[fc.minute,5],[fc.minute,15],[fc.minute,30],[fc.hour,1],[fc.hour,3],[fc.hour,6],[fc.hour,12],[fc.day,1],[fc.day,2],[fc.week,1],[fc.month,1],[fc.month,3],[fc.year,1]],Gl=Xl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ne]]),Kl={range:function(n,t,e){return ta.range(Math.ceil(n/e)*e,+t,e).map(Ko)},floor:Et,ceil:Et};Jl.year=fc.year,fc.scale=function(){return Go(ta.scale.linear(),Jl,Gl)};var Ql=Jl.map(function(n){return[n[0].utc,n[1]]}),ns=$l.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ne]]);Ql.year=fc.year.utc,fc.scale.utc=function(){return Go(ta.scale.linear(),Ql,ns)},ta.text=At(function(n){return n.responseText}),ta.json=function(n,t){return Nt(n,"application/json",Qo,t)},ta.html=function(n,t){return Nt(n,"text/html",na,t)},ta.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(ta):"object"==typeof module&&module.exports&&(module.exports=ta),this.d3=ta}(); \ No newline at end of file diff --git a/public/javascripts/htmlwidgets-0.5/htmlwidgets.js b/public/javascripts/htmlwidgets-0.5/htmlwidgets.js new file mode 100755 index 0000000..0777920 --- /dev/null +++ b/public/javascripts/htmlwidgets-0.5/htmlwidgets.js @@ -0,0 +1,625 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
    ").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition as an output binding. + + // Merge defaults into the definition; don't mutate the original definition. + // The base object is a Shiny output binding if we're running in Shiny mode, + // or an empty object if we're not. + var shinyBinding = extend(new Shiny.OutputBinding(), defaults, definition); + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + // NB: shinyBinding.initialize may be undefined, as it's optional. + + // Rename initialize to make sure it isn't called by a future version + // of Shiny that does support initialize directly. + shinyBinding._htmlwidgets_initialize = shinyBinding.initialize; + delete shinyBinding.initialize; + + overrideMethod(shinyBinding, "find", function(superfunc) { + return function(scope) { + + var results = superfunc(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + }); + + overrideMethod(shinyBinding, "renderValue", function(superfunc) { + return function(el, data) { + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!this.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (this._htmlwidgets_initialize) { + var result = this._htmlwidgets_initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + Shiny.renderDependencies(data.deps); + superfunc(el, data.x, elementData(el, "init_result")); + }; + }); + + overrideMethod(shinyBinding, "resize", function(superfunc) { + return function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + superfunc(el, width, height, elementData(el, "init_result")); + } + }; + }); + + Shiny.outputBindings.register(shinyBinding, shinyBinding.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on("shown", resizeHandler); + window.jQuery(document).on("hidden", resizeHandler); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + } + }); + }); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; +})(); + diff --git a/public/javascripts/sankey-1/d3-3.5.2/d3.min.js b/public/javascripts/sankey-1/d3-3.5.2/d3.min.js new file mode 100755 index 0000000..ddaf546 --- /dev/null +++ b/public/javascripts/sankey-1/d3-3.5.2/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===da||n[0]===ma?ma+n:n}function l(n){return(n+="")[0]===ma?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=ya.length;r>e;++e){var u=ya[e]+t;if(u in n)return u}}function y(){}function M(){}function x(n){function t(){for(var t,r=e,u=-1,i=r.length;++ue;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function O(n){return xa(n,Aa),n}function Y(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var l=Ca.get(n);return l&&(n=l,c=V),a?t?u:r:t?y:i}function Z(n,t){return function(e){var r=ta.event;ta.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ta.event=r}}}function V(n,t){var e=Z(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function X(){var n=".dragsuppress-"+ ++qa,t="click"+n,e=ta.select(oa).on("touchmove"+n,b).on("dragstart"+n,b).on("selectstart"+n,b);if(za){var r=ia.style,u=r[za];r[za]="none"}return function(i){if(e.on(n,null),za&&(r[za]=u),i){var o=function(){e.on(t,null)};e.on(t,function(){b(),o()},!0),setTimeout(o,0)}}}function $(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>La&&(oa.scrollX||oa.scrollY)){e=ta.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();La=!(u.f||u.e),e.remove()}return La?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function B(){return ta.event.changedTouches[0].identifier}function W(){return ta.event.target}function J(){return oa}function G(n){return n>0?1:0>n?-1:0}function K(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function Q(n){return n>1?0:-1>n?Da:Math.acos(n)}function nt(n){return n>1?ja:-1>n?-ja:Math.asin(n)}function tt(n){return((n=Math.exp(n))-1/n)/2}function et(n){return((n=Math.exp(n))+1/n)/2}function rt(n){return((n=Math.exp(2*n))-1)/(n+1)}function ut(n){return(n=Math.sin(n/2))*n}function it(){}function ot(n,t,e){return this instanceof ot?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ot?new ot(n.h,n.s,n.l):xt(""+n,bt,ot):new ot(n,t,e)}function at(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new dt(u(n+120),u(n),u(n-120))}function ct(n,t,e){return this instanceof ct?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof ct?new ct(n.h,n.c,n.l):n instanceof st?ht(n.l,n.a,n.b):ht((n=_t((n=ta.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new ct(n,t,e)}function lt(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new st(e,Math.cos(n*=Fa)*t,Math.sin(n)*t)}function st(n,t,e){return this instanceof st?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof st?new st(n.l,n.a,n.b):n instanceof ct?lt(n.h,n.c,n.l):_t((n=dt(n)).r,n.g,n.b):new st(n,t,e)}function ft(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=gt(u)*Ja,r=gt(r)*Ga,i=gt(i)*Ka,new dt(vt(3.2404542*u-1.5371385*r-.4985314*i),vt(-.969266*u+1.8760108*r+.041556*i),vt(.0556434*u-.2040259*r+1.0572252*i))}function ht(n,t,e){return n>0?new ct(Math.atan2(e,t)*Ha,Math.sqrt(t*t+e*e),n):new ct(0/0,0/0,n)}function gt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function pt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function vt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function dt(n,t,e){return this instanceof dt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof dt?new dt(n.r,n.g,n.b):xt(""+n,dt,at):new dt(n,t,e)}function mt(n){return new dt(n>>16,255&n>>8,255&n)}function yt(n){return mt(n)+""}function Mt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function xt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(St(u[0]),St(u[1]),St(u[2]))}return(i=tc.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function bt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new ot(r,u,c)}function _t(n,t,e){n=wt(n),t=wt(t),e=wt(e);var r=pt((.4124564*n+.3575761*t+.1804375*e)/Ja),u=pt((.2126729*n+.7151522*t+.072175*e)/Ga),i=pt((.0193339*n+.119192*t+.9503041*e)/Ka);return st(116*u-16,500*(r-u),200*(u-i))}function wt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function St(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function kt(n){return"function"==typeof n?n:function(){return n}}function Et(n){return n}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Nt(t,e,n,r)}}function Nt(n,t,e,r){function u(){var n,t=c.status;if(!t&&zt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=ta.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!oa.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=ta.event;ta.event=n;try{o.progress.call(i,c)}finally{ta.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(ra(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},ta.rebind(i,o,"on"),null==r?i:i.get(Ct(r))}function Ct(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function zt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qt(){var n=Lt(),t=Tt()-n;t>24?(isFinite(t)&&(clearTimeout(ic),ic=setTimeout(qt,t)),uc=0):(uc=1,ac(qt))}function Lt(){var n=Date.now();for(oc=ec;oc;)n>=oc.t&&(oc.f=oc.c(n-oc.t)),oc=oc.n;return n}function Tt(){for(var n,t=ec,e=1/0;t;)t.f?t=n?n.n=t.n:ec=t.n:(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:Et;return function(n){var e=lc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=sc.get(g)||Ut;var M=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=ta.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=y?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!l&&f&&(x=i(x,1/0));var S=v.length+x.length+b.length+(M?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return M&&(x=i(k+x,k.length?s-b.length:1/0)),u+=v,n=x+b,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(M?n:k+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ft(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new hc(e-1)),1),e}function i(n,e){return t(n=new hc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{hc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{hc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ht(n);return c.floor=c,c.round=Ht(r),c.ceil=Ht(u),c.offset=Ht(i),c.range=a,n}function Ht(n){return function(t,e){try{hc=jt;var r=new jt;return r._=t,n(r,e)._}finally{hc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++aa;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in pc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,N.c.toString(),t,r)}function c(n,t,r){return e(n,N.x.toString(),t,r)}function l(n,t,r){return e(n,N.X.toString(),t,r)}function s(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{hc=jt;var t=new hc;return t._=n,r(t)}finally{hc=Date}}var r=t(n);return e.parse=function(n){try{hc=jt;var t=r.parse(n);return t&&t._}finally{hc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var M=ta.map(),x=It(v),b=Zt(v),_=It(d),w=Zt(d),S=It(m),k=Zt(m),E=It(y),A=Zt(y);p.forEach(function(n,t){M.set(n.toLowerCase(),t)});var N={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Yt(n.getDate(),t,2)},e:function(n,t){return Yt(n.getDate(),t,2)},H:function(n,t){return Yt(n.getHours(),t,2)},I:function(n,t){return Yt(n.getHours()%12||12,t,2)},j:function(n,t){return Yt(1+fc.dayOfYear(n),t,3)},L:function(n,t){return Yt(n.getMilliseconds(),t,3)},m:function(n,t){return Yt(n.getMonth()+1,t,2)},M:function(n,t){return Yt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Yt(n.getSeconds(),t,2)},U:function(n,t){return Yt(fc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Yt(fc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Yt(n.getFullYear()%100,t,2)},Y:function(n,t){return Yt(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:s,S:re,U:Xt,w:Vt,W:$t,x:c,X:l,y:Wt,Y:Bt,Z:Jt,"%":oe};return t}function Yt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function It(n){return new RegExp("^(?:"+n.map(ta.requote).join("|")+")","i")}function Zt(n){for(var t=new a,e=-1,r=n.length;++e68?1900:2e3)}function Kt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|va(t)/60,u=va(t)%60;return e+Yt(r,"0",2)+Yt(u,"0",2)}function oe(n,t,e){dc.lastIndex=0;var r=dc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);_c.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;wc.point=function(o,a){wc.point=n,r=(t=o)*Fa,u=Math.cos(a=(e=a)*Fa/2+Da/4),i=Math.sin(a)},wc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Me(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function xe(n){return[Math.atan2(n[1],n[0]),nt(n[2])]}function be(n,t){return va(n[0]-t[0])a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new qe(e,n,null,!0),l=new qe(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new qe(r,n,null,!1),l=new qe(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),ze(i),ze(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ze(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Te))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=ta.merge(g);var n=Fe(m,p);g.length?(b||(i.polygonStart(),b=!0),Ce(g,De,n,e,i)):n&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=Re(),x=t(M),b=!1;return y}}function Te(n){return n.length>1}function Re(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:y,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function De(n,t){return((n=n.x)[0]<0?n[1]-ja-Ta:ja-n[1])-((t=t.x)[0]<0?t[1]-ja-Ta:ja-t[1])}function Pe(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Da:-Da,c=va(i-e);va(c-Da)0?ja:-ja),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Da&&(va(e-u)Ta?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function je(n,t,e,r){var u;if(null==n)u=e*ja,r.point(-Da,u),r.point(0,u),r.point(Da,u),r.point(Da,0),r.point(Da,-u),r.point(0,-u),r.point(-Da,-u),r.point(-Da,0),r.point(-Da,u);else if(va(n[0]-t[0])>Ta){var i=n[0]a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Da/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+Da/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=b>=0?1:-1,w=_*b,S=w>Da,k=p*M;if(_c.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),i+=S?b+_*Pa:b,S^h>=e^m>=e){var E=de(pe(f),pe(n));Me(E);var A=de(u,E);Me(A);var N=(S^b>=0?-1:1)*nt(A[2]);(r>N||r===N&&(E[0]||E[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=m,p=M,v=x,f=n}}return(-Ta>i||Ta>i&&0>_c)^1&o}function He(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Da:-Da),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(be(e,g)||be(p,g))&&(p[0]+=Ta,p[1]+=Ta,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&be(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),M=m*m-y*(ve(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=ye(d,(-m-x)/y);if(me(b,p),b=xe(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=va(A-Da)A;if(!N&&k>E&&(_=k,k=E,E=_),C?N?k+E>0^b[1]<(va(b[0]-w)Da^(w<=b[0]&&b[0]<=S)){var z=ye(d,(-m+x)/y);return me(z,p),[b,xe(z)]}}}function u(t,e){var r=o?n:Da-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=va(i)>Ta,c=gr(n,6*Fa);return Le(t,e,c,o?[0,-n]:[-Da,n-Da])}function Oe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Ye(n,t,e,r){function u(r,u){return va(r[0]-n)0?0:3:va(r[0]-e)0?2:1:va(r[1]-t)0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&K(l,i,n)>0&&++t:i[1]<=r&&K(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,b=_=0/0}function g(){v&&(p(y,M),x&&w&&A.rejoin(),v.push(A.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Uc,Math.min(Uc,n)),t=Math.max(-Uc,Math.min(Uc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};N(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,m,y,M,x,b,_,w,S,k,E=a,A=Re(),N=Oe(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=ta.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&Ce(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return C}}function Ie(n){var t=0,e=Da/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Da/180,e=n[1]*Da/180):[180*(t/Da),180*(e/Da)]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,nt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){Fc+=u*n-r*t,r=n,u=t}var t,e,r,u;Zc.point=function(i,o){Zc.point=n,t=r=i,e=u=o},Zc.lineEnd=function(){n(t,e)}}function Xe(n,t){Hc>n&&(Hc=n),n>Yc&&(Yc=n),Oc>t&&(Oc=t),t>Ic&&(Ic=t)}function $e(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function We(n,t){Ec+=n,Ac+=t,++Nc}function Je(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Cc+=o*(t+n)/2,zc+=o*(e+r)/2,qc+=o,We(t=n,e=r)}var t,e;Xc.point=function(r,u){Xc.point=n,We(t=r,e=u)}}function Ge(){Xc.point=We}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Cc+=o*(r+n)/2,zc+=o*(u+t)/2,qc+=o,o=u*n-r*t,Lc+=o*(r+n),Tc+=o*(u+t),Rc+=3*o,We(r=n,u=t)}var t,e,r,u;Xc.point=function(i,o){Xc.point=n,We(t=r=i,e=u=o)},Xc.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Pa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:y};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(M,x,y,b,_,w,M=o[0],x=o[1],y=e,b=i[0],_=i[1],w=i[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=va(va(w)-1)i||va((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Fa),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ha,e*Ha])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*Fa,n[1]*Fa),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ha,n[1]*Ha]}function r(){a=Ae(o=lr(m,y,M),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,M=0,x=Pc,b=Et,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(x(o,f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Pc):He((_=+n)*Fa),u()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=n?Ye(n[0][0],n[0][1],n[1][0],n[1][1]):Et,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Fa,d=n[1]%360*Fa,r()):[v*Ha,d*Ha]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Fa,y=n[1]%360*Fa,M=n.length>2?n[2]%360*Fa:0,r()):[m*Ha,y*Ha,M*Ha]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*Fa,e*Fa)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Da?n-Pa:-Da>n?n+Pa:n,t]}function lr(n,t,e){return n?t||e?Ae(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>Da?t-Pa:-Da>t?t+Pa:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),nt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),nt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Pa)):(u=n+o*Pa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=xe([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,Me(e);var r=Q(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ta)%(2*Math.PI)}function vr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function Mr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(ut(r-t)+u*o*ut(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ha,Math.atan2(o,Math.sqrt(r*r+u*u))*Ha]}:function(){return[n*Ha,t*Ha]};return p.distance=h,p}function xr(){function n(n,u){var i=Math.sin(u*=Fa),o=Math.cos(u),a=va((n*=Fa)-t),c=Math.cos(a);$c+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Bc.point=function(u,i){t=u*Fa,e=Math.sin(i*=Fa),r=Math.cos(i),Bc.point=n},Bc.lineEnd=function(){Bc.point=Bc.lineEnd=y}}function br(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function _r(n,t){function e(n,t){o>0?-ja+Ta>t&&(t=-ja+Ta):t>ja-Ta&&(t=ja-Ta);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Da/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=G(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-ja]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return va(u)u;u++){for(;r>1&&K(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function zr(n,t){return n[0]-t[0]||n[1]-t[1]}function qr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Lr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function Tr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=ol.pop()||new Rr;return t.site=n,t}function Pr(n){Xr(n),rl.remove(n),ol.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&va(e-c.circle.x)s;++s)l=a[s],c=a[s-1],Kr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Jr(c.site,l.site,null,u),Vr(c),Vr(l)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=rl._;a;)if(r=Fr(a,o)-i,r>Ta)a=a.L;else{if(u=i-Hr(a,o),!(u>Ta)){r>-Ta?(t=a.P,e=a):u>-Ta?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(rl.insert(t,c),t||e){if(t===e)return Xr(t),e=Dr(t.site),rl.insert(c,e),c.edge=e.edge=Jr(t.site,c.site),Vr(t),Vr(e),void 0;if(!e)return c.edge=Jr(t.site,c.site),void 0;Xr(t),Xr(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,M=v*v+d*d,x={x:(d*y-g*M)/m+s,y:(h*M-v*y)/m+f};Kr(e.edge,l,p,x),c.edge=Jr(l,n,null,x),e.edge=Jr(n,p,null,x),Vr(t),Vr(e)}}function Fr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Hr(n,t){var e=n.N;if(e)return Fr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Yr(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=el,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(va(r-t)>Ta||va(u-e)>Ta)&&(a.splice(o,0,new Qr(Gr(i.site,s,va(r-f)Ta?{x:f,y:va(t-f)Ta?{x:va(e-p)Ta?{x:h,y:va(t-h)Ta?{x:va(e-g)=-Ra)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=al.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,M=il._;M;)if(m.yd||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.yr||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.yg){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.xi||f>o||r>h||u>g)){if(p=n.point){var p,v=t-p[0],d=e-p[1],m=v*v+d*d;if(c>m){var y=Math.sqrt(c=m);r=t-y,u=e-y,i=t+y,o=e+y,a=p}}for(var M=n.nodes,x=.5*(s+h),b=.5*(f+g),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:l(n,s,f,x,b);break;case 1:l(n,x,f,h,b);break;case 2:l(n,s,b,x,g);break;case 3:l(n,x,b,h,g)}}}(n,r,u,i,o),a}function gu(n,t){n=ta.rgb(n),t=ta.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+Mt(Math.round(e+i*n))+Mt(Math.round(r+o*n))+Mt(Math.round(u+a*n))}}function pu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=mu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function vu(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function du(n,t){var e,r,u,i=ll.lastIndex=sl.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=ll.exec(n))&&(r=sl.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:vu(e,r)})),i=sl.lastIndex;return ir;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function mu(n,t){for(var e,r=ta.interpolators.length;--r>=0&&!(e=ta.interpolators[r](n,t)););return e}function yu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(mu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function Mu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function bu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function wu(n){return n*n*n}function Su(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function ku(n){return function(t){return Math.pow(t,n)}}function Eu(n){return 1-Math.cos(n*ja)}function Au(n){return Math.pow(2,10*(n-1))}function Nu(n){return 1-Math.sqrt(1-n*n)}function Cu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Pa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Pa/t)}}function zu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function qu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lu(n,t){n=ta.hcl(n),t=ta.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return lt(e+i*n,r+o*n,u+a*n)+""}}function Tu(n,t){n=ta.hsl(n),t=ta.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return at(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){n=ta.lab(n),t=ta.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ft(e+i*n,r+o*n,u+a*n)+""}}function Du(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Pu(n){var t=[n.a,n.b],e=[n.c,n.d],r=ju(t),u=Uu(t,e),i=ju(Fu(e,t,-u))||0;t[0]*e[1]180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:vu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:vu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:vu(g[0],p[0])},{i:e-2,x:vu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i=0;)e.push(u[r])}function Qu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++oe;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function si(n){return n.reduce(fi,0)}function fi(n,t){return n+t[1]}function hi(n,t){return gi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function gi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function pi(n){return[ta.min(n),ta.max(n)]}function vi(n,t){return n.value-t.value}function di(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function mi(n,t){n._pack_next=t,t._pack_prev=n}function yi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Mi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(xi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],wi(r,u,i),t(i),di(r,i),r._pack_prev=i,di(i,u),u=r._pack_next,o=3;l>o;o++){wi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(yi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!yi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.ro;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(bi)}}function xi(n){n._pack_next=n._pack_prev=n}function bi(n){delete n._pack_next,delete n._pack_prev}function _i(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Ci(n,t,e){return n.a.parent===t.parent?n.a:e}function zi(n){return 1+ta.max(n,function(n){return n.y})}function qi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Li(n){var t=n.children;return t&&t.length?Li(t[0]):n}function Ti(n){var t,e=n.children;return e&&(t=e.length)?Ti(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Di(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Pi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ui(n){return n.rangeExtent?n.rangeExtent():Pi(n.range())}function ji(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Fi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Hi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:bl}function Oi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Oi:ji,c=r?Yu:Ou;return o=u(n,t,c,e),a=u(t,n,c,mu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Du)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Xi(n,t)},i.tickFormat=function(t,e){return $i(n,t,e)},i.nice=function(t){return Zi(n,t),u()},i.copy=function(){return Yi(n,t,e,r)},u()}function Ii(n,t){return ta.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Zi(n,t){return Fi(n,Hi(Vi(n,t)[2]))}function Vi(n,t){null==t&&(t=10);var e=Pi(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Xi(n,t){return ta.range.apply(ta,Vi(n,t))}function $i(n,t,e){var r=Vi(n,t);if(e){var u=lc.exec(e);if(u.shift(),"s"===u[8]){var i=ta.formatPrefix(Math.max(va(r[0]),va(r[1])));return u[7]||(u[7]="."+Bi(i.scale(r[2]))),u[8]="f",e=ta.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Wi(u[8],r)),e=u.join("")}else e=",."+Bi(r[2])+"f";return ta.format(e)}function Bi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Wi(n,t){var e=Bi(t[2]);return n in _l?Math.abs(e-Bi(Math.max(va(t[0]),va(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Ji(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Fi(r.map(u),e?Math:Sl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Pi(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++0;h--)o.push(i(l)*h);for(l=0;o[l]c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return wl;arguments.length<2?t=wl:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ji(n.copy(),t,e,r)},Ii(o,n)}function Gi(n,t,e){function r(t){return n(u(t))}var u=Ki(t),i=Ki(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Xi(e,n)},r.tickFormat=function(n,t){return $i(e,n,t)},r.nice=function(n){return r.domain(Zi(e,n))},r.exponent=function(o){return arguments.length?(u=Ki(t=o),i=Ki(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Gi(n.copy(),t,e)},Ii(r,n)}function Ki(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Qi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++on?[0/0,0/0]:[n>0?a[n-1]:r[0],nt?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return to(n,t,e)},u()}function eo(n,t){function e(e){return e>=e?t[ta.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return eo(n,t)},e}function ro(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Xi(n,t)},t.tickFormat=function(t,e){return $i(n,t,e)},t.copy=function(){return ro(n)},t}function uo(){return 0}function io(n){return n.innerRadius}function oo(n){return n.outerRadius}function ao(n){return n.startAngle}function co(n){return n.endAngle}function lo(n){return n&&n.padAngle}function so(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function fo(n,t,e,r,u){var i=n[0]-t[0],o=n[1]-t[1],a=(u?r:-r)/Math.sqrt(i*i+o*o),c=a*o,l=-a*i,s=n[0]+c,f=n[1]+l,h=t[0]+c,g=t[1]+l,p=(s+h)/2,v=(f+g)/2,d=h-s,m=g-f,y=d*d+m*m,M=e-r,x=s*g-h*f,b=(0>m?-1:1)*Math.sqrt(M*M*y-x*x),_=(x*m-d*b)/y,w=(-x*d-m*b)/y,S=(x*m+d*b)/y,k=(-x*d+m*b)/y,E=_-p,A=w-v,N=S-p,C=k-v;return E*E+A*A>N*N+C*C&&(_=S,w=k),[[_-c,w-l],[_*e/M,w*e/M]]}function ho(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=kt(e),p=kt(r);++f1&&u.push("H",r[0]),u.join("")}function mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function To(n){return n.length<3?go(n):n[0]+_o(n,Lo(n))}function Ro(n){for(var t,e,r,u=-1,i=n.length;++ur)return s();var u=i[i.active];u&&(--i.count,delete i[i.active],u.event&&u.event.interrupt.call(n,n.__data__,u.index)),i.active=r,o.event&&o.event.start.call(n,n.__data__,t),o.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&v.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return p.c=l(e||1)?Ne:l,1},0,c)}function l(e){if(i.active!==r)return 1;for(var u=e/f,a=h(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,n.__data__,t),s()):void 0}function s(){return--i.count?delete i[r]:delete n[e],1}var f,h,g=o.delay,p=oc,v=[];return p.t=g+c,u>=g?a(u-g):(p.c=a,void 0)},0,c)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Wl,u);return i==Wl.length?[t.year,Vi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Wl[i-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Pi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Ii(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.2"};Date.now||(Date.now=function(){return+new Date});var ea=[].slice,ra=function(n){return ea.call(n)},ua=document,ia=ua.documentElement,oa=window;try{ra(ia.childNodes)[0].nodeType}catch(aa){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{ua.createElement("div").style.setProperty("opacity",0,"")}catch(ca){var la=oa.Element.prototype,sa=la.setAttribute,fa=la.setAttributeNS,ha=oa.CSSStyleDeclaration.prototype,ga=ha.setProperty;la.setAttribute=function(n,t){sa.call(this,n,t+"")},la.setAttributeNS=function(n,t,e){fa.call(this,n,t,e+"")},ha.setProperty=function(n,t,e){ga.call(this,n,t+"",e)}}ta.ascending=n,ta.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ta.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ur&&(e=r)}else{for(;++u=r){e=r;break}for(;++ur&&(e=r)}return e},ta.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ue&&(e=r)}else{for(;++u=r){e=r;break}for(;++ue&&(e=r)}return e},ta.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}else{for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}return[e,u]},ta.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o1?c/(s-1):void 0},ta.deviation=function(){var n=ta.variance.apply(this,arguments);return n?Math.sqrt(n):n};var pa=r(n);ta.bisectLeft=pa.left,ta.bisect=ta.bisectRight=pa.right,ta.bisector=function(t){return r(1===t.length?function(e,r){return n(t(e),r)}:t)},ta.shuffle=function(n,t,e){(i=arguments.length)<3&&(e=n.length,2>i&&(t=0));for(var r,u,i=e-t;i;)u=0|Math.random()*i--,r=n[i+t],n[i+t]=n[u+t],n[u+t]=r;return n},ta.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ta.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},ta.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=ta.min(arguments,u),e=new Array(t);++n=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var va=Math.abs;ta.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,u=[],o=i(va(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)u.push(r/o);else for(;(r=n+e*++a)=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,v=i[c++],d=new a;++g=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++ur){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(T(e,n[e],t));return this}if(2>r)return oa.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(T(n,t,e))},ka.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},ka.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},ka.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},ka.append=function(n){return n=D(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},ka.insert=function(n,t){return n=D(n),t=k(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},ka.remove=function(){return this.each(P)},ka.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new a,y=new Array(o);for(r=-1;++rr;++r)p[r]=U(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++ii;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return S(u)},ka.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ka.sort=function(n){n=F.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ka.size=function(){var n=0;return H(this,function(){++n}),n};var Aa=[];ta.selection.enter=O,ta.selection.enter.prototype=Aa,Aa.append=ka.append,Aa.empty=ka.empty,Aa.node=ka.node,Aa.call=ka.call,Aa.size=ka.size,Aa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(I(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(I(n,t,e))};var Ca=ta.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ca.forEach(function(n){"on"+n in ua&&Ca.remove(n)});var za="onselectstart"in ua?null:m(ia.style,"userSelect"),qa=0;ta.mouse=function(n){return $(n,_())};var La=/WebKit/.test(oa.navigator.userAgent)?-1:0;ta.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=_().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return $(n,r)},ta.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],p|=n|e,M=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&ta.event.target===f),g({type:"dragend"}))}var l,s=this,f=ta.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=ta.select(u()).on(i+d,a).on(o+d,c),y=X(),M=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-M[0],l.y-M[1]]):l=[0,0],g({type:"dragstart"})}}var e=w(n,"drag","dragstart","dragend"),r=null,u=t(y,ta.mouse,J,"mousemove","mouseup"),i=t(B,ta.touch,W,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},ta.rebind(n,e,"on")},ta.touches=function(n,t){return arguments.length<2&&(t=_().touches),t?ra(t).map(function(t){var e=$(n,t);return e.identifier=t.identifier,e}):[]};var Ta=1e-6,Ra=Ta*Ta,Da=Math.PI,Pa=2*Da,Ua=Pa-Ta,ja=Da/2,Fa=Da/180,Ha=180/Da,Oa=Math.SQRT2,Ya=2,Ia=4;ta.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=et(v),o=i/(Ya*h)*(e*rt(Oa*t+v)-tt(v));return[r+o*l,u+o*s,i*e/et(Oa*t+v)]}return[r+n*l,u+n*s,i*Math.exp(Oa*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Ia*f)/(2*i*Ya*h),p=(c*c-i*i-Ia*f)/(2*c*Ya*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Oa;return e.duration=1e3*y,e},ta.behavior.zoom=function(){function n(n){n.on(z,s).on(Xa+".zoom",h).on("dblclick.zoom",g).on(T,f)}function t(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function e(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function r(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=e(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function i(t,e,i,o){t.__chart__={x:k.x,y:k.y,k:k.k},r(Math.pow(2,o)),u(v=e,i),t=ta.select(t),N>0&&(t=t.transition().duration(N)),t.call(n.event)}function o(){x&&x.domain(M.range().map(function(n){return(n-k.x)/k.k}).map(M.invert)),S&&S.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function a(n){C++||n({type:"zoomstart"})}function c(n){o(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function l(n){--C||n({type:"zoomend"}),v=null}function s(){function n(){s=1,u(ta.mouse(r),h),c(o)}function e(){f.on(q,null).on(L,null),g(s&&ta.event.target===i),l(o)}var r=this,i=ta.event.target,o=R.of(r,arguments),s=0,f=ta.select(oa).on(q,n).on(L,e),h=t(ta.mouse(r)),g=X();Fl.call(r),a(o)}function f(){function n(){var n=ta.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=t(n))}),n}function e(){var t=ta.event.target;ta.select(t).on(x,o).on(_,h),w.push(t);for(var e=ta.event.changedTouches,r=0,u=e.length;u>r;++r)d[e[r].identifier]=null;var a=n(),c=Date.now();if(1===a.length){if(500>c-y){var l=a[0];i(p,l,d[l.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),b()}y=c}else if(a.length>1){var l=a[0],s=a[1],f=l[0]-s[0],g=l[1]-s[1];m=f*f+g*g}}function o(){var n,t,e,i,o=ta.touches(p);Fl.call(p);for(var a=0,l=o.length;l>a;++a,i=null)if(e=o[a],i=d[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*g)}y=null,u(n,t),c(v)}function h(){if(ta.event.touches.length){for(var t=ta.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var u in d)return void n()}ta.selectAll(w).on(M,null),S.on(z,s).on(T,f),E(),l(v)}var g,p=this,v=R.of(p,arguments),d={},m=0,M=".zoom-"+ta.event.changedTouches[0].identifier,x="touchmove"+M,_="touchend"+M,w=[],S=ta.select(p),E=X();e(),a(v),S.on(z,null).on(T,e)}function h(){var n=R.of(this,arguments);m?clearTimeout(m):(p=t(v=d||ta.mouse(this)),Fl.call(this),a(n)),m=setTimeout(function(){m=null,l(n)},50),b(),r(Math.pow(2,.002*Za())*k.k),u(v,p),c(n)}function g(){var n=ta.mouse(this),e=Math.log(k.k)/Math.LN2;i(this,n,t(n),ta.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}var p,v,d,m,y,M,x,_,S,k={x:0,y:0,k:1},E=[960,500],A=Va,N=250,C=0,z="mousedown.zoom",q="mousemove.zoom",L="mouseup.zoom",T="touchstart.zoom",R=w(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=R.of(this,arguments),t=k;Ul?ta.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},a(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],u=v?v[0]:e/2,i=v?v[1]:r/2,o=ta.interpolateZoom([(u-k.x)/k.k,(i-k.y)/k.k,e/k.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:u-r[0]*a,y:i-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){l(n)}).each("end.zoom",function(){l(n)}):(this.__chart__=k,a(n),c(n),l(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},o(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:+t},o(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Va:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(d=t&&[+t[0],+t[1]],n):d},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(N=+t,n):N},n.x=function(t){return arguments.length?(x=t,M=t.copy(),k={x:0,y:0,k:1},n):x},n.y=function(t){return arguments.length?(S=t,_=t.copy(),k={x:0,y:0,k:1},n):S},ta.rebind(n,R,"on")};var Za,Va=[0,1/0],Xa="onwheel"in ua?(Za=function(){return-ta.event.deltaY*(ta.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ua?(Za=function(){return ta.event.wheelDelta},"mousewheel"):(Za=function(){return-ta.event.detail},"MozMousePixelScroll");ta.color=it,it.prototype.toString=function(){return this.rgb()+""},ta.hsl=ot;var $a=ot.prototype=new it;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,n*this.l)},$a.rgb=function(){return at(this.h,this.s,this.l)},ta.hcl=ct;var Ba=ct.prototype=new it;Ba.brighter=function(n){return new ct(this.h,this.c,Math.min(100,this.l+Wa*(arguments.length?n:1)))},Ba.darker=function(n){return new ct(this.h,this.c,Math.max(0,this.l-Wa*(arguments.length?n:1)))},Ba.rgb=function(){return lt(this.h,this.c,this.l).rgb()},ta.lab=st;var Wa=18,Ja=.95047,Ga=1,Ka=1.08883,Qa=st.prototype=new it;Qa.brighter=function(n){return new st(Math.min(100,this.l+Wa*(arguments.length?n:1)),this.a,this.b)},Qa.darker=function(n){return new st(Math.max(0,this.l-Wa*(arguments.length?n:1)),this.a,this.b)},Qa.rgb=function(){return ft(this.l,this.a,this.b)},ta.rgb=dt;var nc=dt.prototype=new it;nc.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new dt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new dt(u,u,u)},nc.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new dt(n*this.r,n*this.g,n*this.b)},nc.hsl=function(){return bt(this.r,this.g,this.b)},nc.toString=function(){return"#"+Mt(this.r)+Mt(this.g)+Mt(this.b)};var tc=ta.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});tc.forEach(function(n,t){tc.set(n,mt(t))}),ta.functor=kt,ta.xhr=At(Et),ta.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Nt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new v,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},ta.csv=ta.dsv(",","text/csv"),ta.tsv=ta.dsv(" ","text/tab-separated-values");var ec,rc,uc,ic,oc,ac=oa[m(oa,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ta.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};rc?rc.n=i:ec=i,rc=i,uc||(ic=clearTimeout(ic),uc=1,ac(qt))},ta.timer.flush=function(){Lt(),Tt()},ta.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var cc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);ta.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ta.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),cc[8+e/3]};var lc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,sc=ta.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ta.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),fc=ta.time={},hc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){gc.setUTCDate.apply(this._,arguments)},setDay:function(){gc.setUTCDay.apply(this._,arguments)},setFullYear:function(){gc.setUTCFullYear.apply(this._,arguments)},setHours:function(){gc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){gc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){gc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){gc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){gc.setUTCSeconds.apply(this._,arguments)},setTime:function(){gc.setTime.apply(this._,arguments)}};var gc=Date.prototype;fc.year=Ft(function(n){return n=fc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),fc.years=fc.year.range,fc.years.utc=fc.year.utc.range,fc.day=Ft(function(n){var t=new hc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),fc.days=fc.day.range,fc.days.utc=fc.day.utc.range,fc.dayOfYear=function(n){var t=fc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=fc[n]=Ft(function(n){return(n=fc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});fc[n+"s"]=e.range,fc[n+"s"].utc=e.utc.range,fc[n+"OfYear"]=function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)}}),fc.week=fc.sunday,fc.weeks=fc.sunday.range,fc.weeks.utc=fc.sunday.utc.range,fc.weekOfYear=fc.sundayOfYear;var pc={"-":"",_:" ",0:"0"},vc=/^\s*\d+/,dc=/^%/;ta.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var mc=ta.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ta.format=mc.numberFormat,ta.geo={},ce.prototype={s:0,t:0,add:function(n){le(n,this.t,yc),le(yc.s,this.s,this),this.s?this.t+=yc.t:this.s=yc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var yc=new ce;ta.geo.stream=function(n,t){n&&Mc.hasOwnProperty(n.type)?Mc[n.type](n,t):se(n,t)};var Mc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++rn?4*Da+n:n,wc.lineStart=wc.lineEnd=wc.point=y}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*Fa,e*Fa]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);Me(o),o=xe(o);var c=t-p,l=c>0?1:-1,v=o[0]*Ha*l,d=va(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Ha;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Ha;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=va(r)>180?r+(r>0?360:-360):r}else v=n,d=e;wc.point(n,e),t(n,e)}function i(){wc.lineStart()}function o(){u(v,d),wc.lineEnd(),va(y)>Ta&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n_c?(s=-(h=180),f=-(g=90)):y>Ta?g=90:-Ta>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){Sc=kc=Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,Dc);var t=Lc,e=Tc,r=Rc,u=t*t+e*e+r*r;return Ra>u&&(t=Cc,e=zc,r=qc,Ta>kc&&(t=Ec,e=Ac,r=Nc),u=t*t+e*e+r*r,Ra>u)?[0/0,0/0]:[Math.atan2(e,t)*Ha,nt(r/Math.sqrt(u))*Ha]};var Sc,kc,Ec,Ac,Nc,Cc,zc,qc,Lc,Tc,Rc,Dc={sphere:y,point:_e,lineStart:Se,lineEnd:ke,polygonStart:function(){Dc.lineStart=Ee},polygonEnd:function(){Dc.lineStart=Se}},Pc=Le(Ne,Pe,je,[-Da,-Da/2]),Uc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ye(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ta,f+.12*l+Ta],[s-.214*l-Ta,f+.234*l-Ta]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ta,f+.166*l+Ta],[s-.115*l-Ta,f+.234*l-Ta]]).stream(c).point,n},n.scale(1070)};var jc,Fc,Hc,Oc,Yc,Ic,Zc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Fc=0,Zc.lineStart=Ve},polygonEnd:function(){Zc.lineStart=Zc.lineEnd=Zc.point=y,jc+=va(Fc/2)}},Vc={point:Xe,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},Xc={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){Xc.lineStart=Ke},polygonEnd:function(){Xc.point=We,Xc.lineStart=Je,Xc.lineEnd=Ge}};ta.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),ta.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return jc=0,ta.geo.stream(n,u(Zc)),jc},n.centroid=function(n){return Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,u(Xc)),Rc?[Lc/Rc,Tc/Rc]:qc?[Cc/qc,zc/qc]:Nc?[Ec/Nc,Ac/Nc]:[0/0,0/0]},n.bounds=function(n){return Yc=Ic=-(Hc=Oc=1/0),ta.geo.stream(n,u(Vc)),[[Hc,Oc],[Yc,Ic]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Et,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(ta.geo.albersUsa()).context(null)},ta.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ta.geo.projection=ur,ta.geo.projectionMutator=ir,(ta.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,ta.geo.rotation=function(n){function t(t){return t=n(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t}return n=lr(n[0]%360*Fa,n[1]*Fa,n.length>2?n[2]*Fa:0),t.invert=function(t){return t=n.invert(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t},t},cr.invert=ar,ta.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=lr(-n[0]*Fa,-n[1]*Fa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ha,n[1]*=Ha}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*Fa,u*Fa),n):t},n.precision=function(r){return arguments.length?(e=gr(t*Fa,(u=+r)*Fa),n):u},n.angle(90)},ta.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Fa,u=n[1]*Fa,i=t[1]*Fa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},ta.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ta.range(Math.ceil(i/d)*d,u,d).map(h).concat(ta.range(Math.ceil(l/m)*m,c,m).map(g)).concat(ta.range(Math.ceil(r/p)*p,e,p).filter(function(n){return va(n%d)>Ta}).map(s)).concat(ta.range(Math.ceil(a/v)*v,o,v).filter(function(n){return va(n%m)>Ta}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=vr(a,o,90),f=dr(r,e,y),h=vr(l,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Ta],[180,90-Ta]]).minorExtent([[-180,-80-Ta],[180,80+Ta]])},ta.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return ta.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},ta.geo.interpolate=function(n,t){return Mr(n[0]*Fa,n[1]*Fa,t[0]*Fa,t[1]*Fa)},ta.geo.length=function(n){return $c=0,ta.geo.stream(n,Bc),$c};var $c,Bc={sphere:y,point:y,lineStart:xr,lineEnd:y,polygonStart:y,polygonEnd:y},Wc=br(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ta.geo.azimuthalEqualArea=function(){return ur(Wc)}).raw=Wc;var Jc=br(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},Et);(ta.geo.azimuthalEquidistant=function(){return ur(Jc)}).raw=Jc,(ta.geo.conicConformal=function(){return Ie(_r)}).raw=_r,(ta.geo.conicEquidistant=function(){return Ie(wr)}).raw=wr;var Gc=br(function(n){return 1/n},Math.atan);(ta.geo.gnomonic=function(){return ur(Gc)}).raw=Gc,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-ja]},(ta.geo.mercator=function(){return kr(Sr)}).raw=Sr;var Kc=br(function(){return 1},Math.asin);(ta.geo.orthographic=function(){return ur(Kc)}).raw=Kc;var Qc=br(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ta.geo.stereographic=function(){return ur(Qc)}).raw=Qc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-ja]},(ta.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Er,ta.geom={},ta.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=kt(e),i=kt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(zr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Cr(a),s=Cr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ta)*Ta,y:Math.round(o(n,t)/Ta)*Ta,i:t}})}var r=Ar,u=Nr,i=r,o=u,a=cl;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Ir),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c=l,h=r>=s,g=h<<1|f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=su()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,M=kt(a),x=kt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.xm&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);v>b&&(v=b),d>_&&(d=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=su();if(k.add=function(n){i(k,n,+M(n,++g),+x(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},k.find=function(n){return hu(k,n[0],n[1],v,d,m,y)},g=-1,null==t){for(;++g=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||Et,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:pl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=ta.event.x,n.py=ta.event.y,a.resume()}var e,r,u,i,o,a={},c=ta.dispatch("start","tick","end"),l=[1,1],s=.9,f=vl,h=dl,g=-30,p=ml,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,M,x,b=m.length,_=y.length;for(e=0;_>e;++e)a=y[e],f=a.source,h=a.target,M=h.x-f.x,x=h.y-f.y,(p=M*M+x*x)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,M*=p,x*=p,h.x-=M*(d=f.weight/(h.weight+f.weight)),h.y-=x*d,f.x+=M*(d=1-d),f.y+=x*d);if((d=r*v)&&(M=l[0]/2,x=l[1]/2,e=-1,d))for(;++e0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ta.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++at;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=ta.behavior.drag().origin(Et).on("dragstart.force",Xu).on("drag.force",t).on("dragend.force",$u)),arguments.length?(this.on("mouseover.force",Bu).on("mouseout.force",Wu).call(e),void 0):e},ta.rebind(a,c,"on")};var vl=20,dl=1,ml=1/0;ta.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Qu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ei,e=ni,r=ti;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ku(t,function(n){n.children&&(n.value=0)}),Qu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ta.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++lf?-1:1),p=(f-c*g)/ta.sum(l),v=ta.range(c),d=[];return null!=e&&v.sort(e===yl?function(n,t){return l[t]-l[n]}:function(n,t){return e(o[n],o[t])}),v.forEach(function(n){d[n]={data:o[n],value:a=l[n],startAngle:s,endAngle:s+=a*p+g,padAngle:h}}),d}var t=Number,e=yl,r=0,u=Pa,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var yl={};ta.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=ta.permute(l,f),s=ta.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=Et,e=ai,r=ci,u=oi,i=ui,o=ii;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:Ml.get(t)||ai,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:xl.get(t)||ci,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var Ml=ta.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(li),i=n.map(si),o=ta.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ta.range(n.length).reverse()},"default":ai}),xl=ta.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ci});ta.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i0)for(i=-1;++i=s[0]&&a<=s[1]&&(o=c[ta.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=pi,u=hi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=kt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return gi(n,t)}:kt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ta.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Qu(a,function(n){n.r=+s(n.value)}),Qu(a,Mi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Qu(a,function(n){n.r+=f}),Qu(a,Mi),Qu(a,function(n){n.r-=f})}return _i(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=ta.layout.hierarchy().sort(vi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Gu(n,e)},ta.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Qu(h,e),h.parent.m=-h.z,Ku(h,r),l)Ku(f,i);else{var g=f,p=f,v=f;Ku(f,function(n){n.xp.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Ku(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ni(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=Ei(o),u=ki(u),o&&u;)c=ki(c),i=Ei(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ai(Ci(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!Ei(i)&&(i.t=o,i.m+=f-s),u&&!ki(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=ta.layout.hierarchy().sort(null).value(null),a=Si,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Gu(n,o)},ta.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Qu(c,function(n){var t=n.children;t&&t.length?(n.x=qi(t),n.y=zi(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Li(c),f=Ti(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Qu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=ta.layout.hierarchy().sort(null).value(null),e=Si,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Gu(n,t)},ta.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++ut?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++oe&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++ie.dx)&&(s=e.dx);++ie&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var bl={floor:Et,ceil:Et};ta.scale.linear=function(){return Yi([0,1],[0,1],mu,!1)};var _l={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Ji(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var wl=ta.format(".0e"),Sl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Gi(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return Qi([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(kl)},ta.scale.category20=function(){return ta.scale.ordinal().range(El)},ta.scale.category20b=function(){return ta.scale.ordinal().range(Al)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Nl)};var kl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(yt),El=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(yt),Al=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(yt),Nl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(yt);ta.scale.quantile=function(){return no([],[])},ta.scale.quantize=function(){return to(0,1,[0,1])},ta.scale.threshold=function(){return eo([.5],[0,1])},ta.scale.identity=function(){return ro([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-ja,f=a.apply(this,arguments)-ja,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ua)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===Cl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=nt(d/l*Math.sin(m))),n&&(E=nt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=Da?0:1;if(A&&so(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=Da?0:1;if(E&&so(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Lr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=fo(null==S?[_,w]:[S,k],[y,M],l,H,g),Y=fo([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^so(O[1][0],O[1][1],Y[1][0],Y[1][1]),",",g," ",Y[1],"A",H,",",H," 0 0,",v," ",Y[0]):N.push("M",O[0],"A",H,",",H," 0 1,",v," ",Y[0])}else N.push("M",y,",",M);if(null!=S){var I=Math.min(p,(n-F)/(j-1)),Z=fo([y,M],[S,k],n,-I,g),V=fo([_,w],null==x?[y,M]:[x,b],n,-I,g);p===I?N.push("L",V[0],"A",I,",",I," 0 0,",v," ",V[1],"A",n,",",n," 0 ",g^so(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-g," ",Z[1],"A",I,",",I," 0 0,",v," ",Z[0]):N.push("L",V[0],"A",I,",",I," 0 0,",v," ",Z[0])}else N.push("L",_,",",w)}else N.push("M",y,",",M),null!=x&&N.push("A",l,",",l," 0 ",C,",",g," ",x,",",b),N.push("L",_,",",w),null!=S&&N.push("A",n,",",n," 0 ",q,",",1-g," ",S,",",k);return N.push("Z"),N.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=io,r=oo,u=uo,i=Cl,o=ao,a=co,c=lo;return n.innerRadius=function(t){return arguments.length?(e=kt(t),n):e},n.outerRadius=function(t){return arguments.length?(r=kt(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=kt(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==Cl?Cl:kt(t),n):i},n.startAngle=function(t){return arguments.length?(o=kt(t),n):o},n.endAngle=function(t){return arguments.length?(a=kt(t),n):a},n.padAngle=function(t){return arguments.length?(c=kt(t),n):c},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-ja;return[Math.cos(t)*n,Math.sin(t)*n]},n};var Cl="auto";ta.svg.line=function(){return ho(Et)};var zl=ta.map({linear:go,"linear-closed":po,step:vo,"step-before":mo,"step-after":yo,basis:So,"basis-open":ko,"basis-closed":Eo,bundle:Ao,cardinal:bo,"cardinal-open":Mo,"cardinal-closed":xo,monotone:To});zl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var ql=[0,2/3,1/3,0],Ll=[0,1/3,2/3,0],Tl=[0,1/6,2/3,1/6];ta.svg.line.radial=function(){var n=ho(Ro);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},mo.reverse=yo,yo.reverse=mo,ta.svg.area=function(){return Do(Et)},ta.svg.area.radial=function(){var n=Do(Ro);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ta.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)-ja,s=l.call(n,u,r)-ja;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Da)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Po,c=ao,l=co;return n.radius=function(t){return arguments.length?(a=kt(t),n):a},n.source=function(t){return arguments.length?(i=kt(t),n):i},n.target=function(t){return arguments.length?(o=kt(t),n):o},n.startAngle=function(t){return arguments.length?(c=kt(t),n):c},n.endAngle=function(t){return arguments.length?(l=kt(t),n):l},n},ta.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=Uo;return n.source=function(e){return arguments.length?(t=kt(e),n):t},n.target=function(t){return arguments.length?(e=kt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ta.svg.diagonal.radial=function(){var n=ta.svg.diagonal(),t=Uo,e=n.projection;return n.projection=function(n){return arguments.length?e(jo(t=n)):t},n},ta.svg.symbol=function(){function n(n,r){return(Rl.get(t.call(this,n,r))||Oo)(e.call(this,n,r))}var t=Ho,e=Fo;return n.type=function(e){return arguments.length?(t=kt(e),n):t},n.size=function(t){return arguments.length?(e=kt(t),n):e},n};var Rl=ta.map({circle:Oo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Pl)),e=t*Pl;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ta.svg.symbolTypes=Rl.keys();var Dl=Math.sqrt(3),Pl=Math.tan(30*Fa);ka.transition=function(n){for(var t,e,r=Ul||++Ol,u=Xo(n),i=[],o=jl||{time:Date.now(),ease:Su,delay:0,duration:250},a=-1,c=this.length;++ai;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Io(u,this.namespace,this.id)},Hl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):H(this,null==t?function(t){t[r][e].tween.remove(n)}:function(u){u[r][e].tween.set(n,t)})},Hl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Hu:mu,a=ta.ns.qualify(n);return Zo(this,"attr."+n,t,a.local?i:u)},Hl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=ta.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Hl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=oa.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=mu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Zo(this,"style."+n,t,u)},Hl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,oa.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Hl.text=function(n){return Zo(this,"text",n,Vo)},Hl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Hl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ta.ease.apply(ta,arguments)),H(this,function(r){r[e][t].ease=n}))},Hl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:H(this,"function"==typeof n?function(r,u,i){r[e][t].delay=+n.call(r,r.__data__,u,i)}:(n=+n,function(r){r[e][t].delay=n}))},Hl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:H(this,"function"==typeof n?function(r,u,i){r[e][t].duration=Math.max(1,n.call(r,r.__data__,u,i))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Hl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var u=jl,i=Ul;try{Ul=e,H(this,function(t,u,i){jl=t[r][e],n.call(t,t.__data__,u,i)})}finally{jl=u,Ul=i}}else H(this,function(u){var i=u[r][e];(i.event||(i.event=ta.dispatch("start","end","interrupt"))).on(n,t)});return this},Hl.transition=function(){for(var n,t,e,r,u=this.id,i=++Ol,o=this.namespace,a=[],c=0,l=this.length;l>c;c++){a.push(n=[]);for(var t=this[c],s=0,f=t.length;f>s;s++)(e=t[s])&&(r=e[o][u],$o(e,s,o,i,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Io(a,o,i)},ta.svg.axis=function(){function n(n){n.each(function(){var n,l=ta.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):Et:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ta),d=ta.transition(p.exit()).style("opacity",Ta).remove(),m=ta.transition(p.order()).style("opacity",1),y=Math.max(u,0)+o,M=Ui(f),x=l.selectAll(".domain").data([0]),b=(x.enter().append("path").attr("class","domain"),ta.transition(x));v.append("line"),v.append("text");var _,w,S,k,E=v.select("line"),A=m.select("line"),N=p.select("text").text(g),C=v.select("text"),z=m.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Bo,_="x",S="y",w="x2",k="y2",N.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),b.attr("d","M"+M[0]+","+q*i+"V0H"+M[1]+"V"+q*i)):(n=Wo,_="y",S="x",w="y2",k="x2",N.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),b.attr("d","M"+q*i+","+M[0]+"H0V"+M[1]+"H"+q*i)),E.attr(k,q*u),C.attr(S,q*y),A.attr(w,0).attr(k,q*u),z.attr(_,0).attr(S,q*y),f.rangeBand){var L=f,T=L.rangeBand()/2;s=f=function(n){return L(n)+T}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=ta.scale.linear(),r=Yl,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Il?t+"":Yl,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Yl="bottom",Il={top:1,right:1,bottom:1,left:1};ta.svg.brush=function(){function n(i){i.each(function(){var i=ta.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,Et);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Zl[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=ta.transition(i),h=ta.transition(o);c&&(s=Ui(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=Ui(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==ta.event.keyCode&&(N||(y=null,z[0]-=s[1],z[1]-=f[1],N=2),b())}function p(){32==ta.event.keyCode&&2==N&&(z[0]+=s[1],z[1]+=f[1],N=0,b())}function v(){var n=ta.mouse(x),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),N||(ta.event.altKey?(y||(y=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ta.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),w({type:"brushend"})}var y,M,x=this,_=ta.select(ta.event.target),w=a.of(x,arguments),S=ta.select(x),k=_.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,N=_.classed("extent"),C=X(),z=ta.mouse(x),q=ta.select(oa).on("keydown.brush",u).on("keyup.brush",p);if(ta.event.changedTouches?q.on("touchmove.brush",v).on("touchend.brush",m):q.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),N)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var L=+/w$/.test(k),T=+/^n/.test(k);M=[s[1-L]-z[0],f[1-T]-z[1]],z[0]=s[L],z[1]=f[T]}else ta.event.altKey&&(y=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),ta.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=w(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Vl[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ul?ta.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=yu(s,t.x),r=yu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Vl[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Vl[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},ta.rebind(n,a,"on")};var Zl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Vl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Xl=fc.format=mc.timeFormat,$l=Xl.utc,Bl=$l("%Y-%m-%dT%H:%M:%S.%LZ");Xl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:Bl,Jo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Jo.toString=Bl.toString,fc.second=Ft(function(n){return new hc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),fc.seconds=fc.second.range,fc.seconds.utc=fc.second.utc.range,fc.minute=Ft(function(n){return new hc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),fc.minutes=fc.minute.range,fc.minutes.utc=fc.minute.utc.range,fc.hour=Ft(function(n){var t=n.getTimezoneOffset()/60;return new hc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),fc.hours=fc.hour.range,fc.hours.utc=fc.hour.utc.range,fc.month=Ft(function(n){return n=fc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),fc.months=fc.month.range,fc.months.utc=fc.month.utc.range;var Wl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Jl=[[fc.second,1],[fc.second,5],[fc.second,15],[fc.second,30],[fc.minute,1],[fc.minute,5],[fc.minute,15],[fc.minute,30],[fc.hour,1],[fc.hour,3],[fc.hour,6],[fc.hour,12],[fc.day,1],[fc.day,2],[fc.week,1],[fc.month,1],[fc.month,3],[fc.year,1]],Gl=Xl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ne]]),Kl={range:function(n,t,e){return ta.range(Math.ceil(n/e)*e,+t,e).map(Ko)},floor:Et,ceil:Et};Jl.year=fc.year,fc.scale=function(){return Go(ta.scale.linear(),Jl,Gl)};var Ql=Jl.map(function(n){return[n[0].utc,n[1]]}),ns=$l.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ne]]);Ql.year=fc.year.utc,fc.scale.utc=function(){return Go(ta.scale.linear(),Ql,ns)},ta.text=At(function(n){return n.responseText}),ta.json=function(n,t){return Nt(n,"application/json",Qo,t)},ta.html=function(n,t){return Nt(n,"text/html",na,t)},ta.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(ta):"object"==typeof module&&module.exports&&(module.exports=ta),this.d3=ta}(); \ No newline at end of file diff --git a/public/javascripts/sankey-1/sankey.js b/public/javascripts/sankey-1/sankey.js new file mode 100755 index 0000000..2e1d292 --- /dev/null +++ b/public/javascripts/sankey-1/sankey.js @@ -0,0 +1,397 @@ +d3.sankey = function() { + var sankey = {}, + nodeWidth = 24, + nodePadding = 8, + size = [1, 1], + nodes = [], + links = [], + sinksRight = true; + + sankey.nodeWidth = function(_) { + if (!arguments.length) return nodeWidth; + nodeWidth = +_; + return sankey; + }; + + sankey.nodePadding = function(_) { + if (!arguments.length) return nodePadding; + nodePadding = +_; + return sankey; + }; + + sankey.nodes = function(_) { + if (!arguments.length) return nodes; + nodes = _; + return sankey; + }; + + sankey.links = function(_) { + if (!arguments.length) return links; + links = _; + return sankey; + }; + + sankey.size = function(_) { + if (!arguments.length) return size; + size = _; + return sankey; + }; + + sankey.sinksRight = function (_) { + if (!arguments.length) return sinksRight; + sinksRight = _; + return sankey; + }; + + sankey.layout = function(iterations) { + computeNodeLinks(); + computeNodeValues(); + computeNodeBreadths(); + computeNodeDepths(iterations); + return sankey; + }; + + sankey.relayout = function() { + computeLinkDepths(); + return sankey; + }; + + // SVG path data generator, to be used as "d" attribute on "path" element selection. + sankey.link = function() { + var curvature = .5; + + function link(d) { + var xs = d.source.x + d.source.dx, + xt = d.target.x, + xi = d3.interpolateNumber(xs, xt), + xsc = xi(curvature), + xtc = xi(1 - curvature), + ys = d.source.y + d.sy + d.dy / 2, + yt = d.target.y + d.ty + d.dy / 2; + + if (!d.cycleBreaker) { + return "M" + xs + "," + ys + + "C" + xsc + "," + ys + + " " + xtc + "," + yt + + " " + xt + "," + yt; + } else { + var xdelta = (1.5 * d.dy + 0.05 * Math.abs(xs - xt)); + xsc = xs + xdelta; + xtc = xt - xdelta; + var xm = xi(0.5); + var ym = d3.interpolateNumber(ys, yt)(0.5); + var ydelta = (2 * d.dy + 0.1 * Math.abs(xs - xt) + 0.1 * Math.abs(ys - yt)) * (ym < (size[1] / 2) ? -1 : 1); + return "M" + xs + "," + ys + + "C" + xsc + "," + ys + + " " + xsc + "," + (ys + ydelta) + + " " + xm + "," + (ym + ydelta) + + "S" + xtc + "," + yt + + " " + xt + "," + yt; + + } + } + + link.curvature = function(_) { + if (!arguments.length) return curvature; + curvature = +_; + return link; + }; + + return link; + }; + + // Populate the sourceLinks and targetLinks for each node. + // Also, if the source and target are not objects, assume they are indices. + function computeNodeLinks() { + nodes.forEach(function(node) { + // Links that have this node as source. + node.sourceLinks = []; + // Links that have this node as target. + node.targetLinks = []; + }); + links.forEach(function(link) { + var source = link.source, + target = link.target; + if (typeof source === "number") source = link.source = nodes[link.source]; + if (typeof target === "number") target = link.target = nodes[link.target]; + source.sourceLinks.push(link); + target.targetLinks.push(link); + }); + } + + // Compute the value (size) of each node by summing the associated links. + function computeNodeValues() { + nodes.forEach(function(node) { + node.value = Math.max( + d3.sum(node.sourceLinks, value), + d3.sum(node.targetLinks, value) + ); + }); + } + + // Iteratively assign the breadth (x-position) for each node. + // Nodes are assigned the maximum breadth of incoming neighbors plus one; + // nodes with no incoming links are assigned breadth zero, while + // nodes with no outgoing links are assigned the maximum breadth. + function computeNodeBreadths() { + var remainingNodes = nodes, + nextNodes, + x = 0; + + // Work from left to right. + // Keep updating the breath (x-position) of nodes that are target of recently updated nodes. + while (remainingNodes.length && x < nodes.length) { + nextNodes = []; + remainingNodes.forEach(function(node) { + node.x = x; + node.dx = nodeWidth; + node.sourceLinks.forEach(function(link) { + if (nextNodes.indexOf(link.target) < 0 && !link.cycleBreaker) { + nextNodes.push(link.target); + } + }); + }); + if (nextNodes.length == remainingNodes.length) { + // There must be a cycle here. Let's search for a link that breaks it. + findAndMarkCycleBreaker(nextNodes); + // Start over. + // TODO: make this optional? + return computeNodeBreadths(); + } + else { + remainingNodes = nextNodes; + ++x; + } + } + + // Optionally move pure sinks always to the right. + if (sinksRight) { + moveSinksRight(x); + } + + scaleNodeBreadths((size[0] - nodeWidth) / (x - 1)); + } + + // Find a link that breaks a cycle in the graph (if any). + function findAndMarkCycleBreaker(nodes) { + // Go through all nodes from the given subset and traverse links searching for cycles. + var link; + for (var n=nodes.length - 1; n >= 0; n--) { + link = depthFirstCycleSearch(nodes[n], []); + if (link) { + return link; + } + } + + // Depth-first search to find a link that is part of a cycle. + function depthFirstCycleSearch(cursorNode, path) { + var target, link; + for (var n = cursorNode.sourceLinks.length - 1; n >= 0; n--) { + link = cursorNode.sourceLinks[n]; + if (link.cycleBreaker) { + // Skip already known cycle breakers. + continue; + } + + // Check if target of link makes a cycle in current path. + target = link.target; + for (var l = 0; l < path.length; l++) { + if (path[l].source == target) { + // We found a cycle. Search for weakest link in cycle + var weakest = link; + for (; l < path.length; l++) { + if (path[l].value < weakest.value) { + weakest = path[l]; + } + } + // Mark weakest link as (known) cycle breaker and abort search. + weakest.cycleBreaker = true; + return weakest; + } + } + + // Recurse deeper. + path.push(link); + link = depthFirstCycleSearch(target, path); + path.pop(); + // Stop further search if we found a cycle breaker. + if (link) { + return link; + } + } + } + } + + + function moveSourcesRight() { + nodes.forEach(function(node) { + if (!node.targetLinks.length) { + node.x = d3.min(node.sourceLinks, function(d) { return d.target.x; }) - 1; + } + }); + } + + function moveSinksRight(x) { + nodes.forEach(function(node) { + if (!node.sourceLinks.length) { + node.x = x - 1; + } + }); + } + + function scaleNodeBreadths(kx) { + nodes.forEach(function(node) { + node.x *= kx; + }); + } + + // Compute the depth (y-position) for each node. + function computeNodeDepths(iterations) { + // Group nodes by breath. + var nodesByBreadth = d3.nest() + .key(function(d) { return d.x; }) + .sortKeys(d3.ascending) + .entries(nodes) + .map(function(d) { return d.values; }); + + // + initializeNodeDepth(); + resolveCollisions(); + computeLinkDepths(); + for (var alpha = 1; iterations > 0; --iterations) { + relaxRightToLeft(alpha *= .99); + resolveCollisions(); + computeLinkDepths(); + relaxLeftToRight(alpha); + resolveCollisions(); + computeLinkDepths(); + } + + function initializeNodeDepth() { + // Calculate vertical scaling factor. + var ky = d3.min(nodesByBreadth, function(nodes) { + return (size[1] - (nodes.length - 1) * nodePadding) / d3.sum(nodes, value); + }); + + nodesByBreadth.forEach(function(nodes) { + nodes.forEach(function(node, i) { + node.y = i; + node.dy = node.value * ky; + }); + }); + + links.forEach(function(link) { + link.dy = link.value * ky; + }); + } + + function relaxLeftToRight(alpha) { + nodesByBreadth.forEach(function(nodes, breadth) { + nodes.forEach(function(node) { + if (node.targetLinks.length) { + // Value-weighted average of the y-position of source node centers linked to this node. + var y = d3.sum(node.targetLinks, weightedSource) / d3.sum(node.targetLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedSource(link) { + return (link.source.y + link.sy + link.dy / 2) * link.value; + } + } + + function relaxRightToLeft(alpha) { + nodesByBreadth.slice().reverse().forEach(function(nodes) { + nodes.forEach(function(node) { + if (node.sourceLinks.length) { + // Value-weighted average of the y-positions of target nodes linked to this node. + var y = d3.sum(node.sourceLinks, weightedTarget) / d3.sum(node.sourceLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedTarget(link) { + return (link.target.y + link.ty + link.dy / 2) * link.value; + } + } + + function resolveCollisions() { + nodesByBreadth.forEach(function(nodes) { + var node, + dy, + y0 = 0, + n = nodes.length, + i; + + // Push any overlapping nodes down. + nodes.sort(ascendingDepth); + for (i = 0; i < n; ++i) { + node = nodes[i]; + dy = y0 - node.y; + if (dy > 0) node.y += dy; + y0 = node.y + node.dy + nodePadding; + } + + // If the bottommost node goes outside the bounds, push it back up. + dy = y0 - nodePadding - size[1]; + if (dy > 0) { + y0 = node.y -= dy; + + // Push any overlapping nodes back up. + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.y + node.dy + nodePadding - y0; + if (dy > 0) node.y -= dy; + y0 = node.y; + } + } + }); + } + + function ascendingDepth(a, b) { + return a.y - b.y; + } + } + + // Compute y-offset of the source endpoint (sy) and target endpoints (ty) of links, + // relative to the source/target node's y-position. + function computeLinkDepths() { + nodes.forEach(function(node) { + node.sourceLinks.sort(ascendingTargetDepth); + node.targetLinks.sort(ascendingSourceDepth); + }); + nodes.forEach(function(node) { + var sy = 0, ty = 0; + node.sourceLinks.forEach(function(link) { + link.sy = sy; + sy += link.dy; + }); + node.targetLinks.forEach(function(link) { + link.ty = ty; + ty += link.dy; + }); + }); + + function ascendingSourceDepth(a, b) { + return a.source.y - b.source.y; + } + + function ascendingTargetDepth(a, b) { + return a.target.y - b.target.y; + } + } + + // Y-position of the middle of a node. + function center(node) { + return node.y + node.dy / 2; + } + + // Value property accessor. + function value(x) { + return x.value; + } + + return sankey; +}; \ No newline at end of file diff --git a/public/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js b/public/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js new file mode 100755 index 0000000..d059090 --- /dev/null +++ b/public/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js @@ -0,0 +1,230 @@ +HTMLWidgets.widget({ + + name: "sankeyNetwork", + + type: "output", + + initialize: function(el, width, height) { + + d3.select(el).append("svg") + .style("width", "100%") + .style("height", "100%"); + + return { + sankey: d3.sankey(), + x: null + }; + }, + + resize: function(el, width, height, instance) { + /* handle resizing now through the viewBox + d3.select(el).select("svg") + .attr("width", width) + .attr("height", height + height * 0.05); + + this.renderValue(el, instance.x, instance); + */ + }, + + renderValue: function(el, x, instance) { + + // save the x in our instance (for calling back from resize) + instance.x = x; + + // alias sankey and options + var sankey = instance.sankey; + var options = x.options; + + // convert links and nodes data frames to d3 friendly format + var links = HTMLWidgets.dataframeToD3(x.links); + var nodes = HTMLWidgets.dataframeToD3(x.nodes); + + + // margin handling + // set our default margin to be 20 + // will override with x.options.margin if provided + var margin = {top: 20, right: 20, bottom: 20, left: 20}; + // go through each key of x.options.margin + // use this value if provided from the R side + Object.keys(x.options.margin).map(function(ky){ + if(x.options.margin[ky] !== null) { + margin[ky] = x.options.margin[ky]; + } + // set the margin on the svg with css style + // commenting this out since not correct + // s.style(["margin",ky].join("-"), margin[ky]); + }); + + // get the width and height + var width = el.getBoundingClientRect().width - margin.right - margin.left; + var height = el.getBoundingClientRect().height - margin.top - margin.bottom; + + var color = eval(options.colourScale); + + var color_node = function color_node(d){ + if (d.group){ + return color(d.group.replace(/ .*/, "")); + } else { + return "#cccccc"; + } + } + + var color_link = function color_link(d){ + if (d.group){ + return color(d.group.replace(/ .*/, "")); + } else { + return "#000000"; + } + } + + var opacity_link = function opacity_link(d){ + if (d.group){ + return 0.7; + } else { + return 0.2; + } + } + + + var formatNumber = d3.format(",.0f"), + format = function(d) { return formatNumber(d); } + + // create d3 sankey layout + sankey + .nodes(d3.values(nodes)) + .links(links) + .size([width, height]) + .nodeWidth(options.nodeWidth) + .nodePadding(options.nodePadding) + .layout(32); + + // select the svg element and remove existing children + d3.select(el).select("svg").selectAll("*").remove(); + // append g for our container to transform by margin + var svg = d3.select(el).select("svg").append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")");; + + // draw path + var path = sankey.link(); + + // draw links + var link = svg.selectAll(".link") + .data(sankey.links()) + + link.enter().append("path") + .attr("class", "link") + + link + .attr("d", path) + .style("stroke-width", function(d) { return Math.max(1, d.dy); }) + .style("fill", "none") + .style("stroke", color_link) + .style("stroke-opacity", opacity_link) + .sort(function(a, b) { return b.dy - a.dy; }) + .on("mouseover", function(d) { + d3.select(this) + .style("stroke-opacity", function(d){return opacity_link(d) + 0.3}); + }) + .on("mouseout", function(d) { + d3.select(this) + .style("stroke-opacity", opacity_link); + }); + + // add backwards class to cycles + link.classed('backwards', function (d) { return d.target.x < d.source.x; }); + + svg.selectAll(".link.backwards") + .style("stroke-dasharray","9,1") + .style("stroke","#402") + + // draw nodes + var node = svg.selectAll(".node") + .data(sankey.nodes()) + + node.enter().append("g") + .attr("class", "node") + .attr("transform", function(d) { return "translate(" + + d.x + "," + d.y + ")"; }) + .call(d3.behavior.drag() + .origin(function(d) { return d; }) + .on("dragstart", function() { this.parentNode.appendChild(this); }) + .on("drag", dragmove)); + + // note: u2192 is right-arrow + link.append("title") + .text(function(d) { return d.source.name + " \u2192 " + d.target.name + + "\n" + format(d.value) + " " + options.units; }); + + node.append("rect") + .attr("height", function(d) { return d.dy; }) + .attr("width", sankey.nodeWidth()) + .style("fill", function(d) { + return d.color = color_node(d); }) + .style("stroke", function(d) { return d3.rgb(d.color).darker(2); }) + .style("opacity", 0.9) + .style("cursor", "move") + .append("title") + .text(function(d) { return d.name + "\n" + format(d.value) + + " " + options.units; }); + + node.append("text") + .attr("x", -6) + .attr("y", function(d) { return d.dy / 2; }) + .attr("dy", ".35em") + .attr("text-anchor", "end") + .attr("transform", null) + .text(function(d) { return d.name; }) + .style("font-size", options.fontSize + "px") + .style("font-family", options.fontFamily ? options.fontFamily : "inherit") + .filter(function(d) { return d.x < width / 2; }) + .attr("x", 6 + sankey.nodeWidth()) + .attr("text-anchor", "start"); + + + // adjust viewBox to fit the bounds of our tree + var s = d3.select(svg[0][0].parentNode); + s.attr( + "viewBox", + [ + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().left + }) + ) - s.node().getBoundingClientRect().left - margin.right, + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().top + }) + ) - s.node().getBoundingClientRect().top - margin.top, + d3.max( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().right + }) + ) - + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().left + }) + ) + margin.left + margin.right, + d3.max( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().bottom + }) + ) - + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().top + }) + ) + margin.top + margin.bottom + ].join(",") + ); + + + function dragmove(d) { + d3.select(this).attr("transform", "translate(" + d.x + "," + + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")"); + sankey.relayout(); + link.attr("d", path); + } + }, +}); diff --git a/public/resources/emacs-starter-kit.html b/public/resources/emacs-starter-kit.html new file mode 100644 index 0000000..5a4ca2c --- /dev/null +++ b/public/resources/emacs-starter-kit.html @@ -0,0 +1 @@ +https://jeremykidwell.info/resources/emacs-starter-kit/ \ No newline at end of file diff --git a/public/resources/emacs-starter-kit/index.html b/public/resources/emacs-starter-kit/index.html new file mode 100644 index 0000000..c0e9f59 --- /dev/null +++ b/public/resources/emacs-starter-kit/index.html @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An Emacs Starter Kit for the Social Sciences + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    + +
    +
    +
    +
    +

    An Emacs Starter Kit for the Social Sciences

    + + +

    +To accompany the Choosing Your Workflow Applications paper, here is the Emacs Starter Kit for the Social Sciences. It is a version of Phil Hagelberg's emacs starter kit by way of Eric Schulte's Org-Mode implementation. I've made some further tweaks and added some tools of particular use to social scientists. The starter-kit includes up-to-date versions of Emacs Speaks Statistics, AucTeX, Magit, Markdown mode, Yasnippet, and assorted other useful bits and pieces. It should work immediately on Mac OS X with the current version of Emacs. +

    +

    + + + +

    + +

    + +Solarized (Light) Theme. Some other themes are also included. + +

    +

    +What's the motivation for the starter kit? Emacs is a very powerful editor but it is less useful out-of-the-box than it might be, in part because many convenient settings and modes are not activated by default. The starter kit is a drop-in set of nice default settings. The idea is for you to be able to download GNU Emacs, put the starter kit into ~/.emacs.d/, and get to work. If you already use Emacs and have a .emacs file or ~/.emacs.d directory, the starter kit is designed to replace them, while leaving a place for you to easily append your own customizations. +

    +

    +The starter kit is designed to be used with GNU Emacs. Version 24.4 (released October 2014) or later is required. It will not work with Aquamacs without modification. More detailed commentary and documentation is provided inside the kit's .org files. +

    +

    +Installation Instructions (Mac OS X) +

    + +

    Before you Begin

    +

    If you want to use the tools that the starter-kit works with—LaTeX, R, Git, Pandoc, and all the rest—then you will need to install them on your Mac. The ground floor is Apple's own suite of Developer Tools, which allow you to compile software yourself and include things like Git. The most straightforward way to get these tools is to install Xcode. Xcode is what software developers use to write Mac and iOS applications. As such it comes with a bunch of things we are not so interested in, but it makes it easy to install what we do need. It's available for free via the Mac App Store. Once downloaded, launch Xcode, go to Xcode > Preferences > Downloads and install the Command Line Tools for Xcode. At that point you can quit Xcode and never use it again. Alternatively, go to Apple's Developer Site, login with your Apple ID and download the Command Line Tools for Xcode package by itself, without the Xcode application.

    + +

    If you have used Emacs before and already have a .emacs file or .emacs.d directory, back them up and then delete them. See below for details on how to add customizations to the kit.

    + +

    Getting the Starter Kit

    +

    You have two choices. You can download a .zip file of the kit. This will give you a static snapshot of the most recent version. But if you want to keep up with changes to the kit, you should clone the source code using git rather than simply copying a static version of it. You should be using version control on your plain-text documents anyway, so I recommend this second option.

    + +

    +Prerequisites +

    + +

    +0.1 Get Emacs. The starter kit requires Emacs 24.4 (released October 2014). Download Emacs here. Alternatively, if you are comfortable with Homebrew, compile and install it. +

    +

    +0.2 Install a Modern TeX Distribution and the Skim PDF reader. If you are using OS X, download MacTeX here and install it. The kit is set up to use the Skim PDF reader to display PDF files created from .tex files. You can use other readers, but will need to modify the setup in the starter-kit-latex.org file. +

    +

    +0.3 Install R and Pandoc. These are not strictly required for the installation to work, and you can skip this step if you like. But you will probably be using them anyway, if you're not already. If you're doing statistical work you will probably want to use R or Stata. R is free and you can download it here. Pandoc is a very useful utility that lets you convert easily between many different forms of plain-text markup (such as Markdown, HTML, LaTeX, and others). Get Pandoc here. +

    +

    +0.4 Note your user name or the name of your computer. If you don't know either, open the Terminal application and do +

    +
    +$ whoami
    +
    +

    +for your user name and +

    +
    +$ hostname
    +
    +

    +for the system name. You will need to know your login name to activate the final customization file properly. You can use the system name as well (or instead). +

    +

    +Setup +

    +

    +1. If you downloaded a .zip file of the kit, you must uncompress it, move the resulting folder to the top level of your home director and rename it .emacs.d. Assuming the downloaded zip file is in your ~/Downloads folder, open a Terminal window and do this:

    + +
    +$ cd ~/Downloads
    +$ unzip emacs-starter-kit-master.zip
    +$ mv emacs-starter-kit-master ~/.emacs.d
    +
    + +

    Alternatively, if you are using git (the preferred method), then clone the starter kit from github. Open a Terminal window and do this: +

    +
    +$ git clone git://github.com/kjhealy/emacs-starter-kit ~/.emacs.d
    +
    +

    +2. Inside the file kjhealy.org, change the paths to any BibTeX databases as described at the top of that file. +

    +

    +3. Rename the starter kit’s kjhealy.org file to that of %your-username%.org or %your-systemname%.org, based on the information you noted in 0.4 above. This is where you can add in any of your own further customizations to Emacs. +

    +

    +4. Launch Emacs. +

    +

    +When you first start Emacs after installing the starter-kit, it will try to contact several package repositories, so make sure you have an internet connection. The kit will download packages mainly from the official GNU ELPA repository and the MELPA Repo. Each package will be fetched, compiled by Emacs, and stored in the ~/.emacs.d directory. This process is sometimes prone to hiccups as packages are fetched from the servers, so please be patient with it. If it doesn’t get everything first time around, quit and relaunch Emacs, and it will try again. If the problem persists—especially if you get a message saying “The package ‘auctex’ is not available for installation”—you can manually install packages as follows. Open Emacs, do M-x list-packages and in the resulting buffer search or scroll down the list to, e.g. Auctex, mark it for installation by pressing i and then install it (or them) by hitting x. With the packages in place, restart Emacs and the starter kit will finish setting itself up. Unfortunately, I can’t control these intermittent installation errors. They seem to have something to do with the way Emacs talks to the GNU ELPA package server.

    + +

    +

    +5. (Optional.) Once Emacs is up and running, do M-x starter-kit-compile to byte-compile the starter-kit’s files, for slightly faster loading. +

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

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    +
    + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + diff --git a/public/resources/emacs-starter-kit/index.xml b/public/resources/emacs-starter-kit/index.xml new file mode 100644 index 0000000..a9a40e9 --- /dev/null +++ b/public/resources/emacs-starter-kit/index.xml @@ -0,0 +1,12 @@ + + + + An Emacs Starter Kit for the Social Sciences on jeremykidwell.info + https://jeremykidwell.info/resources/emacs-starter-kit/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + diff --git a/public/resources/github/index.html b/public/resources/github/index.html new file mode 100644 index 0000000..b58ff68 --- /dev/null +++ b/public/resources/github/index.html @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Code and Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    + +
    +
    +
    +
    +

    Code on GitHub

    + +

    These are ordered by most recent commit to the repository.

    + +
      + + + +
    • +

      socviz: + Stars: 1 · Forks: 1 · Size: 9062 · Type: R
      + Support files for a data visualization course and book

      +
    • + + +
    • +

      us_election_2016: + Stars: 1 · Forks: 1 · Size: 12 · Type: R
      +

      +
    • + + +
    • +

      socbibs: + Stars: 19 · Forks: 5 · Size: 4679 · Type: TeX
      + BibTeX files covering Economic Sociology, Sociology of Culture, Social Theory, IT, Blood/Organ donation, OSS

      +
    • + + +
    • +

      plain-text.co: + Stars: 33 · Forks: 3 · Size: 9139 · Type: CSS
      + http://plain-text.co

      +
    • + + +
    • +

      kieranhealy.hugo: + Stars: 37 · Forks: 17 · Size: 29135 · Type: CSS
      + The source code to http://kieranhealy.org

      +
    • + + +
    • +

      latex-custom-kjh: + Stars: 113 · Forks: 69 · Size: 1191 · Type: TeX
      + Some simple configuration files I use for use with LaTeX, the Memoir class and the Listings package.

      +
    • + + +
    • +

      pandoc-templates: + Stars: 293 · Forks: 109 · Size: 115 · Type: CSS
      + Some elementary (xe)tex templates and css files for Pandoc.

      +
    • + + +
    • +

      cbofigure: + Stars: 2 · Forks: 1 · Size: 3 · Type: R
      +

      +
    • + + +
    • +

      workflow-paper: + Stars: 69 · Forks: 23 · Size: 9612 · Type: Makefile
      + The .md source for "The Plain Person's Guide to Plain Text Social Science". To exactly reproduce the PDF you will need current versions of R, TexLive, biber, and the support files at http://www.kieranhealy.org/resources.html.

      +
    • + + +
    • +

      apple: + Stars: 21 · Forks: 14 · Size: 16 · Type: R
      + Trend plots and time-series decompositions of quarterly sales data for various Apple products.

      +
    • + + +
    • +

      emacs-starter-kit: + Stars: 100 · Forks: 57 · Size: 18819 · Type: Emacs Lisp
      + A drop-in starter-kit for Emacs 24, aimed at social scientists researching and writing in plain text using some combination of LaTeX, R, ESS, Git, Markdown, and Org-Mode.

      +
    • + + +
    • +

      sourcesans: + Stars: 2 · Forks: 0 · Size: 3 · Type: R
      +

      +
    • + + +
    • +

      myriad: + Stars: 3 · Forks: 1 · Size: 4 · Type: R
      +

      +
    • + + +
    • +

      asdfree: + Stars: 0 · Forks: 1 · Size: 32492 · Type: R
      + analyze survey data for free with the r language and monetdblite

      +
    • + + +
    • +

      pres_budget: + Stars: 1 · Forks: 1 · Size: 2 · Type: R
      +

      +
    • + + +
    • +

      fac-jitplot: + Stars: 1 · Forks: 1 · Size: 106 · Type: R
      + Factor/Jitter plot example.

      +
    • + + +
    • +

      tufte: + Stars: 0 · Forks: 0 · Size: 848 · Type: R
      + Tufte Styles for R Markdown Documents

      +
    • + + +
    • +

      kjh-vita: + Stars: 105 · Forks: 135 · Size: 169 · Type: TeX
      + A simple LaTeX template that I use for my Vita.

      +
    • + + +
    • +

      us-county: + Stars: 5 · Forks: 11 · Size: 24845 · Type: HTML
      + US County Maps in R

      +
    • + + +
    • +

      fips-codes: + Stars: 1 · Forks: 1 · Size: 78 · Type:
      +

      +
    • + + +
    • +

      County_Level_Election_Results_12-16: + Stars: 0 · Forks: 1 · Size: 2334 · Type: Jupyter Notebook
      + US president county-level election results for 2012 and 2016

      +
    • + + +
    • +

      bookdown: + Stars: 1 · Forks: 0 · Size: 12865 · Type: JavaScript
      + Authoring Books with R Markdown

      +
    • + + +
    • +

      tint: + Stars: 1 · Forks: 0 · Size: 2073 · Type: R
      + Tint is not Tufte

      +
    • + + +
    • +

      tilegrams: + Stars: 0 · Forks: 0 · Size: 1651 · Type: JavaScript
      + Make hexagonally tiled cartograms

      +
    • + + +
    • +

      us-state-opiates: + Stars: 3 · Forks: 1 · Size: 15 · Type: R
      + State-level plots of opiod death rates, 1999-2014

      +
    • + + +
    • +

      bookdown-demo: + Stars: 0 · Forks: 0 · Size: 276 · Type: CSS
      + A minimal book example using bookdown

      +
    • + + +
    • +

      vaccines-ca: + Stars: 1 · Forks: 0 · Size: 1504 · Type: R
      + Vaccination Excemptions in California Kindergartens.

      +
    • + + +
    • +

      2016-03-wapo-uber: + Stars: 1 · Forks: 0 · Size: 2909 · Type: Jupyter Notebook
      +

      +
    • + + +
    • +

      vissoc.co: + Stars: 18 · Forks: 9 · Size: 23853 · Type: R
      + Code for DataViz course website

      +
    • + + +
    • +

      rmd-starter: + Stars: 4 · Forks: 3 · Size: 3 · Type: Makefile
      +

      +
    • + +
    + + +
    +
    +
    +
    + +
    + +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + diff --git a/public/resources/github/index.xml b/public/resources/github/index.xml new file mode 100644 index 0000000..cdf906d --- /dev/null +++ b/public/resources/github/index.xml @@ -0,0 +1,12 @@ + + + + Code and Data on jeremykidwell.info + https://jeremykidwell.info/resources/github/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + diff --git a/public/resources/index.html b/public/resources/index.html new file mode 100644 index 0000000..d1148a5 --- /dev/null +++ b/public/resources/index.html @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Resources + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    + +
    +
    +
    +
    + + +

    Code and Data

    + +

    This page has links to configuration files, templates, and a few other things that might be of use to people who want to write well-formatted social science papers in plain text, with data, figures, and +references.

    + +
    The Sausage Factory
    + +
    +
    +

    The Plain Person's Guide to Plain Text Social Science

    +

    As a beginning graduate student in the social sciences, what sort of software should you use to do your work? More importantly, what principles should guide your choices? This article offers some answers. The short +version is: you should use tools that give you more control over the process of data analysis and writing. I recommend you write prose and code using a good text editor; analyze quantitative data with R or Stata; minimize +error by storing your work in a simple format (plain text is best), and make a habit of documenting what you've done. For data analysis, consider using a format like Rmarkdown and tools like Knitr to make your work more +easily reproducible for your future self. Use Pandoc to turn your plain-text documents into PDF, HTML, or Word files to share with others. Keep your projects in a version control system. Back everything up regularly. Make +your computer work for you by automating as many of these steps as you can. To help you get started, I briefly discuss a drop-in set of useful defaults to get started with Emacs (a powerful, free text-editor). I share +some templates and style files that can get you quickly from plain text to various output formats. And I point to several alternatives, because no humane person should recommend Emacs without presenting some other options +as well. There is a sample github repository that contains the .md source file the PDF is created from. This material is also available as a website at http://plain-text.co.

    + + +

    An Emacs Starter Kit for the Social Sciences

    +

    This is a fork of Eric Schulte's Emacs Starter Kit (itself an offshoot of Phil Hagelberg's +original) with additional tools included for social scientists, mostly related to writing books or papers in LaTeX and analyzing quantitative data using ESS and R. The goal is to provide a drop-in configuration for Emacs that makes it easier to use right from the get-go. If you know about Git, you can clone the repository.

    + +

    Data Visualization Course Notes

    +

    Notes, links, and code from a Data Visualization short-course I taught in the Fall of 2015. The course is focused on the practical presentation of real data, mostly using R's `ggplot2` library. We also read some +material on principles of data visualization, in order to help develop a good working sense of why some graphs and figures work well while others either fail to inform or actively mislead. +

    + +
    + +
    +

    LaTeX Templates and Styles

    +

    A collection of LaTeX style files, templates, and org-mode documents providing some nice layouts for typesetting articles using pdfLaTeX or XeLaTeX. They make a pipeline that lets you begin with an +.org file in Emacs (as set up in the Starter Kit), and go from there to a nice, fully-processed PDF in one step. Or the pieces can be used separately +to set up a .tex file with a nice Article layout.

    + +

    Pandoc Templates

    +

    Some Pandoc templates meant to go in ~/.pandoc/templates. Point to them directly with the --template or --css switches as appropriate, and use them with what's provided in latex-custom-kjh. Includes a shell script for setting pandoc up to work with the Marked app, a handy HTML live +previewer for .md files. +

    + + +

    So You Like My Vita

    +

    Every few months I get an email asking to see the LaTeX markup that I use to generate my Curriculum Vitae. So, here it is. Feel free to adapt it yourself. If you make stylistic modifications, I encourage you to fork the project on GitHub and make them available to others in the same way.

    + +

    So You Like My Website

    +

    This site is produced using Hugo, a very fast static site generator, which you can read more about here. I've written about my own experience setting it up, too. The design is borrowed mostly from Greg Restall. If you want to look +under the bonnet, the entire site is on GitHub. Feel free to adapt it yourself. If you make stylistic modifications, I encourage you +to fork the project on GitHub and make them available to others in the same way. You should also change the Google Analytics information in the footer partial, or I will receive analytics information about your site.

    + + +

    All GitHub Projects

    +

    Here is a full list of the various public code and data repositories that I have put on GitHub. They range from the configuration and templating tools listed above to data +visualization exercises and other bits of data analysis, mostly written in R. +

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

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + diff --git a/public/resources/index.xml b/public/resources/index.xml new file mode 100644 index 0000000..4c146b1 --- /dev/null +++ b/public/resources/index.xml @@ -0,0 +1,12 @@ + + + + Resources on jeremykidwell.info + https://jeremykidwell.info/resources/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 01 Jan 0001 00:00:00 UTC + + + diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..7367c33 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,71 @@ + + + + + https://jeremykidwell.info/teaching/religion_public_sphere/ + 2017-09-25T00:00:00+11:00 + + + + https://jeremykidwell.info/teaching/theological_ethics/ + 2017-09-25T00:00:00+11:00 + + + + https://jeremykidwell.info/403/ + + + + https://jeremykidwell.info/403/ + 0 + + + + https://jeremykidwell.info/404/ + + + + https://jeremykidwell.info/404/ + 0 + + + + https://jeremykidwell.info/resources/emacs-starter-kit/ + + + + https://jeremykidwell.info/archive/ + 0 + + + + https://jeremykidwell.info/blog/archives.html + + + + https://jeremykidwell.info/categories/ + 0 + + + + https://jeremykidwell.info/resources/github/ + + + + https://jeremykidwell.info/resources/ + + + + https://jeremykidwell.info/teaching/ + 2017-09-25T00:00:00+11:00 + 0 + + + + https://jeremykidwell.info/ + 2017-09-25T00:00:00+11:00 + 0 + + + \ No newline at end of file diff --git a/public/teaching/index.html b/public/teaching/index.html new file mode 100644 index 0000000..634ef85 --- /dev/null +++ b/public/teaching/index.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Teachings + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    + +
    + +

    Classes and Seminars

    +
    +
    + +
    +
    +

    2017

    +
    +
    + +
    +
    + +
    +
    +

    Some of the classes I have offered in recent years, including pointers to upcoming courses and other resources, when they are available. Classes are listed once but are typically taught more frequently than that.

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

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + +
    +
    Powered by Hugo and Kube. © Jeremy Kidwell 2017–2017. +
    +
    + + diff --git a/public/teaching/index.xml b/public/teaching/index.xml new file mode 100644 index 0000000..5acd15d --- /dev/null +++ b/public/teaching/index.xml @@ -0,0 +1,39 @@ + + + + Teachings on jeremykidwell.info + https://jeremykidwell.info/teaching/ + en-us + Jeremy Kidwell + Copyright (c) Jeremy Kidwell. + Mon, 25 Sep 2017 00:00:00 +1100 + + + Religion in the Public Sphere + https://jeremykidwell.info/teaching/religion_public_sphere/ + Mon, 25 Sep 2017 00:00:00 +1100 + Jeremy Kidwell + https://jeremykidwell.info/teaching/religion_public_sphere/ + <p>This second year undergraduate course&hellip;</p> + +<p></p> + +<h4 id="syllabus-pdf-http-www-kieranhealy-org-files-teaching-gradtheory-pdf"><a href="http://www.kieranhealy.org/files/teaching/gradtheory.pdf">Syllabus (PDF)</a></h4> + + + + Theological Ethics + https://jeremykidwell.info/teaching/theological_ethics/ + Mon, 25 Sep 2017 00:00:00 +1100 + Jeremy Kidwell + https://jeremykidwell.info/teaching/theological_ethics/ + + +<p>Description</p> + +<h4 id="syllabus-pdf-http-kieranhealy-org-files-teaching-taboo-markets-pdf"><a href="http://kieranhealy.org/files/teaching/taboo-markets.pdf">Syllabus (PDF)</a></h4> + + + + + diff --git a/public/teaching/religion_public_sphere/index.html b/public/teaching/religion_public_sphere/index.html new file mode 100644 index 0000000..1ca62b7 --- /dev/null +++ b/public/teaching/religion_public_sphere/index.html @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Religion in the Public Sphere + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    +
    +

    Religion in the Public Sphere

    +

    This second year undergraduate course…

    + +

    + +

    Syllabus (PDF)

    +
    +
    +
    +
    +
    + +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + diff --git a/public/teaching/theological_ethics/index.html b/public/teaching/theological_ethics/index.html new file mode 100644 index 0000000..944bdef --- /dev/null +++ b/public/teaching/theological_ethics/index.html @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Theological Ethics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +

    about

    +
    + +
    +

    I am Lecturer in Theological Ethics at the University of Birmingham.

    +
    +
    +

    Where

    + +
    +
    +

    subscribe

    +

    To receive updates from this site, you can + subscribe to the  RSS feed of all updates to the site in an RSS feed reader

    +

    search

    + +
    + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + diff --git a/static/.htaccess b/static/.htaccess new file mode 100755 index 0000000..3478fe8 --- /dev/null +++ b/static/.htaccess @@ -0,0 +1,1059 @@ +#Options -Indexes + + +AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript + + +RewriteEngine on + +RewriteEngine On +RewriteCond %{HTTPS} !=on +RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] + +Redirect 301 /gender https://www.kieranhealy.org/blog/archives/category/gender +Redirect 301 /blog/bingo-in-utopia https://kieranhealy.org/blog/archives/2012/08/13/bingo-in-utopia +ErrorDocument 404 https://www.kieranhealy.org/404/ +ErrorDocument 403 https://www.kieranhealy.org/403/ + +# Redirect kieranhealy.org/+ to google+ +# Redirect 301 /+ https://plus.google.com/113787556843462277865 + +AddIcon https://www.kieranhealy.org/img/icon-up.png .. +AddIcon https://www.kieranhealy.org/img/icon-folder.png ^^DIRECTORY^^ +#AddIcon https://www.kieranhealy.org/img/blank.gif ^^BLANKICON^^ +#AddIcon https://www.kieranhealy.org/img/icon-text.png *txt *html *text *htm *HTM *TXT *TEXT sources.list .dsc .pl .c .h +AddIcon /images/icon-tarball.png *zip *ZIP *gz *GZ *bz2 *BZ2 +AddIcon https://www.kieranhealy.org/img/text.png *.pdf *.ps +AddIcon https://www.kieranhealy.org/img/icon-tarball.png *.tar *.gz +#AddIcon https://www.kieranhealy.org/img/icon-deb.png *deb +#AddIcon https://www.kieranhealy.org/img/icon-mp3.png *mp3 *MP3 +#AddIconByType https://www.kieranhealy.org/img/icon-mp3.png audio/* +#AddIcon https://www.kieranhealy.org/img/icon-video.png *mpeg *mpg *MPG *MPEG +AddIconByType https://www.kieranhealy.org/img/icon-image.png image/* +DefaultIcon https://www.kieranhealy.org/img/icon-text.png + +AddDescription "ZIP file" *.zip +AddDescription "GZIP archive" *.gz *.tgz +AddDescription "Gimp brush file" *.gbr +AddDescription "Adobe PDF document" *.pdf +AddDescription "Postscript file" *.ps +AddDescription "Device Independent file" *.dvi +AddDescription "LaTeX source file" *.tex +AddDescription "LaTeX style file" *.sty +AddDescription "LaTeX package" *.idx +AddDescription "BibTeX style file" *.bst +AddDescription "BibTeX Bibliography" *.bib +AddDescription "My dot-emacs file" *.emacs +AddDescription "Image" *.jpg *.JPG *.JPEG *.gif *.GIF *.png *.PNG + +HeaderName HEADER.html +ReadmeName README.html + +#FancyIndexing on +#IndexIgnore * + + +order allow,deny +deny from all + + + +order allow,deny +deny from 110.89.60.232 +allow from all + + +SetEnvIf User-Agent EmailCollector BAD_BOT +SetEnvIf User-Agent CherryPicker BAD_BOT +SetEnvIf User-Agent BecomeBot BAD_BOT +SetEnvIf User-Agent almaden BAD_BOT +SetEnvIf User-Agent RSSScheduler BAD_BOT +SetEnvIf User-Agent grub-client BAD_BOT +SetEnvIf User-Agent "Fast Crawler" BAD_BOT +SetEnvIf User-Agent "Fetch API Request" BAD_BOT +SetEnvIf User-Agent ia_archiver BAD_BOT +SetEnvIf User-Agent Schmozilla BAD_BOT +SetEnvIf User-Agent WISEnutbot BAD_BOT +SetEnvIf User-Agent "Schmozilla/v9.14 Platinum" BAD_BOT +SetEnvIf User-Agent "Schmozilla/v9.14 Platinum" BAD_BOT +SetEnvIf User-Agent "ysearch/slurp" BAD_BOT +SetEnvIf User-Agent "BDFetch" BAD_BOT +#SetEnvIf User-Agent "Maxthon" BAD_BOT +SetEnvIf User-Agent "www.abot.com" BAD_BOT +SetEnvIf User-Agent "www.aipbot.com" BAD_BOT +SetEnvIf User-Agent Missigua BAD_BOT +SetEnvIf User-Agent "herbert.groot.jebbink.nl" BAD_BOT +SetEnvIf User-Agent "poker-" BAD_BOT +SetEnvIf User-Agent "-poker" BAD_BOT +SetEnvIf User-Agent "Kitenga" BAD_BOT +SetEnvIf User-Agent "telnet0.1" BAD_BOT +SetEnvIf User-Agent "heritrix" BAD_BOT +SetEnvIf User-Agent "Teoma" BAD_BOT +SetEnvIf User-Agent "fast-search-engine" BAD_BOT +SetEnvIf User-Agent "JetBrains" BAD_BOT +SetEnvIf User-Agent "NewzCrawler" BAD_BOT +SetEnvIf User-Agent "Wells Search II" BAD_BOT +SetEnvIf User-Agent "yahoo.com/help/us/ysearch/slurp" BAD_BOT +SetEnvIf User-Agent "MSRBOT/0.1" BAD_BOT +SetEnvIf User-Agent "EverbeeCrawler" BAD_BOT +# SetEnvIf User-Agent "BitTorrent/4.0.0" BAD_BOT + + + +# Code Red and Nimda +SetEnvIf Request_URI ^/default\.ida BAD_BOT=worm +SetEnvIf Request_URI root\.exe BAD_BOT=worm + +# Trackback spammers +SetEnvIf Request_URI mt-tb.cgi BAD_BOT +SetEnvIf Request_URI mt-comments.cgi BAD_BOT + +# Referrer spam +SetEnvIfNoCase Referer ^http://(www\.)?xopy\.com BAD_BOT=spammer +SetEnvIfNoCase Referer ^http://(www\.)?aizzo\.com BAD_BOT=spammer +SetEnvIfNoCase Referer ^http://(www\.)?varied-poker\.com BAD_BOT +SetEnvIfNoCase Referer ^http://(www\.)?antiquejunkyard\.com BAD_BOT +SetEnvIfNoCase Referer ^http://(www\.)?bitlocker\.net BAD_BOT +SetEnvIfNoCase Referer ^http://(www\.)?freedownloadbooks\.net BAD_BOT + +# Bad bot, bugger off +Order Deny,Allow +Deny from env=BAD_BOT + +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)nutzu(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)adult(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)anal(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)mature(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)nude(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)porn(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)pus*y(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)sex(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)teen(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)holdem(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)tits(-|.).*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*accepted.cc$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*episodesusdbz/.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?advancedmoneyloans.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?affiliplanet.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?apart-?design.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?auktion.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?autogewinne24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?autospiele24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?babay.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?euromillionen.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?eurowins.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?gsm-support.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?gzltax.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?qw8.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?geldspiele24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?goovle.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?heil-fasten.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?immobiliengewinne24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?incest-.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?keywordmaster.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?one2onemag.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?reisegewinne24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?rootfood.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?shemale.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?single66.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?slamhost.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?spielepsychatrie.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?superface.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?topgewinn24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?topspiele24.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?transexual.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?usa-wins.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?vendini.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?webmasterplan.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?wseeker.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?xmaster.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?referrer-script.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://www14\.blogspot.*$ [OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?yahh+oo.*$[OR] +RewriteCond %{HTTP_REFERER} ^http://(www\.)?tigerdroppings.*$ +RewriteRule .* - [F,L] + +#Redirect Permanent /index.rdf http://crookedtimber.org/feed/rss/ +#Redirect Permanent /index.xml http://crookedtimber.org/feed/ +#Redirect Permanent /comments.xml http://crookedtimber.org/comments/feed/ + +# These rules follow up on Octopress/Hugo and deal with orphaned WP category pages +RewriteRule ^blog/archives/category/(.+)/$ /categories/$1 [L,R=301] +RewriteRule ^blog/archives/category/(.+)/atom.xml$ /categories/$1/index.xml [L,R=301] +#RewriteRule ^blog/categories/([^/]+)/page/.*$ /blog/categories/$1 [L,R=301] +#RewriteRule ^blog/archives/([^/]+)/$ /blog/archives/ [L,R=301] +#RewriteRule ^blog/archives/([^/]+)/([^/]+)/$ /blog/archives/ [L,R=301] +#RewriteRule ^blog/archives/([^/]+)/page/([^/]+)/$ /blog/archives/ [L,R=301] +#RewriteRule ^blog/feed$ /atom.xml [L,R=301] +#RewriteRule ^blog/feed/$ /atom.xml [L,R=301] +#RewriteRule ^blog/rss$ /atom.xml [L,R=301] +RewriteRule ^blog/feed/atom/ /blog/index.xml [L,R=301] +RewriteRule ^blog/categories/([^/]+)/atom.xml*$ /categories/$1/index.xml [L,R=301] +Redirect Permanent /atom.xml http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog.xml http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog/feed/ http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog/feed http://kieranhealy.org/blog/index.xml +Redirect Permanent /feed http://kieranhealy.org/blog/index.xml +Redirect Permanent /feed/ http://kieranhealy.org/blog/index.xml +Redirect Permanent /blog/index.rdf http://kieranhealy.org/blog/index.xml + +# Moved items to their own directories +RewriteRule ^publications.html /publications [L,R=301] +RewriteRule ^teaching.html /teaching [L,R=301] +RewriteRule ^resources.html /resources [L,R=301] +RewriteRule ^emacs-starter-kit.html /resources/emacs-starter-kit.html [L,R=301] + + +Redirect Permanent /blog/archives/category http://kieranhealy.org/categories +Redirect Permanent /blog/categories http://kieranhealy.org/categories + +# Redirect Permanent blog/archives/2011/12/04/sweave-dot-sty-and-the-minionpro-package/ http://kieranhealy.org/blog/archives/2011/12/04/sweave-sty-and-the-minionpro-package/ + +Redirect Permanent /blog/archives/001211.html https://www.kieranhealy.org/blog/archives/2005/10/10/economics-nobel-for-schelling-and-aumann +Redirect Permanent /blog/archives/001210.html https://www.kieranhealy.org/blog/archives/2005/10/08/drive-stanley-drive +Redirect Permanent /blog/archives/001209.html https://www.kieranhealy.org/blog/archives/2005/10/06/miers +Redirect Permanent /blog/archives/001207.html https://www.kieranhealy.org/blog/archives/2005/09/30/left-vs-right-vs-cactus +Redirect Permanent /blog/archives/001206.html https://www.kieranhealy.org/blog/archives/2005/09/28/left-vs-right-pt-cclxi +Redirect Permanent /blog/archives/001205.html https://www.kieranhealy.org/blog/archives/2005/09/27/making-a-success-of-grad-school +Redirect Permanent /blog/archives/001202.html https://www.kieranhealy.org/blog/archives/2005/09/22/some-data-on-families-in-the-workforce +Redirect Permanent /blog/archives/001201.html https://www.kieranhealy.org/blog/archives/2005/09/21/selecting-future-moms +Redirect Permanent /blog/archives/001200.html https://www.kieranhealy.org/blog/archives/2005/09/20/mommy-tracking-the-ivy-leaguers +Redirect Permanent /blog/archives/001199.html https://www.kieranhealy.org/blog/archives/2005/09/19/moondoggle-returns +Redirect Permanent /blog/archives/001198.html https://www.kieranhealy.org/blog/archives/2005/09/19/ts +Redirect Permanent /blog/archives/001193.html https://www.kieranhealy.org/blog/archives/2005/09/16/tax-and-spend-or-just-spend +Redirect Permanent /blog/archives/001192.html https://www.kieranhealy.org/blog/archives/2005/09/14/academic-nutjobs +Redirect Permanent /blog/archives/001190.html https://www.kieranhealy.org/blog/archives/2005/09/13/maybe-they-can-put-my-name-on-the-cover-of-suicide +Redirect Permanent /blog/archives/001189.html https://www.kieranhealy.org/blog/archives/2005/09/12/ct-is-down +Redirect Permanent /blog/archives/001188.html https://www.kieranhealy.org/blog/archives/2005/09/12/god-loves-flags +Redirect Permanent /blog/archives/001187.html https://www.kieranhealy.org/blog/archives/2005/09/07/crossing-the-great-divide +Redirect Permanent /blog/archives/001186.html https://www.kieranhealy.org/blog/archives/2005/09/05/love-story +Redirect Permanent /blog/archives/001185.html https://www.kieranhealy.org/blog/archives/2005/09/04/elsewhere +Redirect Permanent /blog/archives/001183.html https://www.kieranhealy.org/blog/archives/2005/09/03/this-is-all-the-perspective-you-need +Redirect Permanent /blog/archives/001184.html https://www.kieranhealy.org/blog/archives/2005/09/03/dhs-selling-bullshit-cnn-not-buying +Redirect Permanent /blog/archives/001182.html https://www.kieranhealy.org/blog/archives/2005/09/02/the-drowned-and-the-saved +Redirect Permanent /blog/archives/001181.html https://www.kieranhealy.org/blog/archives/2005/09/01/social-disasters-ii +Redirect Permanent /blog/archives/001180.html https://www.kieranhealy.org/blog/archives/2005/09/01/social-disasters +Redirect Permanent /blog/archives/001179.html https://www.kieranhealy.org/blog/archives/2005/08/31/teaching-adam-smith +Redirect Permanent /blog/archives/001171.html https://www.kieranhealy.org/blog/archives/2005/08/22/why-does-chuck-hagel-hate-america +Redirect Permanent /blog/archives/001170.html https://www.kieranhealy.org/blog/archives/2005/08/19/flaming-the-left +Redirect Permanent /blog/archives/001169.html https://www.kieranhealy.org/blog/archives/2005/08/19/kinds-of-quagmires-ii +Redirect Permanent /blog/archives/001167.html https://www.kieranhealy.org/blog/archives/2005/08/10/the-future-lasts-a-long-time +Redirect Permanent /blog/archives/001164.html https://www.kieranhealy.org/blog/archives/2005/07/28/ira-says-its-armed-campaign-is-over +Redirect Permanent /blog/archives/001161.html https://www.kieranhealy.org/blog/archives/2005/07/28/cos-its-too-darn-hot +Redirect Permanent /blog/archives/001153.html https://www.kieranhealy.org/blog/archives/2005/07/23/ideology-and-integrity +Redirect Permanent /blog/archives/001151.html https://www.kieranhealy.org/blog/archives/2005/07/20/the-moor-by-a-length +Redirect Permanent /blog/archives/001150.html https://www.kieranhealy.org/blog/archives/2005/07/17/cold-comfort-farm +Redirect Permanent /blog/archives/001149.html https://www.kieranhealy.org/blog/archives/2005/07/16/harry-potter +Redirect Permanent /blog/archives/001148.html https://www.kieranhealy.org/blog/archives/2005/07/14/one-week-on +Redirect Permanent /blog/archives/001147.html https://www.kieranhealy.org/blog/archives/2005/07/04/work-family-balance-in-theory-and-practice +Redirect Permanent /blog/archives/001139.html https://www.kieranhealy.org/blog/archives/2005/06/29/cryptonomicon +Redirect Permanent /blog/archives/001138.html https://www.kieranhealy.org/blog/archives/2005/06/26/scientology +Redirect Permanent /blog/archives/001137.html https://www.kieranhealy.org/blog/archives/2005/06/24/early-draft-of-the-kelo-opinion-surfaces +Redirect Permanent /blog/archives/001127.html https://www.kieranhealy.org/blog/archives/2005/06/08/summer-vertigo +Redirect Permanent /blog/archives/001126.html https://www.kieranhealy.org/blog/archives/2005/06/07/apple-switches +Redirect Permanent /blog/archives/001119.html https://www.kieranhealy.org/blog/archives/2005/06/03/women-drivers +Redirect Permanent /blog/archives/001118.html https://www.kieranhealy.org/blog/archives/2005/05/29/regexps-rule +Redirect Permanent /blog/archives/001117.html https://www.kieranhealy.org/blog/archives/2005/05/27/lessig-and-the-choir +Redirect Permanent /blog/archives/001115.html https://www.kieranhealy.org/blog/archives/2005/05/23/a-wealth-of-notions +Redirect Permanent /blog/archives/001114.html https://www.kieranhealy.org/blog/archives/2005/05/22/lucasaid +Redirect Permanent /blog/archives/001109.html https://www.kieranhealy.org/blog/archives/2005/05/17/savage-minds +Redirect Permanent /blog/archives/001103.html https://www.kieranhealy.org/blog/archives/2005/05/09/revenge-of-the-sith +Redirect Permanent /blog/archives/001102.html https://www.kieranhealy.org/blog/archives/2005/05/05/janice-rogers-brown-revisited +Redirect Permanent /blog/archives/001101.html https://www.kieranhealy.org/blog/archives/2005/05/04/la-traffic +Redirect Permanent /blog/archives/001096.html https://www.kieranhealy.org/blog/archives/2005/04/27/fetishizing-the-text +Redirect Permanent /blog/archives/001092.html https://www.kieranhealy.org/blog/archives/2005/04/24/transatlantic-chancers +Redirect Permanent /blog/archives/001091.html https://www.kieranhealy.org/blog/archives/2005/04/22/crooked-timbers-field-of-positions +Redirect Permanent /blog/archives/001090.html https://www.kieranhealy.org/blog/archives/2005/04/21/perpetual-is-as-perpetual-does +Redirect Permanent /blog/archives/001089.html https://www.kieranhealy.org/blog/archives/2005/04/21/annals-of-academic-putdowns +Redirect Permanent /blog/archives/001088.html https://www.kieranhealy.org/blog/archives/2005/04/13/my-health-care-co-pay +Redirect Permanent /blog/archives/001087.html https://www.kieranhealy.org/blog/archives/2005/04/12/occupational-hazards +Redirect Permanent /blog/archives/001086.html https://www.kieranhealy.org/blog/archives/2005/04/11/the-frontier-is-not-out-there +Redirect Permanent /blog/archives/001081.html https://www.kieranhealy.org/blog/archives/2005/04/10/confidential-business-proposal +Redirect Permanent /blog/archives/001077.html https://www.kieranhealy.org/blog/archives/2005/04/08/press-clippings +Redirect Permanent /blog/archives/001076.html https://www.kieranhealy.org/blog/archives/2005/04/04/berkeleys-idealism +Redirect Permanent /blog/archives/001075.html https://www.kieranhealy.org/blog/archives/2005/04/02/when-the-pope-came-to-ireland +Redirect Permanent /blog/archives/001074.html https://www.kieranhealy.org/blog/archives/2005/04/02/sociologically-improbable-phrases +Redirect Permanent /blog/archives/001073.html https://www.kieranhealy.org/blog/archives/2005/04/01/the-minuteman-project +Redirect Permanent /blog/archives/001072.html https://www.kieranhealy.org/blog/archives/2005/03/31/burger-queen +Redirect Permanent /blog/archives/001069.html https://www.kieranhealy.org/blog/archives/2005/03/27/at-this-point-i-am-beyond-surprise +Redirect Permanent /blog/archives/001068.html https://www.kieranhealy.org/blog/archives/2005/03/26/credentials +Redirect Permanent /blog/archives/001067.html https://www.kieranhealy.org/blog/archives/2005/03/24/storming-the-hospice +Redirect Permanent /blog/archives/001066.html https://www.kieranhealy.org/blog/archives/2005/03/24/violent-societies +Redirect Permanent /blog/archives/001065.html https://www.kieranhealy.org/blog/archives/2005/03/23/deterrence-and-the-death-penalty +Redirect Permanent /blog/archives/001064.html https://www.kieranhealy.org/blog/archives/2005/03/22/hot-in-the-city +Redirect Permanent /blog/archives/001063.html https://www.kieranhealy.org/blog/archives/2005/03/21/addhealth-returns +Redirect Permanent /blog/archives/001061.html https://www.kieranhealy.org/blog/archives/2005/03/20/the-schiavo-case +Redirect Permanent /blog/archives/001057.html https://www.kieranhealy.org/blog/archives/2005/03/18/george-kennan +Redirect Permanent /blog/archives/001055.html https://www.kieranhealy.org/blog/archives/2005/03/17/crooked-timber-is-down +Redirect Permanent /blog/archives/001056.html https://www.kieranhealy.org/blog/archives/2005/03/17/volokh-and-cruelty +Redirect Permanent /blog/archives/001054.html https://www.kieranhealy.org/blog/archives/2005/03/15/she-stalks-the-internets +Redirect Permanent /blog/archives/001053.html https://www.kieranhealy.org/blog/archives/2005/03/15/needles-under-the-nails +Redirect Permanent /blog/archives/001052.html https://www.kieranhealy.org/blog/archives/2005/03/14/torture +Redirect Permanent /blog/archives/001049.html https://www.kieranhealy.org/blog/archives/2005/03/03/body-parts-sociology +Redirect Permanent /blog/archives/001048.html https://www.kieranhealy.org/blog/archives/2005/02/28/life-imitating-art +Redirect Permanent /blog/archives/001047.html https://www.kieranhealy.org/blog/archives/2005/02/27/not-the-kind-of-bottle-i-need +Redirect Permanent /blog/archives/001046.html https://www.kieranhealy.org/blog/archives/2005/02/26/numa-numa-new-york-times +Redirect Permanent /blog/archives/001045.html https://www.kieranhealy.org/blog/archives/2005/02/21/followup-on-tal-afar +Redirect Permanent /blog/archives/001043.html https://www.kieranhealy.org/blog/archives/2005/02/18/minding-the-kids-again +Redirect Permanent /blog/archives/001042.html https://www.kieranhealy.org/blog/archives/2005/02/17/beat-the-market +Redirect Permanent /blog/archives/001041.html https://www.kieranhealy.org/blog/archives/2005/02/14/nb-bs +Redirect Permanent /blog/archives/001040.html https://www.kieranhealy.org/blog/archives/2005/02/12/henry-on-npr +Redirect Permanent /blog/archives/001039.html https://www.kieranhealy.org/blog/archives/2005/02/10/me-and-christopher-hitchens +Redirect Permanent /blog/archives/001038.html https://www.kieranhealy.org/blog/archives/2005/02/08/instead-of-a-muffin-with-your-coffee-this-morning +Redirect Permanent /blog/archives/001035.html https://www.kieranhealy.org/blog/archives/2005/02/03/roosevelt-and-bush +Redirect Permanent /blog/archives/001033.html https://www.kieranhealy.org/blog/archives/2005/02/01/high-school-autocrats +Redirect Permanent /blog/archives/001031.html https://www.kieranhealy.org/blog/archives/2005/01/30/prospects-for-iraqi-democracy +Redirect Permanent /blog/archives/001030.html https://www.kieranhealy.org/blog/archives/2005/01/27/specialization-and-status-in-philosophy +Redirect Permanent /blog/archives/001029.html https://www.kieranhealy.org/blog/archives/2005/01/26/self-esteem +Redirect Permanent /blog/archives/001020.html https://www.kieranhealy.org/blog/archives/2005/01/14/and-this-is-jesuss-skull-when-he-was-a-little-boy +Redirect Permanent /blog/archives/001019.html https://www.kieranhealy.org/blog/archives/2005/01/14/dont-mention-the-war +Redirect Permanent /blog/archives/001015.html https://www.kieranhealy.org/blog/archives/2005/01/08/sociology-in-cafe-society +Redirect Permanent /blog/archives/001008.html https://www.kieranhealy.org/blog/archives/2004/12/29/a-sociologist-amongst-philosophers +Redirect Permanent /blog/archives/001007.html https://www.kieranhealy.org/blog/archives/2004/12/15/identity-politics-for-all +Redirect Permanent /blog/archives/001006.html https://www.kieranhealy.org/blog/archives/2004/12/13/our-law-and-gods +Redirect Permanent /blog/archives/001004.html https://www.kieranhealy.org/blog/archives/2004/12/11/indispensible-applications +Redirect Permanent /blog/archives/001003.html https://www.kieranhealy.org/blog/archives/2004/12/10/testing-mars-edit +Redirect Permanent /blog/archives/001001.html https://www.kieranhealy.org/blog/archives/2004/12/07/invading-the-moon +Redirect Permanent /blog/archives/001000.html https://www.kieranhealy.org/blog/archives/2004/12/06/posner-and-becker-comedy-gold +Redirect Permanent /blog/archives/000998.html https://www.kieranhealy.org/blog/archives/2004/12/05/academic-job-markets-and-status-hierarchies +Redirect Permanent /blog/archives/000995.html https://www.kieranhealy.org/blog/archives/2004/12/04/draft-contribution-to-tech-central-station +Redirect Permanent /blog/archives/000994.html https://www.kieranhealy.org/blog/archives/2004/12/03/freedom-on-the-march +Redirect Permanent /blog/archives/000992.html https://www.kieranhealy.org/blog/archives/2004/12/01/brio +Redirect Permanent /blog/archives/000979.html https://www.kieranhealy.org/blog/archives/2004/11/25/the-wrong-pie +Redirect Permanent /blog/archives/000978.html https://www.kieranhealy.org/blog/archives/2004/11/23/because-the-base-wouldnt-want-to-see-a-fairy-up-there +Redirect Permanent /blog/archives/000977.html https://www.kieranhealy.org/blog/archives/2004/11/23/framing +Redirect Permanent /blog/archives/000970.html https://www.kieranhealy.org/blog/archives/2004/11/21/my-semi-conscious-mind +Redirect Permanent /blog/archives/000969.html https://www.kieranhealy.org/blog/archives/2004/11/20/economics-and-philosophy +Redirect Permanent /blog/archives/000968.html https://www.kieranhealy.org/blog/archives/2004/11/19/further-analysis-of-electronic-voting-patterns +Redirect Permanent /blog/archives/000957.html https://www.kieranhealy.org/blog/archives/2004/11/12/delicious-monster +Redirect Permanent /blog/archives/000955.html https://www.kieranhealy.org/blog/archives/2004/11/11/going-home-to-a-foreign-country +Redirect Permanent /blog/archives/000954.html https://www.kieranhealy.org/blog/archives/2004/11/09/the-obvious-solution-to-spam +Redirect Permanent /blog/archives/000947.html https://www.kieranhealy.org/blog/archives/2004/11/06/religion-and-social-justice +Redirect Permanent /blog/archives/000946.html https://www.kieranhealy.org/blog/archives/2004/11/05/moral-values-again +Redirect Permanent /blog/archives/000945.html https://www.kieranhealy.org/blog/archives/2004/11/04/no-child-left-behind-alive +Redirect Permanent /blog/archives/000943.html https://www.kieranhealy.org/blog/archives/2004/11/04/red-counties-blue-counties-and-occupied-counties +Redirect Permanent /blog/archives/000938.html https://www.kieranhealy.org/blog/archives/2004/11/03/moral-values +Redirect Permanent /blog/archives/000934.html https://www.kieranhealy.org/blog/archives/2004/10/31/trick-or-treat +Redirect Permanent /blog/archives/000932.html https://www.kieranhealy.org/blog/archives/2004/10/31/redskins-lose +Redirect Permanent /blog/archives/000929.html https://www.kieranhealy.org/blog/archives/2004/10/29/acknowledging-your-limitations +Redirect Permanent /blog/archives/000925.html https://www.kieranhealy.org/blog/archives/2004/10/26/blogging-and-blog-ads +Redirect Permanent /blog/archives/000920.html https://www.kieranhealy.org/blog/archives/2004/10/24/mobilizing-the-base +Redirect Permanent /blog/archives/000911.html https://www.kieranhealy.org/blog/archives/2004/10/21/in-cambodia-i-imagine +Redirect Permanent /blog/archives/000907.html https://www.kieranhealy.org/blog/archives/2004/10/20/over-enthusiastic-organ-procurement +Redirect Permanent /blog/archives/000904.html https://www.kieranhealy.org/blog/archives/2004/10/19/may-december-marriages-again +Redirect Permanent /blog/archives/000899.html https://www.kieranhealy.org/blog/archives/2004/10/15/brad-delong-discovers-cultural-capital +Redirect Permanent /blog/archives/000898.html https://www.kieranhealy.org/blog/archives/2004/10/15/oh-the-humanity +Redirect Permanent /blog/archives/000895.html https://www.kieranhealy.org/blog/archives/2004/10/14/marrying-up +Redirect Permanent /blog/archives/000892.html https://www.kieranhealy.org/blog/archives/2004/10/13/statistical-methods +Redirect Permanent /blog/archives/000886.html https://www.kieranhealy.org/blog/archives/2004/10/11/comic-disaster-relief +Redirect Permanent /blog/archives/000885.html https://www.kieranhealy.org/blog/archives/2004/10/10/i-could-do-that-on-a-bike-maybe +Redirect Permanent /blog/archives/000881.html https://www.kieranhealy.org/blog/archives/2004/10/05/my-first-is-in-quick-but-not-in-thick +Redirect Permanent /blog/archives/000879.html https://www.kieranhealy.org/blog/archives/2004/10/02/hes-baaack-and-hes-shrillllll +Redirect Permanent /blog/archives/000877.html https://www.kieranhealy.org/blog/archives/2004/09/29/education-and-terror +Redirect Permanent /blog/archives/000874.html https://www.kieranhealy.org/blog/archives/2004/09/28/all-things-depressing +Redirect Permanent /blog/archives/000871.html https://www.kieranhealy.org/blog/archives/2004/09/26/dubya-channels-calvin-or-vice-versa +Redirect Permanent /blog/archives/000869.html https://www.kieranhealy.org/blog/archives/2004/09/25/advice-to-authors +Redirect Permanent /blog/archives/000868.html https://www.kieranhealy.org/blog/archives/2004/09/24/lead-on-david-brooks +Redirect Permanent /blog/archives/000867.html https://www.kieranhealy.org/blog/archives/2004/09/23/song-of-the-schmibertarians +Redirect Permanent /blog/archives/000865.html https://www.kieranhealy.org/blog/archives/2004/09/22/business-opportunity +Redirect Permanent /blog/archives/000864.html https://www.kieranhealy.org/blog/archives/2004/09/21/the-condition-of-the-working-class-in-manchester-and-new-england +Redirect Permanent /blog/archives/000859.html https://www.kieranhealy.org/blog/archives/2004/09/16/sui-generis +Redirect Permanent /blog/archives/000853.html https://www.kieranhealy.org/blog/archives/2004/09/12/synergistic-annoyance-convergence +Redirect Permanent /blog/archives/000848.html https://www.kieranhealy.org/blog/archives/2004/09/10/dick-cheney-on-employment +Redirect Permanent /blog/archives/000847.html https://www.kieranhealy.org/blog/archives/2004/09/09/theory-and-practice +Redirect Permanent /blog/archives/000846.html https://www.kieranhealy.org/blog/archives/2004/09/08/secrets-of-the-bush-presidency +Redirect Permanent /blog/archives/000845.html https://www.kieranhealy.org/blog/archives/2004/09/08/iem-analysis-spitnpolish-dept +Redirect Permanent /blog/archives/000843.html https://www.kieranhealy.org/blog/archives/2004/09/07/your-alan-keyes-moment-of-the-day +Redirect Permanent /blog/archives/000840.html https://www.kieranhealy.org/blog/archives/2004/09/06/afflicting-the-comfortable +Redirect Permanent /blog/archives/000838.html https://www.kieranhealy.org/blog/archives/2004/09/06/the-cane-mutiny +Redirect Permanent /blog/archives/000833.html https://www.kieranhealy.org/blog/archives/2004/09/05/crutches +Redirect Permanent /blog/archives/000831.html https://www.kieranhealy.org/blog/archives/2004/09/04/religion-and-class +Redirect Permanent /blog/archives/000830.html https://www.kieranhealy.org/blog/archives/2004/09/02/emile-durkheim-on-zell-miller +Redirect Permanent /blog/archives/000829.html https://www.kieranhealy.org/blog/archives/2004/09/01/wibbly-wobbly +Redirect Permanent /blog/archives/000824.html https://www.kieranhealy.org/blog/archives/2004/08/31/the-man-says-he-is-irish-he-is-also-drunk +Redirect Permanent /blog/archives/000817.html https://www.kieranhealy.org/blog/archives/2004/08/27/altruism-as-an-organizational-problem +Redirect Permanent /blog/archives/000815.html https://www.kieranhealy.org/blog/archives/2004/08/24/back-to-school-week-at-the-university-of-arizona +Redirect Permanent /blog/archives/000810.html https://www.kieranhealy.org/blog/archives/2004/08/23/pleasant-surprise +Redirect Permanent /blog/archives/000802.html https://www.kieranhealy.org/blog/archives/2004/08/21/swift-boat-bloggers-for-denying-the-bleedin-obvious +Redirect Permanent /blog/archives/000801.html https://www.kieranhealy.org/blog/archives/2004/08/20/ipods-in-the-classroom +Redirect Permanent /blog/archives/000800.html https://www.kieranhealy.org/blog/archives/2004/08/20/a-man-after-his-own-heart +Redirect Permanent /blog/archives/000798.html https://www.kieranhealy.org/blog/archives/2004/08/19/roll-10-or-better-on-2-d8s-to-make-the-obvious-joke +Redirect Permanent /blog/archives/000797.html https://www.kieranhealy.org/blog/archives/2004/08/18/krugman-at-the-asa +Redirect Permanent /blog/archives/000796.html https://www.kieranhealy.org/blog/archives/2004/08/14/conferencing +Redirect Permanent /blog/archives/000795.html https://www.kieranhealy.org/blog/archives/2004/08/14/love-is-a-battlefield-spanning-tree-network-with-no-4-cycles +Redirect Permanent /blog/archives/000793.html https://www.kieranhealy.org/blog/archives/2004/08/11/good-stuff-from-the-decembrist +Redirect Permanent /blog/archives/000792.html https://www.kieranhealy.org/blog/archives/2004/08/10/egalitarian-capitalism +Redirect Permanent /blog/archives/000788.html https://www.kieranhealy.org/blog/archives/2004/08/08/testing-positive +Redirect Permanent /blog/archives/000787.html https://www.kieranhealy.org/blog/archives/2004/08/06/flying-the-friendly-skies +Redirect Permanent /blog/archives/000783.html https://www.kieranhealy.org/blog/archives/2004/07/27/road-movie-to-berlin-little-rock +Redirect Permanent /blog/archives/000782.html https://www.kieranhealy.org/blog/archives/2004/07/24/markets-firms-and-planning +Redirect Permanent /blog/archives/000781.html https://www.kieranhealy.org/blog/archives/2004/07/24/on-the-road-again +Redirect Permanent /blog/archives/000780.html https://www.kieranhealy.org/blog/archives/2004/07/19/for-all-your-causal-counterfactual-needs +Redirect Permanent /blog/archives/000779.html https://www.kieranhealy.org/blog/archives/2004/07/19/faux-pas +Redirect Permanent /blog/archives/000778.html https://www.kieranhealy.org/blog/archives/2004/07/16/a-new-analysis-of-incarceration-and-inequality +Redirect Permanent /blog/archives/000776.html https://www.kieranhealy.org/blog/archives/2004/07/15/my-irresistible-rise +Redirect Permanent /blog/archives/000775.html https://www.kieranhealy.org/blog/archives/2004/07/13/public-and-private-health-care +Redirect Permanent /blog/archives/000772.html https://www.kieranhealy.org/blog/archives/2004/07/06/vacation +Redirect Permanent /blog/archives/000771.html https://www.kieranhealy.org/blog/archives/2004/07/02/public-sociologists +Redirect Permanent /blog/archives/000770.html https://www.kieranhealy.org/blog/archives/2004/07/01/rabies-via-organ-transplant +Redirect Permanent /blog/archives/000769.html https://www.kieranhealy.org/blog/archives/2004/06/30/in-order-to-destroy-the-village-we-had-to-sue-it +Redirect Permanent /blog/archives/000768.html https://www.kieranhealy.org/blog/archives/2004/06/26/sociologys-final-frontier +Redirect Permanent /blog/archives/000767.html https://www.kieranhealy.org/blog/archives/2004/06/23/big-dog-bites-man +Redirect Permanent /blog/archives/000766.html https://www.kieranhealy.org/blog/archives/2004/06/23/mosquitos +Redirect Permanent /blog/archives/000765.html https://www.kieranhealy.org/blog/archives/2004/06/21/crooked-timbers-greatest-hits +Redirect Permanent /blog/archives/000764.html https://www.kieranhealy.org/blog/archives/2004/06/20/this-is-an-outrage +Redirect Permanent /blog/archives/000762.html https://www.kieranhealy.org/blog/archives/2004/06/15/biblical-literalism +Redirect Permanent /blog/archives/000761.html https://www.kieranhealy.org/blog/archives/2004/06/14/fair-warning +Redirect Permanent /blog/archives/000759.html https://www.kieranhealy.org/blog/archives/2004/06/12/eugene-volokh-hits-the-eject-button +Redirect Permanent /blog/archives/000758.html https://www.kieranhealy.org/blog/archives/2004/06/12/wtf +Redirect Permanent /blog/archives/000757.html https://www.kieranhealy.org/blog/archives/2004/06/09/the-social-production-of-libertarians +Redirect Permanent /blog/archives/000756.html https://www.kieranhealy.org/blog/archives/2004/06/08/on-a-wing-and-a-prayer +Redirect Permanent /blog/archives/000755.html https://www.kieranhealy.org/blog/archives/2004/06/07/compartmentalization +Redirect Permanent /blog/archives/000754.html https://www.kieranhealy.org/blog/archives/2004/06/07/alan-turing +Redirect Permanent /blog/archives/000753.html https://www.kieranhealy.org/blog/archives/2004/06/07/d-day-in-the-public-mind +Redirect Permanent /blog/archives/000752.html https://www.kieranhealy.org/blog/archives/2004/06/06/down-in-cork-hed-be-known-as-a-langer +Redirect Permanent /blog/archives/000751.html https://www.kieranhealy.org/blog/archives/2004/06/05/plagiarism +Redirect Permanent /blog/archives/000750.html https://www.kieranhealy.org/blog/archives/2004/06/04/dont-upgrade +Redirect Permanent /blog/archives/000749.html https://www.kieranhealy.org/blog/archives/2004/06/02/geek-moment +Redirect Permanent /blog/archives/000748.html https://www.kieranhealy.org/blog/archives/2004/05/31/sociology-of-culture +Redirect Permanent /blog/archives/000747.html https://www.kieranhealy.org/blog/archives/2004/05/30/a-government-of-laws-and-not-of-men +Redirect Permanent /blog/archives/000746.html https://www.kieranhealy.org/blog/archives/2004/05/28/professional-misconduct +Redirect Permanent /blog/archives/000745.html https://www.kieranhealy.org/blog/archives/2004/05/27/rumsfeld-speaks +Redirect Permanent /blog/archives/000744.html https://www.kieranhealy.org/blog/archives/2004/05/26/your-commencement-speaker-roster +Redirect Permanent /blog/archives/000743.html https://www.kieranhealy.org/blog/archives/2004/05/24/compare-and-contrast +Redirect Permanent /blog/archives/000742.html https://www.kieranhealy.org/blog/archives/2004/05/24/another-one-for-the-pile +Redirect Permanent /blog/archives/000739.html https://www.kieranhealy.org/blog/archives/2004/05/22/something-like-fire-or-the-wheel +Redirect Permanent /blog/archives/000738.html https://www.kieranhealy.org/blog/archives/2004/05/18/the-day-after-tomorrow +Redirect Permanent /blog/archives/000737.html https://www.kieranhealy.org/blog/archives/2004/05/18/quick-eurovision-followup +Redirect Permanent /blog/archives/000736.html https://www.kieranhealy.org/blog/archives/2004/05/14/fingerprints +Redirect Permanent /blog/archives/000735.html https://www.kieranhealy.org/blog/archives/2004/05/13/torture-of-a-different-kind +Redirect Permanent /blog/archives/000730.html https://www.kieranhealy.org/blog/archives/2004/05/03/conspicuous-by-his-absence +Redirect Permanent /blog/archives/000734.html https://www.kieranhealy.org/blog/archives/2004/05/03/bristol +Redirect Permanent /blog/archives/000726.html https://www.kieranhealy.org/blog/archives/2004/04/25/nielsen-hayden-isms +Redirect Permanent /blog/archives/000725.html https://www.kieranhealy.org/blog/archives/2004/04/25/red-and-blue-america +Redirect Permanent /blog/archives/000724.html https://www.kieranhealy.org/blog/archives/2004/04/25/culture-matters +Redirect Permanent /blog/archives/000723.html https://www.kieranhealy.org/blog/archives/2004/04/20/freebies +Redirect Permanent /blog/archives/000722.html https://www.kieranhealy.org/blog/archives/2004/04/20/botching-the-job +Redirect Permanent /blog/archives/000720.html https://www.kieranhealy.org/blog/archives/2004/04/19/smoking-in-public +Redirect Permanent /blog/archives/000719.html https://www.kieranhealy.org/blog/archives/2004/04/13/great-but-avoid-open-top-cars +Redirect Permanent /blog/archives/000716.html https://www.kieranhealy.org/blog/archives/2004/04/07/shelf-life +Redirect Permanent /blog/archives/000715.html https://www.kieranhealy.org/blog/archives/2004/04/06/who-fears-to-speak-of-easter-week +Redirect Permanent /blog/archives/000713.html https://www.kieranhealy.org/blog/archives/2004/03/29/the-full-lineout +Redirect Permanent /blog/archives/000712.html https://www.kieranhealy.org/blog/archives/2004/03/26/seduced-by-a-model +Redirect Permanent /blog/archives/000711.html https://www.kieranhealy.org/blog/archives/2004/03/25/bloggers-incarnate +Redirect Permanent /blog/archives/000709.html https://www.kieranhealy.org/blog/archives/2004/03/24/more-of-the-same +Redirect Permanent /blog/archives/000707.html https://www.kieranhealy.org/blog/archives/2004/03/22/bobo-brutalism-in-pasadena +Redirect Permanent /blog/archives/000706.html https://www.kieranhealy.org/blog/archives/2004/03/19/men-from-mars-women-from-venus-phds-from-uranus +Redirect Permanent /blog/archives/000705.html https://www.kieranhealy.org/blog/archives/2004/03/18/2-bed-1-bath-appalling-vista-3000year +Redirect Permanent /blog/archives/000703.html https://www.kieranhealy.org/blog/archives/2004/03/17/from-the-irish +Redirect Permanent /blog/archives/000701.html https://www.kieranhealy.org/blog/archives/2004/03/15/science-in-action +Redirect Permanent /blog/archives/000700.html https://www.kieranhealy.org/blog/archives/2004/03/14/moria-im-lost-in-a-mine-named-moria +Redirect Permanent /blog/archives/000695.html https://www.kieranhealy.org/blog/archives/2004/03/09/the-sociology-of-blood-and-guts +Redirect Permanent /blog/archives/000694.html https://www.kieranhealy.org/blog/archives/2004/03/09/on-being-put-off-wagner-forever +Redirect Permanent /blog/archives/000693.html https://www.kieranhealy.org/blog/archives/2004/03/08/the-gay-divorcee +Redirect Permanent /blog/archives/000688.html https://www.kieranhealy.org/blog/archives/2004/02/28/he-wishes-for-the-cloths-of-heaven +Redirect Permanent /blog/archives/000687.html https://www.kieranhealy.org/blog/archives/2004/02/28/memo-to-peter-jackson-eugene-volokh-et-al +Redirect Permanent /blog/archives/000686.html https://www.kieranhealy.org/blog/archives/2004/02/28/visible-libertarians +Redirect Permanent /blog/archives/000683.html https://www.kieranhealy.org/blog/archives/2004/02/27/writing-history +Redirect Permanent /blog/archives/000681.html https://www.kieranhealy.org/blog/archives/2004/02/23/economics-of-mozart-and-happiness +Redirect Permanent /blog/archives/000678.html https://www.kieranhealy.org/blog/archives/2004/02/19/awards-are-their-own-reward +Redirect Permanent /blog/archives/000677.html https://www.kieranhealy.org/blog/archives/2004/02/18/ow +Redirect Permanent /blog/archives/000676.html https://www.kieranhealy.org/blog/archives/2004/02/18/dont-be-afraid +Redirect Permanent /blog/archives/000674.html https://www.kieranhealy.org/blog/archives/2004/02/17/left-wing-conspirators +Redirect Permanent /blog/archives/000673.html https://www.kieranhealy.org/blog/archives/2004/02/16/the-world-city-system +Redirect Permanent /blog/archives/000672.html https://www.kieranhealy.org/blog/archives/2004/02/15/knowing-about-religion +Redirect Permanent /blog/archives/000671.html https://www.kieranhealy.org/blog/archives/2004/02/14/quiz-night-at-crooked-timber +Redirect Permanent /blog/archives/000669.html https://www.kieranhealy.org/blog/archives/2004/02/12/you-old-romantic-me +Redirect Permanent /blog/archives/000667.html https://www.kieranhealy.org/blog/archives/2004/02/10/conservatives-in-academia +Redirect Permanent /blog/archives/000666.html https://www.kieranhealy.org/blog/archives/2004/02/10/transcripts +Redirect Permanent /blog/archives/000665.html https://www.kieranhealy.org/blog/archives/2004/02/09/textile-2 +Redirect Permanent /blog/archives/000662.html https://www.kieranhealy.org/blog/archives/2004/02/06/hell-is-other-pupils +Redirect Permanent /blog/archives/000661.html https://www.kieranhealy.org/blog/archives/2004/02/05/the-five-standard-excuses +Redirect Permanent /blog/archives/000659.html https://www.kieranhealy.org/blog/archives/2004/02/03/walking-to-school +Redirect Permanent /blog/archives/000657.html https://www.kieranhealy.org/blog/archives/2004/02/01/book-titles +Redirect Permanent /blog/archives/000655.html https://www.kieranhealy.org/blog/archives/2004/01/31/for-all-suitably-restricted-definitions-of-world +Redirect Permanent /blog/archives/000654.html https://www.kieranhealy.org/blog/archives/2004/01/31/id-rebutted-c1805 +Redirect Permanent /blog/archives/000652.html https://www.kieranhealy.org/blog/archives/2004/01/28/inequality-and-the-varieties-of-capitalism +Redirect Permanent /blog/archives/000650.html https://www.kieranhealy.org/blog/archives/2004/01/28/drugs-and-deterrence +Redirect Permanent /blog/archives/000649.html https://www.kieranhealy.org/blog/archives/2004/01/27/testing-ecto +Redirect Permanent /blog/archives/000647.html https://www.kieranhealy.org/blog/archives/2004/01/25/koufax-awards-update +Redirect Permanent /blog/archives/000641.html https://www.kieranhealy.org/blog/archives/2004/01/25/after-the-new-economy +Redirect Permanent /blog/archives/000636.html https://www.kieranhealy.org/blog/archives/2004/01/21/democracy-in-america +Redirect Permanent /blog/archives/000634.html https://www.kieranhealy.org/blog/archives/2004/01/20/artistic-temperaments +Redirect Permanent /blog/archives/000629.html https://www.kieranhealy.org/blog/archives/2004/01/15/vocab-words +Redirect Permanent /blog/archives/000627.html https://www.kieranhealy.org/blog/archives/2004/01/15/irregular-verb-watch +Redirect Permanent /blog/archives/000628.html https://www.kieranhealy.org/blog/archives/2004/01/09/moondoggle +Redirect Permanent /blog/archives/000614.html https://www.kieranhealy.org/blog/archives/2004/01/07/coffee-time +Redirect Permanent /blog/archives/000613.html https://www.kieranhealy.org/blog/archives/2004/01/05/social-engineering-in-the-1790s +Redirect Permanent /blog/archives/000612.html https://www.kieranhealy.org/blog/archives/2004/01/04/illocutionary-vegas-act +Redirect Permanent /blog/archives/000611.html https://www.kieranhealy.org/blog/archives/2004/01/03/mob-rule-at-the-bbc +Redirect Permanent /blog/archives/000610.html https://www.kieranhealy.org/blog/archives/2003/12/31/ct-left-exposed-again +Redirect Permanent /blog/archives/000609.html https://www.kieranhealy.org/blog/archives/2003/12/27/return-of-the-king +Redirect Permanent /blog/archives/000606.html https://www.kieranhealy.org/blog/archives/2003/12/24/christmas-in-oz +Redirect Permanent /blog/archives/000605.html https://www.kieranhealy.org/blog/archives/2003/12/21/the-dead-of-winter +Redirect Permanent /blog/archives/000604.html https://www.kieranhealy.org/blog/archives/2003/12/21/cry-me-a-river +Redirect Permanent /blog/archives/000603.html https://www.kieranhealy.org/blog/archives/2003/12/19/the-beast-with-two-robacks +Redirect Permanent /blog/archives/000602.html https://www.kieranhealy.org/blog/archives/2003/12/18/blasphemy +Redirect Permanent /blog/archives/000601.html https://www.kieranhealy.org/blog/archives/2003/12/17/eyesores +Redirect Permanent /blog/archives/000600.html https://www.kieranhealy.org/blog/archives/2003/12/15/books-i-did-not-read-this-year +Redirect Permanent /blog/archives/000596.html https://www.kieranhealy.org/blog/archives/2003/12/13/another-important-endorsement +Redirect Permanent /blog/archives/000595.html https://www.kieranhealy.org/blog/archives/2003/12/12/sociology-of-cultures +Redirect Permanent /blog/archives/000590.html https://www.kieranhealy.org/blog/archives/2003/12/11/in-a-word +Redirect Permanent /blog/archives/000589.html https://www.kieranhealy.org/blog/archives/2003/12/09/gore-and-dean +Redirect Permanent /blog/archives/000588.html https://www.kieranhealy.org/blog/archives/2003/12/09/islam-and-economic-growth +Redirect Permanent /blog/archives/000587.html https://www.kieranhealy.org/blog/archives/2003/12/08/the-poetry-of-sadness +Redirect Permanent /blog/archives/000586.html https://www.kieranhealy.org/blog/archives/2003/12/06/love-is-a-many-legged-thing +Redirect Permanent /blog/archives/000585.html https://www.kieranhealy.org/blog/archives/2003/12/03/historians-of-the-world-unite +Redirect Permanent /blog/archives/000584.html https://www.kieranhealy.org/blog/archives/2003/12/03/plame-kerfuffle +Redirect Permanent /blog/archives/000582.html https://www.kieranhealy.org/blog/archives/2003/11/27/oliver-cromwells-head +Redirect Permanent /blog/archives/000581.html https://www.kieranhealy.org/blog/archives/2003/11/24/tenure-and-toddlers +Redirect Permanent /blog/archives/000576.html https://www.kieranhealy.org/blog/archives/2003/11/22/in-black-and-white-and-red +Redirect Permanent /blog/archives/000575.html https://www.kieranhealy.org/blog/archives/2003/11/19/democracy-by-example +Redirect Permanent /blog/archives/000574.html https://www.kieranhealy.org/blog/archives/2003/11/19/stranger-than-fiction +Redirect Permanent /blog/archives/000573.html https://www.kieranhealy.org/blog/archives/2003/11/15/hypocritical-moi +Redirect Permanent /blog/archives/000572.html https://www.kieranhealy.org/blog/archives/2003/11/13/suv-luv +Redirect Permanent /blog/archives/000571.html https://www.kieranhealy.org/blog/archives/2003/11/12/rhetorical-moderation-for-thee +Redirect Permanent /blog/archives/000570.html https://www.kieranhealy.org/blog/archives/2003/11/10/solidarity-and-hierarchy-in-academic-job-markets +Redirect Permanent /blog/archives/000569.html https://www.kieranhealy.org/blog/archives/2003/11/06/no-one-can-be-told-what-the-meatrix-is +Redirect Permanent /blog/archives/000562.html https://www.kieranhealy.org/blog/archives/2003/11/05/interview-with-the-moor +Redirect Permanent /blog/archives/000568.html https://www.kieranhealy.org/blog/archives/2003/11/05/annals-of-premature-accusations +Redirect Permanent /blog/archives/000567.html https://www.kieranhealy.org/blog/archives/2003/11/03/janice-r-brown-speaks +Redirect Permanent /blog/archives/000566.html https://www.kieranhealy.org/blog/archives/2003/11/01/its-like-the-king +Redirect Permanent /blog/archives/000565.html https://www.kieranhealy.org/blog/archives/2003/10/31/vrwc +Redirect Permanent /blog/archives/000564.html https://www.kieranhealy.org/blog/archives/2003/10/30/dept-of-fair-and-balanced +Redirect Permanent /blog/archives/000560.html https://www.kieranhealy.org/blog/archives/2003/10/29/number-crunching +Redirect Permanent /blog/archives/000559.html https://www.kieranhealy.org/blog/archives/2003/10/28/all-things-bright-and-easterbrook +Redirect Permanent /blog/archives/000558.html https://www.kieranhealy.org/blog/archives/2003/10/27/gregg-easterbrook-is-having-a-bad-month +Redirect Permanent /blog/archives/000557.html https://www.kieranhealy.org/blog/archives/2003/10/27/blogs-for-the-boys +Redirect Permanent /blog/archives/000556.html https://www.kieranhealy.org/blog/archives/2003/10/26/geras-on-copyeditors-revised +Redirect Permanent /blog/archives/000555.html https://www.kieranhealy.org/blog/archives/2003/10/23/plus-25-for-yourself +Redirect Permanent /blog/archives/000554.html https://www.kieranhealy.org/blog/archives/2003/10/22/bush-capital-hosts-bush-president +Redirect Permanent /blog/archives/000552.html https://www.kieranhealy.org/blog/archives/2003/10/21/bumper-stickers +Redirect Permanent /blog/archives/000551.html https://www.kieranhealy.org/blog/archives/2003/10/20/international-monetary-fun +Redirect Permanent /blog/archives/000550.html https://www.kieranhealy.org/blog/archives/2003/10/19/the-micropolitics-of-melbourne-cafe-society +Redirect Permanent /blog/archives/000543.html https://www.kieranhealy.org/blog/archives/2003/10/13/god-is-undead +Redirect Permanent /blog/archives/000542.html https://www.kieranhealy.org/blog/archives/2003/10/09/the-new-catechism-of-cliche +Redirect Permanent /blog/archives/000541.html https://www.kieranhealy.org/blog/archives/2003/10/08/big-changes-in-california +Redirect Permanent /blog/archives/000540.html https://www.kieranhealy.org/blog/archives/2003/10/06/all-things-nice +Redirect Permanent /blog/archives/000539.html https://www.kieranhealy.org/blog/archives/2003/10/06/israel-bombs-syria +Redirect Permanent /blog/archives/000538.html https://www.kieranhealy.org/blog/archives/2003/10/04/l-ron-at-ground-zero +Redirect Permanent /blog/archives/000537.html https://www.kieranhealy.org/blog/archives/2003/09/28/even-further-down-under +Redirect Permanent /blog/archives/000536.html https://www.kieranhealy.org/blog/archives/2003/09/21/loaves-and-fishes-and-beers +Redirect Permanent /blog/archives/000535.html https://www.kieranhealy.org/blog/archives/2003/09/19/this-just-in-from-cnn +Redirect Permanent /blog/archives/000534.html https://www.kieranhealy.org/blog/archives/2003/09/18/there-are-no-stupid-questions +Redirect Permanent /blog/archives/000533.html https://www.kieranhealy.org/blog/archives/2003/09/18/irregular-verbs +Redirect Permanent /blog/archives/000532.html https://www.kieranhealy.org/blog/archives/2003/09/17/rubber-duckies +Redirect Permanent /blog/archives/000531.html https://www.kieranhealy.org/blog/archives/2003/09/15/word-salad +Redirect Permanent /blog/archives/000530.html https://www.kieranhealy.org/blog/archives/2003/09/15/capital-mobility +Redirect Permanent /blog/archives/000529.html https://www.kieranhealy.org/blog/archives/2003/09/12/yes-prime-minister +Redirect Permanent /blog/archives/000528.html https://www.kieranhealy.org/blog/archives/2003/09/08/snark +Redirect Permanent /blog/archives/000527.html https://www.kieranhealy.org/blog/archives/2003/09/07/right-wing-postmodernism-again +Redirect Permanent /blog/archives/000526.html https://www.kieranhealy.org/blog/archives/2003/09/07/existence-theorems-are-reductios +Redirect Permanent /blog/archives/000525.html https://www.kieranhealy.org/blog/archives/2003/09/05/euphony-in-language +Redirect Permanent /blog/archives/000524.html https://www.kieranhealy.org/blog/archives/2003/09/04/testing-kung-log +Redirect Permanent /blog/archives/000523.html https://www.kieranhealy.org/blog/archives/2003/09/04/google-functionality-marches-on +Redirect Permanent /blog/archives/000522.html https://www.kieranhealy.org/blog/archives/2003/09/03/minding-the-kids +Redirect Permanent /blog/archives/000521.html https://www.kieranhealy.org/blog/archives/2003/09/01/kinds-of-quagmires +Redirect Permanent /blog/archives/000520.html https://www.kieranhealy.org/blog/archives/2003/08/31/funding-basic-research +Redirect Permanent /blog/archives/000519.html https://www.kieranhealy.org/blog/archives/2003/08/31/get-a-lifestyle +Redirect Permanent /blog/archives/000518.html https://www.kieranhealy.org/blog/archives/2003/08/29/russia-and-china +Redirect Permanent /blog/archives/000517.html https://www.kieranhealy.org/blog/archives/2003/08/28/real-and-unreal +Redirect Permanent /blog/archives/000516.html https://www.kieranhealy.org/blog/archives/2003/08/27/conference-advice +Redirect Permanent /blog/archives/000515.html https://www.kieranhealy.org/blog/archives/2003/08/25/incarceration-and-the-labor-market +Redirect Permanent /blog/archives/000514.html https://www.kieranhealy.org/blog/archives/2003/08/24/take-the-money-open-the-box +Redirect Permanent /blog/archives/000513.html https://www.kieranhealy.org/blog/archives/2003/08/20/cosmic-inevitability +Redirect Permanent /blog/archives/000512.html https://www.kieranhealy.org/blog/archives/2003/08/17/conference-blues +Redirect Permanent /blog/archives/000511.html https://www.kieranhealy.org/blog/archives/2003/08/14/power-outages +Redirect Permanent /blog/archives/000510.html https://www.kieranhealy.org/blog/archives/2003/08/11/comings-and-goings +Redirect Permanent /blog/archives/000509.html https://www.kieranhealy.org/blog/archives/2003/08/11/bad-movie +Redirect Permanent /blog/archives/000508.html https://www.kieranhealy.org/blog/archives/2003/08/08/scenes-from-canberra-traffic +Redirect Permanent /blog/archives/000507.html https://www.kieranhealy.org/blog/archives/2003/08/08/deliberative-democracy-and-social-choice +Redirect Permanent /blog/archives/000506.html https://www.kieranhealy.org/blog/archives/2003/08/06/great-headlines-of-the-world +Redirect Permanent /blog/archives/000505.html https://www.kieranhealy.org/blog/archives/2003/08/03/harry-potter-and-the-implausible-plot-device +Redirect Permanent /blog/archives/000504.html https://www.kieranhealy.org/blog/archives/2003/08/01/wandering-the-halls +Redirect Permanent /blog/archives/000503.html https://www.kieranhealy.org/blog/archives/2003/07/29/frustration-is-not-a-strategy +Redirect Permanent /blog/archives/000502.html https://www.kieranhealy.org/blog/archives/2003/07/28/completely-mental +Redirect Permanent /blog/archives/000501.html https://www.kieranhealy.org/blog/archives/2003/07/26/reason-truth-and-history +Redirect Permanent /blog/archives/000500.html https://www.kieranhealy.org/blog/archives/2003/07/20/shakenbake-social-theory +Redirect Permanent /blog/archives/000499.html https://www.kieranhealy.org/blog/archives/2003/07/19/rhetorical-equivalence +Redirect Permanent /blog/archives/000498.html https://www.kieranhealy.org/blog/archives/2003/07/15/take-my-money-please +Redirect Permanent /blog/archives/000497.html https://www.kieranhealy.org/blog/archives/2003/07/15/intercontinental-ballistic-missive +Redirect Permanent /blog/archives/000496.html https://www.kieranhealy.org/blog/archives/2003/07/11/open-source-stuff +Redirect Permanent /blog/archives/000495.html https://www.kieranhealy.org/blog/archives/2003/07/10/moving-images-of-society +Redirect Permanent /blog/archives/000494.html https://www.kieranhealy.org/blog/archives/2003/07/08/crooked-timber +Redirect Permanent /blog/archives/000493.html https://www.kieranhealy.org/blog/archives/2003/07/07/tarred-with-the-same-brush +Redirect Permanent /blog/archives/000492.html https://www.kieranhealy.org/blog/archives/2003/07/07/nepotism +Redirect Permanent /blog/archives/000491.html https://www.kieranhealy.org/blog/archives/2003/07/06/open-source-again +Redirect Permanent /blog/archives/000490.html https://www.kieranhealy.org/blog/archives/2003/07/05/two-previews +Redirect Permanent /blog/archives/000489.html https://www.kieranhealy.org/blog/archives/2003/07/04/is-that-a-good-or-bad-sign +Redirect Permanent /blog/archives/000488.html https://www.kieranhealy.org/blog/archives/2003/07/04/100-confident +Redirect Permanent /blog/archives/000486.html https://www.kieranhealy.org/blog/archives/2003/07/02/the-cliche-kid-part-xi-redux +Redirect Permanent /blog/archives/000482.html https://www.kieranhealy.org/blog/archives/2003/07/01/british-sporting-heroes +Redirect Permanent /blog/archives/000481.html https://www.kieranhealy.org/blog/archives/2003/06/30/professionalization +Redirect Permanent /blog/archives/000480.html https://www.kieranhealy.org/blog/archives/2003/06/30/watch-closely +Redirect Permanent /blog/archives/000479.html https://www.kieranhealy.org/blog/archives/2003/06/29/katharine-hepburn +Redirect Permanent /blog/archives/000478.html https://www.kieranhealy.org/blog/archives/2003/06/28/writing-home +Redirect Permanent /blog/archives/000477.html https://www.kieranhealy.org/blog/archives/2003/06/26/classification-problems +Redirect Permanent /blog/archives/000473.html https://www.kieranhealy.org/blog/archives/2003/06/26/surgical-strike +Redirect Permanent /blog/archives/000472.html https://www.kieranhealy.org/blog/archives/2003/06/24/false-necessity +Redirect Permanent /blog/archives/000471.html https://www.kieranhealy.org/blog/archives/2003/06/24/twenty-questions +Redirect Permanent /blog/archives/000470.html https://www.kieranhealy.org/blog/archives/2003/06/23/read-any-good-books-lately +Redirect Permanent /blog/archives/000469.html https://www.kieranhealy.org/blog/archives/2003/06/22/wmd +Redirect Permanent /blog/archives/000468.html https://www.kieranhealy.org/blog/archives/2003/06/22/as-any-fule-kno +Redirect Permanent /blog/archives/000467.html https://www.kieranhealy.org/blog/archives/2003/06/22/the-aspen-fire +Redirect Permanent /blog/archives/000466.html https://www.kieranhealy.org/blog/archives/2003/06/19/open-source +Redirect Permanent /blog/archives/000464.html https://www.kieranhealy.org/blog/archives/2003/06/18/whats-happening-in-iran +Redirect Permanent /blog/archives/000463.html https://www.kieranhealy.org/blog/archives/2003/06/17/moral-clarity +Redirect Permanent /blog/archives/000462.html https://www.kieranhealy.org/blog/archives/2003/06/17/pomes-penyeach +Redirect Permanent /blog/archives/000461.html https://www.kieranhealy.org/blog/archives/2003/06/16/drones-club +Redirect Permanent /blog/archives/000460.html https://www.kieranhealy.org/blog/archives/2003/06/16/not-geniuses +Redirect Permanent /blog/archives/000459.html https://www.kieranhealy.org/blog/archives/2003/06/16/introibo-ad-altare-dei +Redirect Permanent /blog/archives/000457.html https://www.kieranhealy.org/blog/archives/2003/06/14/two-views-of-society +Redirect Permanent /blog/archives/000456.html https://www.kieranhealy.org/blog/archives/2003/06/14/gilding-the-lily +Redirect Permanent /blog/archives/000455.html https://www.kieranhealy.org/blog/archives/2003/06/13/you-might-be-a-liberal-if +Redirect Permanent /blog/archives/000454.html https://www.kieranhealy.org/blog/archives/2003/06/12/bernard-williams +Redirect Permanent /blog/archives/000453.html https://www.kieranhealy.org/blog/archives/2003/06/12/invisible-adjunct-returns +Redirect Permanent /blog/archives/000451.html https://www.kieranhealy.org/blog/archives/2003/06/11/markets-and-cultural-diversity +Redirect Permanent /blog/archives/000450.html https://www.kieranhealy.org/blog/archives/2003/06/08/light-in-the-sky +Redirect Permanent /blog/archives/000449.html https://www.kieranhealy.org/blog/archives/2003/06/07/money-making-opportunity +Redirect Permanent /blog/archives/000448.html https://www.kieranhealy.org/blog/archives/2003/06/04/one-short +Redirect Permanent /blog/archives/000447.html https://www.kieranhealy.org/blog/archives/2003/06/04/your-new-weekly-lineup +Redirect Permanent /blog/archives/000446.html https://www.kieranhealy.org/blog/archives/2003/06/04/elusive-gains +Redirect Permanent /blog/archives/000445.html https://www.kieranhealy.org/blog/archives/2003/06/03/there-are-some-things-money-cant-buy +Redirect Permanent /blog/archives/000444.html https://www.kieranhealy.org/blog/archives/2003/06/02/chat-up-lines +Redirect Permanent /blog/archives/000442.html https://www.kieranhealy.org/blog/archives/2003/06/01/blood-and-guts +Redirect Permanent /blog/archives/000441.html https://www.kieranhealy.org/blog/archives/2003/05/31/the-secret-of-my-success +Redirect Permanent /blog/archives/000439.html https://www.kieranhealy.org/blog/archives/2003/05/30/scholar-bloggers +Redirect Permanent /blog/archives/000438.html https://www.kieranhealy.org/blog/archives/2003/05/29/weak-ties-and-all-that +Redirect Permanent /blog/archives/000437.html https://www.kieranhealy.org/blog/archives/2003/05/29/a-nasty-powerbook-problem +Redirect Permanent /blog/archives/000436.html https://www.kieranhealy.org/blog/archives/2003/05/27/risks-rewards-and-the-wage-bargain +Redirect Permanent /blog/archives/000435.html https://www.kieranhealy.org/blog/archives/2003/05/26/second-lowest-form-of-wit +Redirect Permanent /blog/archives/000434.html https://www.kieranhealy.org/blog/archives/2003/05/25/matrix-algebra +Redirect Permanent /blog/archives/000433.html https://www.kieranhealy.org/blog/archives/2003/05/24/the-eurovision +Redirect Permanent /blog/archives/000432.html https://www.kieranhealy.org/blog/archives/2003/05/23/friday-lunchtime-ideas +Redirect Permanent /blog/archives/000431.html https://www.kieranhealy.org/blog/archives/2003/05/22/all-the-news-thats +Redirect Permanent /blog/archives/000430.html https://www.kieranhealy.org/blog/archives/2003/05/21/one-year-old +Redirect Permanent /blog/archives/000429.html https://www.kieranhealy.org/blog/archives/2003/05/21/chalk-and-talk +Redirect Permanent /blog/archives/000428.html https://www.kieranhealy.org/blog/archives/2003/05/20/max-weber-call-your-office +Redirect Permanent /blog/archives/000427.html https://www.kieranhealy.org/blog/archives/2003/05/20/by-any-other-name +Redirect Permanent /blog/archives/000426.html https://www.kieranhealy.org/blog/archives/2003/05/18/left-vs-right-godzilla-vs-mothra-etc +Redirect Permanent /blog/archives/000425.html https://www.kieranhealy.org/blog/archives/2003/05/17/get-out-of-california-kid +Redirect Permanent /blog/archives/000424.html https://www.kieranhealy.org/blog/archives/2003/05/16/on-the-road-again +Redirect Permanent /blog/archives/000423.html https://www.kieranhealy.org/blog/archives/2003/05/15/my-thoughts-exactly +Redirect Permanent /blog/archives/000422.html https://www.kieranhealy.org/blog/archives/2003/05/15/what-do-you-mean-i-failed +Redirect Permanent /blog/archives/000421.html https://www.kieranhealy.org/blog/archives/2003/05/14/out-of-the-blue +Redirect Permanent /blog/archives/000420.html https://www.kieranhealy.org/blog/archives/2003/05/13/choose-wisely +Redirect Permanent /blog/archives/000419.html https://www.kieranhealy.org/blog/archives/2003/05/12/robust-action +Redirect Permanent /blog/archives/000418.html https://www.kieranhealy.org/blog/archives/2003/05/12/builders-defenders-etc +Redirect Permanent /blog/archives/000417.html https://www.kieranhealy.org/blog/archives/2003/05/11/krispy-kraziness +Redirect Permanent /blog/archives/000416.html https://www.kieranhealy.org/blog/archives/2003/05/10/hard-red-throbbing-america +Redirect Permanent /blog/archives/000415.html https://www.kieranhealy.org/blog/archives/2003/05/10/gender-again +Redirect Permanent /blog/archives/000414.html https://www.kieranhealy.org/blog/archives/2003/05/09/id-like-to-thank-the-academy +Redirect Permanent /blog/archives/000411.html https://www.kieranhealy.org/blog/archives/2003/05/09/economics-philosophy-gender +Redirect Permanent /blog/archives/000410.html https://www.kieranhealy.org/blog/archives/2003/05/08/if-theres-a-hell-below-were-all-gonna-go +Redirect Permanent /blog/archives/000409.html https://www.kieranhealy.org/blog/archives/2003/05/08/copycats +Redirect Permanent /blog/archives/000408.html https://www.kieranhealy.org/blog/archives/2003/05/07/bang +Redirect Permanent /blog/archives/000407.html https://www.kieranhealy.org/blog/archives/2003/05/07/marx-vs-weber +Redirect Permanent /blog/archives/000406.html https://www.kieranhealy.org/blog/archives/2003/05/07/law-vs-economics +Redirect Permanent /blog/archives/000405.html https://www.kieranhealy.org/blog/archives/2003/05/07/alter-ego +Redirect Permanent /blog/archives/000404.html https://www.kieranhealy.org/blog/archives/2003/05/06/oh-not-again +Redirect Permanent /blog/archives/000403.html https://www.kieranhealy.org/blog/archives/2003/05/05/take-a-chance-on-me +Redirect Permanent /blog/archives/000402.html https://www.kieranhealy.org/blog/archives/2003/05/05/na-gallglaigh +Redirect Permanent /blog/archives/000401.html https://www.kieranhealy.org/blog/archives/2003/05/04/movers-and-shakers +Redirect Permanent /blog/archives/000400.html https://www.kieranhealy.org/blog/archives/2003/05/02/blogger-gets-taste-of-power +Redirect Permanent /blog/archives/000399.html https://www.kieranhealy.org/blog/archives/2003/05/02/blogger-gets-taste-of-power +Redirect Permanent /blog/archives/000398.html https://www.kieranhealy.org/blog/archives/2003/05/01/hats-off-to-d-squared +Redirect Permanent /blog/archives/000397.html https://www.kieranhealy.org/blog/archives/2003/05/01/muahahahaha +Redirect Permanent /blog/archives/000396.html https://www.kieranhealy.org/blog/archives/2003/05/01/paths-to-neoliberalism +Redirect Permanent /blog/archives/000394.html https://www.kieranhealy.org/blog/archives/2003/05/01/marxs-revenge +Redirect Permanent /blog/archives/000393.html https://www.kieranhealy.org/blog/archives/2003/05/01/bushs-foreign-policy-attacked +Redirect Permanent /blog/archives/000392.html https://www.kieranhealy.org/blog/archives/2003/04/29/brainstorm-in-a-teacup +Redirect Permanent /blog/archives/000391.html https://www.kieranhealy.org/blog/archives/2003/04/29/science-as-a-vocation +Redirect Permanent /blog/archives/000390.html https://www.kieranhealy.org/blog/archives/2003/04/28/bleah +Redirect Permanent /blog/archives/000389.html https://www.kieranhealy.org/blog/archives/2003/04/24/were-gonna-have-a-problem-here +Redirect Permanent /blog/archives/000388.html https://www.kieranhealy.org/blog/archives/2003/04/23/santorum +Redirect Permanent /blog/archives/000387.html https://www.kieranhealy.org/blog/archives/2003/04/23/newt-and-such +Redirect Permanent /blog/archives/000386.html https://www.kieranhealy.org/blog/archives/2003/04/23/variations-on-a-theme +Redirect Permanent /blog/archives/000385.html https://www.kieranhealy.org/blog/archives/2003/04/22/scholar-vs-blogger +Redirect Permanent /blog/archives/000384.html https://www.kieranhealy.org/blog/archives/2003/04/21/academedia +Redirect Permanent /blog/archives/000383.html https://www.kieranhealy.org/blog/archives/2003/04/21/nina-simone +Redirect Permanent /blog/archives/000382.html https://www.kieranhealy.org/blog/archives/2003/04/20/apt-quotations-ii +Redirect Permanent /blog/archives/000381.html https://www.kieranhealy.org/blog/archives/2003/04/20/apt-quotations +Redirect Permanent /blog/archives/000380.html https://www.kieranhealy.org/blog/archives/2003/04/19/calpundit +Redirect Permanent /blog/archives/000379.html https://www.kieranhealy.org/blog/archives/2003/04/19/freedom-markets +Redirect Permanent /blog/archives/000378.html https://www.kieranhealy.org/blog/archives/2003/04/19/gender-humbug-ii +Redirect Permanent /blog/archives/000377.html https://www.kieranhealy.org/blog/archives/2003/04/18/gender-humbug +Redirect Permanent /blog/archives/000376.html https://www.kieranhealy.org/blog/archives/2003/04/17/state-sponsored-terror +Redirect Permanent /blog/archives/000374.html https://www.kieranhealy.org/blog/archives/2003/04/16/new-gmos +Redirect Permanent /blog/archives/000375.html https://www.kieranhealy.org/blog/archives/2003/04/16/stares-at-tv-open-mouthed +Redirect Permanent /blog/archives/000373.html https://www.kieranhealy.org/blog/archives/2003/04/15/voting-systems +Redirect Permanent /blog/archives/000372.html https://www.kieranhealy.org/blog/archives/2003/04/15/a-useful-iq-test +Redirect Permanent /blog/archives/000371.html https://www.kieranhealy.org/blog/archives/2003/04/15/tax-day +Redirect Permanent /blog/archives/000370.html https://www.kieranhealy.org/blog/archives/2003/04/14/pascal-on-tyranny +Redirect Permanent /blog/archives/000369.html https://www.kieranhealy.org/blog/archives/2003/04/14/ignatz-throws-a-brick +Redirect Permanent /blog/archives/000368.html https://www.kieranhealy.org/blog/archives/2003/04/14/lott-again +Redirect Permanent /blog/archives/000367.html https://www.kieranhealy.org/blog/archives/2003/04/14/history-lesson +Redirect Permanent /blog/archives/000366.html https://www.kieranhealy.org/blog/archives/2003/04/14/paging-gender-scholars +Redirect Permanent /blog/archives/000365.html https://www.kieranhealy.org/blog/archives/2003/04/14/worth-a-thousand-words +Redirect Permanent /blog/archives/000364.html https://www.kieranhealy.org/blog/archives/2003/04/11/dirty-minds +Redirect Permanent /blog/archives/000363.html https://www.kieranhealy.org/blog/archives/2003/04/11/its-called-sampling-on-the-dependent-variable +Redirect Permanent /blog/archives/000362.html https://www.kieranhealy.org/blog/archives/2003/04/10/innately-flexible +Redirect Permanent /blog/archives/000361.html https://www.kieranhealy.org/blog/archives/2003/04/10/three-quarks +Redirect Permanent /blog/archives/000360.html https://www.kieranhealy.org/blog/archives/2003/04/10/drezner-aghast-movie-at-11 +Redirect Permanent /blog/archives/000359.html https://www.kieranhealy.org/blog/archives/2003/04/08/battleground-god +Redirect Permanent /blog/archives/000358.html https://www.kieranhealy.org/blog/archives/2003/04/08/could-have-been-worse +Redirect Permanent /blog/archives/000357.html https://www.kieranhealy.org/blog/archives/2003/04/08/an-irish-ritual +Redirect Permanent /blog/archives/000356.html https://www.kieranhealy.org/blog/archives/2003/04/07/insta-reversal +Redirect Permanent /blog/archives/000355.html https://www.kieranhealy.org/blog/archives/2003/04/07/how-significant-is-the-anti-war-movement +Redirect Permanent /blog/archives/000354.html https://www.kieranhealy.org/blog/archives/2003/04/07/pulitzers +Redirect Permanent /blog/archives/000353.html https://www.kieranhealy.org/blog/archives/2003/04/07/the-hand-of-god +Redirect Permanent /blog/archives/000352.html https://www.kieranhealy.org/blog/archives/2003/04/06/betrayed-by-consumerism +Redirect Permanent /blog/archives/000351.html https://www.kieranhealy.org/blog/archives/2003/04/06/what-a-shower-of +Redirect Permanent /blog/archives/000350.html https://www.kieranhealy.org/blog/archives/2003/04/01/traffic-report +Redirect Permanent /blog/archives/000349.html https://www.kieranhealy.org/blog/archives/2003/03/31/remind-me +Redirect Permanent /blog/archives/000347.html https://www.kieranhealy.org/blog/archives/2003/03/31/mixing-it-up +Redirect Permanent /blog/archives/000346.html https://www.kieranhealy.org/blog/archives/2003/03/30/english-as-she-is-wrote +Redirect Permanent /blog/archives/000345.html https://www.kieranhealy.org/blog/archives/2003/03/29/what-is-a-child +Redirect Permanent /blog/archives/000344.html https://www.kieranhealy.org/blog/archives/2003/03/29/clean-hands-dirty-hands +Redirect Permanent /blog/archives/000343.html https://www.kieranhealy.org/blog/archives/2003/03/28/aaron-brown-transcript-fun-ii +Redirect Permanent /blog/archives/000342.html https://www.kieranhealy.org/blog/archives/2003/03/28/a-argh +Redirect Permanent /blog/archives/000341.html https://www.kieranhealy.org/blog/archives/2003/03/27/things-i-cant-be-wrong-about +Redirect Permanent /blog/archives/000340.html https://www.kieranhealy.org/blog/archives/2003/03/26/the-persistence-of-the-old-regime +Redirect Permanent /blog/archives/000339.html https://www.kieranhealy.org/blog/archives/2003/03/26/new-in-print +Redirect Permanent /blog/archives/000338.html https://www.kieranhealy.org/blog/archives/2003/03/26/heavy-traffic-ii +Redirect Permanent /blog/archives/000336.html https://www.kieranhealy.org/blog/archives/2003/03/25/food-for-cynics +Redirect Permanent /blog/archives/000335.html https://www.kieranhealy.org/blog/archives/2003/03/25/between-facts-and-norms +Redirect Permanent /blog/archives/000334.html https://www.kieranhealy.org/blog/archives/2003/03/25/a-short-telegram +Redirect Permanent /blog/archives/000333.html https://www.kieranhealy.org/blog/archives/2003/03/25/heavy-traffic +Redirect Permanent /blog/archives/000332.html https://www.kieranhealy.org/blog/archives/2003/03/24/cnn-gets-a-dose-of-itself +Redirect Permanent /blog/archives/000331.html https://www.kieranhealy.org/blog/archives/2003/03/23/new-books-on-the-list +Redirect Permanent /blog/archives/000330.html https://www.kieranhealy.org/blog/archives/2003/03/23/editorial-judgments +Redirect Permanent /blog/archives/000329.html https://www.kieranhealy.org/blog/archives/2003/03/23/the-honeymoons-over +Redirect Permanent /blog/archives/000327.html https://www.kieranhealy.org/blog/archives/2003/03/20/san-francisco-protests +Redirect Permanent /blog/archives/000326.html https://www.kieranhealy.org/blog/archives/2003/03/20/self-defense +Redirect Permanent /blog/archives/000325.html https://www.kieranhealy.org/blog/archives/2003/03/19/war-begins +Redirect Permanent /blog/archives/000324.html https://www.kieranhealy.org/blog/archives/2003/03/19/live-from-san-francisco +Redirect Permanent /blog/archives/000323.html https://www.kieranhealy.org/blog/archives/2003/03/16/media-coverage +Redirect Permanent /blog/archives/000322.html https://www.kieranhealy.org/blog/archives/2003/03/13/teeny-tech-meets-tiny-norm +Redirect Permanent /blog/archives/000321.html https://www.kieranhealy.org/blog/archives/2003/03/12/blogging-sociologists +Redirect Permanent /blog/archives/000320.html https://www.kieranhealy.org/blog/archives/2003/03/11/strategic-analysis +Redirect Permanent /blog/archives/000319.html https://www.kieranhealy.org/blog/archives/2003/03/11/reason-as-religion +Redirect Permanent /blog/archives/000318.html https://www.kieranhealy.org/blog/archives/2003/03/11/freedom-kissin-in-the-usa +Redirect Permanent /blog/archives/000317.html https://www.kieranhealy.org/blog/archives/2003/03/11/age-related +Redirect Permanent /blog/archives/000316.html https://www.kieranhealy.org/blog/archives/2003/03/10/more-traitors +Redirect Permanent /blog/archives/000315.html https://www.kieranhealy.org/blog/archives/2003/03/10/consultant-for-evil +Redirect Permanent /blog/archives/000314.html https://www.kieranhealy.org/blog/archives/2003/03/09/target-acquired +Redirect Permanent /blog/archives/000313.html https://www.kieranhealy.org/blog/archives/2003/03/09/busy +Redirect Permanent /blog/archives/000312.html https://www.kieranhealy.org/blog/archives/2003/03/06/the-press-conference +Redirect Permanent /blog/archives/000311.html https://www.kieranhealy.org/blog/archives/2003/03/06/on-pious-hypocrisy +Redirect Permanent /blog/archives/000310.html https://www.kieranhealy.org/blog/archives/2003/03/06/chaos-at-home-and-abroad +Redirect Permanent /blog/archives/000309.html https://www.kieranhealy.org/blog/archives/2003/03/06/a-few-quick-ones +Redirect Permanent /blog/archives/000308.html https://www.kieranhealy.org/blog/archives/2003/03/04/rapid-development +Redirect Permanent /blog/archives/000307.html https://www.kieranhealy.org/blog/archives/2003/03/03/dept-of-dangling-modifiers +Redirect Permanent /blog/archives/000306.html https://www.kieranhealy.org/blog/archives/2003/03/02/i-am-of-ireland +Redirect Permanent /blog/archives/000305.html https://www.kieranhealy.org/blog/archives/2003/03/01/liberal-hawk-nightmares +Redirect Permanent /blog/archives/000304.html https://www.kieranhealy.org/blog/archives/2003/03/01/strategy-and-realism +Redirect Permanent /blog/archives/000303.html https://www.kieranhealy.org/blog/archives/2003/02/28/the-blimp-menace +Redirect Permanent /blog/archives/000302.html https://www.kieranhealy.org/blog/archives/2003/02/28/your-cheatin-hormone +Redirect Permanent /blog/archives/000301.html https://www.kieranhealy.org/blog/archives/2003/02/27/this-is-your-brain-on-drugs +Redirect Permanent /blog/archives/000300.html https://www.kieranhealy.org/blog/archives/2003/02/25/sauce-for-the-kettle +Redirect Permanent /blog/archives/000298.html https://www.kieranhealy.org/blog/archives/2003/02/25/aint-ism +Redirect Permanent /blog/archives/000297.html https://www.kieranhealy.org/blog/archives/2003/02/24/visions-and-revisions-again +Redirect Permanent /blog/archives/000296.html https://www.kieranhealy.org/blog/archives/2003/02/23/robert-k-merton-1910-2003 +Redirect Permanent /blog/archives/000295.html https://www.kieranhealy.org/blog/archives/2003/02/23/spiffy-tech-ii +Redirect Permanent /blog/archives/000294.html https://www.kieranhealy.org/blog/archives/2003/02/22/spiffy-tech +Redirect Permanent /blog/archives/000292.html https://www.kieranhealy.org/blog/archives/2003/02/21/thats-just-ancient-history +Redirect Permanent /blog/archives/000291.html https://www.kieranhealy.org/blog/archives/2003/02/21/smart-bomb +Redirect Permanent /blog/archives/000290.html https://www.kieranhealy.org/blog/archives/2003/02/20/public-service-announcement +Redirect Permanent /blog/archives/000289.html https://www.kieranhealy.org/blog/archives/2003/02/19/close-reading +Redirect Permanent /blog/archives/000288.html https://www.kieranhealy.org/blog/archives/2003/02/19/oh-not-another-one +Redirect Permanent /blog/archives/000287.html https://www.kieranhealy.org/blog/archives/2003/02/19/bite-size-items +Redirect Permanent /blog/archives/000286.html https://www.kieranhealy.org/blog/archives/2003/02/17/metaphysical-fame +Redirect Permanent /blog/archives/000285.html https://www.kieranhealy.org/blog/archives/2003/02/17/speak-memory +Redirect Permanent /blog/archives/000284.html https://www.kieranhealy.org/blog/archives/2003/02/16/biking +Redirect Permanent /blog/archives/000283.html https://www.kieranhealy.org/blog/archives/2003/02/16/dealing-with-philosophers +Redirect Permanent /blog/archives/000282.html https://www.kieranhealy.org/blog/archives/2003/02/15/collective-action +Redirect Permanent /blog/archives/000281.html https://www.kieranhealy.org/blog/archives/2003/02/14/the-blogger-to-his-valentine +Redirect Permanent /blog/archives/000280.html https://www.kieranhealy.org/blog/archives/2003/02/13/war-talk +Redirect Permanent /blog/archives/000279.html https://www.kieranhealy.org/blog/archives/2003/02/13/in-other-news-ii +Redirect Permanent /blog/archives/000278.html https://www.kieranhealy.org/blog/archives/2003/02/13/how-you-play-the-game +Redirect Permanent /blog/archives/000277.html https://www.kieranhealy.org/blog/archives/2003/02/12/in-other-news +Redirect Permanent /blog/archives/000276.html https://www.kieranhealy.org/blog/archives/2003/02/12/problems +Redirect Permanent /blog/archives/000271.html https://www.kieranhealy.org/blog/archives/2003/02/12/taking-it-for-granted +Redirect Permanent /blog/archives/000275.html https://www.kieranhealy.org/blog/archives/2003/02/12/sharing-birthdays +Redirect Permanent /blog/archives/000274.html https://www.kieranhealy.org/blog/archives/2003/02/12/everybodys-moving +Redirect Permanent /blog/archives/000273.html https://www.kieranhealy.org/blog/archives/2003/02/12/francophobia +Redirect Permanent /blog/archives/000272.html https://www.kieranhealy.org/blog/archives/2003/02/11/the-hermeneutics-of-terror +Redirect Permanent /blog/archives/000270.html https://www.kieranhealy.org/blog/archives/2003/02/10/in-with-a-bullet +Redirect Permanent /blog/archives/000269.html https://www.kieranhealy.org/blog/archives/2003/02/09/politics-as-a-vocation +Redirect Permanent /blog/archives/000268.html https://www.kieranhealy.org/blog/archives/2003/02/08/first-new-post +Redirect Permanent /blog/archives/000267.html https://www.kieranhealy.org/blog/archives/2003/02/07/question +Redirect Permanent /blog/archives/000266.html https://www.kieranhealy.org/blog/archives/2003/02/07/counter-intelligence +Redirect Permanent /blog/archives/000265.html https://www.kieranhealy.org/blog/archives/2003/02/07/democracy-in-action +Redirect Permanent /blog/archives/000264.html https://www.kieranhealy.org/blog/archives/2003/02/06/objections-to-the-labor-theory-of-value-432 +Redirect Permanent /blog/archives/000263.html https://www.kieranhealy.org/blog/archives/2003/02/06/the-dead-pool +Redirect Permanent /blog/archives/000262.html https://www.kieranhealy.org/blog/archives/2003/02/05/single-malt-bile +Redirect Permanent /blog/archives/000261.html https://www.kieranhealy.org/blog/archives/2003/02/05/audammit +Redirect Permanent /blog/archives/000260.html https://www.kieranhealy.org/blog/archives/2003/02/03/rorschach-test +Redirect Permanent /blog/archives/000259.html https://www.kieranhealy.org/blog/archives/2003/02/01/big-brother-is-watching-you +Redirect Permanent /blog/archives/000258.html https://www.kieranhealy.org/blog/archives/2003/02/01/the-high-untrespassed-sanctity-of-space +Redirect Permanent /blog/archives/000257.html https://www.kieranhealy.org/blog/archives/2003/02/01/whatever +Redirect Permanent /blog/archives/000256.html https://www.kieranhealy.org/blog/archives/2003/02/01/columbia +Redirect Permanent /blog/archives/000255.html https://www.kieranhealy.org/blog/archives/2003/02/01/lott-again +Redirect Permanent /blog/archives/000254.html https://www.kieranhealy.org/blog/archives/2003/01/31/and-so-to-bed +Redirect Permanent /blog/archives/000253.html https://www.kieranhealy.org/blog/archives/2003/01/30/costs-and-claims +Redirect Permanent /blog/archives/000252.html https://www.kieranhealy.org/blog/archives/2003/01/29/reverse-tinkerbell-example +Redirect Permanent /blog/archives/000251.html https://www.kieranhealy.org/blog/archives/2003/01/29/the-ecology-of-open-source-software +Redirect Permanent /blog/archives/000250.html https://www.kieranhealy.org/blog/archives/2003/01/29/blackwhite-wealth-gap +Redirect Permanent /blog/archives/000249.html https://www.kieranhealy.org/blog/archives/2003/01/29/in-small-things-and-large +Redirect Permanent /blog/archives/000248.html https://www.kieranhealy.org/blog/archives/2003/01/27/bark-bark +Redirect Permanent /blog/archives/000247.html https://www.kieranhealy.org/blog/archives/2003/01/26/et-in-canadia-alter-ego +Redirect Permanent /blog/archives/000246.html https://www.kieranhealy.org/blog/archives/2003/01/25/inside-the-firm +Redirect Permanent /blog/archives/000245.html https://www.kieranhealy.org/blog/archives/2003/01/25/the-sql-worm +Redirect Permanent /blog/archives/000244.html https://www.kieranhealy.org/blog/archives/2003/01/24/more-on-dgus +Redirect Permanent /blog/archives/000243.html https://www.kieranhealy.org/blog/archives/2003/01/23/when-i-was-a-young-man-i-carried-my-pack +Redirect Permanent /blog/archives/000242.html https://www.kieranhealy.org/blog/archives/2003/01/23/a-lott-of-old-rosh +Redirect Permanent /blog/archives/000241.html https://www.kieranhealy.org/blog/archives/2003/01/23/mind-the-gap +Redirect Permanent /blog/archives/000240.html https://www.kieranhealy.org/blog/archives/2003/01/22/that-blissful-hour +Redirect Permanent /blog/archives/000239.html https://www.kieranhealy.org/blog/archives/2003/01/22/evil-scientist-dreams +Redirect Permanent /blog/archives/000238.html https://www.kieranhealy.org/blog/archives/2003/01/21/gawkers-dirty-secret +Redirect Permanent /blog/archives/000237.html https://www.kieranhealy.org/blog/archives/2003/01/20/talking-points +Redirect Permanent /blog/archives/000236.html https://www.kieranhealy.org/blog/archives/2003/01/20/the-length-of-two-lives +Redirect Permanent /blog/archives/000234.html https://www.kieranhealy.org/blog/archives/2003/01/19/funny-ha-ha +Redirect Permanent /blog/archives/000233.html https://www.kieranhealy.org/blog/archives/2003/01/18/chancellor-clinton +Redirect Permanent /blog/archives/000232.html https://www.kieranhealy.org/blog/archives/2003/01/18/anti-war-protests +Redirect Permanent /blog/archives/000231.html https://www.kieranhealy.org/blog/archives/2003/01/16/mr-happy +Redirect Permanent /blog/archives/000230.html https://www.kieranhealy.org/blog/archives/2003/01/16/sacked +Redirect Permanent /blog/archives/000229.html https://www.kieranhealy.org/blog/archives/2003/01/15/popper +Redirect Permanent /blog/archives/000228.html https://www.kieranhealy.org/blog/archives/2003/01/15/eldred-vs-ashcroft +Redirect Permanent /blog/archives/000227.html https://www.kieranhealy.org/blog/archives/2003/01/15/two-religious-items +Redirect Permanent /blog/archives/000226.html https://www.kieranhealy.org/blog/archives/2003/01/13/how-peculiar +Redirect Permanent /blog/archives/000225.html https://www.kieranhealy.org/blog/archives/2003/01/13/blood-suckers +Redirect Permanent /blog/archives/000224.html https://www.kieranhealy.org/blog/archives/2003/01/10/ladybird-books +Redirect Permanent /blog/archives/000223.html https://www.kieranhealy.org/blog/archives/2003/01/09/preemptive-policing +Redirect Permanent /blog/archives/000222.html https://www.kieranhealy.org/blog/archives/2003/01/08/trent-lotte +Redirect Permanent /blog/archives/000221.html https://www.kieranhealy.org/blog/archives/2003/01/08/race-and-reality +Redirect Permanent /blog/archives/000220.html https://www.kieranhealy.org/blog/archives/2003/01/08/marketing-the-tax-cut +Redirect Permanent /blog/archives/000219.html https://www.kieranhealy.org/blog/archives/2003/01/07/anglosphere-iii-and-final +Redirect Permanent /blog/archives/000218.html https://www.kieranhealy.org/blog/archives/2003/01/06/character-assassin-for-hire +Redirect Permanent /blog/archives/000217.html https://www.kieranhealy.org/blog/archives/2003/01/06/anglosphere-ii +Redirect Permanent /blog/archives/000216.html https://www.kieranhealy.org/blog/archives/2003/01/06/anglosphere +Redirect Permanent /blog/archives/000215.html https://www.kieranhealy.org/blog/archives/2003/01/04/pop-quiz-answers +Redirect Permanent /blog/archives/000214.html https://www.kieranhealy.org/blog/archives/2003/01/04/empty-questions +Redirect Permanent /blog/archives/000213.html https://www.kieranhealy.org/blog/archives/2003/01/03/sociological-theory +Redirect Permanent /blog/archives/000212.html https://www.kieranhealy.org/blog/archives/2003/01/03/tandem-novum-quidem-et-inauditum-consilium-capit +Redirect Permanent /blog/archives/000211.html https://www.kieranhealy.org/blog/archives/2003/01/02/political-state-report +Redirect Permanent /blog/archives/000210.html https://www.kieranhealy.org/blog/archives/2003/01/01/another-one +Redirect Permanent /blog/archives/000209.html https://www.kieranhealy.org/blog/archives/2003/01/01/the-best-of-me +Redirect Permanent /blog/archives/000208.html https://www.kieranhealy.org/blog/archives/2003/01/01/digby-goes-up +Redirect Permanent /blog/archives/000207.html https://www.kieranhealy.org/blog/archives/2002/12/28/internet-diffusion +Redirect Permanent /blog/archives/000206.html https://www.kieranhealy.org/blog/archives/2002/12/28/great-headline +Redirect Permanent /blog/archives/000205.html https://www.kieranhealy.org/blog/archives/2002/12/27/precautionary-principles-and-smallpox +Redirect Permanent /blog/archives/000204.html https://www.kieranhealy.org/blog/archives/2002/12/27/d-squared-on-race-in-america +Redirect Permanent /blog/archives/000203.html https://www.kieranhealy.org/blog/archives/2002/12/27/quintessence-of-trivia +Redirect Permanent /blog/archives/000202.html https://www.kieranhealy.org/blog/archives/2002/12/26/smallpox-uncertainties +Redirect Permanent /blog/archives/000201.html https://www.kieranhealy.org/blog/archives/2002/12/22/the-golden-apples-of-the-sun +Redirect Permanent /blog/archives/000200.html https://www.kieranhealy.org/blog/archives/2002/12/19/ringoism +Redirect Permanent /blog/archives/000199.html https://www.kieranhealy.org/blog/archives/2002/12/18/to-boldly-go +Redirect Permanent /blog/archives/000197.html https://www.kieranhealy.org/blog/archives/2002/12/18/qualia +Redirect Permanent /blog/archives/000196.html https://www.kieranhealy.org/blog/archives/2002/12/18/koufax +Redirect Permanent /blog/archives/000195.html https://www.kieranhealy.org/blog/archives/2002/12/17/grammar-round-up +Redirect Permanent /blog/archives/000194.html https://www.kieranhealy.org/blog/archives/2002/12/17/open-wide +Redirect Permanent /blog/archives/000193.html https://www.kieranhealy.org/blog/archives/2002/12/17/cuts-both-ways +Redirect Permanent /blog/archives/000192.html https://www.kieranhealy.org/blog/archives/2002/12/15/the-right-remark +Redirect Permanent /blog/archives/000191.html https://www.kieranhealy.org/blog/archives/2002/12/14/sign-me-up +Redirect Permanent /blog/archives/000190.html https://www.kieranhealy.org/blog/archives/2002/12/14/bach +Redirect Permanent /blog/archives/000189.html https://www.kieranhealy.org/blog/archives/2002/12/14/philosophy-discovers-society +Redirect Permanent /blog/archives/000188.html https://www.kieranhealy.org/blog/archives/2002/12/13/lynching +Redirect Permanent /blog/archives/000187.html https://www.kieranhealy.org/blog/archives/2002/12/13/anurlan-long-aprovincebe +Redirect Permanent /blog/archives/000186.html https://www.kieranhealy.org/blog/archives/2002/12/12/names +Redirect Permanent /blog/archives/000185.html https://www.kieranhealy.org/blog/archives/2002/12/12/auditing-employer-discrimination +Redirect Permanent /blog/archives/000184.html https://www.kieranhealy.org/blog/archives/2002/12/12/ah-beaver-lodge +Redirect Permanent /blog/archives/000183.html https://www.kieranhealy.org/blog/archives/2002/12/12/argumentum-ad +Redirect Permanent /blog/archives/000182.html https://www.kieranhealy.org/blog/archives/2002/12/12/plus-ca-change +Redirect Permanent /blog/archives/000181.html https://www.kieranhealy.org/blog/archives/2002/12/11/ok-i-laughed +Redirect Permanent /blog/archives/000180.html https://www.kieranhealy.org/blog/archives/2002/12/11/opposites-intact +Redirect Permanent /blog/archives/000179.html https://www.kieranhealy.org/blog/archives/2002/12/11/sociological +Redirect Permanent /blog/archives/000178.html https://www.kieranhealy.org/blog/archives/2002/12/10/unto-this-last +Redirect Permanent /blog/archives/000177.html https://www.kieranhealy.org/blog/archives/2002/12/09/do-you-reject-the-devil-and-all-his-works +Redirect Permanent /blog/archives/000176.html https://www.kieranhealy.org/blog/archives/2002/12/09/laurie-in-the-blogosphere +Redirect Permanent /blog/archives/000175.html https://www.kieranhealy.org/blog/archives/2002/12/07/market-discipline-and-organizational-responsibility +Redirect Permanent /blog/archives/000174.html https://www.kieranhealy.org/blog/archives/2002/12/04/diiulio-opens-lid-gets-himself-canned +Redirect Permanent /blog/archives/000173.html https://www.kieranhealy.org/blog/archives/2002/12/04/ka-chunk +Redirect Permanent /blog/archives/000172.html https://www.kieranhealy.org/blog/archives/2002/12/04/harry-potter-v +Redirect Permanent /blog/archives/000171.html https://www.kieranhealy.org/blog/archives/2002/12/03/sociology-sneaks-in +Redirect Permanent /blog/archives/000170.html https://www.kieranhealy.org/blog/archives/2002/12/01/redeye-madness +Redirect Permanent /blog/archives/000169.html https://www.kieranhealy.org/blog/archives/2002/11/29/i-switched +Redirect Permanent /blog/archives/000168.html https://www.kieranhealy.org/blog/archives/2002/11/27/scribble-scribble-scribble +Redirect Permanent /blog/archives/000167.html https://www.kieranhealy.org/blog/archives/2002/11/27/keats-and-chapman +Redirect Permanent /blog/archives/000166.html https://www.kieranhealy.org/blog/archives/2002/11/26/harry-potter-pt-iii +Redirect Permanent /blog/archives/000165.html https://www.kieranhealy.org/blog/archives/2002/11/26/the-network-of-ideas +Redirect Permanent /blog/archives/000164.html https://www.kieranhealy.org/blog/archives/2002/11/25/creative-excuse +Redirect Permanent /blog/archives/000163.html https://www.kieranhealy.org/blog/archives/2002/11/25/oz-blog +Redirect Permanent /blog/archives/000162.html https://www.kieranhealy.org/blog/archives/2002/11/24/tinker-tailor +Redirect Permanent /blog/archives/000161.html https://www.kieranhealy.org/blog/archives/2002/11/24/moonlighting +Redirect Permanent /blog/archives/000160.html https://www.kieranhealy.org/blog/archives/2002/11/22/when-he-was-funny +Redirect Permanent /blog/archives/000159.html https://www.kieranhealy.org/blog/archives/2002/11/20/yerp +Redirect Permanent /blog/archives/000158.html https://www.kieranhealy.org/blog/archives/2002/11/20/harry-potter-again +Redirect Permanent /blog/archives/000157.html https://www.kieranhealy.org/blog/archives/2002/11/18/varia +Redirect Permanent /blog/archives/000156.html https://www.kieranhealy.org/blog/archives/2002/11/15/the-majesty-of-the-law +Redirect Permanent /blog/archives/000155.html https://www.kieranhealy.org/blog/archives/2002/11/14/ta-rax-rum +Redirect Permanent /blog/archives/000154.html https://www.kieranhealy.org/blog/archives/2002/11/14/political-sociology +Redirect Permanent /blog/archives/000153.html https://www.kieranhealy.org/blog/archives/2002/11/12/never-mind-the-volokhs +Redirect Permanent /blog/archives/000152.html https://www.kieranhealy.org/blog/archives/2002/11/12/cash-for-kidneys +Redirect Permanent /blog/archives/000151.html https://www.kieranhealy.org/blog/archives/2002/11/12/attack-of-the-clones-indeed +Redirect Permanent /blog/archives/000150.html https://www.kieranhealy.org/blog/archives/2002/11/11/machine-dreams-again +Redirect Permanent /blog/archives/000149.html https://www.kieranhealy.org/blog/archives/2002/11/11/the-chickenhawk-that-didnt-bark +Redirect Permanent /blog/archives/000148.html https://www.kieranhealy.org/blog/archives/2002/11/11/political-philosophy +Redirect Permanent /blog/archives/000147.html https://www.kieranhealy.org/blog/archives/2002/11/09/moral-luck +Redirect Permanent /blog/archives/000146.html https://www.kieranhealy.org/blog/archives/2002/11/08/and-on-balance +Redirect Permanent /blog/archives/000145.html https://www.kieranhealy.org/blog/archives/2002/11/06/busy-busy +Redirect Permanent /blog/archives/000144.html https://www.kieranhealy.org/blog/archives/2002/11/01/if-i-were-you +Redirect Permanent /blog/archives/000143.html https://www.kieranhealy.org/blog/archives/2002/11/01/what-is-the-stars +Redirect Permanent /blog/archives/000142.html https://www.kieranhealy.org/blog/archives/2002/10/31/cooling-the-mark-out +Redirect Permanent /blog/archives/000141.html https://www.kieranhealy.org/blog/archives/2002/10/31/strawman-chickenhawk +Redirect Permanent /blog/archives/000140.html https://www.kieranhealy.org/blog/archives/2002/10/30/stand-down-vs-gear-up +Redirect Permanent /blog/archives/000139.html https://www.kieranhealy.org/blog/archives/2002/10/29/philosophical-gourmet +Redirect Permanent /blog/archives/000138.html https://www.kieranhealy.org/blog/archives/2002/10/28/playing-with-the-wrong-team +Redirect Permanent /blog/archives/000137.html https://www.kieranhealy.org/blog/archives/2002/10/28/well-heres-my-answer +Redirect Permanent /blog/archives/000136.html https://www.kieranhealy.org/blog/archives/2002/10/28/shooting-at-the-university-of-arizona +Redirect Permanent /blog/archives/000135.html https://www.kieranhealy.org/blog/archives/2002/10/27/unanticipated-solution +Redirect Permanent /blog/archives/000134.html https://www.kieranhealy.org/blog/archives/2002/10/27/causal-and-moral-responsibility +Redirect Permanent /blog/archives/000133.html https://www.kieranhealy.org/blog/archives/2002/10/25/two-posters +Redirect Permanent /blog/archives/000132.html https://www.kieranhealy.org/blog/archives/2002/10/24/the-blame-of-those-ye-better +Redirect Permanent /blog/archives/000131.html https://www.kieranhealy.org/blog/archives/2002/10/23/theres-antimony-arsenic-aluminum +Redirect Permanent /blog/archives/000130.html https://www.kieranhealy.org/blog/archives/2002/10/23/all-sniper-all-the-time +Redirect Permanent /blog/archives/000129.html https://www.kieranhealy.org/blog/archives/2002/10/23/fingerprinting +Redirect Permanent /blog/archives/000128.html https://www.kieranhealy.org/blog/archives/2002/10/19/error-dinosaur-not-found +Redirect Permanent /blog/archives/000127.html https://www.kieranhealy.org/blog/archives/2002/10/19/i-like-your-manifesto-put-it-to-the-testo +Redirect Permanent /blog/archives/000126.html https://www.kieranhealy.org/blog/archives/2002/10/19/radical-goals +Redirect Permanent /blog/archives/000125.html https://www.kieranhealy.org/blog/archives/2002/10/18/swaying-the-jury +Redirect Permanent /blog/archives/000124.html https://www.kieranhealy.org/blog/archives/2002/10/17/khs-weblog-reveals-secret-wrd-program +Redirect Permanent /blog/archives/000123.html https://www.kieranhealy.org/blog/archives/2002/10/16/war-games +Redirect Permanent /blog/archives/000122.html https://www.kieranhealy.org/blog/archives/2002/10/16/david-lewis +Redirect Permanent /blog/archives/000121.html https://www.kieranhealy.org/blog/archives/2002/10/15/no-more-like-this-please +Redirect Permanent /blog/archives/000120.html https://www.kieranhealy.org/blog/archives/2002/10/14/what-would-happen-if-everyone-sung-that +Redirect Permanent /blog/archives/000119.html https://www.kieranhealy.org/blog/archives/2002/10/11/oh-dear +Redirect Permanent /blog/archives/000118.html https://www.kieranhealy.org/blog/archives/2002/10/10/economics-nobel-part-ii +Redirect Permanent /blog/archives/000117.html https://www.kieranhealy.org/blog/archives/2002/10/09/kahnemans-nobel +Redirect Permanent /blog/archives/000116.html https://www.kieranhealy.org/blog/archives/2002/10/09/fsk-fsk-fsk +Redirect Permanent /blog/archives/000115.html https://www.kieranhealy.org/blog/archives/2002/10/08/more-on-the-north +Redirect Permanent /blog/archives/000114.html https://www.kieranhealy.org/blog/archives/2002/10/08/robot-wars +Redirect Permanent /blog/archives/000113.html https://www.kieranhealy.org/blog/archives/2002/10/07/easy-targets +Redirect Permanent /blog/archives/000112.html https://www.kieranhealy.org/blog/archives/2002/10/07/dept-of-soup-and-forks +Redirect Permanent /blog/archives/000111.html https://www.kieranhealy.org/blog/archives/2002/10/06/news-from-the-domestic-front +Redirect Permanent /blog/archives/000110.html https://www.kieranhealy.org/blog/archives/2002/10/06/pining-for-jersey +Redirect Permanent /blog/archives/000109.html https://www.kieranhealy.org/blog/archives/2002/10/04/a-great-piece-of-free-software +Redirect Permanent /blog/archives/000108.html https://www.kieranhealy.org/blog/archives/2002/10/02/this-is-so-cool +Redirect Permanent /blog/archives/000107.html https://www.kieranhealy.org/blog/archives/2002/10/01/vive-le-diff-no-wait +Redirect Permanent /blog/archives/000106.html https://www.kieranhealy.org/blog/archives/2002/10/01/holes +Redirect Permanent /blog/archives/000105.html https://www.kieranhealy.org/blog/archives/2002/10/01/round-up-the-usual-suspects +Redirect Permanent /blog/archives/000104.html https://www.kieranhealy.org/blog/archives/2002/09/30/jaw-jaw-war-war +Redirect Permanent /blog/archives/000103.html https://www.kieranhealy.org/blog/archives/2002/09/27/insert-monkey-joke-here +Redirect Permanent /blog/archives/000102.html https://www.kieranhealy.org/blog/archives/2002/09/26/beyond-the-pale +Redirect Permanent /blog/archives/000101.html https://www.kieranhealy.org/blog/archives/2002/09/25/font-junkie +Redirect Permanent /blog/archives/000100.html https://www.kieranhealy.org/blog/archives/2002/09/23/found-the-damn-thing +Redirect Permanent /blog/archives/000099.html https://www.kieranhealy.org/blog/archives/2002/09/23/inhale-exhale +Redirect Permanent /blog/archives/000098.html https://www.kieranhealy.org/blog/archives/2002/09/22/innovation-machine +Redirect Permanent /blog/archives/000097.html https://www.kieranhealy.org/blog/archives/2002/09/20/tweaking-william-morris +Redirect Permanent /blog/archives/000096.html https://www.kieranhealy.org/blog/archives/2002/09/19/crime-and-punishment-part-3 +Redirect Permanent /blog/archives/000095.html https://www.kieranhealy.org/blog/archives/2002/09/18/free-software-socialism-death +Redirect Permanent /blog/archives/000094.html https://www.kieranhealy.org/blog/archives/2002/09/17/naaas-redux +Redirect Permanent /blog/archives/000093.html https://www.kieranhealy.org/blog/archives/2002/09/16/incarceration-and-inequality-again +Redirect Permanent /blog/archives/000092.html https://www.kieranhealy.org/blog/archives/2002/09/15/marx-and-human-nature +Redirect Permanent /blog/archives/000091.html https://www.kieranhealy.org/blog/archives/2002/09/13/another-essay-service +Redirect Permanent /blog/archives/000090.html https://www.kieranhealy.org/blog/archives/2002/09/12/another-bookmark +Redirect Permanent /blog/archives/000089.html https://www.kieranhealy.org/blog/archives/2002/09/12/ideology-and-policy-in-one-easy-lesson +Redirect Permanent /blog/archives/000088.html https://www.kieranhealy.org/blog/archives/2002/09/11/mast-hemmd-manhattan +Redirect Permanent /blog/archives/000087.html https://www.kieranhealy.org/blog/archives/2002/09/10/inequality-and-incarceration +Redirect Permanent /blog/archives/000086.html https://www.kieranhealy.org/blog/archives/2002/09/10/the-language-of-influence +Redirect Permanent /blog/archives/000085.html https://www.kieranhealy.org/blog/archives/2002/09/09/sweden-and-mississippi +Redirect Permanent /blog/archives/000084.html https://www.kieranhealy.org/blog/archives/2002/09/08/look-a-little-closer-at-the-data +Redirect Permanent /blog/archives/000083.html https://www.kieranhealy.org/blog/archives/2002/09/07/the-ideal-transport-situation +Redirect Permanent /blog/archives/000082.html https://www.kieranhealy.org/blog/archives/2002/09/05/adobe-on-the-sharp-end-of-the-dmca +Redirect Permanent /blog/archives/000081.html https://www.kieranhealy.org/blog/archives/2002/09/04/helpful-and-unhelpful-solutions-to-workfamily-issues +Redirect Permanent /blog/archives/000080.html https://www.kieranhealy.org/blog/archives/2002/09/03/doorknob-rattling +Redirect Permanent /blog/archives/000079.html https://www.kieranhealy.org/blog/archives/2002/09/03/trackback-feedforward +Redirect Permanent /blog/archives/000078.html https://www.kieranhealy.org/blog/archives/2002/09/02/work-health-and-social-structure +Redirect Permanent /blog/archives/000077.html https://www.kieranhealy.org/blog/archives/2002/08/31/mapblasts-linedrive +Redirect Permanent /blog/archives/000076.html https://www.kieranhealy.org/blog/archives/2002/08/30/fisa-and-john-ashcroft +Redirect Permanent /blog/archives/000075.html https://www.kieranhealy.org/blog/archives/2002/08/29/hidden-in-plain-sight +Redirect Permanent /blog/archives/000074.html https://www.kieranhealy.org/blog/archives/2002/08/27/fall-brown-bag-schedule +Redirect Permanent /blog/archives/000073.html https://www.kieranhealy.org/blog/archives/2002/08/27/comparison-cases-for-iraq-the-us-and-terrorism +Redirect Permanent /blog/archives/000072.html https://www.kieranhealy.org/blog/archives/2002/08/25/a-bird-in-the-hand +Redirect Permanent /blog/archives/000071.html https://www.kieranhealy.org/blog/archives/2002/08/24/read-and-learn +Redirect Permanent /blog/archives/000070.html https://www.kieranhealy.org/blog/archives/2002/08/24/monster-truck +Redirect Permanent /blog/archives/000069.html https://www.kieranhealy.org/blog/archives/2002/08/23/how-to-run-an-auction-in-1660 +Redirect Permanent /blog/archives/000068.html https://www.kieranhealy.org/blog/archives/2002/08/22/just-plain-folks-at-waco +Redirect Permanent /blog/archives/000067.html https://www.kieranhealy.org/blog/archives/2002/08/21/economic-sociology-syllabus +Redirect Permanent /blog/archives/000066.html https://www.kieranhealy.org/blog/archives/2002/08/21/post-asa-reading-list +Redirect Permanent /blog/archives/000065.html https://www.kieranhealy.org/blog/archives/2002/08/20/wilco-and-coase +Redirect Permanent /blog/archives/000064.html https://www.kieranhealy.org/blog/archives/2002/08/19/firms-markets-and-information +Redirect Permanent /blog/archives/000063.html https://www.kieranhealy.org/blog/archives/2002/08/19/internet-signal-to-noise +Redirect Permanent /blog/archives/000062.html https://www.kieranhealy.org/blog/archives/2002/08/16/money-and-happiness +Redirect Permanent /blog/archives/000058.html https://www.kieranhealy.org/blog/archives/2002/08/14/data-and-its-perverse-pleasures +Redirect Permanent /blog/archives/000057.html https://www.kieranhealy.org/blog/archives/2002/08/13/purchasing-the-right-personality-for-college +Redirect Permanent /blog/archives/000056.html https://www.kieranhealy.org/blog/archives/2002/08/13/mackenzie-reads-mirowski +Redirect Permanent /blog/archives/000055.html https://www.kieranhealy.org/blog/archives/2002/08/12/against-the-dead-hand +Redirect Permanent /blog/archives/000054.html https://www.kieranhealy.org/blog/archives/2002/08/11/more-on-post-war-economics +Redirect Permanent /blog/archives/000053.html https://www.kieranhealy.org/blog/archives/2002/08/09/more-on-unc-and-bill-oreilly +Redirect Permanent /blog/archives/000052.html https://www.kieranhealy.org/blog/archives/2002/08/09/uncs-islamic-reading-assignment +Redirect Permanent /blog/archives/000051.html https://www.kieranhealy.org/blog/archives/2002/08/08/jamls-article +Redirect Permanent /blog/archives/000050.html https://www.kieranhealy.org/blog/archives/2002/08/07/back-in-tucson +Redirect Permanent /blog/archives/000049.html https://www.kieranhealy.org/blog/archives/2002/08/03/last-one-to-know +Redirect Permanent /blog/archives/000048.html https://www.kieranhealy.org/blog/archives/2002/07/29/bureaucracy-and-its-benefits +Redirect Permanent /blog/archives/000047.html https://www.kieranhealy.org/blog/archives/2002/07/28/fries-lies-and-apple-pies +Redirect Permanent /blog/archives/000046.html https://www.kieranhealy.org/blog/archives/2002/07/23/more-sellers-than-buyers +Redirect Permanent /blog/archives/000045.html https://www.kieranhealy.org/blog/archives/2002/07/22/that-photo-doesnt-look-like-you +Redirect Permanent /blog/archives/000044.html https://www.kieranhealy.org/blog/archives/2002/07/20/visions-and-revisions-and-a-hundred-indecisions +Redirect Permanent /blog/archives/000043.html https://www.kieranhealy.org/blog/archives/2002/07/18/amazon-meets-google +Redirect Permanent /blog/archives/000042.html https://www.kieranhealy.org/blog/archives/2002/07/17/philip-mirowskis-machine-dreams +Redirect Permanent /blog/archives/000041.html https://www.kieranhealy.org/blog/archives/2002/07/16/ira-apology-to-noncombatants +Redirect Permanent /blog/archives/000040.html https://www.kieranhealy.org/blog/archives/2002/07/15/bet-they-dont-have-a-word-for-gaffe-either +Redirect Permanent /blog/archives/000039.html https://www.kieranhealy.org/blog/archives/2002/07/11/dept-of-alternative-careers +Redirect Permanent /blog/archives/000038.html https://www.kieranhealy.org/blog/archives/2002/07/11/grammar-pop-quiz +Redirect Permanent /blog/archives/000037.html https://www.kieranhealy.org/blog/archives/2002/07/11/membership-has-its-privileges +Redirect Permanent /blog/archives/000036.html https://www.kieranhealy.org/blog/archives/2002/07/11/a-primer-on-irish-political-scandal +Redirect Permanent /blog/archives/000035.html https://www.kieranhealy.org/blog/archives/2002/07/10/dick-cheney-shilling-for-andersen +Redirect Permanent /blog/archives/000034.html https://www.kieranhealy.org/blog/archives/2002/07/10/photographs-by-david-krewinghaus +Redirect Permanent /blog/archives/000033.html https://www.kieranhealy.org/blog/archives/2002/07/10/counterfactual-plausibility +Redirect Permanent /blog/archives/000032.html https://www.kieranhealy.org/blog/archives/2002/07/09/asrs-unavailability-on-the-internet +Redirect Permanent /blog/archives/000031.html https://www.kieranhealy.org/blog/archives/2002/07/08/biking-in-brian-head +Redirect Permanent /blog/archives/000030.html https://www.kieranhealy.org/blog/archives/2002/07/03/another-kuro5hin-story +Redirect Permanent /blog/archives/000029.html https://www.kieranhealy.org/blog/archives/2002/07/02/eternal-ambition-single-goal-er-ryan-and-jacob +Redirect Permanent /blog/archives/000028.html https://www.kieranhealy.org/blog/archives/2002/07/02/stephen-wolfram-and-the-obsession-with-discovering-lone-geniuses +Redirect Permanent /blog/archives/000027.html https://www.kieranhealy.org/blog/archives/2002/07/01/weblog-antidote +Redirect Permanent /blog/archives/000026.html https://www.kieranhealy.org/blog/archives/2002/07/01/trackback-explained-to-myself +Redirect Permanent /blog/archives/000025.html https://www.kieranhealy.org/blog/archives/2002/06/30/clueless-noob +Redirect Permanent /blog/archives/000024.html https://www.kieranhealy.org/blog/archives/2002/06/30/minority-reports-vision-of-the-future +Redirect Permanent /blog/archives/000023.html https://www.kieranhealy.org/blog/archives/2002/06/30/amazon-recommendations-on-crack +Redirect Permanent /blog/archives/000022.html https://www.kieranhealy.org/blog/archives/2002/06/28/on-being-an-obscure-google-search-result +Redirect Permanent /blog/archives/000021.html https://www.kieranhealy.org/blog/archives/2002/06/28/culture-and-the-creative-industries +Redirect Permanent /blog/archives/000020.html https://www.kieranhealy.org/blog/archives/2002/06/27/my-pledge-of-allegiance-article-on-kuro5hin +Redirect Permanent /blog/archives/000019.html https://www.kieranhealy.org/blog/archives/2002/06/27/i-pledge-allegiance-to-the-flag +Redirect Permanent /blog/archives/000018.html https://www.kieranhealy.org/blog/archives/2002/06/26/lundy-fastnet-irish-sea-rockall-fair-isle-faeroes +Redirect Permanent /blog/archives/000017.html https://www.kieranhealy.org/blog/archives/2002/06/21/google-api-and-movable-type-hack +Redirect Permanent /blog/archives/000016.html https://www.kieranhealy.org/blog/archives/2002/06/19/catholic-church-abuse-policy-one-liner +Redirect Permanent /blog/archives/000015.html https://www.kieranhealy.org/blog/archives/2002/06/18/creativity-the-culture-industries-and-the-new-economy-no-such-thing +Redirect Permanent /blog/archives/000014.html https://www.kieranhealy.org/blog/archives/2002/06/15/good-company +Redirect Permanent /blog/archives/000013.html https://www.kieranhealy.org/blog/archives/2002/06/15/digital-tech-and-cultural-goods-paper +Redirect Permanent /blog/archives/000012.html https://www.kieranhealy.org/blog/archives/2002/06/12/fashion-police +Redirect Permanent /blog/archives/000011.html https://www.kieranhealy.org/blog/archives/2002/06/11/cheaper-than-hubble +Redirect Permanent /blog/archives/000010.html https://www.kieranhealy.org/blog/archives/2002/06/06/jumping-into-the-abyss +Redirect Permanent /blog/archives/000009.html https://www.kieranhealy.org/blog/archives/2002/06/02/national-football-strategies +Redirect Permanent /blog/archives/000008.html https://www.kieranhealy.org/blog/archives/2002/06/01/poetic-headline-justice +Redirect Permanent /blog/archives/000007.html https://www.kieranhealy.org/blog/archives/2002/05/30/the-fire +Redirect Permanent /blog/archives/000006.html https://www.kieranhealy.org/blog/archives/2002/05/26/copyright-law-and-bathroom-breaks +Redirect Permanent /blog/archives/000005.html https://www.kieranhealy.org/blog/archives/2002/05/23/chalkcheesechoose +Redirect Permanent /blog/archives/000004.html https://www.kieranhealy.org/blog/archives/2002/05/22/book-review +Redirect Permanent /blog/archives/000003.html https://www.kieranhealy.org/blog/archives/2002/05/22/teething-trouble +Redirect Permanent /blog/archives/000002.html https://www.kieranhealy.org/blog/archives/2002/05/21/best-to-jump-right-in +Redirect Permanent /blog/archives/000001.html https://www.kieranhealy.org/blog/archives/2002/05/21/the-hello-world-entry + + +#RewriteCond %{HTTP_REFERER} !^$ +#RewriteCond %{HTTP_REFERER} !^http://kieranhealy.org/.*$ [NC] +#RewriteCond %{HTTP_REFERER} !^https://www.kieranhealy.org/.*$ [NC] +#RewriteCond %{HTTP_REFERER} !^http://crookedtimber.org/.*$ [NC] +#RewriteCond %{HTTP_REFERER} !^http://www.crookedtimber.org/.*$ [NC] +#RewriteRule .*\.(gif|jpg|png)$ - [N,F,L] diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..aeef0f15035823cf19473a95884dfc0c6550171a GIT binary patch literal 25361 zcmZ^|1CS=&wk=w=ZQHhO+qP}nwr!hTwr#t*TwShu{qJ+`x%=%n_lw9cGshfb%{gYS zm5~uEQbA4}777ar00011QbI)O?>Xb20|Mype|kZ?8vp>5prx>|f~2r8fr690nWc>> z0DuH+ZkoG_@&;P?TrYd?JQ5KB=@XV0B*7xL1S*JPq-1~sP*@0=n+T{F3L>SNiOMfP z@o*wzQ55LlAfq+N2Ly%D0YwqflbslA$lF@h$K9;2G0nY=v-Y(O^IPAwE&zqkAdo>9 z4Zr}FLJgFgs{tJ(Lc>KuFPk>UCn@2F2en2LlQYo3j7@5!tA&Y8=j)v=P{*<3m zcTZ%blN}dgY0hHyu;j&bE9_>G9u&ub6zXJqGUP z?0POwFeXoP&*r*@z84MP4~bSbZgXF%DnN@Zn83+Fjr=VEzyl~i%WlpiUYLzu((oY+ zIdt^(wT&}izBL{7Ir~R`ko{zT80Smo)Xj$)cNsc=Ah9GWv#IDwS$UbX$n-P}T>6~J z*9*eW(JxNRnTa8qocv$t_o3&iisvbiA(0l{p*(>a33MhK)zSn2#iqUeLWVniS^F$OkUq-@A%LYzBak62M&wpjZOw7=UODU~vMN9e{TU073#J5P;Kw=_G(G1wfhv z`PTnVLB@4Jw_qy=faO51c@ViEHU}^r5cOZM4$v?G;sQ`%1JVqDyMdMvL3aqKMS@ic zXeIEOLaPYaS`ePXf(jfcz$3zu2?$97Z}Vgo7*xSkg~AHFPsA=*T@bp#?*-uV1T0`* zfW9G!89+;huGK@3SWYAC9%n+CZ--1ewRvODR$ZPoBAlVSJV`+!g4B`#68`2wr*A1_^ap1;& zVIJZ*_;q0DFxj!zfwaS~#dHT;4Z$9e-Fx&fekVk zyfQ0cmc}H+on)P{jI~&3LAQcvooJo4>M^8d-b|~Qkv2zj7S`7NE~j1KE7_^$tu?M_ z)-W%YYo0~cO`_9g7i`yQS9TYYm!{XC*RNN+E#y{*w_Nw!AGkk6A7mel;Jo1; z;k|G#>n?5--66g!h*#$a9kcf_N8se%%1FZ9Us*2((sAm(PJs)$!Az|(0UQ+ z_3DZ0_3cS7Mz>bC<$PRxk$kay$bD{o)xPwvhF?HmZtpvfYjsv;4}r&( zDG4dXl+2Y2l{1zhEw3$0LZpUK4b-~KyyU&~LoCG%!d;V=D>tghMFIkNiqnXvPsdruc2l?$j}sq$tY)n4uI7Di-(jBvtT)zh zwV|tZI$ND`?z#hA2hV+1@wNoE5*v3@VpFlE*n4(SyUU6NiVb}R7R|S(qe7iRiU+;4 zv)XVrBQ~fuzjw@DXYr>k9Ys8hZtM3fo|8(rDw6GgW|olccoy&s>d>DA_S zoVwh;xxT%>!@goy@w)TU^soIaFIsPHdoLWCztWCsysnv5_C8$~tQpKT zN0`TlbqLe{q`uY54}s2A&QXiCh+T@;iqFNo#q4-BK8@T>#iTDCh4xc^x4on;ROkD- zfApFgO$^^zFI;8vOYK(lalWtqu{|?6KVEXTye%t_+O6*6{}cFC_+k7smUwY3|0G$`W64F6J(-{B&8u_0C5FjfD0{{So#8O4WMMGAG z%h=wQ&d|i($dt~**5NN30D#AX>+hwlsf!_jhpmmBGnWT1(Z3j6f3N?6>4^ybMRBp_ zCDM>pAP}~9G9_T8W1(Xp;)5a}AmDK_G2>Da5&LiX-#cC+3l|p$E_!-*cXv8>W;%N( zb9zQjPEL9TCVD0&+P@51XHPp9Ll0UzXX5`FUjH&$xz0_O33x zL`452`k&u_)#+ks_J1?kIsdn@uK%<^ z)y~p|kCEqJhW-=&za9B6m9V|7gOjPV^IsVs>wioB9s5td#{W&j$IkTMf`149Qy}kT z`PZr8KXv_2P5+MlCtve_OYraDzX|?nJ(q%|hpCN*h~?jg{>ud;>)*2e*T{b=h3#$Z zos=C6jZOcl>|c_9gZ`8KuRNOn&piJY`8TDBF_*Kek(H^j%fCIZzfbL7vtP*2oc`Zn z9{T^4&GUCIaLL-6Seki?7`mA9F)=W*&@wR5GO?&IGI235adEQn(EkVL-zxYgBJ5;p z=wk1rVsCH5_b(f^|J)KV)BUympYi{e^3eaYj{a?3{nw)X7y5VA@#> z%ozZH0Dz>3po#}zYOZF`PDh>TZ;PClnV;rUMdd2OWm)kfEo=LLMM!S@-Z2FQ0tg$I zl9DBk&##})+n?v(TkW@&d3kx~X9k0#^Go!8*Ul~kA68OdLY;?5#f7`=`u#ku3lP%+FiqP{;rJCrSJ1VJr^oXIH&|8BY4~#kOVJQ#PhZ)P zUWeh|*}g!vL*hs?mO+-q%7NqiYaJ{(Vk`<=RsNRfBMDCdt02o8S#M$LTP=Ua+z2z5 zDz<)hzsEm`+Kf-tX5-ArN-Q;Ts+(WPBt6r5dyI zN6_yai9|^&el!>xJ~$gM)S6{*j5)2V?Pz!*$bhg5FHuhaAkNtFRS^+j0G7Z5F$g>G zC{PTvaK%fa)|>He%$SUs+$MuLcY8o{dm5^GQO^Rbl*SY^K6N_BK)PgYy$fx#F+^{L zmKP#fD32;A4*E*=>>@rggHIx!t%#j;SxnK&mGB_6(Yyh6x$yg3=j;8?S2A^v-vWTF z5HwdrRheaV1Ck&gQSIUCViJ=*N1mN5s2{ZI8Zk=aZNJvc^s2T7)!op>2&_r~qx*#iPp!7Y1RZjv%oU?a$hvkd{DkV%TiQ(l(<7QJ2f>&lXK8496TcF)IOi-dQ_ zmOM%v6df!`$&yfrlMSsb&6tx{CY#krZrU=DCHwkX0a$ge7z3~;4QK26TX96qMtZcJ zQ>KVN<<;=`)?mq7nq)1+9Gqg*to5A}mnU#yp7se@Naxx6gqdzCZZO>mO&P$w&EEFx_~kemz03_Vy3llb^8iSKb)Rz@(^ zcxl;k!%}Zx2;%OjRR!=}FF$0eepE0S4C=S2n3!c_LGpbL3gnS+`WvECQpte~e>1DA zV5BsV^tDNKbkuTy!JU$Uy2ckQkp8}~a+fG42N1PALM-YM8W%pX*884ub9N2zat$`4*|V_LYj*emI^GhvRd^Ph!7he5vwd~? z)WWKjst23y#HcU4(0UkyshXtal7{If-r=__r)_$!nC;WTi;F!py__`Sy@f^mUR9Pl zO0KLrU)nxlAU)8zauxuofhn|$4Skq7T`lnK>pSnXgqokD>Ri0^O-E3joG2oBePl<0 z)MBS(VVV}UJb`Vx(%3zOk^(7xg~S-)N`_Rk!0A}sycGslza9N6XA={;9Omi!uNXFT zI=ULBCT62hLh&!hY)j#GG=%pA87gS<_dCpj{G5;q7OVxxoP-ha_T6|xS@JAGK4od! z^J5n1NR0wG+!$5Ya>yjWC4cZ^Ea5 zdm0T;mtxzwm}Mo!6%SUSjAa!wb;>(2P~vi62(e>g%jasmiSeM_PDXaOwa>{2nz@E) z<786BXXjal#qpDuo4A_WhsG&qo_DKHioxw5^55Li_)5?Lza4;dSPEV}UIHXQO`z149dmWhYK$rgFt z&O_KH!eyOR+Q}ZbWb*6;`SeEflT30!1_oIop~tLD0bibfXDvATRs6*Yatg-lB& z#&c@#y4sGK-?@KcB6bTZVS8NITAG%7X=z>z2*?v9jAI9A2o>d=gUC!8Q+20wTk2S{ zg;K8+U;`f;nmLr0r&YVgjafJr9-ZdmE&E;^dx0ptwzqhkh7(tr9zoIRXK*$vUSH&s zzAcYwA$*}M?O9k0h!s$f-j872V@xNEVQUPV8u{ z%^X3eMOvwr@%+ro`r=|b%Q0gjHtQyHhz5Ja2XTAG!-(@F~a@HMdV>@Ga%t=(eAm-$I z7;>sH=NxiMaYGW9Gl(U@36);1&RQvy_XZ85|*&c|{~| zrx6^*2U1^7z>Pk`D6O1-A=n3NnH;d->Gdcu#V$G0sa=uSge(=Q)~B7Q%?l$+#7r!7 z8H;>Y42TrD~3Z5f)gMBrz@)-tG_p?m^>M4)QkVg8TE?I zxP82eNsABRTB*kz^EEdQ$r0Hso}{kRB?GO8ff897Krf%iAr?eRBETkxkL^sp<1DtR zWoeSE$IHwbk5~J3zVG#Xe0YPbK;p{nT_p8|2fNh6ozk5_AGTdF&MK4`jDoHT`l}SQ zF#Q=f?l)O*!T?6&CmxXLp#zNrhs=e67EXw~wbHG!;qT=y8rq2Oi(cS#FO7G?E4x!s z#f+2o{`p{r&2bdaFP*d)e38a>+Dy#M9e=`Wh7)r)2jf&e=@&2~vJ87>2*S7LY`LDE zVv1hLq2D69@gblpjJR1kiIm-BHOfZPLWq@JuU!HdvVmoso04l{WaQqnYB0=`r^Gdi zHSYmq&!wEfNCL+3g5rc3L2<#U=|0CP^w_%EWk+74eQ`M$*wK`6d+hrf5-;8pu7=cD zz;3C%JeDnk4-5U6rSUs9lN?EMKLj*dsxnxwyyWz;xie<_zA6Y!&j+W-v*`AC{E%`7fw9y(xv} z52I1bJTvOov}`QR_;{0WU%~NFkLpaw4GWJ99GX-PXI&D(L=?q3B8;{}NJPJdQ>})| zSQnNl5r#jTbTAo_iFAcc`#dou({K}*eli?9lr1pc;bBtE5~W*l#@ED|w;3Qt+My|| zU`e1>*?vmFCaG!=N~-HqF}s9*@(Xg!uNEdTRSJgNDC`e$*ncU* z>EiNKA+X`9`B7}1suw2f1tRBqr@?*B%t!(wP)5aK2O}XD>6v+tYV+M5KT08M+VuOq zR;PoORrBn1ZEy{fS|}GoKV*iHKNKI1s?d`(2%{D(@f3z{l&=+^;FI0PVcPL-%=73b z6Sr;%Yly|Bzn~Y9GTaii;u;)v2)w40f#ku9GG1f@AhcG0p53pZ`g(9CHB!-$@iV`C zYsFBogoG3Deu-sOuiVakzs{zSwSg5^heF5$E~&25;R)uCH7zRb78I_TaY!~BI6iSs z+GO$$dJ^izQH^7MC|DN4f|+?~qX1`InqX;w8uvI0YEa6IzDBLr=T(dwF)!DdXsrwm zb#YR+tg#!o-9;AI1YH;-A;;b+-G&fx;)Tb~GOk>2FQpSIBb4aV@p@Id%iGeCM(1~l z%^qg5r>;*O?Ye@iWuSGQeWW>3yUB`PDD6sDi(ca(*v%C){%!?gm$VDQab*>YL9X+R z)Y50_#$}YZ3}ew8CY4kf?qoq41=IB${R7FNDuK4jifY4K?tuxX96;Y#2vA-jY{51< zhNid+y;1N1MV|CrK@iYVj4C4GqpCf@=$jGY56%Lq_e7EQY$<-ZZzD=Me=OI}WsC1M7QJmMpSLZdUn~F4!e=|4 zhZW^(BQ0^F{-!$C(bf!Om|f8aXsDqpJu40~;dBv96;}WVvtT&!klTzI+)wsW@QWXS z2o6JN>zL>X17(i|-g{V>-vv=!%-Jhj$puve;oG$M6?16>4RCGvz7j)RlE{DtY5|UzMkBgv@#6wkC3J4nn`;dYl4=yqt(ed|e}C{@52*_683TgA_VX z>CJ+E`%A~7IWg_E418 z9oK6bt8J2-hiMd5o}JNzA~aB6U6@3OH^zvE(ujtP`;-tFT-#a^VjuwRn%I#z$nZ?w zdSxR3rP9Dux?F0T_-dtbbUIfp?_K27h|5wU14Q3WY=Wf z^Bt516US4%+GJF`vKej&$XPY4eF&N?<$5R4+{*Mw6EGJzvim_K6y}Jg?{b9B#7(rw zg0}wMy-va?6-#`8n3&f`nOF97pRKf*HS2ZkK)X^qsaAW%|7xV^{eovDa1YJu zxkYNWC@i2JH$#!U?`9VA5T*{R!reYl!k~PqoWp$ruo$xAVKJ1Vnb}z9`-Q(RuEb!H zKICBpmT?6Kx}#L5oqd=kI3+vT!ZzFh!WSEep;d(3N4_FIhNkd~D()R~EF&xfV=7L` zz_c3d1d*22j;^YNKt}GKIHzhl$Bzmr@&b1&#cidw{zMMHcCnj@Jqf(CKGSc9LgsP8pOTOQzKSc^S$^33Gc z4}sR4#69fZ=PJ0F3YMbD10~Hy>wI8xjPQIjCpt|8Tlh;NiK#R}|FtkWs5%ERU5y|6 z=bL9>Z8S^O0`cd7=TWsjk=QcDqs=0m-jHeO@bDOK6s_q|6h8-CKf~~PCG~V{2pe@! zoo-cX`xmD9@^X(AW-M{x!9GIk(|GHaJKrMD^A_714&|Swq!|l8Vg;tQ2ZT0*3MLlyQ%a#qn;! z;fVsE1DO7tNv!sME$RB_3NE0~@>L<+GBhi;S=j!zBBQpI=~>7stg&&$2+)N?1sg-g z)A)(kAm`)+uW*FLiFWv@oV z2?q-Q`nC(Bugj}Jf_ET$@94#rfc%Cot9&8*zE7qvQ2 zP|dTJahab>j}mNDEtn&Nz#1M6bBWTjA%cj%_BjhxJ2Z!6KrsJ|wu5ygsVBQ8URAYy zndGx5kHAA&MjJ*C(0rkgvl>nwycQwX4oaM~dtJV2yR#DD77Q;6#K?_b?8MDo zOAPvt?wPZb?nxPNf`T=QqG;!V;cExDa#G2`BMP2hA6gl5Kbko2zh`#$sZq;OGy4l0 z%*W6iH})UOFidExB58^}Z62s+n#hX*ga8`FUJRoa@h#75xNa1!Co!)e`T5<=IKfT6 z5$a5lot#SHbEyW!M!qiUeOMi{MK$aV6<4B_R28L}bwJAU2cZBZt@f84tv1`yv((j; ztcISAgkX~ulnoG|DNLe}sGF)8S(vx8mdlLw3y5&nsf?=_rT*Qo5s^vAIxlryX2SlI z(hZ{tt`6ec_5A8KVFTgN=2opu6O!R3w${?UAgIWVZMSFyrc5PmiTV>%%H+X^I+1Q& z8$B4%Y;*qc4%ZQ7E=;{FG#J~4ZVjT4rN1J4g;`h|yp5FaQBo+6R%zDv9Vgv!P-u<^ zhCxn-HD3dXY{ZNyB;$IMy)D#`Liom!fGcBiMe`|r2!`|m%0?!RZtN+!x()ie2;O&V#X zt&H-*OA2tf+&d#5KU8j%g!Gt&@9QJ2s@BotOqz-d4HsP77|VS$9O=Y} zS%4SMOylg&i}YxTX|FKfl?1czFANye(<{5XiOtRRE*nGR zvGM0qnm7HvLZsTTFM^O2wi#UB>7r;kW@TqyZNMU?#4v&=t7H^^O1}ko`Wzqu(Z(e^ z*vjZ;6-?=DBtfsf9z*2$6e#QG5Rnrbs@R7<%QLYs>J9Ot{4yZ!Qyyw>cei>&P7=}* zNFLX0^r;)B2wi6M9a17(OMa#H%UO`1c|QIle}wW)afQ_1^*hW4m9p@=|8*|-?(^j9 z3IkQdgv}P$WdYq*if;?Y)o<+%MCEPPyoqe3}-A!g8-0poGyXDl$N7X^opM14Eov6YeL z0CVBftVvddMyu#p-~(?O(xOS-;#QR|9EBW|m*%5_Td_AiVj((kcHg$Gc2PQ8nh^cJ zeLg;J^OqlP^9daHj;pF8;`#Z;yn?5xlb^iIW!@53Sz*0Y;Ws$13DOVGP)aeyz)S6@ zKqwECt6tyU2f{v&!7zK`*VbrgzI(~!d2b|$N8m(90bUK%}NUtBt{>0Z;kFEg!4 zLTzX%$>q6r2s#zJh%1f9&#@z?3%Q9asTvv5@!Dl9cw~}>h_cBd+oa{iI9U65{_M*|GV`Q(O0R`mDEHz-VIlJW$_TIs&z2Ln&vTVc>9EG~<+{GlbU57bB%V(m**sN$4n4M|6R;w?`*XyX=w zyA8MrTGdAFdEE0mf2ifv>h~jt`Z8-|emN`}Elo@``u)3R(n@LmTm+AwlTxHRRgLhP6pKM+ba94XgP3*dezFudJ|!yPLNM``-2mN?N=wK_YgW}*{o-M!E0xtk zz>UEj?cYxH2Mgo|g#vYZ>eVBeW-z(%1LI6xydEDSP(DMvm%t+j5ZM%Z$KAh`jBRCM z{q9Jm0CN6<2C`9wqU1s7JwG7KVod2OV~eT9y=bTV2BteDGTVmbk|S6o+#Yp04JAcO zMw55BWRaGjd^-VZvSipUshS_4KA(^{#0BSI>^8d+f1c3_Buk93IWiPoq2032+7m(eW@Tzc@JOh+ifrV%8NSBT>Dw?z&5TFCD+w>Y>RBIY$4OVnbL$X$ zvVgCiWTZPNV3qDiA#4TGs*OWhhNSh9-->fA^^ME8$Uq}3r z*uLQT$BKubgEtwTS+%&XtIZ}jVaV}7wWf#|&5rzXMF59zwD1|`@O@SeAgAg%MS9nZ zq11_j>=9MPEL2Tx7GOUVh*6D5Pn@0TsIjp7c|1kCY2u;oc&Z&DYlctfZdr>Wv0jjy+oof@T_!2{ghz!f`sf< z&!)DrHQ=yH3e-s#e9DXv*y0A03IB~};a5Wy7}|A7E4zew&AL5p4{`z6@bl%OXwH?) zp#=MYKsSQ1D5xvYASFvV$NDsmS=j+#yp9m&eRw*4(bsB{Y3IOG3;$xH+XcwxAocX8 z;;JLI*^%&(Y`pLl^8-pF_d_VVQeM7(zP`tHIYrNnoTVq?4RgPP!Eaut?R^xMq&R@? zNEYl?{E&EXN&D0*-qsxdGGO(1Utj*Z8?h&>8P~k_i`S;fEzaLR=uRv*Ud96|LU3v|grR46 zE-k8Qj1Y)pZ?FL*(aaQ88LcY!V^de{YjbmJ?D@fZ9B=9=OsX;MD6><*@QOVYUUQd0 zq4K92)syslC9de&3o7ag1c(FJ)%8AC70i057UgTIy{nYxygHT*POXkqd_Ui`TxNLK zQncfQLB*+T6oGTUXpYy4)NJI4kuTirC|$f&pmA@7?Z)QL(&x_N*Ur>;x6Jhy`5r6A z_v*yMwhPYXts$+8W>_^dKgn-$<|n^^dAKLvPV(^f zpCJ!!I)0IP9#0}&+olGz+6vMYS+mF3beaIWC#{#j#jUi6rS zWpmHNy9ULDY_mVnbIv$JVFirv^Vp_QHOixJ6P}*H$hJZ4-IjvTQOsxn!1_<@Z zj4sjd)%zXL;@M@weCU~{Md*27L2KxWbC$8*%1%C}As5H37E+l=6iLczkqj;;ZzKB3 zwaAI>zCxF=lTNB5$A8860sI?U#*ku4h>6lF1C>6F7nyFliu5cKE-kPwk+N4^v^G0ID1eB4`J7Sph!$=_K9A{rs14gc8HW>?yiFq?ZHcVTVhI(7nTma zP9=G$1B4|zt{DR@VveQ5kg8DcIUqJ$M?5~w~Jc6oWAzNZu6R> zyxkU4g>Z9FCW3X4LU@+z)QZW{?fdpmRrtV|juX0~F5)9eF3kI!z~1@SP}i>_X4dZ% z!(GghwWd%K^d8iku@QT{#BpgfZ@i~g12v87l*|{ExAQ8|((t*`b?fzk<&pJsu4Q9_s!c|DTB!zW9P3^?2o1W5UWa zJuS@?`Z;=)1)GPK-ytzx@RyrTU0Q;t7OTa1=cBykN7PKiF*z5I@bXnC0GjtJd_WPiPW$w9 z_s6MJO%1~z7ollWy{O;&uJeyC?d&Z*+z+P3t4TtAeHxm^r`)`J!$is4ee^gEVbloZ z4X3*?J0QoHbd`fpn_wKu2-AP&k-y~VrxtXyNLOqViriKNRO+6~`d@Pww=9FEv9QVl z9u=;S%GQxCR%YHHnBYpiknb~5`cYY&E zbl3I;G<;t7e_PiS@%6dq<;6En+*hYQMR17BV5x?SC7l%zV~TrgMf+OHN7+B`N z4UPIbbZwJ?8XG0e-iX%Gakh+|a2ZQ?gio&vD7AEY75$DPM0TOf2R82=dG75s^&pMk zN=ai)tp>aCI+|7sP8LeCwT`?~<~u5NqQBKKZhRd;W}kD}HnP-eDg~<;E%c)7esuhU zWGnd;?z zz|ebLvjAG!+O?9KhP70U`Lp^ zq6XECU&GlPCzE<9Blqx`Ag^-2Oh=LnT+ z1CA4Ik>0uC8BZ}6P=xCQ_y*@by(x@QT07DHhpMF>`6VSD0dTJDMD_q*;$R~cM}2bN z`kiV+cs;2xe=b|w#CQ%B%<2M++PPD04i#-Jb-U2$A1f!io7j8q%69#&;_|SRtr&8u z1#CU44CtDAMn0cz%1{XHWkvlVMgFM^ceez_+fLPtN;62g5P4Y#>DyOZB&~^? zI6kpMEkB}13{j`7jhd3{DLs`p1se3ll=&j3-zR{}{u@IhX_rb&)fp?n-hO66%^7J) z$1;958+d3-U}gMYvKPke%9$A0pF5&7a!KFI@xNyS3Qizmc z+Em`rPEOfRuOH;xOrgh>W!y~iTotAks8R_6)e zcYm)B7jzxpznIV~%Xup<;G3z;>nbAii14^F{eBN}8dJBg1Hk%>;_f3UnZ1KvC|u*r z8PBtkXSJ=gsB7#a4;V{H9#gqYv2x|^dNa#M9G^$qdPNdQK50u~#z!R;utvuxNqXF_ z!6EtkaV0$JDCBB0h_ULs9h6F7(omuyl5x=LuV>FOcjdE}FobKjlGD6sqUqlRMNDbvqT>w=SeLDhM1xJ z72j&DPAa*tB(&BbmgDKgC5Kq>{^r4b*lXg1lW}Zo&JMeeFzDIa(*nqaI2*y5a=S5I zZAz9}b!)sx7=TtWWpe2Tw$Lac?N{E#SZl&<-a8Vq~x?6SH@Yi{z*96{m9V7@Cc0kaqc z!;c9;z#u;xz!QHFByj+k6B(0cJ4g(lpOoz?3=QFvqQ4prqg!ea=He z12E#_e4O!l$tvUbegtl>+`gm_q<*AaCqeMKa3DYSgFf|ipG?R0uiCh;e zJJRXKZw-!F*U4QGamqrreOieEBeF^rC79WT_|uKJ*$Db$DTtfG?n}XD6d&w>j0Z*z z)9v>+`v8N7JFCQBv{?a;TW|#q@|+2J>o7aTGm6OPPg=2r5rQFj%?f zpDHI%CL-%;FPR4>4)9LVH$$)@+GBc?@PxwJ;diMWO5-4-5yqm)>lEAw4?}RmPr~No z#~CJx%rbiN))E(F)XnSfbAgJNfcRQ4ViW0=N7n)FE38*ZFGogAKW4ep{H$}@qjNrzy(R9l-J$j4}AK{6EIg9rX0|^elal$C%?``|kGdNVE7_cVGh&hfCM~?raIY z^8EH%8PTxn1Q;Z!wrUe$1FJhmjkXqS;Zd_heph7FjHPW9rbs{?mS93~*$CIo@hRbX zk!=6_s;FJtTdXR?2AFGa`@;^(Emrb|BlZ-(8&lU0r#X864Dr2i${MY84{r$OhM>SK zrgDyP&4vf`sfQEGZsW6A7!`5;fGX&y<1e^qlT3li87rH?N6QLHr){3-`lBQfqAPEy zMxZDZvdu{w^@g1&^cD88iwHbN!k75-Az-iUMl>_BpS z(WchVhB6n2qst*HYEq0oQ;2rpxUSgLG?{mA6+<3;{J<>_Xfw?2PBKPrpW8(2=?t*Z z?q1Twf0r_D>xjvOSh93N1`K5hjTUcwr4->sQk=+@w54;D^+qNN3tJMs;6X>8b{Vzb z){)eV&awtfJsc~31v|7AN}X~7*`KBWV8A&1hTjIh!tn+UKv&y!Hk~J}52Xa50|UB< z*P-fed;9(yZbiMGr3d9+ zvrS!{Rf87L2EV;byEu|7Z~+l5deRk@UdK99iQG?&b5`mNKahx%8F&2cwk_Bf#fqL= z6fXgm`^AUvvawO`?LdFN^sKnMS@qDR0nL+$@RN-_xF=U$CF29WFS`puVjWEiWj-LN zb%XQQNex5sW`vV~SK|3$z(Q>%?k0GSO5F(XHvp=EPlj@gUK;fkM@lxaEh!F`v(mxf z-W+kJLH&k4zE+ivC<1e1<&;fBUueS<62LjStsbhMp8fA4w~gu z*P61_rJpXwOJq5rOk7G`&5xufDXuI_>UzzMZ#}AN#u*VL7^7!6g=_KP9iF_WDL$luoSJtBzd)^MzrrxvE%d|hYN@_? zscF(%mi%5q*Dj~y(FY?s$(W0*XA-w^#_VvmU!xH!Bn2F6aK%QyRFV{d*hbC7!Ea(; zGY09>be(tsMi~Pw_%rk33k`y z`PCq@8QD9TacATQ9(v675wje)p~@#&b9W0!rxmR%XYzbU8~u8ro{^SiEhd*Ku%xs{ z0wsM9Rh#;nUdO4!pVI&6n)YM|jTBS9g%Aad#`NQZGD?f#PupBo*%GQXFGtkH z=LBc85A-wz%)m>CjA+-;XsjmALGWFjh-O@6nS-OqV%hI>QZpXzs?bNo1(qjg%t!6JZWW?h!Y5u)mo|Cy$~MtF5-~-uFj3!z5{q5M zeHml-i?B7(j3h!#0SIU?h9C{zXJ>vYBfAo%s_dcQO+#X?5A_0~{~{R5i4q2ug!Fs~ z^F7qMK05Yae+{xtrk~v6+)ZDuo+T3~M%3>6VvTk|| zzuDZG3St5mh!R>%UxP8XnLH_LXC9yK7*1-P)txl&p>q%;rhFEoAK=^@6P%jwym`VK zQngTL2`QquBP7Mf6x|D9jd`zgJQ^N(j^m8KCk;c1?>983GTu)ER!AL$NIThIvoKs7 zX($XY8-gcC)y5&6V@Oe^J4sP7I1c27+IxoGd9!U!C4{;xWoFL zGH1%Y$m8hjNMDNZ(Ru!2z28|uH?@p6nqH%08;Nq3IA=p^vzDRo7&u+qa$1Nh4*!<{ z(ZBI9Dqs}_Tk)_*b0wUmY27dexVZUh91oFzFoU3K8oOUXj(xIVPp1yjVJg zMjkSobvy{kRBkFh+<9r8t7{))VZfGeB5k*L1&IR? z4=v^{&Y4|;$c8-BnL@1ztuag0pG+M4%GVbKZd9DKvwr7Rsxy-uNp)QfO0HbQzYwW-8gz3rB7>?W{9N?Qo`q#~TRc z0%qqpJ3yvMkDG3(7|HgsT0W_A&I`wRXSFXp(re6r++*;N{%$jB8CrduS&2WgabpW3 ziOg_{#-|@ZGLq<^w3d)WubUFI;TmhknbnCj#dW?@o)}jN@f^{E zhkP!fmXOy`zV`3S$K3e=QP~DS?nmVeTrI2%u>*X|8!nwiXsfe33Qw;Du~f6__=bQ% zs!88kh8~prDPhSlUUAg&tfrt2r;5TUH?k8M=JVEZG~y~^=wyNWPC9?yiq9$eD*`+m zx#HJkEy|#l+0I(FUIxfzJBaZJ?r|&jV*v+do%-@rr8IHR0eGv}n9!>nJu1{gRlH`J zOFot3?#>rG`1EmV=}Sq2!Sfi^m12ohFpUJ+`VO}<%38fzm3P(BL2KtUE}s~{k2?Pn zQ_`fQMcg_&TA`uKQ8dCiMGi?hNyJPI|9~(j8dpW1c2sp=W{0_!dEVjMF8tAH|N28; zqI|sY*UBtrr0KKI-P1iL08ZL6x@}9vq}qWXfsr&%-LcVedYV)mwp0ruXoff*eiXbN z+=uamdmiuJKpj&z&n|+{Fl)Vcctl^syzNcXIm3MctTW&S^eahMUc( z(;}R#AXZ*_;b}6%cHH$9K5>@aQTw&($mxn;L?ZgI2;7Gq7C8S(`}O&W@78h1#!`OO z9%aOdp{@{$l!JP`p1b?jqVDRZ)`Fvo)Q&@TWT|X94XvUU>~$vhf;gQ=?pD-y=J3}= z>7G2PLcEvOu^8ysuSdZZIu`77Gy;t+oRwNfI>wiX1~Y%2h50Z|P@LU-TmYerVp{Sv z%(BW^0nTxaxw6tH4_0A?$*^JPk(Eu!zw%*qvnlz{ZYDLBZFETw9*7*q1ku3bapTt= z1tMf$t5Qu7IPoo0c4I+B$Z$B1{|wVGs$Di4F7Y_M&uF+^+CEiOW@B8CRI@mX=Xu>O z%~(D8^-#ho+iygxh;*X*@-dcSME9r_C4E9N&e-yVaOcClgv5wHlk?R?8p+-!p-Bv1 zK=+@B<}&r^_fGt0S@}Cj{ixYpX{{riB%60F#e{%0m2k$J`s7@x(|a8tN8k{AC+Qsp zS~~p3)gj7gt?*fPeO~pmj(KqH_jGz4Q9=A3Aan)kM@yumP#HjHy1isvi-;Oun*4~C z*h)_!!~CN0b(mNh&`wPPz}g3uUta@grYFCldhXY+v5>#C0C z`hlp5)m+%R_E^Yqr^Oqqo=OVSc5?`ZG2RZB!~LrscO6r*ArC(%efv{`eQe$4v$jm& zO|1}R5V(I&H#?HISb4V`hj_-}mju~TN)iMp9S1HmND(xdiLFr!tRpcz^M1IA>bjLp z84;|9DNHCe7Zio9V&;5O_L}Ol!Y?l&`@EyGv-pG*EBVWLAZsWUpd*M)SZo6APr{0% z0~-)SIZ`W~5KdUYP@Jzf1Qey|gH?<#H8IyB zoBFBN3syq^8^<{~Y15s;2`7_Pot&r=7T&>b>=WF(w zshofn7To{j?Dw|X$$4P^Z~?;EV^Ijl;oSGKd3MgJ=`q@2Ge_K6<5r8CrT;u6M|Wel zBm!|(#d9=Th6ga5vfIb1`zoytr$(3W>)*&EB~@EPEvg_=$e-`&bYC8CdkYBQqN!Bl zcZX8Y&O~4=Ab6w(;FR{7+v?RxSA^P1AKT>ww-NmPd zTzxiGYnLZg1w-^6xmEO$mBT#>W>>QY)3Wnigr+q0J00^_z}y!V^-h$BxHFZooieqW ze<)<-{?LOZ41kQ|x=G;n%oTcs&*;yEY_%WptErWk zn)8JkyAD+wF;1Z!N;`eIT_L^X*Xt*n(hs)Sk^9XFpDXzFqe-itv?8SY0o%xYgbCA0 zZ}MI46LrF=fb&A-B#M;3x^{XPBy!4`i6|rn#dAAopXV{IE2;z_6|-o%5Ve%E*j6)m z$Fpb^-HE2oF`g+3#DMe(PnMjPh|#p)3V946aN)1`;T&RTVzernX1?hn-_nQ$dE7eK zl|z)5(xivy*6hM=$GOJ(hlu!`gzu%JZI%2dqs@-Ejn{}bM~D&UjO$p&rl2*9Lw515 zqeOzzVxs6#j%tx*!R26i(e`;Y&IbS~ONq37jfco~>_n=3QcyMfCI_sz5Iz9q0@s-9 ziPCr`e%n<@ZO^gOoDZaM4sJ%`W?)ufjEw9$)V*_%YB=!*52b8Jmo-lk{68N)4Z1J$ zfiqWE{*M9P^5Neb@HVVqxxOajO_k6S(`?N;M5K8;UB@HIGBAR~!P&uTMg+`k<`hp4 zArSG!Zd^Ur)jW~K!(2ar)O(NEQPrVl)517cR%Sugk|GgWvJ7|_6>co-5h z$kB?=Yuye#Wu73PkaFjem&_hvlwT|FpoBMNE6Lr8uk5x|N zLEH!^op9sBWn8LE)iInjcV3-9W(s!(y|a90rsD_hVU4C4m^MUDop$C@Kcc2xv1W2b zTvP}X#ZgI(kRu_HXR+^7tFN^4Sm-pbHS<7`%$idnbRkfxZcC1sGjr^u8mm1_n06#B zr{@YEZ&J1v@ANLRlq>(1?A*V7UUgGG_iyO`NgxNQ`UUVO|%g2YYJ zw$ei(6ee;(*-L97?TZKXh<}+m6e8NFs)n1==84`}*<;FtDsc{9-}7|Cd}U2T9}DwL z-&frEXEFZ8;tw*&hhJWh=6kLh+=>Q7Q#Mc=xx$cRRmZfDbsn0@h}6$<46oxj?s-K; ziz;%RprdU4m*rgiFZ$Vgb}k-P@&vuE)T87ktb2zSwDvve{8xVB3*2 zu3Nr1^ViMDqR+O_cKj~T)CsK^7^ie2rbLY2MTQx6{czIO+(;pcQ+jn3LvtK)$Un9l zmvT|fZ4%eK5r7i6BW$MwwFM-^BrQvdxlC2y^y{de3{!71bm^4>R$@XJAjbE1c191b0Ok_fTl8k246)j>IYGXts9>2a_??dUy01`{Kv8KVE*l@s5FCr{K$m z{$*5ZnST`{Gf0BG&r}qXx43)nDnl<(c++dnNFF)Mj$FH|If4!$ z+ax+Ttj*7g+|NL-)5zC>RPq{}cR@|p_=hZq8S#r0`KXAG;QeoozrXp_7~Yt*kX&Q4 zL|qv^!m52*c5Ix~a=geW0#FW6DDTWbWFwjz|Di%ar#5W6EF=B#`v9q5dM~gq{7(YE z{2w83yHOv|HT2-$adZe{S$AYrSbs)fPG5#mN)?m6+#^TiE?IOSvQakhn};!UX*hGk|t9aEweFg+4e%UmnR|ng;rjX{9RDY5jql ziQ+(0DnBuGQ$C#+xbs}y2W}*G_VEju;{wmgw=kKrlkD$-rUZ20wV~Z;pKM+Lo%^9?mj>x`dU*?V`)>kzLTNMi|=%^KiFs~=wb(}xw~F&%H}#EmqJ zYjb2eITYy9t(rX%Mg{WPk(xDd&o^wj$%j+r+h=84pyFp3(J#72A>SyI9<4uUCir$LIZ*W1B09yUnnX@$c#V`LMQ1X+rd${Q3dCs)@#g5m0B#|lg!!4+jf9BT-`RBY=P!RaEe&S6%q z{PZV{(RVr?^RN@!i=UMUN|^SDufPGnoDjOxULCJCw3n8WyWKAlDCSVkg3$FIa@#PB zk1TpB+Q$tN=fR_gA6~|=&l!T(alVa_e-_fU6xUlBqRUH#urIUgIUIQCp0rk6%kAVqeX0LqZYOAZ`skzeYa12M>TRWH5 z;So&2)t(kL8Y1Tv@@#5E%O$ArvY}eOOkh~kwO=j!v`CIO8f7!aX{s>SRZ@y^UZ(MC zm;W^T2Y>7A`H4RU!s7-L{SULav$`$ancb1@%HSA4^36TX66uOf(KPKDhYiAr*u2Ol zE?K;UePtK^*I$4A*T2}2KmPTX!~7w=e59Q36R{(!aDY%1&(7#?&4kUcb~6qMe^x@& z6+6mC#7JHXT$C0@e*W;TF$R3B7!RcADWyp$OJ=|#PRBr{s3R6rbZR@5gmx(@JK+l4 zrtZ=a@Z)0$e%S&1KX3g1H~w*D|I+IZUj}@8e&bsA!hb}F8vj6q#^toV)-6%Xq+eDt zTiTNkJ#8r@R?N=LJc#I|XKyOXa^m@v%KhsvN=W7C|N7UzAYOm)k8<FAYo4SD>>>9^aO5>HuDHg`7+4f`b=~0fY_5$@V&cCyK!2WT~Q&$emtZ zV5~@{<5nc)+}qc2ympQIHnhfgP)$y=lk)$haCze&`hdnx>_*Jr2{rX8q9y8LQoR>J z5aY{~Su4m~$r?9j(RG%dLb54aOW!2_>j(c1mqJp--XPiX=B9NZu7o{cUaK{7TEsH? zGNCi^Z#5@r%0@r1bhm6RZdunK-aR4`>m0N$#?d2?kuY##V2R;auOx|H0H?>F3q#gv zvg?=eIP#SS@8QVxT}j#g~m zB)|T|7yVwMC@dzw@aQKnKYaE7!-pLflI6^fWS!`7gA~*w=mFX;G1)b|oF9uE#Yij! zLibfL&|;WTQ@h0%)u&dx(0XPEYECh03X%qeDwnZVRLmw0LW0DxrVWrl_ucZjiVcZ!wtXy~4&qBEqa$sQLKdTy`WprLPvj!#Oh& zXQ1*716^P^eQGtxNt=|Gl0&HsrpsJA1c-M*ZxhLbDdSh%VCUpx;fzN9afHV5mD7j# z!3Ph%kLP8QYbhV((kqIMDWtSRIg}tnjm^VO$k>VqMl=LH-B?w7f%^F5D)7@|-q7(q zUkTp0=MvF}=iQFRDB}1Za%h-X9|JvQ2orPZkDmI4>Aq0>V3i0$YSY{*7~>DGBO^sO zhIJsn!&z^yVGKP~^j6tRT-+;`Lk)3M4uLSV*0t}B_ut2wQ(w=tU`F^*MSV$KQ>$Ec zRKB%HT=@_wc}hX`@f0%K(G{U~%0~U5d}oe#R=Gmt%^kdpL!yjZ!KB+DIme>o@FusK zlaX7A3yOBRwpx{N?r_Q4V=y#WsQVe<49Z+caWpXBsq@h#ak>+Hr8e)U`0x{iyn|rItCMe9iG0fqiPiXUV!QWEAoQ+}u&clO zJMM{#DnY20&WnwT91}nahofGMb3q15wCF}iUvKR`gmx*+nt7;POvlm~3Ph~`mQtsF zyR;rVhqyU`d@it2#NXP8J2xo<$B(!eT3^#5pW;^}35Ha3z>rH07^aqH2lr9(1q8C* zpTKLPHlJ0F#o7fXyku2JM?Pf%h8;Gs%q~_so+Yc0m%~!YV0j6qk%$}5AzIO%U7Dy& zL-wYAX2ygBP__ep?)gj4YqK(PH_Ys`oeceGR1;2_-;SxzqMA0sK5OcCyRm)q`KEmd zo5~&Sd01vw)1Eoy9?&g@iZ>oSpmcob>@Cd_q;OQ?KE{QLJJ?aV#|hcz6qb=r z0M3zj`h2mWskk9VA(TuOf<-4=Cco0O%wN6M%E~MgV8z#rtKX@6f7hw$nccyjLiP;F9r`7|KEX~NZq+a`*1?Q7# zrW0c4Dj!A>l0IeQ!66FCP^m^nZxMLLPffJx{&S;fLu1gevnk=$Yzb&lcno3|f*@h# z5QhUhoDs^b-&cnPAV&*nE&Z>sX?Z%`dJC~v*#XlD?J6UVHE5-3EATZ~IR0S?O7 z6S7HMATmIrHAtE)7)Zkz17tuREvC%2BFu)Ixv)?)c;pc+8BG_8<+O^>Og{Mre4mWt zl5jLlPR0Y+D#{BYgqA~(7cyjt(n&=#SjHt`AZc@^=1a{)HrUXI)liI{LV8O3o!FWC zS^OjE1g^n5cAWECGEpcoEeml}b22?4(g#G(Xwcf3CTR(g?`fhezd}pzY9AGIZ%UlD zvnal@_a}%{(X)(l-SKK9%7~$(hP4bIMdQl`52)No22(OQS$32f=Ph$EnAq*;L?ASr zgoYEX!x?RuJt8|@cjS>5B>3UPg9yfCRl200oATJ}KPh(J(nPJXxNaL)O^9W(qpOQF!f-QjPAR^5NFz@sMLix%bi|UMf;+Y9cW@=Prklc8 zNT-hJub*Y*S_-y*y4vR?zwk4NO>T4sD@N5up?)&kz?A58aN8||Gg7K`fi)xcN>nQG z3wJhsCv@hvW0Wv0+d?HlUkj<^m{6!G+wcuQF6SV`1Tlme#Tppjj+00H5S3f$d!b+{7fxOdne+ zZ5(39*3~(Sh>QMVDt@{1JHc#MR-{(+XmlOGwv+?@2f)s(0Hd2@ju>W=t}_?W#Fk4R zg3dDB3%s^R!h2*=oU`%@nEDnF^<{R#Uc_)CTqJ|fjHO?cL9&i2P0oQHMfstdI_PBa zAXHx$&=(^972cw55t|oF6q$aD7I}f=C3FuY1w~s7v)JR=ad7tBB0?qTFL5 zs6jasB@zSVB;yuO=QDLk@nd>8(bDo^hN!2?%%Ay$+N2!)RY4ds?sK+;Gm{guH@9mx z;v*D?p@Fv{Al^=nBR!>zQ%QlY^j1?8Y>m0pW6^8(^g3lL`%vb~lgCa@GY^Ymu4pJr_x}Z$H3ef`Ggz6mDB*w~^885^a$flzTt!o)oEAzj1 zQLGU)0rD*c-4~XhaUibNi%e#Itd5NOO^sKE76=@D89d}w>1o_jvMpM@sJPIQkcahB zZOz;p>T>co%@@k~(8Exma{7Ilgj+L{DCC;JV9s(-JmF3c*4ZPMGrxO9)WhTy>x6Zs z!h4y1rbWVzUyjQ_w$zHq-!PE9)FV(Y(+7?~Nh9}W|At_ehzj||w4R7jmvR;*;WzmR z)tZ7Hvx4k4jkA%fEV{kkI zd4Ys#mWo%PB94WqgvR3oP;MN7H^#7Q_6l<8Rba+NaKP^w{KqOLQ(KP-jv@NK94YRG zoBE-UpXiKYO(7niIjKGlG*Teu*l=dK)_;W98meavqzhKpLEs8hk4mfM8V-+@7wCh3 zWd1~;@&)NnQWtMgFU|w?Kf!8_RM+#-Oa||C{5yGlF!oP_2On#N`ur|^9FXYzO0D>g pe^-9s{Das(upg834?^F*{XZYWfreV1(^3Ec002ovPDHLkV1ibIk@^4t literal 0 HcmV?d00001 diff --git a/static/blog/archives/.htaccess b/static/blog/archives/.htaccess new file mode 100755 index 0000000..5a928f6 --- /dev/null +++ b/static/blog/archives/.htaccess @@ -0,0 +1 @@ +Options -Indexes diff --git a/static/css/bigfoot-default.css b/static/css/bigfoot-default.css new file mode 100755 index 0000000..9774a1e --- /dev/null +++ b/static/css/bigfoot-default.css @@ -0,0 +1,249 @@ +.bigfoot-footnote__button { + position: relative; + z-index: 5; + top: -0.1em; + box-sizing: border-box; + -moz-box-sizing: border-box; + display: inline-block; + padding: 0.35em; + margin: 0 0.1em 0 0.2em; + border: none; + border-radius: 0.3em; + cursor: pointer; + background-color: rgba(110, 110, 110, 0.2); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + font-size: 1rem; + line-height: 0; + vertical-align: middle; + text-decoration: none; + -webkit-font-smoothing: antialiased; + -webkit-transition-property: background-color; + transition-property: background-color; + -webkit-transition-duration: 0.25s; + transition-duration: 0.25s; +} +.bigfoot-footnote__button:hover, .bigfoot-footnote__button:focus { + outline: none; + background-color: rgba(110, 110, 110, 0.5); +} +.bigfoot-footnote__button:active { + background-color: rgba(110, 110, 110, 0.5); +} +.bigfoot-footnote__button.is-active { + background-color: #6e6e6e; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; +} +.bigfoot-footnote__button:after { + content: ''; + display: table; + clear: both; +} + +.bigfoot-footnote__button__circle { + display: inline-block; + width: 0.25em; + height: 0.25em; + margin-right: 0.25em; + float: left; +} +.bigfoot-footnote__button__circle:last-child { + margin-right: 0; +} + +.bigfoot-footnote__container { + display: inline-block; + position: relative; + text-indent: 0; +} + +@media not print { + .footnote-print-only { + display: none !important; + } +} +@media print { + .bigfoot-footnote, + .bigfoot-footnote__button { + display: none !important; + } +} +.bigfoot-footnote { + position: absolute; + z-index: 10; + top: 0; + left: 0; + display: inline-block; + box-sizing: border-box; + max-width: 90%; + margin: 1.96924em 0; + background: #fafafa; + opacity: 0; + border-radius: 0.5em; + border: 1px solid #c3c3c3; + box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); + line-height: 0; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, transform; + -webkit-transition-duration: 0.25s; + transition-duration: 0.25s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transform: scale(0.1) translateZ(0); + transform: scale(0.1) translateZ(0); + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; +} +.bigfoot-footnote.is-positioned-top { + top: auto; + bottom: 0; +} +.bigfoot-footnote.is-active { + -webkit-transform: scale(1) translateZ(0); + transform: scale(1) translateZ(0); + opacity: 0.97; +} +.bigfoot-footnote.is-bottom-fixed { + position: fixed; + bottom: 0; + top: auto; + left: 0; + right: auto; + -webkit-transform: translateY(100%); + -ms-transform: translateY(100%); + transform: translateY(100%); + width: 100%; + margin: 0; + border-radius: 0; + opacity: 1; + border-width: 1px 0 0; + -webkit-transition: -webkit-transform 0.3s ease; + transition: transform 0.3s ease; +} +.bigfoot-footnote.is-bottom-fixed.is-active { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__wrapper { + margin: 0 0 0 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + max-width: 100%; +} +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__wrapper, +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__content { + border-radius: 0; +} +.bigfoot-footnote.is-bottom-fixed .bigfoot-footnote__tooltip { + display: none; +} +.bigfoot-footnote.is-scrollable:after { + content: ''; + position: absolute; + bottom: 0.3375em; + left: 0.3375em; + z-index: 14; + display: block; + height: 0.78125em; + width: 0.625em; + background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTJweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgMTIgMTUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4iPgogICAgPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkFycm93IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjAwMDAwMCwgMS4wMDAwMDApIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNSwwIEw1LDExLjUiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjUsNy41IEw1LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LjUsNy41IEw5LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuMDAwMDAwLCAxMC4wMDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTcuMDAwMDAwLCAtMTAuMDAwMDAwKSAiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo="); + background-size: cover; + opacity: 0.1; + transition-properties: opacity; + -webkit-transition-duration: 0.25s; + transition-duration: 0.25s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} +.bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:before, .bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:after { + content: ''; + position: absolute; + width: 100%; + z-index: 12; + left: 0; +} +.bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:before { + top: -1px; + height: 1.1em; + border-radius: 0.5em 0.5em 0 0; + background-image: -webkit-linear-gradient(top, #fafafa 50%, rgba(250, 250, 250, 0) 100%); + background-image: linear-gradient(to bottom, #fafafa 50%, rgba(250, 250, 250, 0) 100%); +} +.bigfoot-footnote.is-scrollable .bigfoot-footnote__wrapper:after { + bottom: -1px; + height: 1.2em; + border-radius: 0 0 0.5em 0.5em; + background-image: -webkit-linear-gradient(bottom, #fafafa 50%, rgba(250, 250, 250, 0) 100%); + background-image: linear-gradient(to top, #fafafa 50%, rgba(250, 250, 250, 0) 100%); +} +.bigfoot-footnote.is-scrollable ::-webkit-scrollbar { + display: none; +} +.bigfoot-footnote.is-fully-scrolled:after, .bigfoot-footnote.is-fully-scrolled:before { + opacity: 0; + -webkit-transition-delay: 0; + transition-delay: 0; +} + +.bigfoot-footnote__wrapper { + position: relative; + z-index: 14; + width: 22em; + display: inline-block; + box-sizing: inherit; + overflow: hidden; + margin: 0; + background-color: #fafafa; + border-radius: 0.5em; + line-height: 0; +} + +.bigfoot-footnote__content { + position: relative; + z-index: 8; + display: inline-block; + max-height: 15em; + padding: 1.1em 1.3em 1.2em; + box-sizing: inherit; + overflow: auto; + -webkit-overflow-scrolling: touch; + background: #fafafa; + border-radius: 0.5em; + -webkit-font-smoothing: subpixel-antialiased; + line-height: normal; +} +.bigfoot-footnote__content img { + max-width: 100%; +} +.bigfoot-footnote__content *:last-child { + margin-bottom: 0 !important; +} +.bigfoot-footnote__content *:first-child { + margin-top: 0 !important; +} + +.bigfoot-footnote__tooltip { + position: absolute; + z-index: 12; + box-sizing: border-box; + margin-left: -0.65em; + width: 1.3em; + height: 1.3em; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + background: #fafafa; + border: 1px solid #c3c3c3; + box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); + border-top-left-radius: 0; +} +.is-positioned-bottom .bigfoot-footnote__tooltip { + top: -0.65em; +} +.is-positioned-top .bigfoot-footnote__tooltip { + bottom: -0.65em; +} diff --git a/static/css/bigfoot-default.scss b/static/css/bigfoot-default.scss new file mode 100755 index 0000000..619bc16 --- /dev/null +++ b/static/css/bigfoot-default.scss @@ -0,0 +1,619 @@ +// bigfoot - v2.1.1 - 2015.04.04 + + +// ___ ___ ___ ___ ___ ___ +// / /\ / /\ / /\ / /\ ___ / /\ / /\ +// / /::\ / /::\ / /::\ / /::\ /__/\ / /:/_ / /::\ +// / /:/\:\ / /:/\:\ / /:/\:\ / /:/\:\ \ \:\ / /:/ /\ / /:/\:\ +// / /:/~/:// /:/ \:\ / /:/~/:// /:/ \:\ \ \:\ / /:/ /:/_ / /:/~/:/ +// /__/:/ /://__/:/ \__\:\/__/:/ /://__/:/ \__\:\ ___ \__\:\/__/:/ /:/ /\/__/:/ /:/___ +// \ \:\/:/ \ \:\ / /:/\ \:\/:/ \ \:\ / /://__/\ | |:|\ \:\/:/ /:/\ \:\/:::::/ +// \ \::/ \ \:\ /:/ \ \::/ \ \:\ /:/ \ \:\| |:| \ \::/ /:/ \ \::/~~~~ +// \ \:\ \ \:\/:/ \ \:\ \ \:\/:/ \ \:\__|:| \ \:\/:/ \ \:\ +// \ \:\ \ \::/ \ \:\ \ \::/ \__\::::/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ ~~~~ \__\/ \__\/ +// +// These are the key variables for styling the popover. +// Just set the variable to none if you don't want that styling. + +// KEY VARIABLES +// ============================================================================= + +// STYLES +$popover-width: 22em !default; // Ideal width of the popover +$popover-max-width: 90% !default; // Best as a % to accommodate smaller viewports +$popover-max-height: 15em !default; // Maximum size of the content area +$popover-color-background: rgb(250, 250, 250) !default; // Color of the popover background +$popover-border-radius: 0.5em !default; // Radius of the corners of the popover +$popover-border: 1px solid rgb(195, 195, 195) !default; // Border of the popover/ tooltip +$popover-inactive-opacity: 0 !default; // Opacity of the popover when instantiated/ deactivating +$popover-active-opacity: 0.97 !default; // Opacity of the popover when active +$popover-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3) !default; // Sets the box shadow under the popover/ tooltip +$popover-bottom-position: auto !default; // Sets the bottom position of the popover. Use only when setting positionPopover to false in the script +$popover-left-position: auto !default; // Sets the left position of the popover. Use only when setting positionPopover to false in the script +$popover-tooltip-size: 1.3em !default; // Sets the side lengths of the tooltip +$popover-scroll-indicator-width: 0.625em !default; // The width of the scroll indicator +$popover-scroll-indicator-aspect-ratio: (15/12) !default; // The ratio of the height over the width of the scroll indicator +$popover-scroll-indicator-opacity: 0.1 !default; // The active opacity of scroll indicators +$popover-initial-transform-state: scale(0.1) translateZ(0) !default; // The inital transform state for the popover +$popover-active-transform-state: scale(1) translateZ(0) !default; // The transform state for the popover once it is fully activated + +// OPTIONAL ELEMENTS +$popover-include-tooltip: true !default; // Adds a tooltip pointing to the footnote button +$popover-include-scroll-indicator: true !default; // Adds an elipsis at the bottom of scrollable popovers +$popover-include-scrolly-fades: true !default; // Fades content in on scrollable popovers +$popover-scroll-indicator-icon: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTJweCIgaGVpZ2h0PSIxNXB4IiB2aWV3Qm94PSIwIDAgMTIgMTUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4iPgogICAgPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkFycm93IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjAwMDAwMCwgMS4wMDAwMDApIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNSwwIEw1LDExLjUiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjUsNy41IEw1LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LjUsNy41IEw5LjAyNzY5Mjc5LDEyLjAyNzY5MjgiIGlkPSJMaW5lLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuMDAwMDAwLCAxMC4wMDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTcuMDAwMDAwLCAtMTAuMDAwMDAwKSAiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=") !default; + + +// OTHER VARIABLES +// ============================================================================= + +// POPOVER +$popover-margin-top: 0.1em !default; +$popover-padding-content-horizontal: 1.3em !default; +$popover-padding-content-top: 1.1em !default; +$popover-padding-content-bottom: 1.2em !default; +$popover-z-index: 10 !default; // Set the base so that it's above the other body children +$popover-initial-transform-origin: 50% 0 !default; + +// POPOVER CONTENT WRAPPER +$popover-content-color-background: $popover-color-background !default; +$popover-content-border-radius: $popover-border-radius !default; + +// OTHER POPOVER ELEMENTS +$popover-tooltip-background: $popover-color-background !default; +$popover-tooltip-radius: 0 !default; +$popover-scroll-indicator-bottom-position: 0.45em !default; +$popover-scrolly-fade-gradient-start-location: 50% !default; +$popover-scroll-indicator-padding: (($popover-padding-content-horizontal/2) - ($popover-scroll-indicator-width/2)) !default; + +// TRANSITIONS +$popover-transition-default-duration: 0.25s !default; +$popover-scroll-indicator-transition-properties: opacity !default; + +// Use none for areas you don't want to transition +$popover-transition-properties: opacity, transform !default; // no mixin to do proper prefixing of the transform, so I have to do it manually; see mixin below +$popover-scroll-indicator-transition-properties: opacity !default; +$popover-scroll-up-transition-delay: 0.4s !default; // Sets the delay for the transition of the scroll indicator when scrolling upwards +$popover-transition-default-timing-function: ease !default; + + + + + +// ___ ___ ___ +// _____ /__/\ ___ ___ / /\ /__/\ +// / /::\ \ \:\ / /\ / /\ / /::\ \ \:\ +// / /:/\:\ \ \:\ / /:/ / /:/ / /:/\:\ \ \:\ +// / /:/~/::\ ___ \ \:\ / /:/ / /:/ / /:/ \:\ _____\__\:\ +// /__/:/ /:/\:|/__/\ \__\:\ / /::\ / /::\ /__/:/ \__\:\/__/::::::::\ +// \ \:\/:/~/:/\ \:\ / /://__/:/\:\ /__/:/\:\\ \:\ / /:/\ \:\~~\~~\/ +// \ \::/ /:/ \ \:\ /:/ \__\/ \:\\__\/ \:\\ \:\ /:/ \ \:\ ~~~ +// \ \:\/:/ \ \:\/:/ \ \:\ \ \:\\ \:\/:/ \ \:\ +// \ \::/ \ \::/ \__\/ \__\/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ +// +// These are the key variables for styling the button. +// Just set the variable to none if you don't want that styling. + +// KEY VARIABLES +// ============================================================================= + +$button-height: 0.95em !default; // The total height of the button +$button-width: auto !default; // The total button width (applies only if $button-apply-dimensions is true) +$button-inner-circle-size: 0.25em !default; // Total height/width of the ellipsis circles +$button-border-radius: 0.3em !default; // Border radius on the button itself +$button-left-margin: 0.2em !default; // Margin between the button and the text to its left +$button-right-margin: 0.1em !default; // Margin between the button and the text to its right +$button-vertical-adjust: -0.1em !default; // Pushes the buttons along the vertical axis to align it with text as desired +$button-inner-circle-left-margin: 1*$button-inner-circle-size !default; // Space between the ellipsis circles + +$button-color: rgb(110, 110, 110) !default; // Background color of the button +$button-hovered-color: $button-color !default; // Background color of the button when being hovered +$button-activating-color: $button-color !default; // Background color of the button when being clicked +$button-active-color: $button-color !default; // Background color of the button when active +$button-standard-opacity: 0.2 !default; // Opacity for when the button is just sittin' there +$button-hovered-opacity: 0.5 !default; // Opacity for when the button is being hovered over +$button-activating-opacity: $button-hovered-opacity !default; // Opacity for when the button is being clicked +$button-active-opacity: 1 !default; // Opacity for when the button is active +$button-active-style-delay: 0.1s !default; // Delay before applying .active styles; this can be used to match to the popover activation transition + +$button-inner-circle-color: white !default; // Background color of the ellipsis circle +$button-inner-circle-border: none !default; // Border of the ellipsis circle + + +// OTHER VARIABLES +// ============================================================================= + +$button-total-padding: $button-height - $button-inner-circle-size !default; +$button-per-side-padding: 0.5*$button-total-padding !default; +$button-transition-properties: background-color !default; + + + +// ----- + + +// ___ ___ ___ ___ +// /__/\ ___ /__/| ___ /__/\ / /\ +// | |::\ / /\ | |:| / /\ \ \:\ / /:/_ +// | |:|:\ / /:/ | |:| / /:/ \ \:\ / /:/ /\ +// __|__|:|\:\ /__/::\ __|__|:| /__/::\ _____\__\:\ / /:/ /::\ +// /__/::::| \:\\__\/\:\__/__/::::\____\__\/\:\__ /__/::::::::\/__/:/ /:/\:\ +// \ \:\~~\__\/ \ \:\/\ ~\~~\::::/ \ \:\/\\ \:\~~\~~\/\ \:\/:/~/:/ +// \ \:\ \__\::/ |~~|:|~~ \__\::/ \ \:\ ~~~ \ \::/ /:/ +// \ \:\ /__/:/ | |:| /__/:/ \ \:\ \__\/ /:/ +// \ \:\ \__\/ | |:| \__\/ \ \:\ /__/:/ +// \__\/ |__|/ \__\/ \__\/ + +@mixin print-styles { + // These styles restore the original footnote numbers and texts when the page is printed + @media not print { + .footnote-print-only { + display: none !important; + } + } + + @media print { + .bigfoot-footnote, + .bigfoot-footnote__button { + display: none !important; + } + } +} + + + +// ----- + + +// ___ ___ ___ +// _____ /__/\ ___ ___ / /\ /__/\ +// / /::\ \ \:\ / /\ / /\ / /::\ \ \:\ +// / /:/\:\ \ \:\ / /:/ / /:/ / /:/\:\ \ \:\ +// / /:/~/::\ ___ \ \:\ / /:/ / /:/ / /:/ \:\ _____\__\:\ +// /__/:/ /:/\:|/__/\ \__\:\ / /::\ / /::\ /__/:/ \__\:\/__/::::::::\ +// \ \:\/:/~/:/\ \:\ / /://__/:/\:\ /__/:/\:\\ \:\ / /:/\ \:\~~\~~\/ +// \ \::/ /:/ \ \:\ /:/ \__\/ \:\\__\/ \:\\ \:\ /:/ \ \:\ ~~~ +// \ \:\/:/ \ \:\/:/ \ \:\ \ \:\\ \:\/:/ \ \:\ +// \ \::/ \ \::/ \__\/ \__\/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ + + + +//* +// The button that activates the footnote. By default, this will appear as a +// flat button that has an ellipse contained inside of it. + +// @state .is-active - The associated popover has been activated and is visible. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__button { + // POSITIONING + position: relative; + z-index: 5; + top: $button-vertical-adjust; + + // DISPLAY AND SIZING + box-sizing: border-box; + -moz-box-sizing: border-box;; + display: inline-block; + padding: $button-per-side-padding; + margin: 0 $button-right-margin 0 $button-left-margin; + + // BACKDROP + border: none; + border-radius: $button-border-radius; + cursor: pointer; + background-color: rgba($button-color, $button-standard-opacity); + backface-visibility: hidden; + + // TEXT + font-size: 1rem; + line-height: 0; + vertical-align: middle; + text-decoration: none; + -webkit-font-smoothing: antialiased; + + // TRANSITIONS + transition-property: $button-transition-properties; + transition-duration: $popover-transition-default-duration; + + &:hover, + &:focus { + outline: none; + background-color: rgba($button-hovered-color, $button-hovered-opacity); + } + + &:active { + background-color: rgba($button-activating-color, $button-activating-opacity); + } + + &.is-active { + background-color: rgba($button-active-color, $button-active-opacity); + transition-delay: $button-active-style-delay; + } + + // Clearfix + &:after { + content: ''; + display: table; + clear: both; + } +} + + + + + +// _____ ___ ___ +// / /::\ / /\ ___ / /\ +// / /:/\:\ / /::\ / /\ / /:/_ +// / /:/ \:\ / /:/\:\ / /:/ / /:/ /\ +// /__/:/ \__\:| / /:/ \:\ / /:/ / /:/ /::\ +// \ \:\ / /://__/:/ \__\:\ / /::\ /__/:/ /:/\:\ +// \ \:\ /:/ \ \:\ / /://__/:/\:\\ \:\/:/~/:/ +// \ \:\/:/ \ \:\ /:/ \__\/ \:\\ \::/ /:/ +// \ \::/ \ \:\/:/ \ \:\\__\/ /:/ +// \__\/ \ \::/ \__\/ /__/:/ +// \__\/ \__\/ + +//* +// Each of the three circles forming the ellipse within the button. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__button__circle { + // DISPLAY AND SIZING + display: inline-block; + width: $button-inner-circle-size; + height: $button-inner-circle-size; + margin-right: $button-inner-circle-left-margin; + float: left; + + // Gets rid of margin on the last circle + &:last-child { margin-right: 0; } +} + + + + + +// ___ ___ ___ ___ ___ +// / /\ / /\ /__/\ ___ / /\ ___ /__/\ +// / /:/ / /::\ \ \:\ / /\ / /::\ / /\ \ \:\ +// / /:/ / /:/\:\ \ \:\ / /:/ / /:/\:\ / /:/ \ \:\ +// / /:/ ___ / /:/ \:\ _____\__\:\ / /:/ / /:/~/::\ /__/::\ _____\__\:\ +// /__/:/ / /\/__/:/ \__\:\/__/::::::::\ / /::\ /__/:/ /:/\:\\__\/\:\__ /__/::::::::\ +// \ \:\ / /:/\ \:\ / /:/\ \:\~~\~~\//__/:/\:\\ \:\/:/__\/ \ \:\/\\ \:\~~\~~\/ +// \ \:\ /:/ \ \:\ /:/ \ \:\ ~~~ \__\/ \:\\ \::/ \__\::/ \ \:\ ~~~ +// \ \:\/:/ \ \:\/:/ \ \:\ \ \:\\ \:\ /__/:/ \ \:\ +// \ \::/ \ \::/ \ \:\ \__\/ \ \:\ \__\/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ \__\/ + +//* +// The container for the button and popover. This is required so that the popover +// is guaranteed to have a relatively-positioned container, and to help with the +// positioning calculation. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__container { + display: inline-block; + position: relative; + text-indent: 0; +} + + + + + +// ___ ___ ___ +// / /\ / /\ ___ /__/\ ___ +// / /::\ / /::\ / /\ \ \:\ / /\ +// / /:/\:\ / /:/\:\ / /:/ \ \:\ / /:/ +// / /:/~/:// /:/~/:/ /__/::\ _____\__\:\ / /:/ +// /__/:/ /://__/:/ /:/___\__\/\:\__ /__/::::::::\ / /::\ +// \ \:\/:/ \ \:\/:::::/ \ \:\/\\ \:\~~\~~\//__/:/\:\ +// \ \::/ \ \::/~~~~ \__\::/ \ \:\ ~~~ \__\/ \:\ +// \ \:\ \ \:\ /__/:/ \ \:\ \ \:\ +// \ \:\ \ \:\ \__\/ \ \:\ \__\/ +// \__\/ \__\/ \__\/ + +@include print-styles; + + + +// ----- + + +// ___ ___ ___ ___ ___ ___ +// / /\ / /\ / /\ / /\ ___ / /\ / /\ +// / /::\ / /::\ / /::\ / /::\ /__/\ / /:/_ / /::\ +// / /:/\:\ / /:/\:\ / /:/\:\ / /:/\:\ \ \:\ / /:/ /\ / /:/\:\ +// / /:/~/:// /:/ \:\ / /:/~/:// /:/ \:\ \ \:\ / /:/ /:/_ / /:/~/:/ +// /__/:/ /://__/:/ \__\:\/__/:/ /://__/:/ \__\:\ ___ \__\:\/__/:/ /:/ /\/__/:/ /:/___ +// \ \:\/:/ \ \:\ / /:/\ \:\/:/ \ \:\ / /://__/\ | |:|\ \:\/:/ /:/\ \:\/:::::/ +// \ \::/ \ \:\ /:/ \ \::/ \ \:\ /:/ \ \:\| |:| \ \::/ /:/ \ \::/~~~~ +// \ \:\ \ \:\/:/ \ \:\ \ \:\/:/ \ \:\__|:| \ \:\/:/ \ \:\ +// \ \:\ \ \::/ \ \:\ \ \::/ \__\::::/ \ \::/ \ \:\ +// \__\/ \__\/ \__\/ \__\/ ~~~~ \__\/ \__\/ +// + + + +//* +// The popover for the footnote. This popover will be, by default, be sized and positioned +// by the script. However, many of the sizes can be established in this stylesheet and +// will be respected by the script. `max-width` will limit the width of the popover +// relative to the viewport. `width` (on `bigfoot-footnote__wrapper`) will set the +// absolute max width. Max height can be set via a `max-height` property +// on `bigfoot-footnote__content`. + +// By default, the popover has a light gray background, a shadow for some depth, +// rounded corners, and a tooltip pointing to the footnote button. + +// @state .is-active - The popover has been activated and is visible. +// @state .is-positioned-top - The popover is above the button. +// @state .is-positioned-bottom - The popover is below the button. +// @state .is-scrollable - The popover content is greater than the popover height. +// @state .is-fully-scrolled - The popover content is scrolled to the bottom. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote { + // POSITIONING + position: absolute; + z-index: $popover-z-index; + top: 0; left: 0; + + // DISPLAY AND SIZING + display: inline-block; + box-sizing: border-box; + // Height is set in .footnote-content-wrapper + max-width: $popover-max-width; + // 1.414213... is to get the diagonal height of the tooltip using pythagorus, yo. + margin: ((1.4142135624 * $popover-tooltip-size / 2) + $button-height + $popover-margin-top) 0; + // fits the popover to the contents + + // BACKDROP + background: $popover-color-background; + opacity: $popover-inactive-opacity; + border-radius: $popover-border-radius; + border: $popover-border; + box-shadow: $popover-box-shadow; + + // TEXT + line-height: 0; + + // TRANSITIONS + transition-property: $popover-transition-properties; + transition-duration: $popover-transition-default-duration; + transition-timing-function: $popover-transition-default-timing-function; + + // TRANSFORMS + transform: $popover-initial-transform-state; + transform-origin: $popover-initial-transform-origin; + + &.is-positioned-top { + top: auto; + bottom: 0; + } + + &.is-active { + transform: $popover-active-transform-state; + opacity: $popover-active-opacity; + } + + &.is-bottom-fixed { + // POSITIONING + position: fixed; + bottom: 0; top: auto; + left: 0; right: auto; + transform: translateY(100%); + + // DISPLAY AND SIZING + width: 100%; + margin: 0; + + // BACKDROP + border-radius: 0; + opacity: 1; + border-width: 1px 0 0; + + // TRANSITIONS + transition: transform 0.3s ease; + + &.is-active { + transform: translateY(0); + } + + .bigfoot-footnote__wrapper { + margin: 0 0 0 50%; + transform: translateX(-50%); + max-width: 100%; + } + + .bigfoot-footnote__wrapper, + .bigfoot-footnote__content { + border-radius: 0; + } + + .bigfoot-footnote__tooltip { + display: none; + } + } + + &.is-scrollable { + // A scrollable indicator in the left margin of the popover. + &:after { + // CONTENT + content: ''; + + // POSITIONING + position: absolute; + bottom: $popover-scroll-indicator-padding; + left: $popover-scroll-indicator-padding; + z-index: ($popover-z-index + 4); + + // DISPLAY AND SIZING + display: block; + height: ($popover-scroll-indicator-width*$popover-scroll-indicator-aspect-ratio); + width: $popover-scroll-indicator-width; + + // BACKDROP + background-image: $popover-scroll-indicator-icon; + background-size: cover; + opacity: $popover-scroll-indicator-opacity; + transition-properties: $popover-scroll-indicator-transition-properties; + transition-duration: $popover-transition-default-duration; + transition-timing-function: $popover-transition-default-timing-function; + } + + .bigfoot-footnote__wrapper { + &:before, + &:after { + content: ''; + position: absolute; + width: 100%; + // Above the content + z-index: ($popover-z-index + 2); + left: 0; + } + + &:before { + top: -1px; + height: $popover-padding-content-top; + border-radius: $popover-border-radius $popover-border-radius 0 0; + background-image: linear-gradient(to bottom, $popover-color-background $popover-scrolly-fade-gradient-start-location, transparentize($popover-color-background, 1) 100%); + } + + &:after { + bottom: -1px; + height: $popover-padding-content-bottom; + border-radius: 0 0 $popover-border-radius $popover-border-radius; + background-image: linear-gradient(to top, $popover-color-background $popover-scrolly-fade-gradient-start-location, transparentize($popover-color-background, 1) 100%); + } + } + + ::-webkit-scrollbar { display: none; } + } + + &.is-fully-scrolled { + &:after, + &:before { + opacity: 0; + transition-delay: 0; + } + } +} + + + +//* +// Wraps around the footnote content. This is necessary in order to have an element +// above the tooltip and that can provide top and bottom indicators that there is +// additional content on scrollable popovers. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__wrapper { + // POSITIONING + position: relative; + // Above the outer tooltip, below the inner tooltip + z-index: ($popover-z-index + 4); + + // DISPLAY AND SIZING + width: $popover-width; + display: inline-block; + box-sizing: inherit; + overflow: hidden; + margin: 0; + + // BACKDROP + background-color: $popover-color-background; + border-radius: $popover-border-radius; + + // TEXT + line-height: 0; +} + + + +//* +// Contains the actual footnote content. There is very little prescription here +// on the footnote content itself, except for removing and top margin on the first +// element and bottom margin on the last child. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__content { + // POSITIONING + position: relative; + z-index: ($popover-z-index - 2); // Below fading bars + + // DISPLAY AND SIZING + display: inline-block; + max-height: $popover-max-height; + padding: $popover-padding-content-top $popover-padding-content-horizontal $popover-padding-content-bottom; + box-sizing: inherit; + overflow: auto; + -webkit-overflow-scrolling: touch; + + // BACKDROP + background: $popover-content-color-background; + border-radius: $popover-content-border-radius; + + // TEXT + -webkit-font-smoothing: subpixel-antialiased; + line-height: normal; + + // INTERIOR ELEMENTS + img { max-width: 100%; } + *:last-child { margin-bottom: 0 !important; } + *:first-child { margin-top: 0 !important; } +} + + + +//* +// A triangular shape pointing towards the footnote button. + +// @since 2.1.0 +// @author Chris Sauve + +.bigfoot-footnote__tooltip { + // POSITIONING + position: absolute; + // Above the footnote-main-wrapper and the outer tooltip + z-index: ($popover-z-index + 2); + + // DISPLAY AND SIZING + box-sizing: border-box; + margin-left: (-0.5 * $popover-tooltip-size); + // Smaller by one border-width's worth + width: $popover-tooltip-size; + height: $popover-tooltip-size; + transform: rotate(45deg); + + // BACKDROP + background: $popover-tooltip-background; + border: $popover-border; + box-shadow: $popover-box-shadow; + border-top-left-radius: $popover-tooltip-radius; + + .is-positioned-bottom & { + top: (-0.5 * $popover-tooltip-size); + } + + .is-positioned-top & { + bottom: (-0.5 * $popover-tooltip-size); + } +} diff --git a/static/css/demo.css b/static/css/demo.css new file mode 100755 index 0000000..c32b010 --- /dev/null +++ b/static/css/demo.css @@ -0,0 +1,327 @@ +/* =Typography +-----------------------------------------------------------------------------*/ +body { + font-family: 'ff-tisa-web-pro', Georgia, 'Times New Roman', Times, Serif; + font-size: 1.05em; + line-height: 1.6em; + background-color: #faf8f8; +} + +form, input[type="search"], select[multiple="multiple"] {font-family: 'ff-tisa-web-pro', 'Trebuchet MS', Helvetica, Arial, sans-serif;} + +h1, h2, h3, h4, h5 { + font-family: 'ff-tisa-web-pro', 'Trebuchet MS', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-style: italic; + color: #36454f; +} +h2, h3, h4, h5 { + font-weight: normal; + font-style: italic; +} +h2, h3 { + text-transform: lowercase; + font-family: 'ff-meta-serif-sc-web-pro', 'Trebuchet MS', 'Helvetica Neue', Tahoma; + font-style: normal; +} + +.label-red { + background-color: #36454f; +} + +a {color: #36454f; + text-decoration:none; + border-bottom: dotted 1px #A1A3A1;} + +a:hover {text-decoration:underline;} + +a.badge.badge-red { color: #fff;} + +/* =Code +-----------------------------------------------------------------------------*/ +pre, +code, +kbd, +samp, +var, +output { + font-size: 90%; + font-style: normal; + font-family: PragmataPro, Menlo, Monaco, "Andale Mono", "Lucida Console", "Courier New", monospace; +} + +/* =Common +-----------------------------------------------------------------------------*/ +img, +#feedback, +#banner, +#intro li { + border-radius: 3px; +} + +nav {text-transform: lowercase; + font-family: 'ff-meta-serif-sc-web-pro';} + +.hd {font-family: 'ff-tisa-web-pro'; } + +.caps {text-transform: lowercase; +font-family: 'ff-meta-serif-sc-web-pro'; } + + +.compact { margin: 0 0 0 1.3em; } + +hr {border-top: 1px solid #b3cde0; margin-top:5ex; margin-bottom: 5ex;} + +.separator {border-top: 5px solid #b3cde0;} + +h2 {border-bottom: 1px solid #b3cde0;} + +h2 a {border-bottom: none;} + +/* =Layout +-----------------------------------------------------------------------------*/ +.wrapper { + padding: 0 10px; + width: 94%; + max-width: 1300px; + margin: auto; +} +#outer { + padding: 3em 0 1em 0; + margin: 1em 0 3em 0; + background: url(hero-image1.jpg) #282828; + background-size: cover; + background-position: 50% 50%; + box-shadow: 0 0 3px #333 inset; +/* border: 1px solid #000; */ + color: #f2f2f2; + height: 200px; +} +#outer h2, +#outer h3 { + color: #ccc; +} + +#topbar { + background: #536878; + padding:0px; + margin:0ex; + /* border-bottom: 3px solid #36454f; */ +} +#midbar { + background: #eaa; + padding:0px; + margin:0ex; + /* border-bottom: 3px solid #36454f; */ +} + + +#topbar .navbar {padding-bottom:14px; font-size:120%;} +#topbar li a {color: #fff; border-bottom: none;} +#topbar li a {color: #b3cde0;} +#topbar li span a {color: #fff;} + +.avatar { + -webkit-border-radius: 50em; + -moz-border-radius: 50em; + border-radius: 50em; +} + + +.image-left { + float: left; + margin: 0 1em 1em 0; +} + +/* =Header +-----------------------------------------------------------------------------*/ +header { + padding-top: 15px; + margin-bottom: 0em; +} + +/* #header h1 { + float: left; + font-size: 48px; + margin-top: 1px; + margin-bottom: 0; + color: #ffffff; +} */ +/* #header nav { + margin-top: 1.2em; + margin-bottom: 0; + float: right; +} */ + + + +header h1 { font-size: 24px; + margin-top: 1px; + margin-bottom: 0; +/* color: #ffffff;*/ } + + +#topbar form {float:right; display:inline-block; } + + +/* =Promo +-----------------------------------------------------------------------------*/ +#promo { + margin-bottom: 1.5em; +} + +/* =Intro +-----------------------------------------------------------------------------*/ +#intro .subheader { + color: rgba(0, 0, 0, .4); + padding-bottom: .3em; + border-bottom: 1px solid #ccc; +} +#intro li { +/* background-color: #e9e6da;*/ +} + + +/* =Feedback +-----------------------------------------------------------------------------*/ +#feedback { + background-color: rgba(0,0,0,.5); + padding: 2em 3em; +} + +/* =Banner +-----------------------------------------------------------------------------*/ +#banner { + line-height: 0; + padding: 1.5em; + background-color: #e9e6da; +} + +/* =Blocks +-----------------------------------------------------------------------------*/ +#blocks dl { + overflow: hidden; + margin: 0; + padding-bottom: 1.5em; +} +#blocks dt { + float: left; + width: 22%; + margin-right: 4%; +} +#blocks dt img { + padding: 4px; + background-color: #fff; + border: 1px solid #000; + box-shadow: 4px 4px 0 #000; +} +#blocks dd { + margin: 0; + float: left; + width: 74%; + padding-bottom: 1.5em; +} + + +/* =Partners +-----------------------------------------------------------------------------*/ +#partners { + padding-top: 1.5em; +} +#partners h4 { + color: #666; +} +/* =Footer +-----------------------------------------------------------------------------*/ + +.dateblock {text-align:right; } + + +/* =Footer +-----------------------------------------------------------------------------*/ +#footer { + color: #b3cde0; + margin-top: 3ex; + padding-bottom: 20px; + font-size: .9em; + padding-top: 1em; + background-color: #536878; + overflow: hidden; +/* box-shadow: 0 2px 4px #bbb inset;*/ +/* background: #f0f0f0;*/ + border-top: 3px solid #36454f; +} +#footer a { color: #fff; } +#footer section { + float: none; + text-align:center; +} +#footer nav { + float: right; +} +#footer nav ul { + list-style: none; + margin: 0; +} +#footer nav ul li { + float: left; + margin-left: 2em; +} + + + + +/* =Tablet (Portrait) +-----------------------------------------------------------------------------*/ +@media only screen and (min-width: 768px) and (max-width: 959px) { + .wrapper { width: 748px; } +} + + + +/* =Mobile (Portrait) +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { +/* .wrapper { width: 300px; }*/ +/* #header h1 { float: none; text-align:center; font-size: 36px;}*/ +/* #header nav { float:none; text-align:center;}*/ + /* #header nav ul li { margin: 0; margin-right: 1em; } */ + #topbar .navbar {padding-bottom:12px; font-size:120%; } + #topbar .navbar li {float:left; margin-left:1.1em;} + #banner { text-align: center; margin-bottom: 1.5em; } + #footer section, #footer nav { float: none; text-align:center;} + #footer nav ul { margin-top: 1em; text-align:center;} + #footer nav ul li { margin: 0; margin-right: 1em;} + .dateblock {text-align:center;} + h1, h2, h3, h4, h5, form, input {text-align:center;} +} + + +/* =Mobile (Landscape) +-----------------------------------------------------------------------------*/ +@media only screen and (min-width: 480px) and (max-width: 767px) { + .wrapper { width: 420px; } +} + + +.grlog blockquote { font-style:normal; border: 0px ; font-size:1em;} + +.grlog blockquote blockquote { border-left: 2px solid #dddddd; } + +.grlog .datestamp { text-transform: lowercase; + font-family: 'ff-meta-serif-sc-web-pro'; } + +.grlog img { margin-left: 12px; margin-bottom: 12px; margin-top:12px;} + +.grlog p {padding-top:0.5em;} + +.oldcons img { margin-left: 0px; margin-bottom: 24px; margin-top:12px;} + +.oldcons p {padding-top:0.5em;} + +.oldcons h3 {padding-top:0.2em;} + +.logician {float: left; margin-right:16px;} + +p.capitalize { + text-transform: capitalize; +} \ No newline at end of file diff --git a/static/css/kube.css b/static/css/kube.css new file mode 100755 index 0000000..47fdca2 --- /dev/null +++ b/static/css/kube.css @@ -0,0 +1,3646 @@ +/* + Kube Framework 4 +*/ +/* =Reset +-----------------------------------------------------------------------------*/ +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +html, +body, +div, +span, +object, +iframe, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +embed, +object, +iframe, +audio, +video, +canvas, +progress, +meter, +output, +textarea { + display: block; +} +audio:not([controls]) { + display: none; + height: 0; +} +/* To prevent some browsers from inserting quotes on q and p */ +blockquote, +q { + quotes: none; +} +blockquote p:before, +blockquote p:after, +q:before, +q:after { + content: ''; + content: none; +} +/* Table reset */ +table { + border-collapse: collapse; + border-spacing: 0; +} +caption, +th, +td { + text-align: left; + vertical-align: top; +} +thead th, +thead td { + font-weight: bold; + vertical-align: bottom; +} +/* Image inside */ +a img, +th img, +td img { + vertical-align: top; +} +button, +input, +select, +textarea { + margin: 0; +} +textarea { + overflow: auto; + vertical-align: top; + resize: vertical; +} +/* Normalize buttons in IE */ +button { + width: auto; + overflow: visible; +} +/* Hand cursor on clickable controls */ +input[type="reset"], +input[type="submit"], +input[type="file"], +input[type="radio"], +input[type="checkbox"], +select, +button { + cursor: pointer; +} +/* Trick with vertical align for radio and checkbox */ +input[type="radio"], +input[type="checkbox"] { + font-size: 110%; + position: relative; + top: -1px; + margin-right: 3px; +} +/* Normalize search fields */ +input[type="search"] { + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} +/* Normalize horizontal line */ +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ddd; +} +/* Responsive media */ +img, +video, +audio, +embed, +object { + max-width: 100%; +} +img, +video, +embed, +object { + height: auto; +} +embed, +object { + height: 100%; +} +img { + vertical-align: middle; + -ms-interpolation-mode: bicubic; +} +/* =Typography +-----------------------------------------------------------------------------*/ +body { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 0.9375em; + line-height: 1.65em; + background: #ffffff; + color: #222222; +} +/* =Links +-----------------------------------------------------------------------------*/ +a { + color: #134da5; +} +a:focus, +a:hover { + color: #de2c3b; +} +/* =Headings +-----------------------------------------------------------------------------*/ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-weight: bold; + color: #000000; + text-rendering: optimizeLegibility; + margin: 0 0 .5em 0; +} +h1, +.h1, +h2, +.h2 { + line-height: 1.1; +} +h3, +.h3, +h4, +.h4 { + line-height: 1.3; +} +h1, +.h1 { + font-size: 2.25em; +} +h2, +.h2 { + font-size: 1.5em; + margin-bottom: .7em; +} +h3, +.h3 { + font-size: 1.3125em; +} +h4, +.h4 { + font-size: 1.125em; +} +h5, +.h5 { + font-size: 1em; +} +h6, +.h6 { + font-size: 0.75em; + text-transform: uppercase; +} +/* =Lead +-----------------------------------------------------------------------------*/ +.lead { + font-size: 1.3125em; + line-height: 1.5; + margin-bottom: 1.0999999999999999em; +} +/* =Line height and margin +-----------------------------------------------------------------------------*/ +p, +ul, +ol, +dl, +dd, +dt, +blockquote, +td, +th { + line-height: 1.65em; +} +ul, +ol, +ul ul, +ol ol, +ul ol, +ol ul { + margin: 0 0 0 3.3em; +} +ul li, +ol li { + text-align: left; +} +ol ol li { + list-style-type: lower-alpha; +} +ol ol ol li { + list-style-type: lower-roman; +} +p, +ul, +ol, +dl, +blockquote, +hr, +pre, +table, +form, +fieldset, +figure, +address { + margin-bottom: 1.65em; +} +/* =Blockquote +-----------------------------------------------------------------------------*/ +blockquote { + position: relative; + font-style: italic; + font-size: 1.125em; + margin-left: 2.4749999999999996em; + padding-left: 1.65em; + border-left: 2px solid #dddddd; +} +blockquote p { + margin-bottom: .5em; +} +blockquote small, +cite { + color: rgba(0, 0, 0, 0.4); + font-style: italic; +} +small, +blockquote cite { + font-size: 12.75px; + line-height: 1; +} +/* =Address +-----------------------------------------------------------------------------*/ +address { + font-style: normal; +} +/* =Definition list +-----------------------------------------------------------------------------*/ +dl dt { + font-weight: bold; +} +dd { + margin-left: 1.65em; +} +/* =Text-level +-----------------------------------------------------------------------------*/ +s, +del { + text-decoration: line-through; +} +abbr[title], +dfn[title] { + border-bottom: 1px dotted #0f0f0f; + cursor: help; +} +strong, +b { + font-weight: bold; +} +em, +i { + font-style: italic; +} +sub, +sup { + font-size: 11.25px; + line-height: 0; + position: relative; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +figcaption { + margin: .4em 0; + font-size: 12.75px; + font-style: italic; +} +ins, +u { + text-decoration: underline; +} +mark { + background-color: #ffc800; + color: #0f0f0f; + text-decoration: none; +} +/* =Code +-----------------------------------------------------------------------------*/ +pre, +code, +kbd, +samp, +var, +output { + font-size: 90%; + font-style: normal; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +pre { + margin-top: 1.65em; + font-size: 100%; + line-height: 1.5; + color: #222222; + overflow: auto; +} +code, +samp, +kbd { + padding: 3px 6px 2px 6px; + display: inline-block; + line-height: 1; + border-radius: 2px; +} +code { + background: #f4f4f4; + border: 1px solid #d4d4d4; +} +pre code { + font-size: 100%; + border: none; + padding: 0; + background: none; + line-height: 1.65em; +} +var { + color: rgba(0, 0, 0, 0.5); +} +samp { + background: #d3e3fb; + border: 1px solid #b2cef8; +} +kbd { + background: #0f0f0f; + color: rgba(255, 255, 255, 0.85); + white-space: nowrap; +} +/* =Form +-----------------------------------------------------------------------------*/ +button:active, +button:focus { + outline: none; +} +textarea, +select { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 1em; + box-shadow: none; +} +textarea, +select[multiple], +select[multiple="multiple"] { + padding: 0.3em 0.35em; + line-height: 1.35em; + width: 100%; +} +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="phone"], +input[type="tel"], +input[type="number"], +input[type="datetime"], +input[type="date"], +input[type="month"], +input[type="color"], +input[type="time"], +input[type="search"], +input[type="datetime-local"] { + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 1em; + box-shadow: none; + padding: 0.3em 0.35em; + line-height: 1.65em; + border-radius: 0; + outline: none; +} +select[multiple], +select[multiple="multiple"], +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="phone"], +input[type="tel"], +input[type="number"], +input[type="datetime"], +input[type="date"], +input[type="month"], +input[type="color"], +input[type="time"], +input[type="search"], +input[type="datetime-local"] { + background: #ffffff; + border: 1px solid #cccccc; + position: relative; + z-index: 2; + -webkit-appearance: none; +} +textarea[disabled], +input[type="text"][disabled], +input[type="password"][disabled], +input[type="email"][disabled], +input[type="url"][disabled], +input[type="phone"][disabled], +input[type="tel"][disabled], +input[type="number"][disabled], +input[type="datetime"][disabled], +input[type="date"][disabled], +input[type="month"][disabled], +input[type="color"][disabled], +input[type="time"][disabled], +input[type="search"][disabled], +input[type="datetime-local"][disabled] { + resize: none; + color: rgba(0, 0, 0, 0.5); +} +select[disabled], +input[type="checkbox"][disabled], +input[type="radio"][disabled] { + cursor: default; +} +input::-moz-focus-inner, +button::-moz-focus-inner { + border: 0; + padding: 0; +} +input[type="range"] { + position: relative; + top: 3px; +} +select { + margin-bottom: 0 !important; +} +fieldset { + padding: 1.65em; + margin-bottom: 1.65em; + border: 1px solid #cccccc; +} +fieldset *:last-child { + margin-bottom: 0 !important; +} +legend { + font-weight: bold; + padding: 0 1em; + margin-left: -1em; +} +/* =Tables +-----------------------------------------------------------------------------*/ +table { + max-width: 100%; + width: 100%; + empty-cells: show; +} +table caption { + text-transform: uppercase; + padding: 0 1.0999999999999999em; + color: rgba(0, 0, 0, 0.4); + font-size: 12.75px; +} +table th, +table td { + border-bottom: 1px solid #eeeeee; + padding: 0.825em 1.0999999999999999em; +} +table tfoot th, +table tfoot td { + color: rgba(0, 0, 0, 0.4); +} +/* =Grid +-----------------------------------------------------------------------------*/ +.units-container:after, +.units-row:after { + content: ""; + display: table; + clear: both; +} +.units-container:after, +.units-row:after { + content: ""; + display: table; + clear: both; +} +.units-container { + /* it's the trick to not collapse padding-top in the child element */ + + padding-top: 1px; + margin-top: -1px; +} +.units-row { + margin-bottom: 1.65em; +} +.width-100, +.unit-100 { + width: 100%; +} +.width-90, +.unit-90 { + width: 90%; +} +.width-80, +.unit-80 { + width: 80%; +} +.width-75, +.unit-75 { + width: 75%; +} +.width-70, +.unit-70 { + width: 70%; +} +.width-66, +.unit-66 { + width: 66.6%; +} +.width-65, +.unit-65 { + width: 65%; +} +.width-60, +.unit-60 { + width: 60%; +} +.width-50, +.unit-50 { + width: 50%; +} +.width-40, +.unit-40 { + width: 40%; +} +.width-35, +.unit-35 { + width: 35%; +} +.width-33, +.unit-33 { + width: 33.3%; +} +.width-30, +.unit-30 { + width: 30%; +} +.width-25, +.unit-25 { + width: 25%; +} +.width-20, +.unit-20 { + width: 20%; +} +.width-10, +.unit-10 { + width: 10%; +} +.units-row .unit-90, +.units-row .unit-80, +.units-row .unit-75, +.units-row .unit-70, +.units-row .unit-66, +.units-row .unit-65, +.units-row .unit-60, +.units-row .unit-50, +.units-row .unit-40, +.units-row .unit-35, +.units-row .unit-33, +.units-row .unit-30, +.units-row .unit-25, +.units-row .unit-20, +.units-row .unit-10 { + float: left; + margin-left: 3%; +} +.units-row .unit-90:first-child, +.units-row .unit-80:first-child, +.units-row .unit-75:first-child, +.units-row .unit-70:first-child, +.units-row .unit-66:first-child, +.units-row .unit-65:first-child, +.units-row .unit-60:first-child, +.units-row .unit-50:first-child, +.units-row .unit-40:first-child, +.units-row .unit-35:first-child, +.units-row .unit-33:first-child, +.units-row .unit-30:first-child, +.units-row .unit-25:first-child, +.units-row .unit-20:first-child, +.units-row .unit-10:first-child { + margin-left: 0; +} +.units-row .unit-90 { + width: 89.7%; +} +.units-row .unit-80 { + width: 79.4%; +} +.units-row .unit-75 { + width: 74.25%; +} +.units-row .unit-70 { + width: 69.1%; +} +.units-row .unit-66 { + width: 65.66666666666666%; +} +.units-row .unit-65 { + width: 65.66666666666666%; +} +.units-row .unit-60 { + width: 58.800000000000004%; +} +.units-row .unit-50 { + width: 48.5%; +} +.units-row .unit-40 { + width: 38.2%; +} +.units-row .unit-35 { + width: 31.333333333333332%; +} +.units-row .unit-33 { + width: 31.333333333333332%; +} +.units-row .unit-30 { + width: 27.9%; +} +.units-row .unit-25 { + width: 22.75%; +} +.units-row .unit-20 { + width: 17.6%; +} +.units-row .unit-10 { + width: 7.3%; +} +.unit-push-90, +.unit-push-80, +.unit-push-75, +.unit-push-70, +.unit-push-66, +.unit-push-65, +.unit-push-60, +.unit-push-50, +.unit-push-40, +.unit-push-35, +.unit-push-33, +.unit-push-30, +.unit-push-25, +.unit-push-20, +.unit-push-10 { + position: relative; +} +.unit-push-90 { + left: 92.7%; +} +.unit-push-80 { + left: 82.4%; +} +.unit-push-75 { + left: 77.25%; +} +.unit-push-70 { + left: 72.1%; +} +.unit-push-66 { + left: 68.66666666666666%; +} +.unit-push-65 { + left: 68.66666666666666%; +} +.unit-push-60 { + left: 61.800000000000004%; +} +.unit-push-50 { + left: 51.5%; +} +.unit-push-40 { + left: 41.2%; +} +.unit-push-35 { + left: 34.33333333333333%; +} +.unit-push-33 { + left: 34.33333333333333%; +} +.unit-push-30 { + left: 30.9%; +} +.unit-push-25 { + left: 25.75%; +} +.unit-push-20 { + left: 20.6%; +} +.unit-push-10 { + left: 10.3%; +} +.units-row .unit-push-right { + float: right; +} +.units-row .unit-role-right { + margin-left: 3%; + float: right; +} +.units-row .unit-role-left { + margin-left: 0; +} +.centered, +.unit-centered { + float: none !important; + margin: 0 auto !important; +} +.unit-padding { + padding: 1.65em; +} +.units-padding .unit-100, +.units-padding .unit-90, +.units-padding .unit-80, +.units-padding .unit-75, +.units-padding .unit-70, +.units-padding .unit-66, +.units-padding .unit-65, +.units-padding .unit-60, +.units-padding .unit-50, +.units-padding .unit-40, +.units-padding .unit-35, +.units-padding .unit-33, +.units-padding .unit-30, +.units-padding .unit-25, +.units-padding .unit-20, +.units-padding .unit-10 { + padding: 1.65em; +} +.units-split .unit-90, +.units-split .unit-80, +.units-split .unit-75, +.units-split .unit-70, +.units-split .unit-66, +.units-split .unit-65, +.units-split .unit-60, +.units-split .unit-50, +.units-split .unit-40, +.units-split .unit-35, +.units-split .unit-33, +.units-split .unit-30, +.units-split .unit-25, +.units-split .unit-20, +.units-split .unit-10 { + margin-left: 0; +} +.units-split .unit-90 { + width: 90%; +} +.units-split .unit-80 { + width: 80%; +} +.units-split .unit-75 { + width: 75%; +} +.units-split .unit-70 { + width: 70%; +} +.units-split .unit-66 { + width: 66.6%; +} +.units-split .unit-65 { + width: 65%; +} +.units-split .unit-60 { + width: 60%; +} +.units-split .unit-50 { + width: 50%; +} +.units-split .unit-40 { + width: 40%; +} +.units-split .unit-35 { + width: 35%; +} +.units-split .unit-33 { + width: 33.3%; +} +.units-split .unit-30 { + width: 30%; +} +.units-split .unit-25 { + width: 25%; +} +.units-split .unit-20 { + width: 20%; +} +.units-split .unit-10 { + width: 10%; +} +/* =Blocks +-----------------------------------------------------------------------------*/ +.blocks-2, +.blocks-3, +.blocks-4, +.blocks-5, +.blocks-6 { + padding-left: 0; + list-style: none; + margin-left: -3%; +} +.blocks-2:after, +.blocks-3:after, +.blocks-4:after, +.blocks-5:after, +.blocks-6:after { + content: ""; + display: table; + clear: both; +} +.blocks-2:after, +.blocks-3:after, +.blocks-4:after, +.blocks-5:after, +.blocks-6:after { + content: ""; + display: table; + clear: both; +} +.blocks-2 > li, +.blocks-3 > li, +.blocks-4 > li, +.blocks-5 > li, +.blocks-6 > li { + height: auto; + float: left; + margin-bottom: 1.65em; + margin-left: 3%; +} +.blocks-2 > li ul, +.blocks-3 > li ul, +.blocks-4 > li ul, +.blocks-5 > li ul, +.blocks-6 > li ul { + list-style-type: disc; +} +.blocks-2 > li ul ul, +.blocks-3 > li ul ul, +.blocks-4 > li ul ul, +.blocks-5 > li ul ul, +.blocks-6 > li ul ul { + list-style-type: circle; +} +.blocks-2 > li li, +.blocks-3 > li li, +.blocks-4 > li li, +.blocks-5 > li li, +.blocks-6 > li li { + float: none; + margin: 0; +} +.blocks-2 > li { + width: 47%; +} +.blocks-3 > li { + width: 30.333333333333332%; +} +.blocks-4 > li { + width: 22%; +} +.blocks-5 > li { + width: 17%; +} +.blocks-6 > li { + width: 13.666666666666666%; +} +.block-first { + clear: both; +} +/* =Tables +-----------------------------------------------------------------------------*/ +table.table-bordered td, +table.table-bordered th { + border: 1px solid #eeeeee; +} +table.table-simple td, +table.table-simple th, +table.table-simple caption { + border: none; + padding-left: 0; +} +table.table-flat td, +table.table-flat th, +table.table-flat caption { + border: none; + padding: 0; +} +table.table-stroked td, +table.table-stroked th { + border-bottom: 1px solid #eeeeee; +} +table.table-stripped tbody tr:nth-child(odd) td { + background: #f8f8f8; +} +table.table-hovered tbody tr:hover td { + background-color: #f4f4f4; +} +/* Responsive Tables */ +.table-container { + width: 100%; + overflow: auto; + margin-bottom: 1.65em; +} +.table-container table { + margin-bottom: 0; +} +.table-container::-webkit-scrollbar { + -webkit-appearance: none; + width: 14px; + height: 14px; +} +.table-container::-webkit-scrollbar-thumb { + border-radius: 8px; + border: 3px solid #fff; + background-color: rgba(0, 0, 0, 0.3); +} +/* =Forms +-----------------------------------------------------------------------------*/ +.forms .btn, +.forms input[type="submit"].btn, +.forms button, +.forms input[type="submit"], +.forms input[type="reset"] { + padding: 0.3625em 1.3em; +} +.forms .btn-outline { + padding: 0.3em 1.3em; +} +.forms .btn-outline.bold { + padding: 0.2375em 1.3em; +} +.forms label { + display: block; + margin-bottom: 1.0999999999999999em; +} +.forms input[type="text"], +.forms input[type="password"], +.forms input[type="email"], +.forms input[type="url"], +.forms input[type="phone"], +.forms input[type="tel"], +.forms input[type="number"], +.forms input[type="datetime"], +.forms input[type="date"], +.forms input[type="month"], +.forms input[type="color"], +.forms input[type="time"], +.forms input[type="search"], +.forms input[type="range"], +.forms input[type="file"], +.forms input[type="datetime-local"], +.forms textarea, +.forms select { + display: block; +} +.forms-inline input[type="text"], +.forms-inline-list input[type="text"], +.forms-inline input[type="password"], +.forms-inline-list input[type="password"], +.forms-inline input[type="email"], +.forms-inline-list input[type="email"], +.forms-inline input[type="url"], +.forms-inline-list input[type="url"], +.forms-inline input[type="phone"], +.forms-inline-list input[type="phone"], +.forms-inline input[type="tel"], +.forms-inline-list input[type="tel"], +.forms-inline input[type="number"], +.forms-inline-list input[type="number"], +.forms-inline input[type="datetime"], +.forms-inline-list input[type="datetime"], +.forms-inline input[type="date"], +.forms-inline-list input[type="date"], +.forms-inline input[type="month"], +.forms-inline-list input[type="month"], +.forms-inline input[type="color"], +.forms-inline-list input[type="color"], +.forms-inline input[type="time"], +.forms-inline-list input[type="time"], +.forms-inline input[type="search"], +.forms-inline-list input[type="search"], +.forms-inline input[type="range"], +.forms-inline-list input[type="range"], +.forms-inline input[type="file"], +.forms-inline-list input[type="file"], +.forms-inline input[type="datetime-local"], +.forms-inline-list input[type="datetime-local"], +.forms-inline textarea, +.forms-inline-list textarea, +.forms-inline select, +.forms-inline-list select { + display: inline-block; +} +.forms-list, +.forms-inline, +.forms-inline-list { + margin: 0; + padding: 0; + margin-bottom: 1.0999999999999999em; + list-style: none; +} +.forms-list label, +.forms-inline label, +.forms-inline-list li, +.forms-inline-list li label { + display: inline-block; + margin-bottom: 0; +} +.forms-inline-list li label { + margin-right: 0.825em; +} +.forms-inline-list li { + margin-bottom: 3px; +} +.forms-list li { + margin-bottom: 6px; +} +.forms-desc { + margin-top: 4px; + color: rgba(0, 0, 0, 0.4); + font-size: 12.75px; + line-height: 1.4em; +} +input[type="text"], +input[type="password"], +input[type="email"], +input[type="url"], +input[type="phone"], +input[type="tel"], +input[type="number"], +input[type="datetime"], +input[type="date"], +input[type="month"], +input[type="color"], +input[type="time"], +input[type="search"], +input[type="datetime-local"], +textarea { + -moz-transition: border ease 0.5s; + transition: border ease 0.5s; +} +/* States */ +.error, +.success { + font-weight: normal; + font-size: 12.75px; +} +input.input-error, +textarea.input-error, +select.input-error, +.input-error { + border-color: #de2c3b; + box-shadow: 0 0 0 2px rgba(222, 44, 59, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +input.input-success, +textarea.input-success, +select.input-success, +.input-success { + border-color: #2c9f42; + box-shadow: 0 0 0 2px rgba(44, 159, 66, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +input.input-gray, +textarea.input-gray, +select.input-gray, +.input-gray { + border-color: #b3b6b7; + box-shadow: 0 0 0 2px rgba(179, 182, 183, 0.4), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="phone"]:focus, +input[type="tel"]:focus, +input[type="number"]:focus, +input[type="datetime"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="color"]:focus, +input[type="time"]:focus, +input[type="search"]:focus, +input[type="datetime-local"]:focus, +textarea:focus { + outline: none; + border-color: #2575ed; + box-shadow: 0 0 0 2px rgba(37, 117, 237, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +/* + Search +*/ +input.input-search, +input[type="search"] { + padding-right: .5em; + padding-left: .5em; + margin-bottom: 0; + border-radius: 15px; +} +input.input-on-black { + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.35); +} +input.input-on-black::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.6); +} +input.input-on-black::-moz-placeholder { + color: rgba(255, 255, 255, 0.6); +} +input.input-on-black:focus, +input.input-on-black.active { + border: 1px solid #fff; + background: #fff; + box-shadow: none; +} +input.input-on-black:focus::-webkit-input-placeholder, +input.input-on-black.active::-webkit-input-placeholder { + color: #aaa; +} +input.input-on-black:focus::-moz-placeholder, +input.input-on-black.active::-moz-placeholder { + color: #aaa; +} +/* Sizes */ +input.input-big { + font-size: 18px; +} +input.input-small { + font-size: 12.75px; +} +input.input-smaller { + font-size: 11.25px; +} +/* Append & Prepend */ +.input-groups { + display: table !important; +} +.input-groups input { + width: 100%; +} +.input-groups input, +.input-groups .input-append, +.input-groups .input-prepend, +.input-groups .btn-append { + display: table-cell !important; +} +.input-groups .btn-append, +.input-groups .input-append, +.input-groups .input-prepend { + width: 1%; + vertical-align: middle; +} +.input-groups .input-append, +.input-groups .input-prepend { + background-color: #f4f4f4; + border: 1px solid #d4d4d4; + margin: 0; + padding: .45em .75em .15em .75em; + color: rgba(0, 0, 0, 0.6); + line-height: 1.65em; + font-size: 12.75px; + white-space: nowrap; +} +.input-groups .input-prepend { + border-right: none; +} +.input-groups .input-append { + position: relative; + z-index: 1; + border-left: none; +} +.input-groups .btn-append .btn { + display: block; + height: auto; + border-radius: 0 2px 2px 0; +} +/* =Navs +-----------------------------------------------------------------------------*/ +/* NavBar */ +.navbar { + font-size: 105%; + margin-bottom: 1.65em; +} +.navbar:after { + content: ""; + display: table; + clear: both; +} +.navbar:after { + content: ""; + display: table; + clear: both; +} +.navbar.navbar-left { + float: left; +} +.navbar.navbar-right { + float: right; +} +.navbar ul { + list-style: none; + margin: 0; +} +.navbar ul:after { + content: ""; + display: table; + clear: both; +} +.navbar ul:after { + content: ""; + display: table; + clear: both; +} +.navbar li { + float: left; + margin-right: 1.65em; +} +.navbar.navbar-right li { + margin-right: 0; + margin-left: 1.65em; +} +.navbar a, +.navbar span { + display: block; + text-decoration: none; +} +.navbar a:hover { + color: #de2c3b; + text-decoration: underline; +} +.navbar li.active a, +.navbar span { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); +} +.navigation-toggle { + display: none; + text-transform: uppercase; + position: relative; + color: #0f0f0f; + background-color: #ffffff; +} +.navigation-toggle:after { + position: absolute; + z-index: 1; + top: 50%; + margin-top: -12px; + left: 10px; + content: "\2630"; + font-size: 24px; + line-height: 1; +} +.navigation-toggle.navigation-toggle-black { + background-color: #0f0f0f; + color: #ffffff; +} +.navigation-toggle.navigation-toggle-show { + margin-bottom: 1.65em; +} +.navigation-toggle span { + position: relative; + z-index: 2; + cursor: pointer; + display: block; + padding: 10px 20px 10px 40px; +} +.navigation-fixed { + position: fixed; + top: 0; + left: 0; + z-index: 101; +} +/* Pills */ +.navbar-pills a, +.navbar-pills span { + padding: 0.825em 1.65em; +} +.navbar-pills a:hover { + color: #0f0f0f; + background: #eee; +} +.navbar-pills li.active a, +.navbar-pills span { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); + background: #eee; +} +.navbar-pills li { + margin-right: 1px; +} +.navbar-pills.navbar-right li { + margin-left: 1px; +} +/* Fullwidth */ +.fullwidth ul { + width: 100%; +} +.fullwidth li { + float: none !important; + margin: 0; + display: table-cell; + width: 1%; + text-align: center; +} +.fullwidth li a, +.fullwidth li span { + display: block; +} +/* Vertical */ +.nav { + margin-bottom: 1.65em; +} +.nav ul { + list-style: none; + margin: 0; +} +.nav ul li ul { + margin-left: 2em; + font-size: .95em; +} +.nav a, +.nav span { + display: block; + padding: .5em 0; +} +.nav a { + color: #0f0f0f; + text-decoration: none; +} +.nav a:hover { + color: #de2c3b; + text-decoration: underline; +} +.nav li.active a, +.nav span { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); +} +.nav i.fa { + width: 1.65em; +} +/* Stacked */ +.nav-stacked li { + margin-bottom: 1px; +} +.nav-stacked a, +.nav-stacked span { + padding: .6em .7em; +} +.nav-stacked a { + background: #f6f6f6; +} +.nav-stacked a:hover { + color: #000; + background: #eee; +} +.nav-stacked li.active a, +.nav-stacked span { + background: #ffffff; + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.3); +} +/* Stats */ +.nav-stats li { + position: relative; +} +.nav-stats a, +.nav-stats span { + padding-right: 50px; +} +.nav-stats sup, +.nav-stats .badge { + position: absolute; + top: 50%; + right: 0; +} +.nav-stats sup { + color: rgba(0, 0, 0, 0.4); +} +.nav-stats .badge { + margin-top: -8px; +} +/* =Tabs +-----------------------------------------------------------------------------*/ +.nav-tabs { + border-bottom: 1px solid #e3e3e3; + margin-bottom: 1.65em; +} +.nav-tabs:after { + content: ""; + display: table; + clear: both; +} +.nav-tabs:after { + content: ""; + display: table; + clear: both; +} +.nav-tabs ul { + list-style: none; + margin: 0; +} +.nav-tabs li { + float: left; + margin-right: 2px; +} +.nav-tabs a, +.nav-tabs span { + display: block; + line-height: 1; + padding: 0.825em 1.65em; + border: 1px solid transparent; +} +.nav-tabs a { + color: rgba(0, 0, 0, 0.5); + text-decoration: none; +} +.nav-tabs a:focus, +.nav-tabs a:hover { + color: #0f0f0f; + text-decoration: underline; + background-color: #eee; +} +.nav-tabs li.active a, +.nav-tabs span { + color: #0f0f0f; + background: #fff; + position: relative; + border: 1px solid #ddd; + border-bottom: 1px solid #fff; + bottom: -1px; + cursor: default; + text-decoration: none; +} +/* =Breadcrumbs +-----------------------------------------------------------------------------*/ +.breadcrumbs { + margin-bottom: 1.65em; +} +.breadcrumbs:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs ul { + font-size: .9em; + color: rgba(0, 0, 0, 0.4); + list-style: none; + margin: 0; +} +.breadcrumbs ul:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs ul:after { + content: ""; + display: table; + clear: both; +} +.breadcrumbs li { + float: left; + margin-right: 5px; +} +.breadcrumbs li + li:before { + content: " > "; + color: #aaa; + font-size: 12px; + margin: 0 7px 0 5px; + position: relative; + top: -1px; +} +.breadcrumbs.breadcrumbs-path li + li:before { + content: " / "; + top: 0; +} +.breadcrumbs a { + color: #0f0f0f; + text-decoration: none; +} +.breadcrumbs a:hover { + color: #0f0f0f; + text-decoration: underline; +} +.breadcrumbs li.active a, +.breadcrumbs span, +.breadcrumbs li.active a:hover { + text-decoration: none; + cursor: text; + color: rgba(0, 0, 0, 0.4); +} +/* =Pagination +-----------------------------------------------------------------------------*/ +.pagination { + position: relative; + left: -9px; + margin-left: 0; + list-style: none; +} +.pagination:after { + content: ""; + display: table; + clear: both; +} +.pagination:after { + content: ""; + display: table; + clear: both; +} +.pagination li { + float: left; + margin-right: 2px; +} +.pagination a, +.pagination span { + display: block; + padding: 7px 9px; + line-height: 1; + border-radius: 2px; + color: #0f0f0f; + text-decoration: none; +} +.pagination span, +.pagination li.active a, +.pagination li.active a:hover { + color: #ffffff; + background-color: #0f0f0f; + cursor: text; +} +.pagination a:focus, +.pagination a:hover { + text-decoration: none; + background-color: #0f0f0f; + color: #fff; +} +/* =Buttons +-----------------------------------------------------------------------------*/ +.btn, +input[type="submit"].btn { + display: inline-block; + vertical-align: top; + font-family: "Helvetica Neue", Helvetica, Tahoma, sans-serif; + font-size: 1em; + font-weight: 400; + line-height: 1.65em; + text-align: center; + text-decoration: none; + color: #222222; + -webkit-appearance: none; + outline: none; + margin: 0; + border: none; + border-radius: 2px; + box-shadow: none; + cursor: pointer; + background: #e0e3e5; + padding: 0.55em 2.5em; +} +.btn:hover, +input[type="submit"].btn:hover { + color: rgba(0, 0, 0, 0.5); + background: #b3b6b7; +} +.btn::-moz-focus-inner { + border: 0; + padding: 0; +} +.btn-big, +input[type="submit"].btn-big { + font-size: 18px; +} +.btn-small, +input[type="submit"].btn-small { + font-size: 12.75px; +} +.btn-smaller, +input[type="submit"].btn-smaller { + font-size: 11.25px; + vertical-align: baseline; +} +.btn-round { + border-radius: 15px; +} +.btn-outline, +input[type="submit"].btn-outline { + background: none; + padding: 0.48750000000000004em 2.5em; + border: 1px solid #0f0f0f; +} +.btn-outline:hover, +input[type="submit"].btn-outline:hover { + border-color: #b3b6b7; +} +.btn-outline.btn-active { + padding: 0.55em 2.5em; +} +.btn-outline.bold { + border-width: 2px; + padding: 0.42500000000000004em 2.5em; +} +.btn-active, +.btn[disabled], +.btn-disabled { + background: none; + background: #b3b6b7; + color: rgba(0, 0, 0, 0.5); +} +.btn-active:hover, +.btn[disabled]:hover, +.btn-disabled:hover { + color: rgba(0, 0, 0, 0.5); + background: #b3b6b7; +} +.btn-active { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4) inset; +} +.btn-outline.btn[disabled], +.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(0, 0, 0, 0.3); + border: 1px solid rgba(0, 0, 0, 0.1); +} +.btn-outline.btn-active { + background: none; + color: rgba(0, 0, 0, 0.4); + border: none; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; +} +.btn[disabled], +.btn-disabled { + cursor: default; + box-shadow: none; +} +.btn-blue, +input[type="submit"].btn-blue { + color: rgba(255, 255, 255, 0.9); + background: #2575ed; +} +.btn-blue:hover, +input[type="submit"].btn-blue:hover { + color: rgba(255, 255, 255, 0.6); + background: #1a52a5; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active, +.btn-blue.btn-disabled, +input[type="submit"].btn-blue.btn-disabled, +.btn-blue.btn[disabled], +input[type="submit"].btn-blue.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #1a52a5; +} +.btn-blue.btn-active:hover, +input[type="submit"].btn-blue.btn-active:hover, +.btn-blue.btn-disabled:hover, +input[type="submit"].btn-blue.btn-disabled:hover, +.btn-blue.btn[disabled]:hover, +input[type="submit"].btn-blue.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-blue.btn-outline, +input[type="submit"].btn-blue.btn-outline { + background: none; + border-color: #2575ed; + color: #2575ed; +} +.btn-blue.btn-outline:hover, +input[type="submit"].btn-blue.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2575ed; +} +.btn-blue.btn-outline.btn[disabled], +input[type="submit"].btn-blue.btn-outline.btn[disabled], +.btn-blue.btn-outline.btn-disabled, +input[type="submit"].btn-blue.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(37, 117, 237, 0.4); + border: 1px solid rgba(37, 117, 237, 0.3); +} +.btn-blue.btn-outline.btn-active, +input[type="submit"].btn-blue.btn-outline.btn-active { + background: none; + color: rgba(37, 117, 237, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(26, 82, 165, 0.6) inset; +} +.btn-blue:hover, +input[type="submit"].btn-blue:hover { + color: rgba(255, 255, 255, 0.6); + background: #1a52a5; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-blue.btn-active, +input[type="submit"].btn-blue.btn-active, +.btn-blue.btn-disabled, +input[type="submit"].btn-blue.btn-disabled, +.btn-blue.btn[disabled], +input[type="submit"].btn-blue.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #1a52a5; +} +.btn-blue.btn-active:hover, +input[type="submit"].btn-blue.btn-active:hover, +.btn-blue.btn-disabled:hover, +input[type="submit"].btn-blue.btn-disabled:hover, +.btn-blue.btn[disabled]:hover, +input[type="submit"].btn-blue.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-blue.btn-outline, +input[type="submit"].btn-blue.btn-outline { + background: none; + border-color: #2575ed; + color: #2575ed; +} +.btn-blue.btn-outline:hover, +input[type="submit"].btn-blue.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2575ed; +} +.btn-blue.btn-outline.btn[disabled], +input[type="submit"].btn-blue.btn-outline.btn[disabled], +.btn-blue.btn-outline.btn-disabled, +input[type="submit"].btn-blue.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(37, 117, 237, 0.4); + border: 1px solid rgba(37, 117, 237, 0.3); +} +.btn-blue.btn-outline.btn-active, +input[type="submit"].btn-blue.btn-outline.btn-active { + background: none; + color: rgba(37, 117, 237, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(26, 82, 165, 0.6) inset; +} +.btn-red, +input[type="submit"].btn-red { + color: rgba(255, 255, 255, 0.9); + background: #de2c3b; +} +.btn-red:hover, +input[type="submit"].btn-red:hover { + color: rgba(255, 255, 255, 0.6); + background: #b2232f; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active, +.btn-red.btn-disabled, +input[type="submit"].btn-red.btn-disabled, +.btn-red.btn[disabled], +input[type="submit"].btn-red.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #b2232f; +} +.btn-red.btn-active:hover, +input[type="submit"].btn-red.btn-active:hover, +.btn-red.btn-disabled:hover, +input[type="submit"].btn-red.btn-disabled:hover, +.btn-red.btn[disabled]:hover, +input[type="submit"].btn-red.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-red.btn-outline, +input[type="submit"].btn-red.btn-outline { + background: none; + border-color: #de2c3b; + color: #de2c3b; +} +.btn-red.btn-outline:hover, +input[type="submit"].btn-red.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #de2c3b; +} +.btn-red.btn-outline.btn[disabled], +input[type="submit"].btn-red.btn-outline.btn[disabled], +.btn-red.btn-outline.btn-disabled, +input[type="submit"].btn-red.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(222, 44, 59, 0.4); + border: 1px solid rgba(222, 44, 59, 0.3); +} +.btn-red.btn-outline.btn-active, +input[type="submit"].btn-red.btn-outline.btn-active { + background: none; + color: rgba(222, 44, 59, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(178, 35, 47, 0.6) inset; +} +.btn-red:hover, +input[type="submit"].btn-red:hover { + color: rgba(255, 255, 255, 0.6); + background: #b2232f; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-red.btn-active, +input[type="submit"].btn-red.btn-active, +.btn-red.btn-disabled, +input[type="submit"].btn-red.btn-disabled, +.btn-red.btn[disabled], +input[type="submit"].btn-red.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #b2232f; +} +.btn-red.btn-active:hover, +input[type="submit"].btn-red.btn-active:hover, +.btn-red.btn-disabled:hover, +input[type="submit"].btn-red.btn-disabled:hover, +.btn-red.btn[disabled]:hover, +input[type="submit"].btn-red.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-red.btn-outline, +input[type="submit"].btn-red.btn-outline { + background: none; + border-color: #de2c3b; + color: #de2c3b; +} +.btn-red.btn-outline:hover, +input[type="submit"].btn-red.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #de2c3b; +} +.btn-red.btn-outline.btn[disabled], +input[type="submit"].btn-red.btn-outline.btn[disabled], +.btn-red.btn-outline.btn-disabled, +input[type="submit"].btn-red.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(222, 44, 59, 0.4); + border: 1px solid rgba(222, 44, 59, 0.3); +} +.btn-red.btn-outline.btn-active, +input[type="submit"].btn-red.btn-outline.btn-active { + background: none; + color: rgba(222, 44, 59, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(178, 35, 47, 0.6) inset; +} +.btn-green, +input[type="submit"].btn-green { + color: rgba(255, 255, 255, 0.9); + background: #2c9f42; +} +.btn-green:hover, +input[type="submit"].btn-green:hover { + color: rgba(255, 255, 255, 0.6); + background: #237f35; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active, +.btn-green.btn-disabled, +input[type="submit"].btn-green.btn-disabled, +.btn-green.btn[disabled], +input[type="submit"].btn-green.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #237f35; +} +.btn-green.btn-active:hover, +input[type="submit"].btn-green.btn-active:hover, +.btn-green.btn-disabled:hover, +input[type="submit"].btn-green.btn-disabled:hover, +.btn-green.btn[disabled]:hover, +input[type="submit"].btn-green.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-green.btn-outline, +input[type="submit"].btn-green.btn-outline { + background: none; + border-color: #2c9f42; + color: #2c9f42; +} +.btn-green.btn-outline:hover, +input[type="submit"].btn-green.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2c9f42; +} +.btn-green.btn-outline.btn[disabled], +input[type="submit"].btn-green.btn-outline.btn[disabled], +.btn-green.btn-outline.btn-disabled, +input[type="submit"].btn-green.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(44, 159, 66, 0.4); + border: 1px solid rgba(44, 159, 66, 0.3); +} +.btn-green.btn-outline.btn-active, +input[type="submit"].btn-green.btn-outline.btn-active { + background: none; + color: rgba(44, 159, 66, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(35, 127, 53, 0.6) inset; +} +.btn-green:hover, +input[type="submit"].btn-green:hover { + color: rgba(255, 255, 255, 0.6); + background: #237f35; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-green.btn-active, +input[type="submit"].btn-green.btn-active, +.btn-green.btn-disabled, +input[type="submit"].btn-green.btn-disabled, +.btn-green.btn[disabled], +input[type="submit"].btn-green.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #237f35; +} +.btn-green.btn-active:hover, +input[type="submit"].btn-green.btn-active:hover, +.btn-green.btn-disabled:hover, +input[type="submit"].btn-green.btn-disabled:hover, +.btn-green.btn[disabled]:hover, +input[type="submit"].btn-green.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-green.btn-outline, +input[type="submit"].btn-green.btn-outline { + background: none; + border-color: #2c9f42; + color: #2c9f42; +} +.btn-green.btn-outline:hover, +input[type="submit"].btn-green.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #2c9f42; +} +.btn-green.btn-outline.btn[disabled], +input[type="submit"].btn-green.btn-outline.btn[disabled], +.btn-green.btn-outline.btn-disabled, +input[type="submit"].btn-green.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(44, 159, 66, 0.4); + border: 1px solid rgba(44, 159, 66, 0.3); +} +.btn-green.btn-outline.btn-active, +input[type="submit"].btn-green.btn-outline.btn-active { + background: none; + color: rgba(44, 159, 66, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(35, 127, 53, 0.6) inset; +} +.btn-black, +input[type="submit"].btn-black { + color: rgba(255, 255, 255, 0.9); + background: #0f0f0f; +} +.btn-black:hover, +input[type="submit"].btn-black:hover { + color: rgba(255, 255, 255, 0.6); + background: #363738; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7) inset; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active, +.btn-black.btn-disabled, +input[type="submit"].btn-black.btn-disabled, +.btn-black.btn[disabled], +input[type="submit"].btn-black.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #363738; +} +.btn-black.btn-active:hover, +input[type="submit"].btn-black.btn-active:hover, +.btn-black.btn-disabled:hover, +input[type="submit"].btn-black.btn-disabled:hover, +.btn-black.btn[disabled]:hover, +input[type="submit"].btn-black.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-black.btn-outline, +input[type="submit"].btn-black.btn-outline { + background: none; + border-color: #0f0f0f; + color: #0f0f0f; +} +.btn-black.btn-outline:hover, +input[type="submit"].btn-black.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #0f0f0f; +} +.btn-black.btn-outline.btn[disabled], +input[type="submit"].btn-black.btn-outline.btn[disabled], +.btn-black.btn-outline.btn-disabled, +input[type="submit"].btn-black.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(15, 15, 15, 0.4); + border: 1px solid rgba(15, 15, 15, 0.3); +} +.btn-black.btn-outline.btn-active, +input[type="submit"].btn-black.btn-outline.btn-active { + background: none; + color: rgba(15, 15, 15, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(54, 55, 56, 0.6) inset; +} +.btn-black:hover, +input[type="submit"].btn-black:hover { + color: rgba(255, 255, 255, 0.6); + background: #363738; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7) inset; +} +.btn-black.btn-active, +input[type="submit"].btn-black.btn-active, +.btn-black.btn-disabled, +input[type="submit"].btn-black.btn-disabled, +.btn-black.btn[disabled], +input[type="submit"].btn-black.btn[disabled] { + color: rgba(255, 255, 255, 0.5); + background: #363738; +} +.btn-black.btn-active:hover, +input[type="submit"].btn-black.btn-active:hover, +.btn-black.btn-disabled:hover, +input[type="submit"].btn-black.btn-disabled:hover, +.btn-black.btn[disabled]:hover, +input[type="submit"].btn-black.btn[disabled]:hover { + color: rgba(255, 255, 255, 0.5); +} +.btn-black.btn-outline, +input[type="submit"].btn-black.btn-outline { + background: none; + border-color: #0f0f0f; + color: #0f0f0f; +} +.btn-black.btn-outline:hover, +input[type="submit"].btn-black.btn-outline:hover { + color: rgba(255, 255, 255, 0.9); + background: #0f0f0f; +} +.btn-black.btn-outline.btn[disabled], +input[type="submit"].btn-black.btn-outline.btn[disabled], +.btn-black.btn-outline.btn-disabled, +input[type="submit"].btn-black.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(15, 15, 15, 0.4); + border: 1px solid rgba(15, 15, 15, 0.3); +} +.btn-black.btn-outline.btn-active, +input[type="submit"].btn-black.btn-outline.btn-active { + background: none; + color: rgba(15, 15, 15, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(54, 55, 56, 0.6) inset; +} +.btn-yellow, +input[type="submit"].btn-yellow { + color: rgba(0, 0, 0, 0.9); + background: #ffc800; +} +.btn-yellow:hover, +input[type="submit"].btn-yellow:hover { + color: rgba(0, 0, 0, 0.6); + background: #cca000; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active, +.btn-yellow.btn-disabled, +input[type="submit"].btn-yellow.btn-disabled, +.btn-yellow.btn[disabled], +input[type="submit"].btn-yellow.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #cca000; +} +.btn-yellow.btn-active:hover, +input[type="submit"].btn-yellow.btn-active:hover, +.btn-yellow.btn-disabled:hover, +input[type="submit"].btn-yellow.btn-disabled:hover, +.btn-yellow.btn[disabled]:hover, +input[type="submit"].btn-yellow.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-yellow.btn-outline, +input[type="submit"].btn-yellow.btn-outline { + background: none; + border-color: #ffc800; + color: #ffc800; +} +.btn-yellow.btn-outline:hover, +input[type="submit"].btn-yellow.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffc800; +} +.btn-yellow.btn-outline.btn[disabled], +input[type="submit"].btn-yellow.btn-outline.btn[disabled], +.btn-yellow.btn-outline.btn-disabled, +input[type="submit"].btn-yellow.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 200, 0, 0.4); + border: 1px solid rgba(255, 200, 0, 0.3); +} +.btn-yellow.btn-outline.btn-active, +input[type="submit"].btn-yellow.btn-outline.btn-active { + background: none; + color: rgba(255, 200, 0, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(204, 160, 0, 0.6) inset; +} +.btn-yellow:hover, +input[type="submit"].btn-yellow:hover { + color: rgba(0, 0, 0, 0.6); + background: #cca000; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5) inset; +} +.btn-yellow.btn-active, +input[type="submit"].btn-yellow.btn-active, +.btn-yellow.btn-disabled, +input[type="submit"].btn-yellow.btn-disabled, +.btn-yellow.btn[disabled], +input[type="submit"].btn-yellow.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #cca000; +} +.btn-yellow.btn-active:hover, +input[type="submit"].btn-yellow.btn-active:hover, +.btn-yellow.btn-disabled:hover, +input[type="submit"].btn-yellow.btn-disabled:hover, +.btn-yellow.btn[disabled]:hover, +input[type="submit"].btn-yellow.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-yellow.btn-outline, +input[type="submit"].btn-yellow.btn-outline { + background: none; + border-color: #ffc800; + color: #ffc800; +} +.btn-yellow.btn-outline:hover, +input[type="submit"].btn-yellow.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffc800; +} +.btn-yellow.btn-outline.btn[disabled], +input[type="submit"].btn-yellow.btn-outline.btn[disabled], +.btn-yellow.btn-outline.btn-disabled, +input[type="submit"].btn-yellow.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 200, 0, 0.4); + border: 1px solid rgba(255, 200, 0, 0.3); +} +.btn-yellow.btn-outline.btn-active, +input[type="submit"].btn-yellow.btn-outline.btn-active { + background: none; + color: rgba(255, 200, 0, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(204, 160, 0, 0.6) inset; +} +.btn-white, +input[type="submit"].btn-white { + color: rgba(0, 0, 0, 0.9); + background: #ffffff; +} +.btn-white:hover, +input[type="submit"].btn-white:hover { + color: rgba(0, 0, 0, 0.6); + background: #ededed; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2) inset; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active, +.btn-white.btn-disabled, +input[type="submit"].btn-white.btn-disabled, +.btn-white.btn[disabled], +input[type="submit"].btn-white.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #ededed; +} +.btn-white.btn-active:hover, +input[type="submit"].btn-white.btn-active:hover, +.btn-white.btn-disabled:hover, +input[type="submit"].btn-white.btn-disabled:hover, +.btn-white.btn[disabled]:hover, +input[type="submit"].btn-white.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-white.btn-outline, +input[type="submit"].btn-white.btn-outline { + background: none; + border-color: #ffffff; + color: #ffffff; +} +.btn-white.btn-outline:hover, +input[type="submit"].btn-white.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffffff; +} +.btn-white.btn-outline.btn[disabled], +input[type="submit"].btn-white.btn-outline.btn[disabled], +.btn-white.btn-outline.btn-disabled, +input[type="submit"].btn-white.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 255, 255, 0.4); + border: 1px solid rgba(255, 255, 255, 0.3); +} +.btn-white.btn-outline.btn-active, +input[type="submit"].btn-white.btn-outline.btn-active { + background: none; + color: rgba(255, 255, 255, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(237, 237, 237, 0.6) inset; +} +.btn-white:hover, +input[type="submit"].btn-white:hover { + color: rgba(0, 0, 0, 0.6); + background: #ededed; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active { + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2) inset; +} +.btn-white.btn-active, +input[type="submit"].btn-white.btn-active, +.btn-white.btn-disabled, +input[type="submit"].btn-white.btn-disabled, +.btn-white.btn[disabled], +input[type="submit"].btn-white.btn[disabled] { + color: rgba(0, 0, 0, 0.5); + background: #ededed; +} +.btn-white.btn-active:hover, +input[type="submit"].btn-white.btn-active:hover, +.btn-white.btn-disabled:hover, +input[type="submit"].btn-white.btn-disabled:hover, +.btn-white.btn[disabled]:hover, +input[type="submit"].btn-white.btn[disabled]:hover { + color: rgba(0, 0, 0, 0.5); +} +.btn-white.btn-outline, +input[type="submit"].btn-white.btn-outline { + background: none; + border-color: #ffffff; + color: #ffffff; +} +.btn-white.btn-outline:hover, +input[type="submit"].btn-white.btn-outline:hover { + color: rgba(0, 0, 0, 0.9); + background: #ffffff; +} +.btn-white.btn-outline.btn[disabled], +input[type="submit"].btn-white.btn-outline.btn[disabled], +.btn-white.btn-outline.btn-disabled, +input[type="submit"].btn-white.btn-outline.btn-disabled { + background: none; + box-shadow: none; + color: rgba(255, 255, 255, 0.4); + border: 1px solid rgba(255, 255, 255, 0.3); +} +.btn-white.btn-outline.btn-active, +input[type="submit"].btn-white.btn-outline.btn-active { + background: none; + color: rgba(255, 255, 255, 0.6); + border: none; + box-shadow: 0 1px 3px rgba(237, 237, 237, 0.6) inset; +} +.btn-white.btn-outline.btn-active { + box-shadow: none; + border: 1px solid rgba(255, 255, 255, 0.3); + padding: 0.48750000000000004em 2.5em; +} +/* + Buttons Group +*/ +.btn-single, +.btn-group { + display: inline-block; + margin-right: 2px; + vertical-align: bottom; +} +.btn-single:after, +.btn-group:after { + content: ""; + display: table; + clear: both; +} +.btn-single:after, +.btn-group:after { + content: ""; + display: table; + clear: both; +} +.btn-single > .btn, +.btn-single > input, +.btn-group > .btn, +.btn-group > input { + float: left; + border-radius: 0; + margin-left: -1px; +} +.btn-single > .btn { + border-radius: 2px; +} +.btn-group > .btn:first-child { + border-radius: 2px 0 0 2px; +} +.btn-group > .btn:last-child { + border-radius: 0 2px 2px 0; +} +.btn-group > .btn.btn-round:first-child, +.btn-group > .input-search:first-child { + border-radius: 15px 0 0 15px; +} +.btn-group > .btn.btn-round:last-child, +.btn-group > .input-search:last-child { + border-radius: 0 15px 15px 0; +} +/* =Notifications +-----------------------------------------------------------------------------*/ +.tools-alert { + padding: 12px 15px; + background: #f7f8f8; + color: #0f0f0f; + margin-bottom: 1.65em; +} +.tools-message { + display: none; + position: fixed; + z-index: 100; + top: 10px; + right: 10px; + max-width: 350px; + line-height: 1.5; + font-size: 95%; + padding: 12px 15px; + color: #0f0f0f; + background: #e0e3e5; +} +.tools-message ul { + margin: 0; + list-style: none; +} +.tools-message-black, +.tools-message-blue, +.tools-message-red, +.tools-message-green { + color: rgba(255, 255, 255, 0.95); +} +.tools-message-black { + background: #0f0f0f; +} +.tools-message-blue { + background: #2575ed; +} +.tools-message-red { + background: #de2c3b; +} +.tools-message-yellow { + background: #ffc800; +} +.tools-message-green { + background: #2c9f42; +} +.tools-alert-black { + background: #dadada; +} +.tools-alert-blue { + background: #d3e3fb; +} +.tools-alert-red { + background: #f8d5d8; +} +.tools-alert-yellow { + background: #fff4cc; +} +.tools-alert-green { + background: #d5ecd9; +} +/* =Labels +-----------------------------------------------------------------------------*/ +.label, +.badge { + background: #e0e3e5; + font-size: 12.75px; + display: inline-block; + line-height: 1; + padding: 4px 7px 3px 7px; + color: #0f0f0f; + text-align: center; + font-weight: normal; + text-transform: uppercase; +} +.label-outline { + background: none; + border: 1px solid #0f0f0f; + padding: 3px 6px 2px 6px; +} +.badge { + border-radius: 15px; +} +.badge-small { + font-size: 11.25px; + padding: 3px 5px; +} +.label-black, +.label-blue, +.label-red, +.label-green, +.badge-black, +.badge-blue, +.badge-red, +.badge-green { + color: #ffffff; +} +.label-black, +.badge-black { + background: #0f0f0f; +} +.label-blue, +.badge-blue { + background: #2575ed; +} +.label-red, +.badge-red { + background: #de2c3b; +} +.label-green, +.badge-green { + background: #2c9f42; +} +.label-yellow, +.badge-yellow { + background: #ffc800; +} +.label-white, +.badge-white { + background: #ffffff; +} +.label-black.label-outline, +.label-blue.label-outline, +.label-red.label-outline, +.label-green.label-outline, +.label-yellow.label-outline, +.label-white.label-outline { + background: none; + color: #0f0f0f; +} +.label-blue.label-outline { + border-color: #2575ed; + color: #2575ed; +} +.label-red.label-outline { + border-color: #de2c3b; + color: #de2c3b; +} +.label-green.label-outline { + border-color: #2c9f42; + color: #2c9f42; +} +.label-yellow.label-outline { + border-color: #ffc800; + color: #ffc800; +} +.label-white.label-outline { + border-color: #ffffff; + color: #ffffff; +} +/* =Progress +-----------------------------------------------------------------------------*/ +#tools-progress { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000000; + height: 10px; +} +#tools-progress span { + display: block; + width: 100%; + height: 100%; + background-color: #1a52a5; + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + background-size: 40px 40px; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +/* =Accordion +-----------------------------------------------------------------------------*/ +.accordion-title { + position: relative; + display: block; + margin: 0; + margin-bottom: 2px; + padding: 12px 50px 12px 18px; + color: #000; + text-decoration: none; + font-weight: normal; + font-size: 0.9375em; + line-height: 1,4em; + background: #f7f8f8; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.accordion-title.accordion-title-opened { + margin-bottom: 0; + font-weight: bold; + background: #f0f1f2; +} +.accordion-title a, +.accordion-title:hover { + color: #000; + text-decoration: none; +} +.accordion-panel { + padding: 1.65em; + margin-bottom: 10px; +} +.accordion-toggle { + position: absolute; + top: 50%; + margin-top: -8px; + right: 20px; + padding: 0; + font-size: 0; + line-height: 1; +} +.accordion-toggle-closed { + background: #000; + width: 1px; + height: 15px; + margin-left: 1px; +} +.accordion-toggle-closed:before { + position: absolute; + top: 7px; + left: -7px; + content: ""; + width: 15px; + height: 1px; + background: #000; +} +.accordion-toggle-opened:before { + position: absolute; + top: 7px; + left: -8px; + content: ""; + width: 15px; + height: 1px; + background: #000; +} +/* =Filterbox +-----------------------------------------------------------------------------*/ +.filterbox { + position: relative; +} +.filterbox input { + padding-right: 30px; +} +.filterbox span { + position: absolute; + z-index: 2; + top: 0; + right: 1px; + width: 26px; + height: 100%; + cursor: pointer; +} +.filterbox span:after { + content: ""; + display: inline-block; + position: relative; + top: 50%; + margin-left: 8px; + margin-top: -21px; + width: 0; + height: 0; + vertical-align: middle; + border-top: 5px solid rgba(0, 0, 0, 0.6); + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} +.filterbox-list { + z-index: 1000; + position: absolute; + left: 0; + display: none; + margin: 0; + list-style: none; + background: #fff; + width: 100%; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + max-height: 250px; + overflow: auto; +} +.filterbox-list li { + padding: 4px 10px; + color: #000; + cursor: pointer; +} +.filterbox-list li:hover { + background: #f0f1f2; +} +.filterbox-list li.active { + background: #2575ed; + color: #fff; +} +/* =Tooltip +-----------------------------------------------------------------------------*/ +.tooltip { + position: absolute; + z-index: 10000; + display: inline-block; + color: #fff; + padding: 2px 10px; + font-size: 12.75px; + line-height: 1.5em; + max-width: 250px; + background: #0f0f0f; +} +.tooltip-theme-red { + background: #de2c3b; +} +.tooltip-theme-blue { + background: #2575ed; +} +.tooltip-theme-green { + background: #2c9f42; +} +.tooltip-theme-yellow { + background: #ffc800; +} +.tooltip-theme-white { + background: #ffffff; +} +.tooltip-theme-yellow, +.tooltip-theme-white { + color: #000; +} +/* =Dropdown +-----------------------------------------------------------------------------*/ +.dropdown { + display: none; + position: absolute; + z-index: 102; + top: 0; + right: 0; + width: 250px; + color: #0f0f0f; + background: #ffffff; + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.3); + overflow: auto; +} +.dropdown section { + max-height: 250px; + overflow: auto; + padding: 20px; +} +.dropdown footer { + padding: 20px; +} +ul.dropdown { + max-height: 300px; + list-style: none; + margin: 0; + line-height: 1.5; + font-size: 95%; + padding: 0; +} +ul.dropdown a { + display: block; + padding: 7px 15px; + text-decoration: none; + color: #0f0f0f; +} +ul.dropdown a:hover { + background: #eee; +} +ul.dropdown li.divider { + border-bottom: 1px solid #e2e2e2; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: .3em; + vertical-align: middle; + border-top: 5px solid; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} +.caret.caret-up { + border-top: 0; + border-bottom: 4px solid; +} +/* =Livesearch +-----------------------------------------------------------------------------*/ +.livesearch-box { + position: relative; + display: inline-block; + width: 100%; +} +.livesearch-box input { + padding-left: 30px; +} +.livesearch-box .close { + position: absolute; + top: .2em; + right: 5px; + z-index: 2; + padding: 4px 6px; + line-height: 1; + font-size: 20px; + cursor: pointer; + color: #000000; + text-decoration: none; + filter: alpha(opacity=50); + -moz-opacity: 0.5; + opacity: 0.5; +} +.livesearch-box .close:before { + content: '\00D7'; +} +.livesearch-box .close:hover { + filter: alpha(opacity=100); + -moz-opacity: 1; + opacity: 1; +} +.livesearch-box .close:before { + content: '\00D7'; +} +.livesearch-box .close:hover { + filter: alpha(opacity=100); + -moz-opacity: 1; + opacity: 1; +} +.livesearch-icon { + position: absolute; + top: 53%; + left: 10px; + z-index: 2; +} +.livesearch-icon:before, +.livesearch-icon:after { + content: ""; + position: absolute; + top: 50%; + left: 0; + margin: -8px 0 0; + background: rgba(0, 0, 0, 0.5); +} +.livesearch-icon:before { + width: 10px; + height: 10px; + border: 2px solid rgba(0, 0, 0, 0.5); + background: transparent; + border-radius: 12px; +} +.livesearch-icon:after { + left: 10px; + width: 2px; + height: 7px; + margin-top: 0; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + transform: rotate(-45deg); +} +/* =Upload +-----------------------------------------------------------------------------*/ +.tools-droparea { + position: relative; + overflow: hidden; + padding: 80px 20px; + border: 3px dashed rgba(0, 0, 0, 0.1); +} +.tools-droparea.drag-hover { + background: rgba(200, 222, 250, 0.75); +} +.tools-droparea.drag-drop { + background: rgba(250, 248, 200, 0.5); +} +.tools-droparea-placeholder { + text-align: center; + font-size: 11px; + color: rgba(0, 0, 0, 0.5); +} +/* =Autocomplete +-----------------------------------------------------------------------------*/ +.autocomplete { + position: absolute; + z-index: 1000; + left: 0; + display: none; + margin: 0; + list-style: none; + background: #fff; + width: 250px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + max-height: 250px; + overflow: auto; +} +.autocomplete a { + padding: 4px 10px; + color: #000; + display: block; + text-decoration: none; +} +.autocomplete a:hover { + background: #f0f1f2; +} +.autocomplete a.active { + background: #2575ed; + color: #fff; +} +/* =Modal +-----------------------------------------------------------------------------*/ +#modal-overlay { + position: fixed; + top: 0; + left: 0; + margin: auto; + overflow: auto; + width: 100%; + height: 100%; + background-color: #000 !important; + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; + z-index: 100; +} +.modal-blur { + -webkit-filter: blur(3px); + -moz-filter: blur(3px); + -ms-filter: blur(3px); + filter: blur(3px); +} +.modal-box { + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + overflow-x: hidden; + overflow-y: auto; + z-index: 101; +} +.modal { + position: relative; + margin: auto; + margin-bottom: 20px; + padding: 0; + background: #fff; + color: #000; + box-shadow: 0 1px 70px rgba(0, 0, 0, 0.5); +} +.modal header { + padding: 30px 40px 5px 40px; + font-size: 18px; + font-weight: bold; +} +.modal section { + padding: 30px 40px 50px 40px; +} +.modal footer button { + width: 100%; + border-radius: 0; +} +.modal-close { + position: absolute; + top: 8px; + right: 12px; + width: 30px; + height: 30px; + text-align: right; + color: #bbb; + font-size: 30px; + font-weight: 300; + cursor: pointer; +} +.modal-close:hover { + color: #000; +} +/* =Helpers +-----------------------------------------------------------------------------*/ +.group:after { + content: ""; + display: table; + clear: both; +} +.group:after { + content: ""; + display: table; + clear: both; +} +.hide { + display: none; +} +.highlight { + background-color: #f7f3e2; +} +.big { + font-size: 18px; +} +.small { + font-size: 12.75px; +} +.smaller { + font-size: 11.25px; +} +.nowrap, +.nowrap td { + white-space: nowrap; +} +.req, +.required { + font-weight: normal; + color: #de2c3b; +} +.error { + color: #de2c3b; +} +.success { + color: #2c9f42; +} +.text-centered { + text-align: center; +} +.text-right { + text-align: right; +} +.last { + margin-right: 0 !important; +} +.pause { + margin-bottom: 0.825em !important; +} +.end { + margin-bottom: 0 !important; +} +.normal { + font-weight: normal; +} +.light { + font-weight: 300; +} +.bold { + font-weight: bold; +} +.italic { + font-style: italic; +} +.left { + float: left; +} +.right { + float: right; +} +.upper { + text-transform: uppercase; +} +.list-flat { + margin-left: 0; + list-style: none; +} +.color-black { + color: #0f0f0f; +} +.color-white { + color: #ffffff; +} +/* Colors */ +.color-gray-10 { + color: rgba(0, 0, 0, 0.1); +} +.color-gray-20 { + color: rgba(0, 0, 0, 0.2); +} +.color-gray-30 { + color: rgba(0, 0, 0, 0.3); +} +.color-gray-40 { + color: rgba(0, 0, 0, 0.4); +} +.color-gray-50 { + color: rgba(0, 0, 0, 0.5); +} +.color-gray-60 { + color: rgba(0, 0, 0, 0.6); +} +.color-gray-70 { + color: rgba(0, 0, 0, 0.7); +} +.color-gray-80 { + color: rgba(0, 0, 0, 0.8); +} +.color-gray-90 { + color: rgba(0, 0, 0, 0.9); +} +.color-white-10 { + color: rgba(255, 255, 255, 0.1); +} +.color-white-20 { + color: rgba(255, 255, 255, 0.2); +} +.color-white-30 { + color: rgba(255, 255, 255, 0.3); +} +.color-white-40 { + color: rgba(255, 255, 255, 0.4); +} +.color-white-50 { + color: rgba(255, 255, 255, 0.5); +} +.color-white-60 { + color: rgba(255, 255, 255, 0.6); +} +.color-white-70 { + color: rgba(255, 255, 255, 0.7); +} +.color-white-80 { + color: rgba(255, 255, 255, 0.8); +} +.color-white-90 { + color: rgba(255, 255, 255, 0.9); +} +/* Responsive embedded objects */ +.video-wrapper { + height: 0; + padding-bottom: 56.25%; + position: relative; + margin-bottom: 1.65em; +} +.video-wrapper iframe, +.video-wrapper object, +.video-wrapper embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +/* =Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .left, + .right { + float: none; + } + .hide-on-mobile { + display: none; + } +} +/* string content */ +.str { + color: #dd1144; +} +/* a keyword */ +.kwd { + color: #333333; +} +/* a comment */ +.com { + color: #999988; +} +/* a type name */ +.typ { + color: #445588; +} +/* a literal value */ +.lit { + color: #445588; +} +/* punctuation */ +.pun { + color: #888; +} +/* lisp open bracket */ +.opn { + color: #333333; +} +/* lisp close bracket */ +.clo { + color: #333333; +} +/* a markup tag name */ +.tag { + color: #367ac3; +} +/* a markup attribute name */ +.atn { + color: #51a7c9; +} +/* a markup attribute value */ +.atv { + color: #709c1a; +} +/* a declaration */ +.dec { + color: #666; +} +/* a variable name */ +.var { + color: teal; +} +/* a function name */ +.fun { + color: #990000; +} +.linenums ol li { + list-style-type: none; + counter-increment: list; + position: relative; +} +.linenums ol li:after { + content: counter(list); + position: absolute; + left: -3.3em; + border-right: 1px solid #e5e5e5; + padding-right: 9px; + width: 2.45em; + text-align: right; + color: rgba(0, 0, 0, 0.3); + font-size: 12px; +} +/* =Grid Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .mobile-width-100 { + width: 100%; + } + .units-row .unit-90, + .units-row .unit-80, + .units-row .unit-75, + .units-row .unit-70, + .units-row .unit-66, + .units-row .unit-65, + .units-row .unit-60, + .units-row .unit-50, + .units-row .unit-40, + .units-row .unit-35, + .units-row .unit-33, + .units-row .unit-30, + .units-row .unit-25, + .units-row .unit-20, + .units-row .unit-10 { + width: 100%; + float: none; + margin-left: 0; + margin-bottom: 1.65em; + } + .unit-push-90, + .unit-push-80, + .unit-push-75, + .unit-push-70, + .unit-push-66, + .unit-push-65, + .unit-push-60, + .unit-push-50, + .unit-push-40, + .unit-push-35, + .unit-push-33, + .unit-push-30, + .unit-push-25, + .unit-push-20, + .unit-push-10 { + left: 0; + } + .units-row .unit-push-right { + float: none; + } + .units-mobile-50 .unit-90, + .units-mobile-50 .unit-80, + .units-mobile-50 .unit-75, + .units-mobile-50 .unit-70, + .units-mobile-50 .unit-66, + .units-mobile-50 .unit-65, + .units-mobile-50 .unit-60, + .units-mobile-50 .unit-40, + .units-mobile-50 .unit-30, + .units-mobile-50 .unit-35, + .units-mobile-50 .unit-33, + .units-mobile-50 .unit-25, + .units-mobile-50 .unit-20, + .units-mobile-50 .unit-10 { + float: left; + margin-left: 3%; + width: 48.5%; + } + .units-mobile-50 .unit-90:first-child, + .units-mobile-50 .unit-80:first-child, + .units-mobile-50 .unit-75:first-child, + .units-mobile-50 .unit-70:first-child, + .units-mobile-50 .unit-66:first-child, + .units-mobile-50 .unit-65:first-child, + .units-mobile-50 .unit-60:first-child, + .units-mobile-50 .unit-40:first-child, + .units-mobile-50 .unit-35:first-child, + .units-mobile-50 .unit-30:first-child, + .units-mobile-50 .unit-33:first-child, + .units-mobile-50 .unit-25:first-child, + .units-mobile-50 .unit-20:first-child, + .units-mobile-50 .unit-10:first-child { + margin-left: 0; + } +} +/* =Blocks Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .blocks-2, + .blocks-3, + .blocks-4, + .blocks-5, + .blocks-6 { + margin-left: 0; + margin-bottom: 1.65em; + } + .blocks-2 > li, + .blocks-3 > li, + .blocks-4 > li, + .blocks-5 > li, + .blocks-6 > li { + float: none; + margin-left: 0; + width: 100%; + } + .blocks-mobile-50 > li, + .blocks-mobile-33 > li { + float: left; + margin-left: 3%; + } + .blocks-mobile-33, + .blocks-mobile-50 { + margin-left: -3%; + } + .blocks-mobile-50 > li { + width: 47%; + } + .blocks-mobile-33 > li { + width: 30.333333333333332%; + } +} +/* =Typography Responsive +-----------------------------------------------------------------------------*/ +/* Portrait tablet to landscape and desktop */ +@media (min-width: 768px) and (max-width: 979px) { + h1 { + font-size: 2.25em; + line-height: 1.125; + } + h2 { + font-size: 1.5em; + line-height: 1.25; + } + h3 { + font-size: 1.3125em; + line-height: 1.25; + } + h4 { + font-size: 1.125em; + line-height: 1.22222222; + } + h5 { + font-size: 1em; + } + h6 { + font-size: 0.75em; + } +} +/* Landscape phone to portrait tablet */ +@media (max-width: 767px) { + h1 { + font-size: 2.25em; + line-height: 1.25; + } + h2 { + font-size: 1.5em; + line-height: 1.15384615; + } + h3 { + font-size: 1.3125em; + line-height: 1.13636364; + } + h4 { + font-size: 1.125em; + line-height: 1.11111111; + } + h5 { + font-size: 1em; + } + h6 { + font-size: 0.75em; + } + .lead { + font-size: 1.2em; + } + ul, + ol, + ul ul, + ol ol, + ul ol, + ol ul { + margin-left: 1.65em; + } + blockquote { + margin-left: 0; + } +} +/* =Navigation Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .navbar.navbar-left, + .navbar.navbar-right, + .navbar li, + .navbar.navbar-left li, + .navbar.navbar-right li { + float: none; + text-align: center; + width: auto; + } + .navbar li, + .navbar.navbar-right li { + margin-left: 0; + margin-right: 0; + } + .fullwidth ul, + .fullwidth li { + width: auto; + } + .fullwidth li { + display: block; + } +} +/* =Forms Responsive +-----------------------------------------------------------------------------*/ +@media only screen and (max-width: 767px) { + .forms-list label { + display: inline-block; + } +} +@media print { + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + font-size: 12pt; + } + .h1, + h1 { + font-size: 36pt; + } + .h2, + h2 { + font-size: 24pt; + } + .h3, + h3 { + font-size: 18pt; + } + .h4, + h4 { + font-size: 14pt; + } + .h5, + h5 { + font-size: 12pt; + } + .h6, + h6 { + font-size: 12pt; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + page-break-inside: avoid; + } + blockquote { + border: none; + font-style: italic; + } + img { + max-width: 100% !important; + } + select { + background: #fff !important; + } +} diff --git a/static/css/kube.min.css b/static/css/kube.min.css new file mode 100755 index 0000000..57e8ad4 --- /dev/null +++ b/static/css/kube.min.css @@ -0,0 +1 @@ +*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,body,div,span,object,iframe,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video,h1,h2,h3,h4,h5,h6{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}a:active,a:hover{outline:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,embed,object,iframe,audio,video,canvas,progress,meter,output,textarea{display:block}audio:not([controls]){display:none;height:0}blockquote,q{quotes:none}blockquote p:before,blockquote p:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;vertical-align:top}thead th,thead td{font-weight:bold;vertical-align:bottom}a img,th img,td img{vertical-align:top}button,input,select,textarea{margin:0}textarea{overflow:auto;vertical-align:top;resize:vertical}button{width:auto;overflow:visible}input[type="reset"],input[type="submit"],input[type="file"],input[type="radio"],input[type="checkbox"],select,button{cursor:pointer}input[type="radio"],input[type="checkbox"]{font-size:110%;position:relative;top:-1px;margin-right:3px}input[type="search"]{-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}hr{display:block;height:1px;border:0;border-top:1px solid #ddd}img,video,audio,embed,object{max-width:100%}img,video,embed,object{height:auto}embed,object{height:100%}img{vertical-align:middle;-ms-interpolation-mode:bicubic}body{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:.9375em;line-height:1.65em;background:#fff;color:#222}a{color:#134da5}a:focus,a:hover{color:#de2c3b}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-weight:bold;color:#000;text-rendering:optimizeLegibility;margin:0 0 .5em 0}h1,.h1,h2,.h2{line-height:1.1}h3,.h3,h4,.h4{line-height:1.3}h1,.h1{font-size:2.25em}h2,.h2{font-size:1.5em;margin-bottom:.7em}h3,.h3{font-size:1.3125em}h4,.h4{font-size:1.125em}h5,.h5{font-size:1em}h6,.h6{font-size:.75em;text-transform:uppercase}.lead{font-size:1.3125em;line-height:1.5;margin-bottom:1.0999999999999999em}p,ul,ol,dl,dd,dt,blockquote,td,th{line-height:1.65em}ul,ol,ul ul,ol ol,ul ol,ol ul{margin:0 0 0 3.3em}ul li,ol li{text-align:left}ol ol li{list-style-type:lower-alpha}ol ol ol li{list-style-type:lower-roman}p,ul,ol,dl,blockquote,hr,pre,table,form,fieldset,figure,address{margin-bottom:1.65em}blockquote{position:relative;font-style:italic;font-size:1.125em;margin-left:2.4749999999999996em;padding-left:1.65em;border-left:2px solid #ddd}blockquote p{margin-bottom:.5em}blockquote small,cite{color:rgba(0,0,0,0.4);font-style:italic}small,blockquote cite{font-size:12.75px;line-height:1}address{font-style:normal}dl dt{font-weight:bold}dd{margin-left:1.65em}s,del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted #0f0f0f;cursor:help}strong,b{font-weight:bold}em,i{font-style:italic}sub,sup{font-size:11.25px;line-height:0;position:relative}sup{top:-0.5em}sub{bottom:-0.25em}figcaption{margin:.3em 0;font-size:12.75px;font-style:italic}ins,u{text-decoration:underline}mark{background-color:#ffc800;color:#0f0f0f;text-decoration:none}pre,code,kbd,samp,var,output{font-size:90%;font-style:normal;font-family:Menlo,Monaco,Consolas,"Courier New",monospace}pre{margin-top:1.65em;font-size:100%;line-height:1.5;color:#222;overflow:auto}code,samp,kbd{padding:3px 6px 2px 6px;display:inline-block;line-height:1;border-radius:2px}code{background:#f4f4f4;border:1px solid #d4d4d4}pre code{font-size:100%;border:0;padding:0;background:0;line-height:1.65em}var{color:rgba(0,0,0,0.5)}samp{background:#d3e3fb;border:1px solid #b2cef8}kbd{background:#0f0f0f;color:rgba(255,255,255,0.85);white-space:nowrap}button:active,button:focus{outline:0}textarea,select{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:1em;box-shadow:none}textarea,select[multiple],select[multiple="multiple"]{padding:.3em .35em;line-height:1.35em;width:100%}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="phone"],input[type="tel"],input[type="number"],input[type="datetime"],input[type="date"],input[type="month"],input[type="color"],input[type="time"],input[type="search"],input[type="datetime-local"]{font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:1em;box-shadow:none;padding:.3em .35em;line-height:1.65em;border-radius:0;outline:0}select[multiple],select[multiple="multiple"],textarea,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="phone"],input[type="tel"],input[type="number"],input[type="datetime"],input[type="date"],input[type="month"],input[type="color"],input[type="time"],input[type="search"],input[type="datetime-local"]{background:#fff;border:1px solid #ccc;position:relative;z-index:2;-webkit-appearance:none}textarea[disabled],input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="phone"][disabled],input[type="tel"][disabled],input[type="number"][disabled],input[type="datetime"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="color"][disabled],input[type="time"][disabled],input[type="search"][disabled],input[type="datetime-local"][disabled]{resize:none;color:rgba(0,0,0,0.5)}select[disabled],input[type="checkbox"][disabled],input[type="radio"][disabled]{cursor:default}input::-moz-focus-inner,button::-moz-focus-inner{border:0;padding:0}input[type="range"]{position:relative;top:3px}select{margin-bottom:0!important}fieldset{padding:1.65em;margin-bottom:1.65em;border:1px solid #ccc}fieldset *:last-child{margin-bottom:0!important}legend{font-weight:bold;padding:0 1em;margin-left:-1em}table{max-width:100%;width:100%;empty-cells:show}table caption{text-transform:uppercase;padding:0 1.0999999999999999em;color:rgba(0,0,0,0.4);font-size:12.75px}table th,table td{border-bottom:1px solid #eee;padding:.825em 1.0999999999999999em}table tfoot th,table tfoot td{color:rgba(0,0,0,0.4)}.units-container:after,.units-row:after{content:"";display:table;clear:both}.units-container:after,.units-row:after{content:"";display:table;clear:both}.units-container{padding-top:1px;margin-top:-1px}.units-row{margin-bottom:1.65em}.width-100,.unit-100{width:100%}.width-90,.unit-90{width:90%}.width-80,.unit-80{width:80%}.width-75,.unit-75{width:75%}.width-70,.unit-70{width:70%}.width-66,.unit-66{width:66.6%}.width-65,.unit-65{width:65%}.width-60,.unit-60{width:60%}.width-50,.unit-50{width:50%}.width-40,.unit-40{width:40%}.width-35,.unit-35{width:35%}.width-33,.unit-33{width:33.3%}.width-30,.unit-30{width:30%}.width-25,.unit-25{width:25%}.width-20,.unit-20{width:20%}.width-10,.unit-10{width:10%}.units-row .unit-90,.units-row .unit-80,.units-row .unit-75,.units-row .unit-70,.units-row .unit-66,.units-row .unit-65,.units-row .unit-60,.units-row .unit-50,.units-row .unit-40,.units-row .unit-35,.units-row .unit-33,.units-row .unit-30,.units-row .unit-25,.units-row .unit-20,.units-row .unit-10{float:left;margin-left:3%}.units-row .unit-90:first-child,.units-row .unit-80:first-child,.units-row .unit-75:first-child,.units-row .unit-70:first-child,.units-row .unit-66:first-child,.units-row .unit-65:first-child,.units-row .unit-60:first-child,.units-row .unit-50:first-child,.units-row .unit-40:first-child,.units-row .unit-35:first-child,.units-row .unit-33:first-child,.units-row .unit-30:first-child,.units-row .unit-25:first-child,.units-row .unit-20:first-child,.units-row .unit-10:first-child{margin-left:0}.units-row .unit-90{width:89.7%}.units-row .unit-80{width:79.4%}.units-row .unit-75{width:74.25%}.units-row .unit-70{width:69.1%}.units-row .unit-66{width:65.66666666666666%}.units-row .unit-65{width:65.66666666666666%}.units-row .unit-60{width:58.800000000000004%}.units-row .unit-50{width:48.5%}.units-row .unit-40{width:38.2%}.units-row .unit-35{width:31.333333333333332%}.units-row .unit-33{width:31.333333333333332%}.units-row .unit-30{width:27.9%}.units-row .unit-25{width:22.75%}.units-row .unit-20{width:17.6%}.units-row .unit-10{width:7.3%}.unit-push-90,.unit-push-80,.unit-push-75,.unit-push-70,.unit-push-66,.unit-push-65,.unit-push-60,.unit-push-50,.unit-push-40,.unit-push-35,.unit-push-33,.unit-push-30,.unit-push-25,.unit-push-20,.unit-push-10{position:relative}.unit-push-90{left:92.7%}.unit-push-80{left:82.4%}.unit-push-75{left:77.25%}.unit-push-70{left:72.1%}.unit-push-66{left:68.66666666666666%}.unit-push-65{left:68.66666666666666%}.unit-push-60{left:61.800000000000004%}.unit-push-50{left:51.5%}.unit-push-40{left:41.2%}.unit-push-35{left:34.33333333333333%}.unit-push-33{left:34.33333333333333%}.unit-push-30{left:30.9%}.unit-push-25{left:25.75%}.unit-push-20{left:20.6%}.unit-push-10{left:10.3%}.units-row .unit-push-right{float:right}.units-row .unit-role-right{margin-left:3%;float:right}.units-row .unit-role-left{margin-left:0}.centered,.unit-centered{float:none!important;margin:0 auto!important}.unit-padding{padding:1.65em}.units-padding .unit-100,.units-padding .unit-90,.units-padding .unit-80,.units-padding .unit-75,.units-padding .unit-70,.units-padding .unit-66,.units-padding .unit-65,.units-padding .unit-60,.units-padding .unit-50,.units-padding .unit-40,.units-padding .unit-35,.units-padding .unit-33,.units-padding .unit-30,.units-padding .unit-25,.units-padding .unit-20,.units-padding .unit-10{padding:1.65em}.units-split .unit-90,.units-split .unit-80,.units-split .unit-75,.units-split .unit-70,.units-split .unit-66,.units-split .unit-65,.units-split .unit-60,.units-split .unit-50,.units-split .unit-40,.units-split .unit-35,.units-split .unit-33,.units-split .unit-30,.units-split .unit-25,.units-split .unit-20,.units-split .unit-10{margin-left:0}.units-split .unit-90{width:90%}.units-split .unit-80{width:80%}.units-split .unit-75{width:75%}.units-split .unit-70{width:70%}.units-split .unit-66{width:66.6%}.units-split .unit-65{width:65%}.units-split .unit-60{width:60%}.units-split .unit-50{width:50%}.units-split .unit-40{width:40%}.units-split .unit-35{width:35%}.units-split .unit-33{width:33.3%}.units-split .unit-30{width:30%}.units-split .unit-25{width:25%}.units-split .unit-20{width:20%}.units-split .unit-10{width:10%}.blocks-2,.blocks-3,.blocks-4,.blocks-5,.blocks-6{padding-left:0;list-style:none;margin-left:-3%}.blocks-2:after,.blocks-3:after,.blocks-4:after,.blocks-5:after,.blocks-6:after{content:"";display:table;clear:both}.blocks-2:after,.blocks-3:after,.blocks-4:after,.blocks-5:after,.blocks-6:after{content:"";display:table;clear:both}.blocks-2>li,.blocks-3>li,.blocks-4>li,.blocks-5>li,.blocks-6>li{height:auto;float:left;margin-bottom:1.65em;margin-left:3%}.blocks-2>li ul,.blocks-3>li ul,.blocks-4>li ul,.blocks-5>li ul,.blocks-6>li ul{list-style-type:disc}.blocks-2>li ul ul,.blocks-3>li ul ul,.blocks-4>li ul ul,.blocks-5>li ul ul,.blocks-6>li ul ul{list-style-type:circle}.blocks-2>li li,.blocks-3>li li,.blocks-4>li li,.blocks-5>li li,.blocks-6>li li{float:none;margin:0}.blocks-2>li{width:47%}.blocks-3>li{width:30.333333333333332%}.blocks-4>li{width:22%}.blocks-5>li{width:17%}.blocks-6>li{width:13.666666666666666%}.block-first{clear:both}table.table-bordered td,table.table-bordered th{border:1px solid #eee}table.table-simple td,table.table-simple th,table.table-simple caption{border:0;padding-left:0}table.table-flat td,table.table-flat th,table.table-flat caption{border:0;padding:0}table.table-stroked td,table.table-stroked th{border-bottom:1px solid #eee}table.table-stripped tbody tr:nth-child(odd) td{background:#f8f8f8}table.table-hovered tbody tr:hover td{background-color:#f4f4f4}.table-container{width:100%;overflow:auto;margin-bottom:1.65em}.table-container table{margin-bottom:0}.table-container::-webkit-scrollbar{-webkit-appearance:none;width:14px;height:14px}.table-container::-webkit-scrollbar-thumb{border-radius:8px;border:3px solid #fff;background-color:rgba(0,0,0,0.3)}.forms .btn,.forms input[type="submit"].btn,.forms button,.forms input[type="submit"],.forms input[type="reset"]{padding:.3625em 1.3em}.forms .btn-outline{padding:.3em 1.3em}.forms .btn-outline.bold{padding:.2375em 1.3em}.forms label{display:block;margin-bottom:1.0999999999999999em}.forms input[type="text"],.forms input[type="password"],.forms input[type="email"],.forms input[type="url"],.forms input[type="phone"],.forms input[type="tel"],.forms input[type="number"],.forms input[type="datetime"],.forms input[type="date"],.forms input[type="month"],.forms input[type="color"],.forms input[type="time"],.forms input[type="search"],.forms input[type="range"],.forms input[type="file"],.forms input[type="datetime-local"],.forms textarea,.forms select{display:block}.forms-inline input[type="text"],.forms-inline-list input[type="text"],.forms-inline input[type="password"],.forms-inline-list input[type="password"],.forms-inline input[type="email"],.forms-inline-list input[type="email"],.forms-inline input[type="url"],.forms-inline-list input[type="url"],.forms-inline input[type="phone"],.forms-inline-list input[type="phone"],.forms-inline input[type="tel"],.forms-inline-list input[type="tel"],.forms-inline input[type="number"],.forms-inline-list input[type="number"],.forms-inline input[type="datetime"],.forms-inline-list input[type="datetime"],.forms-inline input[type="date"],.forms-inline-list input[type="date"],.forms-inline input[type="month"],.forms-inline-list input[type="month"],.forms-inline input[type="color"],.forms-inline-list input[type="color"],.forms-inline input[type="time"],.forms-inline-list input[type="time"],.forms-inline input[type="search"],.forms-inline-list input[type="search"],.forms-inline input[type="range"],.forms-inline-list input[type="range"],.forms-inline input[type="file"],.forms-inline-list input[type="file"],.forms-inline input[type="datetime-local"],.forms-inline-list input[type="datetime-local"],.forms-inline textarea,.forms-inline-list textarea,.forms-inline select,.forms-inline-list select{display:inline-block}.forms-list,.forms-inline,.forms-inline-list{margin:0;padding:0;margin-bottom:1.0999999999999999em;list-style:none}.forms-list label,.forms-inline label,.forms-inline-list li,.forms-inline-list li label{display:inline-block;margin-bottom:0}.forms-inline-list li label{margin-right:.825em}.forms-inline-list li{margin-bottom:3px}.forms-list li{margin-bottom:6px}.forms-desc{margin-top:4px;color:rgba(0,0,0,0.4);font-size:12.75px;line-height:1.4em}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="phone"],input[type="tel"],input[type="number"],input[type="datetime"],input[type="date"],input[type="month"],input[type="color"],input[type="time"],input[type="search"],input[type="datetime-local"],textarea{-moz-transition:border ease .5s;transition:border ease .5s}.error,.success{font-weight:normal;font-size:12.75px}input.input-error,textarea.input-error,select.input-error,.input-error{border-color:#de2c3b;box-shadow:0 0 0 2px rgba(222,44,59,0.3),0 1px 2px rgba(0,0,0,0.2) inset}input.input-success,textarea.input-success,select.input-success,.input-success{border-color:#2c9f42;box-shadow:0 0 0 2px rgba(44,159,66,0.3),0 1px 2px rgba(0,0,0,0.2) inset}input.input-gray,textarea.input-gray,select.input-gray,.input-gray{border-color:#b3b6b7;box-shadow:0 0 0 2px rgba(179,182,183,0.4),0 1px 2px rgba(0,0,0,0.2) inset}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="phone"]:focus,input[type="tel"]:focus,input[type="number"]:focus,input[type="datetime"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="color"]:focus,input[type="time"]:focus,input[type="search"]:focus,input[type="datetime-local"]:focus,textarea:focus{outline:0;border-color:#2575ed;box-shadow:0 0 0 2px rgba(37,117,237,0.3),0 1px 2px rgba(0,0,0,0.2) inset}input.input-search,input[type="search"]{padding-right:.5em;padding-left:.5em;margin-bottom:0;border-radius:15px}input.input-on-black{border:1px solid rgba(255,255,255,0.1);background:rgba(255,255,255,0.35)}input.input-on-black::-webkit-input-placeholder{color:rgba(255,255,255,0.6)}input.input-on-black::-moz-placeholder{color:rgba(255,255,255,0.6)}input.input-on-black:focus,input.input-on-black.active{border:1px solid #fff;background:#fff;box-shadow:none}input.input-on-black:focus::-webkit-input-placeholder,input.input-on-black.active::-webkit-input-placeholder{color:#aaa}input.input-on-black:focus::-moz-placeholder,input.input-on-black.active::-moz-placeholder{color:#aaa}input.input-big{font-size:18px}input.input-small{font-size:12.75px}input.input-smaller{font-size:11.25px}.input-groups{display:table!important}.input-groups input{width:100%}.input-groups input,.input-groups .input-append,.input-groups .input-prepend,.input-groups .btn-append{display:table-cell!important}.input-groups .btn-append,.input-groups .input-append,.input-groups .input-prepend{width:1%;vertical-align:middle}.input-groups .input-append,.input-groups .input-prepend{background-color:#f4f4f4;border:1px solid #d4d4d4;margin:0;padding:.45em .75em .15em .75em;color:rgba(0,0,0,0.6);line-height:1.65em;font-size:12.75px;white-space:nowrap}.input-groups .input-prepend{border-right:0}.input-groups .input-append{position:relative;z-index:1;border-left:none}.input-groups .btn-append .btn{display:block;height:auto;border-radius:0 2px 2px 0}.navbar{font-size:105%;margin-bottom:1.65em}.navbar:after{content:"";display:table;clear:both}.navbar:after{content:"";display:table;clear:both}.navbar.navbar-left{float:left}.navbar.navbar-right{float:right}.navbar ul{list-style:none;margin:0}.navbar ul:after{content:"";display:table;clear:both}.navbar ul:after{content:"";display:table;clear:both}.navbar li{float:left;margin-right:1.65em}.navbar.navbar-right li{margin-right:0;margin-left:1.65em}.navbar a,.navbar span{display:block;text-decoration:none}.navbar a:hover{color:#de2c3b;text-decoration:underline}.navbar li.active a,.navbar span{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4)}.navigation-toggle{display:none;text-transform:uppercase;position:relative;color:#0f0f0f;background-color:#fff}.navigation-toggle:after{position:absolute;z-index:1;top:50%;margin-top:-12px;left:10px;content:"\2630";font-size:24px;line-height:1}.navigation-toggle.navigation-toggle-black{background-color:#0f0f0f;color:#fff}.navigation-toggle.navigation-toggle-show{margin-bottom:1.65em}.navigation-toggle span{position:relative;z-index:2;cursor:pointer;display:block;padding:10px 20px 10px 40px}.navigation-fixed{position:fixed;top:0;left:0;z-index:101}.navbar-pills a,.navbar-pills span{padding:.825em 1.65em}.navbar-pills a:hover{color:#0f0f0f;background:#eee}.navbar-pills li.active a,.navbar-pills span{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4);background:#eee}.navbar-pills li{margin-right:1px}.navbar-pills.navbar-right li{margin-left:1px}.fullwidth ul{width:100%}.fullwidth li{float:none!important;margin:0;display:table-cell;width:1%;text-align:center}.fullwidth li a,.fullwidth li span{display:block}.nav{margin-bottom:1.65em}.nav ul{list-style:none;margin:0}.nav ul li ul{margin-left:2em;font-size:.95em}.nav a,.nav span{display:block;padding:.5em 0}.nav a{color:#0f0f0f;text-decoration:none}.nav a:hover{color:#de2c3b;text-decoration:underline}.nav li.active a,.nav span{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4)}.nav i.fa{width:1.65em}.nav-stacked li{margin-bottom:1px}.nav-stacked a,.nav-stacked span{padding:.6em .7em}.nav-stacked a{background:#f6f6f6}.nav-stacked a:hover{color:#000;background:#eee}.nav-stacked li.active a,.nav-stacked span{background:#fff;text-decoration:none;cursor:text;color:rgba(0,0,0,0.3)}.nav-stats li{position:relative}.nav-stats a,.nav-stats span{padding-right:50px}.nav-stats sup,.nav-stats .badge{position:absolute;top:50%;right:0}.nav-stats sup{color:rgba(0,0,0,0.4)}.nav-stats .badge{margin-top:-8px}.nav-tabs{border-bottom:1px solid #e3e3e3;margin-bottom:1.65em}.nav-tabs:after{content:"";display:table;clear:both}.nav-tabs:after{content:"";display:table;clear:both}.nav-tabs ul{list-style:none;margin:0}.nav-tabs li{float:left;margin-right:2px}.nav-tabs a,.nav-tabs span{display:block;line-height:1;padding:.825em 1.65em;border:1px solid transparent}.nav-tabs a{color:rgba(0,0,0,0.5);text-decoration:none}.nav-tabs a:focus,.nav-tabs a:hover{color:#0f0f0f;text-decoration:underline;background-color:#eee}.nav-tabs li.active a,.nav-tabs span{color:#0f0f0f;background:#fff;position:relative;border:1px solid #ddd;border-bottom:1px solid #fff;bottom:-1px;cursor:default;text-decoration:none}.breadcrumbs{margin-bottom:1.65em}.breadcrumbs:after{content:"";display:table;clear:both}.breadcrumbs:after{content:"";display:table;clear:both}.breadcrumbs ul{font-size:.9em;color:rgba(0,0,0,0.4);list-style:none;margin:0}.breadcrumbs ul:after{content:"";display:table;clear:both}.breadcrumbs ul:after{content:"";display:table;clear:both}.breadcrumbs li{float:left;margin-right:5px}.breadcrumbs li+li:before{content:" > ";color:#aaa;font-size:12px;margin:0 7px 0 5px;position:relative;top:-1px}.breadcrumbs.breadcrumbs-path li+li:before{content:" / ";top:0}.breadcrumbs a{color:#0f0f0f;text-decoration:none}.breadcrumbs a:hover{color:#0f0f0f;text-decoration:underline}.breadcrumbs li.active a,.breadcrumbs span,.breadcrumbs li.active a:hover{text-decoration:none;cursor:text;color:rgba(0,0,0,0.4)}.pagination{position:relative;left:-9px;margin-left:0;list-style:none}.pagination:after{content:"";display:table;clear:both}.pagination:after{content:"";display:table;clear:both}.pagination li{float:left;margin-right:2px}.pagination a,.pagination span{display:block;padding:7px 9px;line-height:1;border-radius:2px;color:#0f0f0f;text-decoration:none}.pagination span,.pagination li.active a,.pagination li.active a:hover{color:#fff;background-color:#0f0f0f;cursor:text}.pagination a:focus,.pagination a:hover{text-decoration:none;background-color:#0f0f0f;color:#fff}.btn,input[type="submit"].btn{display:inline-block;vertical-align:top;font-family:"Helvetica Neue",Helvetica,Tahoma,sans-serif;font-size:1em;font-weight:400;line-height:1.65em;text-align:center;text-decoration:none;color:#222;-webkit-appearance:none;outline:0;margin:0;border:0;border-radius:2px;box-shadow:none;cursor:pointer;background:#e0e3e5;padding:.55em 2.5em}.btn:hover,input[type="submit"].btn:hover{color:rgba(0,0,0,0.5);background:#b3b6b7}.btn::-moz-focus-inner{border:0;padding:0}.btn-big,input[type="submit"].btn-big{font-size:18px}.btn-small,input[type="submit"].btn-small{font-size:12.75px}.btn-smaller,input[type="submit"].btn-smaller{font-size:11.25px;vertical-align:baseline}.btn-round{border-radius:15px}.btn-outline,input[type="submit"].btn-outline{background:0;padding:.48750000000000004em 2.5em;border:1px solid #0f0f0f}.btn-outline:hover,input[type="submit"].btn-outline:hover{border-color:#b3b6b7}.btn-outline.btn-active{padding:.55em 2.5em}.btn-outline.bold{border-width:2px;padding:.42500000000000004em 2.5em}.btn-active,.btn[disabled],.btn-disabled{background:0;background:#b3b6b7;color:rgba(0,0,0,0.5)}.btn-active:hover,.btn[disabled]:hover,.btn-disabled:hover{color:rgba(0,0,0,0.5);background:#b3b6b7}.btn-active{box-shadow:0 1px 3px rgba(0,0,0,0.4) inset}.btn-outline.btn[disabled],.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(0,0,0,0.3);border:1px solid rgba(0,0,0,0.1)}.btn-outline.btn-active{background:0;color:rgba(0,0,0,0.4);border:0;box-shadow:0 1px 3px rgba(0,0,0,0.2) inset}.btn[disabled],.btn-disabled{cursor:default;box-shadow:none}.btn-blue,input[type="submit"].btn-blue{color:rgba(255,255,255,0.9);background:#2575ed}.btn-blue:hover,input[type="submit"].btn-blue:hover{color:rgba(255,255,255,0.6);background:#1a52a5}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active,.btn-blue.btn-disabled,input[type="submit"].btn-blue.btn-disabled,.btn-blue.btn[disabled],input[type="submit"].btn-blue.btn[disabled]{color:rgba(255,255,255,0.5);background:#1a52a5}.btn-blue.btn-active:hover,input[type="submit"].btn-blue.btn-active:hover,.btn-blue.btn-disabled:hover,input[type="submit"].btn-blue.btn-disabled:hover,.btn-blue.btn[disabled]:hover,input[type="submit"].btn-blue.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-blue.btn-outline,input[type="submit"].btn-blue.btn-outline{background:0;border-color:#2575ed;color:#2575ed}.btn-blue.btn-outline:hover,input[type="submit"].btn-blue.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2575ed}.btn-blue.btn-outline.btn[disabled],input[type="submit"].btn-blue.btn-outline.btn[disabled],.btn-blue.btn-outline.btn-disabled,input[type="submit"].btn-blue.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(37,117,237,0.4);border:1px solid rgba(37,117,237,0.3)}.btn-blue.btn-outline.btn-active,input[type="submit"].btn-blue.btn-outline.btn-active{background:0;color:rgba(37,117,237,0.6);border:0;box-shadow:0 1px 3px rgba(26,82,165,0.6) inset}.btn-blue:hover,input[type="submit"].btn-blue:hover{color:rgba(255,255,255,0.6);background:#1a52a5}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-blue.btn-active,input[type="submit"].btn-blue.btn-active,.btn-blue.btn-disabled,input[type="submit"].btn-blue.btn-disabled,.btn-blue.btn[disabled],input[type="submit"].btn-blue.btn[disabled]{color:rgba(255,255,255,0.5);background:#1a52a5}.btn-blue.btn-active:hover,input[type="submit"].btn-blue.btn-active:hover,.btn-blue.btn-disabled:hover,input[type="submit"].btn-blue.btn-disabled:hover,.btn-blue.btn[disabled]:hover,input[type="submit"].btn-blue.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-blue.btn-outline,input[type="submit"].btn-blue.btn-outline{background:0;border-color:#2575ed;color:#2575ed}.btn-blue.btn-outline:hover,input[type="submit"].btn-blue.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2575ed}.btn-blue.btn-outline.btn[disabled],input[type="submit"].btn-blue.btn-outline.btn[disabled],.btn-blue.btn-outline.btn-disabled,input[type="submit"].btn-blue.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(37,117,237,0.4);border:1px solid rgba(37,117,237,0.3)}.btn-blue.btn-outline.btn-active,input[type="submit"].btn-blue.btn-outline.btn-active{background:0;color:rgba(37,117,237,0.6);border:0;box-shadow:0 1px 3px rgba(26,82,165,0.6) inset}.btn-red,input[type="submit"].btn-red{color:rgba(255,255,255,0.9);background:#de2c3b}.btn-red:hover,input[type="submit"].btn-red:hover{color:rgba(255,255,255,0.6);background:#b2232f}.btn-red.btn-active,input[type="submit"].btn-red.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-red.btn-active,input[type="submit"].btn-red.btn-active,.btn-red.btn-disabled,input[type="submit"].btn-red.btn-disabled,.btn-red.btn[disabled],input[type="submit"].btn-red.btn[disabled]{color:rgba(255,255,255,0.5);background:#b2232f}.btn-red.btn-active:hover,input[type="submit"].btn-red.btn-active:hover,.btn-red.btn-disabled:hover,input[type="submit"].btn-red.btn-disabled:hover,.btn-red.btn[disabled]:hover,input[type="submit"].btn-red.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-red.btn-outline,input[type="submit"].btn-red.btn-outline{background:0;border-color:#de2c3b;color:#de2c3b}.btn-red.btn-outline:hover,input[type="submit"].btn-red.btn-outline:hover{color:rgba(255,255,255,0.9);background:#de2c3b}.btn-red.btn-outline.btn[disabled],input[type="submit"].btn-red.btn-outline.btn[disabled],.btn-red.btn-outline.btn-disabled,input[type="submit"].btn-red.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(222,44,59,0.4);border:1px solid rgba(222,44,59,0.3)}.btn-red.btn-outline.btn-active,input[type="submit"].btn-red.btn-outline.btn-active{background:0;color:rgba(222,44,59,0.6);border:0;box-shadow:0 1px 3px rgba(178,35,47,0.6) inset}.btn-red:hover,input[type="submit"].btn-red:hover{color:rgba(255,255,255,0.6);background:#b2232f}.btn-red.btn-active,input[type="submit"].btn-red.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-red.btn-active,input[type="submit"].btn-red.btn-active,.btn-red.btn-disabled,input[type="submit"].btn-red.btn-disabled,.btn-red.btn[disabled],input[type="submit"].btn-red.btn[disabled]{color:rgba(255,255,255,0.5);background:#b2232f}.btn-red.btn-active:hover,input[type="submit"].btn-red.btn-active:hover,.btn-red.btn-disabled:hover,input[type="submit"].btn-red.btn-disabled:hover,.btn-red.btn[disabled]:hover,input[type="submit"].btn-red.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-red.btn-outline,input[type="submit"].btn-red.btn-outline{background:0;border-color:#de2c3b;color:#de2c3b}.btn-red.btn-outline:hover,input[type="submit"].btn-red.btn-outline:hover{color:rgba(255,255,255,0.9);background:#de2c3b}.btn-red.btn-outline.btn[disabled],input[type="submit"].btn-red.btn-outline.btn[disabled],.btn-red.btn-outline.btn-disabled,input[type="submit"].btn-red.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(222,44,59,0.4);border:1px solid rgba(222,44,59,0.3)}.btn-red.btn-outline.btn-active,input[type="submit"].btn-red.btn-outline.btn-active{background:0;color:rgba(222,44,59,0.6);border:0;box-shadow:0 1px 3px rgba(178,35,47,0.6) inset}.btn-green,input[type="submit"].btn-green{color:rgba(255,255,255,0.9);background:#2c9f42}.btn-green:hover,input[type="submit"].btn-green:hover{color:rgba(255,255,255,0.6);background:#237f35}.btn-green.btn-active,input[type="submit"].btn-green.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-green.btn-active,input[type="submit"].btn-green.btn-active,.btn-green.btn-disabled,input[type="submit"].btn-green.btn-disabled,.btn-green.btn[disabled],input[type="submit"].btn-green.btn[disabled]{color:rgba(255,255,255,0.5);background:#237f35}.btn-green.btn-active:hover,input[type="submit"].btn-green.btn-active:hover,.btn-green.btn-disabled:hover,input[type="submit"].btn-green.btn-disabled:hover,.btn-green.btn[disabled]:hover,input[type="submit"].btn-green.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-green.btn-outline,input[type="submit"].btn-green.btn-outline{background:0;border-color:#2c9f42;color:#2c9f42}.btn-green.btn-outline:hover,input[type="submit"].btn-green.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2c9f42}.btn-green.btn-outline.btn[disabled],input[type="submit"].btn-green.btn-outline.btn[disabled],.btn-green.btn-outline.btn-disabled,input[type="submit"].btn-green.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(44,159,66,0.4);border:1px solid rgba(44,159,66,0.3)}.btn-green.btn-outline.btn-active,input[type="submit"].btn-green.btn-outline.btn-active{background:0;color:rgba(44,159,66,0.6);border:0;box-shadow:0 1px 3px rgba(35,127,53,0.6) inset}.btn-green:hover,input[type="submit"].btn-green:hover{color:rgba(255,255,255,0.6);background:#237f35}.btn-green.btn-active,input[type="submit"].btn-green.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-green.btn-active,input[type="submit"].btn-green.btn-active,.btn-green.btn-disabled,input[type="submit"].btn-green.btn-disabled,.btn-green.btn[disabled],input[type="submit"].btn-green.btn[disabled]{color:rgba(255,255,255,0.5);background:#237f35}.btn-green.btn-active:hover,input[type="submit"].btn-green.btn-active:hover,.btn-green.btn-disabled:hover,input[type="submit"].btn-green.btn-disabled:hover,.btn-green.btn[disabled]:hover,input[type="submit"].btn-green.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-green.btn-outline,input[type="submit"].btn-green.btn-outline{background:0;border-color:#2c9f42;color:#2c9f42}.btn-green.btn-outline:hover,input[type="submit"].btn-green.btn-outline:hover{color:rgba(255,255,255,0.9);background:#2c9f42}.btn-green.btn-outline.btn[disabled],input[type="submit"].btn-green.btn-outline.btn[disabled],.btn-green.btn-outline.btn-disabled,input[type="submit"].btn-green.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(44,159,66,0.4);border:1px solid rgba(44,159,66,0.3)}.btn-green.btn-outline.btn-active,input[type="submit"].btn-green.btn-outline.btn-active{background:0;color:rgba(44,159,66,0.6);border:0;box-shadow:0 1px 3px rgba(35,127,53,0.6) inset}.btn-black,input[type="submit"].btn-black{color:rgba(255,255,255,0.9);background:#0f0f0f}.btn-black:hover,input[type="submit"].btn-black:hover{color:rgba(255,255,255,0.6);background:#363738}.btn-black.btn-active,input[type="submit"].btn-black.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.7) inset}.btn-black.btn-active,input[type="submit"].btn-black.btn-active,.btn-black.btn-disabled,input[type="submit"].btn-black.btn-disabled,.btn-black.btn[disabled],input[type="submit"].btn-black.btn[disabled]{color:rgba(255,255,255,0.5);background:#363738}.btn-black.btn-active:hover,input[type="submit"].btn-black.btn-active:hover,.btn-black.btn-disabled:hover,input[type="submit"].btn-black.btn-disabled:hover,.btn-black.btn[disabled]:hover,input[type="submit"].btn-black.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-black.btn-outline,input[type="submit"].btn-black.btn-outline{background:0;border-color:#0f0f0f;color:#0f0f0f}.btn-black.btn-outline:hover,input[type="submit"].btn-black.btn-outline:hover{color:rgba(255,255,255,0.9);background:#0f0f0f}.btn-black.btn-outline.btn[disabled],input[type="submit"].btn-black.btn-outline.btn[disabled],.btn-black.btn-outline.btn-disabled,input[type="submit"].btn-black.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(15,15,15,0.4);border:1px solid rgba(15,15,15,0.3)}.btn-black.btn-outline.btn-active,input[type="submit"].btn-black.btn-outline.btn-active{background:0;color:rgba(15,15,15,0.6);border:0;box-shadow:0 1px 3px rgba(54,55,56,0.6) inset}.btn-black:hover,input[type="submit"].btn-black:hover{color:rgba(255,255,255,0.6);background:#363738}.btn-black.btn-active,input[type="submit"].btn-black.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.7) inset}.btn-black.btn-active,input[type="submit"].btn-black.btn-active,.btn-black.btn-disabled,input[type="submit"].btn-black.btn-disabled,.btn-black.btn[disabled],input[type="submit"].btn-black.btn[disabled]{color:rgba(255,255,255,0.5);background:#363738}.btn-black.btn-active:hover,input[type="submit"].btn-black.btn-active:hover,.btn-black.btn-disabled:hover,input[type="submit"].btn-black.btn-disabled:hover,.btn-black.btn[disabled]:hover,input[type="submit"].btn-black.btn[disabled]:hover{color:rgba(255,255,255,0.5)}.btn-black.btn-outline,input[type="submit"].btn-black.btn-outline{background:0;border-color:#0f0f0f;color:#0f0f0f}.btn-black.btn-outline:hover,input[type="submit"].btn-black.btn-outline:hover{color:rgba(255,255,255,0.9);background:#0f0f0f}.btn-black.btn-outline.btn[disabled],input[type="submit"].btn-black.btn-outline.btn[disabled],.btn-black.btn-outline.btn-disabled,input[type="submit"].btn-black.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(15,15,15,0.4);border:1px solid rgba(15,15,15,0.3)}.btn-black.btn-outline.btn-active,input[type="submit"].btn-black.btn-outline.btn-active{background:0;color:rgba(15,15,15,0.6);border:0;box-shadow:0 1px 3px rgba(54,55,56,0.6) inset}.btn-yellow,input[type="submit"].btn-yellow{color:rgba(0,0,0,0.9);background:#ffc800}.btn-yellow:hover,input[type="submit"].btn-yellow:hover{color:rgba(0,0,0,0.6);background:#cca000}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active,.btn-yellow.btn-disabled,input[type="submit"].btn-yellow.btn-disabled,.btn-yellow.btn[disabled],input[type="submit"].btn-yellow.btn[disabled]{color:rgba(0,0,0,0.5);background:#cca000}.btn-yellow.btn-active:hover,input[type="submit"].btn-yellow.btn-active:hover,.btn-yellow.btn-disabled:hover,input[type="submit"].btn-yellow.btn-disabled:hover,.btn-yellow.btn[disabled]:hover,input[type="submit"].btn-yellow.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-yellow.btn-outline,input[type="submit"].btn-yellow.btn-outline{background:0;border-color:#ffc800;color:#ffc800}.btn-yellow.btn-outline:hover,input[type="submit"].btn-yellow.btn-outline:hover{color:rgba(0,0,0,0.9);background:#ffc800}.btn-yellow.btn-outline.btn[disabled],input[type="submit"].btn-yellow.btn-outline.btn[disabled],.btn-yellow.btn-outline.btn-disabled,input[type="submit"].btn-yellow.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,200,0,0.4);border:1px solid rgba(255,200,0,0.3)}.btn-yellow.btn-outline.btn-active,input[type="submit"].btn-yellow.btn-outline.btn-active{background:0;color:rgba(255,200,0,0.6);border:0;box-shadow:0 1px 3px rgba(204,160,0,0.6) inset}.btn-yellow:hover,input[type="submit"].btn-yellow:hover{color:rgba(0,0,0,0.6);background:#cca000}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.5) inset}.btn-yellow.btn-active,input[type="submit"].btn-yellow.btn-active,.btn-yellow.btn-disabled,input[type="submit"].btn-yellow.btn-disabled,.btn-yellow.btn[disabled],input[type="submit"].btn-yellow.btn[disabled]{color:rgba(0,0,0,0.5);background:#cca000}.btn-yellow.btn-active:hover,input[type="submit"].btn-yellow.btn-active:hover,.btn-yellow.btn-disabled:hover,input[type="submit"].btn-yellow.btn-disabled:hover,.btn-yellow.btn[disabled]:hover,input[type="submit"].btn-yellow.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-yellow.btn-outline,input[type="submit"].btn-yellow.btn-outline{background:0;border-color:#ffc800;color:#ffc800}.btn-yellow.btn-outline:hover,input[type="submit"].btn-yellow.btn-outline:hover{color:rgba(0,0,0,0.9);background:#ffc800}.btn-yellow.btn-outline.btn[disabled],input[type="submit"].btn-yellow.btn-outline.btn[disabled],.btn-yellow.btn-outline.btn-disabled,input[type="submit"].btn-yellow.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,200,0,0.4);border:1px solid rgba(255,200,0,0.3)}.btn-yellow.btn-outline.btn-active,input[type="submit"].btn-yellow.btn-outline.btn-active{background:0;color:rgba(255,200,0,0.6);border:0;box-shadow:0 1px 3px rgba(204,160,0,0.6) inset}.btn-white,input[type="submit"].btn-white{color:rgba(0,0,0,0.9);background:#fff}.btn-white:hover,input[type="submit"].btn-white:hover{color:rgba(0,0,0,0.6);background:#ededed}.btn-white.btn-active,input[type="submit"].btn-white.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.2) inset}.btn-white.btn-active,input[type="submit"].btn-white.btn-active,.btn-white.btn-disabled,input[type="submit"].btn-white.btn-disabled,.btn-white.btn[disabled],input[type="submit"].btn-white.btn[disabled]{color:rgba(0,0,0,0.5);background:#ededed}.btn-white.btn-active:hover,input[type="submit"].btn-white.btn-active:hover,.btn-white.btn-disabled:hover,input[type="submit"].btn-white.btn-disabled:hover,.btn-white.btn[disabled]:hover,input[type="submit"].btn-white.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-white.btn-outline,input[type="submit"].btn-white.btn-outline{background:0;border-color:#fff;color:#fff}.btn-white.btn-outline:hover,input[type="submit"].btn-white.btn-outline:hover{color:rgba(0,0,0,0.9);background:#fff}.btn-white.btn-outline.btn[disabled],input[type="submit"].btn-white.btn-outline.btn[disabled],.btn-white.btn-outline.btn-disabled,input[type="submit"].btn-white.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,255,255,0.4);border:1px solid rgba(255,255,255,0.3)}.btn-white.btn-outline.btn-active,input[type="submit"].btn-white.btn-outline.btn-active{background:0;color:rgba(255,255,255,0.6);border:0;box-shadow:0 1px 3px rgba(237,237,237,0.6) inset}.btn-white:hover,input[type="submit"].btn-white:hover{color:rgba(0,0,0,0.6);background:#ededed}.btn-white.btn-active,input[type="submit"].btn-white.btn-active{box-shadow:0 1px 4px rgba(0,0,0,0.2) inset}.btn-white.btn-active,input[type="submit"].btn-white.btn-active,.btn-white.btn-disabled,input[type="submit"].btn-white.btn-disabled,.btn-white.btn[disabled],input[type="submit"].btn-white.btn[disabled]{color:rgba(0,0,0,0.5);background:#ededed}.btn-white.btn-active:hover,input[type="submit"].btn-white.btn-active:hover,.btn-white.btn-disabled:hover,input[type="submit"].btn-white.btn-disabled:hover,.btn-white.btn[disabled]:hover,input[type="submit"].btn-white.btn[disabled]:hover{color:rgba(0,0,0,0.5)}.btn-white.btn-outline,input[type="submit"].btn-white.btn-outline{background:0;border-color:#fff;color:#fff}.btn-white.btn-outline:hover,input[type="submit"].btn-white.btn-outline:hover{color:rgba(0,0,0,0.9);background:#fff}.btn-white.btn-outline.btn[disabled],input[type="submit"].btn-white.btn-outline.btn[disabled],.btn-white.btn-outline.btn-disabled,input[type="submit"].btn-white.btn-outline.btn-disabled{background:0;box-shadow:none;color:rgba(255,255,255,0.4);border:1px solid rgba(255,255,255,0.3)}.btn-white.btn-outline.btn-active,input[type="submit"].btn-white.btn-outline.btn-active{background:0;color:rgba(255,255,255,0.6);border:0;box-shadow:0 1px 3px rgba(237,237,237,0.6) inset}.btn-white.btn-outline.btn-active{box-shadow:none;border:1px solid rgba(255,255,255,0.3);padding:.48750000000000004em 2.5em}.btn-single,.btn-group{display:inline-block;margin-right:2px;vertical-align:bottom}.btn-single:after,.btn-group:after{content:"";display:table;clear:both}.btn-single:after,.btn-group:after{content:"";display:table;clear:both}.btn-single>.btn,.btn-single>input,.btn-group>.btn,.btn-group>input{float:left;border-radius:0;margin-left:-1px}.btn-single>.btn{border-radius:2px}.btn-group>.btn:first-child{border-radius:2px 0 0 2px}.btn-group>.btn:last-child{border-radius:0 2px 2px 0}.btn-group>.btn.btn-round:first-child,.btn-group>.input-search:first-child{border-radius:15px 0 0 15px}.btn-group>.btn.btn-round:last-child,.btn-group>.input-search:last-child{border-radius:0 15px 15px 0}.tools-alert{padding:12px 15px;background:#f7f8f8;color:#0f0f0f;margin-bottom:1.65em}.tools-message{display:none;position:fixed;z-index:100;top:10px;right:10px;max-width:350px;line-height:1.5;font-size:95%;padding:12px 15px;color:#0f0f0f;background:#e0e3e5}.tools-message ul{margin:0;list-style:none}.tools-message-black,.tools-message-blue,.tools-message-red,.tools-message-green{color:rgba(255,255,255,0.95)}.tools-message-black{background:#0f0f0f}.tools-message-blue{background:#2575ed}.tools-message-red{background:#de2c3b}.tools-message-yellow{background:#ffc800}.tools-message-green{background:#2c9f42}.tools-alert-black{background:#dadada}.tools-alert-blue{background:#d3e3fb}.tools-alert-red{background:#f8d5d8}.tools-alert-yellow{background:#fff4cc}.tools-alert-green{background:#d5ecd9}.label,.badge{background:#e0e3e5;font-size:12.75px;display:inline-block;line-height:1;padding:4px 7px 3px 7px;color:#0f0f0f;text-align:center;font-weight:normal;text-transform:uppercase}.label-outline{background:0;border:1px solid #0f0f0f;padding:3px 6px 2px 6px}.badge{border-radius:15px}.badge-small{font-size:11.25px;padding:3px 5px}.label-black,.label-blue,.label-red,.label-green,.badge-black,.badge-blue,.badge-red,.badge-green{color:#fff}.label-black,.badge-black{background:#0f0f0f}.label-blue,.badge-blue{background:#2575ed}.label-red,.badge-red{background:#de2c3b}.label-green,.badge-green{background:#2c9f42}.label-yellow,.badge-yellow{background:#ffc800}.label-white,.badge-white{background:#fff}.label-black.label-outline,.label-blue.label-outline,.label-red.label-outline,.label-green.label-outline,.label-yellow.label-outline,.label-white.label-outline{background:0;color:#0f0f0f}.label-blue.label-outline{border-color:#2575ed;color:#2575ed}.label-red.label-outline{border-color:#de2c3b;color:#de2c3b}.label-green.label-outline{border-color:#2c9f42;color:#2c9f42}.label-yellow.label-outline{border-color:#ffc800;color:#ffc800}.label-white.label-outline{border-color:#fff;color:#fff}#tools-progress{position:fixed;top:0;left:0;width:100%;z-index:1000000;height:10px}#tools-progress span{display:block;width:100%;height:100%;background-color:#1a52a5;background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.2) 50%,rgba(255,255,255,0.2) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.2) 50%,rgba(255,255,255,0.2) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.2) 50%,rgba(255,255,255,0.2) 75%,transparent 75%,transparent);-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;background-size:40px 40px}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.accordion-title{position:relative;display:block;margin:0;margin-bottom:2px;padding:12px 50px 12px 18px;color:#000;text-decoration:none;font-weight:normal;font-size:.9375em;line-height:1,4em;background:#f7f8f8;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.accordion-title.accordion-title-opened{margin-bottom:0;font-weight:bold;background:#f0f1f2}.accordion-title a,.accordion-title:hover{color:#000;text-decoration:none}.accordion-panel{padding:1.65em;margin-bottom:10px}.accordion-toggle{position:absolute;top:50%;margin-top:-8px;right:20px;padding:0;font-size:0;line-height:1}.accordion-toggle-closed{background:#000;width:1px;height:15px;margin-left:1px}.accordion-toggle-closed:before{position:absolute;top:7px;left:-7px;content:"";width:15px;height:1px;background:#000}.accordion-toggle-opened:before{position:absolute;top:7px;left:-8px;content:"";width:15px;height:1px;background:#000}.filterbox{position:relative}.filterbox input{padding-right:30px}.filterbox span{position:absolute;z-index:2;top:0;right:1px;width:26px;height:100%;cursor:pointer}.filterbox span:after{content:"";display:inline-block;position:relative;top:50%;margin-left:8px;margin-top:-21px;width:0;height:0;vertical-align:middle;border-top:5px solid rgba(0,0,0,0.6);border-right:5px solid transparent;border-left:5px solid transparent}.filterbox-list{z-index:1000;position:absolute;left:0;display:none;margin:0;list-style:none;background:#fff;width:100%;box-shadow:0 1px 3px rgba(0,0,0,0.2);max-height:250px;overflow:auto}.filterbox-list li{padding:4px 10px;color:#000;cursor:pointer}.filterbox-list li:hover{background:#f0f1f2}.filterbox-list li.active{background:#2575ed;color:#fff}.tooltip{position:absolute;z-index:10000;display:inline-block;color:#fff;padding:2px 10px;font-size:12.75px;line-height:1.5em;max-width:250px;background:#0f0f0f}.tooltip-theme-red{background:#de2c3b}.tooltip-theme-blue{background:#2575ed}.tooltip-theme-green{background:#2c9f42}.tooltip-theme-yellow{background:#ffc800}.tooltip-theme-white{background:#fff}.tooltip-theme-yellow,.tooltip-theme-white{color:#000}.dropdown{display:none;position:absolute;z-index:102;top:0;right:0;width:250px;color:#0f0f0f;background:#fff;box-shadow:0 1px 5px rgba(0,0,0,0.3);overflow:auto}.dropdown section{max-height:250px;overflow:auto;padding:20px}.dropdown footer{padding:20px}ul.dropdown{max-height:300px;list-style:none;margin:0;line-height:1.5;font-size:95%;padding:0}ul.dropdown a{display:block;padding:7px 15px;text-decoration:none;color:#0f0f0f}ul.dropdown a:hover{background:#eee}ul.dropdown li.divider{border-bottom:1px solid #e2e2e2}.caret{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent}.caret.caret-up{border-top:0;border-bottom:4px solid}.livesearch-box{position:relative;display:inline-block;width:100%}.livesearch-box input{padding-left:30px}.livesearch-box .close{position:absolute;top:.2em;right:5px;z-index:2;padding:4px 6px;line-height:1;font-size:20px;cursor:pointer;color:#000;text-decoration:none;filter:alpha(opacity=50);-moz-opacity:.5;opacity:.5}.livesearch-box .close:before{content:'\00D7'}.livesearch-box .close:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}.livesearch-box .close:before{content:'\00D7'}.livesearch-box .close:hover{filter:alpha(opacity=100);-moz-opacity:1;opacity:1}.livesearch-icon{position:absolute;top:53%;left:10px;z-index:2}.livesearch-icon:before,.livesearch-icon:after{content:"";position:absolute;top:50%;left:0;margin:-8px 0 0;background:rgba(0,0,0,0.5)}.livesearch-icon:before{width:10px;height:10px;border:2px solid rgba(0,0,0,0.5);background:transparent;border-radius:12px}.livesearch-icon:after{left:10px;width:2px;height:7px;margin-top:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.tools-droparea{position:relative;overflow:hidden;padding:80px 20px;border:3px dashed rgba(0,0,0,0.1)}.tools-droparea.drag-hover{background:rgba(200,222,250,0.75)}.tools-droparea.drag-drop{background:rgba(250,248,200,0.5)}.tools-droparea-placeholder{text-align:center;font-size:11px;color:rgba(0,0,0,0.5)}.autocomplete{position:absolute;z-index:1000;left:0;display:none;margin:0;list-style:none;background:#fff;width:250px;box-shadow:0 1px 3px rgba(0,0,0,0.2);max-height:250px;overflow:auto}.autocomplete a{padding:4px 10px;color:#000;display:block;text-decoration:none}.autocomplete a:hover{background:#f0f1f2}.autocomplete a.active{background:#2575ed;color:#fff}#modal-overlay{position:fixed;top:0;left:0;margin:auto;overflow:auto;width:100%;height:100%;background-color:#000!important;filter:alpha(opacity=30);-moz-opacity:.3;opacity:.3;z-index:100}.modal-blur{-webkit-filter:blur(3px);-moz-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px)}.modal-box{position:fixed;top:0;left:0;bottom:0;right:0;overflow-x:hidden;overflow-y:auto;z-index:101}.modal{position:relative;margin:auto;margin-bottom:20px;padding:0;background:#fff;color:#000;box-shadow:0 1px 70px rgba(0,0,0,0.5)}.modal header{padding:30px 40px 5px 40px;font-size:18px;font-weight:bold}.modal section{padding:30px 40px 50px 40px}.modal footer button{width:100%;border-radius:0}.modal-close{position:absolute;top:8px;right:12px;width:30px;height:30px;text-align:right;color:#bbb;font-size:30px;font-weight:300;cursor:pointer}.modal-close:hover{color:#000}.group:after{content:"";display:table;clear:both}.group:after{content:"";display:table;clear:both}.hide{display:none}.highlight{background-color:#f7f3e2}.big{font-size:18px}.small{font-size:12.75px}.smaller{font-size:11.25px}.nowrap,.nowrap td{white-space:nowrap}.req,.required{font-weight:normal;color:#de2c3b}.error{color:#de2c3b}.success{color:#2c9f42}.text-centered{text-align:center}.text-right{text-align:right}.last{margin-right:0!important}.pause{margin-bottom:.825em!important}.end{margin-bottom:0!important}.normal{font-weight:normal}.light{font-weight:300}.bold{font-weight:bold}.italic{font-style:italic}.left{float:left}.right{float:right}.upper{text-transform:uppercase}.list-flat{margin-left:0;list-style:none}.color-black{color:#0f0f0f}.color-white{color:#fff}.color-gray-10{color:rgba(0,0,0,0.1)}.color-gray-20{color:rgba(0,0,0,0.2)}.color-gray-30{color:rgba(0,0,0,0.3)}.color-gray-40{color:rgba(0,0,0,0.4)}.color-gray-50{color:rgba(0,0,0,0.5)}.color-gray-60{color:rgba(0,0,0,0.6)}.color-gray-70{color:rgba(0,0,0,0.7)}.color-gray-80{color:rgba(0,0,0,0.8)}.color-gray-90{color:rgba(0,0,0,0.9)}.color-white-10{color:rgba(255,255,255,0.1)}.color-white-20{color:rgba(255,255,255,0.2)}.color-white-30{color:rgba(255,255,255,0.3)}.color-white-40{color:rgba(255,255,255,0.4)}.color-white-50{color:rgba(255,255,255,0.5)}.color-white-60{color:rgba(255,255,255,0.6)}.color-white-70{color:rgba(255,255,255,0.7)}.color-white-80{color:rgba(255,255,255,0.8)}.color-white-90{color:rgba(255,255,255,0.9)}.video-wrapper{height:0;padding-bottom:56.25%;position:relative;margin-bottom:1.65em}.video-wrapper iframe,.video-wrapper object,.video-wrapper embed{position:absolute;top:0;left:0;width:100%;height:100%}@media only screen and (max-width:767px){.left,.right{float:none}.hide-on-mobile{display:none}}.str{color:#d14}.kwd{color:#333}.com{color:#998}.typ{color:#458}.lit{color:#458}.pun{color:#888}.opn{color:#333}.clo{color:#333}.tag{color:#367ac3}.atn{color:#51a7c9}.atv{color:#709c1a}.dec{color:#666}.var{color:teal}.fun{color:#900}.linenums ol li{list-style-type:none;counter-increment:list;position:relative}.linenums ol li:after{content:counter(list);position:absolute;left:-3.3em;border-right:1px solid #e5e5e5;padding-right:9px;width:2.45em;text-align:right;color:rgba(0,0,0,0.3);font-size:12px}@media only screen and (max-width:767px){.mobile-width-100{width:100%}.units-row .unit-90,.units-row .unit-80,.units-row .unit-75,.units-row .unit-70,.units-row .unit-66,.units-row .unit-65,.units-row .unit-60,.units-row .unit-50,.units-row .unit-40,.units-row .unit-35,.units-row .unit-33,.units-row .unit-30,.units-row .unit-25,.units-row .unit-20,.units-row .unit-10{width:100%;float:none;margin-left:0;margin-bottom:1.65em}.unit-push-90,.unit-push-80,.unit-push-75,.unit-push-70,.unit-push-66,.unit-push-65,.unit-push-60,.unit-push-50,.unit-push-40,.unit-push-35,.unit-push-33,.unit-push-30,.unit-push-25,.unit-push-20,.unit-push-10{left:0}.units-row .unit-push-right{float:none}.units-mobile-50 .unit-90,.units-mobile-50 .unit-80,.units-mobile-50 .unit-75,.units-mobile-50 .unit-70,.units-mobile-50 .unit-66,.units-mobile-50 .unit-65,.units-mobile-50 .unit-60,.units-mobile-50 .unit-40,.units-mobile-50 .unit-30,.units-mobile-50 .unit-35,.units-mobile-50 .unit-33,.units-mobile-50 .unit-25,.units-mobile-50 .unit-20,.units-mobile-50 .unit-10{float:left;margin-left:3%;width:48.5%}.units-mobile-50 .unit-90:first-child,.units-mobile-50 .unit-80:first-child,.units-mobile-50 .unit-75:first-child,.units-mobile-50 .unit-70:first-child,.units-mobile-50 .unit-66:first-child,.units-mobile-50 .unit-65:first-child,.units-mobile-50 .unit-60:first-child,.units-mobile-50 .unit-40:first-child,.units-mobile-50 .unit-35:first-child,.units-mobile-50 .unit-30:first-child,.units-mobile-50 .unit-33:first-child,.units-mobile-50 .unit-25:first-child,.units-mobile-50 .unit-20:first-child,.units-mobile-50 .unit-10:first-child{margin-left:0}}@media only screen and (max-width:767px){.blocks-2,.blocks-3,.blocks-4,.blocks-5,.blocks-6{margin-left:0;margin-bottom:1.65em}.blocks-2>li,.blocks-3>li,.blocks-4>li,.blocks-5>li,.blocks-6>li{float:none;margin-left:0;width:100%}.blocks-mobile-50>li,.blocks-mobile-33>li{float:left;margin-left:3%}.blocks-mobile-33,.blocks-mobile-50{margin-left:-3%}.blocks-mobile-50>li{width:47%}.blocks-mobile-33>li{width:30.333333333333332%}}@media(min-width:768px) and (max-width:979px){h1{font-size:2.25em;line-height:1.125}h2{font-size:1.5em;line-height:1.25}h3{font-size:1.3125em;line-height:1.25}h4{font-size:1.125em;line-height:1.22222222}h5{font-size:1em}h6{font-size:.75em}}@media(max-width:767px){h1{font-size:2.25em;line-height:1.25}h2{font-size:1.5em;line-height:1.15384615}h3{font-size:1.3125em;line-height:1.13636364}h4{font-size:1.125em;line-height:1.11111111}h5{font-size:1em}h6{font-size:.75em}.lead{font-size:1.2em}ul,ol,ul ul,ol ol,ul ol,ol ul{margin-left:1.65em}blockquote{margin-left:0}}@media only screen and (max-width:767px){.navbar.navbar-left,.navbar.navbar-right,.navbar li,.navbar.navbar-left li,.navbar.navbar-right li{float:none;text-align:left;width:auto}.navbar li,.navbar.navbar-right li{margin-left:0;margin-right:0}.fullwidth ul,.fullwidth li{width:auto}.fullwidth li{display:block}}@media only screen and (max-width:767px){.forms-list label{display:inline-block}}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important;font-size:12pt}.h1,h1{font-size:36pt}.h2,h2{font-size:24pt}.h3,h3{font-size:18pt}.h4,h4{font-size:14pt}.h5,h5{font-size:12pt}.h6,h6{font-size:12pt}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}blockquote{border:0;font-style:italic}img{max-width:100%!important}select{background:#fff!important}} \ No newline at end of file diff --git a/static/css/mine.css b/static/css/mine.css new file mode 100755 index 0000000..ceb4be4 --- /dev/null +++ b/static/css/mine.css @@ -0,0 +1,22 @@ +/* =Typography +-----------------------------------------------------------------------------*/ +body { + font-family: 'Alegreya', 'Hoefler Text', Times, Serif; + font-size: 1.05em; + line-height: 1.6em; + background-color: #faf8f8; +} +h1, h2, h3, h4, h5 { + font-family: 'Alegreya', 'Trebuchet MS', Helvetica, Arial, sans-serif; + font-style: italic; + color: #b24; +} +h2, h3, h4, h5 { + font-weight: normal; + font-style: italic; +} +h2, h3 { + text-transform: lowercase; + font-family: 'Alegreya SC'; + font-style: normal; +} diff --git a/static/css/syntax.css b/static/css/syntax.css new file mode 100755 index 0000000..ddfd3ea --- /dev/null +++ b/static/css/syntax.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ diff --git a/static/files/papers/.htaccess b/static/files/papers/.htaccess new file mode 100755 index 0000000..dc6c28c --- /dev/null +++ b/static/files/papers/.htaccess @@ -0,0 +1,11 @@ +Options -Indexes +AddDescription "Conceptualising Constraint" constraint98.pdf +AddDescription "JAMLS paper" culture-newecon.pdf +AddDescription "Embedded Altruism" embed-alt.pdf +AddDescription "Social Change review" change4.pdf +AddDescription "Irish Social Policy" socpol31.pdf +AddDescription "HIV and Blood Supply" ts.pdf +AddDescription "OECD Wage Growth 1" wage1.pdf +AddDescription "OECD Wage Growth 2" wage2.pdf +AddDescription "Cultural Goods" jpp.pdf +AddDescription "Healy 2000-corrected" EA-corrected-tables.pdf diff --git a/static/javascripts/bigfoot.js b/static/javascripts/bigfoot.js new file mode 100755 index 0000000..7def8b2 --- /dev/null +++ b/static/javascripts/bigfoot.js @@ -0,0 +1,638 @@ +(function() { + (function($) { + return $.bigfoot = function(options) { + var addBreakpoint, baseFontSize, bigfoot, buttonHover, calculatePixelDimension, cleanFootnoteLinks, clickButton, createPopover, defaults, deleteEmptyOrHR, escapeKeypress, footnoteInit, getSetting, makeDefaultCallbacks, popoverStates, positionTooltip, removeBackLinks, removeBreakpoint, removePopovers, replaceWithReferenceAttributes, repositionFeet, roomCalc, settings, touchClick, unhoverFeet, updateSetting, viewportDetails; + bigfoot = void 0; + defaults = { + actionOriginalFN: "hide", + activateCallback: function() {}, + activateOnHover: false, + allowMultipleFN: false, + anchorPattern: /(fn|footnote|note)[:\-_\d]/gi, + anchorParentTagname: 'sup', + breakpoints: {}, + deleteOnUnhover: false, + footnoteParentClass: 'footnote', + footnoteTagname: 'li', + hoverDelay: 250, + numberResetSelector: void 0, + popoverDeleteDelay: 300, + popoverCreateDelay: 100, + positionContent: true, + preventPageScroll: true, + scope: false, + useFootnoteOnlyOnce: true, + contentMarkup: "", + buttonMarkup: "
    " + }; + settings = $.extend(defaults, options); + popoverStates = {}; + footnoteInit = function() { + var $curResetElement, $currentLastFootnoteLink, $footnoteAnchors, $footnoteButton, $lastResetElement, $parent, $relevantFNLink, $relevantFootnote, finalFNLinks, footnoteButton, footnoteButtonSearchQuery, footnoteContent, footnoteIDNum, footnoteLinks, footnoteNum, footnotes, i, _i, _ref, _results; + footnoteButtonSearchQuery = settings.scope ? "" + settings.scope + " a[href*=\"#\"]" : "a[href*=\"#\"]"; + $footnoteAnchors = $(footnoteButtonSearchQuery).filter(function() { + var $this, relAttr; + $this = $(this); + relAttr = $this.attr("rel"); + if (relAttr === "null" || (relAttr == null)) { + relAttr = ""; + } + return ("" + ($this.attr("href")) + relAttr).match(settings.anchorPattern) && $this.closest("[class*=" + settings.footnoteParentClass + "]:not(a):not(" + settings.anchorParentTagname + ")").length < 1; + }); + footnotes = []; + footnoteLinks = []; + finalFNLinks = []; + cleanFootnoteLinks($footnoteAnchors, footnoteLinks); + $(footnoteLinks).each(function() { + var $closestFootnoteEl, relatedFN; + relatedFN = $(this).data("footnote-ref").replace(/[:.+~*\]\[]/g, "\\$&"); + if (settings.useFootnoteOnlyOnce) { + relatedFN = "" + relatedFN + ":not(.footnote-processed)"; + } + $closestFootnoteEl = $(relatedFN).closest(settings.footnoteTagname); + if ($closestFootnoteEl.length > 0) { + footnotes.push($closestFootnoteEl.first().addClass("footnote-processed")); + return finalFNLinks.push(this); + } + }); + $currentLastFootnoteLink = $("[data-footnote-identifier]:last"); + footnoteIDNum = $currentLastFootnoteLink.length < 1 ? 0 : +$currentLastFootnoteLink.data("footnote-identifier"); + _results = []; + for (i = _i = 0, _ref = footnotes.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + footnoteContent = removeBackLinks($(footnotes[i]).html().trim(), $(finalFNLinks[i]).data("footnote-backlink-ref")); + footnoteContent = footnoteContent.replace(/"/g, """).replace(/</g, "<sym;").replace(/>/g, ">sym;"); + footnoteIDNum += 1; + footnoteButton = ""; + $relevantFNLink = $(finalFNLinks[i]); + $relevantFootnote = $(footnotes[i]); + if (settings.numberResetSelector != null) { + $curResetElement = $relevantFNLink.closest(settings.numberResetSelector); + if ($curResetElement.is($lastResetElement)) { + footnoteNum += 1; + } else { + footnoteNum = 1; + } + $lastResetElement = $curResetElement; + } else { + footnoteNum = footnoteIDNum; + } + if (footnoteContent.indexOf("<") !== 0) { + footnoteContent = "

    " + footnoteContent + "

    "; + } + footnoteButton = settings.buttonMarkup.replace(/\{\{FOOTNOTENUM\}\}/g, footnoteNum).replace(/\{\{FOOTNOTEID\}\}/g, footnoteIDNum).replace(/\{\{FOOTNOTECONTENT\}\}/g, footnoteContent); + footnoteButton = replaceWithReferenceAttributes(footnoteButton, "SUP", $relevantFNLink); + footnoteButton = replaceWithReferenceAttributes(footnoteButton, "FN", $relevantFootnote); + $footnoteButton = $(footnoteButton).insertBefore($relevantFNLink); + $parent = $relevantFootnote.parent(); + switch (settings.actionOriginalFN.toLowerCase()) { + case "hide": + $relevantFNLink.addClass("footnote-print-only"); + $relevantFootnote.addClass("footnote-print-only"); + _results.push(deleteEmptyOrHR($parent)); + break; + case "delete": + $relevantFNLink.remove(); + $relevantFootnote.remove(); + _results.push(deleteEmptyOrHR($parent)); + break; + default: + _results.push($relevantFNLink.addClass("footnote-print-only")); + } + } + return _results; + }; + cleanFootnoteLinks = function($footnoteAnchors, footnoteLinks) { + var $parent, $supChild, linkHREF, linkID; + if (footnoteLinks == null) { + footnoteLinks = []; + } + $parent = void 0; + $supChild = void 0; + linkHREF = void 0; + linkID = void 0; + $footnoteAnchors.each(function() { + var $child, $this; + $this = $(this); + linkHREF = "#" + ($this.attr("href")).split("#")[1]; + $parent = $this.closest(settings.anchorParentTagname); + $child = $this.find(settings.anchorParentTagname); + if ($parent.length > 0) { + linkID = ($parent.attr("id") || "") + ($this.attr("id") || ""); + return footnoteLinks.push($parent.attr({ + "data-footnote-backlink-ref": linkID, + "data-footnote-ref": linkHREF + })); + } else if ($child.length > 0) { + linkID = ($child.attr("id") || "") + ($this.attr("id") || ""); + return footnoteLinks.push($this.attr({ + "data-footnote-backlink-ref": linkID, + "data-footnote-ref": linkHREF + })); + } else { + linkID = $this.attr("id") || ""; + return footnoteLinks.push($this.attr({ + "data-footnote-backlink-ref": linkID, + "data-footnote-ref": linkHREF + })); + } + }); + }; + deleteEmptyOrHR = function($el) { + var $parent; + $parent = void 0; + if ($el.is(":empty") || $el.children(":not(.footnote-print-only)").length === 0) { + $parent = $el.parent(); + if (settings.actionOriginalFN.toLowerCase() === "delete") { + $el.remove(); + } else { + $el.addClass("footnote-print-only"); + } + return deleteEmptyOrHR($parent); + } else if ($el.children(":not(.footnote-print-only)").length === $el.children("hr:not(.footnote-print-only)").length) { + $parent = $el.parent(); + if (settings.actionOriginalFN.toLowerCase() === "delete") { + $el.remove(); + } else { + $el.children("hr").addClass("footnote-print-only"); + $el.addClass("footnote-print-only"); + } + return deleteEmptyOrHR($parent); + } + }; + removeBackLinks = function(footnoteHTML, backlinkID) { + var regex; + if (backlinkID.indexOf(' ') >= 0) { + backlinkID = backlinkID.trim().replace(/\s+/g, "|").replace(/(.*)/g, "($1)"); + } + regex = new RegExp("(\\s| )*<\\s*a[^#<]*#" + backlinkID + "[^>]*>(.*?)<\\s*/\\s*a>", "g"); + return footnoteHTML.replace(regex, "").replace("[]", ""); + }; + replaceWithReferenceAttributes = function(string, referenceKeyword, $referenceElement) { + var refMatches, refRegex, refReplaceRegex, refReplaceText; + refRegex = new RegExp("\\{\\{" + referenceKeyword + ":([^\\}]*)\\}\\}", "g"); + refMatches = void 0; + refReplaceText = void 0; + refReplaceRegex = void 0; + refMatches = refRegex.exec(string); + while (refMatches) { + if (refMatches[1]) { + refReplaceText = $referenceElement.attr(refMatches[1]) || ""; + string = string.replace("{{" + referenceKeyword + ":" + refMatches[1] + "}}", refReplaceText); + } + refMatches = refRegex.exec(string); + } + return string; + }; + buttonHover = function(event) { + var $buttonHovered, dataIdentifier, otherPopoverSelector; + if (settings.activateOnHover) { + $buttonHovered = $(event.target).closest(".bigfoot-footnote__button"); + dataIdentifier = "[data-footnote-identifier=\"" + ($buttonHovered.attr("data-footnote-identifier")) + "\"]"; + if ($buttonHovered.hasClass("is-active")) { + return; + } + $buttonHovered.addClass("is-hover-instantiated"); + if (!settings.allowMultipleFN) { + otherPopoverSelector = ".bigfoot-footnote:not(" + dataIdentifier + ")"; + removePopovers(otherPopoverSelector); + } + createPopover(".bigfoot-footnote__button" + dataIdentifier).addClass("is-hover-instantiated"); + } + }; + touchClick = function(event) { + var $nearButton, $nearFootnote, $target; + $target = $(event.target); + $nearButton = $target.closest(".bigfoot-footnote__button"); + $nearFootnote = $target.closest(".bigfoot-footnote"); + if ($nearButton.length > 0) { + event.preventDefault(); + clickButton($nearButton); + } else if ($nearFootnote.length < 1) { + if ($(".bigfoot-footnote").length > 0) { + removePopovers(); + } + } + }; + clickButton = function($button) { + var dataIdentifier; + $button.blur(); + dataIdentifier = "data-footnote-identifier=\"" + ($button.attr("data-footnote-identifier")) + "\""; + if ($button.hasClass("changing")) { + return; + } else if (!$button.hasClass("is-active")) { + $button.addClass("changing"); + setTimeout((function() { + return $button.removeClass("changing"); + }), settings.popoverCreateDelay); + createPopover(".bigfoot-footnote__button[" + dataIdentifier + "]"); + $button.addClass("is-click-instantiated"); + if (!settings.allowMultipleFN) { + removePopovers(".bigfoot-footnote:not([" + dataIdentifier + "])"); + } + } else { + if (!settings.allowMultipleFN) { + removePopovers(); + } else { + removePopovers(".bigfoot-footnote[" + dataIdentifier + "]"); + } + } + }; + createPopover = function(selector) { + var $buttons, $popoversCreated; + $buttons = void 0; + if (typeof selector !== "string" && settings.allowMultipleFN) { + $buttons = selector; + } else if (typeof selector !== "string") { + $buttons = selector.first(); + } else if (settings.allowMultipleFN) { + $buttons = $(selector).closest(".bigfoot-footnote__button"); + } else { + $buttons = $(selector + ":first").closest(".bigfoot-footnote__button"); + } + $popoversCreated = $(); + $buttons.each(function() { + var $content, $contentContainer, $this, content; + $this = $(this); + content = void 0; + try { + content = settings.contentMarkup.replace(/\{\{FOOTNOTENUM\}\}/g, $this.attr("data-footnote-number")).replace(/\{\{FOOTNOTEID\}\}/g, $this.attr("data-footnote-identifier")).replace(/\{\{FOOTNOTECONTENT\}\}/g, $this.attr("data-bigfoot-footnote")).replace(/\>sym\;/g, ">").replace(/\<sym\;/g, "<"); + return content = replaceWithReferenceAttributes(content, "BUTTON", $this); + } finally { + $content = $(content); + try { + settings.activateCallback($content, $this); + } catch (_error) {} + $content.insertAfter($buttons); + popoverStates[$this.attr("data-footnote-identifier")] = "init"; + $content.attr("bigfoot-max-width", calculatePixelDimension($content.css("max-width"), $content)); + $content.css("max-width", 10000); + $contentContainer = $content.find(".bigfoot-footnote__content"); + $content.attr("data-bigfoot-max-height", calculatePixelDimension($contentContainer.css("max-height"), $contentContainer)); + repositionFeet(); + $this.addClass("is-active"); + $content.find(".bigfoot-footnote__content").bindScrollHandler(); + $popoversCreated = $popoversCreated.add($content); + } + }); + setTimeout((function() { + return $popoversCreated.addClass("is-active"); + }), settings.popoverCreateDelay); + return $popoversCreated; + }; + baseFontSize = function() { + var el, size; + el = document.createElement("div"); + el.style.cssText = "display:inline-block;padding:0;line-height:1;position:absolute;visibility:hidden;font-size:1em;"; + el.appendChild(document.createElement("M")); + document.body.appendChild(el); + size = el.offsetHeight; + document.body.removeChild(el); + return size; + }; + calculatePixelDimension = function(dim, $el) { + if (dim === "none") { + dim = 10000; + } else if (dim.indexOf("rem") >= 0) { + dim = parseFloat(dim) * baseFontSize(); + } else if (dim.indexOf("em") >= 0) { + dim = parseFloat(dim) * parseFloat($el.css("font-size")); + } else if (dim.indexOf("px") >= 0) { + dim = parseFloat(dim); + if (dim <= 60) { + dim = dim / parseFloat($el.parent().css("width")); + } + } else if (dim.indexOf("%") >= 0) { + dim = parseFloat(dim) / 100; + } + return dim; + }; + $.fn.bindScrollHandler = function() { + if (!settings.preventPageScroll) { + return $(this); + } + $(this).on("DOMMouseScroll mousewheel", function(event) { + var $popover, $this, delta, height, prevent, scrollHeight, scrollTop, up; + $this = $(this); + scrollTop = $this.scrollTop(); + scrollHeight = $this[0].scrollHeight; + height = parseInt($this.css("height")); + $popover = $this.closest(".bigfoot-footnote"); + if ($this.scrollTop() > 0 && $this.scrollTop() < 10) { + $popover.addClass("is-scrollable"); + } + if (!$popover.hasClass("is-scrollable")) { + return; + } + delta = event.type === "DOMMouseScroll" ? event.originalEvent.detail * -40 : event.originalEvent.wheelDelta; + up = delta > 0; + prevent = function() { + event.stopPropagation(); + event.preventDefault(); + event.returnValue = false; + return false; + }; + if (!up && -delta > scrollHeight - height - scrollTop) { + $this.scrollTop(scrollHeight); + $popover.addClass("is-fully-scrolled"); + return prevent(); + } else if (up && delta > scrollTop) { + $this.scrollTop(0); + $popover.removeClass("is-fully-scrolled"); + return prevent(); + } else { + return $popover.removeClass("is-fully-scrolled"); + } + }); + return $(this); + }; + unhoverFeet = function(e) { + if (settings.deleteOnUnhover && settings.activateOnHover) { + return setTimeout((function() { + var $target; + $target = $(e.target).closest(".bigfoot-footnote, .bigfoot-footnote__button"); + if ($(".bigfoot-footnote__button:hover, .bigfoot-footnote:hover").length < 1) { + return removePopovers(); + } + }), settings.hoverDelay); + } + }; + escapeKeypress = function(event) { + if (event.keyCode === 27) { + return removePopovers(); + } + }; + removePopovers = function(footnotes, timeout) { + var $buttonsClosed, $linkedButton, $this, footnoteID; + if (footnotes == null) { + footnotes = ".bigfoot-footnote"; + } + if (timeout == null) { + timeout = settings.popoverDeleteDelay; + } + $buttonsClosed = $(); + footnoteID = void 0; + $linkedButton = void 0; + $this = void 0; + $(footnotes).each(function() { + $this = $(this); + footnoteID = $this.attr("data-footnote-identifier"); + $linkedButton = $(".bigfoot-footnote__button[data-footnote-identifier=\"" + footnoteID + "\"]"); + if (!$linkedButton.hasClass("changing")) { + $buttonsClosed = $buttonsClosed.add($linkedButton); + $linkedButton.removeClass("is-active is-hover-instantiated is-click-instantiated").addClass("changing"); + $this.removeClass("is-active").addClass("disapearing"); + return setTimeout((function() { + $this.remove(); + delete popoverStates[footnoteID]; + return $linkedButton.removeClass("changing"); + }), timeout); + } + }); + return $buttonsClosed; + }; + repositionFeet = function(e) { + var type; + if (settings.positionContent) { + type = e ? e.type : "resize"; + $(".bigfoot-footnote").each(function() { + var $button, $contentWrapper, $mainWrap, $this, dataIdentifier, identifier, lastState, marginSize, maxHeightInCSS, maxHeightOnScreen, maxWidth, maxWidthInCSS, positionOnTop, relativeToWidth, roomLeft, totalHeight; + $this = $(this); + identifier = $this.attr("data-footnote-identifier"); + dataIdentifier = "data-footnote-identifier=\"" + identifier + "\""; + $contentWrapper = $this.find(".bigfoot-footnote__content"); + $button = $this.siblings(".bigfoot-footnote__button"); + roomLeft = roomCalc($button); + marginSize = parseFloat($this.css("margin-top")); + maxHeightInCSS = +($this.attr("data-bigfoot-max-height")); + totalHeight = 2 * marginSize + $this.outerHeight(); + maxHeightOnScreen = 10000; + positionOnTop = roomLeft.bottomRoom < totalHeight && roomLeft.topRoom > roomLeft.bottomRoom; + lastState = popoverStates[identifier]; + if (positionOnTop) { + if (lastState !== "top") { + popoverStates[identifier] = "top"; + $this.addClass("is-positioned-top").removeClass("is-positioned-bottom"); + $this.css("transform-origin", (roomLeft.leftRelative * 100) + "% 100%"); + } + maxHeightOnScreen = roomLeft.topRoom - marginSize - 15; + } else { + if (lastState !== "bottom" || lastState === "init") { + popoverStates[identifier] = "bottom"; + $this.removeClass("is-positioned-top").addClass("is-positioned-bottom"); + $this.css("transform-origin", (roomLeft.leftRelative * 100) + "% 0%"); + } + maxHeightOnScreen = roomLeft.bottomRoom - marginSize - 15; + } + $this.find(".bigfoot-footnote__content").css({ + "max-height": Math.min(maxHeightOnScreen, maxHeightInCSS) + "px" + }); + if (type === "resize") { + maxWidthInCSS = parseFloat($this.attr("bigfoot-max-width")); + $mainWrap = $this.find(".bigfoot-footnote__wrapper"); + maxWidth = maxWidthInCSS; + if (maxWidthInCSS <= 1) { + relativeToWidth = (function() { + var jq, userSpecifiedRelativeElWidth; + userSpecifiedRelativeElWidth = 10000; + if (settings.maxWidthRelativeTo) { + jq = $(settings.maxWidthRelativeTo); + if (jq.length > 0) { + userSpecifiedRelativeElWidth = jq.outerWidth(); + } + } + return Math.min(window.innerWidth, userSpecifiedRelativeElWidth); + })(); + maxWidth = relativeToWidth * maxWidthInCSS; + } + maxWidth = Math.min(maxWidth, $this.find(".bigfoot-footnote__content").outerWidth() + 1); + $mainWrap.css("max-width", maxWidth + "px"); + $this.css({ + left: (-roomLeft.leftRelative * maxWidth + parseFloat($button.css("margin-left")) + $button.outerWidth() / 2) + "px" + }); + positionTooltip($this, roomLeft.leftRelative); + } + if (parseInt($this.outerHeight()) < $this.find(".bigfoot-footnote__content")[0].scrollHeight) { + return $this.addClass("is-scrollable"); + } + }); + } + }; + positionTooltip = function($popover, leftRelative) { + var $tooltip; + if (leftRelative == null) { + leftRelative = 0.5; + } + $tooltip = $popover.find(".bigfoot-footnote__tooltip"); + if ($tooltip.length > 0) { + $tooltip.css("left", "" + (leftRelative * 100) + "%"); + } + }; + roomCalc = function($el) { + var elHeight, elLeftMargin, elWidth, leftRoom, topRoom, w; + elLeftMargin = parseFloat($el.css("margin-left")); + elWidth = parseFloat($el.outerWidth()) - elLeftMargin; + elHeight = parseFloat($el.outerHeight()); + w = viewportDetails(); + topRoom = $el.offset().top - w.scrollY + elHeight / 2; + leftRoom = $el.offset().left - w.scrollX + elWidth / 2; + return { + topRoom: topRoom, + bottomRoom: w.height - topRoom, + leftRoom: leftRoom, + rightRoom: w.width - leftRoom, + leftRelative: leftRoom / w.width, + topRelative: topRoom / w.height + }; + }; + viewportDetails = function() { + var $window; + $window = $(window); + return { + width: window.innerWidth, + height: window.innerHeight, + scrollX: $window.scrollLeft(), + scrollY: $window.scrollTop() + }; + }; + addBreakpoint = function(size, trueCallback, falseCallback, deleteDelay, removeOpen) { + var falseDefaultPositionSetting, minMax, mqListener, mql, query, s, trueDefaultPositionSetting; + if (deleteDelay == null) { + deleteDelay = settings.popoverDeleteDelay; + } + if (removeOpen == null) { + removeOpen = true; + } + mql = void 0; + minMax = void 0; + s = void 0; + if (typeof size === "string") { + s = size.toLowerCase() === "iphone" ? "<320px" : size.toLowerCase() === "ipad" ? "<768px" : size; + minMax = s.charAt(0) === ">" ? "min" : s.charAt(0) === "<" ? "max" : null; + query = minMax ? "(" + minMax + "-width: " + (s.substring(1)) + ")" : s; + mql = window.matchMedia(query); + } else { + mql = size; + } + if (mql.media && mql.media === "invalid") { + return { + added: false, + mq: mql, + listener: null + }; + } + trueDefaultPositionSetting = minMax === "min"; + falseDefaultPositionSetting = minMax === "max"; + trueCallback = trueCallback || makeDefaultCallbacks(removeOpen, deleteDelay, trueDefaultPositionSetting, function($popover) { + return $popover.addClass("is-bottom-fixed"); + }); + falseCallback = falseCallback || makeDefaultCallbacks(removeOpen, deleteDelay, falseDefaultPositionSetting, function() {}); + mqListener = function(mq) { + if (mq.matches) { + trueCallback(removeOpen, bigfoot); + } else { + falseCallback(removeOpen, bigfoot); + } + }; + mql.addListener(mqListener); + mqListener(mql); + settings.breakpoints[size] = { + added: true, + mq: mql, + listener: mqListener + }; + return settings.breakpoints[size]; + }; + makeDefaultCallbacks = function(removeOpen, deleteDelay, position, callback) { + return function(removeOpen, bigfoot) { + var $closedPopovers; + $closedPopovers = void 0; + if (removeOpen) { + $closedPopovers = bigfoot.close(); + bigfoot.updateSetting("activateCallback", callback); + } + return setTimeout((function() { + bigfoot.updateSetting("positionContent", position); + if (removeOpen) { + return bigfoot.activate($closedPopovers); + } + }), deleteDelay); + }; + }; + removeBreakpoint = function(target, callback) { + var b, breakpoint, mq, mqFound; + mq = null; + b = void 0; + mqFound = false; + if (typeof target === "string") { + mqFound = settings.breakpoints[target] !== undefined; + } else { + for (b in settings.breakpoints) { + if (settings.breakpoints.hasOwnProperty(b) && settings.breakpoints[b].mq === target) { + mqFound = true; + } + } + } + if (mqFound) { + breakpoint = settings.breakpoints[b || target]; + if (callback) { + callback({ + matches: false + }); + } else { + breakpoint.listener({ + matches: false + }); + } + breakpoint.mq.removeListener(breakpoint.listener); + delete settings.breakpoints[b || target]; + } + return mqFound; + }; + updateSetting = function(newSettings, value) { + var oldValue, prop; + oldValue = void 0; + if (typeof newSettings === "string") { + oldValue = settings[newSettings]; + settings[newSettings] = value; + } else { + oldValue = {}; + for (prop in newSettings) { + if (newSettings.hasOwnProperty(prop)) { + oldValue[prop] = settings[prop]; + settings[prop] = newSettings[prop]; + } + } + } + return oldValue; + }; + getSetting = function(setting) { + return settings[setting]; + }; + $(document).ready(function() { + footnoteInit(); + $(document).on("mouseenter", ".bigfoot-footnote__button", buttonHover); + $(document).on("touchend click", touchClick); + $(document).on("mouseout", ".is-hover-instantiated", unhoverFeet); + $(document).on("keyup", escapeKeypress); + $(window).on("scroll resize", repositionFeet); + return $(document).on("gestureend", function() { + return repositionFeet(); + }); + }); + bigfoot = { + removePopovers: removePopovers, + close: removePopovers, + createPopover: createPopover, + activate: createPopover, + repositionFeet: repositionFeet, + reposition: repositionFeet, + addBreakpoint: addBreakpoint, + removeBreakpoint: removeBreakpoint, + getSetting: getSetting, + updateSetting: updateSetting + }; + return bigfoot; + }; + })(jQuery); + +}).call(this); diff --git a/static/javascripts/bigfoot.min.js b/static/javascripts/bigfoot.min.js new file mode 100755 index 0000000..7b03600 --- /dev/null +++ b/static/javascripts/bigfoot.min.js @@ -0,0 +1 @@ +(function(){!function(a){return a.bigfoot=function(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;return e=void 0,k={actionOriginalFN:"hide",activateCallback:function(){},activateOnHover:!1,allowMultipleFN:!1,anchorPattern:/(fn|footnote|note)[:\-_\d]/gi,anchorParentTagname:"sup",breakpoints:{},deleteOnUnhover:!1,footnoteParentClass:"footnote",footnoteTagname:"li",hoverDelay:250,numberResetSelector:void 0,popoverDeleteDelay:300,popoverCreateDelay:100,positionContent:!0,preventPageScroll:!0,scope:!1,useFootnoteOnlyOnce:!0,contentMarkup:'',buttonMarkup:'
    '},y=a.extend(k,b),q={},n=function(){var b,c,d,e,f,g,i,j,k,m,n,o,p,q,r,t,u,w,x,z;for(n=y.scope?""+y.scope+' a[href*="#"]':'a[href*="#"]',d=a(n).filter(function(){var b,c;return b=a(this),c=b.attr("rel"),("null"===c||null==c)&&(c=""),(""+b.attr("href")+c).match(y.anchorPattern)&&b.closest("[class*="+y.footnoteParentClass+"]:not(a):not("+y.anchorParentTagname+")").length<1}),t=[],q=[],k=[],h(d,q),a(q).each(function(){var b,c;return c=a(this).data("footnote-ref").replace(/[:.+~*\]\[]/g,"\\$&"),y.useFootnoteOnlyOnce&&(c=""+c+":not(.footnote-processed)"),b=a(c).closest(y.footnoteTagname),b.length>0?(t.push(b.first().addClass("footnote-processed")),k.push(this)):void 0}),c=a("[data-footnote-identifier]:last"),p=c.length<1?0:+c.data("footnote-identifier"),z=[],u=w=0,x=t.length;x>=0?x>w:w>x;u=x>=0?++w:--w)switch(o=s(a(t[u]).html().trim(),a(k[u]).data("footnote-backlink-ref")),o=o.replace(/"/g,""").replace(/</g,"<sym;").replace(/>/g,">sym;"),p+=1,m="",i=a(k[u]),j=a(t[u]),null!=y.numberResetSelector?(b=i.closest(y.numberResetSelector),b.is(f)?r+=1:r=1,f=b):r=p,0!==o.indexOf("<")&&(o="

    "+o+"

    "),m=y.buttonMarkup.replace(/\{\{FOOTNOTENUM\}\}/g,r).replace(/\{\{FOOTNOTEID\}\}/g,p).replace(/\{\{FOOTNOTECONTENT\}\}/g,o),m=v(m,"SUP",i),m=v(m,"FN",j),e=a(m).insertBefore(i),g=j.parent(),y.actionOriginalFN.toLowerCase()){case"hide":i.addClass("footnote-print-only"),j.addClass("footnote-print-only"),z.push(l(g));break;case"delete":i.remove(),j.remove(),z.push(l(g));break;default:z.push(i.addClass("footnote-print-only"))}return z},h=function(b,c){var d,e,f,g;null==c&&(c=[]),d=void 0,e=void 0,f=void 0,g=void 0,b.each(function(){var b,e;return e=a(this),f="#"+e.attr("href").split("#")[1],d=e.closest(y.anchorParentTagname),b=e.find(y.anchorParentTagname),d.length>0?(g=(d.attr("id")||"")+(e.attr("id")||""),c.push(d.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f}))):b.length>0?(g=(b.attr("id")||"")+(e.attr("id")||""),c.push(e.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f}))):(g=e.attr("id")||"",c.push(e.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f})))})},l=function(a){var b;return b=void 0,a.is(":empty")||0===a.children(":not(.footnote-print-only)").length?(b=a.parent(),"delete"===y.actionOriginalFN.toLowerCase()?a.remove():a.addClass("footnote-print-only"),l(b)):a.children(":not(.footnote-print-only)").length===a.children("hr:not(.footnote-print-only)").length?(b=a.parent(),"delete"===y.actionOriginalFN.toLowerCase()?a.remove():(a.children("hr").addClass("footnote-print-only"),a.addClass("footnote-print-only")),l(b)):void 0},s=function(a,b){var c;return b.indexOf(" ")>=0&&(b=b.trim().replace(/\s+/g,"|").replace(/(.*)/g,"($1)")),c=new RegExp("(\\s| )*<\\s*a[^#<]*#"+b+"[^>]*>(.*?)<\\s*/\\s*a>","g"),a.replace(c,"").replace("[]","")},v=function(a,b,c){var d,e,f,g;for(e=new RegExp("\\{\\{"+b+":([^\\}]*)\\}\\}","g"),d=void 0,g=void 0,f=void 0,d=e.exec(a);d;)d[1]&&(g=c.attr(d[1])||"",a=a.replace("{{"+b+":"+d[1]+"}}",g)),d=e.exec(a);return a},f=function(b){var c,d,e;if(y.activateOnHover){if(c=a(b.target).closest(".bigfoot-footnote__button"),d='[data-footnote-identifier="'+c.attr("data-footnote-identifier")+'"]',c.hasClass("is-active"))return;c.addClass("is-hover-instantiated"),y.allowMultipleFN||(e=".bigfoot-footnote:not("+d+")",u(e)),j(".bigfoot-footnote__button"+d).addClass("is-hover-instantiated")}},z=function(b){var c,d,e;e=a(b.target),c=e.closest(".bigfoot-footnote__button"),d=e.closest(".bigfoot-footnote"),c.length>0?(b.preventDefault(),i(c)):d.length<1&&a(".bigfoot-footnote").length>0&&u()},i=function(a){var b;a.blur(),b='data-footnote-identifier="'+a.attr("data-footnote-identifier")+'"',a.hasClass("changing")||(a.hasClass("is-active")?y.allowMultipleFN?u(".bigfoot-footnote["+b+"]"):u():(a.addClass("changing"),setTimeout(function(){return a.removeClass("changing")},y.popoverCreateDelay),j(".bigfoot-footnote__button["+b+"]"),a.addClass("is-click-instantiated"),y.allowMultipleFN||u(".bigfoot-footnote:not(["+b+"])")))},j=function(b){var c,d;return c=void 0,c="string"!=typeof b&&y.allowMultipleFN?b:"string"!=typeof b?b.first():y.allowMultipleFN?a(b).closest(".bigfoot-footnote__button"):a(b+":first").closest(".bigfoot-footnote__button"),d=a(),c.each(function(){var b,e,f,h;f=a(this),h=void 0;try{return h=y.contentMarkup.replace(/\{\{FOOTNOTENUM\}\}/g,f.attr("data-footnote-number")).replace(/\{\{FOOTNOTEID\}\}/g,f.attr("data-footnote-identifier")).replace(/\{\{FOOTNOTECONTENT\}\}/g,f.attr("data-bigfoot-footnote")).replace(/\>sym\;/g,">").replace(/\<sym\;/g,"<"),h=v(h,"BUTTON",f)}finally{b=a(h);try{y.activateCallback(b,f)}catch(i){}b.insertAfter(c),q[f.attr("data-footnote-identifier")]="init",b.attr("bigfoot-max-width",g(b.css("max-width"),b)),b.css("max-width",1e4),e=b.find(".bigfoot-footnote__content"),b.attr("data-bigfoot-max-height",g(e.css("max-height"),e)),w(),f.addClass("is-active"),b.find(".bigfoot-footnote__content").bindScrollHandler(),d=d.add(b)}}),setTimeout(function(){return d.addClass("is-active")},y.popoverCreateDelay),d},d=function(){var a,b;return a=document.createElement("div"),a.style.cssText="display:inline-block;padding:0;line-height:1;position:absolute;visibility:hidden;font-size:1em;",a.appendChild(document.createElement("M")),document.body.appendChild(a),b=a.offsetHeight,document.body.removeChild(a),b},g=function(a,b){return"none"===a?a=1e4:a.indexOf("rem")>=0?a=parseFloat(a)*d():a.indexOf("em")>=0?a=parseFloat(a)*parseFloat(b.css("font-size")):a.indexOf("px")>=0?(a=parseFloat(a),60>=a&&(a/=parseFloat(b.parent().css("width")))):a.indexOf("%")>=0&&(a=parseFloat(a)/100),a},a.fn.bindScrollHandler=function(){return y.preventPageScroll?(a(this).on("DOMMouseScroll mousewheel",function(b){var c,d,e,f,g,h,i,j;return d=a(this),i=d.scrollTop(),h=d[0].scrollHeight,f=parseInt(d.css("height")),c=d.closest(".bigfoot-footnote"),d.scrollTop()>0&&d.scrollTop()<10&&c.addClass("is-scrollable"),c.hasClass("is-scrollable")?(e="DOMMouseScroll"===b.type?-40*b.originalEvent.detail:b.originalEvent.wheelDelta,j=e>0,g=function(){return b.stopPropagation(),b.preventDefault(),b.returnValue=!1,!1},!j&&-e>h-f-i?(d.scrollTop(h),c.addClass("is-fully-scrolled"),g()):j&&e>i?(d.scrollTop(0),c.removeClass("is-fully-scrolled"),g()):c.removeClass("is-fully-scrolled")):void 0}),a(this)):a(this)},A=function(b){return y.deleteOnUnhover&&y.activateOnHover?setTimeout(function(){var c;return c=a(b.target).closest(".bigfoot-footnote, .bigfoot-footnote__button"),a(".bigfoot-footnote__button:hover, .bigfoot-footnote:hover").length<1?u():void 0},y.hoverDelay):void 0},m=function(a){return 27===a.keyCode?u():void 0},u=function(b,c){var d,e,f,g;return null==b&&(b=".bigfoot-footnote"),null==c&&(c=y.popoverDeleteDelay),d=a(),g=void 0,e=void 0,f=void 0,a(b).each(function(){return f=a(this),g=f.attr("data-footnote-identifier"),e=a('.bigfoot-footnote__button[data-footnote-identifier="'+g+'"]'),e.hasClass("changing")?void 0:(d=d.add(e),e.removeClass("is-active is-hover-instantiated is-click-instantiated").addClass("changing"),f.removeClass("is-active").addClass("disapearing"),setTimeout(function(){return f.remove(),delete q[g],e.removeClass("changing")},c))}),d},w=function(b){var c;y.positionContent&&(c=b?b.type:"resize",a(".bigfoot-footnote").each(function(){var b,d,e,f,g,h,i,j,k,l,m,n,o,p,s,t;return f=a(this),h=f.attr("data-footnote-identifier"),g='data-footnote-identifier="'+h+'"',d=f.find(".bigfoot-footnote__content"),b=f.siblings(".bigfoot-footnote__button"),s=x(b),j=parseFloat(f.css("margin-top")),k=+f.attr("data-bigfoot-max-height"),t=2*j+f.outerHeight(),l=1e4,o=s.bottomRooms.bottomRoom,i=q[h],o?("top"!==i&&(q[h]="top",f.addClass("is-positioned-top").removeClass("is-positioned-bottom"),f.css("transform-origin",100*s.leftRelative+"% 100%")),l=s.topRoom-j-15):(("bottom"!==i||"init"===i)&&(q[h]="bottom",f.removeClass("is-positioned-top").addClass("is-positioned-bottom"),f.css("transform-origin",100*s.leftRelative+"% 0%")),l=s.bottomRoom-j-15),f.find(".bigfoot-footnote__content").css({"max-height":Math.min(l,k)+"px"}),"resize"===c&&(n=parseFloat(f.attr("bigfoot-max-width")),e=f.find(".bigfoot-footnote__wrapper"),m=n,1>=n&&(p=function(){var b,c;return c=1e4,y.maxWidthRelativeTo&&(b=a(y.maxWidthRelativeTo),b.length>0&&(c=b.outerWidth())),Math.min(window.innerWidth,c)}(),m=p*n),m=Math.min(m,f.find(".bigfoot-footnote__content").outerWidth()+1),e.css("max-width",m+"px"),f.css({left:-s.leftRelative*m+parseFloat(b.css("margin-left"))+b.outerWidth()/2+"px"}),r(f,s.leftRelative)),parseInt(f.outerHeight())0&&c.css("left",""+100*b+"%")},x=function(a){var b,c,d,e,f,g;return c=parseFloat(a.css("margin-left")),d=parseFloat(a.outerWidth())-c,b=parseFloat(a.outerHeight()),g=C(),f=a.offset().top-g.scrollY+b/2,e=a.offset().left-g.scrollX+d/2,{topRoom:f,bottomRoom:g.height-f,leftRoom:e,rightRoom:g.width-e,leftRelative:e/g.width,topRelative:f/g.height}},C=function(){var b;return b=a(window),{width:window.innerWidth,height:window.innerHeight,scrollX:b.scrollLeft(),scrollY:b.scrollTop()}},c=function(a,b,c,d,f){var g,h,i,j,k,l,m;return null==d&&(d=y.popoverDeleteDelay),null==f&&(f=!0),j=void 0,h=void 0,l=void 0,"string"==typeof a?(l="iphone"===a.toLowerCase()?"<320px":"ipad"===a.toLowerCase()?"<768px":a,h=">"===l.charAt(0)?"min":"<"===l.charAt(0)?"max":null,k=h?"("+h+"-width: "+l.substring(1)+")":l,j=window.matchMedia(k)):j=a,j.media&&"invalid"===j.media?{added:!1,mq:j,listener:null}:(m="min"===h,g="max"===h,b=b||p(f,d,m,function(a){return a.addClass("is-bottom-fixed")}),c=c||p(f,d,g,function(){}),i=function(a){a.matches?b(f,e):c(f,e)},j.addListener(i),i(j),y.breakpoints[a]={added:!0,mq:j,listener:i},y.breakpoints[a])},p=function(a,b,c,d){return function(a,e){var f;return f=void 0,a&&(f=e.close(),e.updateSetting("activateCallback",d)),setTimeout(function(){return e.updateSetting("positionContent",c),a?e.activate(f):void 0},b)}},t=function(a,b){var c,d,e,f;if(e=null,c=void 0,f=!1,"string"==typeof a)f=void 0!==y.breakpoints[a];else for(c in y.breakpoints)y.breakpoints.hasOwnProperty(c)&&y.breakpoints[c].mq===a&&(f=!0);return f&&(d=y.breakpoints[c||a],b?b({matches:!1}):d.listener({matches:!1}),d.mq.removeListener(d.listener),delete y.breakpoints[c||a]),f},B=function(a,b){var c,d;if(c=void 0,"string"==typeof a)c=y[a],y[a]=b;else{c={};for(d in a)a.hasOwnProperty(d)&&(c[d]=y[d],y[d]=a[d])}return c},o=function(a){return y[a]},a(document).ready(function(){return n(),a(document).on("mouseenter",".bigfoot-footnote__button",f),a(document).on("touchend click",z),a(document).on("mouseout",".is-hover-instantiated",A),a(document).on("keyup",m),a(window).on("scroll resize",w),a(document).on("gestureend",function(){return w()})}),e={removePopovers:u,close:u,createPopover:j,activate:j,repositionFeet:w,reposition:w,addBreakpoint:c,removeBreakpoint:t,getSetting:o,updateSetting:B}}}(jQuery)}).call(this); \ No newline at end of file diff --git a/static/javascripts/d3-3.5.2/d3.min.js b/static/javascripts/d3-3.5.2/d3.min.js new file mode 100755 index 0000000..ddaf546 --- /dev/null +++ b/static/javascripts/d3-3.5.2/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===da||n[0]===ma?ma+n:n}function l(n){return(n+="")[0]===ma?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=ya.length;r>e;++e){var u=ya[e]+t;if(u in n)return u}}function y(){}function M(){}function x(n){function t(){for(var t,r=e,u=-1,i=r.length;++ue;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function O(n){return xa(n,Aa),n}function Y(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var l=Ca.get(n);return l&&(n=l,c=V),a?t?u:r:t?y:i}function Z(n,t){return function(e){var r=ta.event;ta.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ta.event=r}}}function V(n,t){var e=Z(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function X(){var n=".dragsuppress-"+ ++qa,t="click"+n,e=ta.select(oa).on("touchmove"+n,b).on("dragstart"+n,b).on("selectstart"+n,b);if(za){var r=ia.style,u=r[za];r[za]="none"}return function(i){if(e.on(n,null),za&&(r[za]=u),i){var o=function(){e.on(t,null)};e.on(t,function(){b(),o()},!0),setTimeout(o,0)}}}function $(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>La&&(oa.scrollX||oa.scrollY)){e=ta.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();La=!(u.f||u.e),e.remove()}return La?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function B(){return ta.event.changedTouches[0].identifier}function W(){return ta.event.target}function J(){return oa}function G(n){return n>0?1:0>n?-1:0}function K(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function Q(n){return n>1?0:-1>n?Da:Math.acos(n)}function nt(n){return n>1?ja:-1>n?-ja:Math.asin(n)}function tt(n){return((n=Math.exp(n))-1/n)/2}function et(n){return((n=Math.exp(n))+1/n)/2}function rt(n){return((n=Math.exp(2*n))-1)/(n+1)}function ut(n){return(n=Math.sin(n/2))*n}function it(){}function ot(n,t,e){return this instanceof ot?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ot?new ot(n.h,n.s,n.l):xt(""+n,bt,ot):new ot(n,t,e)}function at(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new dt(u(n+120),u(n),u(n-120))}function ct(n,t,e){return this instanceof ct?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof ct?new ct(n.h,n.c,n.l):n instanceof st?ht(n.l,n.a,n.b):ht((n=_t((n=ta.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new ct(n,t,e)}function lt(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new st(e,Math.cos(n*=Fa)*t,Math.sin(n)*t)}function st(n,t,e){return this instanceof st?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof st?new st(n.l,n.a,n.b):n instanceof ct?lt(n.h,n.c,n.l):_t((n=dt(n)).r,n.g,n.b):new st(n,t,e)}function ft(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=gt(u)*Ja,r=gt(r)*Ga,i=gt(i)*Ka,new dt(vt(3.2404542*u-1.5371385*r-.4985314*i),vt(-.969266*u+1.8760108*r+.041556*i),vt(.0556434*u-.2040259*r+1.0572252*i))}function ht(n,t,e){return n>0?new ct(Math.atan2(e,t)*Ha,Math.sqrt(t*t+e*e),n):new ct(0/0,0/0,n)}function gt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function pt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function vt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function dt(n,t,e){return this instanceof dt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof dt?new dt(n.r,n.g,n.b):xt(""+n,dt,at):new dt(n,t,e)}function mt(n){return new dt(n>>16,255&n>>8,255&n)}function yt(n){return mt(n)+""}function Mt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function xt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(St(u[0]),St(u[1]),St(u[2]))}return(i=tc.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function bt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new ot(r,u,c)}function _t(n,t,e){n=wt(n),t=wt(t),e=wt(e);var r=pt((.4124564*n+.3575761*t+.1804375*e)/Ja),u=pt((.2126729*n+.7151522*t+.072175*e)/Ga),i=pt((.0193339*n+.119192*t+.9503041*e)/Ka);return st(116*u-16,500*(r-u),200*(u-i))}function wt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function St(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function kt(n){return"function"==typeof n?n:function(){return n}}function Et(n){return n}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Nt(t,e,n,r)}}function Nt(n,t,e,r){function u(){var n,t=c.status;if(!t&&zt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=ta.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!oa.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=ta.event;ta.event=n;try{o.progress.call(i,c)}finally{ta.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(ra(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},ta.rebind(i,o,"on"),null==r?i:i.get(Ct(r))}function Ct(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function zt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qt(){var n=Lt(),t=Tt()-n;t>24?(isFinite(t)&&(clearTimeout(ic),ic=setTimeout(qt,t)),uc=0):(uc=1,ac(qt))}function Lt(){var n=Date.now();for(oc=ec;oc;)n>=oc.t&&(oc.f=oc.c(n-oc.t)),oc=oc.n;return n}function Tt(){for(var n,t=ec,e=1/0;t;)t.f?t=n?n.n=t.n:ec=t.n:(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:Et;return function(n){var e=lc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=sc.get(g)||Ut;var M=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=ta.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=y?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!l&&f&&(x=i(x,1/0));var S=v.length+x.length+b.length+(M?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return M&&(x=i(k+x,k.length?s-b.length:1/0)),u+=v,n=x+b,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(M?n:k+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ft(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new hc(e-1)),1),e}function i(n,e){return t(n=new hc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{hc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{hc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ht(n);return c.floor=c,c.round=Ht(r),c.ceil=Ht(u),c.offset=Ht(i),c.range=a,n}function Ht(n){return function(t,e){try{hc=jt;var r=new jt;return r._=t,n(r,e)._}finally{hc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++aa;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in pc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,N.c.toString(),t,r)}function c(n,t,r){return e(n,N.x.toString(),t,r)}function l(n,t,r){return e(n,N.X.toString(),t,r)}function s(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{hc=jt;var t=new hc;return t._=n,r(t)}finally{hc=Date}}var r=t(n);return e.parse=function(n){try{hc=jt;var t=r.parse(n);return t&&t._}finally{hc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var M=ta.map(),x=It(v),b=Zt(v),_=It(d),w=Zt(d),S=It(m),k=Zt(m),E=It(y),A=Zt(y);p.forEach(function(n,t){M.set(n.toLowerCase(),t)});var N={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Yt(n.getDate(),t,2)},e:function(n,t){return Yt(n.getDate(),t,2)},H:function(n,t){return Yt(n.getHours(),t,2)},I:function(n,t){return Yt(n.getHours()%12||12,t,2)},j:function(n,t){return Yt(1+fc.dayOfYear(n),t,3)},L:function(n,t){return Yt(n.getMilliseconds(),t,3)},m:function(n,t){return Yt(n.getMonth()+1,t,2)},M:function(n,t){return Yt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Yt(n.getSeconds(),t,2)},U:function(n,t){return Yt(fc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Yt(fc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Yt(n.getFullYear()%100,t,2)},Y:function(n,t){return Yt(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:s,S:re,U:Xt,w:Vt,W:$t,x:c,X:l,y:Wt,Y:Bt,Z:Jt,"%":oe};return t}function Yt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function It(n){return new RegExp("^(?:"+n.map(ta.requote).join("|")+")","i")}function Zt(n){for(var t=new a,e=-1,r=n.length;++e68?1900:2e3)}function Kt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|va(t)/60,u=va(t)%60;return e+Yt(r,"0",2)+Yt(u,"0",2)}function oe(n,t,e){dc.lastIndex=0;var r=dc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);_c.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;wc.point=function(o,a){wc.point=n,r=(t=o)*Fa,u=Math.cos(a=(e=a)*Fa/2+Da/4),i=Math.sin(a)},wc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Me(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function xe(n){return[Math.atan2(n[1],n[0]),nt(n[2])]}function be(n,t){return va(n[0]-t[0])a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new qe(e,n,null,!0),l=new qe(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new qe(r,n,null,!1),l=new qe(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),ze(i),ze(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ze(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Te))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=ta.merge(g);var n=Fe(m,p);g.length?(b||(i.polygonStart(),b=!0),Ce(g,De,n,e,i)):n&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=Re(),x=t(M),b=!1;return y}}function Te(n){return n.length>1}function Re(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:y,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function De(n,t){return((n=n.x)[0]<0?n[1]-ja-Ta:ja-n[1])-((t=t.x)[0]<0?t[1]-ja-Ta:ja-t[1])}function Pe(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Da:-Da,c=va(i-e);va(c-Da)0?ja:-ja),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Da&&(va(e-u)Ta?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function je(n,t,e,r){var u;if(null==n)u=e*ja,r.point(-Da,u),r.point(0,u),r.point(Da,u),r.point(Da,0),r.point(Da,-u),r.point(0,-u),r.point(-Da,-u),r.point(-Da,0),r.point(-Da,u);else if(va(n[0]-t[0])>Ta){var i=n[0]a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Da/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+Da/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=b>=0?1:-1,w=_*b,S=w>Da,k=p*M;if(_c.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),i+=S?b+_*Pa:b,S^h>=e^m>=e){var E=de(pe(f),pe(n));Me(E);var A=de(u,E);Me(A);var N=(S^b>=0?-1:1)*nt(A[2]);(r>N||r===N&&(E[0]||E[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=m,p=M,v=x,f=n}}return(-Ta>i||Ta>i&&0>_c)^1&o}function He(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Da:-Da),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(be(e,g)||be(p,g))&&(p[0]+=Ta,p[1]+=Ta,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&be(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),M=m*m-y*(ve(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=ye(d,(-m-x)/y);if(me(b,p),b=xe(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=va(A-Da)A;if(!N&&k>E&&(_=k,k=E,E=_),C?N?k+E>0^b[1]<(va(b[0]-w)Da^(w<=b[0]&&b[0]<=S)){var z=ye(d,(-m+x)/y);return me(z,p),[b,xe(z)]}}}function u(t,e){var r=o?n:Da-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=va(i)>Ta,c=gr(n,6*Fa);return Le(t,e,c,o?[0,-n]:[-Da,n-Da])}function Oe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Ye(n,t,e,r){function u(r,u){return va(r[0]-n)0?0:3:va(r[0]-e)0?2:1:va(r[1]-t)0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&K(l,i,n)>0&&++t:i[1]<=r&&K(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,b=_=0/0}function g(){v&&(p(y,M),x&&w&&A.rejoin(),v.push(A.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Uc,Math.min(Uc,n)),t=Math.max(-Uc,Math.min(Uc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};N(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,m,y,M,x,b,_,w,S,k,E=a,A=Re(),N=Oe(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=ta.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&Ce(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return C}}function Ie(n){var t=0,e=Da/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Da/180,e=n[1]*Da/180):[180*(t/Da),180*(e/Da)]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,nt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){Fc+=u*n-r*t,r=n,u=t}var t,e,r,u;Zc.point=function(i,o){Zc.point=n,t=r=i,e=u=o},Zc.lineEnd=function(){n(t,e)}}function Xe(n,t){Hc>n&&(Hc=n),n>Yc&&(Yc=n),Oc>t&&(Oc=t),t>Ic&&(Ic=t)}function $e(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function We(n,t){Ec+=n,Ac+=t,++Nc}function Je(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Cc+=o*(t+n)/2,zc+=o*(e+r)/2,qc+=o,We(t=n,e=r)}var t,e;Xc.point=function(r,u){Xc.point=n,We(t=r,e=u)}}function Ge(){Xc.point=We}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Cc+=o*(r+n)/2,zc+=o*(u+t)/2,qc+=o,o=u*n-r*t,Lc+=o*(r+n),Tc+=o*(u+t),Rc+=3*o,We(r=n,u=t)}var t,e,r,u;Xc.point=function(i,o){Xc.point=n,We(t=r=i,e=u=o)},Xc.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Pa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:y};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(M,x,y,b,_,w,M=o[0],x=o[1],y=e,b=i[0],_=i[1],w=i[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=va(va(w)-1)i||va((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Fa),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ha,e*Ha])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*Fa,n[1]*Fa),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ha,n[1]*Ha]}function r(){a=Ae(o=lr(m,y,M),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,M=0,x=Pc,b=Et,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(x(o,f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Pc):He((_=+n)*Fa),u()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=n?Ye(n[0][0],n[0][1],n[1][0],n[1][1]):Et,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Fa,d=n[1]%360*Fa,r()):[v*Ha,d*Ha]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Fa,y=n[1]%360*Fa,M=n.length>2?n[2]%360*Fa:0,r()):[m*Ha,y*Ha,M*Ha]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*Fa,e*Fa)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Da?n-Pa:-Da>n?n+Pa:n,t]}function lr(n,t,e){return n?t||e?Ae(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>Da?t-Pa:-Da>t?t+Pa:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),nt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),nt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Pa)):(u=n+o*Pa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=xe([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,Me(e);var r=Q(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ta)%(2*Math.PI)}function vr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function Mr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(ut(r-t)+u*o*ut(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ha,Math.atan2(o,Math.sqrt(r*r+u*u))*Ha]}:function(){return[n*Ha,t*Ha]};return p.distance=h,p}function xr(){function n(n,u){var i=Math.sin(u*=Fa),o=Math.cos(u),a=va((n*=Fa)-t),c=Math.cos(a);$c+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Bc.point=function(u,i){t=u*Fa,e=Math.sin(i*=Fa),r=Math.cos(i),Bc.point=n},Bc.lineEnd=function(){Bc.point=Bc.lineEnd=y}}function br(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function _r(n,t){function e(n,t){o>0?-ja+Ta>t&&(t=-ja+Ta):t>ja-Ta&&(t=ja-Ta);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Da/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=G(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-ja]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return va(u)u;u++){for(;r>1&&K(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function zr(n,t){return n[0]-t[0]||n[1]-t[1]}function qr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Lr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function Tr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=ol.pop()||new Rr;return t.site=n,t}function Pr(n){Xr(n),rl.remove(n),ol.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&va(e-c.circle.x)s;++s)l=a[s],c=a[s-1],Kr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Jr(c.site,l.site,null,u),Vr(c),Vr(l)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=rl._;a;)if(r=Fr(a,o)-i,r>Ta)a=a.L;else{if(u=i-Hr(a,o),!(u>Ta)){r>-Ta?(t=a.P,e=a):u>-Ta?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(rl.insert(t,c),t||e){if(t===e)return Xr(t),e=Dr(t.site),rl.insert(c,e),c.edge=e.edge=Jr(t.site,c.site),Vr(t),Vr(e),void 0;if(!e)return c.edge=Jr(t.site,c.site),void 0;Xr(t),Xr(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,M=v*v+d*d,x={x:(d*y-g*M)/m+s,y:(h*M-v*y)/m+f};Kr(e.edge,l,p,x),c.edge=Jr(l,n,null,x),e.edge=Jr(n,p,null,x),Vr(t),Vr(e)}}function Fr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Hr(n,t){var e=n.N;if(e)return Fr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Yr(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=el,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(va(r-t)>Ta||va(u-e)>Ta)&&(a.splice(o,0,new Qr(Gr(i.site,s,va(r-f)Ta?{x:f,y:va(t-f)Ta?{x:va(e-p)Ta?{x:h,y:va(t-h)Ta?{x:va(e-g)=-Ra)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=al.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,M=il._;M;)if(m.yd||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.yr||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.yg){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.xi||f>o||r>h||u>g)){if(p=n.point){var p,v=t-p[0],d=e-p[1],m=v*v+d*d;if(c>m){var y=Math.sqrt(c=m);r=t-y,u=e-y,i=t+y,o=e+y,a=p}}for(var M=n.nodes,x=.5*(s+h),b=.5*(f+g),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:l(n,s,f,x,b);break;case 1:l(n,x,f,h,b);break;case 2:l(n,s,b,x,g);break;case 3:l(n,x,b,h,g)}}}(n,r,u,i,o),a}function gu(n,t){n=ta.rgb(n),t=ta.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+Mt(Math.round(e+i*n))+Mt(Math.round(r+o*n))+Mt(Math.round(u+a*n))}}function pu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=mu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function vu(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function du(n,t){var e,r,u,i=ll.lastIndex=sl.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=ll.exec(n))&&(r=sl.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:vu(e,r)})),i=sl.lastIndex;return ir;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function mu(n,t){for(var e,r=ta.interpolators.length;--r>=0&&!(e=ta.interpolators[r](n,t)););return e}function yu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(mu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function Mu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function bu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function wu(n){return n*n*n}function Su(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function ku(n){return function(t){return Math.pow(t,n)}}function Eu(n){return 1-Math.cos(n*ja)}function Au(n){return Math.pow(2,10*(n-1))}function Nu(n){return 1-Math.sqrt(1-n*n)}function Cu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Pa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Pa/t)}}function zu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function qu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lu(n,t){n=ta.hcl(n),t=ta.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return lt(e+i*n,r+o*n,u+a*n)+""}}function Tu(n,t){n=ta.hsl(n),t=ta.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return at(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){n=ta.lab(n),t=ta.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ft(e+i*n,r+o*n,u+a*n)+""}}function Du(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Pu(n){var t=[n.a,n.b],e=[n.c,n.d],r=ju(t),u=Uu(t,e),i=ju(Fu(e,t,-u))||0;t[0]*e[1]180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:vu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:vu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:vu(g[0],p[0])},{i:e-2,x:vu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i=0;)e.push(u[r])}function Qu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++oe;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function si(n){return n.reduce(fi,0)}function fi(n,t){return n+t[1]}function hi(n,t){return gi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function gi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function pi(n){return[ta.min(n),ta.max(n)]}function vi(n,t){return n.value-t.value}function di(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function mi(n,t){n._pack_next=t,t._pack_prev=n}function yi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Mi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(xi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],wi(r,u,i),t(i),di(r,i),r._pack_prev=i,di(i,u),u=r._pack_next,o=3;l>o;o++){wi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(yi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!yi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.ro;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(bi)}}function xi(n){n._pack_next=n._pack_prev=n}function bi(n){delete n._pack_next,delete n._pack_prev}function _i(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Ci(n,t,e){return n.a.parent===t.parent?n.a:e}function zi(n){return 1+ta.max(n,function(n){return n.y})}function qi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Li(n){var t=n.children;return t&&t.length?Li(t[0]):n}function Ti(n){var t,e=n.children;return e&&(t=e.length)?Ti(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Di(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Pi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ui(n){return n.rangeExtent?n.rangeExtent():Pi(n.range())}function ji(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Fi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Hi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:bl}function Oi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Oi:ji,c=r?Yu:Ou;return o=u(n,t,c,e),a=u(t,n,c,mu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Du)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Xi(n,t)},i.tickFormat=function(t,e){return $i(n,t,e)},i.nice=function(t){return Zi(n,t),u()},i.copy=function(){return Yi(n,t,e,r)},u()}function Ii(n,t){return ta.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Zi(n,t){return Fi(n,Hi(Vi(n,t)[2]))}function Vi(n,t){null==t&&(t=10);var e=Pi(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Xi(n,t){return ta.range.apply(ta,Vi(n,t))}function $i(n,t,e){var r=Vi(n,t);if(e){var u=lc.exec(e);if(u.shift(),"s"===u[8]){var i=ta.formatPrefix(Math.max(va(r[0]),va(r[1])));return u[7]||(u[7]="."+Bi(i.scale(r[2]))),u[8]="f",e=ta.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Wi(u[8],r)),e=u.join("")}else e=",."+Bi(r[2])+"f";return ta.format(e)}function Bi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Wi(n,t){var e=Bi(t[2]);return n in _l?Math.abs(e-Bi(Math.max(va(t[0]),va(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Ji(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Fi(r.map(u),e?Math:Sl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Pi(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++0;h--)o.push(i(l)*h);for(l=0;o[l]c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return wl;arguments.length<2?t=wl:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ji(n.copy(),t,e,r)},Ii(o,n)}function Gi(n,t,e){function r(t){return n(u(t))}var u=Ki(t),i=Ki(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Xi(e,n)},r.tickFormat=function(n,t){return $i(e,n,t)},r.nice=function(n){return r.domain(Zi(e,n))},r.exponent=function(o){return arguments.length?(u=Ki(t=o),i=Ki(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Gi(n.copy(),t,e)},Ii(r,n)}function Ki(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Qi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++on?[0/0,0/0]:[n>0?a[n-1]:r[0],nt?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return to(n,t,e)},u()}function eo(n,t){function e(e){return e>=e?t[ta.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return eo(n,t)},e}function ro(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Xi(n,t)},t.tickFormat=function(t,e){return $i(n,t,e)},t.copy=function(){return ro(n)},t}function uo(){return 0}function io(n){return n.innerRadius}function oo(n){return n.outerRadius}function ao(n){return n.startAngle}function co(n){return n.endAngle}function lo(n){return n&&n.padAngle}function so(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function fo(n,t,e,r,u){var i=n[0]-t[0],o=n[1]-t[1],a=(u?r:-r)/Math.sqrt(i*i+o*o),c=a*o,l=-a*i,s=n[0]+c,f=n[1]+l,h=t[0]+c,g=t[1]+l,p=(s+h)/2,v=(f+g)/2,d=h-s,m=g-f,y=d*d+m*m,M=e-r,x=s*g-h*f,b=(0>m?-1:1)*Math.sqrt(M*M*y-x*x),_=(x*m-d*b)/y,w=(-x*d-m*b)/y,S=(x*m+d*b)/y,k=(-x*d+m*b)/y,E=_-p,A=w-v,N=S-p,C=k-v;return E*E+A*A>N*N+C*C&&(_=S,w=k),[[_-c,w-l],[_*e/M,w*e/M]]}function ho(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=kt(e),p=kt(r);++f1&&u.push("H",r[0]),u.join("")}function mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function To(n){return n.length<3?go(n):n[0]+_o(n,Lo(n))}function Ro(n){for(var t,e,r,u=-1,i=n.length;++ur)return s();var u=i[i.active];u&&(--i.count,delete i[i.active],u.event&&u.event.interrupt.call(n,n.__data__,u.index)),i.active=r,o.event&&o.event.start.call(n,n.__data__,t),o.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&v.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return p.c=l(e||1)?Ne:l,1},0,c)}function l(e){if(i.active!==r)return 1;for(var u=e/f,a=h(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,n.__data__,t),s()):void 0}function s(){return--i.count?delete i[r]:delete n[e],1}var f,h,g=o.delay,p=oc,v=[];return p.t=g+c,u>=g?a(u-g):(p.c=a,void 0)},0,c)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Wl,u);return i==Wl.length?[t.year,Vi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Wl[i-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Pi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Ii(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.2"};Date.now||(Date.now=function(){return+new Date});var ea=[].slice,ra=function(n){return ea.call(n)},ua=document,ia=ua.documentElement,oa=window;try{ra(ia.childNodes)[0].nodeType}catch(aa){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{ua.createElement("div").style.setProperty("opacity",0,"")}catch(ca){var la=oa.Element.prototype,sa=la.setAttribute,fa=la.setAttributeNS,ha=oa.CSSStyleDeclaration.prototype,ga=ha.setProperty;la.setAttribute=function(n,t){sa.call(this,n,t+"")},la.setAttributeNS=function(n,t,e){fa.call(this,n,t,e+"")},ha.setProperty=function(n,t,e){ga.call(this,n,t+"",e)}}ta.ascending=n,ta.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ta.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ur&&(e=r)}else{for(;++u=r){e=r;break}for(;++ur&&(e=r)}return e},ta.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ue&&(e=r)}else{for(;++u=r){e=r;break}for(;++ue&&(e=r)}return e},ta.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}else{for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}return[e,u]},ta.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o1?c/(s-1):void 0},ta.deviation=function(){var n=ta.variance.apply(this,arguments);return n?Math.sqrt(n):n};var pa=r(n);ta.bisectLeft=pa.left,ta.bisect=ta.bisectRight=pa.right,ta.bisector=function(t){return r(1===t.length?function(e,r){return n(t(e),r)}:t)},ta.shuffle=function(n,t,e){(i=arguments.length)<3&&(e=n.length,2>i&&(t=0));for(var r,u,i=e-t;i;)u=0|Math.random()*i--,r=n[i+t],n[i+t]=n[u+t],n[u+t]=r;return n},ta.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ta.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},ta.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=ta.min(arguments,u),e=new Array(t);++n=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var va=Math.abs;ta.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,u=[],o=i(va(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)u.push(r/o);else for(;(r=n+e*++a)=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,v=i[c++],d=new a;++g=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++ur){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(T(e,n[e],t));return this}if(2>r)return oa.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(T(n,t,e))},ka.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},ka.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},ka.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},ka.append=function(n){return n=D(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},ka.insert=function(n,t){return n=D(n),t=k(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},ka.remove=function(){return this.each(P)},ka.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new a,y=new Array(o);for(r=-1;++rr;++r)p[r]=U(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++ii;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return S(u)},ka.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ka.sort=function(n){n=F.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ka.size=function(){var n=0;return H(this,function(){++n}),n};var Aa=[];ta.selection.enter=O,ta.selection.enter.prototype=Aa,Aa.append=ka.append,Aa.empty=ka.empty,Aa.node=ka.node,Aa.call=ka.call,Aa.size=ka.size,Aa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(I(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(I(n,t,e))};var Ca=ta.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ca.forEach(function(n){"on"+n in ua&&Ca.remove(n)});var za="onselectstart"in ua?null:m(ia.style,"userSelect"),qa=0;ta.mouse=function(n){return $(n,_())};var La=/WebKit/.test(oa.navigator.userAgent)?-1:0;ta.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=_().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return $(n,r)},ta.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],p|=n|e,M=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&ta.event.target===f),g({type:"dragend"}))}var l,s=this,f=ta.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=ta.select(u()).on(i+d,a).on(o+d,c),y=X(),M=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-M[0],l.y-M[1]]):l=[0,0],g({type:"dragstart"})}}var e=w(n,"drag","dragstart","dragend"),r=null,u=t(y,ta.mouse,J,"mousemove","mouseup"),i=t(B,ta.touch,W,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},ta.rebind(n,e,"on")},ta.touches=function(n,t){return arguments.length<2&&(t=_().touches),t?ra(t).map(function(t){var e=$(n,t);return e.identifier=t.identifier,e}):[]};var Ta=1e-6,Ra=Ta*Ta,Da=Math.PI,Pa=2*Da,Ua=Pa-Ta,ja=Da/2,Fa=Da/180,Ha=180/Da,Oa=Math.SQRT2,Ya=2,Ia=4;ta.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=et(v),o=i/(Ya*h)*(e*rt(Oa*t+v)-tt(v));return[r+o*l,u+o*s,i*e/et(Oa*t+v)]}return[r+n*l,u+n*s,i*Math.exp(Oa*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Ia*f)/(2*i*Ya*h),p=(c*c-i*i-Ia*f)/(2*c*Ya*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Oa;return e.duration=1e3*y,e},ta.behavior.zoom=function(){function n(n){n.on(z,s).on(Xa+".zoom",h).on("dblclick.zoom",g).on(T,f)}function t(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function e(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function r(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=e(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function i(t,e,i,o){t.__chart__={x:k.x,y:k.y,k:k.k},r(Math.pow(2,o)),u(v=e,i),t=ta.select(t),N>0&&(t=t.transition().duration(N)),t.call(n.event)}function o(){x&&x.domain(M.range().map(function(n){return(n-k.x)/k.k}).map(M.invert)),S&&S.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function a(n){C++||n({type:"zoomstart"})}function c(n){o(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function l(n){--C||n({type:"zoomend"}),v=null}function s(){function n(){s=1,u(ta.mouse(r),h),c(o)}function e(){f.on(q,null).on(L,null),g(s&&ta.event.target===i),l(o)}var r=this,i=ta.event.target,o=R.of(r,arguments),s=0,f=ta.select(oa).on(q,n).on(L,e),h=t(ta.mouse(r)),g=X();Fl.call(r),a(o)}function f(){function n(){var n=ta.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=t(n))}),n}function e(){var t=ta.event.target;ta.select(t).on(x,o).on(_,h),w.push(t);for(var e=ta.event.changedTouches,r=0,u=e.length;u>r;++r)d[e[r].identifier]=null;var a=n(),c=Date.now();if(1===a.length){if(500>c-y){var l=a[0];i(p,l,d[l.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),b()}y=c}else if(a.length>1){var l=a[0],s=a[1],f=l[0]-s[0],g=l[1]-s[1];m=f*f+g*g}}function o(){var n,t,e,i,o=ta.touches(p);Fl.call(p);for(var a=0,l=o.length;l>a;++a,i=null)if(e=o[a],i=d[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*g)}y=null,u(n,t),c(v)}function h(){if(ta.event.touches.length){for(var t=ta.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var u in d)return void n()}ta.selectAll(w).on(M,null),S.on(z,s).on(T,f),E(),l(v)}var g,p=this,v=R.of(p,arguments),d={},m=0,M=".zoom-"+ta.event.changedTouches[0].identifier,x="touchmove"+M,_="touchend"+M,w=[],S=ta.select(p),E=X();e(),a(v),S.on(z,null).on(T,e)}function h(){var n=R.of(this,arguments);m?clearTimeout(m):(p=t(v=d||ta.mouse(this)),Fl.call(this),a(n)),m=setTimeout(function(){m=null,l(n)},50),b(),r(Math.pow(2,.002*Za())*k.k),u(v,p),c(n)}function g(){var n=ta.mouse(this),e=Math.log(k.k)/Math.LN2;i(this,n,t(n),ta.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}var p,v,d,m,y,M,x,_,S,k={x:0,y:0,k:1},E=[960,500],A=Va,N=250,C=0,z="mousedown.zoom",q="mousemove.zoom",L="mouseup.zoom",T="touchstart.zoom",R=w(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=R.of(this,arguments),t=k;Ul?ta.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},a(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],u=v?v[0]:e/2,i=v?v[1]:r/2,o=ta.interpolateZoom([(u-k.x)/k.k,(i-k.y)/k.k,e/k.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:u-r[0]*a,y:i-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){l(n)}).each("end.zoom",function(){l(n)}):(this.__chart__=k,a(n),c(n),l(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},o(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:+t},o(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Va:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(d=t&&[+t[0],+t[1]],n):d},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(N=+t,n):N},n.x=function(t){return arguments.length?(x=t,M=t.copy(),k={x:0,y:0,k:1},n):x},n.y=function(t){return arguments.length?(S=t,_=t.copy(),k={x:0,y:0,k:1},n):S},ta.rebind(n,R,"on")};var Za,Va=[0,1/0],Xa="onwheel"in ua?(Za=function(){return-ta.event.deltaY*(ta.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ua?(Za=function(){return ta.event.wheelDelta},"mousewheel"):(Za=function(){return-ta.event.detail},"MozMousePixelScroll");ta.color=it,it.prototype.toString=function(){return this.rgb()+""},ta.hsl=ot;var $a=ot.prototype=new it;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,n*this.l)},$a.rgb=function(){return at(this.h,this.s,this.l)},ta.hcl=ct;var Ba=ct.prototype=new it;Ba.brighter=function(n){return new ct(this.h,this.c,Math.min(100,this.l+Wa*(arguments.length?n:1)))},Ba.darker=function(n){return new ct(this.h,this.c,Math.max(0,this.l-Wa*(arguments.length?n:1)))},Ba.rgb=function(){return lt(this.h,this.c,this.l).rgb()},ta.lab=st;var Wa=18,Ja=.95047,Ga=1,Ka=1.08883,Qa=st.prototype=new it;Qa.brighter=function(n){return new st(Math.min(100,this.l+Wa*(arguments.length?n:1)),this.a,this.b)},Qa.darker=function(n){return new st(Math.max(0,this.l-Wa*(arguments.length?n:1)),this.a,this.b)},Qa.rgb=function(){return ft(this.l,this.a,this.b)},ta.rgb=dt;var nc=dt.prototype=new it;nc.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new dt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new dt(u,u,u)},nc.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new dt(n*this.r,n*this.g,n*this.b)},nc.hsl=function(){return bt(this.r,this.g,this.b)},nc.toString=function(){return"#"+Mt(this.r)+Mt(this.g)+Mt(this.b)};var tc=ta.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});tc.forEach(function(n,t){tc.set(n,mt(t))}),ta.functor=kt,ta.xhr=At(Et),ta.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Nt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new v,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},ta.csv=ta.dsv(",","text/csv"),ta.tsv=ta.dsv(" ","text/tab-separated-values");var ec,rc,uc,ic,oc,ac=oa[m(oa,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ta.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};rc?rc.n=i:ec=i,rc=i,uc||(ic=clearTimeout(ic),uc=1,ac(qt))},ta.timer.flush=function(){Lt(),Tt()},ta.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var cc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);ta.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ta.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),cc[8+e/3]};var lc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,sc=ta.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ta.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),fc=ta.time={},hc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){gc.setUTCDate.apply(this._,arguments)},setDay:function(){gc.setUTCDay.apply(this._,arguments)},setFullYear:function(){gc.setUTCFullYear.apply(this._,arguments)},setHours:function(){gc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){gc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){gc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){gc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){gc.setUTCSeconds.apply(this._,arguments)},setTime:function(){gc.setTime.apply(this._,arguments)}};var gc=Date.prototype;fc.year=Ft(function(n){return n=fc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),fc.years=fc.year.range,fc.years.utc=fc.year.utc.range,fc.day=Ft(function(n){var t=new hc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),fc.days=fc.day.range,fc.days.utc=fc.day.utc.range,fc.dayOfYear=function(n){var t=fc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=fc[n]=Ft(function(n){return(n=fc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});fc[n+"s"]=e.range,fc[n+"s"].utc=e.utc.range,fc[n+"OfYear"]=function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)}}),fc.week=fc.sunday,fc.weeks=fc.sunday.range,fc.weeks.utc=fc.sunday.utc.range,fc.weekOfYear=fc.sundayOfYear;var pc={"-":"",_:" ",0:"0"},vc=/^\s*\d+/,dc=/^%/;ta.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var mc=ta.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ta.format=mc.numberFormat,ta.geo={},ce.prototype={s:0,t:0,add:function(n){le(n,this.t,yc),le(yc.s,this.s,this),this.s?this.t+=yc.t:this.s=yc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var yc=new ce;ta.geo.stream=function(n,t){n&&Mc.hasOwnProperty(n.type)?Mc[n.type](n,t):se(n,t)};var Mc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++rn?4*Da+n:n,wc.lineStart=wc.lineEnd=wc.point=y}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*Fa,e*Fa]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);Me(o),o=xe(o);var c=t-p,l=c>0?1:-1,v=o[0]*Ha*l,d=va(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Ha;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Ha;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=va(r)>180?r+(r>0?360:-360):r}else v=n,d=e;wc.point(n,e),t(n,e)}function i(){wc.lineStart()}function o(){u(v,d),wc.lineEnd(),va(y)>Ta&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n_c?(s=-(h=180),f=-(g=90)):y>Ta?g=90:-Ta>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){Sc=kc=Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,Dc);var t=Lc,e=Tc,r=Rc,u=t*t+e*e+r*r;return Ra>u&&(t=Cc,e=zc,r=qc,Ta>kc&&(t=Ec,e=Ac,r=Nc),u=t*t+e*e+r*r,Ra>u)?[0/0,0/0]:[Math.atan2(e,t)*Ha,nt(r/Math.sqrt(u))*Ha]};var Sc,kc,Ec,Ac,Nc,Cc,zc,qc,Lc,Tc,Rc,Dc={sphere:y,point:_e,lineStart:Se,lineEnd:ke,polygonStart:function(){Dc.lineStart=Ee},polygonEnd:function(){Dc.lineStart=Se}},Pc=Le(Ne,Pe,je,[-Da,-Da/2]),Uc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ye(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ta,f+.12*l+Ta],[s-.214*l-Ta,f+.234*l-Ta]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ta,f+.166*l+Ta],[s-.115*l-Ta,f+.234*l-Ta]]).stream(c).point,n},n.scale(1070)};var jc,Fc,Hc,Oc,Yc,Ic,Zc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Fc=0,Zc.lineStart=Ve},polygonEnd:function(){Zc.lineStart=Zc.lineEnd=Zc.point=y,jc+=va(Fc/2)}},Vc={point:Xe,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},Xc={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){Xc.lineStart=Ke},polygonEnd:function(){Xc.point=We,Xc.lineStart=Je,Xc.lineEnd=Ge}};ta.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),ta.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return jc=0,ta.geo.stream(n,u(Zc)),jc},n.centroid=function(n){return Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,u(Xc)),Rc?[Lc/Rc,Tc/Rc]:qc?[Cc/qc,zc/qc]:Nc?[Ec/Nc,Ac/Nc]:[0/0,0/0]},n.bounds=function(n){return Yc=Ic=-(Hc=Oc=1/0),ta.geo.stream(n,u(Vc)),[[Hc,Oc],[Yc,Ic]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Et,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(ta.geo.albersUsa()).context(null)},ta.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ta.geo.projection=ur,ta.geo.projectionMutator=ir,(ta.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,ta.geo.rotation=function(n){function t(t){return t=n(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t}return n=lr(n[0]%360*Fa,n[1]*Fa,n.length>2?n[2]*Fa:0),t.invert=function(t){return t=n.invert(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t},t},cr.invert=ar,ta.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=lr(-n[0]*Fa,-n[1]*Fa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ha,n[1]*=Ha}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*Fa,u*Fa),n):t},n.precision=function(r){return arguments.length?(e=gr(t*Fa,(u=+r)*Fa),n):u},n.angle(90)},ta.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Fa,u=n[1]*Fa,i=t[1]*Fa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},ta.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ta.range(Math.ceil(i/d)*d,u,d).map(h).concat(ta.range(Math.ceil(l/m)*m,c,m).map(g)).concat(ta.range(Math.ceil(r/p)*p,e,p).filter(function(n){return va(n%d)>Ta}).map(s)).concat(ta.range(Math.ceil(a/v)*v,o,v).filter(function(n){return va(n%m)>Ta}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=vr(a,o,90),f=dr(r,e,y),h=vr(l,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Ta],[180,90-Ta]]).minorExtent([[-180,-80-Ta],[180,80+Ta]])},ta.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return ta.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},ta.geo.interpolate=function(n,t){return Mr(n[0]*Fa,n[1]*Fa,t[0]*Fa,t[1]*Fa)},ta.geo.length=function(n){return $c=0,ta.geo.stream(n,Bc),$c};var $c,Bc={sphere:y,point:y,lineStart:xr,lineEnd:y,polygonStart:y,polygonEnd:y},Wc=br(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ta.geo.azimuthalEqualArea=function(){return ur(Wc)}).raw=Wc;var Jc=br(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},Et);(ta.geo.azimuthalEquidistant=function(){return ur(Jc)}).raw=Jc,(ta.geo.conicConformal=function(){return Ie(_r)}).raw=_r,(ta.geo.conicEquidistant=function(){return Ie(wr)}).raw=wr;var Gc=br(function(n){return 1/n},Math.atan);(ta.geo.gnomonic=function(){return ur(Gc)}).raw=Gc,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-ja]},(ta.geo.mercator=function(){return kr(Sr)}).raw=Sr;var Kc=br(function(){return 1},Math.asin);(ta.geo.orthographic=function(){return ur(Kc)}).raw=Kc;var Qc=br(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ta.geo.stereographic=function(){return ur(Qc)}).raw=Qc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-ja]},(ta.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Er,ta.geom={},ta.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=kt(e),i=kt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(zr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Cr(a),s=Cr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ta)*Ta,y:Math.round(o(n,t)/Ta)*Ta,i:t}})}var r=Ar,u=Nr,i=r,o=u,a=cl;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Ir),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c=l,h=r>=s,g=h<<1|f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=su()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,M=kt(a),x=kt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.xm&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);v>b&&(v=b),d>_&&(d=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=su();if(k.add=function(n){i(k,n,+M(n,++g),+x(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},k.find=function(n){return hu(k,n[0],n[1],v,d,m,y)},g=-1,null==t){for(;++g=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||Et,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:pl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=ta.event.x,n.py=ta.event.y,a.resume()}var e,r,u,i,o,a={},c=ta.dispatch("start","tick","end"),l=[1,1],s=.9,f=vl,h=dl,g=-30,p=ml,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,M,x,b=m.length,_=y.length;for(e=0;_>e;++e)a=y[e],f=a.source,h=a.target,M=h.x-f.x,x=h.y-f.y,(p=M*M+x*x)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,M*=p,x*=p,h.x-=M*(d=f.weight/(h.weight+f.weight)),h.y-=x*d,f.x+=M*(d=1-d),f.y+=x*d);if((d=r*v)&&(M=l[0]/2,x=l[1]/2,e=-1,d))for(;++e0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ta.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++at;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=ta.behavior.drag().origin(Et).on("dragstart.force",Xu).on("drag.force",t).on("dragend.force",$u)),arguments.length?(this.on("mouseover.force",Bu).on("mouseout.force",Wu).call(e),void 0):e},ta.rebind(a,c,"on")};var vl=20,dl=1,ml=1/0;ta.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Qu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ei,e=ni,r=ti;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ku(t,function(n){n.children&&(n.value=0)}),Qu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ta.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++lf?-1:1),p=(f-c*g)/ta.sum(l),v=ta.range(c),d=[];return null!=e&&v.sort(e===yl?function(n,t){return l[t]-l[n]}:function(n,t){return e(o[n],o[t])}),v.forEach(function(n){d[n]={data:o[n],value:a=l[n],startAngle:s,endAngle:s+=a*p+g,padAngle:h}}),d}var t=Number,e=yl,r=0,u=Pa,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var yl={};ta.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=ta.permute(l,f),s=ta.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=Et,e=ai,r=ci,u=oi,i=ui,o=ii;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:Ml.get(t)||ai,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:xl.get(t)||ci,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var Ml=ta.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(li),i=n.map(si),o=ta.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ta.range(n.length).reverse()},"default":ai}),xl=ta.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ci});ta.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i0)for(i=-1;++i=s[0]&&a<=s[1]&&(o=c[ta.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=pi,u=hi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=kt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return gi(n,t)}:kt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ta.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Qu(a,function(n){n.r=+s(n.value)}),Qu(a,Mi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Qu(a,function(n){n.r+=f}),Qu(a,Mi),Qu(a,function(n){n.r-=f})}return _i(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=ta.layout.hierarchy().sort(vi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Gu(n,e)},ta.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Qu(h,e),h.parent.m=-h.z,Ku(h,r),l)Ku(f,i);else{var g=f,p=f,v=f;Ku(f,function(n){n.xp.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Ku(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ni(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=Ei(o),u=ki(u),o&&u;)c=ki(c),i=Ei(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ai(Ci(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!Ei(i)&&(i.t=o,i.m+=f-s),u&&!ki(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=ta.layout.hierarchy().sort(null).value(null),a=Si,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Gu(n,o)},ta.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Qu(c,function(n){var t=n.children;t&&t.length?(n.x=qi(t),n.y=zi(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Li(c),f=Ti(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Qu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=ta.layout.hierarchy().sort(null).value(null),e=Si,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Gu(n,t)},ta.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++ut?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++oe&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++ie.dx)&&(s=e.dx);++ie&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var bl={floor:Et,ceil:Et};ta.scale.linear=function(){return Yi([0,1],[0,1],mu,!1)};var _l={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Ji(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var wl=ta.format(".0e"),Sl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Gi(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return Qi([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(kl)},ta.scale.category20=function(){return ta.scale.ordinal().range(El)},ta.scale.category20b=function(){return ta.scale.ordinal().range(Al)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Nl)};var kl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(yt),El=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(yt),Al=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(yt),Nl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(yt);ta.scale.quantile=function(){return no([],[])},ta.scale.quantize=function(){return to(0,1,[0,1])},ta.scale.threshold=function(){return eo([.5],[0,1])},ta.scale.identity=function(){return ro([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-ja,f=a.apply(this,arguments)-ja,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ua)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===Cl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=nt(d/l*Math.sin(m))),n&&(E=nt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=Da?0:1;if(A&&so(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=Da?0:1;if(E&&so(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Lr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=fo(null==S?[_,w]:[S,k],[y,M],l,H,g),Y=fo([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^so(O[1][0],O[1][1],Y[1][0],Y[1][1]),",",g," ",Y[1],"A",H,",",H," 0 0,",v," ",Y[0]):N.push("M",O[0],"A",H,",",H," 0 1,",v," ",Y[0])}else N.push("M",y,",",M);if(null!=S){var I=Math.min(p,(n-F)/(j-1)),Z=fo([y,M],[S,k],n,-I,g),V=fo([_,w],null==x?[y,M]:[x,b],n,-I,g);p===I?N.push("L",V[0],"A",I,",",I," 0 0,",v," ",V[1],"A",n,",",n," 0 ",g^so(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-g," ",Z[1],"A",I,",",I," 0 0,",v," ",Z[0]):N.push("L",V[0],"A",I,",",I," 0 0,",v," ",Z[0])}else N.push("L",_,",",w)}else N.push("M",y,",",M),null!=x&&N.push("A",l,",",l," 0 ",C,",",g," ",x,",",b),N.push("L",_,",",w),null!=S&&N.push("A",n,",",n," 0 ",q,",",1-g," ",S,",",k);return N.push("Z"),N.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=io,r=oo,u=uo,i=Cl,o=ao,a=co,c=lo;return n.innerRadius=function(t){return arguments.length?(e=kt(t),n):e},n.outerRadius=function(t){return arguments.length?(r=kt(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=kt(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==Cl?Cl:kt(t),n):i},n.startAngle=function(t){return arguments.length?(o=kt(t),n):o},n.endAngle=function(t){return arguments.length?(a=kt(t),n):a},n.padAngle=function(t){return arguments.length?(c=kt(t),n):c},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-ja;return[Math.cos(t)*n,Math.sin(t)*n]},n};var Cl="auto";ta.svg.line=function(){return ho(Et)};var zl=ta.map({linear:go,"linear-closed":po,step:vo,"step-before":mo,"step-after":yo,basis:So,"basis-open":ko,"basis-closed":Eo,bundle:Ao,cardinal:bo,"cardinal-open":Mo,"cardinal-closed":xo,monotone:To});zl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var ql=[0,2/3,1/3,0],Ll=[0,1/3,2/3,0],Tl=[0,1/6,2/3,1/6];ta.svg.line.radial=function(){var n=ho(Ro);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},mo.reverse=yo,yo.reverse=mo,ta.svg.area=function(){return Do(Et)},ta.svg.area.radial=function(){var n=Do(Ro);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ta.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)-ja,s=l.call(n,u,r)-ja;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Da)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Po,c=ao,l=co;return n.radius=function(t){return arguments.length?(a=kt(t),n):a},n.source=function(t){return arguments.length?(i=kt(t),n):i},n.target=function(t){return arguments.length?(o=kt(t),n):o},n.startAngle=function(t){return arguments.length?(c=kt(t),n):c},n.endAngle=function(t){return arguments.length?(l=kt(t),n):l},n},ta.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=Uo;return n.source=function(e){return arguments.length?(t=kt(e),n):t},n.target=function(t){return arguments.length?(e=kt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ta.svg.diagonal.radial=function(){var n=ta.svg.diagonal(),t=Uo,e=n.projection;return n.projection=function(n){return arguments.length?e(jo(t=n)):t},n},ta.svg.symbol=function(){function n(n,r){return(Rl.get(t.call(this,n,r))||Oo)(e.call(this,n,r))}var t=Ho,e=Fo;return n.type=function(e){return arguments.length?(t=kt(e),n):t},n.size=function(t){return arguments.length?(e=kt(t),n):e},n};var Rl=ta.map({circle:Oo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Pl)),e=t*Pl;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ta.svg.symbolTypes=Rl.keys();var Dl=Math.sqrt(3),Pl=Math.tan(30*Fa);ka.transition=function(n){for(var t,e,r=Ul||++Ol,u=Xo(n),i=[],o=jl||{time:Date.now(),ease:Su,delay:0,duration:250},a=-1,c=this.length;++ai;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Io(u,this.namespace,this.id)},Hl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):H(this,null==t?function(t){t[r][e].tween.remove(n)}:function(u){u[r][e].tween.set(n,t)})},Hl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Hu:mu,a=ta.ns.qualify(n);return Zo(this,"attr."+n,t,a.local?i:u)},Hl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=ta.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Hl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=oa.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=mu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Zo(this,"style."+n,t,u)},Hl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,oa.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Hl.text=function(n){return Zo(this,"text",n,Vo)},Hl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Hl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ta.ease.apply(ta,arguments)),H(this,function(r){r[e][t].ease=n}))},Hl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:H(this,"function"==typeof n?function(r,u,i){r[e][t].delay=+n.call(r,r.__data__,u,i)}:(n=+n,function(r){r[e][t].delay=n}))},Hl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:H(this,"function"==typeof n?function(r,u,i){r[e][t].duration=Math.max(1,n.call(r,r.__data__,u,i))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Hl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var u=jl,i=Ul;try{Ul=e,H(this,function(t,u,i){jl=t[r][e],n.call(t,t.__data__,u,i)})}finally{jl=u,Ul=i}}else H(this,function(u){var i=u[r][e];(i.event||(i.event=ta.dispatch("start","end","interrupt"))).on(n,t)});return this},Hl.transition=function(){for(var n,t,e,r,u=this.id,i=++Ol,o=this.namespace,a=[],c=0,l=this.length;l>c;c++){a.push(n=[]);for(var t=this[c],s=0,f=t.length;f>s;s++)(e=t[s])&&(r=e[o][u],$o(e,s,o,i,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Io(a,o,i)},ta.svg.axis=function(){function n(n){n.each(function(){var n,l=ta.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):Et:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ta),d=ta.transition(p.exit()).style("opacity",Ta).remove(),m=ta.transition(p.order()).style("opacity",1),y=Math.max(u,0)+o,M=Ui(f),x=l.selectAll(".domain").data([0]),b=(x.enter().append("path").attr("class","domain"),ta.transition(x));v.append("line"),v.append("text");var _,w,S,k,E=v.select("line"),A=m.select("line"),N=p.select("text").text(g),C=v.select("text"),z=m.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Bo,_="x",S="y",w="x2",k="y2",N.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),b.attr("d","M"+M[0]+","+q*i+"V0H"+M[1]+"V"+q*i)):(n=Wo,_="y",S="x",w="y2",k="x2",N.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),b.attr("d","M"+q*i+","+M[0]+"H0V"+M[1]+"H"+q*i)),E.attr(k,q*u),C.attr(S,q*y),A.attr(w,0).attr(k,q*u),z.attr(_,0).attr(S,q*y),f.rangeBand){var L=f,T=L.rangeBand()/2;s=f=function(n){return L(n)+T}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=ta.scale.linear(),r=Yl,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Il?t+"":Yl,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Yl="bottom",Il={top:1,right:1,bottom:1,left:1};ta.svg.brush=function(){function n(i){i.each(function(){var i=ta.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,Et);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Zl[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=ta.transition(i),h=ta.transition(o);c&&(s=Ui(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=Ui(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==ta.event.keyCode&&(N||(y=null,z[0]-=s[1],z[1]-=f[1],N=2),b())}function p(){32==ta.event.keyCode&&2==N&&(z[0]+=s[1],z[1]+=f[1],N=0,b())}function v(){var n=ta.mouse(x),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),N||(ta.event.altKey?(y||(y=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ta.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),w({type:"brushend"})}var y,M,x=this,_=ta.select(ta.event.target),w=a.of(x,arguments),S=ta.select(x),k=_.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,N=_.classed("extent"),C=X(),z=ta.mouse(x),q=ta.select(oa).on("keydown.brush",u).on("keyup.brush",p);if(ta.event.changedTouches?q.on("touchmove.brush",v).on("touchend.brush",m):q.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),N)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var L=+/w$/.test(k),T=+/^n/.test(k);M=[s[1-L]-z[0],f[1-T]-z[1]],z[0]=s[L],z[1]=f[T]}else ta.event.altKey&&(y=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),ta.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=w(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Vl[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ul?ta.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=yu(s,t.x),r=yu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Vl[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Vl[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},ta.rebind(n,a,"on")};var Zl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Vl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Xl=fc.format=mc.timeFormat,$l=Xl.utc,Bl=$l("%Y-%m-%dT%H:%M:%S.%LZ");Xl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:Bl,Jo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Jo.toString=Bl.toString,fc.second=Ft(function(n){return new hc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),fc.seconds=fc.second.range,fc.seconds.utc=fc.second.utc.range,fc.minute=Ft(function(n){return new hc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),fc.minutes=fc.minute.range,fc.minutes.utc=fc.minute.utc.range,fc.hour=Ft(function(n){var t=n.getTimezoneOffset()/60;return new hc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),fc.hours=fc.hour.range,fc.hours.utc=fc.hour.utc.range,fc.month=Ft(function(n){return n=fc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),fc.months=fc.month.range,fc.months.utc=fc.month.utc.range;var Wl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Jl=[[fc.second,1],[fc.second,5],[fc.second,15],[fc.second,30],[fc.minute,1],[fc.minute,5],[fc.minute,15],[fc.minute,30],[fc.hour,1],[fc.hour,3],[fc.hour,6],[fc.hour,12],[fc.day,1],[fc.day,2],[fc.week,1],[fc.month,1],[fc.month,3],[fc.year,1]],Gl=Xl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ne]]),Kl={range:function(n,t,e){return ta.range(Math.ceil(n/e)*e,+t,e).map(Ko)},floor:Et,ceil:Et};Jl.year=fc.year,fc.scale=function(){return Go(ta.scale.linear(),Jl,Gl)};var Ql=Jl.map(function(n){return[n[0].utc,n[1]]}),ns=$l.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ne]]);Ql.year=fc.year.utc,fc.scale.utc=function(){return Go(ta.scale.linear(),Ql,ns)},ta.text=At(function(n){return n.responseText}),ta.json=function(n,t){return Nt(n,"application/json",Qo,t)},ta.html=function(n,t){return Nt(n,"text/html",na,t)},ta.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(ta):"object"==typeof module&&module.exports&&(module.exports=ta),this.d3=ta}(); \ No newline at end of file diff --git a/static/javascripts/htmlwidgets-0.5/htmlwidgets.js b/static/javascripts/htmlwidgets-0.5/htmlwidgets.js new file mode 100755 index 0000000..0777920 --- /dev/null +++ b/static/javascripts/htmlwidgets-0.5/htmlwidgets.js @@ -0,0 +1,625 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
    ").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition as an output binding. + + // Merge defaults into the definition; don't mutate the original definition. + // The base object is a Shiny output binding if we're running in Shiny mode, + // or an empty object if we're not. + var shinyBinding = extend(new Shiny.OutputBinding(), defaults, definition); + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + // NB: shinyBinding.initialize may be undefined, as it's optional. + + // Rename initialize to make sure it isn't called by a future version + // of Shiny that does support initialize directly. + shinyBinding._htmlwidgets_initialize = shinyBinding.initialize; + delete shinyBinding.initialize; + + overrideMethod(shinyBinding, "find", function(superfunc) { + return function(scope) { + + var results = superfunc(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + }); + + overrideMethod(shinyBinding, "renderValue", function(superfunc) { + return function(el, data) { + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!this.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (this._htmlwidgets_initialize) { + var result = this._htmlwidgets_initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + Shiny.renderDependencies(data.deps); + superfunc(el, data.x, elementData(el, "init_result")); + }; + }); + + overrideMethod(shinyBinding, "resize", function(superfunc) { + return function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + superfunc(el, width, height, elementData(el, "init_result")); + } + }; + }); + + Shiny.outputBindings.register(shinyBinding, shinyBinding.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + } + + if (binding.resize) { + var lastSize = {}; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on("shown", resizeHandler); + window.jQuery(document).on("hidden", resizeHandler); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + } + }); + }); + } + + // Wait until after the document has loaded to render the widgets. + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + window.HTMLWidgets.staticRender(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + window.HTMLWidgets.staticRender(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = eval("(" + o[part] + ")"); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; +})(); + diff --git a/static/javascripts/sankey-1/d3-3.5.2/d3.min.js b/static/javascripts/sankey-1/d3-3.5.2/d3.min.js new file mode 100755 index 0000000..ddaf546 --- /dev/null +++ b/static/javascripts/sankey-1/d3-3.5.2/d3.min.js @@ -0,0 +1,5 @@ +!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null===n?0/0:+n}function e(n){return!isNaN(n)}function r(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function u(n){return n.length}function i(n){for(var t=1;n*t%1;)t*=10;return t}function o(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function a(){this._=Object.create(null)}function c(n){return(n+="")===da||n[0]===ma?ma+n:n}function l(n){return(n+="")[0]===ma?n.slice(1):n}function s(n){return c(n)in this._}function f(n){return(n=c(n))in this._&&delete this._[n]}function h(){var n=[];for(var t in this._)n.push(l(t));return n}function g(){var n=0;for(var t in this._)++n;return n}function p(){for(var n in this._)return!1;return!0}function v(){this._=Object.create(null)}function d(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function m(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=ya.length;r>e;++e){var u=ya[e]+t;if(u in n)return u}}function y(){}function M(){}function x(n){function t(){for(var t,r=e,u=-1,i=r.length;++ue;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function O(n){return xa(n,Aa),n}function Y(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var l=Ca.get(n);return l&&(n=l,c=V),a?t?u:r:t?y:i}function Z(n,t){return function(e){var r=ta.event;ta.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ta.event=r}}}function V(n,t){var e=Z(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function X(){var n=".dragsuppress-"+ ++qa,t="click"+n,e=ta.select(oa).on("touchmove"+n,b).on("dragstart"+n,b).on("selectstart"+n,b);if(za){var r=ia.style,u=r[za];r[za]="none"}return function(i){if(e.on(n,null),za&&(r[za]=u),i){var o=function(){e.on(t,null)};e.on(t,function(){b(),o()},!0),setTimeout(o,0)}}}function $(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>La&&(oa.scrollX||oa.scrollY)){e=ta.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();La=!(u.f||u.e),e.remove()}return La?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function B(){return ta.event.changedTouches[0].identifier}function W(){return ta.event.target}function J(){return oa}function G(n){return n>0?1:0>n?-1:0}function K(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function Q(n){return n>1?0:-1>n?Da:Math.acos(n)}function nt(n){return n>1?ja:-1>n?-ja:Math.asin(n)}function tt(n){return((n=Math.exp(n))-1/n)/2}function et(n){return((n=Math.exp(n))+1/n)/2}function rt(n){return((n=Math.exp(2*n))-1)/(n+1)}function ut(n){return(n=Math.sin(n/2))*n}function it(){}function ot(n,t,e){return this instanceof ot?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ot?new ot(n.h,n.s,n.l):xt(""+n,bt,ot):new ot(n,t,e)}function at(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new dt(u(n+120),u(n),u(n-120))}function ct(n,t,e){return this instanceof ct?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof ct?new ct(n.h,n.c,n.l):n instanceof st?ht(n.l,n.a,n.b):ht((n=_t((n=ta.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new ct(n,t,e)}function lt(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new st(e,Math.cos(n*=Fa)*t,Math.sin(n)*t)}function st(n,t,e){return this instanceof st?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof st?new st(n.l,n.a,n.b):n instanceof ct?lt(n.h,n.c,n.l):_t((n=dt(n)).r,n.g,n.b):new st(n,t,e)}function ft(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=gt(u)*Ja,r=gt(r)*Ga,i=gt(i)*Ka,new dt(vt(3.2404542*u-1.5371385*r-.4985314*i),vt(-.969266*u+1.8760108*r+.041556*i),vt(.0556434*u-.2040259*r+1.0572252*i))}function ht(n,t,e){return n>0?new ct(Math.atan2(e,t)*Ha,Math.sqrt(t*t+e*e),n):new ct(0/0,0/0,n)}function gt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function pt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function vt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function dt(n,t,e){return this instanceof dt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof dt?new dt(n.r,n.g,n.b):xt(""+n,dt,at):new dt(n,t,e)}function mt(n){return new dt(n>>16,255&n>>8,255&n)}function yt(n){return mt(n)+""}function Mt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function xt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(St(u[0]),St(u[1]),St(u[2]))}return(i=tc.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function bt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new ot(r,u,c)}function _t(n,t,e){n=wt(n),t=wt(t),e=wt(e);var r=pt((.4124564*n+.3575761*t+.1804375*e)/Ja),u=pt((.2126729*n+.7151522*t+.072175*e)/Ga),i=pt((.0193339*n+.119192*t+.9503041*e)/Ka);return st(116*u-16,500*(r-u),200*(u-i))}function wt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function St(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function kt(n){return"function"==typeof n?n:function(){return n}}function Et(n){return n}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Nt(t,e,n,r)}}function Nt(n,t,e,r){function u(){var n,t=c.status;if(!t&&zt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=ta.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!oa.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=ta.event;ta.event=n;try{o.progress.call(i,c)}finally{ta.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(ra(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},ta.rebind(i,o,"on"),null==r?i:i.get(Ct(r))}function Ct(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function zt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qt(){var n=Lt(),t=Tt()-n;t>24?(isFinite(t)&&(clearTimeout(ic),ic=setTimeout(qt,t)),uc=0):(uc=1,ac(qt))}function Lt(){var n=Date.now();for(oc=ec;oc;)n>=oc.t&&(oc.f=oc.c(n-oc.t)),oc=oc.n;return n}function Tt(){for(var n,t=ec,e=1/0;t;)t.f?t=n?n.n=t.n:ec=t.n:(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:Et;return function(n){var e=lc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=sc.get(g)||Ut;var M=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=ta.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=y?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!l&&f&&(x=i(x,1/0));var S=v.length+x.length+b.length+(M?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return M&&(x=i(k+x,k.length?s-b.length:1/0)),u+=v,n=x+b,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(M?n:k+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ft(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new hc(e-1)),1),e}function i(n,e){return t(n=new hc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{hc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{hc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ht(n);return c.floor=c,c.round=Ht(r),c.ceil=Ht(u),c.offset=Ht(i),c.range=a,n}function Ht(n){return function(t,e){try{hc=jt;var r=new jt;return r._=t,n(r,e)._}finally{hc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++aa;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in pc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,N.c.toString(),t,r)}function c(n,t,r){return e(n,N.x.toString(),t,r)}function l(n,t,r){return e(n,N.X.toString(),t,r)}function s(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{hc=jt;var t=new hc;return t._=n,r(t)}finally{hc=Date}}var r=t(n);return e.parse=function(n){try{hc=jt;var t=r.parse(n);return t&&t._}finally{hc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var M=ta.map(),x=It(v),b=Zt(v),_=It(d),w=Zt(d),S=It(m),k=Zt(m),E=It(y),A=Zt(y);p.forEach(function(n,t){M.set(n.toLowerCase(),t)});var N={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Yt(n.getDate(),t,2)},e:function(n,t){return Yt(n.getDate(),t,2)},H:function(n,t){return Yt(n.getHours(),t,2)},I:function(n,t){return Yt(n.getHours()%12||12,t,2)},j:function(n,t){return Yt(1+fc.dayOfYear(n),t,3)},L:function(n,t){return Yt(n.getMilliseconds(),t,3)},m:function(n,t){return Yt(n.getMonth()+1,t,2)},M:function(n,t){return Yt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Yt(n.getSeconds(),t,2)},U:function(n,t){return Yt(fc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Yt(fc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Yt(n.getFullYear()%100,t,2)},Y:function(n,t){return Yt(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:s,S:re,U:Xt,w:Vt,W:$t,x:c,X:l,y:Wt,Y:Bt,Z:Jt,"%":oe};return t}function Yt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function It(n){return new RegExp("^(?:"+n.map(ta.requote).join("|")+")","i")}function Zt(n){for(var t=new a,e=-1,r=n.length;++e68?1900:2e3)}function Kt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){vc.lastIndex=0;var r=vc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|va(t)/60,u=va(t)%60;return e+Yt(r,"0",2)+Yt(u,"0",2)}function oe(n,t,e){dc.lastIndex=0;var r=dc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);_c.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;wc.point=function(o,a){wc.point=n,r=(t=o)*Fa,u=Math.cos(a=(e=a)*Fa/2+Da/4),i=Math.sin(a)},wc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Me(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function xe(n){return[Math.atan2(n[1],n[0]),nt(n[2])]}function be(n,t){return va(n[0]-t[0])a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new qe(e,n,null,!0),l=new qe(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new qe(r,n,null,!1),l=new qe(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),ze(i),ze(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ze(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Te))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=ta.merge(g);var n=Fe(m,p);g.length?(b||(i.polygonStart(),b=!0),Ce(g,De,n,e,i)):n&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=Re(),x=t(M),b=!1;return y}}function Te(n){return n.length>1}function Re(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:y,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function De(n,t){return((n=n.x)[0]<0?n[1]-ja-Ta:ja-n[1])-((t=t.x)[0]<0?t[1]-ja-Ta:ja-t[1])}function Pe(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Da:-Da,c=va(i-e);va(c-Da)0?ja:-ja),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Da&&(va(e-u)Ta?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function je(n,t,e,r){var u;if(null==n)u=e*ja,r.point(-Da,u),r.point(0,u),r.point(Da,u),r.point(Da,0),r.point(Da,-u),r.point(0,-u),r.point(-Da,-u),r.point(-Da,0),r.point(-Da,u);else if(va(n[0]-t[0])>Ta){var i=n[0]a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Da/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+Da/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=b>=0?1:-1,w=_*b,S=w>Da,k=p*M;if(_c.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),i+=S?b+_*Pa:b,S^h>=e^m>=e){var E=de(pe(f),pe(n));Me(E);var A=de(u,E);Me(A);var N=(S^b>=0?-1:1)*nt(A[2]);(r>N||r===N&&(E[0]||E[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=m,p=M,v=x,f=n}}return(-Ta>i||Ta>i&&0>_c)^1&o}function He(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Da:-Da),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(be(e,g)||be(p,g))&&(p[0]+=Ta,p[1]+=Ta,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&be(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),M=m*m-y*(ve(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=ye(d,(-m-x)/y);if(me(b,p),b=xe(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=va(A-Da)A;if(!N&&k>E&&(_=k,k=E,E=_),C?N?k+E>0^b[1]<(va(b[0]-w)Da^(w<=b[0]&&b[0]<=S)){var z=ye(d,(-m+x)/y);return me(z,p),[b,xe(z)]}}}function u(t,e){var r=o?n:Da-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=va(i)>Ta,c=gr(n,6*Fa);return Le(t,e,c,o?[0,-n]:[-Da,n-Da])}function Oe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Ye(n,t,e,r){function u(r,u){return va(r[0]-n)0?0:3:va(r[0]-e)0?2:1:va(r[1]-t)0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&K(l,i,n)>0&&++t:i[1]<=r&&K(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,b=_=0/0}function g(){v&&(p(y,M),x&&w&&A.rejoin(),v.push(A.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Uc,Math.min(Uc,n)),t=Math.max(-Uc,Math.min(Uc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};N(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,m,y,M,x,b,_,w,S,k,E=a,A=Re(),N=Oe(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=ta.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&Ce(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return C}}function Ie(n){var t=0,e=Da/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Da/180,e=n[1]*Da/180):[180*(t/Da),180*(e/Da)]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,nt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){Fc+=u*n-r*t,r=n,u=t}var t,e,r,u;Zc.point=function(i,o){Zc.point=n,t=r=i,e=u=o},Zc.lineEnd=function(){n(t,e)}}function Xe(n,t){Hc>n&&(Hc=n),n>Yc&&(Yc=n),Oc>t&&(Oc=t),t>Ic&&(Ic=t)}function $e(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function We(n,t){Ec+=n,Ac+=t,++Nc}function Je(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Cc+=o*(t+n)/2,zc+=o*(e+r)/2,qc+=o,We(t=n,e=r)}var t,e;Xc.point=function(r,u){Xc.point=n,We(t=r,e=u)}}function Ge(){Xc.point=We}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Cc+=o*(r+n)/2,zc+=o*(u+t)/2,qc+=o,o=u*n-r*t,Lc+=o*(r+n),Tc+=o*(u+t),Rc+=3*o,We(r=n,u=t)}var t,e,r,u;Xc.point=function(i,o){Xc.point=n,We(t=r=i,e=u=o)},Xc.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Pa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:y};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(M,x,y,b,_,w,M=o[0],x=o[1],y=e,b=i[0],_=i[1],w=i[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=va(va(w)-1)i||va((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Fa),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ha,e*Ha])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*Fa,n[1]*Fa),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ha,n[1]*Ha]}function r(){a=Ae(o=lr(m,y,M),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,M=0,x=Pc,b=Et,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(x(o,f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Pc):He((_=+n)*Fa),u()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=n?Ye(n[0][0],n[0][1],n[1][0],n[1][1]):Et,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Fa,d=n[1]%360*Fa,r()):[v*Ha,d*Ha]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Fa,y=n[1]%360*Fa,M=n.length>2?n[2]%360*Fa:0,r()):[m*Ha,y*Ha,M*Ha]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*Fa,e*Fa)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Da?n-Pa:-Da>n?n+Pa:n,t]}function lr(n,t,e){return n?t||e?Ae(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>Da?t-Pa:-Da>t?t+Pa:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),nt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),nt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Pa)):(u=n+o*Pa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=xe([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,Me(e);var r=Q(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ta)%(2*Math.PI)}function vr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=ta.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function Mr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(ut(r-t)+u*o*ut(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ha,Math.atan2(o,Math.sqrt(r*r+u*u))*Ha]}:function(){return[n*Ha,t*Ha]};return p.distance=h,p}function xr(){function n(n,u){var i=Math.sin(u*=Fa),o=Math.cos(u),a=va((n*=Fa)-t),c=Math.cos(a);$c+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Bc.point=function(u,i){t=u*Fa,e=Math.sin(i*=Fa),r=Math.cos(i),Bc.point=n},Bc.lineEnd=function(){Bc.point=Bc.lineEnd=y}}function br(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function _r(n,t){function e(n,t){o>0?-ja+Ta>t&&(t=-ja+Ta):t>ja-Ta&&(t=ja-Ta);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Da/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=G(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-ja]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return va(u)u;u++){for(;r>1&&K(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function zr(n,t){return n[0]-t[0]||n[1]-t[1]}function qr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Lr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function Tr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=ol.pop()||new Rr;return t.site=n,t}function Pr(n){Xr(n),rl.remove(n),ol.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&va(e-c.circle.x)s;++s)l=a[s],c=a[s-1],Kr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Jr(c.site,l.site,null,u),Vr(c),Vr(l)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=rl._;a;)if(r=Fr(a,o)-i,r>Ta)a=a.L;else{if(u=i-Hr(a,o),!(u>Ta)){r>-Ta?(t=a.P,e=a):u>-Ta?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(rl.insert(t,c),t||e){if(t===e)return Xr(t),e=Dr(t.site),rl.insert(c,e),c.edge=e.edge=Jr(t.site,c.site),Vr(t),Vr(e),void 0;if(!e)return c.edge=Jr(t.site,c.site),void 0;Xr(t),Xr(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,M=v*v+d*d,x={x:(d*y-g*M)/m+s,y:(h*M-v*y)/m+f};Kr(e.edge,l,p,x),c.edge=Jr(l,n,null,x),e.edge=Jr(n,p,null,x),Vr(t),Vr(e)}}function Fr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Hr(n,t){var e=n.N;if(e)return Fr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Yr(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=el,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(va(r-t)>Ta||va(u-e)>Ta)&&(a.splice(o,0,new Qr(Gr(i.site,s,va(r-f)Ta?{x:f,y:va(t-f)Ta?{x:va(e-p)Ta?{x:h,y:va(t-h)Ta?{x:va(e-g)=-Ra)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=al.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,M=il._;M;)if(m.yd||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.yr||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.yg){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.xi||f>o||r>h||u>g)){if(p=n.point){var p,v=t-p[0],d=e-p[1],m=v*v+d*d;if(c>m){var y=Math.sqrt(c=m);r=t-y,u=e-y,i=t+y,o=e+y,a=p}}for(var M=n.nodes,x=.5*(s+h),b=.5*(f+g),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:l(n,s,f,x,b);break;case 1:l(n,x,f,h,b);break;case 2:l(n,s,b,x,g);break;case 3:l(n,x,b,h,g)}}}(n,r,u,i,o),a}function gu(n,t){n=ta.rgb(n),t=ta.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+Mt(Math.round(e+i*n))+Mt(Math.round(r+o*n))+Mt(Math.round(u+a*n))}}function pu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=mu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function vu(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function du(n,t){var e,r,u,i=ll.lastIndex=sl.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=ll.exec(n))&&(r=sl.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:vu(e,r)})),i=sl.lastIndex;return ir;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function mu(n,t){for(var e,r=ta.interpolators.length;--r>=0&&!(e=ta.interpolators[r](n,t)););return e}function yu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(mu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function Mu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function bu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function wu(n){return n*n*n}function Su(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function ku(n){return function(t){return Math.pow(t,n)}}function Eu(n){return 1-Math.cos(n*ja)}function Au(n){return Math.pow(2,10*(n-1))}function Nu(n){return 1-Math.sqrt(1-n*n)}function Cu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Pa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Pa/t)}}function zu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function qu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lu(n,t){n=ta.hcl(n),t=ta.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return lt(e+i*n,r+o*n,u+a*n)+""}}function Tu(n,t){n=ta.hsl(n),t=ta.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return at(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){n=ta.lab(n),t=ta.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ft(e+i*n,r+o*n,u+a*n)+""}}function Du(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Pu(n){var t=[n.a,n.b],e=[n.c,n.d],r=ju(t),u=Uu(t,e),i=ju(Fu(e,t,-u))||0;t[0]*e[1]180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:vu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:vu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:vu(g[0],p[0])},{i:e-2,x:vu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i=0;)e.push(u[r])}function Qu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++oe;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function si(n){return n.reduce(fi,0)}function fi(n,t){return n+t[1]}function hi(n,t){return gi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function gi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function pi(n){return[ta.min(n),ta.max(n)]}function vi(n,t){return n.value-t.value}function di(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function mi(n,t){n._pack_next=t,t._pack_prev=n}function yi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Mi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(xi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],wi(r,u,i),t(i),di(r,i),r._pack_prev=i,di(i,u),u=r._pack_next,o=3;l>o;o++){wi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(yi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!yi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.ro;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(bi)}}function xi(n){n._pack_next=n._pack_prev=n}function bi(n){delete n._pack_next,delete n._pack_prev}function _i(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Ci(n,t,e){return n.a.parent===t.parent?n.a:e}function zi(n){return 1+ta.max(n,function(n){return n.y})}function qi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Li(n){var t=n.children;return t&&t.length?Li(t[0]):n}function Ti(n){var t,e=n.children;return e&&(t=e.length)?Ti(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Di(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Pi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ui(n){return n.rangeExtent?n.rangeExtent():Pi(n.range())}function ji(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Fi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Hi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:bl}function Oi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Oi:ji,c=r?Yu:Ou;return o=u(n,t,c,e),a=u(t,n,c,mu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Du)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Xi(n,t)},i.tickFormat=function(t,e){return $i(n,t,e)},i.nice=function(t){return Zi(n,t),u()},i.copy=function(){return Yi(n,t,e,r)},u()}function Ii(n,t){return ta.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Zi(n,t){return Fi(n,Hi(Vi(n,t)[2]))}function Vi(n,t){null==t&&(t=10);var e=Pi(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Xi(n,t){return ta.range.apply(ta,Vi(n,t))}function $i(n,t,e){var r=Vi(n,t);if(e){var u=lc.exec(e);if(u.shift(),"s"===u[8]){var i=ta.formatPrefix(Math.max(va(r[0]),va(r[1])));return u[7]||(u[7]="."+Bi(i.scale(r[2]))),u[8]="f",e=ta.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Wi(u[8],r)),e=u.join("")}else e=",."+Bi(r[2])+"f";return ta.format(e)}function Bi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Wi(n,t){var e=Bi(t[2]);return n in _l?Math.abs(e-Bi(Math.max(va(t[0]),va(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Ji(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Fi(r.map(u),e?Math:Sl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Pi(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++0;h--)o.push(i(l)*h);for(l=0;o[l]c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return wl;arguments.length<2?t=wl:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ji(n.copy(),t,e,r)},Ii(o,n)}function Gi(n,t,e){function r(t){return n(u(t))}var u=Ki(t),i=Ki(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Xi(e,n)},r.tickFormat=function(n,t){return $i(e,n,t)},r.nice=function(n){return r.domain(Zi(e,n))},r.exponent=function(o){return arguments.length?(u=Ki(t=o),i=Ki(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Gi(n.copy(),t,e)},Ii(r,n)}function Ki(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Qi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++on?[0/0,0/0]:[n>0?a[n-1]:r[0],nt?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return to(n,t,e)},u()}function eo(n,t){function e(e){return e>=e?t[ta.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return eo(n,t)},e}function ro(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Xi(n,t)},t.tickFormat=function(t,e){return $i(n,t,e)},t.copy=function(){return ro(n)},t}function uo(){return 0}function io(n){return n.innerRadius}function oo(n){return n.outerRadius}function ao(n){return n.startAngle}function co(n){return n.endAngle}function lo(n){return n&&n.padAngle}function so(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function fo(n,t,e,r,u){var i=n[0]-t[0],o=n[1]-t[1],a=(u?r:-r)/Math.sqrt(i*i+o*o),c=a*o,l=-a*i,s=n[0]+c,f=n[1]+l,h=t[0]+c,g=t[1]+l,p=(s+h)/2,v=(f+g)/2,d=h-s,m=g-f,y=d*d+m*m,M=e-r,x=s*g-h*f,b=(0>m?-1:1)*Math.sqrt(M*M*y-x*x),_=(x*m-d*b)/y,w=(-x*d-m*b)/y,S=(x*m+d*b)/y,k=(-x*d+m*b)/y,E=_-p,A=w-v,N=S-p,C=k-v;return E*E+A*A>N*N+C*C&&(_=S,w=k),[[_-c,w-l],[_*e/M,w*e/M]]}function ho(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=kt(e),p=kt(r);++f1&&u.push("H",r[0]),u.join("")}function mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function To(n){return n.length<3?go(n):n[0]+_o(n,Lo(n))}function Ro(n){for(var t,e,r,u=-1,i=n.length;++ur)return s();var u=i[i.active];u&&(--i.count,delete i[i.active],u.event&&u.event.interrupt.call(n,n.__data__,u.index)),i.active=r,o.event&&o.event.start.call(n,n.__data__,t),o.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&v.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return p.c=l(e||1)?Ne:l,1},0,c)}function l(e){if(i.active!==r)return 1;for(var u=e/f,a=h(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,n.__data__,t),s()):void 0}function s(){return--i.count?delete i[r]:delete n[e],1}var f,h,g=o.delay,p=oc,v=[];return p.t=g+c,u>=g?a(u-g):(p.c=a,void 0)},0,c)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Wl,u);return i==Wl.length?[t.year,Vi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Wl[i-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Pi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Ii(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.2"};Date.now||(Date.now=function(){return+new Date});var ea=[].slice,ra=function(n){return ea.call(n)},ua=document,ia=ua.documentElement,oa=window;try{ra(ia.childNodes)[0].nodeType}catch(aa){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{ua.createElement("div").style.setProperty("opacity",0,"")}catch(ca){var la=oa.Element.prototype,sa=la.setAttribute,fa=la.setAttributeNS,ha=oa.CSSStyleDeclaration.prototype,ga=ha.setProperty;la.setAttribute=function(n,t){sa.call(this,n,t+"")},la.setAttributeNS=function(n,t,e){fa.call(this,n,t,e+"")},ha.setProperty=function(n,t,e){ga.call(this,n,t+"",e)}}ta.ascending=n,ta.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ta.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ur&&(e=r)}else{for(;++u=r){e=r;break}for(;++ur&&(e=r)}return e},ta.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=r){e=r;break}for(;++ue&&(e=r)}else{for(;++u=r){e=r;break}for(;++ue&&(e=r)}return e},ta.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}else{for(;++i=r){e=u=r;break}for(;++ir&&(e=r),r>u&&(u=r))}return[e,u]},ta.sum=function(n,t){var r,u=0,i=n.length,o=-1;if(1===arguments.length)for(;++o1?c/(s-1):void 0},ta.deviation=function(){var n=ta.variance.apply(this,arguments);return n?Math.sqrt(n):n};var pa=r(n);ta.bisectLeft=pa.left,ta.bisect=ta.bisectRight=pa.right,ta.bisector=function(t){return r(1===t.length?function(e,r){return n(t(e),r)}:t)},ta.shuffle=function(n,t,e){(i=arguments.length)<3&&(e=n.length,2>i&&(t=0));for(var r,u,i=e-t;i;)u=0|Math.random()*i--,r=n[i+t],n[i+t]=n[u+t],n[u+t]=r;return n},ta.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ta.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},ta.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=ta.min(arguments,u),e=new Array(t);++n=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var va=Math.abs;ta.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,u=[],o=i(va(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)u.push(r/o);else for(;(r=n+e*++a)=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,v=i[c++],d=new a;++g=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++ur){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(T(e,n[e],t));return this}if(2>r)return oa.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(T(n,t,e))},ka.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},ka.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},ka.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},ka.append=function(n){return n=D(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},ka.insert=function(n,t){return n=D(n),t=k(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},ka.remove=function(){return this.each(P)},ka.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new a,y=new Array(o);for(r=-1;++rr;++r)p[r]=U(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++ii;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return S(u)},ka.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},ka.sort=function(n){n=F.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},ka.size=function(){var n=0;return H(this,function(){++n}),n};var Aa=[];ta.selection.enter=O,ta.selection.enter.prototype=Aa,Aa.append=ka.append,Aa.empty=ka.empty,Aa.node=ka.node,Aa.call=ka.call,Aa.size=ka.size,Aa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(I(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(I(n,t,e))};var Ca=ta.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ca.forEach(function(n){"on"+n in ua&&Ca.remove(n)});var za="onselectstart"in ua?null:m(ia.style,"userSelect"),qa=0;ta.mouse=function(n){return $(n,_())};var La=/WebKit/.test(oa.navigator.userAgent)?-1:0;ta.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=_().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return $(n,r)},ta.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],p|=n|e,M=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&ta.event.target===f),g({type:"dragend"}))}var l,s=this,f=ta.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=ta.select(u()).on(i+d,a).on(o+d,c),y=X(),M=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-M[0],l.y-M[1]]):l=[0,0],g({type:"dragstart"})}}var e=w(n,"drag","dragstart","dragend"),r=null,u=t(y,ta.mouse,J,"mousemove","mouseup"),i=t(B,ta.touch,W,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},ta.rebind(n,e,"on")},ta.touches=function(n,t){return arguments.length<2&&(t=_().touches),t?ra(t).map(function(t){var e=$(n,t);return e.identifier=t.identifier,e}):[]};var Ta=1e-6,Ra=Ta*Ta,Da=Math.PI,Pa=2*Da,Ua=Pa-Ta,ja=Da/2,Fa=Da/180,Ha=180/Da,Oa=Math.SQRT2,Ya=2,Ia=4;ta.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=et(v),o=i/(Ya*h)*(e*rt(Oa*t+v)-tt(v));return[r+o*l,u+o*s,i*e/et(Oa*t+v)]}return[r+n*l,u+n*s,i*Math.exp(Oa*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Ia*f)/(2*i*Ya*h),p=(c*c-i*i-Ia*f)/(2*c*Ya*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Oa;return e.duration=1e3*y,e},ta.behavior.zoom=function(){function n(n){n.on(z,s).on(Xa+".zoom",h).on("dblclick.zoom",g).on(T,f)}function t(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function e(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function r(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=e(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function i(t,e,i,o){t.__chart__={x:k.x,y:k.y,k:k.k},r(Math.pow(2,o)),u(v=e,i),t=ta.select(t),N>0&&(t=t.transition().duration(N)),t.call(n.event)}function o(){x&&x.domain(M.range().map(function(n){return(n-k.x)/k.k}).map(M.invert)),S&&S.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function a(n){C++||n({type:"zoomstart"})}function c(n){o(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function l(n){--C||n({type:"zoomend"}),v=null}function s(){function n(){s=1,u(ta.mouse(r),h),c(o)}function e(){f.on(q,null).on(L,null),g(s&&ta.event.target===i),l(o)}var r=this,i=ta.event.target,o=R.of(r,arguments),s=0,f=ta.select(oa).on(q,n).on(L,e),h=t(ta.mouse(r)),g=X();Fl.call(r),a(o)}function f(){function n(){var n=ta.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=t(n))}),n}function e(){var t=ta.event.target;ta.select(t).on(x,o).on(_,h),w.push(t);for(var e=ta.event.changedTouches,r=0,u=e.length;u>r;++r)d[e[r].identifier]=null;var a=n(),c=Date.now();if(1===a.length){if(500>c-y){var l=a[0];i(p,l,d[l.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),b()}y=c}else if(a.length>1){var l=a[0],s=a[1],f=l[0]-s[0],g=l[1]-s[1];m=f*f+g*g}}function o(){var n,t,e,i,o=ta.touches(p);Fl.call(p);for(var a=0,l=o.length;l>a;++a,i=null)if(e=o[a],i=d[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*g)}y=null,u(n,t),c(v)}function h(){if(ta.event.touches.length){for(var t=ta.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var u in d)return void n()}ta.selectAll(w).on(M,null),S.on(z,s).on(T,f),E(),l(v)}var g,p=this,v=R.of(p,arguments),d={},m=0,M=".zoom-"+ta.event.changedTouches[0].identifier,x="touchmove"+M,_="touchend"+M,w=[],S=ta.select(p),E=X();e(),a(v),S.on(z,null).on(T,e)}function h(){var n=R.of(this,arguments);m?clearTimeout(m):(p=t(v=d||ta.mouse(this)),Fl.call(this),a(n)),m=setTimeout(function(){m=null,l(n)},50),b(),r(Math.pow(2,.002*Za())*k.k),u(v,p),c(n)}function g(){var n=ta.mouse(this),e=Math.log(k.k)/Math.LN2;i(this,n,t(n),ta.event.shiftKey?Math.ceil(e)-1:Math.floor(e)+1)}var p,v,d,m,y,M,x,_,S,k={x:0,y:0,k:1},E=[960,500],A=Va,N=250,C=0,z="mousedown.zoom",q="mousemove.zoom",L="mouseup.zoom",T="touchstart.zoom",R=w(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=R.of(this,arguments),t=k;Ul?ta.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},a(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],u=v?v[0]:e/2,i=v?v[1]:r/2,o=ta.interpolateZoom([(u-k.x)/k.k,(i-k.y)/k.k,e/k.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:u-r[0]*a,y:i-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){l(n)}).each("end.zoom",function(){l(n)}):(this.__chart__=k,a(n),c(n),l(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},o(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:+t},o(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Va:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(d=t&&[+t[0],+t[1]],n):d},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(N=+t,n):N},n.x=function(t){return arguments.length?(x=t,M=t.copy(),k={x:0,y:0,k:1},n):x},n.y=function(t){return arguments.length?(S=t,_=t.copy(),k={x:0,y:0,k:1},n):S},ta.rebind(n,R,"on")};var Za,Va=[0,1/0],Xa="onwheel"in ua?(Za=function(){return-ta.event.deltaY*(ta.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ua?(Za=function(){return ta.event.wheelDelta},"mousewheel"):(Za=function(){return-ta.event.detail},"MozMousePixelScroll");ta.color=it,it.prototype.toString=function(){return this.rgb()+""},ta.hsl=ot;var $a=ot.prototype=new it;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ot(this.h,this.s,n*this.l)},$a.rgb=function(){return at(this.h,this.s,this.l)},ta.hcl=ct;var Ba=ct.prototype=new it;Ba.brighter=function(n){return new ct(this.h,this.c,Math.min(100,this.l+Wa*(arguments.length?n:1)))},Ba.darker=function(n){return new ct(this.h,this.c,Math.max(0,this.l-Wa*(arguments.length?n:1)))},Ba.rgb=function(){return lt(this.h,this.c,this.l).rgb()},ta.lab=st;var Wa=18,Ja=.95047,Ga=1,Ka=1.08883,Qa=st.prototype=new it;Qa.brighter=function(n){return new st(Math.min(100,this.l+Wa*(arguments.length?n:1)),this.a,this.b)},Qa.darker=function(n){return new st(Math.max(0,this.l-Wa*(arguments.length?n:1)),this.a,this.b)},Qa.rgb=function(){return ft(this.l,this.a,this.b)},ta.rgb=dt;var nc=dt.prototype=new it;nc.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new dt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new dt(u,u,u)},nc.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new dt(n*this.r,n*this.g,n*this.b)},nc.hsl=function(){return bt(this.r,this.g,this.b)},nc.toString=function(){return"#"+Mt(this.r)+Mt(this.g)+Mt(this.b)};var tc=ta.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});tc.forEach(function(n,t){tc.set(n,mt(t))}),ta.functor=kt,ta.xhr=At(Et),ta.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Nt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new v,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},ta.csv=ta.dsv(",","text/csv"),ta.tsv=ta.dsv(" ","text/tab-separated-values");var ec,rc,uc,ic,oc,ac=oa[m(oa,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ta.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};rc?rc.n=i:ec=i,rc=i,uc||(ic=clearTimeout(ic),uc=1,ac(qt))},ta.timer.flush=function(){Lt(),Tt()},ta.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var cc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);ta.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ta.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),cc[8+e/3]};var lc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,sc=ta.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ta.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),fc=ta.time={},hc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){gc.setUTCDate.apply(this._,arguments)},setDay:function(){gc.setUTCDay.apply(this._,arguments)},setFullYear:function(){gc.setUTCFullYear.apply(this._,arguments)},setHours:function(){gc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){gc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){gc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){gc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){gc.setUTCSeconds.apply(this._,arguments)},setTime:function(){gc.setTime.apply(this._,arguments)}};var gc=Date.prototype;fc.year=Ft(function(n){return n=fc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),fc.years=fc.year.range,fc.years.utc=fc.year.utc.range,fc.day=Ft(function(n){var t=new hc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),fc.days=fc.day.range,fc.days.utc=fc.day.utc.range,fc.dayOfYear=function(n){var t=fc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=fc[n]=Ft(function(n){return(n=fc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});fc[n+"s"]=e.range,fc[n+"s"].utc=e.utc.range,fc[n+"OfYear"]=function(n){var e=fc.year(n).getDay();return Math.floor((fc.dayOfYear(n)+(e+t)%7)/7)}}),fc.week=fc.sunday,fc.weeks=fc.sunday.range,fc.weeks.utc=fc.sunday.utc.range,fc.weekOfYear=fc.sundayOfYear;var pc={"-":"",_:" ",0:"0"},vc=/^\s*\d+/,dc=/^%/;ta.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var mc=ta.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ta.format=mc.numberFormat,ta.geo={},ce.prototype={s:0,t:0,add:function(n){le(n,this.t,yc),le(yc.s,this.s,this),this.s?this.t+=yc.t:this.s=yc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var yc=new ce;ta.geo.stream=function(n,t){n&&Mc.hasOwnProperty(n.type)?Mc[n.type](n,t):se(n,t)};var Mc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++rn?4*Da+n:n,wc.lineStart=wc.lineEnd=wc.point=y}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*Fa,e*Fa]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);Me(o),o=xe(o);var c=t-p,l=c>0?1:-1,v=o[0]*Ha*l,d=va(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Ha;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Ha;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=va(r)>180?r+(r>0?360:-360):r}else v=n,d=e;wc.point(n,e),t(n,e)}function i(){wc.lineStart()}function o(){u(v,d),wc.lineEnd(),va(y)>Ta&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n_c?(s=-(h=180),f=-(g=90)):y>Ta?g=90:-Ta>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){Sc=kc=Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,Dc);var t=Lc,e=Tc,r=Rc,u=t*t+e*e+r*r;return Ra>u&&(t=Cc,e=zc,r=qc,Ta>kc&&(t=Ec,e=Ac,r=Nc),u=t*t+e*e+r*r,Ra>u)?[0/0,0/0]:[Math.atan2(e,t)*Ha,nt(r/Math.sqrt(u))*Ha]};var Sc,kc,Ec,Ac,Nc,Cc,zc,qc,Lc,Tc,Rc,Dc={sphere:y,point:_e,lineStart:Se,lineEnd:ke,polygonStart:function(){Dc.lineStart=Ee},polygonEnd:function(){Dc.lineStart=Se}},Pc=Le(Ne,Pe,je,[-Da,-Da/2]),Uc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ye(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ta,f+.12*l+Ta],[s-.214*l-Ta,f+.234*l-Ta]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ta,f+.166*l+Ta],[s-.115*l-Ta,f+.234*l-Ta]]).stream(c).point,n},n.scale(1070)};var jc,Fc,Hc,Oc,Yc,Ic,Zc={point:y,lineStart:y,lineEnd:y,polygonStart:function(){Fc=0,Zc.lineStart=Ve},polygonEnd:function(){Zc.lineStart=Zc.lineEnd=Zc.point=y,jc+=va(Fc/2)}},Vc={point:Xe,lineStart:y,lineEnd:y,polygonStart:y,polygonEnd:y},Xc={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){Xc.lineStart=Ke},polygonEnd:function(){Xc.point=We,Xc.lineStart=Je,Xc.lineEnd=Ge}};ta.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),ta.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return jc=0,ta.geo.stream(n,u(Zc)),jc},n.centroid=function(n){return Ec=Ac=Nc=Cc=zc=qc=Lc=Tc=Rc=0,ta.geo.stream(n,u(Xc)),Rc?[Lc/Rc,Tc/Rc]:qc?[Cc/qc,zc/qc]:Nc?[Ec/Nc,Ac/Nc]:[0/0,0/0]},n.bounds=function(n){return Yc=Ic=-(Hc=Oc=1/0),ta.geo.stream(n,u(Vc)),[[Hc,Oc],[Yc,Ic]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Et,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(ta.geo.albersUsa()).context(null)},ta.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ta.geo.projection=ur,ta.geo.projectionMutator=ir,(ta.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,ta.geo.rotation=function(n){function t(t){return t=n(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t}return n=lr(n[0]%360*Fa,n[1]*Fa,n.length>2?n[2]*Fa:0),t.invert=function(t){return t=n.invert(t[0]*Fa,t[1]*Fa),t[0]*=Ha,t[1]*=Ha,t},t},cr.invert=ar,ta.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=lr(-n[0]*Fa,-n[1]*Fa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ha,n[1]*=Ha}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*Fa,u*Fa),n):t},n.precision=function(r){return arguments.length?(e=gr(t*Fa,(u=+r)*Fa),n):u},n.angle(90)},ta.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Fa,u=n[1]*Fa,i=t[1]*Fa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},ta.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ta.range(Math.ceil(i/d)*d,u,d).map(h).concat(ta.range(Math.ceil(l/m)*m,c,m).map(g)).concat(ta.range(Math.ceil(r/p)*p,e,p).filter(function(n){return va(n%d)>Ta}).map(s)).concat(ta.range(Math.ceil(a/v)*v,o,v).filter(function(n){return va(n%m)>Ta}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=vr(a,o,90),f=dr(r,e,y),h=vr(l,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Ta],[180,90-Ta]]).minorExtent([[-180,-80-Ta],[180,80+Ta]])},ta.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return ta.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},ta.geo.interpolate=function(n,t){return Mr(n[0]*Fa,n[1]*Fa,t[0]*Fa,t[1]*Fa)},ta.geo.length=function(n){return $c=0,ta.geo.stream(n,Bc),$c};var $c,Bc={sphere:y,point:y,lineStart:xr,lineEnd:y,polygonStart:y,polygonEnd:y},Wc=br(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ta.geo.azimuthalEqualArea=function(){return ur(Wc)}).raw=Wc;var Jc=br(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},Et);(ta.geo.azimuthalEquidistant=function(){return ur(Jc)}).raw=Jc,(ta.geo.conicConformal=function(){return Ie(_r)}).raw=_r,(ta.geo.conicEquidistant=function(){return Ie(wr)}).raw=wr;var Gc=br(function(n){return 1/n},Math.atan);(ta.geo.gnomonic=function(){return ur(Gc)}).raw=Gc,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-ja]},(ta.geo.mercator=function(){return kr(Sr)}).raw=Sr;var Kc=br(function(){return 1},Math.asin);(ta.geo.orthographic=function(){return ur(Kc)}).raw=Kc;var Qc=br(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ta.geo.stereographic=function(){return ur(Qc)}).raw=Qc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-ja]},(ta.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Er,ta.geom={},ta.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=kt(e),i=kt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(zr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Cr(a),s=Cr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ta)*Ta,y:Math.round(o(n,t)/Ta)*Ta,i:t}})}var r=Ar,u=Nr,i=r,o=u,a=cl;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Ir),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c=l,h=r>=s,g=h<<1|f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=su()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,M=kt(a),x=kt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.xm&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);v>b&&(v=b),d>_&&(d=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=su();if(k.add=function(n){i(k,n,+M(n,++g),+x(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},k.find=function(n){return hu(k,n[0],n[1],v,d,m,y)},g=-1,null==t){for(;++g=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||Et,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:pl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=ta.event.x,n.py=ta.event.y,a.resume()}var e,r,u,i,o,a={},c=ta.dispatch("start","tick","end"),l=[1,1],s=.9,f=vl,h=dl,g=-30,p=ml,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,M,x,b=m.length,_=y.length;for(e=0;_>e;++e)a=y[e],f=a.source,h=a.target,M=h.x-f.x,x=h.y-f.y,(p=M*M+x*x)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,M*=p,x*=p,h.x-=M*(d=f.weight/(h.weight+f.weight)),h.y-=x*d,f.x+=M*(d=1-d),f.y+=x*d);if((d=r*v)&&(M=l[0]/2,x=l[1]/2,e=-1,d))for(;++e0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ta.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++at;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=ta.behavior.drag().origin(Et).on("dragstart.force",Xu).on("drag.force",t).on("dragend.force",$u)),arguments.length?(this.on("mouseover.force",Bu).on("mouseout.force",Wu).call(e),void 0):e},ta.rebind(a,c,"on")};var vl=20,dl=1,ml=1/0;ta.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Qu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ei,e=ni,r=ti;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ku(t,function(n){n.children&&(n.value=0)}),Qu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ta.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++lf?-1:1),p=(f-c*g)/ta.sum(l),v=ta.range(c),d=[];return null!=e&&v.sort(e===yl?function(n,t){return l[t]-l[n]}:function(n,t){return e(o[n],o[t])}),v.forEach(function(n){d[n]={data:o[n],value:a=l[n],startAngle:s,endAngle:s+=a*p+g,padAngle:h}}),d}var t=Number,e=yl,r=0,u=Pa,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var yl={};ta.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=ta.permute(l,f),s=ta.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=Et,e=ai,r=ci,u=oi,i=ui,o=ii;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:Ml.get(t)||ai,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:xl.get(t)||ci,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var Ml=ta.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(li),i=n.map(si),o=ta.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ta.range(n.length).reverse()},"default":ai}),xl=ta.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ci});ta.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i0)for(i=-1;++i=s[0]&&a<=s[1]&&(o=c[ta.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=pi,u=hi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=kt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return gi(n,t)}:kt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ta.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Qu(a,function(n){n.r=+s(n.value)}),Qu(a,Mi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Qu(a,function(n){n.r+=f}),Qu(a,Mi),Qu(a,function(n){n.r-=f})}return _i(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=ta.layout.hierarchy().sort(vi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Gu(n,e)},ta.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Qu(h,e),h.parent.m=-h.z,Ku(h,r),l)Ku(f,i);else{var g=f,p=f,v=f;Ku(f,function(n){n.xp.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Ku(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ni(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=Ei(o),u=ki(u),o&&u;)c=ki(c),i=Ei(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ai(Ci(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!Ei(i)&&(i.t=o,i.m+=f-s),u&&!ki(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=ta.layout.hierarchy().sort(null).value(null),a=Si,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Gu(n,o)},ta.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Qu(c,function(n){var t=n.children;t&&t.length?(n.x=qi(t),n.y=zi(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Li(c),f=Ti(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Qu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=ta.layout.hierarchy().sort(null).value(null),e=Si,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Gu(n,t)},ta.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++ut?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++oe&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++ie.dx)&&(s=e.dx);++ie&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var bl={floor:Et,ceil:Et};ta.scale.linear=function(){return Yi([0,1],[0,1],mu,!1)};var _l={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Ji(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var wl=ta.format(".0e"),Sl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Gi(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return Qi([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(kl)},ta.scale.category20=function(){return ta.scale.ordinal().range(El)},ta.scale.category20b=function(){return ta.scale.ordinal().range(Al)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Nl)};var kl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(yt),El=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(yt),Al=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(yt),Nl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(yt);ta.scale.quantile=function(){return no([],[])},ta.scale.quantize=function(){return to(0,1,[0,1])},ta.scale.threshold=function(){return eo([.5],[0,1])},ta.scale.identity=function(){return ro([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-ja,f=a.apply(this,arguments)-ja,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ua)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===Cl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=nt(d/l*Math.sin(m))),n&&(E=nt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=Da?0:1;if(A&&so(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=Da?0:1;if(E&&so(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Lr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=fo(null==S?[_,w]:[S,k],[y,M],l,H,g),Y=fo([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^so(O[1][0],O[1][1],Y[1][0],Y[1][1]),",",g," ",Y[1],"A",H,",",H," 0 0,",v," ",Y[0]):N.push("M",O[0],"A",H,",",H," 0 1,",v," ",Y[0])}else N.push("M",y,",",M);if(null!=S){var I=Math.min(p,(n-F)/(j-1)),Z=fo([y,M],[S,k],n,-I,g),V=fo([_,w],null==x?[y,M]:[x,b],n,-I,g);p===I?N.push("L",V[0],"A",I,",",I," 0 0,",v," ",V[1],"A",n,",",n," 0 ",g^so(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-g," ",Z[1],"A",I,",",I," 0 0,",v," ",Z[0]):N.push("L",V[0],"A",I,",",I," 0 0,",v," ",Z[0])}else N.push("L",_,",",w)}else N.push("M",y,",",M),null!=x&&N.push("A",l,",",l," 0 ",C,",",g," ",x,",",b),N.push("L",_,",",w),null!=S&&N.push("A",n,",",n," 0 ",q,",",1-g," ",S,",",k);return N.push("Z"),N.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=io,r=oo,u=uo,i=Cl,o=ao,a=co,c=lo;return n.innerRadius=function(t){return arguments.length?(e=kt(t),n):e},n.outerRadius=function(t){return arguments.length?(r=kt(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=kt(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==Cl?Cl:kt(t),n):i},n.startAngle=function(t){return arguments.length?(o=kt(t),n):o},n.endAngle=function(t){return arguments.length?(a=kt(t),n):a},n.padAngle=function(t){return arguments.length?(c=kt(t),n):c},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-ja;return[Math.cos(t)*n,Math.sin(t)*n]},n};var Cl="auto";ta.svg.line=function(){return ho(Et)};var zl=ta.map({linear:go,"linear-closed":po,step:vo,"step-before":mo,"step-after":yo,basis:So,"basis-open":ko,"basis-closed":Eo,bundle:Ao,cardinal:bo,"cardinal-open":Mo,"cardinal-closed":xo,monotone:To});zl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var ql=[0,2/3,1/3,0],Ll=[0,1/3,2/3,0],Tl=[0,1/6,2/3,1/6];ta.svg.line.radial=function(){var n=ho(Ro);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},mo.reverse=yo,yo.reverse=mo,ta.svg.area=function(){return Do(Et)},ta.svg.area.radial=function(){var n=Do(Ro);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ta.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)-ja,s=l.call(n,u,r)-ja;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Da)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Po,c=ao,l=co;return n.radius=function(t){return arguments.length?(a=kt(t),n):a},n.source=function(t){return arguments.length?(i=kt(t),n):i},n.target=function(t){return arguments.length?(o=kt(t),n):o},n.startAngle=function(t){return arguments.length?(c=kt(t),n):c},n.endAngle=function(t){return arguments.length?(l=kt(t),n):l},n},ta.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=Uo;return n.source=function(e){return arguments.length?(t=kt(e),n):t},n.target=function(t){return arguments.length?(e=kt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ta.svg.diagonal.radial=function(){var n=ta.svg.diagonal(),t=Uo,e=n.projection;return n.projection=function(n){return arguments.length?e(jo(t=n)):t},n},ta.svg.symbol=function(){function n(n,r){return(Rl.get(t.call(this,n,r))||Oo)(e.call(this,n,r))}var t=Ho,e=Fo;return n.type=function(e){return arguments.length?(t=kt(e),n):t},n.size=function(t){return arguments.length?(e=kt(t),n):e},n};var Rl=ta.map({circle:Oo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Pl)),e=t*Pl;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Dl),e=t*Dl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ta.svg.symbolTypes=Rl.keys();var Dl=Math.sqrt(3),Pl=Math.tan(30*Fa);ka.transition=function(n){for(var t,e,r=Ul||++Ol,u=Xo(n),i=[],o=jl||{time:Date.now(),ease:Su,delay:0,duration:250},a=-1,c=this.length;++ai;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Io(u,this.namespace,this.id)},Hl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):H(this,null==t?function(t){t[r][e].tween.remove(n)}:function(u){u[r][e].tween.set(n,t)})},Hl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Hu:mu,a=ta.ns.qualify(n);return Zo(this,"attr."+n,t,a.local?i:u)},Hl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=ta.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Hl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=oa.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=mu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Zo(this,"style."+n,t,u)},Hl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,oa.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Hl.text=function(n){return Zo(this,"text",n,Vo)},Hl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Hl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ta.ease.apply(ta,arguments)),H(this,function(r){r[e][t].ease=n}))},Hl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:H(this,"function"==typeof n?function(r,u,i){r[e][t].delay=+n.call(r,r.__data__,u,i)}:(n=+n,function(r){r[e][t].delay=n}))},Hl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:H(this,"function"==typeof n?function(r,u,i){r[e][t].duration=Math.max(1,n.call(r,r.__data__,u,i))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Hl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var u=jl,i=Ul;try{Ul=e,H(this,function(t,u,i){jl=t[r][e],n.call(t,t.__data__,u,i)})}finally{jl=u,Ul=i}}else H(this,function(u){var i=u[r][e];(i.event||(i.event=ta.dispatch("start","end","interrupt"))).on(n,t)});return this},Hl.transition=function(){for(var n,t,e,r,u=this.id,i=++Ol,o=this.namespace,a=[],c=0,l=this.length;l>c;c++){a.push(n=[]);for(var t=this[c],s=0,f=t.length;f>s;s++)(e=t[s])&&(r=e[o][u],$o(e,s,o,i,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Io(a,o,i)},ta.svg.axis=function(){function n(n){n.each(function(){var n,l=ta.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):Et:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ta),d=ta.transition(p.exit()).style("opacity",Ta).remove(),m=ta.transition(p.order()).style("opacity",1),y=Math.max(u,0)+o,M=Ui(f),x=l.selectAll(".domain").data([0]),b=(x.enter().append("path").attr("class","domain"),ta.transition(x));v.append("line"),v.append("text");var _,w,S,k,E=v.select("line"),A=m.select("line"),N=p.select("text").text(g),C=v.select("text"),z=m.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Bo,_="x",S="y",w="x2",k="y2",N.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),b.attr("d","M"+M[0]+","+q*i+"V0H"+M[1]+"V"+q*i)):(n=Wo,_="y",S="x",w="y2",k="x2",N.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),b.attr("d","M"+q*i+","+M[0]+"H0V"+M[1]+"H"+q*i)),E.attr(k,q*u),C.attr(S,q*y),A.attr(w,0).attr(k,q*u),z.attr(_,0).attr(S,q*y),f.rangeBand){var L=f,T=L.rangeBand()/2;s=f=function(n){return L(n)+T}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=ta.scale.linear(),r=Yl,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Il?t+"":Yl,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Yl="bottom",Il={top:1,right:1,bottom:1,left:1};ta.svg.brush=function(){function n(i){i.each(function(){var i=ta.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,Et);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Zl[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=ta.transition(i),h=ta.transition(o);c&&(s=Ui(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=Ui(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==ta.event.keyCode&&(N||(y=null,z[0]-=s[1],z[1]-=f[1],N=2),b())}function p(){32==ta.event.keyCode&&2==N&&(z[0]+=s[1],z[1]+=f[1],N=0,b())}function v(){var n=ta.mouse(x),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),N||(ta.event.altKey?(y||(y=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ta.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),w({type:"brushend"})}var y,M,x=this,_=ta.select(ta.event.target),w=a.of(x,arguments),S=ta.select(x),k=_.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,N=_.classed("extent"),C=X(),z=ta.mouse(x),q=ta.select(oa).on("keydown.brush",u).on("keyup.brush",p);if(ta.event.changedTouches?q.on("touchmove.brush",v).on("touchend.brush",m):q.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),N)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var L=+/w$/.test(k),T=+/^n/.test(k);M=[s[1-L]-z[0],f[1-T]-z[1]],z[0]=s[L],z[1]=f[T]}else ta.event.altKey&&(y=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),ta.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=w(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Vl[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ul?ta.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=yu(s,t.x),r=yu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Vl[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Vl[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},ta.rebind(n,a,"on")};var Zl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Vl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Xl=fc.format=mc.timeFormat,$l=Xl.utc,Bl=$l("%Y-%m-%dT%H:%M:%S.%LZ");Xl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:Bl,Jo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Jo.toString=Bl.toString,fc.second=Ft(function(n){return new hc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),fc.seconds=fc.second.range,fc.seconds.utc=fc.second.utc.range,fc.minute=Ft(function(n){return new hc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),fc.minutes=fc.minute.range,fc.minutes.utc=fc.minute.utc.range,fc.hour=Ft(function(n){var t=n.getTimezoneOffset()/60;return new hc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),fc.hours=fc.hour.range,fc.hours.utc=fc.hour.utc.range,fc.month=Ft(function(n){return n=fc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),fc.months=fc.month.range,fc.months.utc=fc.month.utc.range;var Wl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Jl=[[fc.second,1],[fc.second,5],[fc.second,15],[fc.second,30],[fc.minute,1],[fc.minute,5],[fc.minute,15],[fc.minute,30],[fc.hour,1],[fc.hour,3],[fc.hour,6],[fc.hour,12],[fc.day,1],[fc.day,2],[fc.week,1],[fc.month,1],[fc.month,3],[fc.year,1]],Gl=Xl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ne]]),Kl={range:function(n,t,e){return ta.range(Math.ceil(n/e)*e,+t,e).map(Ko)},floor:Et,ceil:Et};Jl.year=fc.year,fc.scale=function(){return Go(ta.scale.linear(),Jl,Gl)};var Ql=Jl.map(function(n){return[n[0].utc,n[1]]}),ns=$l.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ne]]);Ql.year=fc.year.utc,fc.scale.utc=function(){return Go(ta.scale.linear(),Ql,ns)},ta.text=At(function(n){return n.responseText}),ta.json=function(n,t){return Nt(n,"application/json",Qo,t)},ta.html=function(n,t){return Nt(n,"text/html",na,t)},ta.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(ta):"object"==typeof module&&module.exports&&(module.exports=ta),this.d3=ta}(); \ No newline at end of file diff --git a/static/javascripts/sankey-1/sankey.js b/static/javascripts/sankey-1/sankey.js new file mode 100755 index 0000000..2e1d292 --- /dev/null +++ b/static/javascripts/sankey-1/sankey.js @@ -0,0 +1,397 @@ +d3.sankey = function() { + var sankey = {}, + nodeWidth = 24, + nodePadding = 8, + size = [1, 1], + nodes = [], + links = [], + sinksRight = true; + + sankey.nodeWidth = function(_) { + if (!arguments.length) return nodeWidth; + nodeWidth = +_; + return sankey; + }; + + sankey.nodePadding = function(_) { + if (!arguments.length) return nodePadding; + nodePadding = +_; + return sankey; + }; + + sankey.nodes = function(_) { + if (!arguments.length) return nodes; + nodes = _; + return sankey; + }; + + sankey.links = function(_) { + if (!arguments.length) return links; + links = _; + return sankey; + }; + + sankey.size = function(_) { + if (!arguments.length) return size; + size = _; + return sankey; + }; + + sankey.sinksRight = function (_) { + if (!arguments.length) return sinksRight; + sinksRight = _; + return sankey; + }; + + sankey.layout = function(iterations) { + computeNodeLinks(); + computeNodeValues(); + computeNodeBreadths(); + computeNodeDepths(iterations); + return sankey; + }; + + sankey.relayout = function() { + computeLinkDepths(); + return sankey; + }; + + // SVG path data generator, to be used as "d" attribute on "path" element selection. + sankey.link = function() { + var curvature = .5; + + function link(d) { + var xs = d.source.x + d.source.dx, + xt = d.target.x, + xi = d3.interpolateNumber(xs, xt), + xsc = xi(curvature), + xtc = xi(1 - curvature), + ys = d.source.y + d.sy + d.dy / 2, + yt = d.target.y + d.ty + d.dy / 2; + + if (!d.cycleBreaker) { + return "M" + xs + "," + ys + + "C" + xsc + "," + ys + + " " + xtc + "," + yt + + " " + xt + "," + yt; + } else { + var xdelta = (1.5 * d.dy + 0.05 * Math.abs(xs - xt)); + xsc = xs + xdelta; + xtc = xt - xdelta; + var xm = xi(0.5); + var ym = d3.interpolateNumber(ys, yt)(0.5); + var ydelta = (2 * d.dy + 0.1 * Math.abs(xs - xt) + 0.1 * Math.abs(ys - yt)) * (ym < (size[1] / 2) ? -1 : 1); + return "M" + xs + "," + ys + + "C" + xsc + "," + ys + + " " + xsc + "," + (ys + ydelta) + + " " + xm + "," + (ym + ydelta) + + "S" + xtc + "," + yt + + " " + xt + "," + yt; + + } + } + + link.curvature = function(_) { + if (!arguments.length) return curvature; + curvature = +_; + return link; + }; + + return link; + }; + + // Populate the sourceLinks and targetLinks for each node. + // Also, if the source and target are not objects, assume they are indices. + function computeNodeLinks() { + nodes.forEach(function(node) { + // Links that have this node as source. + node.sourceLinks = []; + // Links that have this node as target. + node.targetLinks = []; + }); + links.forEach(function(link) { + var source = link.source, + target = link.target; + if (typeof source === "number") source = link.source = nodes[link.source]; + if (typeof target === "number") target = link.target = nodes[link.target]; + source.sourceLinks.push(link); + target.targetLinks.push(link); + }); + } + + // Compute the value (size) of each node by summing the associated links. + function computeNodeValues() { + nodes.forEach(function(node) { + node.value = Math.max( + d3.sum(node.sourceLinks, value), + d3.sum(node.targetLinks, value) + ); + }); + } + + // Iteratively assign the breadth (x-position) for each node. + // Nodes are assigned the maximum breadth of incoming neighbors plus one; + // nodes with no incoming links are assigned breadth zero, while + // nodes with no outgoing links are assigned the maximum breadth. + function computeNodeBreadths() { + var remainingNodes = nodes, + nextNodes, + x = 0; + + // Work from left to right. + // Keep updating the breath (x-position) of nodes that are target of recently updated nodes. + while (remainingNodes.length && x < nodes.length) { + nextNodes = []; + remainingNodes.forEach(function(node) { + node.x = x; + node.dx = nodeWidth; + node.sourceLinks.forEach(function(link) { + if (nextNodes.indexOf(link.target) < 0 && !link.cycleBreaker) { + nextNodes.push(link.target); + } + }); + }); + if (nextNodes.length == remainingNodes.length) { + // There must be a cycle here. Let's search for a link that breaks it. + findAndMarkCycleBreaker(nextNodes); + // Start over. + // TODO: make this optional? + return computeNodeBreadths(); + } + else { + remainingNodes = nextNodes; + ++x; + } + } + + // Optionally move pure sinks always to the right. + if (sinksRight) { + moveSinksRight(x); + } + + scaleNodeBreadths((size[0] - nodeWidth) / (x - 1)); + } + + // Find a link that breaks a cycle in the graph (if any). + function findAndMarkCycleBreaker(nodes) { + // Go through all nodes from the given subset and traverse links searching for cycles. + var link; + for (var n=nodes.length - 1; n >= 0; n--) { + link = depthFirstCycleSearch(nodes[n], []); + if (link) { + return link; + } + } + + // Depth-first search to find a link that is part of a cycle. + function depthFirstCycleSearch(cursorNode, path) { + var target, link; + for (var n = cursorNode.sourceLinks.length - 1; n >= 0; n--) { + link = cursorNode.sourceLinks[n]; + if (link.cycleBreaker) { + // Skip already known cycle breakers. + continue; + } + + // Check if target of link makes a cycle in current path. + target = link.target; + for (var l = 0; l < path.length; l++) { + if (path[l].source == target) { + // We found a cycle. Search for weakest link in cycle + var weakest = link; + for (; l < path.length; l++) { + if (path[l].value < weakest.value) { + weakest = path[l]; + } + } + // Mark weakest link as (known) cycle breaker and abort search. + weakest.cycleBreaker = true; + return weakest; + } + } + + // Recurse deeper. + path.push(link); + link = depthFirstCycleSearch(target, path); + path.pop(); + // Stop further search if we found a cycle breaker. + if (link) { + return link; + } + } + } + } + + + function moveSourcesRight() { + nodes.forEach(function(node) { + if (!node.targetLinks.length) { + node.x = d3.min(node.sourceLinks, function(d) { return d.target.x; }) - 1; + } + }); + } + + function moveSinksRight(x) { + nodes.forEach(function(node) { + if (!node.sourceLinks.length) { + node.x = x - 1; + } + }); + } + + function scaleNodeBreadths(kx) { + nodes.forEach(function(node) { + node.x *= kx; + }); + } + + // Compute the depth (y-position) for each node. + function computeNodeDepths(iterations) { + // Group nodes by breath. + var nodesByBreadth = d3.nest() + .key(function(d) { return d.x; }) + .sortKeys(d3.ascending) + .entries(nodes) + .map(function(d) { return d.values; }); + + // + initializeNodeDepth(); + resolveCollisions(); + computeLinkDepths(); + for (var alpha = 1; iterations > 0; --iterations) { + relaxRightToLeft(alpha *= .99); + resolveCollisions(); + computeLinkDepths(); + relaxLeftToRight(alpha); + resolveCollisions(); + computeLinkDepths(); + } + + function initializeNodeDepth() { + // Calculate vertical scaling factor. + var ky = d3.min(nodesByBreadth, function(nodes) { + return (size[1] - (nodes.length - 1) * nodePadding) / d3.sum(nodes, value); + }); + + nodesByBreadth.forEach(function(nodes) { + nodes.forEach(function(node, i) { + node.y = i; + node.dy = node.value * ky; + }); + }); + + links.forEach(function(link) { + link.dy = link.value * ky; + }); + } + + function relaxLeftToRight(alpha) { + nodesByBreadth.forEach(function(nodes, breadth) { + nodes.forEach(function(node) { + if (node.targetLinks.length) { + // Value-weighted average of the y-position of source node centers linked to this node. + var y = d3.sum(node.targetLinks, weightedSource) / d3.sum(node.targetLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedSource(link) { + return (link.source.y + link.sy + link.dy / 2) * link.value; + } + } + + function relaxRightToLeft(alpha) { + nodesByBreadth.slice().reverse().forEach(function(nodes) { + nodes.forEach(function(node) { + if (node.sourceLinks.length) { + // Value-weighted average of the y-positions of target nodes linked to this node. + var y = d3.sum(node.sourceLinks, weightedTarget) / d3.sum(node.sourceLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedTarget(link) { + return (link.target.y + link.ty + link.dy / 2) * link.value; + } + } + + function resolveCollisions() { + nodesByBreadth.forEach(function(nodes) { + var node, + dy, + y0 = 0, + n = nodes.length, + i; + + // Push any overlapping nodes down. + nodes.sort(ascendingDepth); + for (i = 0; i < n; ++i) { + node = nodes[i]; + dy = y0 - node.y; + if (dy > 0) node.y += dy; + y0 = node.y + node.dy + nodePadding; + } + + // If the bottommost node goes outside the bounds, push it back up. + dy = y0 - nodePadding - size[1]; + if (dy > 0) { + y0 = node.y -= dy; + + // Push any overlapping nodes back up. + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.y + node.dy + nodePadding - y0; + if (dy > 0) node.y -= dy; + y0 = node.y; + } + } + }); + } + + function ascendingDepth(a, b) { + return a.y - b.y; + } + } + + // Compute y-offset of the source endpoint (sy) and target endpoints (ty) of links, + // relative to the source/target node's y-position. + function computeLinkDepths() { + nodes.forEach(function(node) { + node.sourceLinks.sort(ascendingTargetDepth); + node.targetLinks.sort(ascendingSourceDepth); + }); + nodes.forEach(function(node) { + var sy = 0, ty = 0; + node.sourceLinks.forEach(function(link) { + link.sy = sy; + sy += link.dy; + }); + node.targetLinks.forEach(function(link) { + link.ty = ty; + ty += link.dy; + }); + }); + + function ascendingSourceDepth(a, b) { + return a.source.y - b.source.y; + } + + function ascendingTargetDepth(a, b) { + return a.target.y - b.target.y; + } + } + + // Y-position of the middle of a node. + function center(node) { + return node.y + node.dy / 2; + } + + // Value property accessor. + function value(x) { + return x.value; + } + + return sankey; +}; \ No newline at end of file diff --git a/static/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js b/static/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js new file mode 100755 index 0000000..d059090 --- /dev/null +++ b/static/javascripts/sankeyNetwork-binding-0.2.8/sankeyNetwork.js @@ -0,0 +1,230 @@ +HTMLWidgets.widget({ + + name: "sankeyNetwork", + + type: "output", + + initialize: function(el, width, height) { + + d3.select(el).append("svg") + .style("width", "100%") + .style("height", "100%"); + + return { + sankey: d3.sankey(), + x: null + }; + }, + + resize: function(el, width, height, instance) { + /* handle resizing now through the viewBox + d3.select(el).select("svg") + .attr("width", width) + .attr("height", height + height * 0.05); + + this.renderValue(el, instance.x, instance); + */ + }, + + renderValue: function(el, x, instance) { + + // save the x in our instance (for calling back from resize) + instance.x = x; + + // alias sankey and options + var sankey = instance.sankey; + var options = x.options; + + // convert links and nodes data frames to d3 friendly format + var links = HTMLWidgets.dataframeToD3(x.links); + var nodes = HTMLWidgets.dataframeToD3(x.nodes); + + + // margin handling + // set our default margin to be 20 + // will override with x.options.margin if provided + var margin = {top: 20, right: 20, bottom: 20, left: 20}; + // go through each key of x.options.margin + // use this value if provided from the R side + Object.keys(x.options.margin).map(function(ky){ + if(x.options.margin[ky] !== null) { + margin[ky] = x.options.margin[ky]; + } + // set the margin on the svg with css style + // commenting this out since not correct + // s.style(["margin",ky].join("-"), margin[ky]); + }); + + // get the width and height + var width = el.getBoundingClientRect().width - margin.right - margin.left; + var height = el.getBoundingClientRect().height - margin.top - margin.bottom; + + var color = eval(options.colourScale); + + var color_node = function color_node(d){ + if (d.group){ + return color(d.group.replace(/ .*/, "")); + } else { + return "#cccccc"; + } + } + + var color_link = function color_link(d){ + if (d.group){ + return color(d.group.replace(/ .*/, "")); + } else { + return "#000000"; + } + } + + var opacity_link = function opacity_link(d){ + if (d.group){ + return 0.7; + } else { + return 0.2; + } + } + + + var formatNumber = d3.format(",.0f"), + format = function(d) { return formatNumber(d); } + + // create d3 sankey layout + sankey + .nodes(d3.values(nodes)) + .links(links) + .size([width, height]) + .nodeWidth(options.nodeWidth) + .nodePadding(options.nodePadding) + .layout(32); + + // select the svg element and remove existing children + d3.select(el).select("svg").selectAll("*").remove(); + // append g for our container to transform by margin + var svg = d3.select(el).select("svg").append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")");; + + // draw path + var path = sankey.link(); + + // draw links + var link = svg.selectAll(".link") + .data(sankey.links()) + + link.enter().append("path") + .attr("class", "link") + + link + .attr("d", path) + .style("stroke-width", function(d) { return Math.max(1, d.dy); }) + .style("fill", "none") + .style("stroke", color_link) + .style("stroke-opacity", opacity_link) + .sort(function(a, b) { return b.dy - a.dy; }) + .on("mouseover", function(d) { + d3.select(this) + .style("stroke-opacity", function(d){return opacity_link(d) + 0.3}); + }) + .on("mouseout", function(d) { + d3.select(this) + .style("stroke-opacity", opacity_link); + }); + + // add backwards class to cycles + link.classed('backwards', function (d) { return d.target.x < d.source.x; }); + + svg.selectAll(".link.backwards") + .style("stroke-dasharray","9,1") + .style("stroke","#402") + + // draw nodes + var node = svg.selectAll(".node") + .data(sankey.nodes()) + + node.enter().append("g") + .attr("class", "node") + .attr("transform", function(d) { return "translate(" + + d.x + "," + d.y + ")"; }) + .call(d3.behavior.drag() + .origin(function(d) { return d; }) + .on("dragstart", function() { this.parentNode.appendChild(this); }) + .on("drag", dragmove)); + + // note: u2192 is right-arrow + link.append("title") + .text(function(d) { return d.source.name + " \u2192 " + d.target.name + + "\n" + format(d.value) + " " + options.units; }); + + node.append("rect") + .attr("height", function(d) { return d.dy; }) + .attr("width", sankey.nodeWidth()) + .style("fill", function(d) { + return d.color = color_node(d); }) + .style("stroke", function(d) { return d3.rgb(d.color).darker(2); }) + .style("opacity", 0.9) + .style("cursor", "move") + .append("title") + .text(function(d) { return d.name + "\n" + format(d.value) + + " " + options.units; }); + + node.append("text") + .attr("x", -6) + .attr("y", function(d) { return d.dy / 2; }) + .attr("dy", ".35em") + .attr("text-anchor", "end") + .attr("transform", null) + .text(function(d) { return d.name; }) + .style("font-size", options.fontSize + "px") + .style("font-family", options.fontFamily ? options.fontFamily : "inherit") + .filter(function(d) { return d.x < width / 2; }) + .attr("x", 6 + sankey.nodeWidth()) + .attr("text-anchor", "start"); + + + // adjust viewBox to fit the bounds of our tree + var s = d3.select(svg[0][0].parentNode); + s.attr( + "viewBox", + [ + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().left + }) + ) - s.node().getBoundingClientRect().left - margin.right, + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().top + }) + ) - s.node().getBoundingClientRect().top - margin.top, + d3.max( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().right + }) + ) - + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().left + }) + ) + margin.left + margin.right, + d3.max( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().bottom + }) + ) - + d3.min( + s.selectAll('g')[0].map(function(d){ + return d.getBoundingClientRect().top + }) + ) + margin.top + margin.bottom + ].join(",") + ); + + + function dragmove(d) { + d3.select(this).attr("transform", "translate(" + d.x + "," + + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")"); + sankey.relayout(); + link.attr("d", path); + } + }, +});