You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/02/25 09:26:29 UTC

[isis] branch master updated (da21d61 -> 48c78c8)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from da21d61  ISIS-1880 add path syntax validation
     new 3e02680  ISIS-1881 package swagger-ui with core/metamodel
     new 48c78c8  ISIS-1881 remove swagger-ui from simpleapp/helloworld and artifacts

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/resources}/swagger-ui/00-README.md    |     0
 .../src/main/resources}/swagger-ui/css/print.css   |     0
 .../src/main/resources}/swagger-ui/css/reset.css   |     0
 .../src/main/resources}/swagger-ui/css/screen.css  |     0
 .../src/main/resources}/swagger-ui/css/style.css   |     0
 .../main/resources}/swagger-ui/css/typography.css  |     0
 .../resources}/swagger-ui/fonts/DroidSans-Bold.ttf |   Bin
 .../main/resources}/swagger-ui/fonts/DroidSans.ttf |   Bin
 .../main/resources}/swagger-ui/images/collapse.gif |   Bin
 .../main/resources}/swagger-ui/images/expand.gif   |   Bin
 .../swagger-ui/images/explorer_icons.png           |   Bin
 .../resources}/swagger-ui/images/favicon-16x16.png |   Bin
 .../resources}/swagger-ui/images/favicon-32x32.png |   Bin
 .../main/resources}/swagger-ui/images/favicon.ico  |   Bin
 .../resources}/swagger-ui/images/logo_small.png    |   Bin
 .../resources}/swagger-ui/images/pet_store_api.png |   Bin
 .../main/resources}/swagger-ui/images/throbber.gif |   Bin
 .../resources}/swagger-ui/images/wordnik_api.png   |   Bin
 .../resources}/swagger-ui/index-ORIG-2.2.10.html   |     0
 .../src/main/resources}/swagger-ui/index.html      |     8 +-
 .../src/main/resources}/swagger-ui/lang/ca.js      |     0
 .../src/main/resources}/swagger-ui/lang/el.js      |     0
 .../src/main/resources}/swagger-ui/lang/en.js      |     0
 .../src/main/resources}/swagger-ui/lang/es.js      |     0
 .../src/main/resources}/swagger-ui/lang/fr.js      |     0
 .../src/main/resources}/swagger-ui/lang/geo.js     |     0
 .../src/main/resources}/swagger-ui/lang/it.js      |     0
 .../src/main/resources}/swagger-ui/lang/ja.js      |     0
 .../src/main/resources}/swagger-ui/lang/ko-kr.js   |     0
 .../src/main/resources}/swagger-ui/lang/pl.js      |     0
 .../src/main/resources}/swagger-ui/lang/pt.js      |     0
 .../src/main/resources}/swagger-ui/lang/ru.js      |     0
 .../src/main/resources}/swagger-ui/lang/tr.js      |     0
 .../main/resources}/swagger-ui/lang/translator.js  |     0
 .../src/main/resources}/swagger-ui/lang/zh-cn.js   |     0
 .../main/resources}/swagger-ui/lib/backbone-min.js |     0
 .../src/main/resources}/swagger-ui/lib/es5-shim.js |     0
 .../resources}/swagger-ui/lib/handlebars-4.0.5.js  |     0
 .../swagger-ui/lib/highlight.9.1.0.pack.js         |     0
 .../lib/highlight.9.1.0.pack_extended.js           |     0
 .../resources}/swagger-ui/lib/jquery-1.8.0.min.js  |     0
 .../resources}/swagger-ui/lib/jquery.ba-bbq.min.js |     0
 .../swagger-ui/lib/jquery.slideto.min.js           |     0
 .../resources}/swagger-ui/lib/jquery.wiggle.min.js |     0
 .../main/resources}/swagger-ui/lib/js-yaml.min.js  |     0
 .../resources}/swagger-ui/lib/jsoneditor.min.js    |     0
 .../main/resources}/swagger-ui/lib/lodash.min.js   |     0
 .../src/main/resources}/swagger-ui/lib/marked.js   |     0
 .../swagger-ui/lib/object-assign-pollyfill.js      |     0
 .../resources}/swagger-ui/lib/sanitize-html.min.js |     0
 .../resources}/swagger-ui/lib/swagger-oauth.js     |     0
 .../src/main/resources}/swagger-ui/o2c.html        |     0
 .../src/main/resources}/swagger-ui/swagger-ui.js   |     0
 .../main/resources}/swagger-ui/swagger-ui.min.js   |     0
 .../src/main/webapp/swagger-ui/00-README.md        |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   126 -
 .../src/main/webapp/swagger-ui/index.html          |   168 -
 .../src/main/webapp/swagger-ui/lang/ca.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/el.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/en.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/es.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/fr.js          |    54 -
 .../src/main/webapp/swagger-ui/lang/geo.js         |    56 -
 .../src/main/webapp/swagger-ui/lang/it.js          |    52 -
 .../src/main/webapp/swagger-ui/lang/ja.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../src/main/webapp/swagger-ui/lang/pl.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/pt.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/ru.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/tr.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../helloworld/src/main/webapp/swagger-ui/o2c.html |    20 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 .../webapp/src/main/webapp/swagger-ui/00-README.md |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../webapp/src/main/webapp/swagger-ui/lang/ca.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/el.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/en.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/es.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/fr.js   |    54 -
 .../webapp/src/main/webapp/swagger-ui/lang/geo.js  |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/it.js   |    52 -
 .../webapp/src/main/webapp/swagger-ui/lang/ja.js   |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/pl.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/pt.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/ru.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/tr.js   |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 .../src/main/webapp/swagger-ui/00-README.md        |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   129 -
 .../src/main/webapp/swagger-ui/index.html          |   171 -
 .../src/main/webapp/swagger-ui/lang/ca.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/el.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/en.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/es.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/fr.js          |    54 -
 .../src/main/webapp/swagger-ui/lang/geo.js         |    56 -
 .../src/main/webapp/swagger-ui/lang/it.js          |    52 -
 .../src/main/webapp/swagger-ui/lang/ja.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../src/main/webapp/swagger-ui/lang/pl.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/pt.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/ru.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/tr.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../src/main/webapp/swagger-ui/o2c.html            |    23 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   129 -
 .../webapp/src/main/webapp/swagger-ui/index.html   |   171 -
 .../webapp/src/main/webapp/swagger-ui/o2c.html     |    23 -
 216 files changed, 5 insertions(+), 79551 deletions(-)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/00-README.md (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/css/print.css (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/css/reset.css (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/css/screen.css (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/css/style.css (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/css/typography.css (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/fonts/DroidSans-Bold.ttf (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/fonts/DroidSans.ttf (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/collapse.gif (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/expand.gif (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/explorer_icons.png (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/favicon-16x16.png (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/favicon-32x32.png (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/favicon.ico (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/logo_small.png (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/pet_store_api.png (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/throbber.gif (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/images/wordnik_api.png (100%)
 rename {example/application/simpleapp/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/index-ORIG-2.2.10.html (100%)
 rename {example/application/simpleapp/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/index.html (97%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/ca.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/el.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/en.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/es.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/fr.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/geo.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/it.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/ja.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/ko-kr.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/pl.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/pt.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/ru.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/tr.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/translator.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lang/zh-cn.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/backbone-min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/es5-shim.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/handlebars-4.0.5.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/highlight.9.1.0.pack.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/highlight.9.1.0.pack_extended.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/jquery-1.8.0.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/jquery.ba-bbq.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/jquery.slideto.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/jquery.wiggle.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/js-yaml.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/jsoneditor.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/lodash.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/marked.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/object-assign-pollyfill.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/sanitize-html.min.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/lib/swagger-oauth.js (100%)
 rename {example/application/simpleapp/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/o2c.html (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/swagger-ui.js (100%)
 rename {example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp => core/metamodel/src/main/resources}/swagger-ui/swagger-ui.min.js (100%)
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/00-README.md
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/css/print.css
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/css/reset.css
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/css/screen.css
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/css/style.css
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/css/typography.css
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans-Bold.ttf
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans.ttf
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/collapse.gif
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/expand.gif
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/explorer_icons.png
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-16x16.png
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-32x32.png
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/favicon.ico
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/logo_small.png
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/pet_store_api.png
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/throbber.gif
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/images/wordnik_api.png
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/index-ORIG-2.2.10.html
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/index.html
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/ca.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/el.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/en.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/es.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/fr.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/geo.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/it.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/ja.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/ko-kr.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/pl.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/pt.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/ru.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/tr.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/translator.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lang/zh-cn.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/backbone-min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/es5-shim.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/handlebars-4.0.5.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack_extended.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery-1.8.0.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.ba-bbq.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.slideto.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.wiggle.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/js-yaml.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/jsoneditor.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/lodash.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/marked.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/object-assign-pollyfill.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/sanitize-html.min.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/lib/swagger-oauth.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/o2c.html
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/swagger-ui.js
 delete mode 100644 example/application/helloworld/src/main/webapp/swagger-ui/swagger-ui.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/00-README.md
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/css/print.css
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/css/reset.css
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/css/screen.css
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/css/style.css
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/css/typography.css
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/fonts/DroidSans-Bold.ttf
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/fonts/DroidSans.ttf
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/collapse.gif
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/expand.gif
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/explorer_icons.png
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/favicon-16x16.png
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/favicon-32x32.png
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/favicon.ico
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/logo_small.png
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/pet_store_api.png
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/throbber.gif
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/images/wordnik_api.png
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/ca.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/el.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/en.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/es.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/fr.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/geo.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/it.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/ja.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/ko-kr.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/pl.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/pt.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/ru.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/tr.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/translator.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lang/zh-cn.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/backbone-min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/es5-shim.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/handlebars-4.0.5.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack_extended.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/jquery-1.8.0.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/jquery.ba-bbq.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/jquery.slideto.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/jquery.wiggle.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/js-yaml.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/jsoneditor.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/lodash.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/marked.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/object-assign-pollyfill.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/sanitize-html.min.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/lib/swagger-oauth.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/swagger-ui.js
 delete mode 100644 example/application/simpleapp/webapp/src/main/webapp/swagger-ui/swagger-ui.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/00-README.md
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/css/print.css
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/css/reset.css
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/css/screen.css
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/css/style.css
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/css/typography.css
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/fonts/DroidSans-Bold.ttf
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/fonts/DroidSans.ttf
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/collapse.gif
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/expand.gif
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/explorer_icons.png
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/favicon-16x16.png
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/favicon-32x32.png
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/favicon.ico
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/logo_small.png
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/pet_store_api.png
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/throbber.gif
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/images/wordnik_api.png
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/index-ORIG-2.2.10.html
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/index.html
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/ca.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/el.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/en.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/es.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/fr.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/geo.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/it.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/ja.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/ko-kr.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/pl.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/pt.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/ru.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/tr.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/translator.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lang/zh-cn.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/backbone-min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/es5-shim.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/handlebars-4.0.5.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack_extended.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/jquery-1.8.0.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/jquery.ba-bbq.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/jquery.slideto.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/jquery.wiggle.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/js-yaml.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/jsoneditor.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/lodash.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/marked.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/object-assign-pollyfill.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/sanitize-html.min.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/lib/swagger-oauth.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/o2c.html
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/swagger-ui.js
 delete mode 100644 example/archetype/helloworld/src/main/resources/archetype-resources/src/main/webapp/swagger-ui/swagger-ui.min.js
 delete mode 100644 example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index-ORIG-2.2.10.html
 delete mode 100644 example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/index.html
 delete mode 100644 example/archetype/simpleapp/src/main/resources/archetype-resources/webapp/src/main/webapp/swagger-ui/o2c.html

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.

[isis] 01/02: ISIS-1881 package swagger-ui with core/metamodel

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 3e02680d7d343b6e04f091d7197759f18a3f7b58
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Feb 25 10:20:58 2018 +0100

    ISIS-1881 package swagger-ui with core/metamodel
---
 .../src/main/resources/swagger-ui/00-README.md     |     5 +
 .../src/main/resources/swagger-ui/css/print.css    |     1 +
 .../src/main/resources/swagger-ui/css/reset.css    |     1 +
 .../src/main/resources/swagger-ui/css/screen.css   |     1 +
 .../src/main/resources/swagger-ui/css/style.css    |     1 +
 .../main/resources/swagger-ui/css/typography.css   |     0
 .../resources/swagger-ui/fonts/DroidSans-Bold.ttf  |   Bin 0 -> 42480 bytes
 .../main/resources/swagger-ui/fonts/DroidSans.ttf  |   Bin 0 -> 41028 bytes
 .../main/resources/swagger-ui/images/collapse.gif  |   Bin 0 -> 69 bytes
 .../main/resources/swagger-ui/images/expand.gif    |   Bin 0 -> 73 bytes
 .../resources/swagger-ui/images/explorer_icons.png |   Bin 0 -> 5115 bytes
 .../resources/swagger-ui/images/favicon-16x16.png  |   Bin 0 -> 445 bytes
 .../resources/swagger-ui/images/favicon-32x32.png  |   Bin 0 -> 1141 bytes
 .../main/resources/swagger-ui/images/favicon.ico   |   Bin 0 -> 5430 bytes
 .../resources/swagger-ui/images/logo_small.png     |   Bin 0 -> 455 bytes
 .../resources/swagger-ui/images/pet_store_api.png  |   Bin 0 -> 631 bytes
 .../main/resources/swagger-ui/images/throbber.gif  |   Bin 0 -> 9257 bytes
 .../resources/swagger-ui/images/wordnik_api.png    |   Bin 0 -> 670 bytes
 .../resources/swagger-ui/index-ORIG-2.2.10.html    |   126 +
 .../src/main/resources/swagger-ui/index.html       |   170 +
 .../src/main/resources/swagger-ui/lang/ca.js       |    53 +
 .../src/main/resources/swagger-ui/lang/el.js       |    56 +
 .../src/main/resources/swagger-ui/lang/en.js       |    56 +
 .../src/main/resources/swagger-ui/lang/es.js       |    53 +
 .../src/main/resources/swagger-ui/lang/fr.js       |    54 +
 .../src/main/resources/swagger-ui/lang/geo.js      |    56 +
 .../src/main/resources/swagger-ui/lang/it.js       |    52 +
 .../src/main/resources/swagger-ui/lang/ja.js       |    56 +
 .../src/main/resources/swagger-ui/lang/ko-kr.js    |    53 +
 .../src/main/resources/swagger-ui/lang/pl.js       |    53 +
 .../src/main/resources/swagger-ui/lang/pt.js       |    53 +
 .../src/main/resources/swagger-ui/lang/ru.js       |    56 +
 .../src/main/resources/swagger-ui/lang/tr.js       |    53 +
 .../main/resources/swagger-ui/lang/translator.js   |    39 +
 .../src/main/resources/swagger-ui/lang/zh-cn.js    |    56 +
 .../main/resources/swagger-ui/lib/backbone-min.js  |     1 +
 .../src/main/resources/swagger-ui/lib/es5-shim.js  |     1 +
 .../resources/swagger-ui/lib/handlebars-4.0.5.js   |     3 +
 .../swagger-ui/lib/highlight.9.1.0.pack.js         |     1 +
 .../lib/highlight.9.1.0.pack_extended.js           |     1 +
 .../resources/swagger-ui/lib/jquery-1.8.0.min.js   |     3 +
 .../resources/swagger-ui/lib/jquery.ba-bbq.min.js  |     1 +
 .../resources/swagger-ui/lib/jquery.slideto.min.js |     1 +
 .../resources/swagger-ui/lib/jquery.wiggle.min.js  |     1 +
 .../main/resources/swagger-ui/lib/js-yaml.min.js   |     2 +
 .../resources/swagger-ui/lib/jsoneditor.min.js     |     5 +
 .../main/resources/swagger-ui/lib/lodash.min.js    |     2 +
 .../src/main/resources/swagger-ui/lib/marked.js    |     1 +
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 +
 .../resources/swagger-ui/lib/sanitize-html.min.js  |     4 +
 .../main/resources/swagger-ui/lib/swagger-oauth.js |     1 +
 .../src/main/resources/swagger-ui/o2c.html         |    20 +
 .../src/main/resources/swagger-ui/swagger-ui.js    | 25344 +++++++++++++++++++
 .../main/resources/swagger-ui/swagger-ui.min.js    |    15 +
 54 files changed, 26512 insertions(+)

diff --git a/core/metamodel/src/main/resources/swagger-ui/00-README.md b/core/metamodel/src/main/resources/swagger-ui/00-README.md
new file mode 100644
index 0000000..31e1c18
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/00-README.md
@@ -0,0 +1,5 @@
+# README
+
+This directory is almost exact copy of the [swagger-ui dist](https://github.com/swagger-api/swagger-ui/tree/v2.2.10/dist) directory.
+
+The only changes are some very simple alterations to the `index.html` for (a) Basic auth and (b) to allow different Swagger specification file to be used.
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/css/print.css b/core/metamodel/src/main/resources/swagger-ui/css/print.css
new file mode 100644
index 0000000..f2e8446
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/css/print.css
@@ -0,0 +1 @@
+.swagger-section pre code{display:block;padding:.5em;background:#f0f0f0}.swagger-section pre .clojure .built_in,.swagger-section pre .lisp .title,.swagger-section pre .nginx .title,.swagger-section pre .subst,.swagger-section pre .tag .title,.swagger-section pre code{color:#000}.swagger-section pre .addition,.swagger-section pre .aggregate,.swagger-section pre .apache .cbracket,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .constant,.swagger- [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/css/reset.css b/core/metamodel/src/main/resources/swagger-ui/css/reset.css
new file mode 100644
index 0000000..40dc830
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/css/reset.css
@@ -0,0 +1 @@
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}a [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/css/screen.css b/core/metamodel/src/main/resources/swagger-ui/css/screen.css
new file mode 100644
index 0000000..1f069f6
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/css/screen.css
@@ -0,0 +1 @@
+.swagger-section pre code{display:block;padding:.5em;background:#f0f0f0}.swagger-section pre .clojure .built_in,.swagger-section pre .lisp .title,.swagger-section pre .nginx .title,.swagger-section pre .subst,.swagger-section pre .tag .title,.swagger-section pre code{color:#000}.swagger-section pre .addition,.swagger-section pre .aggregate,.swagger-section pre .apache .cbracket,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .constant,.swagger- [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/css/style.css b/core/metamodel/src/main/resources/swagger-ui/css/style.css
new file mode 100644
index 0000000..52907e4
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/css/style.css
@@ -0,0 +1 @@
+.swagger-section #header a#logo{font-size:1.5em;font-weight:700;text-decoration:none;padding:20px 0 20px 40px}#text-head{font-size:80px;font-family:Roboto,sans-serif;color:#fff;float:right;margin-right:20%}.navbar-fixed-top .navbar-brand,.navbar-fixed-top .navbar-nav,.navbar-header{height:auto}.navbar-inverse{background-color:#000;border-color:#000}#navbar-brand{margin-left:20%}.navtext{font-size:10px}.h1,h1{font-size:60px}.navbar-default .navbar-header .navbar-brand{color:#a2dfee}.swagg [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/css/typography.css b/core/metamodel/src/main/resources/swagger-ui/css/typography.css
new file mode 100644
index 0000000..e69de29
diff --git a/core/metamodel/src/main/resources/swagger-ui/fonts/DroidSans-Bold.ttf b/core/metamodel/src/main/resources/swagger-ui/fonts/DroidSans-Bold.ttf
new file mode 100644
index 0000000..036c4d1
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/fonts/DroidSans-Bold.ttf differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/fonts/DroidSans.ttf b/core/metamodel/src/main/resources/swagger-ui/fonts/DroidSans.ttf
new file mode 100644
index 0000000..e517a0c
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/fonts/DroidSans.ttf differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/collapse.gif b/core/metamodel/src/main/resources/swagger-ui/images/collapse.gif
new file mode 100644
index 0000000..8843e8c
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/collapse.gif differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/expand.gif b/core/metamodel/src/main/resources/swagger-ui/images/expand.gif
new file mode 100644
index 0000000..477bf13
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/expand.gif differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/explorer_icons.png b/core/metamodel/src/main/resources/swagger-ui/images/explorer_icons.png
new file mode 100644
index 0000000..be43b27
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/explorer_icons.png differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/favicon-16x16.png b/core/metamodel/src/main/resources/swagger-ui/images/favicon-16x16.png
new file mode 100644
index 0000000..0f7e13b
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/favicon-16x16.png differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/favicon-32x32.png b/core/metamodel/src/main/resources/swagger-ui/images/favicon-32x32.png
new file mode 100644
index 0000000..b0a3352
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/favicon-32x32.png differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/favicon.ico b/core/metamodel/src/main/resources/swagger-ui/images/favicon.ico
new file mode 100644
index 0000000..8b60bcf
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/favicon.ico differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/logo_small.png b/core/metamodel/src/main/resources/swagger-ui/images/logo_small.png
new file mode 100644
index 0000000..ce3908e
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/logo_small.png differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/pet_store_api.png b/core/metamodel/src/main/resources/swagger-ui/images/pet_store_api.png
new file mode 100644
index 0000000..1192ad8
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/pet_store_api.png differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/throbber.gif b/core/metamodel/src/main/resources/swagger-ui/images/throbber.gif
new file mode 100644
index 0000000..0639388
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/throbber.gif differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/images/wordnik_api.png b/core/metamodel/src/main/resources/swagger-ui/images/wordnik_api.png
new file mode 100644
index 0000000..dc0ddab
Binary files /dev/null and b/core/metamodel/src/main/resources/swagger-ui/images/wordnik_api.png differ
diff --git a/core/metamodel/src/main/resources/swagger-ui/index-ORIG-2.2.10.html b/core/metamodel/src/main/resources/swagger-ui/index-ORIG-2.2.10.html
new file mode 100644
index 0000000..f3b324b
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/index-ORIG-2.2.10.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<html>
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="x-ua-compatible" content="IE=edge">
+  <title>Swagger UI</title>
+  <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
+  <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
+  <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
+  <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
+  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
+  <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
+  <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
+
+  <script src='lib/object-assign-pollyfill.js' type='text/javascript'></script>
+  <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
+  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
+  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
+  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
+  <script src='lib/handlebars-4.0.5.js' type='text/javascript'></script>
+  <script src='lib/lodash.min.js' type='text/javascript'></script>
+  <script src='lib/backbone-min.js' type='text/javascript'></script>
+  <script src='swagger-ui.js' type='text/javascript'></script>
+  <script src='lib/highlight.9.1.0.pack.js' type='text/javascript'></script>
+  <script src='lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script>
+  <script src='lib/jsoneditor.min.js' type='text/javascript'></script>
+  <script src='lib/marked.js' type='text/javascript'></script>
+  <script src='lib/swagger-oauth.js' type='text/javascript'></script>
+
+  <!-- Some basic translations -->
+  <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
+  <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
+  <!-- <script src='lang/en.js' type='text/javascript'></script> -->
+
+  <script type="text/javascript">
+    $(function () {
+      var url = window.location.search.match(/url=([^&]+)/);
+      if (url && url.length > 1) {
+        url = decodeURIComponent(url[1]);
+      } else {
+        url = "http://petstore.swagger.io/v2/swagger.json";
+      }
+
+      hljs.configure({
+        highlightSizeThreshold: 5000
+      });
+
+      // Pre load translate...
+      if(window.SwaggerTranslator) {
+        window.SwaggerTranslator.translate();
+      }
+      window.swaggerUi = new SwaggerUi({
+        url: url,
+        dom_id: "swagger-ui-container",
+        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
+        onComplete: function(swaggerApi, swaggerUi){
+          if(typeof initOAuth == "function") {
+            initOAuth({
+              clientId: "your-client-id",
+              clientSecret: "your-client-secret-if-required",
+              realm: "your-realms",
+              appName: "your-app-name",
+              scopeSeparator: " ",
+              additionalQueryStringParams: {}
+            });
+          }
+
+          if(window.SwaggerTranslator) {
+            window.SwaggerTranslator.translate();
+          }
+        },
+        onFailure: function(data) {
+          log("Unable to Load SwaggerUI");
+        },
+        docExpansion: "none",
+        jsonEditor: false,
+        defaultModelRendering: 'schema',
+        showRequestHeaders: false,
+        showOperationIds: false
+      });
+
+      window.swaggerUi.load();
+
+      function log() {
+        if ('console' in window) {
+          console.log.apply(console, arguments);
+        }
+      }
+  });
+  </script>
+</head>
+
+<body class="swagger-section">
+<div id='header'>
+  <div class="swagger-ui-wrap">
+    <a id="logo" href="http://swagger.io"><img class="logo__img" alt="swagger" height="30" width="30" src="images/logo_small.png" /><span class="logo__title">swagger</span></a>
+    <form id='api_selector'>
+      <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
+      <div id='auth_container'></div>
+      <div class='input'><a id="explore" class="header__btn" href="#" data-sw-translate>Explore</a></div>
+    </form>
+  </div>
+</div>
+
+<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
+<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
+</body>
+</html>
diff --git a/core/metamodel/src/main/resources/swagger-ui/index.html b/core/metamodel/src/main/resources/swagger-ui/index.html
new file mode 100644
index 0000000..36b87d1
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/index.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<html>
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="x-ua-compatible" content="IE=edge">
+    <title>Swagger UI</title>
+    <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
+    <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
+    <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
+    <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
+    <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
+    <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
+    <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
+
+    <script src='lib/object-assign-pollyfill.js' type='text/javascript'></script>
+    <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
+    <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
+    <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
+    <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
+    <script src='lib/handlebars-4.0.5.js' type='text/javascript'></script>
+    <script src='lib/lodash.min.js' type='text/javascript'></script>
+    <script src='lib/backbone-min.js' type='text/javascript'></script>
+    <script src='swagger-ui.js' type='text/javascript'></script>
+    <script src='lib/highlight.9.1.0.pack.js' type='text/javascript'></script>
+    <script src='lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script>
+    <script src='lib/jsoneditor.min.js' type='text/javascript'></script>
+    <script src='lib/marked.js' type='text/javascript'></script>
+    <script src='lib/swagger-oauth.js' type='text/javascript'></script>
+
+    <!-- Some basic translations -->
+    <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
+    <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
+    <!-- <script src='lang/en.js' type='text/javascript'></script> -->
+
+    <script type="text/javascript">
+    $(function () {
+      var url = document.getElementById("input_baseUrl").selectedOptions[0].value;
+
+      hljs.configure({
+        highlightSizeThreshold: 5000
+      });
+
+      // Pre load translate...
+      if(window.SwaggerTranslator) {
+        window.SwaggerTranslator.translate();
+      }
+      window.swaggerUi = new SwaggerUi({
+        url: url,
+        dom_id: "swagger-ui-container",
+        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
+        onComplete: function(swaggerApi, swaggerUi){
+          if(typeof initOAuth == "function") {
+            initOAuth({
+              clientId: "your-client-id",
+              clientSecret: "your-client-secret-if-required",
+              realm: "your-realms",
+              appName: "your-app-name",
+              scopeSeparator: ",",
+              additionalQueryStringParams: {}
+            });
+          }
+
+          if(window.SwaggerTranslator) {
+            window.SwaggerTranslator.translate();
+          }
+
+          addApiKeyAuthorization();
+        },
+        onFailure: function(data) {
+          log("Unable to Load SwaggerUI");
+        },
+        docExpansion: "none",
+        jsonEditor: false,
+        defaultModelRendering: 'schema',
+        showRequestHeaders: false,
+        showOperationIds: false
+      });
+
+
+      // don't automatically load; let the developer change the user/password if required
+      // window.swaggerUi.load();
+
+      function log() {
+        if ('console' in window) {
+          console.log.apply(console, arguments);
+        }
+      }
+
+      function addApiKeyAuthorization(){
+        /*
+        var key = encodeURIComponent($('#input_apiKey')[0].value);
+        if(key && key.trim() != "") {
+            var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("api_key", key, "query");
+            window.swaggerUi.api.clientAuthorizations.add("api_key", apiKeyAuth);
+            log("added key " + key);
+        }
+        */
+        var username = document.getElementById("input_user").value;
+        var password = document.getElementById("input_pass").value;
+        if(username && username.trim() != "" && password && password.trim() != "") {
+          var auth = "Basic " + btoa(username + ":" + password);
+          var swaggerUi = window.swaggerUi;
+          window.swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", auth, "header"));
+        } else {
+          window.swaggerUi.api.clientAuthorizations.remove("key");
+        }
+      }
+
+      // if you have an apiKey you would like to pre-populate on the page for demonstration purposes...
+        /*
+      $('#input_apiKey').change(addApiKeyAuthorization);
+      */
+
+      /*
+        var apiKey = "myApiKeyXXXX123456789";
+        $('#input_apiKey').val(apiKey);
+      */
+      $('#input_user').val("sven");
+      $('#input_pass').val("pass");
+
+  });
+  </script>
+</head>
+
+<body class="swagger-section">
+<div id='header'>
+    <div class="swagger-ui-wrap">
+    <a id="logo" href="http://swagger.io"><img class="logo__img" alt="swagger" height="30" width="30" src="images/logo_small.png" /><span class="logo__title">swagger</span></a>
+        <form id='api_selector'>
+            <div class='input'>
+                <div class='input'><input placeholder="user" id="input_user" name="user" type="text" size="10"/></div>
+                <div class='input'><input placeholder="pass" id="input_pass" name="pass" type="password" size="10"/></div>
+
+				API:
+
+                <select id="input_baseUrl" name="baseUrl" style="height: 26px;">
+                    <option id="private" label="private" value="../../restful/swagger/private">private</option>
+                    <option id="public" label="public" value="../../restful/swagger/public">public</option>
+                    <option id="prototyping" label="prototyping" value="../../restful/swagger/prototyping">prototyping</option>
+                </select>
+            </div>
+            <div class='input' style="display:none;"><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
+            <div class='input'><a id="explore" href="#" data-sw-translate>Reload</a></div>
+        </form>
+
+    </div>
+</div>
+
+<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
+<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/ca.js b/core/metamodel/src/main/resources/swagger-ui/lang/ca.js
new file mode 100644
index 0000000..f8c815a
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/ca.js
@@ -0,0 +1,53 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Advertència: Obsolet",
+    "Implementation Notes":"Notes d'implementació",
+    "Response Class":"Classe de la Resposta",
+    "Status":"Estatus",
+    "Parameters":"Paràmetres",
+    "Parameter":"Paràmetre",
+    "Value":"Valor",
+    "Description":"Descripció",
+    "Parameter Type":"Tipus del Paràmetre",
+    "Data Type":"Tipus de la Dada",
+    "Response Messages":"Missatges de la Resposta",
+    "HTTP Status Code":"Codi d'Estatus HTTP",
+    "Reason":"Raó",
+    "Response Model":"Model de la Resposta",
+    "Request URL":"URL de la Sol·licitud",
+    "Response Body":"Cos de la Resposta",
+    "Response Code":"Codi de la Resposta",
+    "Response Headers":"Capçaleres de la Resposta",
+    "Hide Response":"Amagar Resposta",
+    "Try it out!":"Prova-ho!",
+    "Show/Hide":"Mostrar/Amagar",
+    "List Operations":"Llista Operacions",
+    "Expand Operations":"Expandir Operacions",
+    "Raw":"Cru",
+    "can't parse JSON.  Raw result":"no puc analitzar el JSON.  Resultat cru",
+    "Example Value":"Valor d'Exemple",
+    "Model Schema":"Esquema del Model",
+    "Model":"Model",
+    "apply":"aplicar",
+    "Username":"Nom d'usuari",
+    "Password":"Contrasenya",
+    "Terms of service":"Termes del servei",
+    "Created by":"Creat per",
+    "See more at":"Veure més en",
+    "Contact the developer":"Contactar amb el desenvolupador",
+    "api version":"versió de la api",
+    "Response Content Type":"Tipus de Contingut de la Resposta",
+    "fetching resource":"recollint recurs",
+    "fetching resource list":"recollins llista de recursos",
+    "Explore":"Explorant",
+    "Show Swagger Petstore Example Apis":"Mostrar API d'Exemple Swagger Petstore",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"No es pot llegir del servidor. Potser no teniu la configuració de control d'accés apropiada.",
+    "Please specify the protocol for":"Si us plau, especifiqueu el protocol per a",
+    "Can't read swagger JSON from":"No es pot llegir el JSON de swagger des de",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Finalitzada la càrrega del recurs informatiu. Renderitzant Swagger UI",
+    "Unable to read api":"No es pot llegir l'api",
+    "from path":"des de la ruta",
+    "server returned":"el servidor ha retornat"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/el.js b/core/metamodel/src/main/resources/swagger-ui/lang/el.js
new file mode 100644
index 0000000..fcd1ffd
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/el.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Προειδοποίηση: Έχει αποσυρθεί",
+    "Implementation Notes":"Σημειώσεις Υλοποίησης",
+    "Response Class":"Απόκριση",
+    "Status":"Κατάσταση",
+    "Parameters":"Παράμετροι",
+    "Parameter":"Παράμετρος",
+    "Value":"Τιμή",
+    "Description":"Περιγραφή",
+    "Parameter Type":"Τύπος Παραμέτρου",
+    "Data Type":"Τύπος Δεδομένων",
+    "Response Messages":"Μηνύματα Απόκρισης",
+    "HTTP Status Code":"Κωδικός Κατάστασης HTTP",
+    "Reason":"Αιτιολογία",
+    "Response Model":"Μοντέλο Απόκρισης",
+    "Request URL":"URL Αιτήματος",
+    "Response Body":"Σώμα Απόκρισης",
+    "Response Code":"Κωδικός Απόκρισης",
+    "Response Headers":"Επικεφαλίδες Απόκρισης",
+    "Hide Response":"Απόκρυψη Απόκρισης",
+    "Headers":"Επικεφαλίδες",
+    "Try it out!":"Δοκιμάστε το!",
+    "Show/Hide":"Εμφάνιση/Απόκρυψη",
+    "List Operations":"Λίστα Λειτουργιών",
+    "Expand Operations":"Ανάπτυξη Λειτουργιών",
+    "Raw":"Ακατέργαστο",
+    "can't parse JSON.  Raw result":"αδυναμία ανάλυσης JSON.  Ακατέργαστο αποτέλεσμα",
+    "Example Value":"Παράδειγμα Τιμής",
+    "Model Schema":"Σχήμα Μοντέλου",
+    "Model":"Μοντέλο",
+    "Click to set as parameter value":"Πατήστε για να θέσετε τιμή παραμέτρου",
+    "apply":"εφαρμογή",
+    "Username":"Όνομα χρήση",
+    "Password":"Κωδικός πρόσβασης",
+    "Terms of service":"Όροι χρήσης",
+    "Created by":"Δημιουργήθηκε από",
+    "See more at":"Δείτε περισσότερα στο",
+    "Contact the developer":"Επικοινωνήστε με τον προγραμματιστή",
+    "api version":"έκδοση api",
+    "Response Content Type":"Τύπος Περιεχομένου Απόκρισης",
+    "Parameter content type:":"Τύπος περιεχομένου παραμέτρου:",
+    "fetching resource":"παραλαβή πόρου",
+    "fetching resource list":"παραλαβή λίστας πόρων",
+    "Explore":"Εξερεύνηση",
+    "Show Swagger Petstore Example Apis":"Εμφάνιση Api Δειγμάτων Petstore του Swagger",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Αδυναμία ανάγνωσης από τον εξυπηρετητή.  Μπορεί να μην έχει κατάλληλες ρυθμίσεις για access-control-origin.",
+    "Please specify the protocol for":"Παρακαλώ προσδιορίστε το πρωτόκολλο για",
+    "Can't read swagger JSON from":"Αδυναμία ανάγνωσης swagger JSON από",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Ολοκλήρωση Φόρτωσης Πληροφορικών Πόρου. Παρουσίαση Swagger UI",
+    "Unable to read api":"Αδυναμία ανάγνωσης api",
+    "from path":"από το μονοπάτι",
+    "server returned":"ο εξυπηρετηρής επέστρεψε"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/en.js b/core/metamodel/src/main/resources/swagger-ui/lang/en.js
new file mode 100644
index 0000000..9183136
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/en.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Warning: Deprecated",
+    "Implementation Notes":"Implementation Notes",
+    "Response Class":"Response Class",
+    "Status":"Status",
+    "Parameters":"Parameters",
+    "Parameter":"Parameter",
+    "Value":"Value",
+    "Description":"Description",
+    "Parameter Type":"Parameter Type",
+    "Data Type":"Data Type",
+    "Response Messages":"Response Messages",
+    "HTTP Status Code":"HTTP Status Code",
+    "Reason":"Reason",
+    "Response Model":"Response Model",
+    "Request URL":"Request URL",
+    "Response Body":"Response Body",
+    "Response Code":"Response Code",
+    "Response Headers":"Response Headers",
+    "Hide Response":"Hide Response",
+    "Headers":"Headers",
+    "Try it out!":"Try it out!",
+    "Show/Hide":"Show/Hide",
+    "List Operations":"List Operations",
+    "Expand Operations":"Expand Operations",
+    "Raw":"Raw",
+    "can't parse JSON.  Raw result":"can't parse JSON.  Raw result",
+    "Example Value":"Example Value",
+    "Model Schema":"Model Schema",
+    "Model":"Model",
+    "Click to set as parameter value":"Click to set as parameter value",
+    "apply":"apply",
+    "Username":"Username",
+    "Password":"Password",
+    "Terms of service":"Terms of service",
+    "Created by":"Created by",
+    "See more at":"See more at",
+    "Contact the developer":"Contact the developer",
+    "api version":"api version",
+    "Response Content Type":"Response Content Type",
+    "Parameter content type:":"Parameter content type:",
+    "fetching resource":"fetching resource",
+    "fetching resource list":"fetching resource list",
+    "Explore":"Explore",
+    "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Can't read from server.  It may not have the appropriate access-control-origin settings.",
+    "Please specify the protocol for":"Please specify the protocol for",
+    "Can't read swagger JSON from":"Can't read swagger JSON from",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI",
+    "Unable to read api":"Unable to read api",
+    "from path":"from path",
+    "server returned":"server returned"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/es.js b/core/metamodel/src/main/resources/swagger-ui/lang/es.js
new file mode 100644
index 0000000..13fa015
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/es.js
@@ -0,0 +1,53 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Advertencia: Obsoleto",
+    "Implementation Notes":"Notas de implementación",
+    "Response Class":"Clase de la Respuesta",
+    "Status":"Status",
+    "Parameters":"Parámetros",
+    "Parameter":"Parámetro",
+    "Value":"Valor",
+    "Description":"Descripción",
+    "Parameter Type":"Tipo del Parámetro",
+    "Data Type":"Tipo del Dato",
+    "Response Messages":"Mensajes de la Respuesta",
+    "HTTP Status Code":"Código de Status HTTP",
+    "Reason":"Razón",
+    "Response Model":"Modelo de la Respuesta",
+    "Request URL":"URL de la Solicitud",
+    "Response Body":"Cuerpo de la Respuesta",
+    "Response Code":"Código de la Respuesta",
+    "Response Headers":"Encabezados de la Respuesta",
+    "Hide Response":"Ocultar Respuesta",
+    "Try it out!":"Pruébalo!",
+    "Show/Hide":"Mostrar/Ocultar",
+    "List Operations":"Listar Operaciones",
+    "Expand Operations":"Expandir Operaciones",
+    "Raw":"Crudo",
+    "can't parse JSON.  Raw result":"no puede parsear el JSON.  Resultado crudo",
+    "Example Value":"Valor de Ejemplo",
+    "Model Schema":"Esquema del Modelo",
+    "Model":"Modelo",
+    "apply":"aplicar",
+    "Username":"Nombre de usuario",
+    "Password":"Contraseña",
+    "Terms of service":"Términos de Servicio",
+    "Created by":"Creado por",
+    "See more at":"Ver más en",
+    "Contact the developer":"Contactar al desarrollador",
+    "api version":"versión de la api",
+    "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta",
+    "fetching resource":"buscando recurso",
+    "fetching resource list":"buscando lista del recurso",
+    "Explore":"Explorar",
+    "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.",
+    "Please specify the protocol for":"Por favor, especificar el protocola para",
+    "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI",
+    "Unable to read api":"No se puede leer la api",
+    "from path":"desde ruta",
+    "server returned":"el servidor retornó"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/fr.js b/core/metamodel/src/main/resources/swagger-ui/lang/fr.js
new file mode 100644
index 0000000..388dff1
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/fr.js
@@ -0,0 +1,54 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Avertissement : Obsolète",
+    "Implementation Notes":"Notes d'implémentation",
+    "Response Class":"Classe de la réponse",
+    "Status":"Statut",
+    "Parameters":"Paramètres",
+    "Parameter":"Paramètre",
+    "Value":"Valeur",
+    "Description":"Description",
+    "Parameter Type":"Type du paramètre",
+    "Data Type":"Type de données",
+    "Response Messages":"Messages de la réponse",
+    "HTTP Status Code":"Code de statut HTTP",
+    "Reason":"Raison",
+    "Response Model":"Modèle de réponse",
+    "Request URL":"URL appelée",
+    "Response Body":"Corps de la réponse",
+    "Response Code":"Code de la réponse",
+    "Response Headers":"En-têtes de la réponse",
+    "Hide Response":"Cacher la réponse",
+    "Headers":"En-têtes",
+    "Try it out!":"Testez !",
+    "Show/Hide":"Afficher/Masquer",
+    "List Operations":"Liste des opérations",
+    "Expand Operations":"Développer les opérations",
+    "Raw":"Brut",
+    "can't parse JSON.  Raw result":"impossible de décoder le JSON.  Résultat brut",
+    "Example Value":"Exemple la valeur",
+    "Model Schema":"Définition du modèle",
+    "Model":"Modèle",
+    "apply":"appliquer",
+    "Username":"Nom d'utilisateur",
+    "Password":"Mot de passe",
+    "Terms of service":"Conditions de service",
+    "Created by":"Créé par",
+    "See more at":"Voir plus sur",
+    "Contact the developer":"Contacter le développeur",
+    "api version":"version de l'api",
+    "Response Content Type":"Content Type de la réponse",
+    "fetching resource":"récupération de la ressource",
+    "fetching resource list":"récupération de la liste de ressources",
+    "Explore":"Explorer",
+    "Show Swagger Petstore Example Apis":"Montrer les Apis de l'exemple Petstore de Swagger",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.",
+    "Please specify the protocol for":"Veuillez spécifier un protocole pour",
+    "Can't read swagger JSON from":"Impossible de lire le JSON swagger à partir de",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Chargement des informations terminé. Affichage de Swagger UI",
+    "Unable to read api":"Impossible de lire l'api",
+    "from path":"à partir du chemin",
+    "server returned":"réponse du serveur"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/geo.js b/core/metamodel/src/main/resources/swagger-ui/lang/geo.js
new file mode 100644
index 0000000..609c20d
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/geo.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"ყურადღება: აღარ გამოიყენება",
+    "Implementation Notes":"იმპლემენტაციის აღწერა",
+    "Response Class":"რესპონს კლასი",
+    "Status":"სტატუსი",
+    "Parameters":"პარამეტრები",
+    "Parameter":"პარამეტრი",
+    "Value":"მნიშვნელობა",
+    "Description":"აღწერა",
+    "Parameter Type":"პარამეტრის ტიპი",
+    "Data Type":"მონაცემის ტიპი",
+    "Response Messages":"პასუხი",
+    "HTTP Status Code":"HTTP სტატუსი",
+    "Reason":"მიზეზი",
+    "Response Model":"რესპონს მოდელი",
+    "Request URL":"მოთხოვნის URL",
+    "Response Body":"პასუხის სხეული",
+    "Response Code":"პასუხის კოდი",
+    "Response Headers":"პასუხის ჰედერები",
+    "Hide Response":"დამალე პასუხი",
+    "Headers":"ჰედერები",
+    "Try it out!":"ცადე !",
+    "Show/Hide":"გამოჩენა/დამალვა",
+    "List Operations":"ოპერაციების სია",
+    "Expand Operations":"ოპერაციები ვრცლად",
+    "Raw":"ნედლი",
+    "can't parse JSON.  Raw result":"JSON-ის დამუშავება ვერ მოხერხდა.  ნედლი პასუხი",
+    "Example Value":"მაგალითი",
+    "Model Schema":"მოდელის სტრუქტურა",
+    "Model":"მოდელი",
+    "Click to set as parameter value":"პარამეტრისთვის მნიშვნელობის მისანიჭებლად, დააკლიკე",
+    "apply":"გამოყენება",
+    "Username":"მოხმარებელი",
+    "Password":"პაროლი",
+    "Terms of service":"მომსახურების პირობები",
+    "Created by":"შექმნა",
+    "See more at":"ნახე ვრცლად",
+    "Contact the developer":"დაუკავშირდი დეველოპერს",
+    "api version":"api ვერსია",
+    "Response Content Type":"პასუხის კონტენტის ტიპი",
+    "Parameter content type:":"პარამეტრის კონტენტის ტიპი:",
+    "fetching resource":"რესურსების მიღება",
+    "fetching resource list":"რესურსების სიის მიღება",
+    "Explore":"ნახვა",
+    "Show Swagger Petstore Example Apis":"ნახე Swagger Petstore სამაგალითო Api",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"სერვერთან დაკავშირება ვერ ხერხდება.  შეამოწმეთ access-control-origin.",
+    "Please specify the protocol for":"მიუთითეთ პროტოკოლი",
+    "Can't read swagger JSON from":"swagger JSON წაკითხვა ვერ მოხერხდა",
+    "Finished Loading Resource Information. Rendering Swagger UI":"რესურსების ჩატვირთვა სრულდება. Swagger UI რენდერდება",
+    "Unable to read api":"api წაკითხვა ვერ მოხერხდა",
+    "from path":"მისამართიდან",
+    "server returned":"სერვერმა დააბრუნა"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/it.js b/core/metamodel/src/main/resources/swagger-ui/lang/it.js
new file mode 100644
index 0000000..8529c2a
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/it.js
@@ -0,0 +1,52 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Attenzione: Deprecato",
+    "Implementation Notes":"Note di implementazione",
+    "Response Class":"Classe della risposta",
+    "Status":"Stato",
+    "Parameters":"Parametri",
+    "Parameter":"Parametro",
+    "Value":"Valore",
+    "Description":"Descrizione",
+    "Parameter Type":"Tipo di parametro",
+    "Data Type":"Tipo di dato",
+    "Response Messages":"Messaggi della risposta",
+    "HTTP Status Code":"Codice stato HTTP",
+    "Reason":"Motivo",
+    "Response Model":"Modello di risposta",
+    "Request URL":"URL della richiesta",
+    "Response Body":"Corpo della risposta",
+    "Response Code":"Oggetto della risposta",
+    "Response Headers":"Intestazioni della risposta",
+    "Hide Response":"Nascondi risposta",
+    "Try it out!":"Provalo!",
+    "Show/Hide":"Mostra/Nascondi",
+    "List Operations":"Mostra operazioni",
+    "Expand Operations":"Espandi operazioni",
+    "Raw":"Grezzo (raw)",
+    "can't parse JSON.  Raw result":"non è possibile parsare il JSON. Risultato grezzo (raw).",
+    "Model Schema":"Schema del modello",
+    "Model":"Modello",
+    "apply":"applica",
+    "Username":"Nome utente",
+    "Password":"Password",
+    "Terms of service":"Condizioni del servizio",
+    "Created by":"Creato da",
+    "See more at":"Informazioni aggiuntive:",
+    "Contact the developer":"Contatta lo sviluppatore",
+    "api version":"versione api",
+    "Response Content Type":"Tipo di contenuto (content type) della risposta",
+    "fetching resource":"recuperando la risorsa",
+    "fetching resource list":"recuperando lista risorse",
+    "Explore":"Esplora",
+    "Show Swagger Petstore Example Apis":"Mostra le api di esempio di Swagger Petstore",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.",
+    "Please specify the protocol for":"Si prega di specificare il protocollo per",
+    "Can't read swagger JSON from":"Impossibile leggere JSON swagger da:",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Lettura informazioni risorse termianta. Swagger UI viene mostrata",
+    "Unable to read api":"Impossibile leggere la api",
+    "from path":"da cartella",
+    "server returned":"il server ha restituito"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/ja.js b/core/metamodel/src/main/resources/swagger-ui/lang/ja.js
new file mode 100644
index 0000000..1cbeb37
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/ja.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"警告: 廃止予定",
+    "Implementation Notes":"実装メモ",
+    "Response Class":"レスポンスクラス",
+    "Status":"ステータス",
+    "Parameters":"パラメータ群",
+    "Parameter":"パラメータ",
+    "Value":"値",
+    "Description":"説明",
+    "Parameter Type":"パラメータタイプ",
+    "Data Type":"データタイプ",
+    "Response Messages":"レスポンスメッセージ",
+    "HTTP Status Code":"HTTPステータスコード",
+    "Reason":"理由",
+    "Response Model":"レスポンスモデル",
+    "Request URL":"リクエストURL",
+    "Response Body":"レスポンスボディ",
+    "Response Code":"レスポンスコード",
+    "Response Headers":"レスポンスヘッダ",
+    "Hide Response":"レスポンスを隠す",
+    "Headers":"ヘッダ",
+    "Try it out!":"実際に実行!",
+    "Show/Hide":"表示/非表示",
+    "List Operations":"操作一覧",
+    "Expand Operations":"操作の展開",
+    "Raw":"未加工",
+    "can't parse JSON.  Raw result":"JSONへ解釈できません.  未加工の結果",
+    "Example Value":"値の例",
+    "Model Schema":"モデルスキーマ",
+    "Model":"モデル",
+    "Click to set as parameter value":"パラメータ値と設定するにはクリック",
+    "apply":"実行",
+    "Username":"ユーザ名",
+    "Password":"パスワード",
+    "Terms of service":"サービス利用規約",
+    "Created by":"Created by",
+    "See more at":"詳細を見る",
+    "Contact the developer":"開発者に連絡",
+    "api version":"APIバージョン",
+    "Response Content Type":"レスポンス コンテンツタイプ",
+    "Parameter content type:":"パラメータコンテンツタイプ:",
+    "fetching resource":"リソースの取得",
+    "fetching resource list":"リソース一覧の取得",
+    "Explore":"調査",
+    "Show Swagger Petstore Example Apis":"SwaggerペットストアAPIの表示",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"サーバから読み込めません.  適切なaccess-control-origin設定を持っていない可能性があります.",
+    "Please specify the protocol for":"プロトコルを指定してください",
+    "Can't read swagger JSON from":"次からswagger JSONを読み込めません",
+    "Finished Loading Resource Information. Rendering Swagger UI":"リソース情報の読み込みが完了しました. Swagger UIを描画しています",
+    "Unable to read api":"APIを読み込めません",
+    "from path":"次のパスから",
+    "server returned":"サーバからの返答"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/ko-kr.js b/core/metamodel/src/main/resources/swagger-ui/lang/ko-kr.js
new file mode 100644
index 0000000..03c7626
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/ko-kr.js
@@ -0,0 +1,53 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"경고:폐기예정됨",
+    "Implementation Notes":"구현 노트",
+    "Response Class":"응답 클래스",
+    "Status":"상태",
+    "Parameters":"매개변수들",
+    "Parameter":"매개변수",
+    "Value":"값",
+    "Description":"설명",
+    "Parameter Type":"매개변수 타입",
+    "Data Type":"데이터 타입",
+    "Response Messages":"응답 메세지",
+    "HTTP Status Code":"HTTP 상태 코드",
+    "Reason":"원인",
+    "Response Model":"응답 모델",
+    "Request URL":"요청 URL",
+    "Response Body":"응답 본문",
+    "Response Code":"응답 코드",
+    "Response Headers":"응답 헤더",
+    "Hide Response":"응답 숨기기",
+    "Headers":"헤더",
+    "Try it out!":"써보기!",
+    "Show/Hide":"보이기/숨기기",
+    "List Operations":"목록 작업",
+    "Expand Operations":"전개 작업",
+    "Raw":"원본",
+    "can't parse JSON.  Raw result":"JSON을 파싱할수 없음. 원본결과:",
+    "Model Schema":"모델 스키마",
+    "Model":"모델",
+    "apply":"적용",
+    "Username":"사용자 이름",
+    "Password":"암호",
+    "Terms of service":"이용약관",
+    "Created by":"작성자",
+    "See more at":"추가정보:",
+    "Contact the developer":"개발자에게 문의",
+    "api version":"api버전",
+    "Response Content Type":"응답Content Type",
+    "fetching resource":"리소스 가져오기",
+    "fetching resource list":"리소스 목록 가져오기",
+    "Explore":"탐색",
+    "Show Swagger Petstore Example Apis":"Swagger Petstore 예제 보기",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"서버로부터 읽어들일수 없습니다. access-control-origin 설정이 올바르지 않을수 있습니다.",
+    "Please specify the protocol for":"다음을 위한 프로토콜을 정하세요",
+    "Can't read swagger JSON from":"swagger JSON 을 다음으로 부터 읽을수 없습니다",
+    "Finished Loading Resource Information. Rendering Swagger UI":"리소스 정보 불러오기 완료. Swagger UI 랜더링",
+    "Unable to read api":"api를 읽을 수 없습니다.",
+    "from path":"다음 경로로 부터",
+    "server returned":"서버 응답함."
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/pl.js b/core/metamodel/src/main/resources/swagger-ui/lang/pl.js
new file mode 100644
index 0000000..ce41e91
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/pl.js
@@ -0,0 +1,53 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Uwaga: Wycofane",
+    "Implementation Notes":"Uwagi Implementacji",
+    "Response Class":"Klasa Odpowiedzi",
+    "Status":"Status",
+    "Parameters":"Parametry",
+    "Parameter":"Parametr",
+    "Value":"Wartość",
+    "Description":"Opis",
+    "Parameter Type":"Typ Parametru",
+    "Data Type":"Typ Danych",
+    "Response Messages":"Wiadomości Odpowiedzi",
+    "HTTP Status Code":"Kod Statusu HTTP",
+    "Reason":"Przyczyna",
+    "Response Model":"Model Odpowiedzi",
+    "Request URL":"URL Wywołania",
+    "Response Body":"Treść Odpowiedzi",
+    "Response Code":"Kod Odpowiedzi",
+    "Response Headers":"Nagłówki Odpowiedzi",
+    "Hide Response":"Ukryj Odpowiedź",
+    "Headers":"Nagłówki",
+    "Try it out!":"Wypróbuj!",
+    "Show/Hide":"Pokaż/Ukryj",
+    "List Operations":"Lista Operacji",
+    "Expand Operations":"Rozwiń Operacje",
+    "Raw":"Nieprzetworzone",
+    "can't parse JSON.  Raw result":"nie można przetworzyć pliku JSON.  Nieprzetworzone dane",
+    "Model Schema":"Schemat Modelu",
+    "Model":"Model",
+    "apply":"użyj",
+    "Username":"Nazwa użytkownika",
+    "Password":"Hasło",
+    "Terms of service":"Warunki używania",
+    "Created by":"Utworzone przez",
+    "See more at":"Zobacz więcej na",
+    "Contact the developer":"Kontakt z deweloperem",
+    "api version":"wersja api",
+    "Response Content Type":"Typ Zasobu Odpowiedzi",
+    "fetching resource":"ładowanie zasobu",
+    "fetching resource list":"ładowanie listy zasobów",
+    "Explore":"Eksploruj",
+    "Show Swagger Petstore Example Apis":"Pokaż Przykładowe Api Swagger Petstore",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.",
+    "Please specify the protocol for":"Proszę podać protokół dla",
+    "Can't read swagger JSON from":"Nie można odczytać swagger JSON z",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI",
+    "Unable to read api":"Nie można odczytać api",
+    "from path":"ze ścieżki",
+    "server returned":"serwer zwrócił"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/pt.js b/core/metamodel/src/main/resources/swagger-ui/lang/pt.js
new file mode 100644
index 0000000..f2e7c13
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/pt.js
@@ -0,0 +1,53 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Aviso: Depreciado",
+    "Implementation Notes":"Notas de Implementação",
+    "Response Class":"Classe de resposta",
+    "Status":"Status",
+    "Parameters":"Parâmetros",
+    "Parameter":"Parâmetro",
+    "Value":"Valor",
+    "Description":"Descrição",
+    "Parameter Type":"Tipo de parâmetro",
+    "Data Type":"Tipo de dados",
+    "Response Messages":"Mensagens de resposta",
+    "HTTP Status Code":"Código de status HTTP",
+    "Reason":"Razão",
+    "Response Model":"Modelo resposta",
+    "Request URL":"URL requisição",
+    "Response Body":"Corpo da resposta",
+    "Response Code":"Código da resposta",
+    "Response Headers":"Cabeçalho da resposta",
+    "Headers":"Cabeçalhos",
+    "Hide Response":"Esconder resposta",
+    "Try it out!":"Tente agora!",
+    "Show/Hide":"Mostrar/Esconder",
+    "List Operations":"Listar operações",
+    "Expand Operations":"Expandir operações",
+    "Raw":"Cru",
+    "can't parse JSON.  Raw result":"Falha ao analisar JSON.  Resulto cru",
+    "Model Schema":"Modelo esquema",
+    "Model":"Modelo",
+    "apply":"Aplicar",
+    "Username":"Usuário",
+    "Password":"Senha",
+    "Terms of service":"Termos do serviço",
+    "Created by":"Criado por",
+    "See more at":"Veja mais em",
+    "Contact the developer":"Contate o desenvolvedor",
+    "api version":"Versão api",
+    "Response Content Type":"Tipo de conteúdo da resposta",
+    "fetching resource":"busca recurso",
+    "fetching resource list":"buscando lista de recursos",
+    "Explore":"Explorar",
+    "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin",
+    "Please specify the protocol for":"Por favor especifique o protocolo",
+    "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI",
+    "Unable to read api":"Não foi possível ler api",
+    "from path":"do caminho",
+    "server returned":"servidor retornou"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/ru.js b/core/metamodel/src/main/resources/swagger-ui/lang/ru.js
new file mode 100644
index 0000000..592744e
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/ru.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Предупреждение: Устарело",
+    "Implementation Notes":"Заметки",
+    "Response Class":"Пример ответа",
+    "Status":"Статус",
+    "Parameters":"Параметры",
+    "Parameter":"Параметр",
+    "Value":"Значение",
+    "Description":"Описание",
+    "Parameter Type":"Тип параметра",
+    "Data Type":"Тип данных",
+    "HTTP Status Code":"HTTP код",
+    "Reason":"Причина",
+    "Response Model":"Структура ответа",
+    "Request URL":"URL запроса",
+    "Response Body":"Тело ответа",
+    "Response Code":"HTTP код ответа",
+    "Response Headers":"Заголовки ответа",
+    "Hide Response":"Спрятать ответ",
+    "Headers":"Заголовки",
+    "Response Messages":"Что может прийти в ответ",
+    "Try it out!":"Попробовать!",
+    "Show/Hide":"Показать/Скрыть",
+    "List Operations":"Операции кратко",
+    "Expand Operations":"Операции подробно",
+    "Raw":"В сыром виде",
+    "can't parse JSON.  Raw result":"Не удается распарсить ответ:",
+    "Example Value":"Пример",
+    "Model Schema":"Структура",
+    "Model":"Описание",
+    "Click to set as parameter value":"Нажмите, чтобы испльзовать в качестве значения параметра",
+    "apply":"применить",
+    "Username":"Имя пользователя",
+    "Password":"Пароль",
+    "Terms of service":"Условия использования",
+    "Created by":"Разработано",
+    "See more at":"Еще тут",
+    "Contact the developer":"Связаться с разработчиком",
+    "api version":"Версия API",
+    "Response Content Type":"Content Type ответа",
+    "Parameter content type:":"Content Type параметра:",
+    "fetching resource":"Получение ресурса",
+    "fetching resource list":"Получение ресурсов",
+    "Explore":"Показать",
+    "Show Swagger Petstore Example Apis":"Показать примеры АПИ",
+    "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, проблема с настройками доступа",
+    "Please specify the protocol for":"Пожалуйста, укажите протокол для",
+    "Can't read swagger JSON from":"Не получается прочитать swagger json из",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим",
+    "Unable to read api":"Не удалось прочитать api",
+    "from path":"по адресу",
+    "server returned":"сервер сказал"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/tr.js b/core/metamodel/src/main/resources/swagger-ui/lang/tr.js
new file mode 100644
index 0000000..16426a9
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/tr.js
@@ -0,0 +1,53 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"Uyarı: Deprecated",
+    "Implementation Notes":"Gerçekleştirim Notları",
+    "Response Class":"Dönen Sınıf",
+    "Status":"Statü",
+    "Parameters":"Parametreler",
+    "Parameter":"Parametre",
+    "Value":"Değer",
+    "Description":"Açıklama",
+    "Parameter Type":"Parametre Tipi",
+    "Data Type":"Veri Tipi",
+    "Response Messages":"Dönüş Mesajı",
+    "HTTP Status Code":"HTTP Statü Kodu",
+    "Reason":"Gerekçe",
+    "Response Model":"Dönüş Modeli",
+    "Request URL":"İstek URL",
+    "Response Body":"Dönüş İçeriği",
+    "Response Code":"Dönüş Kodu",
+    "Response Headers":"Dönüş Üst Bilgileri",
+    "Hide Response":"Dönüşü Gizle",
+    "Headers":"Üst Bilgiler",
+    "Try it out!":"Dene!",
+    "Show/Hide":"Göster/Gizle",
+    "List Operations":"Operasyonları Listele",
+    "Expand Operations":"Operasyonları Aç",
+    "Raw":"Ham",
+    "can't parse JSON.  Raw result":"JSON çözümlenemiyor.  Ham sonuç",
+    "Model Schema":"Model Şema",
+    "Model":"Model",
+    "apply":"uygula",
+    "Username":"Kullanıcı Adı",
+    "Password":"Parola",
+    "Terms of service":"Servis şartları",
+    "Created by":"Oluşturan",
+    "See more at":"Daha fazlası için",
+    "Contact the developer":"Geliştirici ile İletişime Geçin",
+    "api version":"api versiyon",
+    "Response Content Type":"Dönüş İçerik Tipi",
+    "fetching resource":"kaynak getiriliyor",
+    "fetching resource list":"kaynak listesi getiriliyor",
+    "Explore":"Keşfet",
+    "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.",
+    "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz",
+    "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor",
+    "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor",
+    "Unable to read api":"api okunamadı",
+    "from path":"yoldan",
+    "server returned":"sunucuya dönüldü"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/translator.js b/core/metamodel/src/main/resources/swagger-ui/lang/translator.js
new file mode 100644
index 0000000..ffb879f
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/translator.js
@@ -0,0 +1,39 @@
+'use strict';
+
+/**
+ * Translator for documentation pages.
+ *
+ * To enable translation you should include one of language-files in your index.html
+ * after <script src='lang/translator.js' type='text/javascript'></script>.
+ * For example - <script src='lang/ru.js' type='text/javascript'></script>
+ *
+ * If you wish to translate some new texts you should do two things:
+ * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too.
+ * 2. Mark that text it templates this way <anyHtmlTag data-sw-translate>New Phrase</anyHtmlTag> or <anyHtmlTag data-sw-translate value='New Phrase'/>.
+ * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate.
+ *
+ */
+window.SwaggerTranslator = {
+
+    _words:[],
+
+    translate: function(sel) {
+      var $this = this;
+      sel = sel || '[data-sw-translate]';
+
+      $(sel).each(function() {
+        $(this).html($this._tryTranslate($(this).html()));
+
+        $(this).val($this._tryTranslate($(this).val()));
+        $(this).attr('title', $this._tryTranslate($(this).attr('title')));
+      });
+    },
+
+    _tryTranslate: function(word) {
+      return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word;
+    },
+
+    learn: function(wordsMap) {
+      this._words = wordsMap;
+    }
+};
diff --git a/core/metamodel/src/main/resources/swagger-ui/lang/zh-cn.js b/core/metamodel/src/main/resources/swagger-ui/lang/zh-cn.js
new file mode 100644
index 0000000..3af61ad
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lang/zh-cn.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/* jshint quotmark: double */
+window.SwaggerTranslator.learn({
+    "Warning: Deprecated":"警告:已过时",
+    "Implementation Notes":"实现备注",
+    "Response Class":"响应类",
+    "Status":"状态",
+    "Parameters":"参数",
+    "Parameter":"参数",
+    "Value":"值",
+    "Description":"描述",
+    "Parameter Type":"参数类型",
+    "Data Type":"数据类型",
+    "Response Messages":"响应消息",
+    "HTTP Status Code":"HTTP状态码",
+    "Reason":"原因",
+    "Response Model":"响应模型",
+    "Request URL":"请求URL",
+    "Response Body":"响应体",
+    "Response Code":"响应码",
+    "Response Headers":"响应头",
+    "Hide Response":"隐藏响应",
+    "Headers":"头",
+    "Try it out!":"试一下!",
+    "Show/Hide":"显示/隐藏",
+    "List Operations":"显示操作",
+    "Expand Operations":"展开操作",
+    "Raw":"原始",
+    "can't parse JSON.  Raw result":"无法解析JSON. 原始结果",
+    "Example Value":"示例",
+    "Click to set as parameter value":"点击设置参数",
+    "Model Schema":"模型架构",
+    "Model":"模型",
+    "apply":"应用",
+    "Username":"用户名",
+    "Password":"密码",
+    "Terms of service":"服务条款",
+    "Created by":"创建者",
+    "See more at":"查看更多:",
+    "Contact the developer":"联系开发者",
+    "api version":"api版本",
+    "Response Content Type":"响应Content Type",
+    "Parameter content type:":"参数类型:",
+    "fetching resource":"正在获取资源",
+    "fetching resource list":"正在获取资源列表",
+    "Explore":"浏览",
+    "Show Swagger Petstore Example Apis":"显示 Swagger Petstore 示例 Apis",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"无法从服务器读取。可能没有正确设置access-control-origin。",
+    "Please specify the protocol for":"请指定协议:",
+    "Can't read swagger JSON from":"无法读取swagger JSON于",
+    "Finished Loading Resource Information. Rendering Swagger UI":"已加载资源信息。正在渲染Swagger UI",
+    "Unable to read api":"无法读取api",
+    "from path":"从路径",
+    "server returned":"服务器返回"
+});
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/backbone-min.js b/core/metamodel/src/main/resources/swagger-ui/lib/backbone-min.js
new file mode 100644
index 0000000..8eff02e
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/backbone-min.js
@@ -0,0 +1 @@
+!function(t,e){if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,s){t.Backbone=e(t,s,i,n)});else if("undefined"!=typeof exports){var i=require("underscore");e(t,exports,i)}else t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}(this,function(t,e,i,n){var s=t.Backbone,r=[],a=(r.push,r.slice);r.splice;e.VERSION="1.1.2",e.$=n,e.noConflict=function(){return t.Backbone=s,this},e.emulateHTTP=!1,e.emulateJSON=!1;var o=e.Events={on:function(t,e,i [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/es5-shim.js b/core/metamodel/src/main/resources/swagger-ui/lib/es5-shim.js
new file mode 100644
index 0000000..4c0fcab
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/es5-shim.js
@@ -0,0 +1 @@
+!function(t,e){"use strict";"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():t.returnExports=e()}(this,function(){var t,e,r=Array,n=r.prototype,o=Object,i=o.prototype,a=Function,u=a.prototype,f=String,s=f.prototype,l=Number,c=l.prototype,h=n.slice,p=n.splice,y=n.push,d=n.unshift,g=n.concat,v=n.join,b=u.call,w=u.apply,T=Math.max,m=Math.min,D=i.toString,x="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,S=Function.prototype.toString, [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/handlebars-4.0.5.js b/core/metamodel/src/main/resources/swagger-ui/lib/handlebars-4.0.5.js
new file mode 100644
index 0000000..57025bc
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/handlebars-4.0.5.js
@@ -0,0 +1,3 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Handlebars=e():t.Handlebars=e()}(this,function(){return function(t){function e(s){if(r[s])return r[s].exports;var i=r[s]={exports:{},id:s,loaded:!1};return t[s].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function s(){var t=v();return t.compile= [...]
+48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(t,e){throw new Error(t)},parse:function(t) [...]
+s.push(i),this.push(this.source.functionCall("container.invokePartial","",s))},assignToHash:function(t){var e=this.popStack(),r=void 0,s=void 0,i=void 0;this.trackIds&&(i=this.popStack()),this.stringParams&&(s=this.popStack(),r=this.popStack());var a=this.hash;r&&(a.contexts[t]=r),s&&(a.types[t]=s),i&&(a.ids[t]=i),a.values[t]=e},pushId:function(t,e,r){"BlockParam"===t?this.pushStackLiteral("blockParams["+e[0]+"].path["+e[1]+"]"+(r?" + "+JSON.stringify("."+r):"")):"PathExpression"===t?thi [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/highlight.9.1.0.pack.js b/core/metamodel/src/main/resources/swagger-ui/lib/highlight.9.1.0.pack.js
new file mode 100644
index 0000000..7b00c68
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/highlight.9.1.0.pack.js
@@ -0,0 +1 @@
+!function(e){"undefined"!=typeof exports?e(exports):(self.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return self.hljs}))}(function(e){function r(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function n(e,r){var t=e&&e.exec(r);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function c(e){var r,t,n,c=e.className+" ";if(c+=e.parentNode?e.parentNo [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/highlight.9.1.0.pack_extended.js b/core/metamodel/src/main/resources/swagger-ui/lib/highlight.9.1.0.pack_extended.js
new file mode 100644
index 0000000..162a224
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/highlight.9.1.0.pack_extended.js
@@ -0,0 +1 @@
+"use strict";!function(){var h,l;h=hljs.configure,hljs.configure=function(l){var i=l.highlightSizeThreshold;hljs.highlightSizeThreshold=i===+i?i:null,h.call(this,l)},l=hljs.highlightBlock,hljs.highlightBlock=function(h){var i=h.innerHTML,g=hljs.highlightSizeThreshold;(null==g||g>i.length)&&l.call(hljs,h)}}();
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/jquery-1.8.0.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/jquery-1.8.0.min.js
new file mode 100644
index 0000000..e2e2b7f
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/jquery-1.8.0.min.js
@@ -0,0 +1,3 @@
+!function(e,t){function n(e){var t=he[e]={};return K.each(e.split(te),function(e,n){t[n]=!0}),t}function r(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(me,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r||"false"!==r&&("null"===r?null:+r+""===r?+r:ge.test(r)?K.parseJSON(r):r)}catch(o){}K.data(e,n,r)}else r=t}return r}function i(e){var t;for(t in e)if(("data"!==t||!K.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function o(){return!1}func [...]
+n}})}),K.attrHooks.contenteditable={get:ye.get,set:function(e,t,n){""===t&&(t="false"),ye.set(e,t,n)}}),K.support.hrefNormalized||K.each(["href","src","width","height"],function(e,n){K.attrHooks[n]=K.extend(K.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null===r?t:r}})}),K.support.style||(K.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=""+t}}),K.support.optSelected||(K.propHooks.selected=K.extend(K.pro [...]
+Ze.optgroup=Ze.option,Ze.tbody=Ze.tfoot=Ze.colgroup=Ze.caption=Ze.thead,Ze.th=Ze.td,K.support.htmlSerialize||(Ze._default=[1,"X<div>","</div>"]),K.fn.extend({text:function(e){return K.access(this,function(e){return e===t?K.text(this):this.empty().append((this[0]&&this[0].ownerDocument||R).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(K.isFunction(e))return this.each(function(t){K(this).wrapAll(e.call(this,t))});if(this[0]){var t=K(e,this[0].ownerDocument).eq(0).clo [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/jquery.ba-bbq.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/jquery.ba-bbq.min.js
new file mode 100644
index 0000000..78d1ff5
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/jquery.ba-bbq.min.js
@@ -0,0 +1 @@
+!function(e,t){function n(e){return"string"==typeof e}function r(e){var t=g.call(arguments,1);return function(){return e.apply(this,t.concat(g.call(arguments)))}}function o(e){return e.replace(/^[^#]*#?(.*)$/,"$1")}function a(e){return e.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function i(r,o,a,i,c){var u,s,p,h,d;return i!==f?(p=a.match(r?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/),d=p[3]||"",2===c&&n(i)?s=i.replace(r?R:E,""):(h=l(p[2]),i=n(i)?l[r?A:w](i):i,s=2===c?i:1===c?e.extend [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/jquery.slideto.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/jquery.slideto.min.js
new file mode 100644
index 0000000..b15997b
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/jquery.slideto.min.js
@@ -0,0 +1 @@
+!function(i){i.fn.slideto=function(o){return o=i.extend({slide_duration:"slow",highlight_duration:3e3,highlight:!0,highlight_color:"#FFFF99"},o),this.each(function(){obj=i(this),i("body").animate({scrollTop:obj.offset().top},o.slide_duration,function(){o.highlight&&i.ui.version&&obj.effect("highlight",{color:o.highlight_color},o.highlight_duration)})})}}(jQuery);
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/jquery.wiggle.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/jquery.wiggle.min.js
new file mode 100644
index 0000000..6b4e261
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/jquery.wiggle.min.js
@@ -0,0 +1 @@
+jQuery.fn.wiggle=function(e){var a={speed:50,wiggles:3,travel:5,callback:null},e=jQuery.extend(a,e);return this.each(function(){var a=this,l=(jQuery(this).wrap('<div class="wiggle-wrap"></div>').css("position","relative"),0);for(i=1;i<=e.wiggles;i++)jQuery(this).animate({left:"-="+e.travel},e.speed).animate({left:"+="+2*e.travel},2*e.speed).animate({left:"-="+e.travel},e.speed,function(){l++,jQuery(a).parent().hasClass("wiggle-wrap")&&jQuery(a).parent().replaceWith(a),l==e.wiggles&&jQuer [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/js-yaml.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/js-yaml.min.js
new file mode 100644
index 0000000..2514a41
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/js-yaml.min.js
@@ -0,0 +1,2 @@
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.jsyaml=t()}}(function(){var t;return function e(t,n,i){function r(a,s){if(!n[a]){if(!t[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");thro [...]
+predicate:a,represent:o})},{"../type":13,buffer:30}],15:[function(t,e,n){"use strict";function i(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)}function r(t){return"true"===t||"True"===t||"TRUE"===t}function o(t){return"[object Boolean]"===Object.prototype.toString.call(t)}var a=t("../type");e.exports=new a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:i,construct:r,predicate:o,represent:{lowerca [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/jsoneditor.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/jsoneditor.min.js
new file mode 100644
index 0000000..21db1ab
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/jsoneditor.min.js
@@ -0,0 +1,5 @@
+!function(){var t;!function(){var e=!1,i=/xyz/.test(function(){window.postMessage("xyz")})?/\b_super\b/:/.*/;return t=function(){},t.extend=function(t){function s(){!e&&this.init&&this.init.apply(this,arguments)}var r=this.prototype;e=!0;var n=new this;e=!1;for(var o in t)n[o]="function"==typeof t[o]&&"function"==typeof r[o]&&i.test(t[o])?function(t,e){return function(){var i=this._super;this._super=r[t];var s=e.apply(this,arguments);return this._super=i,s}}(o,t[o]):t[o];return s.prototy [...]
+var s=this.input_type;("cpp"===s||"c++"===s||"c"===s)&&(s="c_cpp"),this.ace_container=document.createElement("div"),this.ace_container.style.width="100%",this.ace_container.style.position="relative",this.ace_container.style.height="400px",this.input.parentNode.insertBefore(this.ace_container,this.input),this.input.style.display="none",this.ace_editor=window.ace.edit(this.ace_container),this.ace_editor.setValue(this.getValue()),n.plugins.ace.theme&&this.ace_editor.setTheme("ace/theme/"+n. [...]
+this.delete_last_row_button.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation();var i=t.getValue(),s=null;t.rows.length>1&&t.rows[t.rows.length-1].tab===t.active_tab&&(s=t.rows[t.rows.length-2].tab),i.pop(),t.setValue(i),s&&(t.active_tab=s,t.refreshTabs()),t.onChange(!0)}),t.controls.appendChild(this.delete_last_row_button),this.remove_all_rows_button=this.getButton("All","delete","Delete All"),this.remove_all_rows_button.addEventListener("click",function(e){e.pre [...]
+this.preview.appendChild(s)}this.preview.innerHTML+="<br>";var r=this.getButton("Upload","upload","Upload");this.preview.appendChild(r),r.addEventListener("click",function(e){e.preventDefault(),r.setAttribute("disabled","disabled"),t.theme.removeInputError(t.uploader),t.theme.getProgressBar&&(t.progressBar=t.theme.getProgressBar(),t.preview.appendChild(t.progressBar)),t.jsoneditor.options.upload(t.path,i,{success:function(e){t.setValue(e),t.parent?t.parent.onChildEditorChange(t):t.jsoned [...]
+}),n.defaults.resolvers.unshift(function(t){return"any"===t.type?"multiple":void 0}),n.defaults.resolvers.unshift(function(t){return"string"===t.type&&t.media&&"base64"===t.media.binaryEncoding?"base64":void 0}),n.defaults.resolvers.unshift(function(t){return"string"===t.type&&"url"===t.format&&t.options&&t.options.upload===!0&&window.FileReader?"upload":void 0}),n.defaults.resolvers.unshift(function(t){return"array"==t.type&&"table"==t.format?"table":void 0}),n.defaults.resolvers.unshif [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/lodash.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/lodash.min.js
new file mode 100644
index 0000000..3625da8
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/lodash.min.js
@@ -0,0 +1,2 @@
+(function(){function n(n,t){if(n!==t){var r=null===n,e=n===x,u=n===n,o=null===t,i=t===x,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return"function"==typeof n||!1}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e= [...]
+Nn.bindKey=Ao,Nn.callback=Le,Nn.chain=te,Nn.chunk=function(n,t,r){t=(r?$r(n,t,r):null==t)?1:ju(xu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=De(du(e/t));r<e;)o[++u]=St(n,r,r+=t);return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=fo,Nn.create=function(n,t,r){var e=Pu(n);return r&&$r(n,t,r)&&(t=x),t?et(e,t):e},Nn.curry=jo,Nn.curryRight=ko,Nn.debounce=le,Nn.defaults [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/marked.js b/core/metamodel/src/main/resources/swagger-ui/lib/marked.js
new file mode 100644
index 0000000..c334bff
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/marked.js
@@ -0,0 +1 @@
+(function(){function e(e){this.tokens=[],this.tokens.links={},this.options=e||a.defaults,this.rules=p.normal,this.options.gfm&&(this.options.tables?this.rules=p.tables:this.rules=p.gfm)}function t(e,t){if(this.options=t||a.defaults,this.links=e,this.rules=u.normal,this.renderer=this.options.renderer||new n,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=u.breaks:this.rules=u.gfm:th [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/object-assign-pollyfill.js b/core/metamodel/src/main/resources/swagger-ui/lib/object-assign-pollyfill.js
new file mode 100644
index 0000000..b34d63c
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/object-assign-pollyfill.js
@@ -0,0 +1 @@
+"function"!=typeof Object.assign&&!function(){Object.assign=function(n){"use strict";if(void 0===n||null===n)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(n),o=1;o<arguments.length;o++){var r=arguments[o];if(void 0!==r&&null!==r)for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t}}();
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/sanitize-html.min.js b/core/metamodel/src/main/resources/swagger-ui/lib/sanitize-html.min.js
new file mode 100644
index 0000000..ade2508
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/sanitize-html.min.js
@@ -0,0 +1,4 @@
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.sanitizeHtml=t()}}(function(){return function t(e,r,n){function i(o,a){if(!r[o]){if(!e[o]){var c="function"==typeof require&&require;if(!a&&c)return c(o,!0);if(s)return s(o,!0);var u=new Error("Cannot find module '"+o+"'");thro [...]
+t.next=null,this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withDomLvl1&&(t.__proto__="tag"===t.type?a:o),n?(t.prev=n,n.next=t):t.prev=null,r.push(t),t.parent=e||null},n.prototype.onopentag=function(t,e){var r={type:"script"===t?i.Script:"style"===t?i.Style:i.Tag,name:t,attribs:e,children:[]};this._addDomElement(r),this._tagStack.push(r)},n.prototype.ontext=function(t){var e,r=this._options.normalizeWhitespace||this._options.ignoreWhitespace;!this._ta [...]
+ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",t [...]
+},get ProxyHandler(){return n("ProxyHandler",t("./ProxyHandler.js"))},get DomUtils(){return n("DomUtils",t("domutils"))},get CollectingHandler(){return n("CollectingHandler",t("./CollectingHandler.js"))},DefaultHandler:s,get RssHandler(){return n("RssHandler",this.FeedHandler)},parseDOM:function(t,e){var r=new s(e);return new i(r,e).end(t),r.dom},parseFeed:function(t,r){var n=new e.exports.FeedHandler(r);return new i(n,r).end(t),n.dom},createDomStream:function(t,e,r){var n=new s(t,e,r);r [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/lib/swagger-oauth.js b/core/metamodel/src/main/resources/swagger-ui/lib/swagger-oauth.js
new file mode 100644
index 0000000..7160291
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/lib/swagger-oauth.js
@@ -0,0 +1 @@
+function handleLogin(){var e=[],o=window.swaggerUiAuth.authSchemes||window.swaggerUiAuth.securityDefinitions;if(o){var i,n=o;for(i in n){var a=n[i];if("oauth2"===a.type&&a.scopes){var t;if(Array.isArray(a.scopes)){var p;for(p=0;p<a.scopes.length;p++)e.push(a.scopes[p])}else for(t in a.scopes)e.push({scope:t,description:a.scopes[t],OAuthSchemeKey:i})}}}for(window.swaggerUi.api&&window.swaggerUi.api.info&&(appName=window.swaggerUi.api.info.title),$(".api-popup-dialog").remove(),popupDialog [...]
\ No newline at end of file
diff --git a/core/metamodel/src/main/resources/swagger-ui/o2c.html b/core/metamodel/src/main/resources/swagger-ui/o2c.html
new file mode 100644
index 0000000..0cde1d3
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/o2c.html
@@ -0,0 +1,20 @@
+<script>
+var qp = null;
+if(/code|token|error/.test(window.location.hash)) {
+  qp = location.hash.substring(1);
+}
+else {
+  qp = location.search.substring(1);
+}
+qp = qp ? JSON.parse('{"' + qp.replace(/&/g, '","').replace(/=/g,'":"') + '"}',
+  function(key, value) {
+    return key===""?value:decodeURIComponent(value) }
+  ):{}
+
+if (window.opener.swaggerUiAuth.tokenUrl)
+    window.opener.processOAuthCode(qp);
+else
+    window.opener.onOAuthComplete(qp);
+
+window.close();
+</script>
diff --git a/core/metamodel/src/main/resources/swagger-ui/swagger-ui.js b/core/metamodel/src/main/resources/swagger-ui/swagger-ui.js
new file mode 100644
index 0000000..5219d03
--- /dev/null
+++ b/core/metamodel/src/main/resources/swagger-ui/swagger-ui.js
@@ -0,0 +1,25344 @@
+/**
+ * swagger-ui - Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API
+ * @version v2.2.10
+ * @link http://swagger.io
+ * @license Apache-2.0
+ */
+(function(){/* jshint ignore:start */ 
+ {(function() {
+  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
+templates['apikey_auth'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "                <span class=\"key_auth__value\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.value : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</span>\n";
+},"3":function(container,depth0,helpers,partials,data) {
+    return "                <input placeholder=\"api_key\" class=\"auth_input input_apiKey_entry\" name=\"apiKey\" type=\"text\"/>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<div class=\"key_input_container\">\n    <h3 class=\"auth__title\">Api key authorization</h3>\n    <div class=\"auth__description\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>\n    <div>\n        <div class=\"key_auth__field\">\n            <span class=\"key_auth__label\">name:</span>\n            <span class=\"key_auth__value\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</span>\n        </div>\n        <div class=\"key_auth__field\">\n            <span class=\"key_auth__label\">in:</span>\n            <span class=\"key_auth__value\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0["in"] : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</span>\n        </div>\n        <div class=\"key_auth__field\">\n            <span class=\"key_auth__label\">value:</span>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
+    + "        </div>\n    </div>\n</div>\n";
+},"useData":true});
+templates['auth_button'] = template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    return "<a class='authorize__btn' href=\"#\">Authorize</a>\n";
+},"useData":true});
+templates['auth_button_operation'] = template({"1":function(container,depth0,helpers,partials,data) {
+    return "        authorize__btn_operation_login\n";
+},"3":function(container,depth0,helpers,partials,data) {
+    return "        authorize__btn_operation_logout\n";
+},"5":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "        <ul class=\"authorize-scopes\">\n"
+    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.scopes : depth0),{"name":"each","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "        </ul>\n";
+},"6":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "                <li class=\"authorize__scope\" title=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.scope : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</li>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "<div class=\"authorize__btn authorize__btn_operation\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
+    + "\">\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.scopes : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "</div>\n";
+},"useData":true});
+templates['auth_view'] = template({"1":function(container,depth0,helpers,partials,data) {
+    return "            <button type=\"button\" class=\"auth__button auth_submit__button\" data-sw-translate>Authorize</button>\n";
+},"3":function(container,depth0,helpers,partials,data) {
+    return "            <button type=\"button\" class=\"auth__button auth_logout__button\" data-sw-translate>Logout</button>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "<div class=\"auth_container\">\n\n    <div class=\"auth_inner\"></div>\n    <div class=\"auth_submit\">\n"
+    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isAuthorized : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "    </div>\n\n</div>\n";
+},"useData":true});
+templates['basic_auth'] = template({"1":function(container,depth0,helpers,partials,data) {
+    return " - authorized";
+},"3":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "                <span class=\"basic_auth__value\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.username : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</span>\n";
+},"5":function(container,depth0,helpers,partials,data) {
+    return "                <input required placeholder=\"username\" class=\"basic_auth__username auth_input\" name=\"username\" type=\"text\"/>\n";
+},"7":function(container,depth0,helpers,partials,data) {
+    return "            <div class=\"auth_label\">\n                <span class=\"basic_auth__label\" data-sw-translate>password:</span>\n                <input required placeholder=\"password\" class=\"basic_auth__password auth_input\" name=\"password\" type=\"password\"/></label>\n            </div>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "<div class='basic_auth_container'>\n    <h3 class=\"auth__title\">Basic authentication"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "</h3>\n    <form class=\"basic_input_container\">\n        <div class=\"auth__description\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>\n        <div class=\"auth_label\">\n            <span class=\"basic_auth__label\" data-sw-translate>username:</span>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(5, data, 0),"data":data})) != null ? stack1 : "")
+    + "        </div>\n"
+    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "    </form>\n</div>\n";
+},"useData":true});
+templates['content_type'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.produces : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "	<option value=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</option>\n";
+},"4":function(container,depth0,helpers,partials,data) {
+    return "  <option value=\"application/json\">application/json</option>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<label data-sw-translate for=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.contentTypeId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">Response Content Type</label>\n<select name=\"contentType\" id=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.contentTypeId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.produces : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "")
+    + "</select>\n";
+},"useData":true});
+templates['main'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "  <div class=\"info_title\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.title : stack1),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>\n  <div class=\"info_description markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.description : stack1),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.externalDocs : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "  "
+    + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.termsOfServiceUrl : stack1),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n  "
+    + ((stack1 = helpers["if"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.name : stack1),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n  "
+    + ((stack1 = helpers["if"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n  "
+    + ((stack1 = helpers["if"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.email : stack1),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n  "
+    + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n";
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "  <p>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.description : stack1),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</p>\n  <a href=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" target=\"_blank\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</a>\n";
+},"4":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "<div class=\"info_tos\"><a target=\"_blank\" href=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.termsOfServiceUrl : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" data-sw-translate>Terms of service</a></div>";
+},"6":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "<div><div class='info_name' style=\"display: inline\" data-sw-translate>Created by </div> "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.name : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>";
+},"8":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<div class='info_url' data-sw-translate>See more at <a href=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</a></div>";
+},"10":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<div class='info_email'><a target=\"_parent\" href=\"mailto:"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.email : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "?subject="
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.title : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" data-sw-translate>Contact the developer</a></div>";
+},"12":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<div class='info_license'><a target=\"_blank\" href='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1)) != null ? stack1.name : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</a></div>";
+},"14":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "  , <span style=\"font-variant: small-caps\" data-sw-translate>api version</span>: "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n    ";
+},"16":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "    <span style=\"float:right\"><a target=\"_blank\" href=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.validatorUrl : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "/debug?url="
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.url : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\"><img id=\"validator\" src=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.validatorUrl : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "?url="
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.url : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\"></a>\n    </span>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "<div class='info' id='api_info'>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.info : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "</div>\n<div class='container' id='resources_container'>\n  <div class='authorize-wrapper'></div>\n\n  <ul id='resources'></ul>\n\n  <div class=\"footer\">\n    <h4 style=\"color: #999\">[ <span style=\"font-variant: small-caps\">base url</span>: "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.basePath : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n"
+    + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1),{"name":"if","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "]\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.validatorUrl : depth0),{"name":"if","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "    </h4>\n    </div>\n</div>\n";
+},"useData":true});
+templates['oauth2'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "<p>Authorization URL: "
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.authorizationUrl : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</p>";
+},"3":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "<p>Token URL: "
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.tokenUrl : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</p>";
+},"5":function(container,depth0,helpers,partials,data) {
+    return "        <p>Please input username and password for password flow authorization</p>\n        <fieldset>\n            <div><label>Username: <input class=\"oauth-username\" type=\"text\" name=\"username\"></label></div>\n            <div><label>Password: <input class=\"oauth-password\" type=\"password\" name=\"password\"></label></div>\n        </fieldset>\n";
+},"7":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "        <p>Setup client authentication."
+    + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.requireClientAuthenticaiton : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "</p>\n        <fieldset>\n            <div><label>Type:\n                <select class=\"oauth-client-authentication-type\" name=\"client-authentication-type\">\n                    <option value=\"none\" selected>None or other</option>\n                    <option value=\"basic\">Basic auth</option>\n                    <option value=\"request-body\">Request body</option>\n                </select>\n            </label></div>\n            <div class=\"oauth-client-authentication\ [...]
+},"8":function(container,depth0,helpers,partials,data) {
+    return "(Required)";
+},"10":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "            <li>\n                <input class=\"oauth-scope\" type=\"checkbox\" data-scope=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.scope : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" oauthtype=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.OAuthSchemeKey : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\"/>\n                <label>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.scope : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</label><br/>\n                <span class=\"api-scope-desc\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.OAuthSchemeKey : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "                </span>\n            </li>\n";
+},"11":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "                        ("
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.OAuthSchemeKey : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + ")\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<div>\n    <h3 class=\"auth__title\">OAuth2.0</h3>\n    <p>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</p>\n    "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.authorizationUrl : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n    "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tokenUrl : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n    <p>flow: "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.flow : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</p>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isPasswordFlow : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.clientAuthentication : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "    <p><strong> "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.appName : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + " </strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>\n    <p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.\n        <a href=\"#\">Learn how to use</a>\n    </p>\n    <ul class=\"api-popup-scopes\">\n"
+    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.scopes : depth0),{"name":"each","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "    </ul>\n</div>";
+},"useData":true});
+templates['operation'] = template({"1":function(container,depth0,helpers,partials,data) {
+    return "deprecated";
+},"3":function(container,depth0,helpers,partials,data) {
+    return "            <h4><span data-sw-translate>Warning: Deprecated</span></h4>\n";
+},"5":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "        <h4><span data-sw-translate>Implementation Notes</span></h4>\n        <div class=\"markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>\n";
+},"7":function(container,depth0,helpers,partials,data) {
+    return "            <div class='authorize-wrapper authorize-wrapper_operation'></div>\n";
+},"9":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "          <div class=\"response-class\">\n            <h4><span data-sw-translate>Response Class</span> (<span data-sw-translate>Status</span> "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.successCode : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + ")</h4>\n              "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.successDescription : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n            <p><span class=\"model-signature\" /></p>\n            <br/>\n            <div class=\"response-content-type\" />\n            </div>\n";
+},"10":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "<div class=\"markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.successDescription : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</div>";
+},"12":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "          <h4 data-sw-translate>Headers</h4>\n          <table class=\"headers\">\n            <thead>\n              <tr>\n                <th style=\"width: 100px; max-width: 100px\" data-sw-translate>Header</th>\n                <th style=\"width: 310px; max-width: 310px\" data-sw-translate>Description</th>\n                <th style=\"width: 200px; max-width: 200px\" data-sw-translate>Type</th>\n                <th style=\"width: 320px; max-width: 320px\" data-sw-translate> [...]
+    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.headers : depth0),{"name":"each","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "            </tbody>\n          </table>\n";
+},"13":function(container,depth0,helpers,partials,data) {
+    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "              <tr>\n                <td>"
+    + container.escapeExpression(((helper = (helper = helpers.key || (data && data.key)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"key","hash":{},"data":data}) : helper)))
+    + "</td>\n                <td>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n                <td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n                <td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.other : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n              </tr>\n";
+},"15":function(container,depth0,helpers,partials,data) {
+    return "          <h4 data-sw-translate>Parameters</h4>\n          <table class='fullwidth parameters'>\n          <thead>\n            <tr>\n            <th style=\"width: 100px; max-width: 100px\" data-sw-translate>Parameter</th>\n            <th style=\"width: 310px; max-width: 310px\" data-sw-translate>Value</th>\n            <th style=\"width: 200px; max-width: 200px\" data-sw-translate>Description</th>\n            <th style=\"width: 100px; max-width: 100px\" data-sw-translate> [...]
+},"17":function(container,depth0,helpers,partials,data) {
+    return "          <div style='margin:0;padding:0;display:inline'></div>\n          <h4 data-sw-translate>Response Messages</h4>\n          <table class='fullwidth response-messages'>\n            <thead>\n            <tr>\n              <th data-sw-translate>HTTP Status Code</th>\n              <th data-sw-translate>Reason</th>\n              <th data-sw-translate>Response Model</th>\n              <th data-sw-translate>Headers</th>\n            </tr>\n            </thead>\n          [...]
+},"19":function(container,depth0,helpers,partials,data) {
+    return "";
+},"21":function(container,depth0,helpers,partials,data) {
+    return "          <div class='sandbox_header'>\n            <input class='submit' type='submit' value='Try it out!' data-sw-translate/>\n            <a href='#' class='response_hider' style='display:none' data-sw-translate>Hide Response</a>\n            <span class='response_throbber' style='display:none'></span>\n          </div>\n";
+},"23":function(container,depth0,helpers,partials,data) {
+    return "          <h4 data-sw-translate>Request Headers</h4>\n          <div class='block request_headers'></div>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression;
+
+  return "  <ul class='operations' >\n    <li class='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.method : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + " operation' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.parentId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "_"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>\n      <div class='heading'>\n        <h3>\n          <span class='http_method'>\n          <a href='#!/"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "/"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "' class=\"toggleOperation\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.method : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</a>\n          </span>\n          <span class='path'>\n          <a href='#!/"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "/"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "' class=\"toggleOperation "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.deprecated : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.path : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</a>\n          </span>\n        </h3>\n        <ul class='options'>\n          <li>\n          <a href='#!/"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "/"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "' class=\"toggleOperation\"><span class=\"markdown\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.summary : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</span></a>\n          </li>\n        </ul>\n      </div>\n      <div class='content' id='"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "_"
+    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "_content' style='display:none'>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.deprecated : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.security : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.type : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.headers : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n        <form accept-charset='UTF-8' class='sandbox'>\n          <div style='margin:0;padding:0;display:inline'></div>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.parameters : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.responseMessages : depth0),{"name":"if","hash":{},"fn":container.program(17, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isReadOnly : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.program(21, data, 0),"data":data})) != null ? stack1 : "")
+    + "        </form>\n        <div class='response' style='display:none'>\n          <h4 class='curl'>Curl</h4>\n          <div class='block curl'></div>\n          <h4 data-sw-translate>Request URL</h4>\n          <div class='block request_url'></div>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.showRequestHeaders : depth0),{"name":"if","hash":{},"fn":container.program(23, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "          <h4 data-sw-translate>Response Body</h4>\n          <div class='block response_body'></div>\n          <h4 data-sw-translate>Response Code</h4>\n          <div class='block response_code'></div>\n          <h4 data-sw-translate>Response Headers</h4>\n          <div class='block response_headers'></div>\n        </div>\n      </div>\n    </li>\n  </ul>\n";
+},"useData":true});
+templates['param'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "");
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "			<input type=\"file\" name='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'/>\n			<div class=\"parameter-content-type\" />\n";
+},"4":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "");
+},"5":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "				<div class=\"editor_holder\"></div>\n				<textarea class='body-textarea' name='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</textarea>\n        <br />\n        <div class=\"parameter-content-type\" />\n";
+},"7":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "				<textarea class='body-textarea' name='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'></textarea>\n				<div class=\"editor_holder\"></div>\n				<br />\n				<div class=\"parameter-content-type\" />\n";
+},"9":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(10, data, 0),"data":data})) != null ? stack1 : "");
+},"10":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = (helpers.renderTextParam || (depth0 && depth0.renderTextParam) || helpers.helperMissing).call(depth0 != null ? depth0 : {},depth0,{"name":"renderTextParam","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
+},"11":function(container,depth0,helpers,partials,data) {
+    return "";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<td class='code'><label for='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</label></td>\n<td>\n\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(9, data, 0),"data":data})) != null ? stack1 : "")
+    + "\n</td>\n<td class=\"markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td>\n	<span class=\"model-signature\"></span>\n</td>\n";
+},"useData":true});
+templates['param_list'] = template({"1":function(container,depth0,helpers,partials,data) {
+    return " required";
+},"3":function(container,depth0,helpers,partials,data) {
+    return " multiple=\"multiple\"";
+},"5":function(container,depth0,helpers,partials,data) {
+    return " required ";
+},"7":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "      <option "
+    + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.hasDefault : depth0),{"name":"unless","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + " value=''></option>\n";
+},"8":function(container,depth0,helpers,partials,data) {
+    return "  selected=\"\" ";
+},"10":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "\n      <option "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isDefault : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "  value='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.value : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "'> "
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.value : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + " "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isDefault : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + " </option>\n\n";
+},"11":function(container,depth0,helpers,partials,data) {
+    return " selected=\"\"  ";
+},"13":function(container,depth0,helpers,partials,data) {
+    return " (default) ";
+},"15":function(container,depth0,helpers,partials,data) {
+    return "<strong>";
+},"17":function(container,depth0,helpers,partials,data) {
+    return "</strong>";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<td class='code"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "'><label for='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</label></td>\n<td>\n  <select "
+    + ((stack1 = (helpers.isArray || (depth0 && depth0.isArray) || alias2).call(alias1,depth0,{"name":"isArray","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + " class=\"parameter "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\" name=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" id=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">\n\n"
+    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n"
+    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.allowableValues : depth0)) != null ? stack1.descriptiveValues : stack1),{"name":"each","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n  </select>\n</td>\n<td class=\"markdown\">"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(17, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "</td>\n<td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+},"useData":true});
+templates['param_readonly'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "        <textarea class='body-textarea' readonly='readonly' name='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</textarea>\n        <div class=\"parameter-content-type\" />\n";
+},"3":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : "");
+},"4":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "            "
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n";
+},"6":function(container,depth0,helpers,partials,data) {
+    return "            (empty)\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<td class='code'><label for='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</label></td>\n<td>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
+    + "</td>\n<td class=\"markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+},"useData":true});
+templates['param_readonly_required'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "        <textarea class='body-textarea' readonly='readonly' placeholder='(required)' name='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</textarea>\n";
+},"3":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : "");
+},"4":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "            "
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n";
+},"6":function(container,depth0,helpers,partials,data) {
+    return "            (empty)\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<td class='code required'><label for='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</label></td>\n<td>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
+    + "</td>\n<td class=\"markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+},"useData":true});
+templates['param_required'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "");
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "			<input type=\"file\" name='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'/>\n";
+},"4":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "");
+},"5":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "				<div class=\"editor_holder\"></div>\n				<textarea class='body-textarea required' placeholder='(required)' name='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id=\""
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</textarea>\n        <br />\n        <div class=\"parameter-content-type\" />\n";
+},"7":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "				<textarea class='body-textarea required' placeholder='(required)' name='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'></textarea>\n				<div class=\"editor_holder\"></div>\n				<br />\n				<div class=\"parameter-content-type\" />\n";
+},"9":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.program(12, data, 0),"data":data})) != null ? stack1 : "");
+},"10":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "			<input class='parameter required' type='file' name='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'/>\n";
+},"12":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = (helpers.renderTextParam || (depth0 && depth0.renderTextParam) || helpers.helperMissing).call(depth0 != null ? depth0 : {},depth0,{"name":"renderTextParam","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
+},"13":function(container,depth0,helpers,partials,data) {
+    return "";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<td class='code required'><label for='"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "'>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</label></td>\n<td>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(9, data, 0),"data":data})) != null ? stack1 : "")
+    + "</td>\n<td>\n	<strong><span class=\"markdown\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</span></strong>\n</td>\n<td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
+},"useData":true});
+templates['parameter_content_type'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.consumes : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "  <option value=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</option>\n";
+},"4":function(container,depth0,helpers,partials,data) {
+    return "  <option value=\"application/json\">application/json</option>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<label for=\""
+    + container.escapeExpression(((helper = (helper = helpers.parameterContentTypeId || (depth0 != null ? depth0.parameterContentTypeId : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"parameterContentTypeId","hash":{},"data":data}) : helper)))
+    + "\" data-sw-translate>Parameter content type:</label>\n<select name=\"parameterContentType\" id=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.parameterContentTypeId : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.consumes : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "")
+    + "</select>\n";
+},"useData":true});
+templates['popup'] = template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var helper;
+
+  return "<div class=\"api-popup-dialog-wrapper\">\n    <div class=\"api-popup-title\">"
+    + container.escapeExpression(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"title","hash":{},"data":data}) : helper)))
+    + "</div>\n    <div class=\"api-popup-content\"></div>\n    <p class=\"error-msg\"></p>\n    <div class=\"api-popup-actions\">\n        <button class=\"api-popup-cancel api-button gray\" type=\"button\">Cancel</button>\n    </div>\n</div>\n<div class=\"api-popup-dialog-shadow\"></div>";
+},"useData":true});
+templates['resource'] = template({"1":function(container,depth0,helpers,partials,data) {
+    return " : ";
+},"3":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "    <li>\n      <a href='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.url : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' data-sw-translate>Raw</a>\n    </li>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, helper, options, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, buffer = 
+  "<div class='heading'>\n  <h2>\n    <a href='#!/"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' class=\"toggleEndpointList\" data-id=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</a> ";
+  stack1 = ((helper = (helper = helpers.summary || (depth0 != null ? depth0.summary : depth0)) != null ? helper : alias2),(options={"name":"summary","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data}),(typeof helper === "function" ? helper.call(alias1,options) : helper));
+  if (!helpers.summary) { stack1 = helpers.blockHelperMissing.call(depth0,stack1,options)}
+  if (stack1 != null) { buffer += stack1; }
+  return buffer + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.summary : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n  </h2>\n  <ul class='options'>\n    <li>\n      <a href='#!/"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' id='endpointListTogger_"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "' class=\"toggleEndpointList\" data-id=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" data-sw-translate>Show/Hide</a>\n    </li>\n    <li>\n      <a href='#' class=\"collapseResource\" data-id=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" data-sw-translate>\n        List Operations\n      </a>\n    </li>\n    <li>\n      <a href='#' class=\"expandResource\" data-id=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\" data-sw-translate>\n        Expand Operations\n      </a>\n    </li>\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.url : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "  </ul>\n</div>\n<ul class='endpoints' id='"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "_endpoint_list' style='display:none'>\n\n</ul>\n";
+},"useData":true});
+templates['response_content_type'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.produces : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "  <option value=\""
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "\">"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</option>\n";
+},"4":function(container,depth0,helpers,partials,data) {
+    return "  <option value=\"application/json\">application/json</option>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression;
+
+  return "<label data-sw-translate for=\""
+    + alias4(((helper = (helper = helpers.responseContentTypeId || (depth0 != null ? depth0.responseContentTypeId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"responseContentTypeId","hash":{},"data":data}) : helper)))
+    + "\">Response Content Type</label>\n<select name=\"responseContentType\" id=\""
+    + alias4(((helper = (helper = helpers.responseContentTypeId || (depth0 != null ? depth0.responseContentTypeId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"responseContentTypeId","hash":{},"data":data}) : helper)))
+    + "\">\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.produces : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "")
+    + "</select>\n";
+},"useData":true});
+templates['signature'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "\n<div>\n<ul class=\"signature-nav\">\n  <li><a class=\"description-link\" href=\"#\" data-sw-translate>Model</a></li>\n  <li><a class=\"snippet-link\" href=\"#\" data-sw-translate>Example Value</a></li>\n</ul>\n<div>\n\n<div class=\"signature-container\">\n  <div class=\"description\">\n      "
+    + container.escapeExpression((helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.signature : depth0),{"name":"sanitize","hash":{},"data":data}))
+    + "\n  </div>\n\n  <div class=\"snippet\">\n"
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.sampleJSON : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.sampleXML : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "  </div>\n</div>\n";
+},"2":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "      <div class=\"snippet_json\">\n        <pre><code>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.sampleJSON : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</code></pre>\n        "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isParam : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n      </div>\n";
+},"3":function(container,depth0,helpers,partials,data) {
+    return "<small class=\"notice\" data-sw-translate></small>";
+},"5":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {};
+
+  return "    <div class=\"snippet_xml\">\n      <pre><code>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.sampleXML : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</code></pre>\n      "
+    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isParam : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "\n    </div>\n";
+},"7":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return "    "
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.signature : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1;
+
+  return ((stack1 = (helpers.ifCond || (depth0 && depth0.ifCond) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.sampleJSON : depth0),"||",(depth0 != null ? depth0.sampleXML : depth0),{"name":"ifCond","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "");
+},"useData":true});
+templates['status_code'] = template({"1":function(container,depth0,helpers,partials,data) {
+    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "      <tr>\n        <td>"
+    + container.escapeExpression(((helper = (helper = helpers.key || (data && data.key)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"key","hash":{},"data":data}) : helper)))
+    + "</td>\n        <td>"
+    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n        <td>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n      </tr>\n";
+},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
+    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
+
+  return "<td width='15%' class='code'>"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.code : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td class=\"markdown\">"
+    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.message : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
+    + "</td>\n<td width='50%'><span class=\"model-signature\" /></td>\n<td class=\"headers\">\n  <table>\n    <tbody>\n"
+    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.headers : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
+    + "    </tbody>\n  </table>\n</td>";
+},"useData":true});
+})();} 
+ /* jshint ignore:end */
+'use strict';
+
+
+$(function() {
+
+	// Helper function for vertically aligning DOM elements
+	// http://www.seodenver.com/simple-vertical-align-plugin-for-jquery/
+	$.fn.vAlign = function() {
+		return this.each(function(){
+			var ah = $(this).height();
+			var ph = $(this).parent().height();
+			var mh = (ph - ah) / 2;
+			$(this).css('margin-top', mh);
+		});
+	};
+
+	$.fn.stretchFormtasticInputWidthToParent = function() {
+		return this.each(function(){
+			var p_width = $(this).closest("form").innerWidth();
+			var p_padding = parseInt($(this).closest("form").css('padding-left') ,10) + parseInt($(this).closest('form').css('padding-right'), 10);
+			var this_padding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10);
+			$(this).css('width', p_width - p_padding - this_padding);
+		});
+	};
+
+	$('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent();
+
+	// Vertically center these paragraphs
+	// Parent may need a min-height for this to work..
+	$('ul.downplayed li div.content p').vAlign();
+
+	// When a sandbox form is submitted..
+	$("form.sandbox").submit(function(){
+
+		var error_free = true;
+
+		// Cycle through the forms required inputs
+ 		$(this).find("input.required").each(function() {
+
+			// Remove any existing error styles from the input
+			$(this).removeClass('error');
+
+			// Tack the error style on if the input is empty..
+			if ($(this).val() === '') {
+				$(this).addClass('error');
+				$(this).wiggle();
+				error_free = false;
+			}
+
+		});
+
+		return error_free;
+	});
+
+});
+
+function clippyCopiedCallback() {
+  $('#api_key_copied').fadeIn().delay(1000).fadeOut();
+
+  // var b = $("#clippy_tooltip_" + a);
+  // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() {
+  //   b.attr("title", "copy to clipboard")
+  // },
+  // 500))
+}
+
+// Logging function that accounts for browsers that don't have window.console
+function log(){
+  log.history = log.history || [];
+  log.history.push(arguments);
+  if(this.console){
+    console.log( Array.prototype.slice.call(arguments)[0] );
+  }
+}
+
+// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)
+if (Function.prototype.bind && console && typeof console.log === "object") {
+    [
+      "log","info","warn","error","assert","dir","clear","profile","profileEnd"
+    ].forEach(function (method) {
+        console[method] = this.bind(console[method], console);
+    }, Function.prototype.call);
+}
+
+window.Docs = {
+
+	shebang: function() {
+
+		// If shebang has an operation nickname in it..
+		// e.g. /docs/#!/words/get_search
+		var fragments = $.param.fragment().split('/');
+		fragments.shift(); // get rid of the bang
+
+		switch (fragments.length) {
+			case 1:
+        if (fragments[0].length > 0) { // prevent matching "#/"
+          // Expand all operations for the resource and scroll to it
+          var dom_id = 'resource_' + fragments[0];
+
+          Docs.expandEndpointListForResource(fragments[0]);
+          $("#"+dom_id).slideto({highlight: false});
+        }
+				break;
+			case 2:
+				// Refer to the endpoint DOM element, e.g. #words_get_search
+
+        // Expand Resource
+        Docs.expandEndpointListForResource(fragments[0]);
+        $("#"+dom_id).slideto({highlight: false});
+
+            // Expand operation
+            var li_dom_id = fragments.join('_');
+            var li_content_dom_id = li_dom_id + "_content";
+
+
+            Docs.expandOperation($('#'+li_content_dom_id));
+            $('#'+li_dom_id).slideto({highlight: false});
+            break;
+		}
+	},
+
+	toggleEndpointListForResource: function(resource) {
+		var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints');
+		if (elem.is(':visible')) {
+			$.bbq.pushState('#/', 2);
+			Docs.collapseEndpointListForResource(resource);
+		} else {
+            $.bbq.pushState('#/' + resource, 2);
+			Docs.expandEndpointListForResource(resource);
+		}
+	},
+
+	// Expand resource
+	expandEndpointListForResource: function(resource) {
+		var resource = Docs.escapeResourceName(resource);
+		if (resource == '') {
+			$('.resource ul.endpoints').slideDown();
+			return;
+		}
+
+		$('li#resource_' + resource).addClass('active');
+
+		var elem = $('li#resource_' + resource + ' ul.endpoints');
+		elem.slideDown();
+	},
+
+	// Collapse resource and mark as explicitly closed
+	collapseEndpointListForResource: function(resource) {
+		var resource = Docs.escapeResourceName(resource);
+		if (resource == '') {
+			$('.resource ul.endpoints').slideUp();
+			return;
+		}
+
+		$('li#resource_' + resource).removeClass('active');
+
+		var elem = $('li#resource_' + resource + ' ul.endpoints');
+		elem.slideUp();
+	},
+
+	expandOperationsForResource: function(resource) {
+		// Make sure the resource container is open..
+		Docs.expandEndpointListForResource(resource);
+
+		if (resource == '') {
+			$('.resource ul.endpoints li.operation div.content').slideDown();
+			return;
+		}
+
+		$('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
+			Docs.expandOperation($(this));
+		});
+	},
+
+	collapseOperationsForResource: function(resource) {
+		// Make sure the resource container is open..
+		Docs.expandEndpointListForResource(resource);
+
+		if (resource == '') {
+			$('.resource ul.endpoints li.operation div.content').slideUp();
+			return;
+		}
+
+		$('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
+			Docs.collapseOperation($(this));
+		});
+	},
+
+	escapeResourceName: function(resource) {
+		return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&");
+	},
+
+	expandOperation: function(elem) {
+		elem.slideDown();
+	},
+
+	collapseOperation: function(elem) {
+		elem.slideUp();
+	}
+};
+
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js
+(function (root, factory) {
+    'use strict';
+
+    /* global define, exports, module */
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(factory);
+    } else if (typeof exports === 'object') {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like enviroments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else {
+        // Browser globals (root is window)
+        root.returnExports = factory();
+    }
+}(this, function () {
+    /**
+     * Brings an environment as close to ECMAScript 5 compliance
+     * as is possible with the facilities of erstwhile engines.
+     *
+     * Annotated ES5: http://es5.github.com/ (specific links below)
+     * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+     * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/
+     */
+
+    // Shortcut to an often accessed properties, in order to avoid multiple
+    // dereference that costs universally. This also holds a reference to known-good
+    // functions.
+    var $Array = Array;
+    var ArrayPrototype = $Array.prototype;
+    var $Object = Object;
+    var ObjectPrototype = $Object.prototype;
+    var $Function = Function;
+    var FunctionPrototype = $Function.prototype;
+    var $String = String;
+    var StringPrototype = $String.prototype;
+    var $Number = Number;
+    var NumberPrototype = $Number.prototype;
+    var array_slice = ArrayPrototype.slice;
+    var array_splice = ArrayPrototype.splice;
+    var array_push = ArrayPrototype.push;
+    var array_unshift = ArrayPrototype.unshift;
+    var array_concat = ArrayPrototype.concat;
+    var array_join = ArrayPrototype.join;
+    var call = FunctionPrototype.call;
+    var apply = FunctionPrototype.apply;
+    var max = Math.max;
+    var min = Math.min;
+
+    // Having a toString local variable name breaks in Opera so use to_string.
+    var to_string = ObjectPrototype.toString;
+
+    /* global Symbol */
+    /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */
+    var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+    var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\/\/.*\n/g, ''); var multiStripped = singleStripped.replace(/\/\*[.\s\S]*\*\//g, ''); var spaceStripped = multiStripped.replace(/\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { ret [...]
+
+    var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+    var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+    /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */
+
+    /* inlined from http://npmjs.com/define-properties */
+    var supportsDescriptors = $Object.defineProperty && (function () {
+        try {
+            var obj = {};
+            $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+            for (var _ in obj) { // jscs:ignore disallowUnusedVariables
+                return false;
+            }
+            return obj.x === obj;
+        } catch (e) { /* this is ES3 */
+            return false;
+        }
+    }());
+    var defineProperties = (function (has) {
+        // Define configurable, writable, and non-enumerable props
+        // if they don't exist.
+        var defineProperty;
+        if (supportsDescriptors) {
+            defineProperty = function (object, name, method, forceAssign) {
+                if (!forceAssign && (name in object)) {
+                    return;
+                }
+                $Object.defineProperty(object, name, {
+                    configurable: true,
+                    enumerable: false,
+                    writable: true,
+                    value: method
+                });
+            };
+        } else {
+            defineProperty = function (object, name, method, forceAssign) {
+                if (!forceAssign && (name in object)) {
+                    return;
+                }
+                object[name] = method;
+            };
+        }
+        return function defineProperties(object, map, forceAssign) {
+            for (var name in map) {
+                if (has.call(map, name)) {
+                    defineProperty(object, name, map[name], forceAssign);
+                }
+            }
+        };
+    }(ObjectPrototype.hasOwnProperty));
+
+    //
+    // Util
+    // ======
+    //
+
+    /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+    var isPrimitive = function isPrimitive(input) {
+        var type = typeof input;
+        return input === null || (type !== 'object' && type !== 'function');
+    };
+
+    var isActualNaN = $Number.isNaN || function isActualNaN(x) {
+        return x !== x;
+    };
+
+    var ES = {
+        // ES5 9.4
+        // http://es5.github.com/#x9.4
+        // http://jsperf.com/to-integer
+        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+        ToInteger: function ToInteger(num) {
+            var n = +num;
+            if (isActualNaN(n)) {
+                n = 0;
+            } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+                n = (n > 0 || -1) * Math.floor(Math.abs(n));
+            }
+            return n;
+        },
+
+        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+        ToPrimitive: function ToPrimitive(input) {
+            var val, valueOf, toStr;
+            if (isPrimitive(input)) {
+                return input;
+            }
+            valueOf = input.valueOf;
+            if (isCallable(valueOf)) {
+                val = valueOf.call(input);
+                if (isPrimitive(val)) {
+                    return val;
+                }
+            }
+            toStr = input.toString;
+            if (isCallable(toStr)) {
+                val = toStr.call(input);
+                if (isPrimitive(val)) {
+                    return val;
+                }
+            }
+            throw new TypeError();
+        },
+
+        // ES5 9.9
+        // http://es5.github.com/#x9.9
+        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+        ToObject: function (o) {
+            if (o == null) { // this matches both null and undefined
+                throw new TypeError("can't convert " + o + ' to object');
+            }
+            return $Object(o);
+        },
+
+        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+        ToUint32: function ToUint32(x) {
+            return x >>> 0;
+        }
+    };
+
+    //
+    // Function
+    // ========
+    //
+
+    // ES-5 15.3.4.5
+    // http://es5.github.com/#x15.3.4.5
+
+    var Empty = function Empty() {};
+
+    defineProperties(FunctionPrototype, {
+        bind: function bind(that) { // .length is 1
+            // 1. Let Target be the this value.
+            var target = this;
+            // 2. If IsCallable(Target) is false, throw a TypeError exception.
+            if (!isCallable(target)) {
+                throw new TypeError('Function.prototype.bind called on incompatible ' + target);
+            }
+            // 3. Let A be a new (possibly empty) internal list of all of the
+            //   argument values provided after thisArg (arg1, arg2 etc), in order.
+            // XXX slicedArgs will stand in for "A" if used
+            var args = array_slice.call(arguments, 1); // for normal call
+            // 4. Let F be a new native ECMAScript object.
+            // 11. Set the [[Prototype]] internal property of F to the standard
+            //   built-in Function prototype object as specified in 15.3.3.1.
+            // 12. Set the [[Call]] internal property of F as described in
+            //   15.3.4.5.1.
+            // 13. Set the [[Construct]] internal property of F as described in
+            //   15.3.4.5.2.
+            // 14. Set the [[HasInstance]] internal property of F as described in
+            //   15.3.4.5.3.
+            var bound;
+            var binder = function () {
+
+                if (this instanceof bound) {
+                    // 15.3.4.5.2 [[Construct]]
+                    // When the [[Construct]] internal method of a function object,
+                    // F that was created using the bind function is called with a
+                    // list of arguments ExtraArgs, the following steps are taken:
+                    // 1. Let target be the value of F's [[TargetFunction]]
+                    //   internal property.
+                    // 2. If target has no [[Construct]] internal method, a
+                    //   TypeError exception is thrown.
+                    // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+                    //   property.
+                    // 4. Let args be a new list containing the same values as the
+                    //   list boundArgs in the same order followed by the same
+                    //   values as the list ExtraArgs in the same order.
+                    // 5. Return the result of calling the [[Construct]] internal
+                    //   method of target providing args as the arguments.
+
+                    var result = apply.call(
+                        target,
+                        this,
+                        array_concat.call(args, array_slice.call(arguments))
+                    );
+                    if ($Object(result) === result) {
+                        return result;
+                    }
+                    return this;
+
+                } else {
+                    // 15.3.4.5.1 [[Call]]
+                    // When the [[Call]] internal method of a function object, F,
+                    // which was created using the bind function is called with a
+                    // this value and a list of arguments ExtraArgs, the following
+                    // steps are taken:
+                    // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+                    //   property.
+                    // 2. Let boundThis be the value of F's [[BoundThis]] internal
+                    //   property.
+                    // 3. Let target be the value of F's [[TargetFunction]] internal
+                    //   property.
+                    // 4. Let args be a new list containing the same values as the
+                    //   list boundArgs in the same order followed by the same
+                    //   values as the list ExtraArgs in the same order.
+                    // 5. Return the result of calling the [[Call]] internal method
+                    //   of target providing boundThis as the this value and
+                    //   providing args as the arguments.
+
+                    // equiv: target.call(this, ...boundArgs, ...args)
+                    return apply.call(
+                        target,
+                        that,
+                        array_concat.call(args, array_slice.call(arguments))
+                    );
+
+                }
+
+            };
+
+            // 15. If the [[Class]] internal property of Target is "Function", then
+            //     a. Let L be the length property of Target minus the length of A.
+            //     b. Set the length own property of F to either 0 or L, whichever is
+            //       larger.
+            // 16. Else set the length own property of F to 0.
+
+            var boundLength = max(0, target.length - args.length);
+
+            // 17. Set the attributes of the length own property of F to the values
+            //   specified in 15.3.5.1.
+            var boundArgs = [];
+            for (var i = 0; i < boundLength; i++) {
+                array_push.call(boundArgs, '$' + i);
+            }
+
+            // XXX Build a dynamic function with desired amount of arguments is the only
+            // way to set the length property of a function.
+            // In environments where Content Security Policies enabled (Chrome extensions,
+            // for ex.) all use of eval or Function costructor throws an exception.
+            // However in all of these environments Function.prototype.bind exists
+            // and so this code will never be executed.
+            bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);
+
+            if (target.prototype) {
+                Empty.prototype = target.prototype;
+                bound.prototype = new Empty();
+                // Clean up dangling references.
+                Empty.prototype = null;
+            }
+
+            // TODO
+            // 18. Set the [[Extensible]] internal property of F to true.
+
+            // TODO
+            // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+            // 20. Call the [[DefineOwnProperty]] internal method of F with
+            //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+            //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+            //   false.
+            // 21. Call the [[DefineOwnProperty]] internal method of F with
+            //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+            //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+            //   and false.
+
+            // TODO
+            // NOTE Function objects created using Function.prototype.bind do not
+            // have a prototype property or the [[Code]], [[FormalParameters]], and
+            // [[Scope]] internal properties.
+            // XXX can't delete prototype in pure-js.
+
+            // 22. Return F.
+            return bound;
+        }
+    });
+
+    // _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+    // use it in defining shortcuts.
+    var owns = call.bind(ObjectPrototype.hasOwnProperty);
+    var toStr = call.bind(ObjectPrototype.toString);
+    var arraySlice = call.bind(array_slice);
+    var arraySliceApply = apply.bind(array_slice);
+    var strSlice = call.bind(StringPrototype.slice);
+    var strSplit = call.bind(StringPrototype.split);
+    var strIndexOf = call.bind(StringPrototype.indexOf);
+    var pushCall = call.bind(array_push);
+    var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);
+    var arraySort = call.bind(ArrayPrototype.sort);
+
+    //
+    // Array
+    // =====
+    //
+
+    var isArray = $Array.isArray || function isArray(obj) {
+        return toStr(obj) === '[object Array]';
+    };
+
+    // ES5 15.4.4.12
+    // http://es5.github.com/#x15.4.4.13
+    // Return len+argCount.
+    // [bugfix, ielt8]
+    // IE < 8 bug: [].unshift(0) === undefined but should be "1"
+    var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+    defineProperties(ArrayPrototype, {
+        unshift: function () {
+            array_unshift.apply(this, arguments);
+            return this.length;
+        }
+    }, hasUnshiftReturnValueBug);
+
+    // ES5 15.4.3.2
+    // http://es5.github.com/#x15.4.3.2
+    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+    defineProperties($Array, { isArray: isArray });
+
+    // The IsCallable() check in the Array functions
+    // has been replaced with a strict check on the
+    // internal class of the object to trap cases where
+    // the provided function was actually a regular
+    // expression literal, which in V8 and
+    // JavaScriptCore is a typeof "function".  Only in
+    // V8 are regular expression literals permitted as
+    // reduce parameters, so it is desirable in the
+    // general case for the shim to match the more
+    // strict and common behavior of rejecting regular
+    // expressions.
+
+    // ES5 15.4.4.18
+    // http://es5.github.com/#x15.4.4.18
+    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+
+    // Check failure of by-index access of string characters (IE < 9)
+    // and failure of `0 in boxedString` (Rhino)
+    var boxedString = $Object('a');
+    var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
+
+    var properlyBoxesContext = function properlyBoxed(method) {
+        // Check node 0.6.21 bug where third parameter is not boxed
+        var properlyBoxesNonStrict = true;
+        var properlyBoxesStrict = true;
+        var threwException = false;
+        if (method) {
+            try {
+                method.call('foo', function (_, __, context) {
+                    if (typeof context !== 'object') {
+                        properlyBoxesNonStrict = false;
+                    }
+                });
+
+                method.call([1], function () {
+                    'use strict';
+
+                    properlyBoxesStrict = typeof this === 'string';
+                }, 'x');
+            } catch (e) {
+                threwException = true;
+            }
+        }
+        return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
+    };
+
+    defineProperties(ArrayPrototype, {
+        forEach: function forEach(callbackfn/*, thisArg*/) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var i = -1;
+            var length = ES.ToUint32(self.length);
+            var T;
+            if (arguments.length > 1) {
+                T = arguments[1];
+            }
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.forEach callback must be a function');
+            }
+
+            while (++i < length) {
+                if (i in self) {
+                    // Invoke the callback function with call, passing arguments:
+                    // context, property value, property key, thisArg object
+                    if (typeof T === 'undefined') {
+                        callbackfn(self[i], i, object);
+                    } else {
+                        callbackfn.call(T, self[i], i, object);
+                    }
+                }
+            }
+        }
+    }, !properlyBoxesContext(ArrayPrototype.forEach));
+
+    // ES5 15.4.4.19
+    // http://es5.github.com/#x15.4.4.19
+    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+    defineProperties(ArrayPrototype, {
+        map: function map(callbackfn/*, thisArg*/) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var length = ES.ToUint32(self.length);
+            var result = $Array(length);
+            var T;
+            if (arguments.length > 1) {
+                T = arguments[1];
+            }
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.map callback must be a function');
+            }
+
+            for (var i = 0; i < length; i++) {
+                if (i in self) {
+                    if (typeof T === 'undefined') {
+                        result[i] = callbackfn(self[i], i, object);
+                    } else {
+                        result[i] = callbackfn.call(T, self[i], i, object);
+                    }
+                }
+            }
+            return result;
+        }
+    }, !properlyBoxesContext(ArrayPrototype.map));
+
+    // ES5 15.4.4.20
+    // http://es5.github.com/#x15.4.4.20
+    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+    defineProperties(ArrayPrototype, {
+        filter: function filter(callbackfn/*, thisArg*/) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var length = ES.ToUint32(self.length);
+            var result = [];
+            var value;
+            var T;
+            if (arguments.length > 1) {
+                T = arguments[1];
+            }
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.filter callback must be a function');
+            }
+
+            for (var i = 0; i < length; i++) {
+                if (i in self) {
+                    value = self[i];
+                    if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
+                        pushCall(result, value);
+                    }
+                }
+            }
+            return result;
+        }
+    }, !properlyBoxesContext(ArrayPrototype.filter));
+
+    // ES5 15.4.4.16
+    // http://es5.github.com/#x15.4.4.16
+    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+    defineProperties(ArrayPrototype, {
+        every: function every(callbackfn/*, thisArg*/) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var length = ES.ToUint32(self.length);
+            var T;
+            if (arguments.length > 1) {
+                T = arguments[1];
+            }
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.every callback must be a function');
+            }
+
+            for (var i = 0; i < length; i++) {
+                if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }, !properlyBoxesContext(ArrayPrototype.every));
+
+    // ES5 15.4.4.17
+    // http://es5.github.com/#x15.4.4.17
+    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+    defineProperties(ArrayPrototype, {
+        some: function some(callbackfn/*, thisArg */) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var length = ES.ToUint32(self.length);
+            var T;
+            if (arguments.length > 1) {
+                T = arguments[1];
+            }
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.some callback must be a function');
+            }
+
+            for (var i = 0; i < length; i++) {
+                if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }, !properlyBoxesContext(ArrayPrototype.some));
+
+    // ES5 15.4.4.21
+    // http://es5.github.com/#x15.4.4.21
+    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+    var reduceCoercesToObject = false;
+    if (ArrayPrototype.reduce) {
+        reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {
+            return list;
+        }) === 'object';
+    }
+    defineProperties(ArrayPrototype, {
+        reduce: function reduce(callbackfn/*, initialValue*/) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var length = ES.ToUint32(self.length);
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.reduce callback must be a function');
+            }
+
+            // no value to return if no initial value and an empty array
+            if (length === 0 && arguments.length === 1) {
+                throw new TypeError('reduce of empty array with no initial value');
+            }
+
+            var i = 0;
+            var result;
+            if (arguments.length >= 2) {
+                result = arguments[1];
+            } else {
+                do {
+                    if (i in self) {
+                        result = self[i++];
+                        break;
+                    }
+
+                    // if array contains no values, no initial value to return
+                    if (++i >= length) {
+                        throw new TypeError('reduce of empty array with no initial value');
+                    }
+                } while (true);
+            }
+
+            for (; i < length; i++) {
+                if (i in self) {
+                    result = callbackfn(result, self[i], i, object);
+                }
+            }
+
+            return result;
+        }
+    }, !reduceCoercesToObject);
+
+    // ES5 15.4.4.22
+    // http://es5.github.com/#x15.4.4.22
+    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+    var reduceRightCoercesToObject = false;
+    if (ArrayPrototype.reduceRight) {
+        reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {
+            return list;
+        }) === 'object';
+    }
+    defineProperties(ArrayPrototype, {
+        reduceRight: function reduceRight(callbackfn/*, initial*/) {
+            var object = ES.ToObject(this);
+            var self = splitString && isString(this) ? strSplit(this, '') : object;
+            var length = ES.ToUint32(self.length);
+
+            // If no callback function or if callback is not a callable function
+            if (!isCallable(callbackfn)) {
+                throw new TypeError('Array.prototype.reduceRight callback must be a function');
+            }
+
+            // no value to return if no initial value, empty array
+            if (length === 0 && arguments.length === 1) {
+                throw new TypeError('reduceRight of empty array with no initial value');
+            }
+
+            var result;
+            var i = length - 1;
+            if (arguments.length >= 2) {
+                result = arguments[1];
+            } else {
+                do {
+                    if (i in self) {
+                        result = self[i--];
+                        break;
+                    }
+
+                    // if array contains no values, no initial value to return
+                    if (--i < 0) {
+                        throw new TypeError('reduceRight of empty array with no initial value');
+                    }
+                } while (true);
+            }
+
+            if (i < 0) {
+                return result;
+            }
+
+            do {
+                if (i in self) {
+                    result = callbackfn(result, self[i], i, object);
+                }
+            } while (i--);
+
+            return result;
+        }
+    }, !reduceRightCoercesToObject);
+
+    // ES5 15.4.4.14
+    // http://es5.github.com/#x15.4.4.14
+    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+    var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
+    defineProperties(ArrayPrototype, {
+        indexOf: function indexOf(searchElement/*, fromIndex */) {
+            var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+            var length = ES.ToUint32(self.length);
+
+            if (length === 0) {
+                return -1;
+            }
+
+            var i = 0;
+            if (arguments.length > 1) {
+                i = ES.ToInteger(arguments[1]);
+            }
+
+            // handle negative indices
+            i = i >= 0 ? i : max(0, length + i);
+            for (; i < length; i++) {
+                if (i in self && self[i] === searchElement) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+    }, hasFirefox2IndexOfBug);
+
+    // ES5 15.4.4.15
+    // http://es5.github.com/#x15.4.4.15
+    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+    var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
+    defineProperties(ArrayPrototype, {
+        lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {
+            var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+            var length = ES.ToUint32(self.length);
+
+            if (length === 0) {
+                return -1;
+            }
+            var i = length - 1;
+            if (arguments.length > 1) {
+                i = min(i, ES.ToInteger(arguments[1]));
+            }
+            // handle negative indices
+            i = i >= 0 ? i : length - Math.abs(i);
+            for (; i >= 0; i--) {
+                if (i in self && searchElement === self[i]) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+    }, hasFirefox2LastIndexOfBug);
+
+    // ES5 15.4.4.12
+    // http://es5.github.com/#x15.4.4.12
+    var spliceNoopReturnsEmptyArray = (function () {
+        var a = [1, 2];
+        var result = a.splice();
+        return a.length === 2 && isArray(result) && result.length === 0;
+    }());
+    defineProperties(ArrayPrototype, {
+        // Safari 5.0 bug where .splice() returns undefined
+        splice: function splice(start, deleteCount) {
+            if (arguments.length === 0) {
+                return [];
+            } else {
+                return array_splice.apply(this, arguments);
+            }
+        }
+    }, !spliceNoopReturnsEmptyArray);
+
+    var spliceWorksWithEmptyObject = (function () {
+        var obj = {};
+        ArrayPrototype.splice.call(obj, 0, 0, 1);
+        return obj.length === 1;
+    }());
+    defineProperties(ArrayPrototype, {
+        splice: function splice(start, deleteCount) {
+            if (arguments.length === 0) {
+                return [];
+            }
+            var args = arguments;
+            this.length = max(ES.ToInteger(this.length), 0);
+            if (arguments.length > 0 && typeof deleteCount !== 'number') {
+                args = arraySlice(arguments);
+                if (args.length < 2) {
+                    pushCall(args, this.length - start);
+                } else {
+                    args[1] = ES.ToInteger(deleteCount);
+                }
+            }
+            return array_splice.apply(this, args);
+        }
+    }, !spliceWorksWithEmptyObject);
+    var spliceWorksWithLargeSparseArrays = (function () {
+        // Per https://github.com/es-shims/es5-shim/issues/295
+        // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
+        var arr = new $Array(1e5);
+        // note: the index MUST be 8 or larger or the test will false pass
+        arr[8] = 'x';
+        arr.splice(1, 1);
+        // note: this test must be defined *after* the indexOf shim
+        // per https://github.com/es-shims/es5-shim/issues/313
+        return arr.indexOf('x') === 7;
+    }());
+    var spliceWorksWithSmallSparseArrays = (function () {
+        // Per https://github.com/es-shims/es5-shim/issues/295
+        // Opera 12.15 breaks on this, no idea why.
+        var n = 256;
+        var arr = [];
+        arr[n] = 'a';
+        arr.splice(n + 1, 0, 'b');
+        return arr[n] === 'a';
+    }());
+    defineProperties(ArrayPrototype, {
+        splice: function splice(start, deleteCount) {
+            var O = ES.ToObject(this);
+            var A = [];
+            var len = ES.ToUint32(O.length);
+            var relativeStart = ES.ToInteger(start);
+            var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
+            var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
+
+            var k = 0;
+            var from;
+            while (k < actualDeleteCount) {
+                from = $String(actualStart + k);
+                if (owns(O, from)) {
+                    A[k] = O[from];
+                }
+                k += 1;
+            }
+
+            var items = arraySlice(arguments, 2);
+            var itemCount = items.length;
+            var to;
+            if (itemCount < actualDeleteCount) {
+                k = actualStart;
+                var maxK = len - actualDeleteCount;
+                while (k < maxK) {
+                    from = $String(k + actualDeleteCount);
+                    to = $String(k + itemCount);
+                    if (owns(O, from)) {
+                        O[to] = O[from];
+                    } else {
+                        delete O[to];
+                    }
+                    k += 1;
+                }
+                k = len;
+                var minK = len - actualDeleteCount + itemCount;
+                while (k > minK) {
+                    delete O[k - 1];
+                    k -= 1;
+                }
+            } else if (itemCount > actualDeleteCount) {
+                k = len - actualDeleteCount;
+                while (k > actualStart) {
+                    from = $String(k + actualDeleteCount - 1);
+                    to = $String(k + itemCount - 1);
+                    if (owns(O, from)) {
+                        O[to] = O[from];
+                    } else {
+                        delete O[to];
+                    }
+                    k -= 1;
+                }
+            }
+            k = actualStart;
+            for (var i = 0; i < items.length; ++i) {
+                O[k] = items[i];
+                k += 1;
+            }
+            O.length = len - actualDeleteCount + itemCount;
+
+            return A;
+        }
+    }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
+
+    var originalJoin = ArrayPrototype.join;
+    var hasStringJoinBug;
+    try {
+        hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';
+    } catch (e) {
+        hasStringJoinBug = true;
+    }
+    if (hasStringJoinBug) {
+        defineProperties(ArrayPrototype, {
+            join: function join(separator) {
+                var sep = typeof separator === 'undefined' ? ',' : separator;
+                return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);
+            }
+        }, hasStringJoinBug);
+    }
+
+    var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';
+    if (hasJoinUndefinedBug) {
+        defineProperties(ArrayPrototype, {
+            join: function join(separator) {
+                var sep = typeof separator === 'undefined' ? ',' : separator;
+                return originalJoin.call(this, sep);
+            }
+        }, hasJoinUndefinedBug);
+    }
+
+    var pushShim = function push(item) {
+        var O = ES.ToObject(this);
+        var n = ES.ToUint32(O.length);
+        var i = 0;
+        while (i < arguments.length) {
+            O[n + i] = arguments[i];
+            i += 1;
+        }
+        O.length = n + i;
+        return n + i;
+    };
+
+    var pushIsNotGeneric = (function () {
+        var obj = {};
+        var result = Array.prototype.push.call(obj, undefined);
+        return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);
+    }());
+    defineProperties(ArrayPrototype, {
+        push: function push(item) {
+            if (isArray(this)) {
+                return array_push.apply(this, arguments);
+            }
+            return pushShim.apply(this, arguments);
+        }
+    }, pushIsNotGeneric);
+
+    // This fixes a very weird bug in Opera 10.6 when pushing `undefined
+    var pushUndefinedIsWeird = (function () {
+        var arr = [];
+        var result = arr.push(undefined);
+        return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);
+    }());
+    defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);
+
+    // ES5 15.2.3.14
+    // http://es5.github.io/#x15.4.4.10
+    // Fix boxed string bug
+    defineProperties(ArrayPrototype, {
+        slice: function (start, end) {
+            var arr = isString(this) ? strSplit(this, '') : this;
+            return arraySliceApply(arr, arguments);
+        }
+    }, splitString);
+
+    var sortIgnoresNonFunctions = (function () {
+        try {
+            [1, 2].sort(null);
+            [1, 2].sort({});
+            return true;
+        } catch (e) {}
+        return false;
+    }());
+    var sortThrowsOnRegex = (function () {
+        // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`
+        try {
+            [1, 2].sort(/a/);
+            return false;
+        } catch (e) {}
+        return true;
+    }());
+    var sortIgnoresUndefined = (function () {
+        // applies in IE 8, for one.
+        try {
+            [1, 2].sort(undefined);
+            return true;
+        } catch (e) {}
+        return false;
+    }());
+    defineProperties(ArrayPrototype, {
+        sort: function sort(compareFn) {
+            if (typeof compareFn === 'undefined') {
+                return arraySort(this);
+            }
+            if (!isCallable(compareFn)) {
+                throw new TypeError('Array.prototype.sort callback must be a function');
+            }
+            return arraySort(this, compareFn);
+        }
+    }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);
+
+    //
+    // Object
+    // ======
+    //
+
+    // ES5 15.2.3.14
+    // http://es5.github.com/#x15.2.3.14
+
+    // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+    var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString');
+    var hasProtoEnumBug = isEnum(function () {}, 'prototype');
+    var hasStringEnumBug = !owns('x', '0');
+    var equalsConstructorPrototype = function (o) {
+        var ctor = o.constructor;
+        return ctor && ctor.prototype === o;
+    };
+    var blacklistedKeys = {
+        $window: true,
+        $console: true,
+        $parent: true,
+        $self: true,
+        $frame: true,
+        $frames: true,
+        $frameElement: true,
+        $webkitIndexedDB: true,
+        $webkitStorageInfo: true,
+        $external: true
+    };
+    var hasAutomationEqualityBug = (function () {
+        /* globals window */
+        if (typeof window === 'undefined') {
+            return false;
+        }
+        for (var k in window) {
+            try {
+                if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
+                    equalsConstructorPrototype(window[k]);
+                }
+            } catch (e) {
+                return true;
+            }
+        }
+        return false;
+    }());
+    var equalsConstructorPrototypeIfNotBuggy = function (object) {
+        if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
+            return equalsConstructorPrototype(object);
+        }
+        try {
+            return equalsConstructorPrototype(object);
+        } catch (e) {
+            return false;
+        }
+    };
+    var dontEnums = [
+        'toString',
+        'toLocaleString',
+        'valueOf',
+        'hasOwnProperty',
+        'isPrototypeOf',
+        'propertyIsEnumerable',
+        'constructor'
+    ];
+    var dontEnumsLength = dontEnums.length;
+
+    // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
+    // can be replaced with require('is-arguments') if we ever use a build process instead
+    var isStandardArguments = function isArguments(value) {
+        return toStr(value) === '[object Arguments]';
+    };
+    var isLegacyArguments = function isArguments(value) {
+        return value !== null &&
+            typeof value === 'object' &&
+            typeof value.length === 'number' &&
+            value.length >= 0 &&
+            !isArray(value) &&
+            isCallable(value.callee);
+    };
+    var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
+
+    defineProperties($Object, {
+        keys: function keys(object) {
+            var isFn = isCallable(object);
+            var isArgs = isArguments(object);
+            var isObject = object !== null && typeof object === 'object';
+            var isStr = isObject && isString(object);
+
+            if (!isObject && !isFn && !isArgs) {
+                throw new TypeError('Object.keys called on a non-object');
+            }
+
+            var theKeys = [];
+            var skipProto = hasProtoEnumBug && isFn;
+            if ((isStr && hasStringEnumBug) || isArgs) {
+                for (var i = 0; i < object.length; ++i) {
+                    pushCall(theKeys, $String(i));
+                }
+            }
+
+            if (!isArgs) {
+                for (var name in object) {
+                    if (!(skipProto && name === 'prototype') && owns(object, name)) {
+                        pushCall(theKeys, $String(name));
+                    }
+                }
+            }
+
+            if (hasDontEnumBug) {
+                var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+                for (var j = 0; j < dontEnumsLength; j++) {
+                    var dontEnum = dontEnums[j];
+                    if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+                        pushCall(theKeys, dontEnum);
+                    }
+                }
+            }
+            return theKeys;
+        }
+    });
+
+    var keysWorksWithArguments = $Object.keys && (function () {
+        // Safari 5.0 bug
+        return $Object.keys(arguments).length === 2;
+    }(1, 2));
+    var keysHasArgumentsLengthBug = $Object.keys && (function () {
+        var argKeys = $Object.keys(arguments);
+        return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;
+    }(1));
+    var originalKeys = $Object.keys;
+    defineProperties($Object, {
+        keys: function keys(object) {
+            if (isArguments(object)) {
+                return originalKeys(arraySlice(object));
+            } else {
+                return originalKeys(object);
+            }
+        }
+    }, !keysWorksWithArguments || keysHasArgumentsLengthBug);
+
+    //
+    // Date
+    // ====
+    //
+
+    var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;
+    var aNegativeTestDate = new Date(-1509842289600292);
+    var aPositiveTestDate = new Date(1449662400000);
+    var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';
+    var hasToDateStringFormatBug;
+    var hasToStringFormatBug;
+    var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();
+    if (timeZoneOffset < -720) {
+        hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';
+        hasToStringFormatBug = !(/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/).test(aPositiveTestDate.toString());
+    } else {
+        hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';
+        hasToStringFormatBug = !(/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/).test(aPositiveTestDate.toString());
+    }
+
+    var originalGetFullYear = call.bind(Date.prototype.getFullYear);
+    var originalGetMonth = call.bind(Date.prototype.getMonth);
+    var originalGetDate = call.bind(Date.prototype.getDate);
+    var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);
+    var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);
+    var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);
+    var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);
+    var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);
+    var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);
+    var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);
+    var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);
+    var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+    var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+    var daysInMonth = function daysInMonth(month, year) {
+        return originalGetDate(new Date(year, month, 0));
+    };
+
+    defineProperties(Date.prototype, {
+        getFullYear: function getFullYear() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var year = originalGetFullYear(this);
+            if (year < 0 && originalGetMonth(this) > 11) {
+                return year + 1;
+            }
+            return year;
+        },
+        getMonth: function getMonth() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var year = originalGetFullYear(this);
+            var month = originalGetMonth(this);
+            if (year < 0 && month > 11) {
+                return 0;
+            }
+            return month;
+        },
+        getDate: function getDate() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var year = originalGetFullYear(this);
+            var month = originalGetMonth(this);
+            var date = originalGetDate(this);
+            if (year < 0 && month > 11) {
+                if (month === 12) {
+                    return date;
+                }
+                var days = daysInMonth(0, year + 1);
+                return (days - date) + 1;
+            }
+            return date;
+        },
+        getUTCFullYear: function getUTCFullYear() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var year = originalGetUTCFullYear(this);
+            if (year < 0 && originalGetUTCMonth(this) > 11) {
+                return year + 1;
+            }
+            return year;
+        },
+        getUTCMonth: function getUTCMonth() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var year = originalGetUTCFullYear(this);
+            var month = originalGetUTCMonth(this);
+            if (year < 0 && month > 11) {
+                return 0;
+            }
+            return month;
+        },
+        getUTCDate: function getUTCDate() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var year = originalGetUTCFullYear(this);
+            var month = originalGetUTCMonth(this);
+            var date = originalGetUTCDate(this);
+            if (year < 0 && month > 11) {
+                if (month === 12) {
+                    return date;
+                }
+                var days = daysInMonth(0, year + 1);
+                return (days - date) + 1;
+            }
+            return date;
+        }
+    }, hasNegativeMonthYearBug);
+
+    defineProperties(Date.prototype, {
+        toUTCString: function toUTCString() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var day = originalGetUTCDay(this);
+            var date = originalGetUTCDate(this);
+            var month = originalGetUTCMonth(this);
+            var year = originalGetUTCFullYear(this);
+            var hour = originalGetUTCHours(this);
+            var minute = originalGetUTCMinutes(this);
+            var second = originalGetUTCSeconds(this);
+            return dayName[day] + ', ' +
+                (date < 10 ? '0' + date : date) + ' ' +
+                monthName[month] + ' ' +
+                year + ' ' +
+                (hour < 10 ? '0' + hour : hour) + ':' +
+                (minute < 10 ? '0' + minute : minute) + ':' +
+                (second < 10 ? '0' + second : second) + ' GMT';
+        }
+    }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);
+
+    // Opera 12 has `,`
+    defineProperties(Date.prototype, {
+        toDateString: function toDateString() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var day = this.getDay();
+            var date = this.getDate();
+            var month = this.getMonth();
+            var year = this.getFullYear();
+            return dayName[day] + ' ' +
+                monthName[month] + ' ' +
+                (date < 10 ? '0' + date : date) + ' ' +
+                year;
+        }
+    }, hasNegativeMonthYearBug || hasToDateStringFormatBug);
+
+    // can't use defineProperties here because of toString enumeration issue in IE <= 8
+    if (hasNegativeMonthYearBug || hasToStringFormatBug) {
+        Date.prototype.toString = function toString() {
+            if (!this || !(this instanceof Date)) {
+                throw new TypeError('this is not a Date object.');
+            }
+            var day = this.getDay();
+            var date = this.getDate();
+            var month = this.getMonth();
+            var year = this.getFullYear();
+            var hour = this.getHours();
+            var minute = this.getMinutes();
+            var second = this.getSeconds();
+            var timezoneOffset = this.getTimezoneOffset();
+            var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);
+            var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);
+            return dayName[day] + ' ' +
+                monthName[month] + ' ' +
+                (date < 10 ? '0' + date : date) + ' ' +
+                year + ' ' +
+                (hour < 10 ? '0' + hour : hour) + ':' +
+                (minute < 10 ? '0' + minute : minute) + ':' +
+                (second < 10 ? '0' + second : second) + ' GMT' +
+                (timezoneOffset > 0 ? '-' : '+') +
+                (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset) +
+                (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);
+        };
+        if (supportsDescriptors) {
+            $Object.defineProperty(Date.prototype, 'toString', {
+                configurable: true,
+                enumerable: false,
+                writable: true
+            });
+        }
+    }
+
+    // ES5 15.9.5.43
+    // http://es5.github.com/#x15.9.5.43
+    // This function returns a String value represent the instance in time
+    // represented by this Date object. The format of the String is the Date Time
+    // string format defined in 15.9.1.15. All fields are present in the String.
+    // The time zone is always UTC, denoted by the suffix Z. If the time value of
+    // this object is not a finite Number a RangeError exception is thrown.
+    var negativeDate = -62198755200000;
+    var negativeYearString = '-000001';
+    var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
+    var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
+
+    var getTime = call.bind(Date.prototype.getTime);
+
+    defineProperties(Date.prototype, {
+        toISOString: function toISOString() {
+            if (!isFinite(this) || !isFinite(getTime(this))) {
+                // Adope Photoshop requires the second check.
+                throw new RangeError('Date.prototype.toISOString called on non-finite value.');
+            }
+
+            var year = originalGetUTCFullYear(this);
+
+            var month = originalGetUTCMonth(this);
+            // see https://github.com/es-shims/es5-shim/issues/111
+            year += Math.floor(month / 12);
+            month = (month % 12 + 12) % 12;
+
+            // the date time string format is specified in 15.9.1.15.
+            var result = [month + 1, originalGetUTCDate(this), originalGetUTCHours(this), originalGetUTCMinutes(this), originalGetUTCSeconds(this)];
+            year = (
+                (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
+                strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
+            );
+
+            for (var i = 0; i < result.length; ++i) {
+                // pad months, days, hours, minutes, and seconds to have two digits.
+                result[i] = strSlice('00' + result[i], -2);
+            }
+            // pad milliseconds to have three digits.
+            return (
+                year + '-' + arraySlice(result, 0, 2).join('-') +
+                'T' + arraySlice(result, 2).join(':') + '.' +
+                strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'
+            );
+        }
+    }, hasNegativeDateBug || hasSafari51DateBug);
+
+    // ES5 15.9.5.44
+    // http://es5.github.com/#x15.9.5.44
+    // This function provides a String representation of a Date object for use by
+    // JSON.stringify (15.12.3).
+    var dateToJSONIsSupported = (function () {
+        try {
+            return Date.prototype.toJSON &&
+                new Date(NaN).toJSON() === null &&
+                new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+                Date.prototype.toJSON.call({ // generic
+                    toISOString: function () { return true; }
+                });
+        } catch (e) {
+            return false;
+        }
+    }());
+    if (!dateToJSONIsSupported) {
+        Date.prototype.toJSON = function toJSON(key) {
+            // When the toJSON method is called with argument key, the following
+            // steps are taken:
+
+            // 1.  Let O be the result of calling ToObject, giving it the this
+            // value as its argument.
+            // 2. Let tv be ES.ToPrimitive(O, hint Number).
+            var O = $Object(this);
+            var tv = ES.ToPrimitive(O);
+            // 3. If tv is a Number and is not finite, return null.
+            if (typeof tv === 'number' && !isFinite(tv)) {
+                return null;
+            }
+            // 4. Let toISO be the result of calling the [[Get]] internal method of
+            // O with argument "toISOString".
+            var toISO = O.toISOString;
+            // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+            if (!isCallable(toISO)) {
+                throw new TypeError('toISOString property is not callable');
+            }
+            // 6. Return the result of calling the [[Call]] internal method of
+            //  toISO with O as the this value and an empty argument list.
+            return toISO.call(O);
+
+            // NOTE 1 The argument is ignored.
+
+            // NOTE 2 The toJSON function is intentionally generic; it does not
+            // require that its this value be a Date object. Therefore, it can be
+            // transferred to other kinds of objects for use as a method. However,
+            // it does require that any such object have a toISOString method. An
+            // object is free to use the argument key to filter its
+            // stringification.
+        };
+    }
+
+    // ES5 15.9.4.2
+    // http://es5.github.com/#x15.9.4.2
+    // based on work shared by Daniel Friesen (dantman)
+    // http://gist.github.com/303249
+    var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+    var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+    var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
+    if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+        // XXX global assignment won't work in embeddings that use
+        // an alternate object for the context.
+        /* global Date: true */
+        /* eslint-disable no-undef */
+        var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;
+        var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());
+        /* eslint-disable no-implicit-globals */
+        Date = (function (NativeDate) {
+        /* eslint-enable no-implicit-globals */
+        /* eslint-enable no-undef */
+            // Date.length === 7
+            var DateShim = function Date(Y, M, D, h, m, s, ms) {
+                var length = arguments.length;
+                var date;
+                if (this instanceof NativeDate) {
+                    var seconds = s;
+                    var millis = ms;
+                    if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
+                        // work around a Safari 8/9 bug where it treats the seconds as signed
+                        var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+                        var sToShift = Math.floor(msToShift / 1e3);
+                        seconds += sToShift;
+                        millis -= sToShift * 1e3;
+                    }
+                    date = length === 1 && $String(Y) === Y ? // isString(Y)
+                        // We explicitly pass it through parse:
+                        new NativeDate(DateShim.parse(Y)) :
+                        // We have to manually make calls depending on argument
+                        // length here
+                        length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) :
+                        length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) :
+                        length >= 5 ? new NativeDate(Y, M, D, h, m) :
+                        length >= 4 ? new NativeDate(Y, M, D, h) :
+                        length >= 3 ? new NativeDate(Y, M, D) :
+                        length >= 2 ? new NativeDate(Y, M) :
+                        length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y) :
+                                      new NativeDate();
+                } else {
+                    date = NativeDate.apply(this, arguments);
+                }
+                if (!isPrimitive(date)) {
+                    // Prevent mixups with unfixed Date object
+                    defineProperties(date, { constructor: DateShim }, true);
+                }
+                return date;
+            };
+
+            // 15.9.1.15 Date Time String Format.
+            var isoDateExpression = new RegExp('^' +
+                '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
+                                          // 6-digit extended year
+                '(?:-(\\d{2})' + // optional month capture
+                '(?:-(\\d{2})' + // optional day capture
+                '(?:' + // capture hours:minutes:seconds.milliseconds
+                    'T(\\d{2})' + // hours capture
+                    ':(\\d{2})' + // minutes capture
+                    '(?:' + // optional :seconds.milliseconds
+                        ':(\\d{2})' + // seconds capture
+                        '(?:(\\.\\d{1,}))?' + // milliseconds capture
+                    ')?' +
+                '(' + // capture UTC offset component
+                    'Z|' + // UTC capture
+                    '(?:' + // offset specifier +/-hours:minutes
+                        '([-+])' + // sign capture
+                        '(\\d{2})' + // hours offset capture
+                        ':(\\d{2})' + // minutes offset capture
+                    ')' +
+                ')?)?)?)?' +
+            '$');
+
+            var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+            var dayFromMonth = function dayFromMonth(year, month) {
+                var t = month > 1 ? 1 : 0;
+                return (
+                    months[month] +
+                    Math.floor((year - 1969 + t) / 4) -
+                    Math.floor((year - 1901 + t) / 100) +
+                    Math.floor((year - 1601 + t) / 400) +
+                    365 * (year - 1970)
+                );
+            };
+
+            var toUTC = function toUTC(t) {
+                var s = 0;
+                var ms = t;
+                if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {
+                    // work around a Safari 8/9 bug where it treats the seconds as signed
+                    var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+                    var sToShift = Math.floor(msToShift / 1e3);
+                    s += sToShift;
+                    ms -= sToShift * 1e3;
+                }
+                return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));
+            };
+
+            // Copy any custom methods a 3rd party library may have added
+            for (var key in NativeDate) {
+                if (owns(NativeDate, key)) {
+                    DateShim[key] = NativeDate[key];
+                }
+            }
+
+            // Copy "native" methods explicitly; they may be non-enumerable
+            defineProperties(DateShim, {
+                now: NativeDate.now,
+                UTC: NativeDate.UTC
+            }, true);
+            DateShim.prototype = NativeDate.prototype;
+            defineProperties(DateShim.prototype, {
+                constructor: DateShim
+            }, true);
+
+            // Upgrade Date.parse to handle simplified ISO 8601 strings
+            var parseShim = function parse(string) {
+                var match = isoDateExpression.exec(string);
+                if (match) {
+                    // parse months, days, hours, minutes, seconds, and milliseconds
+                    // provide default values if necessary
+                    // parse the UTC offset component
+                    var year = $Number(match[1]),
+                        month = $Number(match[2] || 1) - 1,
+                        day = $Number(match[3] || 1) - 1,
+                        hour = $Number(match[4] || 0),
+                        minute = $Number(match[5] || 0),
+                        second = $Number(match[6] || 0),
+                        millisecond = Math.floor($Number(match[7] || 0) * 1000),
+                        // When time zone is missed, local offset should be used
+                        // (ES 5.1 bug)
+                        // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+                        isLocalTime = Boolean(match[4] && !match[8]),
+                        signOffset = match[9] === '-' ? 1 : -1,
+                        hourOffset = $Number(match[10] || 0),
+                        minuteOffset = $Number(match[11] || 0),
+                        result;
+                    var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;
+                    if (
+                        hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25) &&
+                        minute < 60 && second < 60 && millisecond < 1000 &&
+                        month > -1 && month < 12 && hourOffset < 24 &&
+                        minuteOffset < 60 && // detect invalid offsets
+                        day > -1 &&
+                        day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))
+                    ) {
+                        result = (
+                            (dayFromMonth(year, month) + day) * 24 +
+                            hour +
+                            hourOffset * signOffset
+                        ) * 60;
+                        result = (
+                            (result + minute + minuteOffset * signOffset) * 60 +
+                            second
+                        ) * 1000 + millisecond;
+                        if (isLocalTime) {
+                            result = toUTC(result);
+                        }
+                        if (-8.64e15 <= result && result <= 8.64e15) {
+                            return result;
+                        }
+                    }
+                    return NaN;
+                }
+                return NativeDate.parse.apply(this, arguments);
+            };
+            defineProperties(DateShim, { parse: parseShim });
+
+            return DateShim;
+        }(Date));
+        /* global Date: false */
+    }
+
+    // ES5 15.9.4.4
+    // http://es5.github.com/#x15.9.4.4
+    if (!Date.now) {
+        Date.now = function now() {
+            return new Date().getTime();
+        };
+    }
+
+    //
+    // Number
+    // ======
+    //
+
+    // ES5.1 15.7.4.5
+    // http://es5.github.com/#x15.7.4.5
+    var hasToFixedBugs = NumberPrototype.toFixed && (
+      (0.00008).toFixed(3) !== '0.000' ||
+      (0.9).toFixed(0) !== '1' ||
+      (1.255).toFixed(2) !== '1.25' ||
+      (1000000000000000128).toFixed(0) !== '1000000000000000128'
+    );
+
+    var toFixedHelpers = {
+        base: 1e7,
+        size: 6,
+        data: [0, 0, 0, 0, 0, 0],
+        multiply: function multiply(n, c) {
+            var i = -1;
+            var c2 = c;
+            while (++i < toFixedHelpers.size) {
+                c2 += n * toFixedHelpers.data[i];
+                toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+                c2 = Math.floor(c2 / toFixedHelpers.base);
+            }
+        },
+        divide: function divide(n) {
+            var i = toFixedHelpers.size;
+            var c = 0;
+            while (--i >= 0) {
+                c += toFixedHelpers.data[i];
+                toFixedHelpers.data[i] = Math.floor(c / n);
+                c = (c % n) * toFixedHelpers.base;
+            }
+        },
+        numToString: function numToString() {
+            var i = toFixedHelpers.size;
+            var s = '';
+            while (--i >= 0) {
+                if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+                    var t = $String(toFixedHelpers.data[i]);
+                    if (s === '') {
+                        s = t;
+                    } else {
+                        s += strSlice('0000000', 0, 7 - t.length) + t;
+                    }
+                }
+            }
+            return s;
+        },
+        pow: function pow(x, n, acc) {
+            return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+        },
+        log: function log(x) {
+            var n = 0;
+            var x2 = x;
+            while (x2 >= 4096) {
+                n += 12;
+                x2 /= 4096;
+            }
+            while (x2 >= 2) {
+                n += 1;
+                x2 /= 2;
+            }
+            return n;
+        }
+    };
+
+    var toFixedShim = function toFixed(fractionDigits) {
+        var f, x, s, m, e, z, j, k;
+
+        // Test for NaN and round fractionDigits down
+        f = $Number(fractionDigits);
+        f = isActualNaN(f) ? 0 : Math.floor(f);
+
+        if (f < 0 || f > 20) {
+            throw new RangeError('Number.toFixed called with invalid number of decimals');
+        }
+
+        x = $Number(this);
+
+        if (isActualNaN(x)) {
+            return 'NaN';
+        }
+
+        // If it is too big or small, return the string value of the number
+        if (x <= -1e21 || x >= 1e21) {
+            return $String(x);
+        }
+
+        s = '';
+
+        if (x < 0) {
+            s = '-';
+            x = -x;
+        }
+
+        m = '0';
+
+        if (x > 1e-21) {
+            // 1e-21 < x < 1e21
+            // -70 < log2(x) < 70
+            e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+            z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+            z *= 0x10000000000000; // Math.pow(2, 52);
+            e = 52 - e;
+
+            // -18 < e < 122
+            // x = z / 2 ^ e
+            if (e > 0) {
+                toFixedHelpers.multiply(0, z);
+                j = f;
+
+                while (j >= 7) {
+                    toFixedHelpers.multiply(1e7, 0);
+                    j -= 7;
+                }
+
+                toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+                j = e - 1;
+
+                while (j >= 23) {
+                    toFixedHelpers.divide(1 << 23);
+                    j -= 23;
+                }
+
+                toFixedHelpers.divide(1 << j);
+                toFixedHelpers.multiply(1, 1);
+                toFixedHelpers.divide(2);
+                m = toFixedHelpers.numToString();
+            } else {
+                toFixedHelpers.multiply(0, z);
+                toFixedHelpers.multiply(1 << (-e), 0);
+                m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
+            }
+        }
+
+        if (f > 0) {
+            k = m.length;
+
+            if (k <= f) {
+                m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
+            } else {
+                m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
+            }
+        } else {
+            m = s + m;
+        }
+
+        return m;
+    };
+    defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);
+
+    var hasToPrecisionUndefinedBug = (function () {
+        try {
+            return 1.0.toPrecision(undefined) === '1';
+        } catch (e) {
+            return true;
+        }
+    }());
+    var originalToPrecision = NumberPrototype.toPrecision;
+    defineProperties(NumberPrototype, {
+        toPrecision: function toPrecision(precision) {
+            return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);
+        }
+    }, hasToPrecisionUndefinedBug);
+
+    //
+    // String
+    // ======
+    //
+
+    // ES5 15.5.4.14
+    // http://es5.github.com/#x15.5.4.14
+
+    // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+    // Many browsers do not split properly with regular expressions or they
+    // do not perform the split correctly under obscure conditions.
+    // See http://blog.stevenlevithan.com/archives/cross-browser-split
+    // I've tested in many browsers and this seems to cover the deviant ones:
+    //    'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+    //    '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+    //    'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+    //       [undefined, "t", undefined, "e", ...]
+    //    ''.split(/.?/) should be [], not [""]
+    //    '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+    if (
+        'ab'.split(/(?:ab)*/).length !== 2 ||
+        '.'.split(/(.?)(.?)/).length !== 4 ||
+        'tesst'.split(/(s)*/)[1] === 't' ||
+        'test'.split(/(?:)/, -1).length !== 4 ||
+        ''.split(/.?/).length ||
+        '.'.split(/()()/).length > 1
+    ) {
+        (function () {
+            var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
+            var maxSafe32BitInt = Math.pow(2, 32) - 1;
+
+            StringPrototype.split = function (separator, limit) {
+                var string = String(this);
+                if (typeof separator === 'undefined' && limit === 0) {
+                    return [];
+                }
+
+                // If `separator` is not a regex, use native split
+                if (!isRegex(separator)) {
+                    return strSplit(this, separator, limit);
+                }
+
+                var output = [];
+                var flags = (separator.ignoreCase ? 'i' : '') +
+                            (separator.multiline ? 'm' : '') +
+                            (separator.unicode ? 'u' : '') + // in ES6
+                            (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
+                    lastLastIndex = 0,
+                    // Make `global` and avoid `lastIndex` issues by working with a copy
+                    separator2, match, lastIndex, lastLength;
+                var separatorCopy = new RegExp(separator.source, flags + 'g');
+                if (!compliantExecNpcg) {
+                    // Doesn't need flags gy, but they don't hurt
+                    separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+                }
+                /* Values for `limit`, per the spec:
+                 * If undefined: 4294967295 // maxSafe32BitInt
+                 * If 0, Infinity, or NaN: 0
+                 * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+                 * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+                 * If other: Type-convert, then use the above rules
+                 */
+                var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);
+                match = separatorCopy.exec(string);
+                while (match) {
+                    // `separatorCopy.lastIndex` is not reliable cross-browser
+                    lastIndex = match.index + match[0].length;
+                    if (lastIndex > lastLastIndex) {
+                        pushCall(output, strSlice(string, lastLastIndex, match.index));
+                        // Fix browsers whose `exec` methods don't consistently return `undefined` for
+                        // nonparticipating capturing groups
+                        if (!compliantExecNpcg && match.length > 1) {
+                            /* eslint-disable no-loop-func */
+                            match[0].replace(separator2, function () {
+                                for (var i = 1; i < arguments.length - 2; i++) {
+                                    if (typeof arguments[i] === 'undefined') {
+                                        match[i] = void 0;
+                                    }
+                                }
+                            });
+                            /* eslint-enable no-loop-func */
+                        }
+                        if (match.length > 1 && match.index < string.length) {
+                            array_push.apply(output, arraySlice(match, 1));
+                        }
+                        lastLength = match[0].length;
+                        lastLastIndex = lastIndex;
+                        if (output.length >= splitLimit) {
+                            break;
+                        }
+                    }
+                    if (separatorCopy.lastIndex === match.index) {
+                        separatorCopy.lastIndex++; // Avoid an infinite loop
+                    }
+                    match = separatorCopy.exec(string);
+                }
+                if (lastLastIndex === string.length) {
+                    if (lastLength || !separatorCopy.test('')) {
+                        pushCall(output, '');
+                    }
+                } else {
+                    pushCall(output, strSlice(string, lastLastIndex));
+                }
+                return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;
+            };
+        }());
+
+    // [bugfix, chrome]
+    // If separator is undefined, then the result array contains just one String,
+    // which is the this value (converted to a String). If limit is not undefined,
+    // then the output array is truncated so that it contains no more than limit
+    // elements.
+    // "0".split(undefined, 0) -> []
+    } else if ('0'.split(void 0, 0).length) {
+        StringPrototype.split = function split(separator, limit) {
+            if (typeof separator === 'undefined' && limit === 0) {
+                return [];
+            }
+            return strSplit(this, separator, limit);
+        };
+    }
+
+    var str_replace = StringPrototype.replace;
+    var replaceReportsGroupsCorrectly = (function () {
+        var groups = [];
+        'x'.replace(/x(.)?/g, function (match, group) {
+            pushCall(groups, group);
+        });
+        return groups.length === 1 && typeof groups[0] === 'undefined';
+    }());
+
+    if (!replaceReportsGroupsCorrectly) {
+        StringPrototype.replace = function replace(searchValue, replaceValue) {
+            var isFn = isCallable(replaceValue);
+            var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+            if (!isFn || !hasCapturingGroups) {
+                return str_replace.call(this, searchValue, replaceValue);
+            } else {
+                var wrappedReplaceValue = function (match) {
+                    var length = arguments.length;
+                    var originalLastIndex = searchValue.lastIndex;
+                    searchValue.lastIndex = 0;
+                    var args = searchValue.exec(match) || [];
+                    searchValue.lastIndex = originalLastIndex;
+                    pushCall(args, arguments[length - 2], arguments[length - 1]);
+                    return replaceValue.apply(this, args);
+                };
+                return str_replace.call(this, searchValue, wrappedReplaceValue);
+            }
+        };
+    }
+
+    // ECMA-262, 3rd B.2.3
+    // Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+    // non-normative section suggesting uniform semantics and it should be
+    // normalized across all browsers
+    // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+    var string_substr = StringPrototype.substr;
+    var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
+    defineProperties(StringPrototype, {
+        substr: function substr(start, length) {
+            var normalizedStart = start;
+            if (start < 0) {
+                normalizedStart = max(this.length + start, 0);
+            }
+            return string_substr.call(this, normalizedStart, length);
+        }
+    }, hasNegativeSubstrBug);
+
+    // ES5 15.5.4.20
+    // whitespace from: http://es5.github.io/#x15.5.4.20
+    var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+        '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
+        '\u2029\uFEFF';
+    var zeroWidth = '\u200b';
+    var wsRegexChars = '[' + ws + ']';
+    var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+    var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
+    var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+    defineProperties(StringPrototype, {
+        // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+        // http://perfectionkills.com/whitespace-deviations/
+        trim: function trim() {
+            if (typeof this === 'undefined' || this === null) {
+                throw new TypeError("can't convert " + this + ' to object');
+            }
+            return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+        }
+    }, hasTrimWhitespaceBug);
+    var trim = call.bind(String.prototype.trim);
+
+    var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;
+    defineProperties(StringPrototype, {
+        lastIndexOf: function lastIndexOf(searchString) {
+            if (typeof this === 'undefined' || this === null) {
+                throw new TypeError("can't convert " + this + ' to object');
+            }
+            var S = $String(this);
+            var searchStr = $String(searchString);
+            var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;
+            var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);
+            var start = min(max(pos, 0), S.length);
+            var searchLen = searchStr.length;
+            var k = start + searchLen;
+            while (k > 0) {
+                k = max(0, k - searchLen);
+                var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);
+                if (index !== -1) {
+                    return k + index;
+                }
+            }
+            return -1;
+        }
+    }, hasLastIndexBug);
+
+    var originalLastIndexOf = StringPrototype.lastIndexOf;
+    defineProperties(StringPrototype, {
+        lastIndexOf: function lastIndexOf(searchString) {
+            return originalLastIndexOf.apply(this, arguments);
+        }
+    }, StringPrototype.lastIndexOf.length !== 1);
+
+    // ES-5 15.1.2.2
+    /* eslint-disable radix */
+    if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+    /* eslint-enable radix */
+        /* global parseInt: true */
+        parseInt = (function (origParseInt) {
+            var hexRegex = /^[\-+]?0[xX]/;
+            return function parseInt(str, radix) {
+                var string = trim(String(str));
+                var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
+                return origParseInt(string, defaultedRadix);
+            };
+        }(parseInt));
+    }
+
+    // https://es5.github.io/#x15.1.2.3
+    if (1 / parseFloat('-0') !== -Infinity) {
+        /* global parseFloat: true */
+        parseFloat = (function (origParseFloat) {
+            return function parseFloat(string) {
+                var inputString = trim(String(string));
+                var result = origParseFloat(inputString);
+                return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;
+            };
+        }(parseFloat));
+    }
+
+    if (String(new RangeError('test')) !== 'RangeError: test') {
+        var errorToStringShim = function toString() {
+            if (typeof this === 'undefined' || this === null) {
+                throw new TypeError("can't convert " + this + ' to object');
+            }
+            var name = this.name;
+            if (typeof name === 'undefined') {
+                name = 'Error';
+            } else if (typeof name !== 'string') {
+                name = $String(name);
+            }
+            var msg = this.message;
+            if (typeof msg === 'undefined') {
+                msg = '';
+            } else if (typeof msg !== 'string') {
+                msg = $String(msg);
+            }
+            if (!name) {
+                return msg;
+            }
+            if (!msg) {
+                return name;
+            }
+            return name + ': ' + msg;
+        };
+        // can't use defineProperties here because of toString enumeration issue in IE <= 8
+        Error.prototype.toString = errorToStringShim;
+    }
+
+    if (supportsDescriptors) {
+        var ensureNonEnumerable = function (obj, prop) {
+            if (isEnum(obj, prop)) {
+                var desc = Object.getOwnPropertyDescriptor(obj, prop);
+                if (desc.configurable) {
+                    desc.enumerable = false;
+                    Object.defineProperty(obj, prop, desc);
+                }
+            }
+        };
+        ensureNonEnumerable(Error.prototype, 'message');
+        if (Error.prototype.message !== '') {
+            Error.prototype.message = '';
+        }
+        ensureNonEnumerable(Error.prototype, 'name');
+    }
+
+    if (String(/a/mig) !== '/a/gim') {
+        var regexToString = function toString() {
+            var str = '/' + this.source + '/';
+            if (this.global) {
+                str += 'g';
+            }
+            if (this.ignoreCase) {
+                str += 'i';
+            }
+            if (this.multiline) {
+                str += 'm';
+            }
+            return str;
+        };
+        // can't use defineProperties here because of toString enumeration issue in IE <= 8
+        RegExp.prototype.toString = regexToString;
+    }
+}));
+
+'use strict';
+/*jslint eqeq: true*/
+
+Handlebars.registerHelper('sanitize', function (text) {
+    var result;
+
+    if (text === undefined) { return ''; }
+
+    result = sanitizeHtml(text, {
+        allowedTags: [ 'div', 'span', 'b', 'i', 'em', 'strong', 'a', 'br', 'table', 'tbody', 'tr', 'th', 'td' ],
+        allowedAttributes: {
+            'div': [ 'class' ],
+            'span': [ 'class' ],
+            'table': [ 'class' ],
+            'td': [ 'class' ],
+            'th': [ 'colspan' ],
+            'a': [ 'href' ]
+        }
+    });
+
+    return new Handlebars.SafeString(result);
+});
+
+Handlebars.registerHelper('renderTextParam', function(param) {
+    var result, type = 'text', idAtt = '';
+    var paramType = param.type || param.schema && param.schema.type || '';
+    var isArray = paramType.toLowerCase() === 'array' || param.allowMultiple;
+    var defaultValue = isArray && Array.isArray(param.default) ? param.default.join('\n') : param.default;
+    var name = Handlebars.Utils.escapeExpression(param.name);
+    var valueId = Handlebars.Utils.escapeExpression(param.valueId);
+    paramType = Handlebars.Utils.escapeExpression(paramType);
+
+    var dataVendorExtensions = Object.keys(param).filter(function(property) {
+        // filter X-data- properties
+        return property.match(/^X-data-/i) !== null;
+    }).reduce(function(result, property) {
+        // remove X- from property name, so it results in html attributes like data-foo='bar'
+        return result += ' ' + property.substring(2, property.length) + '=\'' + param[property] + '\'';
+    }, '');
+
+    if(param.format && param.format === 'password') {
+        type = 'password';
+    }
+
+    if(valueId) {
+        idAtt = ' id=\'' + valueId + '\'';
+    }
+
+    if (defaultValue) {
+      defaultValue = sanitizeHtml(defaultValue);
+    } else {
+      defaultValue = '';
+    }
+
+    if(isArray) {
+        result = '<textarea class=\'body-textarea' + (param.required ? ' required' : '') + '\' name=\'' + name + '\'' + idAtt + dataVendorExtensions;
+        result += ' placeholder=\'Provide multiple values in new lines' + (param.required ? ' (at least one required).' : '.') + '\'>';
+        result += defaultValue + '</textarea>';
+    } else {
+        var parameterClass = 'parameter';
+        if(param.required) {
+          parameterClass += ' required';
+        }
+        result = '<input class=\'' + parameterClass + '\' minlength=\'' + (param.required ? 1 : 0) + '\'';
+        result += ' name=\'' + name +'\' placeholder=\'' + (param.required ? '(required)' : '') + '\'' + idAtt + dataVendorExtensions;
+        result += ' type=\'' + type + '\' value=\'' + defaultValue + '\'/>';
+    }
+    return new Handlebars.SafeString(result);
+});
+
+Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
+
+    switch (operator) {
+        case '==':
+            return (v1 == v2) ? options.fn(this) : options.inverse(this);
+        case '===':
+            return (v1 === v2) ? options.fn(this) : options.inverse(this);
+        case '<':
+            return (v1 < v2) ? options.fn(this) : options.inverse(this);
+        case '<=':
+            return (v1 <= v2) ? options.fn(this) : options.inverse(this);
+        case '>':
+            return (v1 > v2) ? options.fn(this) : options.inverse(this);
+        case '>=':
+            return (v1 >= v2) ? options.fn(this) : options.inverse(this);
+        case '&&':
+            return (v1 && v2) ? options.fn(this) : options.inverse(this);
+        case '||':
+            return (v1 || v2) ? options.fn(this) : options.inverse(this);
+        default:
+            return options.inverse(this);
+    }
+});
+
+Handlebars.registerHelper('escape', function (value) {
+    var text = Handlebars.Utils.escapeExpression(value);
+
+    return new Handlebars.SafeString(text);
+});
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sanitizeHtml=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if [...]
+var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset [...]
+}}module.exports={XML:decodeXMLStrict,HTML:decodeHTML,HTMLStrict:decodeHTMLStrict}},{"../maps/entities.json":25,"../maps/legacy.json":26,"../maps/xml.json":27,"./decode_codepoint.js":22}],22:[function(require,module,exports){var decodeMap=require("../maps/decode.json");module.exports=decodeCodePoint;function decodeCodePoint(codePoint){if(codePoint>=55296&&codePoint<=57343||codePoint>1114111){return"�"}if(codePoint in decodeMap){codePoint=decodeMap[codePoint]}var output="";if(codePoint>65 [...]
+}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._e [...]
+this._cbs.ontext(data)}};Tokenizer.prototype.reset=function(){Tokenizer.call(this,{xmlMode:this._xmlMode,decodeEntities:this._decodeEntities},this._cbs)};Tokenizer.prototype.getAbsoluteIndex=function(){return this._bufferOffset+this._index};Tokenizer.prototype._getSection=function(){return this._buffer.substring(this._sectionStart,this._index)};Tokenizer.prototype._emitToken=function(name){this._cbs[name](this._getSection());this._sectionStart=-1};Tokenizer.prototype._emitPartial=functio [...]
+state.pendingcb++;ret=writeOrBuffer(this,state,chunk,encoding,cb)}return ret};Writable.prototype.cork=function(){var state=this._writableState;state.corked++};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state)}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){if(typeof encoding==="string")enco [...]
+
+/**
+ * swagger-client - swagger-client is a javascript client for use with swaggering APIs.
+ * @version v2.1.29
+ * @link http://swagger.io
+ * @license Apache-2.0
+ */
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.SwaggerClient = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0 [...]
+'use strict';
+
+var auth = require('./lib/auth');
+var helpers = require('./lib/helpers');
+var SwaggerClient = require('./lib/client');
+var deprecationWrapper = function (url, options) {
+  helpers.log('This is deprecated, use "new SwaggerClient" instead.');
+
+  return new SwaggerClient(url, options);
+};
+
+/* Here for IE8 Support */
+if (!Array.prototype.indexOf) {
+  Array.prototype.indexOf = function(obj, start) {
+    for (var i = (start || 0), j = this.length; i < j; i++) {
+      if (this[i] === obj) { return i; }
+    }
+    return -1;
+  };
+}
+
+/* Here for IE8 Support */
+if (!String.prototype.trim) {
+  String.prototype.trim = function () {
+    return this.replace(/^\s+|\s+$/g, '');
+  };
+}
+
+/* Here for node 10.x support */
+if (!String.prototype.endsWith) {
+  String.prototype.endsWith = function(suffix) {
+    return this.indexOf(suffix, this.length - suffix.length) !== -1;
+  };
+}
+
+module.exports = SwaggerClient;
+
+SwaggerClient.ApiKeyAuthorization = auth.ApiKeyAuthorization;
+SwaggerClient.PasswordAuthorization = auth.PasswordAuthorization;
+SwaggerClient.CookieAuthorization = auth.CookieAuthorization;
+SwaggerClient.SwaggerApi = deprecationWrapper;
+SwaggerClient.SwaggerClient = deprecationWrapper;
+SwaggerClient.SchemaMarkup = require('./lib/schema-markup');
+
+},{"./lib/auth":2,"./lib/client":3,"./lib/helpers":4,"./lib/schema-markup":7}],2:[function(require,module,exports){
+'use strict';
+
+var helpers = require('./helpers');
+var btoa = require('btoa'); // jshint ignore:line
+var CookieJar = require('cookiejar').CookieJar;
+var _ = {
+  each: require('lodash-compat/collection/each'),
+  includes: require('lodash-compat/collection/includes'),
+  isObject: require('lodash-compat/lang/isObject'),
+  isArray: require('lodash-compat/lang/isArray')
+};
+
+/**
+ * SwaggerAuthorizations applies the correct authorization to an operation being executed
+ */
+var SwaggerAuthorizations = module.exports.SwaggerAuthorizations = function (authz) {
+  this.authz = authz || {};
+};
+
+/**
+ * Add auths to the hash
+ * Will overwrite any existing
+ *
+ */
+SwaggerAuthorizations.prototype.add = function (name, auth) {
+  if(_.isObject(name)) {
+    for (var key in name) {
+      this.authz[key] = name[key];
+    }
+  } else if(typeof name === 'string' ){
+    this.authz[name] = auth;
+  }
+
+  return auth;
+};
+
+SwaggerAuthorizations.prototype.remove = function (name) {
+  return delete this.authz[name];
+};
+
+SwaggerAuthorizations.prototype.apply = function (obj, securities) {
+  var status = true;
+  var applyAll = !securities;
+  var flattenedSecurities = [];
+
+  // favor the object-level authorizations over global
+  var authz = obj.clientAuthorizations || this.authz;
+
+  // Securities could be [ {} ]
+  _.each(securities, function (obj, key) {
+
+    // Make sure we account for securities being [ str ]
+    if(typeof key === 'string') {
+      flattenedSecurities.push(key);
+    }
+
+    // Flatten keys in to our array
+    _.each(obj, function (val, key) {
+      flattenedSecurities.push(key);
+    });
+  });
+
+  _.each(authz, function (auth, authName) {
+    if(applyAll || _.includes(flattenedSecurities, authName)) {
+      var newStatus = auth.apply(obj);
+      status = status && !!newStatus; // logical ORs regarding status
+    }
+  });
+
+  return status;
+};
+
+/**
+ * ApiKeyAuthorization allows a query param or header to be injected
+ */
+var ApiKeyAuthorization = module.exports.ApiKeyAuthorization = function (name, value, type) {
+  this.name = name;
+  this.value = value;
+  this.type = type;
+};
+
+ApiKeyAuthorization.prototype.apply = function (obj) {
+  if (this.type === 'query') {
+    // see if already applied.  If so, don't do it again
+
+    var qp;
+    if (obj.url.indexOf('?') > 0) {
+      qp = obj.url.substring(obj.url.indexOf('?') + 1);
+      var parts = qp.split('&');
+      if(parts && parts.length > 0) {
+        for(var i = 0; i < parts.length; i++) {
+          var kv = parts[i].split('=');
+          if(kv && kv.length > 0) {
+            if (kv[0] === this.name) {
+              // skip it
+              return false;
+            }
+          }
+        }
+      }
+    }
+
+    if (obj.url.indexOf('?') > 0) {
+      obj.url = obj.url + '&' + this.name + '=' + this.value;
+    } else {
+      obj.url = obj.url + '?' + this.name + '=' + this.value;
+    }
+
+    return true;
+  } else if (this.type === 'header') {
+    if(typeof obj.headers[this.name] === 'undefined') {
+      obj.headers[this.name] = this.value;
+    }
+
+    return true;
+  }
+};
+
+var CookieAuthorization = module.exports.CookieAuthorization = function (cookie) {
+  this.cookie = cookie;
+};
+
+CookieAuthorization.prototype.apply = function (obj) {
+  obj.cookieJar = obj.cookieJar || new CookieJar();
+  obj.cookieJar.setCookie(this.cookie);
+
+  return true;
+};
+
+/**
+ * Password Authorization is a basic auth implementation
+ */
+var PasswordAuthorization = module.exports.PasswordAuthorization = function (username, password) {
+  if (arguments.length === 3) {
+    helpers.log('PasswordAuthorization: the \'name\' argument has been removed, pass only username and password');
+    username = arguments[1];
+    password = arguments[2];
+  }
+  this.username = username;
+  this.password = password;
+};
+
+PasswordAuthorization.prototype.apply = function (obj) {
+  if(typeof obj.headers.Authorization === 'undefined') {
+    obj.headers.Authorization = 'Basic ' + btoa(this.username + ':' + this.password);
+  }
+
+  return true;
+};
+
+},{"./helpers":4,"btoa":13,"cookiejar":18,"lodash-compat/collection/each":52,"lodash-compat/collection/includes":55,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isObject":144}],3:[function(require,module,exports){
+'use strict';
+
+var _ = {
+  bind: require('lodash-compat/function/bind'),
+  cloneDeep: require('lodash-compat/lang/cloneDeep'),
+  find: require('lodash-compat/collection/find'),
+  forEach: require('lodash-compat/collection/forEach'),
+  indexOf: require('lodash-compat/array/indexOf'),
+  isArray: require('lodash-compat/lang/isArray'),
+  isObject: require('lodash-compat/lang/isObject'),
+  isFunction: require('lodash-compat/lang/isFunction'),
+  isPlainObject: require('lodash-compat/lang/isPlainObject'),
+  isUndefined: require('lodash-compat/lang/isUndefined')
+};
+var auth = require('./auth');
+var helpers = require('./helpers');
+var Model = require('./types/model');
+var Operation = require('./types/operation');
+var OperationGroup = require('./types/operationGroup');
+var Resolver = require('./resolver');
+var SwaggerHttp = require('./http');
+var SwaggerSpecConverter = require('./spec-converter');
+var Q = require('q');
+
+// We have to keep track of the function/property names to avoid collisions for tag names which are used to allow the
+// following usage: 'client.{tagName}'
+var reservedClientTags = [
+  'apis',
+  'authorizationScheme',
+  'authorizations',
+  'basePath',
+  'build',
+  'buildFrom1_1Spec',
+  'buildFrom1_2Spec',
+  'buildFromSpec',
+  'clientAuthorizations',
+  'convertInfo',
+  'debug',
+  'defaultErrorCallback',
+  'defaultSuccessCallback',
+  'enableCookies',
+  'fail',
+  'failure',
+  'finish',
+  'help',
+  'host',
+  'idFromOp',
+  'info',
+  'initialize',
+  'isBuilt',
+  'isValid',
+  'modelPropertyMacro',
+  'models',
+  'modelsArray',
+  'options',
+  'parameterMacro',
+  'parseUri',
+  'progress',
+  'resourceCount',
+  'sampleModels',
+  'selfReflect',
+  'setConsolidatedModels',
+  'spec',
+  'supportedSubmitMethods',
+  'swaggerRequestHeaders',
+  'tagFromLabel',
+  'title',
+  'url',
+  'useJQuery',
+  'jqueryAjaxCache'
+];
+// We have to keep track of the function/property names to avoid collisions for tag names which are used to allow the
+// following usage: 'client.apis.{tagName}'
+var reservedApiTags = [
+  'apis',
+  'asCurl',
+  'description',
+  'externalDocs',
+  'help',
+  'label',
+  'name',
+  'operation',
+  'operations',
+  'operationsArray',
+  'path',
+  'tag'
+];
+var supportedOperationMethods = ['delete', 'get', 'head', 'options', 'patch', 'post', 'put'];
+var SwaggerClient = module.exports = function (url, options) {
+  this.authorizations = null;
+  this.authorizationScheme = null;
+  this.basePath = null;
+  this.debug = false;
+  this.enableCookies = false;
+  this.info = null;
+  this.isBuilt = false;
+  this.isValid = false;
+  this.modelsArray = [];
+  this.resourceCount = 0;
+  this.url = null;
+  this.useJQuery = false;
+  this.jqueryAjaxCache = false;
+  this.swaggerObject = {};
+  this.deferredClient = undefined;
+
+  this.clientAuthorizations = new auth.SwaggerAuthorizations();
+
+  if (typeof url !== 'undefined') {
+    return this.initialize(url, options);
+  } else {
+    return this;
+  }
+};
+
+SwaggerClient.prototype.initialize = function (url, options) {
+  this.models = {};
+  this.sampleModels = {};
+
+  if (typeof url === 'string') {
+    this.url = url;
+  } else if (_.isObject(url)) {
+    options = url;
+    this.url = options.url;
+  }
+
+  if(this.url && this.url.indexOf('http:') === -1 && this.url.indexOf('https:') === -1) {
+    // no protocol, so we can only use window if it exists
+    if(typeof(window) !== 'undefined' && window && window.location) {
+      this.url = window.location.origin + this.url;
+    }
+  }
+
+  options = options || {};
+  this.clientAuthorizations.add(options.authorizations);
+  this.swaggerRequestHeaders = options.swaggerRequestHeaders || 'application/json;charset=utf-8,*/*';
+  this.defaultSuccessCallback = options.defaultSuccessCallback || null;
+  this.defaultErrorCallback = options.defaultErrorCallback || null;
+  this.modelPropertyMacro = options.modelPropertyMacro || null;
+  this.connectionAgent = options.connectionAgent || null;
+  this.parameterMacro = options.parameterMacro || null;
+  this.usePromise = options.usePromise || null;
+
+  // operation request timeout default
+  this.timeout = options.timeout || null;
+  // default to request timeout when not specified
+  this.fetchSpecTimeout = typeof options.fetchSpecTimeout !== 'undefined' ?
+      options.fetchSpecTimeout : options.timeout || null;
+
+  if(this.usePromise) {
+    this.deferredClient = Q.defer();
+  }
+
+  if (typeof options.success === 'function') {
+    this.success = options.success;
+  }
+  if (options.useJQuery) {
+    this.useJQuery = options.useJQuery;
+  }
+
+  if (options.jqueryAjaxCache) {
+    this.jqueryAjaxCache = options.jqueryAjaxCache;
+  }
+
+  if (options.enableCookies) {
+    this.enableCookies = options.enableCookies;
+  }
+
+  this.options = options || {};
+
+  // maybe don't need this?
+  this.options.timeout = this.timeout;
+  this.options.fetchSpecTimeout = this.fetchSpecTimeout;
+
+  this.supportedSubmitMethods = options.supportedSubmitMethods || [];
+  this.failure = options.failure || function (err) { throw err; };
+  this.progress = options.progress || function () {};
+  this.spec = _.cloneDeep(options.spec); // Clone so we do not alter the provided document
+
+  if (options.scheme) {
+    this.scheme = options.scheme;
+  }
+
+  if (this.usePromise || typeof options.success === 'function') {
+    this.ready = true;
+    return this.build();
+  }
+};
+
+SwaggerClient.prototype.build = function (mock) {
+  if (this.isBuilt) {
+    return this;
+  }
+
+  var self = this;
+
+  if (this.spec) {
+    this.progress('fetching resource list; Please wait.');
+  } else {
+    this.progress('fetching resource list: ' + this.url + '; Please wait.');
+  }
+
+  var obj = {
+    useJQuery: this.useJQuery,
+    jqueryAjaxCache: this.jqueryAjaxCache,
+    connectionAgent: this.connectionAgent,
+    enableCookies: this.enableCookies,
+    url: this.url,
+    method: 'get',
+    headers: {
+      accept: this.swaggerRequestHeaders
+    },
+    on: {
+      error: function (response) {
+        if (self.url.substring(0, 4) !== 'http') {
+          return self.fail('Please specify the protocol for ' + self.url);
+        } else if (response.errObj && (response.errObj.code === 'ECONNABORTED' || response.errObj.message.indexOf('timeout') !== -1)) {
+          return self.fail('Request timed out after ' + self.fetchSpecTimeout + 'ms');
+        } else if (response.status === 0) {
+          return self.fail('Can\'t read from server.  It may not have the appropriate access-control-origin settings.');
+        } else if (response.status === 404) {
+          return self.fail('Can\'t read swagger JSON from ' + self.url);
+        } else {
+          return self.fail(response.status + ' : ' + response.statusText + ' ' + self.url);
+        }
+      },
+      response: function (resp) {
+
+        var responseObj = resp.obj;
+        if(!responseObj) {
+          return self.fail('failed to parse JSON/YAML response');
+        }
+
+        self.swaggerVersion = responseObj.swaggerVersion;
+        self.swaggerObject = responseObj;
+
+        if (responseObj.swagger && parseInt(responseObj.swagger) === 2) {
+          self.swaggerVersion = responseObj.swagger;
+
+          new Resolver().resolve(responseObj, self.url, self.buildFromSpec, self);
+
+          self.isValid = true;
+        } else {
+          var converter = new SwaggerSpecConverter();
+          self.oldSwaggerObject = self.swaggerObject;
+
+          converter.setDocumentationLocation(self.url);
+          converter.convert(responseObj, self.clientAuthorizations, self.options, function(spec) {
+            self.swaggerObject = spec;
+            new Resolver().resolve(spec, self.url, self.buildFromSpec, self);
+            self.isValid = true;
+          });
+        }
+      }
+    }
+  };
+
+  // only set timeout when specified
+  if (this.fetchSpecTimeout) {
+    obj.timeout = this.fetchSpecTimeout;
+  }
+
+  if (this.spec) {
+    self.swaggerObject = this.spec;
+    setTimeout(function () {
+      new Resolver().resolve(self.spec, self.url, self.buildFromSpec, self);
+    }, 10);
+  } else {
+    this.clientAuthorizations.apply(obj);
+
+    if (mock) {
+      return obj;
+    }
+
+    new SwaggerHttp().execute(obj, this.options);
+  }
+
+  return (this.usePromise) ? this.deferredClient.promise : this;
+};
+
+SwaggerClient.prototype.buildFromSpec = function (response) {
+  if (this.isBuilt) {
+    return this;
+  }
+
+  this.apis = {};
+  this.apisArray = [];
+  this.basePath = response.basePath || '';
+  this.consumes = response.consumes;
+  this.host = response.host || '';
+  this.info = response.info || {};
+  this.produces = response.produces;
+  this.schemes = response.schemes || [];
+  this.securityDefinitions = _.cloneDeep(response.securityDefinitions);
+  this.security = response.security;
+  this.title = response.title || '';
+
+  var key, definedTags = {}, k, location, self = this, i;
+
+  if (response.externalDocs) {
+    this.externalDocs = response.externalDocs;
+  }
+
+  // legacy support
+  this.authSchemes = this.securityDefinitions;
+
+  if(this.securityDefinitions) {
+    for(key in this.securityDefinitions) {
+      var securityDefinition = this.securityDefinitions[key];
+      securityDefinition.vendorExtensions = {};
+      for(var ext in securityDefinition) {
+        helpers.extractExtensions(ext, securityDefinition);
+        if (ext === 'scopes') {
+          var scopes = securityDefinition[ext];
+          if(typeof scopes === 'object') {
+            scopes.vendorExtensions = {};
+            for (var s in scopes) {
+              helpers.extractExtensions(s, scopes);
+              if(s.indexOf('x-') === 0) {
+                delete scopes[s];
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  if (Array.isArray(response.tags)) {
+    definedTags = {};
+
+    for (k = 0; k < response.tags.length; k++) {
+      var t = _.cloneDeep(response.tags[k]);
+      definedTags[t.name] = t;
+      for(i in t) {
+        if(i === 'externalDocs' && typeof t[i] === 'object') {
+          for(var j in t[i]) {
+            helpers.extractExtensions(j, t[i]);
+          }
+        }
+        helpers.extractExtensions(i, t);
+      }
+    }
+  }
+
+
+  if (typeof this.url === 'string') {
+    location = this.parseUri(this.url);
+    if (typeof this.scheme === 'undefined' && typeof this.schemes === 'undefined' || this.schemes.length === 0) {
+      if(typeof window !== 'undefined') {
+        // use the window scheme
+        this.scheme = window.location.protocol.replace(':','');
+      }
+      else {
+        this.scheme = location.scheme || 'http';
+      }
+    } else if (typeof window !== 'undefined' && window.location.protocol.indexOf('chrome-extension') === 0) {
+		// if it is chrome swagger ui extension scheme then let swagger doc url scheme decide the protocol
+		this.scheme = location.scheme;
+	} else if (typeof this.scheme === 'undefined') {
+      if(typeof window !== 'undefined') {
+        var scheme = window.location.protocol.replace(':','');
+        if(scheme === 'https' && this.schemes.indexOf(scheme) === -1) {
+          // can't call http from https served page in a browser!
+          helpers.log('Cannot call a http server from https inside a browser!');
+          this.scheme = 'http';
+        }
+        else if(this.schemes.indexOf(scheme) !== -1) {
+          this.scheme = scheme;
+        }
+        else {
+          if(this.schemes.indexOf('https') !== -1) {
+            this.scheme = 'https';
+          }
+          else {
+            this.scheme = 'http';
+          }
+        }
+      }
+      else {
+        this.scheme = this.schemes[0] || location.scheme;
+      }
+    }
+
+    if (typeof this.host === 'undefined' || this.host === '') {
+      this.host = location.host;
+
+      if (location.port) {
+        this.host = this.host + ':' + location.port;
+      }
+    }
+  }
+  else {
+    if (typeof this.schemes === 'undefined' || this.schemes.length === 0) {
+      this.scheme = 'http';
+    }
+    else if (typeof this.scheme === 'undefined') {
+      this.scheme = this.schemes[0];
+    }
+  }
+
+  this.definitions = response.definitions;
+
+  for (key in this.definitions) {
+    var model = new Model(key, this.definitions[key], this.models, this.modelPropertyMacro);
+
+    if (model) {
+      this.models[key] = model;
+    }
+  }
+
+  // get paths, create functions for each operationId
+
+  // Bind help to 'client.apis'
+  self.apis.help = _.bind(self.help, self);
+
+  _.forEach(response.paths, function (pathObj, path) {
+    // Only process a path if it's an object
+    if (!_.isPlainObject(pathObj)) {
+      return;
+    }
+
+    _.forEach(supportedOperationMethods, function (method) {
+      var operation = pathObj[method];
+
+      if (_.isUndefined(operation)) {
+        // Operation does not exist
+        return;
+      } else if (!_.isPlainObject(operation)) {
+        // Operation exists but it is not an Operation Object.  Since this is invalid, log it.
+        helpers.log('The \'' + method + '\' operation for \'' + path + '\' path is not an Operation Object');
+
+        return;
+      }
+
+      var tags = operation.tags;
+
+      if (_.isUndefined(tags) || !_.isArray(tags) || tags.length === 0) {
+        tags = operation.tags = [ 'default' ];
+      }
+
+      var operationId = self.idFromOp(path, method, operation);
+
+      var operationObject = new Operation(self,
+        operation.scheme,
+        operationId,
+        method,
+        path,
+        operation,
+        self.definitions,
+        self.models,
+        self.clientAuthorizations);
+
+      operationObject.connectionAgent = self.connectionAgent;
+      operationObject.vendorExtensions = {};
+      for(i in operation) {
+        helpers.extractExtensions(i, operationObject, operation[i]);
+      }
+      operationObject.externalDocs = operation.externalDocs;
+      if(operationObject.externalDocs) {
+        operationObject.externalDocs = _.cloneDeep(operationObject.externalDocs);
+        operationObject.externalDocs.vendorExtensions = {};
+        for(i in operationObject.externalDocs) {
+          helpers.extractExtensions(i, operationObject.externalDocs);
+        }
+      }
+
+      // bind self operation's execute command to the api
+      _.forEach(tags, function (tag) {
+        var clientProperty = _.indexOf(reservedClientTags, tag) > -1 ? '_' + tag : tag;
+        var apiProperty = _.indexOf(reservedApiTags, tag) > -1 ? '_' + tag : tag;
+        var operationGroup = self[clientProperty];
+
+        if (clientProperty !== tag) {
+          helpers.log('The \'' + tag + '\' tag conflicts with a SwaggerClient function/property name.  Use \'client.' +
+                      clientProperty + '\' or \'client.apis.' + tag + '\' instead of \'client.' + tag + '\'.');
+        }
+
+        if (apiProperty !== tag) {
+          helpers.log('The \'' + tag + '\' tag conflicts with a SwaggerClient operation function/property name.  Use ' +
+                      '\'client.apis.' + apiProperty + '\' instead of \'client.apis.' + tag + '\'.');
+        }
+
+        if (_.indexOf(reservedApiTags, operationId) > -1) {
+          helpers.log('The \'' + operationId + '\' operationId conflicts with a SwaggerClient operation ' +
+                      'function/property name.  Use \'client.apis.' + apiProperty + '._' + operationId +
+                      '\' instead of \'client.apis.' + apiProperty + '.' + operationId + '\'.');
+
+          operationId = '_' + operationId;
+          operationObject.nickname = operationId; // So 'client.apis.[tag].operationId.help() works properly
+        }
+
+        if (_.isUndefined(operationGroup)) {
+          operationGroup = self[clientProperty] = self.apis[apiProperty] = {};
+
+          operationGroup.operations = {};
+          operationGroup.label = apiProperty;
+          operationGroup.apis = {};
+
+          var tagDef = definedTags[tag];
+
+          if (!_.isUndefined(tagDef)) {
+            operationGroup.description = tagDef.description;
+            operationGroup.externalDocs = tagDef.externalDocs;
+            operationGroup.vendorExtensions = tagDef.vendorExtensions;
+          }
+
+          self[clientProperty].help = _.bind(self.help, operationGroup);
+          self.apisArray.push(new OperationGroup(tag, operationGroup.description, operationGroup.externalDocs, operationObject));
+        }
+
+        operationId = self.makeUniqueOperationId(operationId, self.apis[apiProperty]);
+
+        // Bind tag help
+        if (!_.isFunction(operationGroup.help)) {
+          operationGroup.help = _.bind(self.help, operationGroup);
+        }
+
+        // bind to the apis object
+        self.apis[apiProperty][operationId] = operationGroup[operationId] = _.bind(operationObject.execute,
+                                                                                  operationObject);
+        self.apis[apiProperty][operationId].help = operationGroup[operationId].help = _.bind(operationObject.help,
+                                                                                             operationObject);
+        self.apis[apiProperty][operationId].asCurl = operationGroup[operationId].asCurl = _.bind(operationObject.asCurl,
+                                                                                                 operationObject);
+
+        operationGroup.apis[operationId] = operationGroup.operations[operationId] = operationObject;
+
+        // legacy UI feature
+        var api = _.find(self.apisArray, function (api) {
+          return api.tag === tag;
+        });
+
+        if (api) {
+          api.operationsArray.push(operationObject);
+        }
+      });
+    });
+  });
+
+  // sort the apisArray according to the tags
+  var sortedApis = [];
+  _.forEach(Object.keys(definedTags), function (tag) {
+    var pos;
+    for(pos in self.apisArray) {
+      var _api = self.apisArray[pos];
+      if(_api && tag === _api.name) {
+        sortedApis.push(_api);
+        self.apisArray[pos] = null;
+      }
+    }
+  });
+  // add anything left
+  _.forEach(self.apisArray, function (api) {
+    if(api) {
+      sortedApis.push(api);
+    }
+  });
+  self.apisArray = sortedApis;
+
+  _.forEach(response.definitions, function (definitionObj, definition) {
+    definitionObj.id = definition.toLowerCase();
+    definitionObj.name = definition;
+    self.modelsArray.push(definitionObj);
+  });
+
+  this.isBuilt = true;
+
+  if (this.usePromise) {
+    this.isValid = true;
+    this.isBuilt = true;
+    this.deferredClient.resolve(this);
+
+    return this.deferredClient.promise;
+  }
+
+  if (this.success) {
+    this.success();
+  }
+
+  return this;
+};
+
+SwaggerClient.prototype.makeUniqueOperationId = function(operationId, api) {
+  var count = 0;
+  var name = operationId;
+
+  // make unique across this operation group
+  while(true) {
+    var matched = false;
+    _.forEach(api.operations, function (operation) {
+      if(operation.nickname === name) {
+        matched = true;
+      }
+    });
+    if(!matched) {
+      return name;
+    }
+    name = operationId + '_' + count;
+    count ++;
+  }
+
+  return operationId;
+};
+
+SwaggerClient.prototype.parseUri = function (uri) {
+  var urlParseRE = /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/;
+  var parts = urlParseRE.exec(uri);
+
+  return {
+    scheme: parts[4] ? parts[4].replace(':','') : undefined,
+    host: parts[11],
+    port: parts[12],
+    path: parts[15]
+  };
+};
+
+SwaggerClient.prototype.help = function (dontPrint) {
+  var output = '';
+
+  if (this instanceof SwaggerClient) {
+    _.forEach(this.apis, function (api, name) {
+      if (_.isPlainObject(api)) {
+        output += 'operations for the \'' + name + '\' tag\n';
+
+        _.forEach(api.operations, function (operation, name) {
+          output += '  * ' + name + ': ' + operation.summary + '\n';
+        });
+      }
+    });
+  } else if (this instanceof OperationGroup || _.isPlainObject(this)) {
+    output += 'operations for the \'' + this.label + '\' tag\n';
+
+    _.forEach(this.apis, function (operation, name) {
+      output += '  * ' + name + ': ' + operation.summary + '\n';
+    });
+  }
+
+  if (dontPrint) {
+    return output;
+  } else {
+    helpers.log(output);
+
+    return output;
+  }
+};
+
+SwaggerClient.prototype.tagFromLabel = function (label) {
+  return label;
+};
+
+SwaggerClient.prototype.idFromOp = function (path, httpMethod, op) {
+  if(!op || !op.operationId) {
+    op = op || {};
+    op.operationId = httpMethod + '_' + path;
+  }
+  var opId = op.operationId.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|.\/?,\\'""-]/g, '_') || (path.substring(1) + '_' + httpMethod);
+
+  opId = opId.replace(/((_){2,})/g, '_');
+  opId = opId.replace(/^(_)*/g, '');
+  opId = opId.replace(/([_])*$/g, '');
+
+  return opId;
+};
+
+SwaggerClient.prototype.setHost = function (host) {
+  this.host = host;
+
+  if(this.apis) {
+    _.forEach(this.apis, function(api) {
+      if(api.operations) {
+        _.forEach(api.operations, function(operation) {
+          operation.host = host;
+        });
+      }
+    });
+  }
+};
+
+SwaggerClient.prototype.setBasePath = function (basePath) {
+  this.basePath = basePath;
+
+  if(this.apis) {
+    _.forEach(this.apis, function(api) {
+      if(api.operations) {
+        _.forEach(api.operations, function(operation) {
+          operation.basePath = basePath;
+        });
+      }
+    });
+  }
+};
+
+SwaggerClient.prototype.setSchemes = function (schemes) {
+  this.schemes = schemes;
+
+  if(schemes && schemes.length > 0) {
+    if(this.apis) {
+      _.forEach(this.apis, function (api) {
+        if (api.operations) {
+          _.forEach(api.operations, function (operation) {
+            operation.scheme = schemes[0];
+          });
+        }
+      });
+    }
+  }
+};
+
+SwaggerClient.prototype.fail = function (message) {
+  if (this.usePromise) {
+    this.deferredClient.reject(message);
+    return this.deferredClient.promise;
+  } else {
+    if (this.failure) {
+      this.failure(message);
+    }
+    else {
+      this.failure(message);
+    }
+  }
+};
+
+},{"./auth":2,"./helpers":4,"./http":5,"./resolver":6,"./spec-converter":8,"./types/model":9,"./types/operation":10,"./types/operationGroup":11,"lodash-compat/array/indexOf":49,"lodash-compat/collection/find":53,"lodash-compat/collection/forEach":54,"lodash-compat/function/bind":58,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isFunction":142,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isPlainObject":145,"lodash-compat/lang/isUndefined" [...]
+(function (process){
+'use strict';
+
+var _ = {
+  isPlainObject: require('lodash-compat/lang/isPlainObject'),
+  indexOf: require('lodash-compat/array/indexOf')
+};
+
+module.exports.__bind = function (fn, me) {
+  return function(){
+    return fn.apply(me, arguments);
+  };
+};
+
+var log = module.exports.log = function() {
+  // Only log if available and we're not testing
+  if (console && process.env.NODE_ENV !== 'test') {
+    console.log(Array.prototype.slice.call(arguments)[0]);
+  }
+};
+
+module.exports.fail = function (message) {
+  log(message);
+};
+
+module.exports.optionHtml = function (label, value) {
+  return '<tr><td class="optionName">' + label + ':</td><td>' + value + '</td></tr>';
+};
+
+var resolveSchema = module.exports.resolveSchema = function (schema) {
+  if (_.isPlainObject(schema.schema)) {
+    schema = resolveSchema(schema.schema);
+  }
+
+  return schema;
+};
+
+module.exports.simpleRef = function (name) {
+  if (typeof name === 'undefined') {
+    return null;
+  }
+
+  if (name.indexOf('#/definitions/') === 0) {
+    return name.substring('#/definitions/'.length);
+  } else {
+    return name;
+  }
+};
+
+/**
+ * helper to remove extensions and add them to an object
+ *
+ * @param keyname
+ * @param obj
+ */
+module.exports.extractExtensions = function (keyname, obj, value) {
+  if(!keyname || !obj) {
+    return;
+  }
+
+  if (typeof keyname === 'string' && keyname.indexOf('x-') === 0) {
+    obj.vendorExtensions = obj.vendorExtensions || {};
+    if(value) {
+      obj.vendorExtensions[keyname] = value;
+    }
+    else {
+      obj.vendorExtensions[keyname] = obj[keyname];
+    }
+  }
+};
+}).call(this,require('_process'))
+
+},{"_process":12,"lodash-compat/array/indexOf":49,"lodash-compat/lang/isPlainObject":145}],5:[function(require,module,exports){
+(function (Buffer){
+'use strict';
+
+var helpers = require('./helpers');
+var request = require('superagent');
+var jsyaml = require('js-yaml');
+var _ = {
+  isObject: require('lodash-compat/lang/isObject'),
+  keys: require('lodash-compat/object/keys')
+};
+
+/*
+ * JQueryHttpClient is a light-weight, node or browser HTTP client
+ */
+var JQueryHttpClient = function () {
+  this.type = 'JQueryHttpClient';
+};
+
+/*
+ * SuperagentHttpClient is a light-weight, node or browser HTTP client
+ */
+var SuperagentHttpClient = function () {
+  this.type = 'SuperagentHttpClient';
+};
+
+/**
+ * SwaggerHttp is a wrapper for executing requests
+ */
+var SwaggerHttp = module.exports = function () {};
+
+SwaggerHttp.prototype.execute = function (obj, opts) {
+  var client;
+
+  if(opts && opts.client) {
+    client = opts.client;
+  }
+  else {
+    client = new SuperagentHttpClient(opts);
+  }
+  client.opts = opts || {};
+
+  if (opts && opts.requestAgent) {
+    request = opts.requestAgent;
+  }
+
+  // legacy support
+  var hasJQuery = false;
+  if(typeof window !== 'undefined') {
+    if(typeof window.jQuery !== 'undefined') {
+      hasJQuery = true;
+    }
+  }
+  // OPTIONS support
+  if(obj.method.toLowerCase() === 'options' && client.type === 'SuperagentHttpClient') {
+    log('forcing jQuery as OPTIONS are not supported by SuperAgent');
+    obj.useJQuery = true;
+  }
+  if(this.isInternetExplorer() && (obj.useJQuery === false || !hasJQuery )) {
+    throw new Error('Unsupported configuration! JQuery is required but not available');
+  }
+  if ((obj && obj.useJQuery === true) || this.isInternetExplorer() && hasJQuery) {
+    client = new JQueryHttpClient(opts);
+  }
+
+  var success = obj.on.response;
+  var error = obj.on.error;
+
+  var requestInterceptor = function(data) {
+    if(opts && opts.requestInterceptor) {
+      data = opts.requestInterceptor.apply(data);
+    }
+    return data;
+  };
+
+  var responseInterceptor = function(data) {
+    if(opts && opts.responseInterceptor) {
+      data = opts.responseInterceptor.apply(data, [obj]);
+    }
+    return success(data);
+  };
+
+  var errorInterceptor = function(data) {
+    if(opts && opts.responseInterceptor) {
+      data = opts.responseInterceptor.apply(data, [obj]);
+    }
+    error(data);
+  };
+
+  obj.on.error = function(data) {
+    errorInterceptor(data);
+  };
+
+  obj.on.response = function(data) {
+    if(data && data.status >= 400) {
+      errorInterceptor(data);
+    }
+    else {
+      responseInterceptor(data);
+    }
+  };
+
+  if (_.isObject(obj) && _.isObject(obj.body)) {
+    // special processing for file uploads via jquery
+    if (obj.body.type && obj.body.type === 'formData'){
+      if(opts.useJQuery) {
+        obj.contentType = false;
+        obj.processData = false;
+        delete obj.headers['Content-Type'];
+      }
+    }
+  }
+
+  obj = requestInterceptor(obj) || obj;
+  if (obj.beforeSend) {
+    obj.beforeSend(function(_obj) {
+      client.execute(_obj || obj);
+    });
+  } else {
+    client.execute(obj);
+  }
+
+  return (obj.deferred) ? obj.deferred.promise : obj;
+};
+
+SwaggerHttp.prototype.isInternetExplorer = function () {
+  var detectedIE = false;
+
+  if (typeof navigator !== 'undefined' && navigator.userAgent) {
+    var nav = navigator.userAgent.toLowerCase();
+
+    if (nav.indexOf('msie') !== -1) {
+      var version = parseInt(nav.split('msie')[1]);
+
+      if (version <= 8) {
+        detectedIE = true;
+      }
+    }
+  }
+
+  return detectedIE;
+};
+
+JQueryHttpClient.prototype.execute = function (obj) {
+  var jq = this.jQuery || (typeof window !== 'undefined' && window.jQuery);
+  var cb = obj.on;
+  var request = obj;
+
+  if(typeof jq === 'undefined' || jq === false) {
+    throw new Error('Unsupported configuration! JQuery is required but not available');
+  }
+
+  obj.type = obj.method;
+  obj.cache = obj.jqueryAjaxCache;
+  obj.data = obj.body;
+  delete obj.jqueryAjaxCache;
+  delete obj.useJQuery;
+  delete obj.body;
+
+  obj.complete = function (response) {
+    var headers = {};
+    var headerArray = response.getAllResponseHeaders().split('\n');
+
+    for (var i = 0; i < headerArray.length; i++) {
+      var toSplit = headerArray[i].trim();
+
+      if (toSplit.length === 0) {
+        continue;
+      }
+
+      var separator = toSplit.indexOf(':');
+
+      if (separator === -1) {
+        // Name but no value in the header
+        headers[toSplit] = null;
+
+        continue;
+      }
+
+      var name = toSplit.substring(0, separator).trim();
+      var value = toSplit.substring(separator + 1).trim();
+
+      headers[name] = value;
+    }
+
+    var out = {
+      url: request.url,
+      method: request.method,
+      status: response.status,
+      statusText: response.statusText,
+      data: response.responseText,
+      headers: headers
+    };
+
+    try {
+      var possibleObj =  response.responseJSON || jsyaml.safeLoad(response.responseText);
+      out.obj = (typeof possibleObj === 'string') ? {} : possibleObj;
+    } catch (ex) {
+      // do not set out.obj
+      helpers.log('unable to parse JSON/YAML content');
+    }
+
+    // I can throw, or parse null?
+    out.obj = out.obj || null;
+
+    if (response.status >= 200 && response.status < 300) {
+      cb.response(out);
+    } else if (response.status === 0 || (response.status >= 400 && response.status < 599)) {
+      cb.error(out);
+    } else {
+      return cb.response(out);
+    }
+  };
+
+  jq.support.cors = true;
+
+  return jq.ajax(obj);
+};
+
+SuperagentHttpClient.prototype.execute = function (obj) {
+  var method = obj.method.toLowerCase();
+  var timeout = obj.timeout;
+
+  if (method === 'delete') {
+    method = 'del';
+  }
+  var headers = obj.headers || {};
+
+  var r = request[method](obj.url);
+
+  if (obj.connectionAgent) {
+    r.agent(obj.connectionAgent);
+  }
+
+  if (timeout) {
+    r.timeout(timeout);
+  }
+
+  if (obj.enableCookies) {
+    r.withCredentials();
+  }
+
+  var accept = obj.headers.Accept;
+
+  if(this.binaryRequest(accept)) {
+    r.on('request', function () {
+      if(this.xhr) {
+        this.xhr.responseType = 'blob';
+      }
+    });
+  }
+
+  if(obj.body) {
+    if(_.isObject(obj.body)) {
+      var contentType = obj.headers['Content-Type'] || '';
+      if (contentType.indexOf('multipart/form-data') === 0) {
+        delete headers['Content-Type'];
+        if({}.toString.apply(obj.body) === '[object FormData]') {
+          r.send(obj.body);
+        }
+        else {
+          var keyname, value, v;
+          for (keyname in obj.body) {
+            value = obj.body[keyname];
+            if(Array.isArray(value)) {
+              for(v in value) {
+                r.field(keyname, v);
+              }
+            }
+            else {
+              r.field(keyname, value);
+            }
+          }
+        }
+      }
+      else if (_.isObject(obj.body)) {
+        // non multipart/form-data
+        obj.body = JSON.stringify(obj.body);
+        r.send(obj.body);
+      }
+    }
+    else {
+      r.send(obj.body);
+    }
+  }
+
+  var name;
+  for (name in headers) {
+    r.set(name, headers[name]);
+  }
+
+  if(typeof r.buffer === 'function') {
+    r.buffer(); // force superagent to populate res.text with the raw response data
+  }
+
+  r.end(function (err, res) {
+    res = res || {
+      status: 0,
+      headers: {error: 'no response from server'}
+    };
+    var response = {
+      url: obj.url,
+      method: obj.method,
+      headers: res.headers
+    };
+    var cb;
+
+    if (!err && res.error) {
+      err = res.error;
+    }
+
+    if (err && obj.on && obj.on.error) {
+      response.errObj = err;
+      response.status = res ? res.status : 500;
+      response.statusText = res ? res.text : err.message;
+      if (res.headers && res.headers['content-type']) {
+        if (res.headers['content-type'].indexOf('application/json') >= 0) {
+          try {
+            response.obj = JSON.parse(response.statusText);
+          }
+          catch (e) {
+            response.obj = null;
+          }
+        }
+      }
+      cb = obj.on.error;
+    } else if (res && obj.on && obj.on.response) {
+      var possibleObj;
+
+      // Already parsed by by superagent?
+      if (res.body && _.keys(res.body).length > 0) {
+        possibleObj = res.body;
+      } else {
+        try {
+          possibleObj = jsyaml.safeLoad(res.text);
+          // can parse into a string... which we don't need running around in the system
+          possibleObj = (typeof possibleObj === 'string') ? null : possibleObj;
+        } catch (e) {
+          helpers.log('cannot parse JSON/YAML content');
+        }
+      }
+
+      // null means we can't parse into object
+      if(typeof Buffer === 'function' && Buffer.isBuffer(possibleObj)) {
+        response.data = possibleObj;
+      }
+      else {
+        response.obj = (typeof possibleObj === 'object') ? possibleObj : null;
+      }
+
+      response.status = res.status;
+      response.statusText = res.text;
+      cb = obj.on.response;
+    }
+    if (res.xhr && res.xhr.response) {
+      response.data = res.xhr.response;
+    }
+    else if(!response.data) {
+      response.data = response.statusText;
+    }
+
+    if (cb) {
+      cb(response);
+    }
+  });
+};
+
+SuperagentHttpClient.prototype. binaryRequest = function (accept) {
+  if(!accept) {
+    return false;
+  }
+  return (/^image/i).test(accept)
+    || (/^application\/pdf/).test(accept)
+    || (/^application\/octet-stream/).test(accept);
+};
+
+}).call(this,require("buffer").Buffer)
+
+},{"./helpers":4,"buffer":14,"js-yaml":19,"lodash-compat/lang/isObject":144,"lodash-compat/object/keys":149,"superagent":158}],6:[function(require,module,exports){
+'use strict';
+
+var SwaggerHttp = require('./http');
+var _ = {
+  isObject: require('lodash-compat/lang/isObject'),
+  cloneDeep: require('lodash-compat/lang/cloneDeep'),
+  isArray: require('lodash-compat/lang/isArray'),
+  isString: require('lodash-compat/lang/isString')
+};
+
+
+/**
+ * Resolves a spec's remote references
+ */
+var Resolver = module.exports = function () {
+  this.failedUrls = [];
+  this.resolverCache = {};
+  this.pendingUrls = {};
+};
+
+Resolver.prototype.processAllOf = function(root, name, definition, resolutionTable, unresolvedRefs, spec) {
+  var i, location, property;
+
+  definition['x-resolved-from'] = [ '#/definitions/' + name ];
+  var allOf = definition.allOf;
+  // the refs go first
+  allOf.sort(function(a, b) {
+    if(a.$ref && b.$ref) { return 0; }
+    else if(a.$ref) { return -1; }
+    else { return 1; }
+  });
+  for (i = 0; i < allOf.length; i++) {
+    property = allOf[i];
+    location = '/definitions/' + name + '/allOf';
+    this.resolveInline(root, spec, property, resolutionTable, unresolvedRefs, location);
+  }
+};
+
+Resolver.prototype.resolve = function (spec, arg1, arg2, arg3) {
+  this.spec = spec;
+  var root = arg1, callback = arg2, scope = arg3, opts = {}, location, i;
+  if(typeof arg1 === 'function') {
+    root = null;
+    callback = arg1;
+    scope = arg2;
+  }
+  var _root = root, modelName;
+  this.scope = (scope || this);
+  this.iteration = this.iteration || 0;
+
+  if(this.scope.options && this.scope.options.requestInterceptor){
+    opts.requestInterceptor = this.scope.options.requestInterceptor;
+  }
+
+  if(this.scope.options && this.scope.options.responseInterceptor){
+    opts.responseInterceptor = this.scope.options.responseInterceptor;
+  }
+
+  var name, path, property, propertyName, parameter, done, counter;
+  var processedCalls = 0, resolvedRefs = {}, unresolvedRefs = {};
+  var resolutionTable = []; // store objects for dereferencing
+
+  spec.definitions = spec.definitions || {};
+  // definitions
+  for (name in spec.definitions) {
+    var definition = spec.definitions[name];
+    if(definition.$ref) {
+      this.resolveInline(root, spec, definition, resolutionTable, unresolvedRefs, definition);
+    }
+    else {
+      for (propertyName in definition.properties) {
+        property = definition.properties[propertyName];
+        if (_.isArray(property.allOf)) {
+          this.processAllOf(root, name, property, resolutionTable, unresolvedRefs, spec);
+        }
+        else {
+          this.resolveTo(root, property, resolutionTable, '/definitions');
+        }
+      }
+
+      if (definition.allOf) {
+        this.processAllOf(root, name, definition, resolutionTable, unresolvedRefs, spec);
+      }
+    }
+  }
+
+  // shared parameters
+  spec.parameters = spec.parameters || {};
+  for(name in spec.parameters) {
+    parameter = spec.parameters[name];
+    if (parameter.in === 'body' && parameter.schema) {
+      if(_.isArray(parameter.schema.allOf)) {
+        // move to a definition
+        modelName = 'inline_model';
+        var _name = modelName;
+        done = false; counter = 0;
+        while(!done) {
+          if(typeof spec.definitions[_name] === 'undefined') {
+            done = true;
+            break;
+          }
+          _name = modelName + '_' + counter;
+          counter ++;
+        }
+        spec.definitions[_name] = { allOf: parameter.schema.allOf };
+        delete parameter.schema.allOf;
+        parameter.schema.$ref = '#/definitions/' + _name;
+        this.processAllOf(root, _name, spec.definitions[_name], resolutionTable, unresolvedRefs, spec);
+      }
+      else {
+        this.resolveTo(root, parameter.schema, resolutionTable, location);
+      }
+    }
+
+    if (parameter.$ref) {
+      // parameter reference
+      this.resolveInline(root, spec, parameter, resolutionTable, unresolvedRefs, parameter.$ref);
+    }
+  }
+
+  // operations
+  for (name in spec.paths) {
+    var method, operation, responseCode;
+    path = spec.paths[name];
+
+    if(typeof path === 'object') {
+      for (method in path) {
+        // operation reference
+        if (method === '$ref') {
+          // location = path[method];
+          location = '/paths' + name;
+          this.resolveInline(root, spec, path, resolutionTable, unresolvedRefs, location);
+        }
+        else {
+          operation = path[method];
+          var sharedParameters = path.parameters || [];
+          var parameters = operation.parameters || [];
+
+          sharedParameters.forEach(function(parameter) {
+            parameters.unshift(parameter);
+          });
+
+          if (method !== 'parameters' && _.isObject(operation)) {
+            operation.parameters = operation.parameters || parameters;
+          }
+
+          for (i in parameters) {
+            parameter = parameters[i];
+            location = '/paths' + name + '/' + method + '/parameters';
+
+            if (parameter.in === 'body' && parameter.schema) {
+              if (_.isArray(parameter.schema.allOf)) {
+                // move to a definition
+                modelName = 'inline_model';
+                name = modelName;
+                done = false;
+                counter = 0;
+                while (!done) {
+                  if (typeof spec.definitions[name] === 'undefined') {
+                    done = true;
+                    break;
+                  }
+                  name = modelName + '_' + counter;
+                  counter++;
+                }
+                spec.definitions[name] = {allOf: parameter.schema.allOf};
+                delete parameter.schema.allOf;
+                parameter.schema.$ref = '#/definitions/' + name;
+                this.processAllOf(root, name, spec.definitions[name], resolutionTable, unresolvedRefs, spec);
+              }
+              else {
+                this.resolveTo(root, parameter.schema, resolutionTable, location);
+              }
+            }
+
+            if (parameter.$ref) {
+              // parameter reference
+              this.resolveInline(root, spec, parameter, resolutionTable, unresolvedRefs, parameter.$ref);
+            }
+          }
+
+          for (responseCode in operation.responses) {
+            var response = operation.responses[responseCode];
+            location = '/paths' + name + '/' + method + '/responses/' + responseCode;
+
+            if (_.isObject(response)) {
+              if (response.$ref) {
+                // response reference
+                this.resolveInline(root, spec, response, resolutionTable, unresolvedRefs, location);
+              }
+              if (response.schema) {
+                var responseObj = response;
+                if (_.isArray(responseObj.schema.allOf)) {
+                  // move to a definition
+                  modelName = 'inline_model';
+                  name = modelName;
+                  done = false;
+                  counter = 0;
+                  while (!done) {
+                    if (typeof spec.definitions[name] === 'undefined') {
+                      done = true;
+                      break;
+                    }
+                    name = modelName + '_' + counter;
+                    counter++;
+                  }
+                  spec.definitions[name] = {allOf: responseObj.schema.allOf};
+                  delete responseObj.schema.allOf;
+                  delete responseObj.schema.type;
+                  responseObj.schema.$ref = '#/definitions/' + name;
+                  this.processAllOf(root, name, spec.definitions[name], resolutionTable, unresolvedRefs, spec);
+                }
+                else if ('array' === responseObj.schema.type) {
+                  if (responseObj.schema.items && responseObj.schema.items.$ref) {
+                    // response reference
+                    this.resolveInline(root, spec, responseObj.schema.items, resolutionTable, unresolvedRefs, location);
+                  }
+                }
+                else {
+                  this.resolveTo(root, response.schema, resolutionTable, location);
+                }
+              }
+            }
+          }
+        }
+      }
+      // clear them out to avoid multiple resolutions
+      path.parameters = [];
+    }
+  }
+
+  var expectedCalls = 0, toResolve = [];
+  // if the root is same as obj[i].root we can resolve locally
+  var all = resolutionTable;
+
+  var parts;
+  for(i = 0; i < all.length; i++) {
+    var a = all[i];
+    if(root === a.root) {
+      if(a.resolveAs === 'ref') {
+        // resolve any path walking
+        var joined = ((a.root || '') + '/' + a.key).split('/');
+        var normalized = [];
+        var url = '';
+        var k;
+
+        if(a.key.indexOf('../') >= 0) {
+          for(var j = 0; j < joined.length; j++) {
+            if(joined[j] === '..') {
+              normalized = normalized.slice(0, normalized.length-1);
+            }
+            else {
+              normalized.push(joined[j]);
+            }
+          }
+          for(k = 0; k < normalized.length; k ++) {
+            if(k > 0) {
+              url += '/';
+            }
+            url += normalized[k];
+          }
+          // we now have to remote resolve this because the path has changed
+          a.root = url;
+          toResolve.push(a);
+        }
+        else {
+          parts = a.key.split('#');
+          if(parts.length === 2) {
+            if(parts[0].indexOf('http:') === 0 || parts[0].indexOf('https:') === 0) {
+              a.root = parts[0];
+            }
+            location = parts[1].split('/');
+            var r;
+            var s = spec;
+            for(k = 0; k < location.length; k++) {
+              var part = location[k];
+              if(part !== '') {
+                s = s[part];
+                if(typeof s !== 'undefined') {
+                  r = s;
+                }
+                else {
+                  r = null;
+                  break;
+                }
+              }
+            }
+            if(r === null) {
+              // must resolve this too
+              toResolve.push(a);
+            }
+          }
+        }
+      }
+      else {
+        if (a.resolveAs === 'inline') {
+          if(a.key && a.key.indexOf('#') === -1 && a.key.charAt(0) !== '/') {
+            // handle relative schema
+            parts = a.root.split('/');
+            location = '';
+            for(i = 0; i < parts.length - 1; i++) {
+              location += parts[i] + '/';
+            }
+            location += a.key;
+            a.root = location;
+            a.location = '';
+          }
+          toResolve.push(a);
+        }
+      }
+    }
+    else {
+      toResolve.push(a);
+    }
+  }
+  expectedCalls = toResolve.length;
+
+  // resolve anything that is local
+
+  var lock = {};
+  for(var ii = 0; ii < toResolve.length; ii++) {
+    (function(item, spec, self, lock, ii) {
+      if(!item.root || item.root === root) {
+        // local resolve
+        self.resolveItem(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, item);
+        processedCalls += 1;
+
+        if(processedCalls === expectedCalls) {
+          self.finish(spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback, true);
+        }
+      }
+      else if(self.failedUrls.indexOf(item.root) === -1) {
+        var obj = {
+          useJQuery: false,  // TODO
+          url: item.root,
+          method: 'get',
+          headers: {
+            accept: self.scope.swaggerRequestHeaders || 'application/json'
+          },
+          on: {
+            error: function (error) {
+              processedCalls += 1;
+              console.log('failed url: ' + obj.url);
+              self.failedUrls.push(obj.url);
+              if (lock) {
+                delete lock[item.root];
+              }
+              unresolvedRefs[item.key] = {
+                root: item.root,
+                location: item.location
+              };
+
+              if (processedCalls === expectedCalls) {
+                self.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
+              }
+            },  // jshint ignore:line
+            response: function (response) {
+              var swagger = response.obj;
+              if (lock) {
+                delete lock[item.root];
+              }
+              if (self.resolverCache) {
+                self.resolverCache[item.root] = swagger;
+              }
+              self.resolveItem(swagger, item.root, resolutionTable, resolvedRefs, unresolvedRefs, item);
+              processedCalls += 1;
+
+              if (processedCalls === expectedCalls) {
+                self.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
+              }
+            }
+          } // jshint ignore:line
+        };
+
+        // apply timeout only when specified
+        if (scope && scope.fetchSpecTimeout) {
+          obj.timeout = scope.fetchSpecTimeout;
+        }
+
+        if (scope && scope.clientAuthorizations) {
+          scope.clientAuthorizations.apply(obj);
+        }
+
+        (function waitForUnlock() {
+          setTimeout(function() {
+            if (lock[obj.url]) {
+              waitForUnlock();
+            }
+            else {
+              var cached = self.resolverCache[obj.url];
+              if (_.isObject(cached)) {
+                obj.on.response({obj: cached});
+              }
+              else {
+                lock[obj.url] = true;
+                new SwaggerHttp().execute(obj, opts);
+              }
+            }
+          }, 0);
+        })();
+      }
+
+      else {
+        processedCalls += 1;
+        unresolvedRefs[item.key] = {
+          root: item.root,
+          location: item.location
+        };
+        if (processedCalls === expectedCalls) {
+          self.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
+        }
+      }
+    }(toResolve[ii], spec, this, lock, ii));
+  }
+
+  if (Object.keys(toResolve).length === 0) {
+    this.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
+  }
+};
+
+Resolver.prototype.resolveItem = function(spec, root, resolutionTable, resolvedRefs, unresolvedRefs, item) {
+  var path = item.location;
+  var location = spec, parts = path.split('/');
+  if(path !== '') {
+    for (var j = 0; j < parts.length; j++) {
+      var segment = parts[j];
+      if (segment.indexOf('~1') !== -1) {
+        segment = parts[j].replace(/~0/g, '~').replace(/~1/g, '/');
+        if (segment.charAt(0) !== '/') {
+          segment = '/' + segment;
+        }
+      }
+      if (typeof location === 'undefined' || location === null) {
+        break;
+      }
+      if (segment === '' && j === (parts.length - 1) && parts.length > 1) {
+        location = null;
+        break;
+      }
+      if (segment.length > 0) {
+        location = location[segment];
+      }
+    }
+  }
+  var resolved = item.key;
+  parts = item.key.split('/');
+  var resolvedName = parts[parts.length-1];
+
+  if(resolvedName.indexOf('#') >= 0) {
+    resolvedName = resolvedName.split('#')[1];
+  }
+
+  if (location !== null && typeof location !== 'undefined') {
+    resolvedRefs[resolved] = {
+      name: resolvedName,
+      obj: location,
+      key: item.key,
+      root: item.root
+    };
+  } else {
+    unresolvedRefs[resolved] = {
+      root: item.root,
+      location: item.location
+    };
+  }
+};
+
+Resolver.prototype.finish = function (spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback, localResolve) {
+  // walk resolution table and replace with resolved refs
+  var ref, abs;
+  for (ref in resolutionTable) {
+    var item = resolutionTable[ref];
+
+    var key = item.key;
+    var resolvedTo = resolvedRefs[key];
+    if (resolvedTo) {
+      spec.definitions = spec.definitions || {};
+      if (item.resolveAs === 'ref') {
+        if (localResolve !== true) {
+          // don't retain root for local definitions
+          for (key in resolvedTo.obj) {
+            abs = this.retainRoot(key, resolvedTo.obj[key], item.root);
+            resolvedTo.obj[key] = abs;
+          }
+        }
+        spec.definitions[resolvedTo.name] = resolvedTo.obj;
+        item.obj.$ref = '#/definitions/' + resolvedTo.name;
+      } else if (item.resolveAs === 'inline') {
+        var targetObj = item.obj;
+        targetObj['x-resolved-from'] = [ item.key ];
+        delete targetObj.$ref;
+
+        for (key in resolvedTo.obj) {
+          abs = resolvedTo.obj[key];
+
+          if (localResolve !== true) {
+            // don't retain root for local definitions
+            abs = this.retainRoot(key, resolvedTo.obj[key], item.root);
+          }
+          targetObj[key] = abs;
+        }
+      }
+    }
+  }
+  var existingUnresolved = this.countUnresolvedRefs(spec);
+
+  if(existingUnresolved === 0 || this.iteration > 5) {
+    this.resolveAllOf(spec.definitions);
+    this.resolverCache = null;
+    callback.call(this.scope, spec, unresolvedRefs);
+  }
+  else {
+    this.iteration += 1;
+    this.resolve(spec, root, callback, this.scope);
+  }
+};
+
+Resolver.prototype.countUnresolvedRefs = function(spec) {
+  var i;
+  var refs = this.getRefs(spec);
+  var keys = [];
+  var unresolvedKeys = [];
+  for(i in refs) {
+    if(i.indexOf('#') === 0) {
+      keys.push(i.substring(1));
+    }
+    else {
+      unresolvedKeys.push(i);
+    }
+  }
+
+  // verify possible keys
+  for (i = 0; i < keys.length; i++) {
+    var part = keys[i];
+    var parts = part.split('/');
+    var obj = spec;
+
+    for (var k = 0; k < parts.length; k++) {
+      var key = parts[k];
+      if(key !== '') {
+        obj = obj[key];
+        if(typeof obj === 'undefined') {
+          unresolvedKeys.push(part);
+          break;
+        }
+      }
+    }
+  }
+  return unresolvedKeys.length;
+};
+
+Resolver.prototype.getRefs = function(spec, obj) {
+  obj = obj || spec;
+  var output = {};
+  for(var key in obj) {
+    if (!obj.hasOwnProperty(key)) {
+      continue;
+    }
+    var item = obj[key];
+    if(key === '$ref' && typeof item === 'string') {
+      output[item] = null;
+    }
+    else if(_.isObject(item)) {
+      var o = this.getRefs(item);
+      for(var k in o) {
+        output[k] = null;
+      }
+    }
+  }
+  return output;
+};
+
+function splitUrl(url) {
+  var result = {};
+  var proto = /[a-z]+:\/\//i.exec(url);
+  if (proto) {
+    result.proto = proto[0].slice(0, -3);
+    url = url.slice(result.proto.length + 1);
+  }
+  if (url.slice(0, 2) === '//') {
+    result.domain = url.slice(2).split('/')[0];
+    url = url.slice(2 + result.domain.length);
+  }
+  var p = url.split('#');
+  if (p[0].length) {
+    result.path = p[0];
+  }
+  if (p.length > 1) {
+    result.fragment = p.slice(1).join('#');
+  }
+  return result;
+}
+
+function unsplitUrl(url) {
+  var result = url.path;
+  if (result === undefined) {
+    result = '';
+  }
+  if (url.fragment !== undefined) {
+    result += '#' + url.fragment;
+  }
+  if (url.domain !== undefined) {
+    if (result.slice(0, 1) === '/') {
+      result = result.slice(1);
+    }
+    result = '//' + url.domain + '/' + result;
+    if (url.proto !== undefined) {
+      result = url.proto + ':' + result;
+    }
+  }
+  return result;
+}
+
+function joinUrl(base, rel) {
+  var relsp = splitUrl(rel);
+  if (relsp.domain !== undefined) {
+    return rel;
+  }
+  var result = splitUrl(base);
+  if (relsp.path === undefined) {
+    // change only fragment part
+    result.fragment = relsp.fragment;
+  } else if (relsp.path.slice(0, 1) === '/') {
+    // relative to domain
+    result.path = relsp.path;
+    result.fragment = relsp.fragment;
+  } else {
+    // relative to path
+    var path = result.path === undefined ? [] : result.path.split('/');
+    var relpath = relsp.path.split('/');
+    if (path.length) {
+      path.pop();
+    }
+    while (relpath[0] === '..' || relpath[0] === '.') {
+      if (relpath[0] === '..') {
+        path.pop();
+      }
+      relpath.shift();
+    }
+    result.path = path.concat(relpath).join('/');
+    result.fragment = relsp.fragment;
+  }
+  return unsplitUrl(result);
+}
+
+Resolver.prototype.retainRoot = function(origKey, obj, root) {
+  // walk object and look for relative $refs
+  if(_.isObject(obj)) {
+    for(var key in obj) {
+      var item = obj[key];
+      if (key === '$ref' && typeof item === 'string') {
+        obj[key] = joinUrl(root, item);
+      }
+      else if (_.isObject(item)) {
+        this.retainRoot(key, item, root);
+      }
+    }
+  }
+  else if(_.isString(obj) && origKey === '$ref') {
+    obj = joinUrl(root, obj);
+  }
+  return obj;
+};
+
+/**
+ * immediately in-lines local refs, queues remote refs
+ * for inline resolution
+ */
+Resolver.prototype.resolveInline = function (root, spec, property, resolutionTable, unresolvedRefs, location) {
+  var key = property.$ref, ref = property.$ref, i, p, p2, rs;
+  var rootTrimmed = false;
+
+  root = root || ''; // Guard against .split. @fehguy, you'll need to check if this logic fits
+  // More imporantly is how do we gracefully handle relative urls, when provided just a 'spec', not a 'url' ?
+
+  if (ref) {
+    if(ref.indexOf('../') === 0) {
+      // reset root
+      p = ref.split('../');
+      p2 = root.split('/');
+      ref = '';
+      for(i = 0; i < p.length; i++) {
+        if(p[i] === '') {
+          p2 = p2.slice(0, p2.length-1);
+        }
+        else {
+          ref += p[i];
+        }
+      }
+      root = '';
+      for(i = 0; i < p2.length - 1; i++) {
+        if(i > 0) { root += '/'; }
+        root += p2[i];
+      }
+      rootTrimmed = true;
+    }
+    if(ref.indexOf('#') >= 0) {
+      if(ref.indexOf('/') === 0) {
+        rs = ref.split('#');
+        p  = root.split('//');
+        p2 = p[1].split('/');
+        root = p[0] + '//' + p2[0] + rs[0];
+        location = rs[1];
+      }
+      else {
+        rs = ref.split('#');
+        if(rs[0] !== '') {
+          p2 = root.split('/');
+          p2 = p2.slice(0, p2.length - 1);
+          if(!rootTrimmed) {
+            root = '';
+            for (var k = 0; k < p2.length; k++) {
+              if(k > 0) { root += '/'; }
+              root += p2[k];
+            }
+          }
+          root += '/' + ref.split('#')[0];
+        }
+        location = rs[1];
+      }
+    }
+    if (ref.indexOf('http:') === 0 || ref.indexOf('https:') === 0) {
+      if(ref.indexOf('#') >= 0) {
+        root = ref.split('#')[0];
+        location = ref.split('#')[1];
+      }
+      else {
+        root = ref;
+        location = '';
+      }
+      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
+    } else if (ref.indexOf('#') === 0) {
+      location = ref.split('#')[1];
+      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
+    } else if (ref.indexOf('/') === 0 && ref.indexOf('#') === -1) {
+      location = ref;
+      var matches = root.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);
+      if(matches) {
+        root = matches[0] + ref.substring(1);
+        location = '';
+      }
+      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
+    }
+    else {
+      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
+    }
+  }
+  else if (property.type === 'array') {
+    this.resolveTo(root, property.items, resolutionTable, location);
+  }
+};
+
+Resolver.prototype.resolveTo = function (root, property, resolutionTable, location) {
+  var sp, i;
+  var ref = property.$ref;
+  var lroot = root;
+  if ((typeof ref !== 'undefined') && (ref !== null)) {
+    if(ref.indexOf('#') >= 0) {
+      var parts = ref.split('#');
+
+      // #/definitions/foo
+      // foo.json#/bar
+      if(parts[0] && ref.indexOf('/') === 0) {
+
+      }
+      else if(parts[0] && (parts[0].indexOf('http:') === 0 || parts[0].indexOf('https:') === 0)) {
+        lroot = parts[0];
+        ref = parts[1];
+      }
+      else if(parts[0] && parts[0].length > 0) {
+        // relative file
+        sp = root.split('/');
+        lroot = '';
+        for(i = 0; i < sp.length - 1; i++) {
+          lroot += sp[i] + '/';
+        }
+        lroot += parts[0];
+      }
+      else {
+
+      }
+
+      location = parts[1];
+    }
+    else if (ref.indexOf('http:') === 0 || ref.indexOf('https:') === 0) {
+      lroot = ref;
+      location = '';
+    }
+    else {
+      // relative file
+      sp = root.split('/');
+      lroot = '';
+      for(i = 0; i < sp.length - 1; i++) {
+        lroot += sp[i] + '/';
+      }
+      lroot += ref;
+      location = '';
+    }
+    resolutionTable.push({
+      obj: property, resolveAs: 'ref', root: lroot, key: ref, location: location
+    });
+  } else if (property.type === 'array') {
+    var items = property.items;
+    this.resolveTo(root, items, resolutionTable, location);
+  } else {
+    if(property && (property.properties || property.additionalProperties)) {
+      var name = this.uniqueName('inline_model');
+      if (property.title) {
+        name = this.uniqueName(property.title);
+      }
+      delete property.title;
+      this.spec.definitions[name] = _.cloneDeep(property);
+      property.$ref = '#/definitions/' + name;
+      delete property.type;
+      delete property.properties;
+    }
+  }
+};
+
+Resolver.prototype.uniqueName = function(base) {
+  var name = base;
+  var count = 0;
+  while(true) {
+    if(!_.isObject(this.spec.definitions[name])) {
+      return name;
+    }
+    name = base + '_' + count;
+    count++;
+  }
+};
+
+Resolver.prototype.resolveAllOf = function(spec, obj, depth) {
+  depth = depth || 0;
+  obj = obj || spec;
+  var name;
+  for(var key in obj) {
+    if (!obj.hasOwnProperty(key)) {
+      continue;
+    }
+    var item = obj[key];
+    if(item === null) {
+      throw new TypeError('Swagger 2.0 does not support null types (' + obj + ').  See https://github.com/swagger-api/swagger-spec/issues/229.');
+    }
+    if(typeof item === 'object') {
+      this.resolveAllOf(spec, item, depth + 1);
+    }
+    if(item && typeof item.allOf !== 'undefined') {
+      var allOf = item.allOf;
+      if(_.isArray(allOf)) {
+        var output = _.cloneDeep(item);
+        delete output.allOf;
+
+        output['x-composed'] = true;
+        if (typeof item['x-resolved-from'] !== 'undefined') {
+          output['x-resolved-from'] = item['x-resolved-from'];
+        }
+
+        for(var i = 0; i < allOf.length; i++) {
+          var component = allOf[i];
+          var source = 'self';
+          if(typeof component['x-resolved-from'] !== 'undefined') {
+            source = component['x-resolved-from'][0];
+          }
+
+          for(var part in component) {
+            if(!output.hasOwnProperty(part)) {
+              output[part] = _.cloneDeep(component[part]);
+              if(part === 'properties') {
+                for(name in output[part]) {
+                  output[part][name]['x-resolved-from'] = source;
+                }
+              }
+            }
+            else {
+              if(part === 'properties') {
+                var properties = component[part];
+                for(name in properties) {
+                  output.properties[name] = _.cloneDeep(properties[name]);
+                  var resolvedFrom = properties[name]['x-resolved-from'];
+                  if (typeof resolvedFrom === 'undefined' || resolvedFrom === 'self') {
+                    resolvedFrom = source;
+                  }
+                  output.properties[name]['x-resolved-from'] = resolvedFrom;
+                }
+              }
+              else if(part === 'required') {
+                // merge & dedup the required array
+                var a = output.required.concat(component[part]);
+                for(var k = 0; k < a.length; ++k) {
+                  for(var j = k + 1; j < a.length; ++j) {
+                    if(a[k] === a[j]) { a.splice(j--, 1); }
+                  }
+                }
+                output.required = a;
+              }
+              else if(part === 'x-resolved-from') {
+                output['x-resolved-from'].push(source);
+              }
+              else {
+                // TODO: need to merge this property
+                // console.log('what to do with ' + part)
+              }
+            }
+          }
+        }
+        obj[key] = output;
+      }
+    }
+  }
+};
+
+},{"./http":5,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isString":146}],7:[function(require,module,exports){
+'use strict';
+
+var Helpers = require('./helpers');
+
+var _ = {
+  isPlainObject: require('lodash-compat/lang/isPlainObject'),
+  isUndefined: require('lodash-compat/lang/isUndefined'),
+  isArray: require('lodash-compat/lang/isArray'),
+  isObject: require('lodash-compat/lang/isObject'),
+  isEmpty: require('lodash-compat/lang/isEmpty'),
+  map: require('lodash-compat/collection/map'),
+  indexOf: require('lodash-compat/array/indexOf'),
+  cloneDeep: require('lodash-compat/lang/cloneDeep'),
+  keys: require('lodash-compat/object/keys'),
+  forEach: require('lodash-compat/collection/forEach')
+};
+
+var optionHtml = module.exports.optionHtml = function  (label, value) {
+  return '<tr><td class="optionName">' + label + ':</td><td>' + value + '</td></tr>';
+};
+
+module.exports.typeFromJsonSchema = function (type, format) {
+  var str;
+
+  if (type === 'integer' && format === 'int32') {
+    str = 'integer';
+  } else if (type === 'integer' && format === 'int64') {
+    str = 'long';
+  } else if (type === 'integer' && typeof format === 'undefined') {
+    str = 'long';
+  } else if (type === 'string' && format === 'date-time') {
+    str = 'date-time';
+  } else if (type === 'string' && format === 'date') {
+    str = 'date';
+  } else if (type === 'number' && format === 'float') {
+    str = 'float';
+  } else if (type === 'number' && format === 'double') {
+    str = 'double';
+  } else if (type === 'number' && typeof format === 'undefined') {
+    str = 'double';
+  } else if (type === 'boolean') {
+    str = 'boolean';
+  } else if (type === 'string') {
+    str = 'string';
+  }
+
+  return str;
+};
+
+var getStringSignature = module.exports.getStringSignature = function (obj, baseComponent) {
+  var str = '';
+
+  if (typeof obj.$ref !== 'undefined') {
+    str += Helpers.simpleRef(obj.$ref);
+  } else if (typeof obj.type === 'undefined') {
+    str += 'object';
+  } else if (obj.type === 'array') {
+    if (baseComponent) {
+      str += getStringSignature((obj.items || obj.$ref || {}));
+    } else {
+      str += 'Array[';
+      str += getStringSignature((obj.items || obj.$ref || {}));
+      str += ']';
+    }
+  } else if (obj.type === 'integer' && obj.format === 'int32') {
+    str += 'integer';
+  } else if (obj.type === 'integer' && obj.format === 'int64') {
+    str += 'long';
+  } else if (obj.type === 'integer' && typeof obj.format === 'undefined') {
+    str += 'long';
+  } else if (obj.type === 'string' && obj.format === 'date-time') {
+    str += 'date-time';
+  } else if (obj.type === 'string' && obj.format === 'date') {
+    str += 'date';
+  } else if (obj.type === 'string' && typeof obj.format === 'undefined') {
+    str += 'string';
+  } else if (obj.type === 'number' && obj.format === 'float') {
+    str += 'float';
+  } else if (obj.type === 'number' && obj.format === 'double') {
+    str += 'double';
+  } else if (obj.type === 'number' && typeof obj.format === 'undefined') {
+    str += 'double';
+  } else if (obj.type === 'boolean') {
+    str += 'boolean';
+  } else if (obj.$ref) {
+    str += Helpers.simpleRef(obj.$ref);
+  } else {
+    str += obj.type;
+  }
+
+  return str;
+};
+
+var schemaToJSON = module.exports.schemaToJSON = function (schema, models, modelsToIgnore, modelPropertyMacro) {
+  // Resolve the schema (Handle nested schemas)
+  schema = Helpers.resolveSchema(schema);
+
+  if(typeof modelPropertyMacro !== 'function') {
+    modelPropertyMacro = function(prop){
+      return (prop || {}).default;
+    };
+  }
+
+  modelsToIgnore= modelsToIgnore || {};
+
+  var type = schema.type || 'object';
+  var format = schema.format;
+  var model;
+  var output;
+
+  if (!_.isUndefined(schema.example)) {
+    output = schema.example;
+  } else if (_.isUndefined(schema.items) && _.isArray(schema.enum)) {
+    output = schema.enum[0];
+  }
+
+  if (_.isUndefined(output)) {
+    if (schema.$ref) {
+      model = models[Helpers.simpleRef(schema.$ref)];
+
+      if (!_.isUndefined(model)) {
+        if (_.isUndefined(modelsToIgnore[model.name])) {
+          modelsToIgnore[model.name] = model;
+          output = schemaToJSON(model.definition, models, modelsToIgnore, modelPropertyMacro);
+          delete modelsToIgnore[model.name];
+        } else {
+          if (model.type === 'array') {
+            output = [];
+          } else {
+            output = {};
+          }
+        }
+      }
+    } else if (!_.isUndefined(schema.default)) {
+      output = schema.default;
+    } else if (type === 'string') {
+      if (format === 'date-time') {
+        output = new Date().toISOString();
+      } else if (format === 'date') {
+        output = new Date().toISOString().split('T')[0];
+      } else {
+        output = 'string';
+      }
+    } else if (type === 'integer') {
+      output = 0;
+    } else if (type === 'number') {
+      output = 0.0;
+    } else if (type === 'boolean') {
+      output = true;
+    } else if (type === 'object') {
+      output = {};
+
+      _.forEach(schema.properties, function (property, name) {
+        var cProperty = _.cloneDeep(property);
+
+        // Allow macro to set the default value
+        cProperty.default = modelPropertyMacro(property);
+
+        output[name] = schemaToJSON(cProperty, models, modelsToIgnore, modelPropertyMacro);
+      });
+    } else if (type === 'array') {
+      output = [];
+
+      if (_.isArray(schema.items)) {
+        _.forEach(schema.items, function (item) {
+          output.push(schemaToJSON(item, models, modelsToIgnore, modelPropertyMacro));
+        });
+      } else if (_.isPlainObject(schema.items)) {
+        output.push(schemaToJSON(schema.items, models, modelsToIgnore, modelPropertyMacro));
+      } else if (_.isUndefined(schema.items)) {
+        output.push({});
+      } else {
+        Helpers.log('Array type\'s \'items\' property is not an array or an object, cannot process');
+      }
+    }
+  }
+
+  return output;
+};
+
+module.exports.schemaToHTML =function (name, schema, models, modelPropertyMacro) {
+  var strongOpen = '<span class="strong">';
+  var strongClose = '</span>';
+
+  // Allow for ignoring the 'name' argument.... shifting the rest
+  if(_.isObject(arguments[0])) {
+    name = void 0;
+    schema = arguments[0];
+    models = arguments[1];
+    modelPropertyMacro = arguments[2];
+  }
+
+  models = models || {};
+
+  // Resolve the schema (Handle nested schemas)
+  schema = Helpers.resolveSchema(schema);
+
+  // Return for empty object
+  if(_.isEmpty(schema)) {
+    return strongOpen + 'Empty' + strongClose;
+  }
+
+  // Dereference $ref from 'models'
+  if(typeof schema.$ref === 'string') {
+    name = Helpers.simpleRef(schema.$ref);
+    schema = models[name];
+    if(typeof schema === 'undefined')
+    {
+      return strongOpen + name + ' is not defined!' + strongClose;
+    }
+  }
+
+  if(typeof name !== 'string') {
+    name = schema.title || 'Inline Model';
+  }
+
+  // If we are a Model object... adjust accordingly
+  if(schema.definition) {
+    schema = schema.definition;
+  }
+
+  if(typeof modelPropertyMacro !== 'function') {
+    modelPropertyMacro = function(prop){
+      return (prop || {}).default;
+    };
+  }
+
+  var references = {};
+  var seenModels = [];
+  var inlineModels = 0;
+
+
+
+  // Generate current HTML
+  var html = processModel(schema, name);
+
+  // Generate references HTML
+  while (_.keys(references).length > 0) {
+    /* jshint ignore:start */
+    _.forEach(references, function (schema, name) {
+      var seenModel = _.indexOf(seenModels, name) > -1;
+
+      delete references[name];
+
+      if (!seenModel) {
+        seenModels.push(name);
+
+        html += '<br />' + processModel(schema, name);
+      }
+    });
+    /* jshint ignore:end */
+  }
+
+  return html;
+
+  /////////////////////////////////
+
+  function addReference(schema, name, skipRef) {
+    var modelName = name;
+    var model;
+
+    if (schema.$ref) {
+      modelName = schema.title || Helpers.simpleRef(schema.$ref);
+      model = models[modelName];
+    } else if (_.isUndefined(name)) {
+      modelName = schema.title || 'Inline Model ' + (++inlineModels);
+      model = {definition: schema};
+    }
+
+    if (skipRef !== true) {
+      references[modelName] = _.isUndefined(model) ? {} : model.definition;
+    }
+
+    return modelName;
+  }
+
+  function primitiveToHTML(schema) {
+    var html = '<span class="propType">';
+    var type = schema.type || 'object';
+
+    if (schema.$ref) {
+      html += addReference(schema, Helpers.simpleRef(schema.$ref));
+    } else if (type === 'object') {
+      if (!_.isUndefined(schema.properties)) {
+        html += addReference(schema);
+      } else {
+        html += 'object';
+      }
+    } else if (type === 'array') {
+      html += 'Array[';
+
+      if (_.isArray(schema.items)) {
+        html += _.map(schema.items, addReference).join(',');
+      } else if (_.isPlainObject(schema.items)) {
+        if (_.isUndefined(schema.items.$ref)) {
+          if (!_.isUndefined(schema.items.type) && _.indexOf(['array', 'object'], schema.items.type) === -1) {
+            html += schema.items.type;
+          } else {
+            html += addReference(schema.items);
+          }
+        } else {
+          html += addReference(schema.items, Helpers.simpleRef(schema.items.$ref));
+        }
+      } else {
+        Helpers.log('Array type\'s \'items\' schema is not an array or an object, cannot process');
+        html += 'object';
+      }
+
+      html += ']';
+    } else {
+      html += schema.type;
+    }
+
+    html += '</span>';
+
+    return html;
+  }
+
+  function primitiveToOptionsHTML(schema, html) {
+    var options = '';
+    var type = schema.type || 'object';
+    var isArray = type === 'array';
+
+    if (isArray) {
+      if (_.isPlainObject(schema.items) && !_.isUndefined(schema.items.type)) {
+        type = schema.items.type;
+      } else {
+        type = 'object';
+      }
+    }
+
+    if (!_.isUndefined(schema.default)) {
+      options += optionHtml('Default', schema.default);
+    }
+
+    switch (type) {
+    case 'string':
+      if (schema.minLength) {
+        options += optionHtml('Min. Length', schema.minLength);
+      }
+
+      if (schema.maxLength) {
+        options += optionHtml('Max. Length', schema.maxLength);
+      }
+
+      if (schema.pattern) {
+        options += optionHtml('Reg. Exp.', schema.pattern);
+      }
+      break;
+    case 'integer':
+    case 'number':
+      if (schema.minimum) {
+        options += optionHtml('Min. Value', schema.minimum);
+      }
+
+      if (schema.exclusiveMinimum) {
+        options += optionHtml('Exclusive Min.', 'true');
+      }
+
+      if (schema.maximum) {
+        options += optionHtml('Max. Value', schema.maximum);
+      }
+
+      if (schema.exclusiveMaximum) {
+        options += optionHtml('Exclusive Max.', 'true');
+      }
+
+      if (schema.multipleOf) {
+        options += optionHtml('Multiple Of', schema.multipleOf);
+      }
+
+      break;
+    }
+
+    if (isArray) {
+      if (schema.minItems) {
+        options += optionHtml('Min. Items', schema.minItems);
+      }
+
+      if (schema.maxItems) {
+        options += optionHtml('Max. Items', schema.maxItems);
+      }
+
+      if (schema.uniqueItems) {
+        options += optionHtml('Unique Items', 'true');
+      }
+
+      if (schema.collectionFormat) {
+        options += optionHtml('Coll. Format', schema.collectionFormat);
+      }
+    }
+
+    if (_.isUndefined(schema.items)) {
+      if (_.isArray(schema.enum)) {
+        var enumString;
+
+        if (type === 'number' || type === 'integer') {
+          enumString = schema.enum.join(', ');
+        } else {
+          enumString = '"' + schema.enum.join('", "') + '"';
+        }
+
+        options += optionHtml('Enum', enumString);
+      }
+    }
+
+    if (options.length > 0) {
+      html = '<span class="propWrap">' + html + '<table class="optionsWrapper"><tr><th colspan="2">' + type + '</th></tr>' + options + '</table></span>';
+    }
+
+    return html;
+  }
+
+  function processModel(schema, name) {
+    var type = schema.type || 'object';
+    var isArray = schema.type === 'array';
+    var html = strongOpen + name + ' ' + (isArray ? '[' : '{') + strongClose;
+
+    if (name) {
+      seenModels.push(name);
+    }
+
+    if (isArray) {
+      if (_.isArray(schema.items)) {
+        html += '<div>' + _.map(schema.items, function (item) {
+          var type = item.type || 'object';
+
+          if (_.isUndefined(item.$ref)) {
+            if (_.indexOf(['array', 'object'], type) > -1) {
+              if (type === 'object' && _.isUndefined(item.properties)) {
+                return 'object';
+              } else {
+                return addReference(item);
+              }
+            } else {
+              return primitiveToOptionsHTML(item, type);
+            }
+          } else {
+            return addReference(item, Helpers.simpleRef(item.$ref));
+          }
+        }).join(',</div><div>');
+      } else if (_.isPlainObject(schema.items)) {
+        if (_.isUndefined(schema.items.$ref)) {
+          if (_.indexOf(['array', 'object'], schema.items.type || 'object') > -1) {
+            if ((_.isUndefined(schema.items.type) || schema.items.type === 'object') && _.isUndefined(schema.items.properties)) {
+              html += '<div>object</div>';
+            } else {
+              html += '<div>' + addReference(schema.items) + '</div>';
+            }
+          } else {
+            html += '<div>' + primitiveToOptionsHTML(schema.items, schema.items.type) + '</div>';
+          }
+        } else {
+          html += '<div>' + addReference(schema.items, Helpers.simpleRef(schema.items.$ref)) + '</div>';
+        }
+      } else {
+        Helpers.log('Array type\'s \'items\' property is not an array or an object, cannot process');
+        html += '<div>object</div>';
+      }
+    } else {
+      if (schema.$ref) {
+        html += '<div>' + addReference(schema, name) + '</div>';
+      } else if (type === 'object') {
+        if (_.isPlainObject(schema.properties)) {
+          var contents = _.map(schema.properties, function (property, name) {
+            var propertyIsRequired = (_.indexOf(schema.required, name) >= 0);
+            var cProperty = _.cloneDeep(property);
+
+            var requiredClass = propertyIsRequired ? 'required' : '';
+            var html = '<span class="propName ' + requiredClass + '">' + name + '</span> (';
+            var model;
+            var propDescription;
+
+            // Allow macro to set the default value
+            cProperty.default = modelPropertyMacro(cProperty);
+
+            // Resolve the schema (Handle nested schemas)
+            cProperty = Helpers.resolveSchema(cProperty);
+
+            propDescription = property.description || cProperty.description;
+
+            // We need to handle property references to primitives (Issue 339)
+            if (!_.isUndefined(cProperty.$ref)) {
+              model = models[Helpers.simpleRef(cProperty.$ref)];
+
+              if (!_.isUndefined(model) && _.indexOf([undefined, 'array', 'object'], model.definition.type) === -1) {
+                // Use referenced schema
+                cProperty = Helpers.resolveSchema(model.definition);
+              }
+            }
+
+            html += primitiveToHTML(cProperty);
+
+            if(!propertyIsRequired) {
+              html += ', <span class="propOptKey">optional</span>';
+            }
+
+            if(property.readOnly) {
+                html += ', <span class="propReadOnly">read only</span>';
+            }
+
+            html += ')';
+
+            if (!_.isUndefined(propDescription)) {
+              html += ': ' + '<span class="propDesc">' + propDescription + '</span>';
+            }
+
+            if (cProperty.enum) {
+              html += ' = <span class="propVals">[\'' + cProperty.enum.join('\', \'') + '\']</span>';
+            }
+
+            return '<div' + (property.readOnly ? ' class="readOnly"' : '') + '>' + primitiveToOptionsHTML(cProperty, html);
+          }).join(',</div>');
+
+          if (contents) {
+            html += contents + '</div>';
+          }
+        }
+      } else {
+        html += '<div>' + primitiveToOptionsHTML(schema, type) + '</div>';
+      }
+    }
+
+    return html + strongOpen + (isArray ? ']' : '}') + strongClose;
+  }
+};
+},{"./helpers":4,"lodash-compat/array/indexOf":49,"lodash-compat/collection/forEach":54,"lodash-compat/collection/map":56,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isEmpty":141,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isPlainObject":145,"lodash-compat/lang/isUndefined":148,"lodash-compat/object/keys":149}],8:[function(require,module,exports){
+'use strict';
+
+var SwaggerHttp = require('./http');
+var _ = {
+  isObject: require('lodash-compat/lang/isObject')
+};
+
+var SwaggerSpecConverter = module.exports = function () {
+  this.errors = [];
+  this.warnings = [];
+  this.modelMap = {};
+};
+
+SwaggerSpecConverter.prototype.setDocumentationLocation = function (location) {
+  this.docLocation = location;
+};
+
+/**
+ * converts a resource listing OR api declaration
+ **/
+SwaggerSpecConverter.prototype.convert = function (obj, clientAuthorizations, opts, callback) {
+  // not a valid spec
+  if(!obj || !Array.isArray(obj.apis)) {
+    return this.finish(callback, null);
+  }
+  this.clientAuthorizations = clientAuthorizations;
+
+  // create a new swagger object to return
+  var swagger = { swagger: '2.0' };
+
+  swagger.originalVersion = obj.swaggerVersion;
+
+  // add the info
+  this.apiInfo(obj, swagger);
+
+  // add security definitions
+  this.securityDefinitions(obj, swagger);
+
+  // take basePath into account
+  if (obj.basePath) {
+    this.setDocumentationLocation(obj.basePath);
+  }
+
+  // see if this is a single-file swagger definition
+  var isSingleFileSwagger = false;
+  var i;
+  for(i = 0; i < obj.apis.length; i++) {
+    var api = obj.apis[i];
+    if(Array.isArray(api.operations)) {
+      isSingleFileSwagger = true;
+    }
+  }
+  if(isSingleFileSwagger) {
+    this.declaration(obj, swagger);
+    this.finish(callback, swagger);
+  }
+  else {
+    this.resourceListing(obj, swagger, opts, callback);
+  }
+};
+
+SwaggerSpecConverter.prototype.declaration = function(obj, swagger) {
+  var name, i, p, pos;
+  if(!obj.apis) {
+    return;
+  }
+
+  if (obj.basePath.indexOf('http://') === 0) {
+    p = obj.basePath.substring('http://'.length);
+    pos = p.indexOf('/');
+    if (pos > 0) {
+      swagger.host = p.substring(0, pos);
+      swagger.basePath = p.substring(pos);
+    }
+    else {
+      swagger.host = p;
+      swagger.basePath = '/';
+    }
+  } else if (obj.basePath.indexOf('https://') === 0) {
+    p = obj.basePath.substring('https://'.length);
+    pos = p.indexOf('/');
+    if (pos > 0) {
+      swagger.host = p.substring(0, pos);
+      swagger.basePath = p.substring(pos);
+    }
+    else {
+      swagger.host = p;
+      swagger.basePath = '/';
+    }
+  } else {
+    swagger.basePath = obj.basePath;
+  }
+
+  var resourceLevelAuth;
+  if(obj.authorizations) {
+    resourceLevelAuth = obj.authorizations;
+  }
+  if(obj.consumes) {
+    swagger.consumes = obj.consumes;
+  }
+  if(obj.produces) {
+    swagger.produces = obj.produces;
+  }
+
+  // build a mapping of id to name for 1.0 model resolutions
+  if(_.isObject(obj)) {
+    for(name in obj.models) {
+      var existingModel = obj.models[name];
+      var key = (existingModel.id || name);
+      this.modelMap[key] = name;
+    }
+  }
+
+  for(i = 0; i < obj.apis.length; i++) {
+    var api = obj.apis[i];
+    var path = api.path;
+    var operations = api.operations;
+    this.operations(path, obj.resourcePath, operations, resourceLevelAuth, swagger);
+  }
+
+  var models = obj.models || {};
+  this.models(models, swagger);
+};
+
+SwaggerSpecConverter.prototype.models = function(obj, swagger) {
+  if(!_.isObject(obj)) {
+    return;
+  }
+  var name;
+
+  swagger.definitions = swagger.definitions || {};
+  for(name in obj) {
+    var existingModel = obj[name];
+    var _required = [];
+    var schema = { properties: {}};
+    var propertyName;
+    for(propertyName in existingModel.properties) {
+      var existingProperty = existingModel.properties[propertyName];
+      var property = {};
+      this.dataType(existingProperty, property);
+      if(existingProperty.description) {
+        property.description = existingProperty.description;
+      }
+      if(existingProperty['enum']) {
+        property['enum'] = existingProperty['enum'];
+      }
+      if(typeof existingProperty.required === 'boolean' && existingProperty.required === true) {
+        _required.push(propertyName);
+      }
+      if(typeof existingProperty.required === 'string' && existingProperty.required === 'true') {
+        _required.push(propertyName);
+      }
+      schema.properties[propertyName] = property;
+    }
+    if(_required.length > 0) {
+      schema.required = _required;
+    } else {
+      schema.required = existingModel.required;
+    }
+    swagger.definitions[name] = schema;
+  }
+};
+
+SwaggerSpecConverter.prototype.extractTag = function(resourcePath) {
+  var pathString = resourcePath || 'default';
+  if(pathString.indexOf('http:') === 0 || pathString.indexOf('https:') === 0) {
+    pathString = pathString.split(['/']);
+    pathString = pathString[pathString.length -1].substring();
+  }
+  if(pathString.endsWith('.json')) {
+    pathString = pathString.substring(0, pathString.length - '.json'.length);
+  }
+  return pathString.replace('/','');
+};
+
+SwaggerSpecConverter.prototype.operations = function(path, resourcePath, obj, resourceLevelAuth, swagger) {
+  if(!Array.isArray(obj)) {
+    return;
+  }
+  var i;
+
+  if(!swagger.paths) {
+    swagger.paths = {};
+  }
+
+  var pathObj = swagger.paths[path] || {};
+  var tag = this.extractTag(resourcePath);
+  swagger.tags = swagger.tags || [];
+  var matched = false;
+  for(i = 0; i < swagger.tags.length; i++) {
+    var tagObject = swagger.tags[i];
+    if(tagObject.name === tag) {
+      matched = true;
+    }
+  }
+  if(!matched) {
+    swagger.tags.push({name: tag});
+  }
+
+  for(i = 0; i < obj.length; i++) {
+    var existingOperation = obj[i];
+    var method = (existingOperation.method || existingOperation.httpMethod).toLowerCase();
+    var operation = {tags: [tag]};
+    var existingAuthorizations = existingOperation.authorizations;
+
+    if(existingAuthorizations && Object.keys(existingAuthorizations).length === 0) {
+      existingAuthorizations = resourceLevelAuth;
+    }
+
+    if(typeof existingAuthorizations !== 'undefined') {
+      var scopesObject;
+      for(var key in existingAuthorizations) {
+        operation.security = operation.security || [];
+        var scopes = existingAuthorizations[key];
+        if(scopes) {
+          var securityScopes = [];
+          for(var j in scopes) {
+            securityScopes.push(scopes[j].scope);
+          }
+          scopesObject = {};
+          scopesObject[key] = securityScopes;
+          operation.security.push(scopesObject);
+        }
+        else {
+          scopesObject = {};
+          scopesObject[key] = [];
+          operation.security.push(scopesObject);
+        }
+      }
+    }
+
+    if(existingOperation.consumes) {
+      operation.consumes = existingOperation.consumes;
+    }
+    else if(swagger.consumes) {
+      operation.consumes = swagger.consumes;
+    }
+    if(existingOperation.produces) {
+      operation.produces = existingOperation.produces;
+    }
+    else if(swagger.produces) {
+      operation.produces = swagger.produces;
+    }
+    if(existingOperation.summary) {
+      operation.summary = existingOperation.summary;
+    }
+    if(existingOperation.notes) {
+      operation.description = existingOperation.notes;
+    }
+    if(existingOperation.nickname) {
+      operation.operationId = existingOperation.nickname;
+    }
+    if(existingOperation.deprecated) {
+      operation.deprecated = existingOperation.deprecated;
+    }
+
+    this.authorizations(existingAuthorizations, swagger);
+    this.parameters(operation, existingOperation.parameters, swagger);
+    this.responseMessages(operation, existingOperation, swagger);
+
+    pathObj[method] = operation;
+  }
+
+  swagger.paths[path] = pathObj;
+};
+
+SwaggerSpecConverter.prototype.responseMessages = function(operation, existingOperation) {
+  if(!_.isObject(existingOperation)) {
+    return;
+  }
+  // build default response from the operation (1.x)
+  var defaultResponse = {};
+  this.dataType(existingOperation, defaultResponse);
+  // TODO: look into the real problem of rendering responses in swagger-ui
+  // ....should reponseType have an implicit schema?
+  if(!defaultResponse.schema && defaultResponse.type) {
+    defaultResponse = {schema: defaultResponse};
+  }
+
+  operation.responses = operation.responses || {};
+
+  // grab from responseMessages (1.2)
+  var has200 = false;
+  if(Array.isArray(existingOperation.responseMessages)) {
+    var i;
+    var existingResponses = existingOperation.responseMessages;
+    for(i = 0; i < existingResponses.length; i++) {
+      var existingResponse = existingResponses[i];
+      var response = { description: existingResponse.message };
+      if(existingResponse.code === 200) {
+        has200 = true;
+      }
+      // Convert responseModel -> schema{$ref: responseModel}
+      if(existingResponse.responseModel) {
+        response.schema = {'$ref': '#/definitions/' + existingResponse.responseModel};
+      }
+      operation.responses['' + existingResponse.code] = response;
+    }
+  }
+
+  if(has200) {
+    operation.responses['default'] = defaultResponse;
+  }
+  else {
+    operation.responses['200'] = defaultResponse;
+  }
+};
+
+SwaggerSpecConverter.prototype.authorizations = function(obj) {
+  // TODO
+  if(!_.isObject(obj)) {
+    return;
+  }
+};
+
+SwaggerSpecConverter.prototype.parameters = function(operation, obj) {
+  if(!Array.isArray(obj)) {
+    return;
+  }
+  var i;
+  for(i = 0; i < obj.length; i++) {
+    var existingParameter = obj[i];
+    var parameter = {};
+    parameter.name = existingParameter.name;
+    parameter.description = existingParameter.description;
+    parameter.required = existingParameter.required;
+    parameter.in = existingParameter.paramType;
+
+    // per #168
+    if(parameter.in === 'body') {
+      parameter.name = 'body';
+    }
+    if(parameter.in === 'form') {
+      parameter.in = 'formData';
+    }
+
+    if(existingParameter.enum) {
+      parameter.enum = existingParameter.enum;
+    }
+
+    if(existingParameter.allowMultiple === true || existingParameter.allowMultiple === 'true') {
+      var innerType = {};
+      this.dataType(existingParameter, innerType);
+      parameter.type = 'array';
+      parameter.items = innerType;
+
+      if(existingParameter.allowableValues) {
+        var av = existingParameter.allowableValues;
+        if(av.valueType === 'LIST') {
+          parameter['enum'] = av.values;
+        }
+      }
+    }
+    else {
+      this.dataType(existingParameter, parameter);
+    }
+    if(typeof existingParameter.defaultValue !== 'undefined') {
+      parameter.default = existingParameter.defaultValue;
+    }
+
+    operation.parameters = operation.parameters || [];
+    operation.parameters.push(parameter);
+  }
+};
+
+SwaggerSpecConverter.prototype.dataType = function(source, target) {
+  if(!_.isObject(source)) {
+    return;
+  }
+
+  if(source.minimum) {
+    target.minimum = source.minimum;
+  }
+  if(source.maximum) {
+    target.maximum = source.maximum;
+  }
+  if (source.format) {
+    target.format = source.format;
+  }
+
+  // default can be 'false'
+  if(typeof source.defaultValue !== 'undefined') {
+    target.default = source.defaultValue;
+  }
+
+  var jsonSchemaType = this.toJsonSchema(source);
+  if(jsonSchemaType) {
+    target = target || {};
+    if(jsonSchemaType.type) {
+      target.type = jsonSchemaType.type;
+    }
+    if(jsonSchemaType.format) {
+      target.format = jsonSchemaType.format;
+    }
+    if(jsonSchemaType.$ref) {
+      target.schema = {$ref: jsonSchemaType.$ref};
+    }
+    if(jsonSchemaType.items) {
+      target.items = jsonSchemaType.items;
+    }
+  }
+};
+
+SwaggerSpecConverter.prototype.toJsonSchema = function(source) {
+  if(!source) {
+    return 'object';
+  }
+  var detectedType = (source.type || source.dataType || source.responseClass || '');
+  var lcType = detectedType.toLowerCase();
+  var format = (source.format || '').toLowerCase();
+
+  if(lcType.indexOf('list[') === 0) {
+    var innerType = detectedType.substring(5, detectedType.length - 1);
+    var jsonType = this.toJsonSchema({type: innerType});
+    return {type: 'array', items: jsonType};
+  } else if(lcType === 'int' || (lcType === 'integer' && format === 'int32')) {
+    {return {type: 'integer', format: 'int32'};}
+  } else if(lcType === 'long' || (lcType === 'integer' && format === 'int64')) {
+    {return {type: 'integer', format: 'int64'};}
+  } else if(lcType === 'integer') {
+    {return {type: 'integer', format: 'int64'};}
+  } else if(lcType === 'float' || (lcType === 'number' && format === 'float')) {
+    {return {type: 'number', format: 'float'};}
+  } else if(lcType === 'double' || (lcType === 'number' && format === 'double')) {
+    {return {type: 'number', format: 'double'};}
+  } else if((lcType === 'string' && format === 'date-time') || (lcType === 'date')) {
+    {return {type: 'string', format: 'date-time'};}
+  } else if(lcType === 'string') {
+    {return {type: 'string'};}
+  } else if(lcType === 'file') {
+    {return {type: 'file'};}
+  } else if(lcType === 'boolean') {
+    {return {type: 'boolean'};}
+  } else if(lcType === 'boolean') {
+    {return {type: 'boolean'};}
+  } else if(lcType === 'array' || lcType === 'list') {
+    if(source.items) {
+      var it = this.toJsonSchema(source.items);
+      return {type: 'array', items: it};
+    }
+    else {
+      return {type: 'array', items: {type: 'object'}};
+    }
+  } else if(source.$ref) {
+    return {$ref: this.modelMap[source.$ref] ? '#/definitions/' + this.modelMap[source.$ref] : source.$ref};
+  } else if(lcType === 'void' || lcType === '') {
+    {return {};}
+  } else if (this.modelMap[source.type]) {
+    // If this a model using `type` instead of `$ref`, that's fine.
+    return {$ref: '#/definitions/' + this.modelMap[source.type]};
+  } else {
+    // Unknown model type or 'object', pass it along.
+    return {type: source.type};
+  }
+};
+
+SwaggerSpecConverter.prototype.resourceListing = function(obj, swagger, opts, callback) {
+  var i;
+  var processedCount = 0;   // jshint ignore:line
+  var self = this;          // jshint ignore:line
+  var expectedCount = obj.apis.length;
+  var _swagger = swagger;   // jshint ignore:line
+  var _opts = {};
+
+  if(opts && opts.requestInterceptor){
+    _opts.requestInterceptor = opts.requestInterceptor;
+  }
+
+  if(opts && opts.responseInterceptor){
+    _opts.responseInterceptor = opts.responseInterceptor;
+  }
+
+  var swaggerRequestHeaders = 'application/json';
+
+  if(opts && opts.swaggerRequestHeaders) {
+    swaggerRequestHeaders = opts.swaggerRequestHeaders;
+  }
+
+  if(expectedCount === 0) {
+    this.finish(callback, swagger);
+  }
+
+  for(i = 0; i < expectedCount; i++) {
+    var api = obj.apis[i];
+    var path = api.path;
+    var absolutePath = this.getAbsolutePath(obj.swaggerVersion, this.docLocation, path);
+
+    if(api.description) {
+      swagger.tags = swagger.tags || [];
+      swagger.tags.push({
+        name : this.extractTag(api.path),
+        description : api.description || ''
+      });
+    }
+    var http = {
+      url: absolutePath,
+      headers: { accept: swaggerRequestHeaders },
+      on: {},
+      method: 'get',
+      timeout: opts.timeout
+    };
+    /* jshint ignore:start */
+    http.on.response = function(data) {
+      processedCount += 1;
+      var obj = data.obj;
+      if(obj) {
+        self.declaration(obj, _swagger);
+      }
+      if(processedCount === expectedCount) {
+        self.finish(callback, _swagger);
+      }
+    };
+    http.on.error = function(data) {
+      console.error(data);
+      processedCount += 1;
+      if(processedCount === expectedCount) {
+        self.finish(callback, _swagger);
+      }
+    };
+    /* jshint ignore:end */
+
+    if(this.clientAuthorizations && typeof this.clientAuthorizations.apply === 'function') {
+      this.clientAuthorizations.apply(http);
+    }
+
+    new SwaggerHttp().execute(http, _opts);
+  }
+};
+
+SwaggerSpecConverter.prototype.getAbsolutePath = function(version, docLocation, path)  {
+  if(version === '1.0') {
+    if(docLocation.endsWith('.json')) {
+      // get root path
+      var pos = docLocation.lastIndexOf('/');
+      if(pos > 0) {
+        docLocation = docLocation.substring(0, pos);
+      }
+    }
+  }
+
+  var location = docLocation;
+  if(path.indexOf('http:') === 0 || path.indexOf('https:') === 0) {
+    location = path;
+  }
+  else {
+    if(docLocation.endsWith('/')) {
+      location = docLocation.substring(0, docLocation.length - 1);
+    }
+    location += path;
+  }
+  location = location.replace('{format}', 'json');
+  return location;
+};
+
+SwaggerSpecConverter.prototype.securityDefinitions = function(obj, swagger) {
+  if(obj.authorizations) {
+    var name;
+    for(name in obj.authorizations) {
+      var isValid = false;
+      var securityDefinition = {
+        vendorExtensions: {}
+      };
+      var definition = obj.authorizations[name];
+      if(definition.type === 'apiKey') {
+        securityDefinition.type = 'apiKey';
+        securityDefinition.in = definition.passAs;
+        securityDefinition.name = definition.keyname || name;
+        isValid = true;
+      }
+      else if(definition.type === 'basicAuth') {
+        securityDefinition.type = 'basicAuth';
+        isValid = true;
+      }
+      else if(definition.type === 'oauth2') {
+        var existingScopes = definition.scopes || [];
+        var scopes = {};
+        var i;
+        for(i in existingScopes) {
+          var scope = existingScopes[i];
+          scopes[scope.scope] = scope.description;
+        }
+        securityDefinition.type = 'oauth2';
+        if(i > 0) {
+          securityDefinition.scopes = scopes;
+        }
+        if(definition.grantTypes) {
+          if(definition.grantTypes.implicit) {
+            var implicit = definition.grantTypes.implicit;
+            securityDefinition.flow = 'implicit';
+            securityDefinition.authorizationUrl = implicit.loginEndpoint;
+            isValid = true;
+          }
+          /* jshint ignore:start */
+          if(definition.grantTypes['authorization_code']) {
+            if(!securityDefinition.flow) {
+              // cannot set if flow is already defined
+              var authCode = definition.grantTypes['authorization_code'];
+              securityDefinition.flow = 'accessCode';
+              securityDefinition.authorizationUrl = authCode.tokenRequestEndpoint.url;
+              securityDefinition.tokenUrl = authCode.tokenEndpoint.url;
+              isValid = true;
+            }
+          }
+          /* jshint ignore:end */
+        }
+      }
+      if(isValid) {
+        swagger.securityDefinitions = swagger.securityDefinitions || {};
+        swagger.securityDefinitions[name] = securityDefinition;
+      }
+    }
+  }
+};
+
+SwaggerSpecConverter.prototype.apiInfo = function(obj, swagger) {
+  // info section
+  if(obj.info) {
+    var info = obj.info;
+    swagger.info = {};
+
+    if(info.contact) {
+      swagger.info.contact = {};
+      swagger.info.contact.email = info.contact;
+    }
+    if(info.description) {
+      swagger.info.description = info.description;
+    }
+    if(info.title) {
+      swagger.info.title = info.title;
+    }
+    if(info.termsOfServiceUrl) {
+      swagger.info.termsOfService = info.termsOfServiceUrl;
+    }
+    if(info.license || info.licenseUrl) {
+      swagger.license = {};
+      if(info.license) {
+        swagger.license.name = info.license;
+      }
+      if(info.licenseUrl) {
+        swagger.license.url = info.licenseUrl;
+      }
+    }
+  }
+  else {
+    this.warnings.push('missing info section');
+  }
+};
+
+SwaggerSpecConverter.prototype.finish = function (callback, obj) {
+  callback(obj);
+};
+
+},{"./http":5,"lodash-compat/lang/isObject":144}],9:[function(require,module,exports){
+'use strict';
+
+var log = require('../helpers').log;
+var _ = {
+  isPlainObject: require('lodash-compat/lang/isPlainObject'),
+  isString: require('lodash-compat/lang/isString'),
+};
+
+var SchemaMarkup = require('../schema-markup.js');
+var jsyaml = require('js-yaml');
+
+var Model = module.exports = function (name, definition, models, modelPropertyMacro) {
+  this.definition = definition || {};
+  this.isArray = definition.type === 'array';
+  this.models = models || {};
+  this.name = name || definition.title || 'Inline Model';
+  this.modelPropertyMacro = modelPropertyMacro || function (property) {
+    return property.default;
+  };
+
+  return this;
+};
+
+// Note!  This function will be removed in 2.2.x!
+Model.prototype.createJSONSample = Model.prototype.getSampleValue = function (modelsToIgnore) {
+  modelsToIgnore = modelsToIgnore || {};
+
+  modelsToIgnore[this.name] = this;
+
+  // Response support
+  if (this.examples && _.isPlainObject(this.examples) && this.examples['application/json']) {
+    this.definition.example = this.examples['application/json'];
+
+    if (_.isString(this.definition.example)) {
+      this.definition.example = jsyaml.safeLoad(this.definition.example);
+    }
+  } else if (!this.definition.example) {
+    this.definition.example = this.examples;
+  }
+
+  return SchemaMarkup.schemaToJSON(this.definition, this.models, modelsToIgnore, this.modelPropertyMacro);
+};
+
+Model.prototype.getMockSignature = function () {
+  return SchemaMarkup.schemaToHTML(this.name, this.definition, this.models, this.modelPropertyMacro);
+};
+
+},{"../helpers":4,"../schema-markup.js":7,"js-yaml":19,"lodash-compat/lang/isPlainObject":145,"lodash-compat/lang/isString":146}],10:[function(require,module,exports){
+'use strict';
+
+var _ = {
+  cloneDeep: require('lodash-compat/lang/cloneDeep'),
+  isUndefined: require('lodash-compat/lang/isUndefined'),
+  isEmpty: require('lodash-compat/lang/isEmpty'),
+  isObject: require('lodash-compat/lang/isObject')
+};
+var helpers = require('../helpers');
+var Model = require('./model');
+var SwaggerHttp = require('../http');
+var Q = require('q');
+
+var Operation = module.exports = function (parent, scheme, operationId, httpMethod, path, args, definitions, models, clientAuthorizations) {
+  var errors = [];
+
+  parent = parent || {};
+  args = args || {};
+
+  if(parent && parent.options) {
+    this.client = parent.options.client || null;
+    this.requestInterceptor = parent.options.requestInterceptor || null;
+    this.responseInterceptor = parent.options.responseInterceptor || null;
+    this.requestAgent = parent.options.requestAgent;
+  }
+  this.authorizations = args.security;
+  this.basePath = parent.basePath || '/';
+  this.clientAuthorizations = clientAuthorizations;
+  this.consumes = args.consumes || parent.consumes || ['application/json'];
+  this.produces = args.produces || parent.produces || ['application/json'];
+  this.deprecated = args.deprecated;
+  this.description = args.description;
+  this.host = parent.host;
+  this.method = (httpMethod || errors.push('Operation ' + operationId + ' is missing method.'));
+  this.models = models || {};
+  this.nickname = (operationId || errors.push('Operations must have a nickname.'));
+  this.operation = args;
+  this.operations = {};
+  this.parameters = args !== null ? (args.parameters || []) : {};
+  this.parent = parent;
+  this.path = (path || errors.push('Operation ' + this.nickname + ' is missing path.'));
+  this.responses = (args.responses || {});
+  this.scheme = scheme || parent.scheme || 'http';
+  this.schemes = args.schemes || parent.schemes;
+  this.security = args.security || parent.security;
+  this.summary = args.summary || '';
+  this.timeout = parent.timeout;
+  this.type = null;
+  this.useJQuery = parent.useJQuery;
+  this.jqueryAjaxCache = parent.jqueryAjaxCache;
+  this.enableCookies = parent.enableCookies;
+
+  var key;
+
+  if(!this.host) {
+    if(typeof window !== 'undefined') {
+      this.host = window.location.host;
+    }
+    else {
+      this.host = 'localhost';
+    }
+  }
+  this.parameterMacro = parent.parameterMacro || function (operation, parameter) {
+    return parameter.default;
+  };
+
+  this.inlineModels = [];
+
+  if(this.basePath !== '/' && this.basePath.slice(-1) === '/') {
+    this.basePath = this.basePath.slice(0, -1);
+  }
+
+  if (typeof this.deprecated === 'string') {
+    switch(this.deprecated.toLowerCase()) {
+      case 'true': case 'yes': case '1': {
+        this.deprecated = true;
+        break;
+      }
+
+      case 'false': case 'no': case '0': case null: {
+        this.deprecated = false;
+        break;
+      }
+
+      default: this.deprecated = Boolean(this.deprecated);
+    }
+  }
+
+  var i, model;
+
+  if (definitions) {
+    // add to global models
+    for (key in definitions) {
+      model = new Model(key, definitions[key], this.models, parent.modelPropertyMacro);
+
+      if (model) {
+        this.models[key] = model;
+      }
+    }
+  }
+  else {
+    definitions = {};
+  }
+
+  for (i = 0; i < this.parameters.length; i++) {
+    var d, param = this.parameters[i];
+
+    // Allow macro to set the default value
+    param.default = this.parameterMacro(this, param);
+
+    if (param.type === 'array') {
+      param.isList = true;
+      param.allowMultiple = true;
+    }
+
+    var innerType = this.getType(param);
+
+    if (innerType && innerType.toString().toLowerCase() === 'boolean') {
+      param.allowableValues = {};
+      param.isList = true;
+      param['enum'] = [true, false]; // use actual primitives
+    }
+
+    for(key in param) {
+      helpers.extractExtensions(key, param);
+    }
+    if(typeof param['x-example'] !== 'undefined') {
+      d = param['x-example'];
+      param.default = d;
+    }
+    if(param['x-examples']) {
+      d = param['x-examples'].default;
+      if(typeof d !== 'undefined') {
+        param.default = d;
+      }
+    }
+
+    var enumValues = param['enum'] || (param.items && param.items['enum']);
+
+    if (typeof enumValues !== 'undefined') {
+      var id;
+
+      param.allowableValues = {};
+      param.allowableValues.values = [];
+      param.allowableValues.descriptiveValues = [];
+
+      for (id = 0; id < enumValues.length; id++) {
+        var value = enumValues[id];
+        var isDefault = (value === param.default || value+'' === param.default);
+
+        param.allowableValues.values.push(value);
+        // Always have string for descriptive values....
+        param.allowableValues.descriptiveValues.push({value : value+'', isDefault: isDefault});
+      }
+    }
+
+    if (param.type === 'array') {
+      innerType = [innerType];
+
+      if (typeof param.allowableValues === 'undefined') {
+        // can't show as a list if no values to select from
+        delete param.isList;
+        delete param.allowMultiple;
+      }
+    }
+
+    param.modelSignature = {type: innerType, definitions: this.models};
+    param.signature = this.getModelSignature(innerType, this.models).toString();
+    param.sampleJSON = this.getModelSampleJSON(innerType, this.models);
+    param.responseClassSignature = param.signature;
+  }
+
+  var keyname, defaultResponseCode, response, responses = this.responses;
+
+  if (responses['200']) {
+    response = responses['200'];
+    defaultResponseCode = '200';
+  } else if (responses['201']) {
+    response = responses['201'];
+    defaultResponseCode = '201';
+  } else if (responses['202']) {
+    response = responses['202'];
+    defaultResponseCode = '202';
+  } else if (responses['203']) {
+    response = responses['203'];
+    defaultResponseCode = '203';
+  } else if (responses['204']) {
+    response = responses['204'];
+    defaultResponseCode = '204';
+  } else if (responses['205']) {
+    response = responses['205'];
+    defaultResponseCode = '205';
+  } else if (responses['206']) {
+    response = responses['206'];
+    defaultResponseCode = '206';
+  } else if (responses['default']) {
+    response = responses['default'];
+    defaultResponseCode = 'default';
+  }
+
+  for(keyname in responses) {
+    helpers.extractExtensions(keyname, responses);
+    if(typeof keyname === 'string' && keyname.indexOf('x-') === -1) {
+      var responseObject = responses[keyname];
+      if(typeof responseObject === 'object' && typeof responseObject.headers === 'object') {
+        var headers = responseObject.headers;
+        for(var headerName in headers) {
+          var header = headers[headerName];
+          if(typeof header === 'object') {
+            for(var headerKey in header) {
+              helpers.extractExtensions(headerKey, header);
+            }
+          }
+        }
+      }
+    }
+  }
+
+  if (response) {
+    for(keyname in response) {
+      helpers.extractExtensions(keyname, response);
+    }
+  }
+
+  if (response && response.schema) {
+    var resolvedModel = this.resolveModel(response.schema, definitions);
+    var successResponse;
+
+    delete responses[defaultResponseCode];
+
+    if (resolvedModel) {
+      this.successResponse = {};
+      successResponse = this.successResponse[defaultResponseCode] = resolvedModel;
+    } else if (!response.schema.type || response.schema.type === 'object' || response.schema.type === 'array') {
+      // Inline model
+      this.successResponse = {};
+      successResponse = this.successResponse[defaultResponseCode] = new Model(undefined, response.schema || {}, this.models, parent.modelPropertyMacro);
+    } else {
+      // Primitive
+      this.successResponse = {};
+      successResponse = this.successResponse[defaultResponseCode] = response.schema;
+    }
+
+    if (successResponse) {
+      successResponse.vendorExtensions = response.vendorExtensions;
+      // Attach response properties
+      if (response.description) {
+        successResponse.description = response.description;
+      }
+
+      if (response.examples) {
+        successResponse.examples = response.examples;
+      }
+
+      if (response.headers) {
+        successResponse.headers = response.headers;
+      }
+    }
+
+    this.type = response;
+  }
+
+  if (errors.length > 0) {
+    if (this.resource && this.resource.api && this.resource.api.fail) {
+      this.resource.api.fail(errors);
+    }
+  }
+
+  return this;
+};
+
+Operation.prototype.isDefaultArrayItemValue = function(value, param) {
+  if (param.default && Array.isArray(param.default)) {
+    return param.default.indexOf(value) !== -1;
+  }
+  return value === param.default;
+};
+
+Operation.prototype.getType = function (param) {
+  var type = param.type;
+  var format = param.format;
+  var isArray = false;
+  var str;
+
+  if (type === 'integer' && format === 'int32') {
+    str = 'integer';
+  } else if (type === 'integer' && format === 'int64') {
+    str = 'long';
+  } else if (type === 'integer') {
+    str = 'integer';
+  } else if (type === 'string') {
+    if (format === 'date-time') {
+      str = 'date-time';
+    } else if (format === 'date') {
+      str = 'date';
+    } else {
+      str = 'string';
+    }
+  } else if (type === 'number' && format === 'float') {
+    str = 'float';
+  } else if (type === 'number' && format === 'double') {
+    str = 'double';
+  } else if (type === 'number') {
+    str = 'double';
+  } else if (type === 'boolean') {
+    str = 'boolean';
+  } else if (type === 'array') {
+    isArray = true;
+
+    if (param.items) {
+      str = this.getType(param.items);
+    }
+  } else if (type === 'file') {
+    str = 'file';
+  }
+
+  if (param.$ref) {
+    str = helpers.simpleRef(param.$ref);
+  }
+
+  var schema = param.schema;
+
+  if (schema) {
+    var ref = schema.$ref;
+
+    if (ref) {
+      ref = helpers.simpleRef(ref);
+
+      if (isArray) {
+        return [ ref ];
+      } else {
+        return ref;
+      }
+    } else {
+      // If inline schema, we add it our interal hash -> which gives us it's ID (int)
+      if(schema.type === 'object') {
+        return this.addInlineModel(schema);
+      }
+      return this.getType(schema);
+    }
+  }
+  if (isArray) {
+    return [ str ];
+  } else {
+    return str;
+  }
+};
+
+/**
+ * adds an inline schema (model) to a hash, where we can ref it later
+ * @param {object} schema a schema
+ * @return {number} the ID of the schema being added, or null
+ **/
+Operation.prototype.addInlineModel = function (schema) {
+  var len = this.inlineModels.length;
+  var model = this.resolveModel(schema, {});
+  if(model) {
+    this.inlineModels.push(model);
+    return 'Inline Model '+len; // return string ref of the inline model (used with #getInlineModel)
+  }
+  return null; // report errors?
+};
+
+/**
+ * gets the internal ref to an inline model
+ * @param {string} inline_str a string reference to an inline model
+ * @return {Model} the model being referenced. Or null
+ **/
+Operation.prototype.getInlineModel = function(inlineStr) {
+  if(/^Inline Model \d+$/.test(inlineStr)) {
+    var id = parseInt(inlineStr.substr('Inline Model'.length).trim(),10); //
+    var model = this.inlineModels[id];
+    return model;
+  }
+  // I'm returning null here, should I rather throw an error?
+  return null;
+};
+
+Operation.prototype.resolveModel = function (schema, definitions) {
+  if (typeof schema.$ref !== 'undefined') {
+    var ref = schema.$ref;
+
+    if (ref.indexOf('#/definitions/') === 0) {
+      ref = ref.substring('#/definitions/'.length);
+    }
+
+    if (definitions[ref]) {
+      return new Model(ref, definitions[ref], this.models, this.parent.modelPropertyMacro);
+    }
+  // schema must at least be an object to get resolved to an inline Model
+  } else if (schema && typeof schema === 'object' &&
+            (schema.type === 'object' || _.isUndefined(schema.type))) {
+    return new Model(undefined, schema, this.models, this.parent.modelPropertyMacro);
+  }
+
+  return null;
+};
+
+Operation.prototype.help = function (dontPrint) {
+  var out = this.nickname + ': ' + this.summary + '\n';
+
+  for (var i = 0; i < this.parameters.length; i++) {
+    var param = this.parameters[i];
+    var typeInfo = param.signature;
+
+    out += '\n  * ' + param.name + ' (' + typeInfo + '): ' + param.description;
+  }
+
+  if (typeof dontPrint === 'undefined') {
+    helpers.log(out);
+  }
+
+  return out;
+};
+
+Operation.prototype.getModelSignature = function (type, definitions) {
+  var isPrimitive, listType;
+
+  if (type instanceof Array) {
+    listType = true;
+    type = type[0];
+  }
+
+  // Convert undefined to string of 'undefined'
+  if (typeof type === 'undefined') {
+    type = 'undefined';
+    isPrimitive = true;
+
+  } else if (definitions[type]){
+    // a model def exists?
+    type = definitions[type]; /* Model */
+    isPrimitive = false;
+
+  } else if (this.getInlineModel(type)) {
+    type = this.getInlineModel(type); /* Model */
+    isPrimitive = false;
+
+  } else {
+    // We default to primitive
+    isPrimitive = true;
+  }
+
+  if (isPrimitive) {
+    if (listType) {
+      return 'Array[' + type + ']';
+    } else {
+      return type.toString();
+    }
+  } else {
+    if (listType) {
+      return 'Array[' + type.getMockSignature() + ']';
+    } else {
+      return type.getMockSignature();
+    }
+  }
+};
+
+Operation.prototype.supportHeaderParams = function () {
+  return true;
+};
+
+Operation.prototype.supportedSubmitMethods = function () {
+  return this.parent.supportedSubmitMethods;
+};
+
+Operation.prototype.getHeaderParams = function (args) {
+  var headers = this.setContentTypes(args, {});
+  var headerParamsByLowerCase = {};
+
+  for (var i = 0; i < this.parameters.length; i++) {
+    var param = this.parameters[i];
+
+    if (param.in === 'header') {
+      headerParamsByLowerCase[param.name.toLowerCase()] = param;
+    }
+  }
+
+  for (var arg in args) {
+    var headerParam = headerParamsByLowerCase[arg.toLowerCase()];
+    if (typeof headerParam !== 'undefined') {
+      var value = args[arg];
+
+      if (Array.isArray(value)) {
+        value = value.toString();
+      }
+
+      headers[headerParam.name] = value;
+    }
+  }
+
+  return headers;
+};
+
+Operation.prototype.urlify = function (args, maskPasswords) {
+  var formParams = {};
+  var requestUrl = this.path.replace(/#.*/, ''); // remove URL fragment
+  var querystring = ''; // grab params from the args, build the querystring along the way
+
+  for (var i = 0; i < this.parameters.length; i++) {
+    var param = this.parameters[i];
+
+    if (typeof args[param.name] !== 'undefined') {
+      var isPassword;
+      if(param.type === 'string' && param.format === 'password' && maskPasswords) {
+        isPassword = true;
+      }
+
+      if (param.in === 'path') {
+        var reg = new RegExp('\{' + param.name + '\}', 'gi');
+        var value = args[param.name];
+
+        if (Array.isArray(value)) {
+          value = this.encodePathCollection(param.collectionFormat, param.name, value, isPassword);
+        } else {
+          value = this.encodePathParam(value, isPassword);
+        }
+
+        requestUrl = requestUrl.replace(reg, value);
+      } else if (param.in === 'query' && typeof args[param.name] !== 'undefined') {
+        if (querystring === '' && requestUrl.indexOf('?') < 0) {
+          querystring += '?';
+        } else {
+          querystring += '&';
+        }
+
+        if (typeof param.collectionFormat !== 'undefined') {
+          var qp = args[param.name];
+
+          if (Array.isArray(qp)) {
+            querystring += this.encodeQueryCollection(param.collectionFormat, param.name, qp, isPassword);
+          } else {
+            querystring += this.encodeQueryKey(param.name) + '=' + this.encodeQueryParam(args[param.name], isPassword);
+          }
+        } else {
+          querystring += this.encodeQueryKey(param.name) + '=' + this.encodeQueryParam(args[param.name], isPassword);
+        }
+      } else if (param.in === 'formData') {
+        formParams[param.name] = args[param.name];
+      }
+    }
+  }
+  var url = this.scheme + '://' + this.host;
+
+  if (this.basePath !== '/') {
+    url += this.basePath;
+  }
+  return url + requestUrl + querystring;
+};
+
+Operation.prototype.getMissingParams = function (args) {
+  var missingParams = []; // check required params, track the ones that are missing
+  var i;
+
+  for (i = 0; i < this.parameters.length; i++) {
+    var param = this.parameters[i];
+
+    if (param.required === true) {
+      if (typeof args[param.name] === 'undefined') {
+        missingParams = param.name;
+      }
+    }
+  }
+
+  return missingParams;
+};
+
+Operation.prototype.getBody = function (headers, args, opts) {
+  var formParams = {}, hasFormParams, param, body, key, value, hasBody = false;
+
+  // look at each param and put form params in an object
+  for (var i = 0; i < this.parameters.length; i++) {
+    param = this.parameters[i];
+    if (typeof args[param.name] !== 'undefined') {
+      var isPassword;
+      if(param.type === 'string' && param.format === 'password') {
+        isPassword = 'password';
+      }
+      if (param.in === 'body') {
+        body = args[param.name];
+      } else if (param.in === 'formData') {
+        formParams[param.name] = {
+          param: param,
+          value: args[param.name],
+          password: isPassword
+        };
+        hasFormParams = true;
+      }
+    }
+    else {
+      if(param.in === 'body') {
+        hasBody = true;
+      }
+    }
+  }
+
+  // if body is null and hasBody is true, AND a JSON body is requested, send empty {}
+  if(hasBody && typeof body === 'undefined') {
+    var contentType = headers['Content-Type'];
+    if(contentType && contentType.indexOf('application/json') === 0) {
+      body = '{}';
+    }
+  }
+
+  var isMultiPart = false;
+  if(headers['Content-Type'] && headers['Content-Type'].indexOf('multipart/form-data') >= 0) {
+    isMultiPart = true;
+  }
+
+  // handle form params
+  if (hasFormParams && !isMultiPart) {
+    var encoded = '';
+
+    for (key in formParams) {
+      param = formParams[key].param;
+      value = formParams[key].value;
+      var password;
+
+      if(opts && opts.maskPasswords) {
+        password = formParams[key].password;
+      }
+
+      if (typeof value !== 'undefined') {
+        if (Array.isArray(value)) {
+          if (encoded !== '') {
+            encoded += '&';
+          }
+          encoded += this.encodeQueryCollection(param.collectionFormat, key, value, password);
+        }
+        else {
+          if (encoded !== '') {
+            encoded += '&';
+          }
+
+          encoded += encodeURIComponent(key) + '=' + mask(encodeURIComponent(value), password);
+        }
+      }
+    }
+
+    body = encoded;
+  } else if (isMultiPart) {
+    var bodyParam;
+    if (typeof FormData === 'function') {
+      bodyParam = new FormData();
+
+      bodyParam.type = 'formData';
+
+      for (key in formParams) {
+        param = formParams[key].param;
+        value = args[key];
+
+        if (typeof value !== 'undefined') {
+          if({}.toString.apply(value) === '[object File]') {
+            bodyParam.append(key, value);
+          }
+          else if (value.type === 'file' && value.value) {
+            bodyParam.append(key, value.value);
+          } else {
+            if (Array.isArray(value)) {
+              if(param.collectionFormat === 'multi') {
+                bodyParam.delete(key);
+                for(var v in value) {
+                  bodyParam.append(key, value[v]);
+                }
+              }
+              else {
+                bodyParam.append(key, this.encodeQueryCollection(param.collectionFormat, key, value).split('=').slice(1).join('='));
+              }
+            }
+            else {
+              bodyParam.append(key, value);
+            }
+          }
+        }
+      }
+      body = bodyParam;
+    }
+    else {
+      bodyParam = {};
+      for (key in formParams) {
+        value = args[key];
+        if (Array.isArray(value)) {
+          var delimeter;
+          var format = param.collectionFormat || 'multi';
+          if(format === 'ssv') {
+            delimeter = ' ';
+          }
+          else if(format === 'pipes') {
+            delimeter = '|';
+          }
+          else if(format === 'tsv') {
+            delimeter = '\t';
+          }
+          else if(format === 'multi') {
+            bodyParam[key] = value;
+            break;
+          }
+          else {
+            delimeter = ',';
+          }
+          var data;
+          value.forEach(function(v) {
+            if(data) {
+              data += delimeter;
+            }
+            else {
+              data = '';
+            }
+            data += v;
+          });
+          bodyParam[key] = data;
+        }
+        else {
+          bodyParam[key] = value;
+        }
+      }
+      body = bodyParam;
+    }
+    headers['Content-Type'] = 'multipart/form-data';
+  }
+
+  return body;
+};
+
+/**
+ * gets sample response for a single operation
+ **/
+Operation.prototype.getModelSampleJSON = function (type, models) {
+  var listType, sampleJson, innerType;
+  models = models || {};
+
+  listType = (type instanceof Array);
+  innerType = listType ? type[0] : type;
+
+  if(models[innerType]) {
+    sampleJson = models[innerType].createJSONSample();
+  } else if (this.getInlineModel(innerType)){
+    sampleJson = this.getInlineModel(innerType).createJSONSample(); // may return null, if type isn't correct
+  }
+
+
+  if (sampleJson) {
+    sampleJson = listType ? [sampleJson] : sampleJson;
+
+    if (typeof sampleJson === 'string') {
+      return sampleJson;
+    } else if (_.isObject(sampleJson)) {
+      var t = sampleJson;
+
+      if (sampleJson instanceof Array && sampleJson.length > 0) {
+        t = sampleJson[0];
+      }
+
+      if (t.nodeName && typeof t === 'Node') {
+        var xmlString = new XMLSerializer().serializeToString(t);
+
+        return this.formatXml(xmlString);
+      } else {
+        return JSON.stringify(sampleJson, null, 2);
+      }
+    } else {
+      return sampleJson;
+    }
+  }
+};
+
+/**
+ * legacy binding
+ **/
+Operation.prototype.do = function (args, opts, callback, error, parent) {
+  return this.execute(args, opts, callback, error, parent);
+};
+
+/**
+ * executes an operation
+ **/
+Operation.prototype.execute = function (arg1, arg2, arg3, arg4, parent) {
+  var args = arg1 || {};
+  var opts = {}, success, error, deferred, timeout;
+
+  if (_.isObject(arg2)) {
+    opts = arg2;
+    success = arg3;
+    error = arg4;
+  }
+
+  timeout = typeof opts.timeout !== 'undefined' ? opts.timeout : this.timeout;
+
+  if(this.client) {
+    opts.client = this.client;
+  }
+
+  if(this.requestAgent) {
+    opts.requestAgent = this.requestAgent;
+  }
+
+  // add the request interceptor from parent, if none sent from client
+  if(!opts.requestInterceptor && this.requestInterceptor ) {
+    opts.requestInterceptor = this.requestInterceptor ;
+  }
+
+  if(!opts.responseInterceptor && this.responseInterceptor) {
+    opts.responseInterceptor = this.responseInterceptor;
+  }
+
+  if (typeof arg2 === 'function') {
+    success = arg2;
+    error = arg3;
+  }
+
+  if (this.parent.usePromise) {
+    deferred = Q.defer();
+  } else {
+    success = (success || this.parent.defaultSuccessCallback || helpers.log);
+    error = (error || this.parent.defaultErrorCallback || helpers.log);
+  }
+
+  if (typeof opts.useJQuery === 'undefined') {
+    opts.useJQuery = this.useJQuery;
+  }
+
+  if (typeof opts.jqueryAjaxCache === 'undefined') {
+    opts.jqueryAjaxCache = this.jqueryAjaxCache;
+  }
+
+  if (typeof opts.enableCookies === 'undefined') {
+    opts.enableCookies = this.enableCookies;
+  }
+
+  var missingParams = this.getMissingParams(args);
+
+  if (missingParams.length > 0) {
+    var message = 'missing required params: ' + missingParams;
+
+    helpers.fail(message);
+
+    if (this.parent.usePromise) {
+      deferred.reject(message);
+      return deferred.promise;
+    } else {
+      error(message, parent);
+      return {};
+    }
+  }
+
+  var allHeaders = this.getHeaderParams(args);
+  var contentTypeHeaders = this.setContentTypes(args, opts);
+  var headers = {}, attrname;
+
+  for (attrname in allHeaders) { headers[attrname] = allHeaders[attrname]; }
+  for (attrname in contentTypeHeaders) { headers[attrname] = contentTypeHeaders[attrname]; }
+
+  var body = this.getBody(contentTypeHeaders, args, opts);
+  var url = this.urlify(args, opts.maskPasswords);
+
+  if(url.indexOf('.{format}') > 0) {
+    if(headers) {
+      var format = headers.Accept || headers.accept;
+      if(format && format.indexOf('json') > 0) {
+        url = url.replace('.{format}', '.json');
+      }
+      else if(format && format.indexOf('xml') > 0) {
+        url = url.replace('.{format}', '.xml');
+      }
+    }
+  }
+
+  var obj = {
+    url: url,
+    method: this.method.toUpperCase(),
+    body: body,
+    enableCookies: opts.enableCookies,
+    useJQuery: opts.useJQuery,
+    jqueryAjaxCache: opts.jqueryAjaxCache,
+    deferred: deferred,
+    headers: headers,
+    clientAuthorizations: opts.clientAuthorizations,
+    operation: this,
+    connectionAgent: this.connectionAgent,
+    on: {
+      response: function (response) {
+        if (deferred) {
+          deferred.resolve(response);
+          return deferred.promise;
+        } else {
+          return success(response, parent);
+        }
+      },
+      error: function (response) {
+        if (deferred) {
+          deferred.reject(response);
+          return deferred.promise;
+        } else {
+          return error(response, parent);
+        }
+      }
+    }
+  };
+
+  if (timeout) {
+    obj.timeout = timeout;
+  }
+
+  this.clientAuthorizations.apply(obj, this.operation.security);
+  if (opts.mock === true) {
+    return obj;
+  } else {
+    return new SwaggerHttp().execute(obj, opts);
+  }
+};
+
+function itemByPriority(col, itemPriority) {
+
+  // No priorities? return first...
+  if(_.isEmpty(itemPriority)) {
+    return col[0];
+  }
+
+  for (var i = 0, len = itemPriority.length; i < len; i++) {
+    if(col.indexOf(itemPriority[i]) > -1) {
+      return itemPriority[i];
+    }
+  }
+
+  // Otherwise return first
+  return col[0];
+}
+
+Operation.prototype.setContentTypes = function (args, opts) {
+  // default type
+  var allDefinedParams = this.parameters;
+  var body;
+  var consumes = args.parameterContentType || itemByPriority(this.consumes, ['application/json', 'application/yaml']);
+  var accepts = opts.responseContentType || itemByPriority(this.produces, ['application/json', 'application/yaml']);
+  var definedFileParams = [];
+  var definedFormParams = [];
+  var headers = {};
+  var i;
+
+  // get params from the operation and set them in definedFileParams, definedFormParams, headers
+  for (i = 0; i < allDefinedParams.length; i++) {
+    var param = allDefinedParams[i];
+
+    if (param.in === 'formData') {
+      if (param.type === 'file') {
+        definedFileParams.push(param);
+      } else {
+        definedFormParams.push(param);
+      }
+    } else if (param.in === 'header' && opts) {
+      var key = param.name;
+      var headerValue = opts[param.name];
+
+      if (typeof opts[param.name] !== 'undefined') {
+        headers[key] = headerValue;
+      }
+    } else if (param.in === 'body' && typeof args[param.name] !== 'undefined') {
+      body = args[param.name];
+    }
+  }
+
+  // if there's a body, need to set the consumes header via requestContentType
+  var hasBody = body || definedFileParams.length || definedFormParams.length;
+  if (this.method === 'post' || this.method === 'put' || this.method === 'patch' ||
+      ((this.method === 'delete' || this.method === 'get') && hasBody)) {
+    if (opts.requestContentType) {
+      consumes = opts.requestContentType;
+    }
+    // if any form params, content type must be set
+    if (definedFormParams.length > 0) {
+      consumes = undefined;
+      if (opts.requestContentType) {             // override if set
+        consumes = opts.requestContentType;
+      } else if (definedFileParams.length > 0) { // if a file, must be multipart/form-data
+        consumes = 'multipart/form-data';
+      } else {
+        if (this.consumes && this.consumes.length > 0) {
+          // use the consumes setting
+          for(var c in this.consumes) {
+            var chk = this.consumes[c];
+            if(chk.indexOf('application/x-www-form-urlencoded') === 0 || chk.indexOf('multipart/form-data') === 0) {
+              consumes = chk;
+            }
+          }
+        }
+      }
+      if(typeof consumes === 'undefined') {
+        // default to x-www-from-urlencoded
+        consumes = 'application/x-www-form-urlencoded';
+      }
+    }
+  }
+  else {
+    consumes = null;
+  }
+
+  if (consumes && this.consumes) {
+    if (this.consumes.indexOf(consumes) === -1) {
+      helpers.log('server doesn\'t consume ' + consumes + ', try ' + JSON.stringify(this.consumes));
+    }
+  }
+
+  if (!this.matchesAccept(accepts)) {
+    helpers.log('server can\'t produce ' + accepts);
+  }
+
+  if ((consumes && body !== '') || (consumes === 'application/x-www-form-urlencoded')) {
+    headers['Content-Type'] = consumes;
+  }
+  else if(this.consumes && this.consumes.length > 0 && this.consumes[0] === 'application/x-www-form-urlencoded') {
+    headers['Content-Type'] = this.consumes[0];
+  }
+
+  if (accepts) {
+    headers.Accept = accepts;
+  }
+
+  return headers;
+};
+
+/**
+ * Returns true if the request accepts header matches anything in this.produces.
+ *  If this.produces contains * / *, ignore the accept header.
+ * @param {string=} accepts The client request accept header.
+ * @return {boolean}
+ */
+Operation.prototype.matchesAccept = function(accepts) {
+  // no accepts or produces, no problem!
+  if (!accepts || !this.produces) {
+    return true;
+  }
+  return this.produces.indexOf(accepts) !== -1 || this.produces.indexOf('*/*') !== -1;
+};
+
+Operation.prototype.asCurl = function (args1, args2) {
+  var opts = {mock: true, maskPasswords: true};
+  if (typeof args2 === 'object') {
+    for (var argKey in args2) {
+      opts[argKey] = args2[argKey];
+    }
+  }
+  var obj = this.execute(args1, opts);
+
+  this.clientAuthorizations.apply(obj, this.operation.security);
+
+  var results = [];
+
+  results.push('-X ' + this.method.toUpperCase());
+
+  if (typeof obj.headers !== 'undefined') {
+    var key;
+
+    for (key in obj.headers) {
+      var value = obj.headers[key];
+      if(typeof value === 'string'){
+        value = value.replace(/\'/g, '\\u0027');
+      }
+      results.push('--header \'' + key + ': ' + value + '\'');
+    }
+  }
+  var isFormData = false;
+  var isMultipart = false;
+
+  var type = obj.headers['Content-Type'];
+  if(type && type.indexOf('application/x-www-form-urlencoded') === 0) {
+    isFormData = true;
+  }
+  else if (type && type.indexOf('multipart/form-data') === 0) {
+    isFormData = true;
+    isMultipart = true;
+  }
+
+  if (obj.body) {
+    var body;
+    if (_.isObject(obj.body)) {
+      if(isMultipart) {
+        isMultipart = true;
+        // add the form data
+        for(var i = 0; i < this.parameters.length; i++) {
+          var parameter = this.parameters[i];
+          if(parameter.in === 'formData') {
+            if (!body) {
+              body = '';
+            }
+
+            var paramValue;
+            if(typeof FormData === 'function' && obj.body instanceof FormData) {
+              paramValue = obj.body.getAll(parameter.name);
+            }
+            else {
+              paramValue = obj.body[parameter.name];
+            }
+            if (paramValue) {
+              if (parameter.type === 'file') {
+                if(paramValue.name) {
+                  body += '-F ' + parameter.name + '=@"' + paramValue.name + '" ';
+                }
+              }
+              else {
+                if (Array.isArray(paramValue)) {
+                  if(parameter.collectionFormat === 'multi') {
+                    for(var v in paramValue) {
+                      body += '-F ' + this.encodeQueryKey(parameter.name) + '=' + mask(paramValue[v], parameter.format) + ' ';
+                    }
+                  }
+                  else {
+                    body += '-F ' + this.encodeQueryCollection(parameter.collectionFormat, parameter.name, mask(paramValue, parameter.format)) + ' ';
+                  }
+                } else {
+                  body += '-F ' + this.encodeQueryKey(parameter.name) + '=' + mask(paramValue, parameter.format) + ' ';
+                }
+              }
+            }
+          }
+        }
+      }
+      if(!body) {
+        body = JSON.stringify(obj.body);
+      }
+    } else {
+      body = obj.body;
+    }
+    // escape @ => %40, ' => %27
+    body = body.replace(/\'/g, '%27').replace(/\n/g, ' \\ \n ');
+
+    if(!isFormData) {
+      // escape & => %26
+      body = body.replace(/&/g, '%26');
+    }
+    if(isMultipart) {
+      results.push(body);
+    }
+    else {
+      results.push('-d \'' + body.replace(/@/g, '%40') + '\'');
+    }
+  }
+
+  return 'curl ' + (results.join(' ')) + ' \'' + obj.url + '\'';
+};
+
+Operation.prototype.encodePathCollection = function (type, name, value, maskPasswords) {
+  var encoded = '';
+  var i;
+  var separator = '';
+
+  if (type === 'ssv') {
+    separator = '%20';
+  } else if (type === 'tsv') {
+    separator = '%09';
+  } else if (type === 'pipes') {
+    separator = '|';
+  } else {
+    separator = ',';
+  }
+
+  for (i = 0; i < value.length; i++) {
+    if (i === 0) {
+      encoded = this.encodeQueryParam(value[i], maskPasswords);
+    } else {
+      encoded += separator + this.encodeQueryParam(value[i], maskPasswords);
+    }
+  }
+
+  return encoded;
+};
+
+Operation.prototype.encodeQueryCollection = function (type, name, value, maskPasswords) {
+  var encoded = '';
+  var i;
+
+  type = type || 'default';
+  if (type === 'default' || type === 'multi') {
+    for (i = 0; i < value.length; i++) {
+      if (i > 0) {encoded += '&';}
+
+      encoded += this.encodeQueryKey(name) + '=' + mask(this.encodeQueryParam(value[i]), maskPasswords);
+    }
+  } else {
+    var separator = '';
+
+    if (type === 'csv') {
+      separator = ',';
+    } else if (type === 'ssv') {
+      separator = '%20';
+    } else if (type === 'tsv') {
+      separator = '%09';
+    } else if (type === 'pipes') {
+      separator = '|';
+    } else if (type === 'brackets') {
+      for (i = 0; i < value.length; i++) {
+        if (i !== 0) {
+          encoded += '&';
+        }
+        encoded += this.encodeQueryKey(name) + '[]=' + mask(this.encodeQueryParam(value[i]), maskPasswords);
+      }
+    }
+
+    if (separator !== '') {
+      for (i = 0; i < value.length; i++) {
+        if (i === 0) {
+          encoded = this.encodeQueryKey(name) + '=' + this.encodeQueryParam(value[i]);
+        } else {
+          encoded += separator + this.encodeQueryParam(value[i]);
+        }
+      }
+    }
+  }
+
+  return encoded;
+};
+
+Operation.prototype.encodeQueryKey = function (arg) {
+  return encodeURIComponent(arg)
+      .replace('%5B','[').replace('%5D', ']').replace('%24', '$');
+};
+
+Operation.prototype.encodeQueryParam = function (arg, maskPasswords) {
+  if(maskPasswords) {
+    return "******";
+  }
+  return encodeURIComponent(arg);
+};
+
+/**
+ * TODO revisit, might not want to leave '/'
+ **/
+Operation.prototype.encodePathParam = function (pathParam, maskPasswords) {
+  return encodeURIComponent(pathParam, maskPasswords);
+};
+
+var mask = function(value, format) {
+  if(typeof format === 'string' && format === 'password') {
+    return '******';
+  }
+  return value;
+}
+},{"../helpers":4,"../http":5,"./model":9,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isEmpty":141,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isUndefined":148,"q":157}],11:[function(require,module,exports){
+'use strict';
+
+var OperationGroup = module.exports = function (tag, description, externalDocs, operation) {
+  this.description = description;
+  this.externalDocs = externalDocs;
+  this.name = tag;
+  this.operation = operation;
+  this.operationsArray = [];
+  this.path = tag;
+  this.tag = tag;
+};
+
+OperationGroup.prototype.sort = function () {
+
+};
+
+
+},{}],12:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+var queue = [];
+var draining = false;
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    draining = true;
+    var currentQueue;
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        var i = -1;
+        while (++i < len) {
+            currentQueue[i]();
+        }
+        len = queue.length;
+    }
+    draining = false;
+}
+process.nextTick = function (fun) {
+    queue.push(fun);
+    if (!draining) {
+        setTimeout(drainQueue, 0);
+    }
+};
+
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+// TODO(shtylman)
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],13:[function(require,module,exports){
+(function (Buffer){
+(function () {
+  "use strict";
+
+  function btoa(str) {
+    var buffer
+      ;
+
+    if (str instanceof Buffer) {
+      buffer = str;
+    } else {
+      buffer = new Buffer(str.toString(), 'binary');
+    }
+
+    return buffer.toString('base64');
+  }
+
+  module.exports = btoa;
+}());
+
+}).call(this,require("buffer").Buffer)
+
+},{"buffer":14}],14:[function(require,module,exports){
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+
+var base64 = require('base64-js')
+var ieee754 = require('ieee754')
+var isArray = require('is-array')
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+Buffer.poolSize = 8192 // not used by this implementation
+
+var rootParent = {}
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ *   === true    Use Uint8Array implementation (fastest)
+ *   === false   Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
+ *     on objects.
+ *
+ *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ *     incorrect length in some situations.
+
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = (function () {
+  function Bar () {}
+  try {
+    var arr = new Uint8Array(1)
+    arr.foo = function () { return 42 }
+    arr.constructor = Bar
+    return arr.foo() === 42 && // typed array instances can be augmented
+        arr.constructor === Bar && // constructor can be set
+        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+  } catch (e) {
+    return false
+  }
+})()
+
+function kMaxLength () {
+  return Buffer.TYPED_ARRAY_SUPPORT
+    ? 0x7fffffff
+    : 0x3fffffff
+}
+
+/**
+ * Class: Buffer
+ * =============
+ *
+ * The Buffer constructor returns instances of `Uint8Array` that are augmented
+ * with function properties for all the node `Buffer` API functions. We use
+ * `Uint8Array` so that square bracket notation works as expected -- it returns
+ * a single octet.
+ *
+ * By augmenting the instances, we can avoid modifying the `Uint8Array`
+ * prototype.
+ */
+function Buffer (arg) {
+  if (!(this instanceof Buffer)) {
+    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
+    if (arguments.length > 1) return new Buffer(arg, arguments[1])
+    return new Buffer(arg)
+  }
+
+  this.length = 0
+  this.parent = undefined
+
+  // Common case.
+  if (typeof arg === 'number') {
+    return fromNumber(this, arg)
+  }
+
+  // Slightly less common case.
+  if (typeof arg === 'string') {
+    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
+  }
+
+  // Unusual.
+  return fromObject(this, arg)
+}
+
+function fromNumber (that, length) {
+  that = allocate(that, length < 0 ? 0 : checked(length) | 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) {
+    for (var i = 0; i < length; i++) {
+      that[i] = 0
+    }
+  }
+  return that
+}
+
+function fromString (that, string, encoding) {
+  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
+
+  // Assumption: byteLength() return value is always < kMaxLength.
+  var length = byteLength(string, encoding) | 0
+  that = allocate(that, length)
+
+  that.write(string, encoding)
+  return that
+}
+
+function fromObject (that, object) {
+  if (Buffer.isBuffer(object)) return fromBuffer(that, object)
+
+  if (isArray(object)) return fromArray(that, object)
+
+  if (object == null) {
+    throw new TypeError('must start with number, buffer, array or string')
+  }
+
+  if (typeof ArrayBuffer !== 'undefined') {
+    if (object.buffer instanceof ArrayBuffer) {
+      return fromTypedArray(that, object)
+    }
+    if (object instanceof ArrayBuffer) {
+      return fromArrayBuffer(that, object)
+    }
+  }
+
+  if (object.length) return fromArrayLike(that, object)
+
+  return fromJsonObject(that, object)
+}
+
+function fromBuffer (that, buffer) {
+  var length = checked(buffer.length) | 0
+  that = allocate(that, length)
+  buffer.copy(that, 0, 0, length)
+  return that
+}
+
+function fromArray (that, array) {
+  var length = checked(array.length) | 0
+  that = allocate(that, length)
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+// Duplicate of fromArray() to keep fromArray() monomorphic.
+function fromTypedArray (that, array) {
+  var length = checked(array.length) | 0
+  that = allocate(that, length)
+  // Truncating the elements is probably not what people expect from typed
+  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
+  // of the old Buffer constructor.
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+function fromArrayBuffer (that, array) {
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    array.byteLength
+    that = Buffer._augment(new Uint8Array(array))
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    that = fromTypedArray(that, new Uint8Array(array))
+  }
+  return that
+}
+
+function fromArrayLike (that, array) {
+  var length = checked(array.length) | 0
+  that = allocate(that, length)
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
+// Returns a zero-length buffer for inputs that don't conform to the spec.
+function fromJsonObject (that, object) {
+  var array
+  var length = 0
+
+  if (object.type === 'Buffer' && isArray(object.data)) {
+    array = object.data
+    length = checked(array.length) | 0
+  }
+  that = allocate(that, length)
+
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+function allocate (that, length) {
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = Buffer._augment(new Uint8Array(length))
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    that.length = length
+    that._isBuffer = true
+  }
+
+  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
+  if (fromPool) that.parent = rootParent
+
+  return that
+}
+
+function checked (length) {
+  // Note: cannot use `length < kMaxLength` here because that fails when
+  // length is NaN (which is otherwise coerced to zero.)
+  if (length >= kMaxLength()) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
+  }
+  return length | 0
+}
+
+function SlowBuffer (subject, encoding) {
+  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
+
+  var buf = new Buffer(subject, encoding)
+  delete buf.parent
+  return buf
+}
+
+Buffer.isBuffer = function isBuffer (b) {
+  return !!(b != null && b._isBuffer)
+}
+
+Buffer.compare = function compare (a, b) {
+  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+    throw new TypeError('Arguments must be Buffers')
+  }
+
+  if (a === b) return 0
+
+  var x = a.length
+  var y = b.length
+
+  var i = 0
+  var len = Math.min(x, y)
+  while (i < len) {
+    if (a[i] !== b[i]) break
+
+    ++i
+  }
+
+  if (i !== len) {
+    x = a[i]
+    y = b[i]
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+Buffer.isEncoding = function isEncoding (encoding) {
+  switch (String(encoding).toLowerCase()) {
+    case 'hex':
+    case 'utf8':
+    case 'utf-8':
+    case 'ascii':
+    case 'binary':
+    case 'base64':
+    case 'raw':
+    case 'ucs2':
+    case 'ucs-2':
+    case 'utf16le':
+    case 'utf-16le':
+      return true
+    default:
+      return false
+  }
+}
+
+Buffer.concat = function concat (list, length) {
+  if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
+
+  if (list.length === 0) {
+    return new Buffer(0)
+  }
+
+  var i
+  if (length === undefined) {
+    length = 0
+    for (i = 0; i < list.length; i++) {
+      length += list[i].length
+    }
+  }
+
+  var buf = new Buffer(length)
+  var pos = 0
+  for (i = 0; i < list.length; i++) {
+    var item = list[i]
+    item.copy(buf, pos)
+    pos += item.length
+  }
+  return buf
+}
+
+function byteLength (string, encoding) {
+  if (typeof string !== 'string') string = '' + string
+
+  var len = string.length
+  if (len === 0) return 0
+
+  // Use a for loop to avoid recursion
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'ascii':
+      case 'binary':
+      // Deprecated
+      case 'raw':
+      case 'raws':
+        return len
+      case 'utf8':
+      case 'utf-8':
+        return utf8ToBytes(string).length
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return len * 2
+      case 'hex':
+        return len >>> 1
+      case 'base64':
+        return base64ToBytes(string).length
+      default:
+        if (loweredCase) return utf8ToBytes(string).length // assume utf8
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+Buffer.byteLength = byteLength
+
+// pre-set for values that may exist in the future
+Buffer.prototype.length = undefined
+Buffer.prototype.parent = undefined
+
+function slowToString (encoding, start, end) {
+  var loweredCase = false
+
+  start = start | 0
+  end = end === undefined || end === Infinity ? this.length : end | 0
+
+  if (!encoding) encoding = 'utf8'
+  if (start < 0) start = 0
+  if (end > this.length) end = this.length
+  if (end <= start) return ''
+
+  while (true) {
+    switch (encoding) {
+      case 'hex':
+        return hexSlice(this, start, end)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Slice(this, start, end)
+
+      case 'ascii':
+        return asciiSlice(this, start, end)
+
+      case 'binary':
+        return binarySlice(this, start, end)
+
+      case 'base64':
+        return base64Slice(this, start, end)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return utf16leSlice(this, start, end)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = (encoding + '').toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+Buffer.prototype.toString = function toString () {
+  var length = this.length | 0
+  if (length === 0) return ''
+  if (arguments.length === 0) return utf8Slice(this, 0, length)
+  return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.equals = function equals (b) {
+  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+  if (this === b) return true
+  return Buffer.compare(this, b) === 0
+}
+
+Buffer.prototype.inspect = function inspect () {
+  var str = ''
+  var max = exports.INSPECT_MAX_BYTES
+  if (this.length > 0) {
+    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+    if (this.length > max) str += ' ... '
+  }
+  return '<Buffer ' + str + '>'
+}
+
+Buffer.prototype.compare = function compare (b) {
+  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+  if (this === b) return 0
+  return Buffer.compare(this, b)
+}
+
+Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
+  if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
+  else if (byteOffset < -0x80000000) byteOffset = -0x80000000
+  byteOffset >>= 0
+
+  if (this.length === 0) return -1
... 16894 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.

[isis] 02/02: ISIS-1881 remove swagger-ui from simpleapp/helloworld and artifacts

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 48c78c877c8f4260a70001a8583718ce7224d299
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Feb 25 10:25:04 2018 +0100

    ISIS-1881 remove swagger-ui from simpleapp/helloworld and artifacts
    
    (swagger-ui is now bundled with metamodel)
---
 .../src/main/webapp/swagger-ui/00-README.md        |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   126 -
 .../src/main/webapp/swagger-ui/index.html          |   168 -
 .../src/main/webapp/swagger-ui/lang/ca.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/el.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/en.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/es.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/fr.js          |    54 -
 .../src/main/webapp/swagger-ui/lang/geo.js         |    56 -
 .../src/main/webapp/swagger-ui/lang/it.js          |    52 -
 .../src/main/webapp/swagger-ui/lang/ja.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../src/main/webapp/swagger-ui/lang/pl.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/pt.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/ru.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/tr.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../helloworld/src/main/webapp/swagger-ui/o2c.html |    20 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 .../webapp/src/main/webapp/swagger-ui/00-README.md |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   126 -
 .../webapp/src/main/webapp/swagger-ui/index.html   |   168 -
 .../webapp/src/main/webapp/swagger-ui/lang/ca.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/el.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/en.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/es.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/fr.js   |    54 -
 .../webapp/src/main/webapp/swagger-ui/lang/geo.js  |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/it.js   |    52 -
 .../webapp/src/main/webapp/swagger-ui/lang/ja.js   |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/pl.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/pt.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/ru.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/tr.js   |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../webapp/src/main/webapp/swagger-ui/o2c.html     |    20 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 .../src/main/webapp/swagger-ui/00-README.md        |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   129 -
 .../src/main/webapp/swagger-ui/index.html          |   171 -
 .../src/main/webapp/swagger-ui/lang/ca.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/el.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/en.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/es.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/fr.js          |    54 -
 .../src/main/webapp/swagger-ui/lang/geo.js         |    56 -
 .../src/main/webapp/swagger-ui/lang/it.js          |    52 -
 .../src/main/webapp/swagger-ui/lang/ja.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../src/main/webapp/swagger-ui/lang/pl.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/pt.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/ru.js          |    56 -
 .../src/main/webapp/swagger-ui/lang/tr.js          |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../src/main/webapp/swagger-ui/o2c.html            |    23 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 .../webapp/src/main/webapp/swagger-ui/00-README.md |     5 -
 .../src/main/webapp/swagger-ui/css/print.css       |     1 -
 .../src/main/webapp/swagger-ui/css/reset.css       |     1 -
 .../src/main/webapp/swagger-ui/css/screen.css      |     1 -
 .../src/main/webapp/swagger-ui/css/style.css       |     1 -
 .../src/main/webapp/swagger-ui/css/typography.css  |     0
 .../webapp/swagger-ui/fonts/DroidSans-Bold.ttf     |   Bin 42480 -> 0 bytes
 .../src/main/webapp/swagger-ui/fonts/DroidSans.ttf |   Bin 41028 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/collapse.gif |   Bin 69 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/expand.gif   |   Bin 73 -> 0 bytes
 .../webapp/swagger-ui/images/explorer_icons.png    |   Bin 5115 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-16x16.png     |   Bin 445 -> 0 bytes
 .../webapp/swagger-ui/images/favicon-32x32.png     |   Bin 1141 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/favicon.ico  |   Bin 5430 -> 0 bytes
 .../main/webapp/swagger-ui/images/logo_small.png   |   Bin 455 -> 0 bytes
 .../webapp/swagger-ui/images/pet_store_api.png     |   Bin 631 -> 0 bytes
 .../src/main/webapp/swagger-ui/images/throbber.gif |   Bin 9257 -> 0 bytes
 .../main/webapp/swagger-ui/images/wordnik_api.png  |   Bin 670 -> 0 bytes
 .../main/webapp/swagger-ui/index-ORIG-2.2.10.html  |   129 -
 .../webapp/src/main/webapp/swagger-ui/index.html   |   171 -
 .../webapp/src/main/webapp/swagger-ui/lang/ca.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/el.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/en.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/es.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/fr.js   |    54 -
 .../webapp/src/main/webapp/swagger-ui/lang/geo.js  |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/it.js   |    52 -
 .../webapp/src/main/webapp/swagger-ui/lang/ja.js   |    56 -
 .../src/main/webapp/swagger-ui/lang/ko-kr.js       |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/pl.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/pt.js   |    53 -
 .../webapp/src/main/webapp/swagger-ui/lang/ru.js   |    56 -
 .../webapp/src/main/webapp/swagger-ui/lang/tr.js   |    53 -
 .../src/main/webapp/swagger-ui/lang/translator.js  |    39 -
 .../src/main/webapp/swagger-ui/lang/zh-cn.js       |    56 -
 .../src/main/webapp/swagger-ui/lib/backbone-min.js |     1 -
 .../src/main/webapp/swagger-ui/lib/es5-shim.js     |     1 -
 .../main/webapp/swagger-ui/lib/handlebars-4.0.5.js |     3 -
 .../webapp/swagger-ui/lib/highlight.9.1.0.pack.js  |     1 -
 .../lib/highlight.9.1.0.pack_extended.js           |     1 -
 .../main/webapp/swagger-ui/lib/jquery-1.8.0.min.js |     3 -
 .../webapp/swagger-ui/lib/jquery.ba-bbq.min.js     |     1 -
 .../webapp/swagger-ui/lib/jquery.slideto.min.js    |     1 -
 .../webapp/swagger-ui/lib/jquery.wiggle.min.js     |     1 -
 .../src/main/webapp/swagger-ui/lib/js-yaml.min.js  |     2 -
 .../main/webapp/swagger-ui/lib/jsoneditor.min.js   |     5 -
 .../src/main/webapp/swagger-ui/lib/lodash.min.js   |     2 -
 .../src/main/webapp/swagger-ui/lib/marked.js       |     1 -
 .../swagger-ui/lib/object-assign-pollyfill.js      |     1 -
 .../webapp/swagger-ui/lib/sanitize-html.min.js     |     4 -
 .../main/webapp/swagger-ui/lib/swagger-oauth.js    |     1 -
 .../webapp/src/main/webapp/swagger-ui/o2c.html     |    23 -
 .../src/main/webapp/swagger-ui/swagger-ui.js       | 25344 -------------------
 .../src/main/webapp/swagger-ui/swagger-ui.min.js   |    15 -
 216 files changed, 106058 deletions(-)

diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/00-README.md b/example/application/helloworld/src/main/webapp/swagger-ui/00-README.md
deleted file mode 100644
index 31e1c18..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/00-README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# README
-
-This directory is almost exact copy of the [swagger-ui dist](https://github.com/swagger-api/swagger-ui/tree/v2.2.10/dist) directory.
-
-The only changes are some very simple alterations to the `index.html` for (a) Basic auth and (b) to allow different Swagger specification file to be used.
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/css/print.css b/example/application/helloworld/src/main/webapp/swagger-ui/css/print.css
deleted file mode 100644
index f2e8446..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/css/print.css
+++ /dev/null
@@ -1 +0,0 @@
-.swagger-section pre code{display:block;padding:.5em;background:#f0f0f0}.swagger-section pre .clojure .built_in,.swagger-section pre .lisp .title,.swagger-section pre .nginx .title,.swagger-section pre .subst,.swagger-section pre .tag .title,.swagger-section pre code{color:#000}.swagger-section pre .addition,.swagger-section pre .aggregate,.swagger-section pre .apache .cbracket,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .constant,.swagger- [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/css/reset.css b/example/application/helloworld/src/main/webapp/swagger-ui/css/reset.css
deleted file mode 100644
index 40dc830..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/css/reset.css
+++ /dev/null
@@ -1 +0,0 @@
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}a [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/css/screen.css b/example/application/helloworld/src/main/webapp/swagger-ui/css/screen.css
deleted file mode 100644
index 1f069f6..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/css/screen.css
+++ /dev/null
@@ -1 +0,0 @@
-.swagger-section pre code{display:block;padding:.5em;background:#f0f0f0}.swagger-section pre .clojure .built_in,.swagger-section pre .lisp .title,.swagger-section pre .nginx .title,.swagger-section pre .subst,.swagger-section pre .tag .title,.swagger-section pre code{color:#000}.swagger-section pre .addition,.swagger-section pre .aggregate,.swagger-section pre .apache .cbracket,.swagger-section pre .apache .tag,.swagger-section pre .bash .variable,.swagger-section pre .constant,.swagger- [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/css/style.css b/example/application/helloworld/src/main/webapp/swagger-ui/css/style.css
deleted file mode 100644
index 52907e4..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/css/style.css
+++ /dev/null
@@ -1 +0,0 @@
-.swagger-section #header a#logo{font-size:1.5em;font-weight:700;text-decoration:none;padding:20px 0 20px 40px}#text-head{font-size:80px;font-family:Roboto,sans-serif;color:#fff;float:right;margin-right:20%}.navbar-fixed-top .navbar-brand,.navbar-fixed-top .navbar-nav,.navbar-header{height:auto}.navbar-inverse{background-color:#000;border-color:#000}#navbar-brand{margin-left:20%}.navtext{font-size:10px}.h1,h1{font-size:60px}.navbar-default .navbar-header .navbar-brand{color:#a2dfee}.swagg [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/css/typography.css b/example/application/helloworld/src/main/webapp/swagger-ui/css/typography.css
deleted file mode 100644
index e69de29..0000000
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans-Bold.ttf b/example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans-Bold.ttf
deleted file mode 100644
index 036c4d1..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans-Bold.ttf and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans.ttf b/example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans.ttf
deleted file mode 100644
index e517a0c..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/fonts/DroidSans.ttf and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/collapse.gif b/example/application/helloworld/src/main/webapp/swagger-ui/images/collapse.gif
deleted file mode 100644
index 8843e8c..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/collapse.gif and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/expand.gif b/example/application/helloworld/src/main/webapp/swagger-ui/images/expand.gif
deleted file mode 100644
index 477bf13..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/expand.gif and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/explorer_icons.png b/example/application/helloworld/src/main/webapp/swagger-ui/images/explorer_icons.png
deleted file mode 100644
index be43b27..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/explorer_icons.png and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-16x16.png b/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-16x16.png
deleted file mode 100644
index 0f7e13b..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-16x16.png and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-32x32.png b/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-32x32.png
deleted file mode 100644
index b0a3352..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon-32x32.png and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon.ico b/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon.ico
deleted file mode 100644
index 8b60bcf..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/favicon.ico and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/logo_small.png b/example/application/helloworld/src/main/webapp/swagger-ui/images/logo_small.png
deleted file mode 100644
index ce3908e..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/logo_small.png and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/pet_store_api.png b/example/application/helloworld/src/main/webapp/swagger-ui/images/pet_store_api.png
deleted file mode 100644
index 1192ad8..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/pet_store_api.png and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/throbber.gif b/example/application/helloworld/src/main/webapp/swagger-ui/images/throbber.gif
deleted file mode 100644
index 0639388..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/throbber.gif and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/images/wordnik_api.png b/example/application/helloworld/src/main/webapp/swagger-ui/images/wordnik_api.png
deleted file mode 100644
index dc0ddab..0000000
Binary files a/example/application/helloworld/src/main/webapp/swagger-ui/images/wordnik_api.png and /dev/null differ
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/index-ORIG-2.2.10.html b/example/application/helloworld/src/main/webapp/swagger-ui/index-ORIG-2.2.10.html
deleted file mode 100644
index f3b324b..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/index-ORIG-2.2.10.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE html>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<html>
-<head>
-  <meta charset="UTF-8">
-  <meta http-equiv="x-ua-compatible" content="IE=edge">
-  <title>Swagger UI</title>
-  <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
-  <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
-  <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
-  <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
-  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
-  <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
-  <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
-
-  <script src='lib/object-assign-pollyfill.js' type='text/javascript'></script>
-  <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
-  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
-  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
-  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
-  <script src='lib/handlebars-4.0.5.js' type='text/javascript'></script>
-  <script src='lib/lodash.min.js' type='text/javascript'></script>
-  <script src='lib/backbone-min.js' type='text/javascript'></script>
-  <script src='swagger-ui.js' type='text/javascript'></script>
-  <script src='lib/highlight.9.1.0.pack.js' type='text/javascript'></script>
-  <script src='lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script>
-  <script src='lib/jsoneditor.min.js' type='text/javascript'></script>
-  <script src='lib/marked.js' type='text/javascript'></script>
-  <script src='lib/swagger-oauth.js' type='text/javascript'></script>
-
-  <!-- Some basic translations -->
-  <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
-  <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
-  <!-- <script src='lang/en.js' type='text/javascript'></script> -->
-
-  <script type="text/javascript">
-    $(function () {
-      var url = window.location.search.match(/url=([^&]+)/);
-      if (url && url.length > 1) {
-        url = decodeURIComponent(url[1]);
-      } else {
-        url = "http://petstore.swagger.io/v2/swagger.json";
-      }
-
-      hljs.configure({
-        highlightSizeThreshold: 5000
-      });
-
-      // Pre load translate...
-      if(window.SwaggerTranslator) {
-        window.SwaggerTranslator.translate();
-      }
-      window.swaggerUi = new SwaggerUi({
-        url: url,
-        dom_id: "swagger-ui-container",
-        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
-        onComplete: function(swaggerApi, swaggerUi){
-          if(typeof initOAuth == "function") {
-            initOAuth({
-              clientId: "your-client-id",
-              clientSecret: "your-client-secret-if-required",
-              realm: "your-realms",
-              appName: "your-app-name",
-              scopeSeparator: " ",
-              additionalQueryStringParams: {}
-            });
-          }
-
-          if(window.SwaggerTranslator) {
-            window.SwaggerTranslator.translate();
-          }
-        },
-        onFailure: function(data) {
-          log("Unable to Load SwaggerUI");
-        },
-        docExpansion: "none",
-        jsonEditor: false,
-        defaultModelRendering: 'schema',
-        showRequestHeaders: false,
-        showOperationIds: false
-      });
-
-      window.swaggerUi.load();
-
-      function log() {
-        if ('console' in window) {
-          console.log.apply(console, arguments);
-        }
-      }
-  });
-  </script>
-</head>
-
-<body class="swagger-section">
-<div id='header'>
-  <div class="swagger-ui-wrap">
-    <a id="logo" href="http://swagger.io"><img class="logo__img" alt="swagger" height="30" width="30" src="images/logo_small.png" /><span class="logo__title">swagger</span></a>
-    <form id='api_selector'>
-      <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
-      <div id='auth_container'></div>
-      <div class='input'><a id="explore" class="header__btn" href="#" data-sw-translate>Explore</a></div>
-    </form>
-  </div>
-</div>
-
-<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
-<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
-</body>
-</html>
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/index.html b/example/application/helloworld/src/main/webapp/swagger-ui/index.html
deleted file mode 100644
index bdc825f..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/index.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE html>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<html>
-<head>
-    <meta charset="UTF-8">
-    <meta http-equiv="x-ua-compatible" content="IE=edge">
-    <title>Swagger UI</title>
-    <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
-    <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
-    <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
-    <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
-    <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
-    <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
-    <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
-
-    <script src='lib/object-assign-pollyfill.js' type='text/javascript'></script>
-    <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
-    <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
-    <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
-    <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
-    <script src='lib/handlebars-4.0.5.js' type='text/javascript'></script>
-    <script src='lib/lodash.min.js' type='text/javascript'></script>
-    <script src='lib/backbone-min.js' type='text/javascript'></script>
-    <script src='swagger-ui.js' type='text/javascript'></script>
-    <script src='lib/highlight.9.1.0.pack.js' type='text/javascript'></script>
-    <script src='lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script>
-    <script src='lib/jsoneditor.min.js' type='text/javascript'></script>
-    <script src='lib/marked.js' type='text/javascript'></script>
-    <script src='lib/swagger-oauth.js' type='text/javascript'></script>
-
-    <!-- Some basic translations -->
-    <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
-    <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
-    <!-- <script src='lang/en.js' type='text/javascript'></script> -->
-
-    <script type="text/javascript">
-    $(function () {
-      var url = document.getElementById("input_baseUrl").selectedOptions[0].value;
-
-      hljs.configure({
-        highlightSizeThreshold: 5000
-      });
-
-      // Pre load translate...
-      if(window.SwaggerTranslator) {
-        window.SwaggerTranslator.translate();
-      }
-      window.swaggerUi = new SwaggerUi({
-        url: url,
-        dom_id: "swagger-ui-container",
-        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
-        onComplete: function(swaggerApi, swaggerUi){
-          if(typeof initOAuth == "function") {
-            initOAuth({
-              clientId: "your-client-id",
-              clientSecret: "your-client-secret-if-required",
-              realm: "your-realms",
-              appName: "your-app-name",
-              scopeSeparator: ",",
-              additionalQueryStringParams: {}
-            });
-          }
-
-          if(window.SwaggerTranslator) {
-            window.SwaggerTranslator.translate();
-          }
-
-          addApiKeyAuthorization();
-        },
-        onFailure: function(data) {
-          log("Unable to Load SwaggerUI");
-        },
-        docExpansion: "none",
-        jsonEditor: false,
-        defaultModelRendering: 'schema',
-        showRequestHeaders: false,
-        showOperationIds: false
-      });
-
-
-      // don't automatically load; let the developer change the user/password if required
-      // window.swaggerUi.load();
-
-      function log() {
-        if ('console' in window) {
-          console.log.apply(console, arguments);
-        }
-      }
-
-      function addApiKeyAuthorization(){
-        /*
-        var key = encodeURIComponent($('#input_apiKey')[0].value);
-        if(key && key.trim() != "") {
-            var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("api_key", key, "query");
-            window.swaggerUi.api.clientAuthorizations.add("api_key", apiKeyAuth);
-            log("added key " + key);
-        }
-        */
-        var username = document.getElementById("input_user").value;
-        var password = document.getElementById("input_pass").value;
-        if(username && username.trim() != "" && password && password.trim() != "") {
-          var auth = "Basic " + btoa(username + ":" + password);
-          var swaggerUi = window.swaggerUi;
-          window.swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", auth, "header"));
-        } else {
-          window.swaggerUi.api.clientAuthorizations.remove("key");
-        }
-      }
-
-      // if you have an apiKey you would like to pre-populate on the page for demonstration purposes...
-        /*
-      $('#input_apiKey').change(addApiKeyAuthorization);
-      */
-
-      /*
-        var apiKey = "myApiKeyXXXX123456789";
-        $('#input_apiKey').val(apiKey);
-      */
-      $('#input_user').val("sven");
-      $('#input_pass').val("pass");
-
-  });
-  </script>
-</head>
-
-<body class="swagger-section">
-<div id='header'>
-    <div class="swagger-ui-wrap">
-    <a id="logo" href="http://swagger.io"><img class="logo__img" alt="swagger" height="30" width="30" src="images/logo_small.png" /><span class="logo__title">swagger</span></a>
-        <form id='api_selector'>
-            <div class='input'>
-                <div class='input'><input placeholder="user" id="input_user" name="user" type="text" size="10"/></div>
-                <div class='input'><input placeholder="pass" id="input_pass" name="pass" type="password" size="10"/></div>
-
-                <select id="input_baseUrl" name="baseUrl" style="height: 26px;">
-                    <option id="private" label="private" value="../../restful/swagger/private"></option>
-                    <option id="public" label="public" value="../../restful/swagger/public"></option>
-                    <option id="prototyping" label="prototyping" value="../../restful/swagger/prototyping"></option>
-                </select>
-            </div>
-            <div class='input' style="display:none;"><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
-            <div class='input'><a id="explore" href="#" data-sw-translate>Reload</a></div>
-        </form>
-
-    </div>
-</div>
-
-<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
-<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
-</body>
-</html>
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ca.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/ca.js
deleted file mode 100644
index f8c815a..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ca.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Advertència: Obsolet",
-    "Implementation Notes":"Notes d'implementació",
-    "Response Class":"Classe de la Resposta",
-    "Status":"Estatus",
-    "Parameters":"Paràmetres",
-    "Parameter":"Paràmetre",
-    "Value":"Valor",
-    "Description":"Descripció",
-    "Parameter Type":"Tipus del Paràmetre",
-    "Data Type":"Tipus de la Dada",
-    "Response Messages":"Missatges de la Resposta",
-    "HTTP Status Code":"Codi d'Estatus HTTP",
-    "Reason":"Raó",
-    "Response Model":"Model de la Resposta",
-    "Request URL":"URL de la Sol·licitud",
-    "Response Body":"Cos de la Resposta",
-    "Response Code":"Codi de la Resposta",
-    "Response Headers":"Capçaleres de la Resposta",
-    "Hide Response":"Amagar Resposta",
-    "Try it out!":"Prova-ho!",
-    "Show/Hide":"Mostrar/Amagar",
-    "List Operations":"Llista Operacions",
-    "Expand Operations":"Expandir Operacions",
-    "Raw":"Cru",
-    "can't parse JSON.  Raw result":"no puc analitzar el JSON.  Resultat cru",
-    "Example Value":"Valor d'Exemple",
-    "Model Schema":"Esquema del Model",
-    "Model":"Model",
-    "apply":"aplicar",
-    "Username":"Nom d'usuari",
-    "Password":"Contrasenya",
-    "Terms of service":"Termes del servei",
-    "Created by":"Creat per",
-    "See more at":"Veure més en",
-    "Contact the developer":"Contactar amb el desenvolupador",
-    "api version":"versió de la api",
-    "Response Content Type":"Tipus de Contingut de la Resposta",
-    "fetching resource":"recollint recurs",
-    "fetching resource list":"recollins llista de recursos",
-    "Explore":"Explorant",
-    "Show Swagger Petstore Example Apis":"Mostrar API d'Exemple Swagger Petstore",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"No es pot llegir del servidor. Potser no teniu la configuració de control d'accés apropiada.",
-    "Please specify the protocol for":"Si us plau, especifiqueu el protocol per a",
-    "Can't read swagger JSON from":"No es pot llegir el JSON de swagger des de",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Finalitzada la càrrega del recurs informatiu. Renderitzant Swagger UI",
-    "Unable to read api":"No es pot llegir l'api",
-    "from path":"des de la ruta",
-    "server returned":"el servidor ha retornat"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/el.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/el.js
deleted file mode 100644
index fcd1ffd..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/el.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Προειδοποίηση: Έχει αποσυρθεί",
-    "Implementation Notes":"Σημειώσεις Υλοποίησης",
-    "Response Class":"Απόκριση",
-    "Status":"Κατάσταση",
-    "Parameters":"Παράμετροι",
-    "Parameter":"Παράμετρος",
-    "Value":"Τιμή",
-    "Description":"Περιγραφή",
-    "Parameter Type":"Τύπος Παραμέτρου",
-    "Data Type":"Τύπος Δεδομένων",
-    "Response Messages":"Μηνύματα Απόκρισης",
-    "HTTP Status Code":"Κωδικός Κατάστασης HTTP",
-    "Reason":"Αιτιολογία",
-    "Response Model":"Μοντέλο Απόκρισης",
-    "Request URL":"URL Αιτήματος",
-    "Response Body":"Σώμα Απόκρισης",
-    "Response Code":"Κωδικός Απόκρισης",
-    "Response Headers":"Επικεφαλίδες Απόκρισης",
-    "Hide Response":"Απόκρυψη Απόκρισης",
-    "Headers":"Επικεφαλίδες",
-    "Try it out!":"Δοκιμάστε το!",
-    "Show/Hide":"Εμφάνιση/Απόκρυψη",
-    "List Operations":"Λίστα Λειτουργιών",
-    "Expand Operations":"Ανάπτυξη Λειτουργιών",
-    "Raw":"Ακατέργαστο",
-    "can't parse JSON.  Raw result":"αδυναμία ανάλυσης JSON.  Ακατέργαστο αποτέλεσμα",
-    "Example Value":"Παράδειγμα Τιμής",
-    "Model Schema":"Σχήμα Μοντέλου",
-    "Model":"Μοντέλο",
-    "Click to set as parameter value":"Πατήστε για να θέσετε τιμή παραμέτρου",
-    "apply":"εφαρμογή",
-    "Username":"Όνομα χρήση",
-    "Password":"Κωδικός πρόσβασης",
-    "Terms of service":"Όροι χρήσης",
-    "Created by":"Δημιουργήθηκε από",
-    "See more at":"Δείτε περισσότερα στο",
-    "Contact the developer":"Επικοινωνήστε με τον προγραμματιστή",
-    "api version":"έκδοση api",
-    "Response Content Type":"Τύπος Περιεχομένου Απόκρισης",
-    "Parameter content type:":"Τύπος περιεχομένου παραμέτρου:",
-    "fetching resource":"παραλαβή πόρου",
-    "fetching resource list":"παραλαβή λίστας πόρων",
-    "Explore":"Εξερεύνηση",
-    "Show Swagger Petstore Example Apis":"Εμφάνιση Api Δειγμάτων Petstore του Swagger",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Αδυναμία ανάγνωσης από τον εξυπηρετητή.  Μπορεί να μην έχει κατάλληλες ρυθμίσεις για access-control-origin.",
-    "Please specify the protocol for":"Παρακαλώ προσδιορίστε το πρωτόκολλο για",
-    "Can't read swagger JSON from":"Αδυναμία ανάγνωσης swagger JSON από",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Ολοκλήρωση Φόρτωσης Πληροφορικών Πόρου. Παρουσίαση Swagger UI",
-    "Unable to read api":"Αδυναμία ανάγνωσης api",
-    "from path":"από το μονοπάτι",
-    "server returned":"ο εξυπηρετηρής επέστρεψε"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/en.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/en.js
deleted file mode 100644
index 9183136..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/en.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Warning: Deprecated",
-    "Implementation Notes":"Implementation Notes",
-    "Response Class":"Response Class",
-    "Status":"Status",
-    "Parameters":"Parameters",
-    "Parameter":"Parameter",
-    "Value":"Value",
-    "Description":"Description",
-    "Parameter Type":"Parameter Type",
-    "Data Type":"Data Type",
-    "Response Messages":"Response Messages",
-    "HTTP Status Code":"HTTP Status Code",
-    "Reason":"Reason",
-    "Response Model":"Response Model",
-    "Request URL":"Request URL",
-    "Response Body":"Response Body",
-    "Response Code":"Response Code",
-    "Response Headers":"Response Headers",
-    "Hide Response":"Hide Response",
-    "Headers":"Headers",
-    "Try it out!":"Try it out!",
-    "Show/Hide":"Show/Hide",
-    "List Operations":"List Operations",
-    "Expand Operations":"Expand Operations",
-    "Raw":"Raw",
-    "can't parse JSON.  Raw result":"can't parse JSON.  Raw result",
-    "Example Value":"Example Value",
-    "Model Schema":"Model Schema",
-    "Model":"Model",
-    "Click to set as parameter value":"Click to set as parameter value",
-    "apply":"apply",
-    "Username":"Username",
-    "Password":"Password",
-    "Terms of service":"Terms of service",
-    "Created by":"Created by",
-    "See more at":"See more at",
-    "Contact the developer":"Contact the developer",
-    "api version":"api version",
-    "Response Content Type":"Response Content Type",
-    "Parameter content type:":"Parameter content type:",
-    "fetching resource":"fetching resource",
-    "fetching resource list":"fetching resource list",
-    "Explore":"Explore",
-    "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Can't read from server.  It may not have the appropriate access-control-origin settings.",
-    "Please specify the protocol for":"Please specify the protocol for",
-    "Can't read swagger JSON from":"Can't read swagger JSON from",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI",
-    "Unable to read api":"Unable to read api",
-    "from path":"from path",
-    "server returned":"server returned"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/es.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/es.js
deleted file mode 100644
index 13fa015..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/es.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Advertencia: Obsoleto",
-    "Implementation Notes":"Notas de implementación",
-    "Response Class":"Clase de la Respuesta",
-    "Status":"Status",
-    "Parameters":"Parámetros",
-    "Parameter":"Parámetro",
-    "Value":"Valor",
-    "Description":"Descripción",
-    "Parameter Type":"Tipo del Parámetro",
-    "Data Type":"Tipo del Dato",
-    "Response Messages":"Mensajes de la Respuesta",
-    "HTTP Status Code":"Código de Status HTTP",
-    "Reason":"Razón",
-    "Response Model":"Modelo de la Respuesta",
-    "Request URL":"URL de la Solicitud",
-    "Response Body":"Cuerpo de la Respuesta",
-    "Response Code":"Código de la Respuesta",
-    "Response Headers":"Encabezados de la Respuesta",
-    "Hide Response":"Ocultar Respuesta",
-    "Try it out!":"Pruébalo!",
-    "Show/Hide":"Mostrar/Ocultar",
-    "List Operations":"Listar Operaciones",
-    "Expand Operations":"Expandir Operaciones",
-    "Raw":"Crudo",
-    "can't parse JSON.  Raw result":"no puede parsear el JSON.  Resultado crudo",
-    "Example Value":"Valor de Ejemplo",
-    "Model Schema":"Esquema del Modelo",
-    "Model":"Modelo",
-    "apply":"aplicar",
-    "Username":"Nombre de usuario",
-    "Password":"Contraseña",
-    "Terms of service":"Términos de Servicio",
-    "Created by":"Creado por",
-    "See more at":"Ver más en",
-    "Contact the developer":"Contactar al desarrollador",
-    "api version":"versión de la api",
-    "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta",
-    "fetching resource":"buscando recurso",
-    "fetching resource list":"buscando lista del recurso",
-    "Explore":"Explorar",
-    "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.",
-    "Please specify the protocol for":"Por favor, especificar el protocola para",
-    "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI",
-    "Unable to read api":"No se puede leer la api",
-    "from path":"desde ruta",
-    "server returned":"el servidor retornó"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/fr.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/fr.js
deleted file mode 100644
index 388dff1..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/fr.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Avertissement : Obsolète",
-    "Implementation Notes":"Notes d'implémentation",
-    "Response Class":"Classe de la réponse",
-    "Status":"Statut",
-    "Parameters":"Paramètres",
-    "Parameter":"Paramètre",
-    "Value":"Valeur",
-    "Description":"Description",
-    "Parameter Type":"Type du paramètre",
-    "Data Type":"Type de données",
-    "Response Messages":"Messages de la réponse",
-    "HTTP Status Code":"Code de statut HTTP",
-    "Reason":"Raison",
-    "Response Model":"Modèle de réponse",
-    "Request URL":"URL appelée",
-    "Response Body":"Corps de la réponse",
-    "Response Code":"Code de la réponse",
-    "Response Headers":"En-têtes de la réponse",
-    "Hide Response":"Cacher la réponse",
-    "Headers":"En-têtes",
-    "Try it out!":"Testez !",
-    "Show/Hide":"Afficher/Masquer",
-    "List Operations":"Liste des opérations",
-    "Expand Operations":"Développer les opérations",
-    "Raw":"Brut",
-    "can't parse JSON.  Raw result":"impossible de décoder le JSON.  Résultat brut",
-    "Example Value":"Exemple la valeur",
-    "Model Schema":"Définition du modèle",
-    "Model":"Modèle",
-    "apply":"appliquer",
-    "Username":"Nom d'utilisateur",
-    "Password":"Mot de passe",
-    "Terms of service":"Conditions de service",
-    "Created by":"Créé par",
-    "See more at":"Voir plus sur",
-    "Contact the developer":"Contacter le développeur",
-    "api version":"version de l'api",
-    "Response Content Type":"Content Type de la réponse",
-    "fetching resource":"récupération de la ressource",
-    "fetching resource list":"récupération de la liste de ressources",
-    "Explore":"Explorer",
-    "Show Swagger Petstore Example Apis":"Montrer les Apis de l'exemple Petstore de Swagger",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.",
-    "Please specify the protocol for":"Veuillez spécifier un protocole pour",
-    "Can't read swagger JSON from":"Impossible de lire le JSON swagger à partir de",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Chargement des informations terminé. Affichage de Swagger UI",
-    "Unable to read api":"Impossible de lire l'api",
-    "from path":"à partir du chemin",
-    "server returned":"réponse du serveur"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/geo.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/geo.js
deleted file mode 100644
index 609c20d..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/geo.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"ყურადღება: აღარ გამოიყენება",
-    "Implementation Notes":"იმპლემენტაციის აღწერა",
-    "Response Class":"რესპონს კლასი",
-    "Status":"სტატუსი",
-    "Parameters":"პარამეტრები",
-    "Parameter":"პარამეტრი",
-    "Value":"მნიშვნელობა",
-    "Description":"აღწერა",
-    "Parameter Type":"პარამეტრის ტიპი",
-    "Data Type":"მონაცემის ტიპი",
-    "Response Messages":"პასუხი",
-    "HTTP Status Code":"HTTP სტატუსი",
-    "Reason":"მიზეზი",
-    "Response Model":"რესპონს მოდელი",
-    "Request URL":"მოთხოვნის URL",
-    "Response Body":"პასუხის სხეული",
-    "Response Code":"პასუხის კოდი",
-    "Response Headers":"პასუხის ჰედერები",
-    "Hide Response":"დამალე პასუხი",
-    "Headers":"ჰედერები",
-    "Try it out!":"ცადე !",
-    "Show/Hide":"გამოჩენა/დამალვა",
-    "List Operations":"ოპერაციების სია",
-    "Expand Operations":"ოპერაციები ვრცლად",
-    "Raw":"ნედლი",
-    "can't parse JSON.  Raw result":"JSON-ის დამუშავება ვერ მოხერხდა.  ნედლი პასუხი",
-    "Example Value":"მაგალითი",
-    "Model Schema":"მოდელის სტრუქტურა",
-    "Model":"მოდელი",
-    "Click to set as parameter value":"პარამეტრისთვის მნიშვნელობის მისანიჭებლად, დააკლიკე",
-    "apply":"გამოყენება",
-    "Username":"მოხმარებელი",
-    "Password":"პაროლი",
-    "Terms of service":"მომსახურების პირობები",
-    "Created by":"შექმნა",
-    "See more at":"ნახე ვრცლად",
-    "Contact the developer":"დაუკავშირდი დეველოპერს",
-    "api version":"api ვერსია",
-    "Response Content Type":"პასუხის კონტენტის ტიპი",
-    "Parameter content type:":"პარამეტრის კონტენტის ტიპი:",
-    "fetching resource":"რესურსების მიღება",
-    "fetching resource list":"რესურსების სიის მიღება",
-    "Explore":"ნახვა",
-    "Show Swagger Petstore Example Apis":"ნახე Swagger Petstore სამაგალითო Api",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"სერვერთან დაკავშირება ვერ ხერხდება.  შეამოწმეთ access-control-origin.",
-    "Please specify the protocol for":"მიუთითეთ პროტოკოლი",
-    "Can't read swagger JSON from":"swagger JSON წაკითხვა ვერ მოხერხდა",
-    "Finished Loading Resource Information. Rendering Swagger UI":"რესურსების ჩატვირთვა სრულდება. Swagger UI რენდერდება",
-    "Unable to read api":"api წაკითხვა ვერ მოხერხდა",
-    "from path":"მისამართიდან",
-    "server returned":"სერვერმა დააბრუნა"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/it.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/it.js
deleted file mode 100644
index 8529c2a..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/it.js
+++ /dev/null
@@ -1,52 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Attenzione: Deprecato",
-    "Implementation Notes":"Note di implementazione",
-    "Response Class":"Classe della risposta",
-    "Status":"Stato",
-    "Parameters":"Parametri",
-    "Parameter":"Parametro",
-    "Value":"Valore",
-    "Description":"Descrizione",
-    "Parameter Type":"Tipo di parametro",
-    "Data Type":"Tipo di dato",
-    "Response Messages":"Messaggi della risposta",
-    "HTTP Status Code":"Codice stato HTTP",
-    "Reason":"Motivo",
-    "Response Model":"Modello di risposta",
-    "Request URL":"URL della richiesta",
-    "Response Body":"Corpo della risposta",
-    "Response Code":"Oggetto della risposta",
-    "Response Headers":"Intestazioni della risposta",
-    "Hide Response":"Nascondi risposta",
-    "Try it out!":"Provalo!",
-    "Show/Hide":"Mostra/Nascondi",
-    "List Operations":"Mostra operazioni",
-    "Expand Operations":"Espandi operazioni",
-    "Raw":"Grezzo (raw)",
-    "can't parse JSON.  Raw result":"non è possibile parsare il JSON. Risultato grezzo (raw).",
-    "Model Schema":"Schema del modello",
-    "Model":"Modello",
-    "apply":"applica",
-    "Username":"Nome utente",
-    "Password":"Password",
-    "Terms of service":"Condizioni del servizio",
-    "Created by":"Creato da",
-    "See more at":"Informazioni aggiuntive:",
-    "Contact the developer":"Contatta lo sviluppatore",
-    "api version":"versione api",
-    "Response Content Type":"Tipo di contenuto (content type) della risposta",
-    "fetching resource":"recuperando la risorsa",
-    "fetching resource list":"recuperando lista risorse",
-    "Explore":"Esplora",
-    "Show Swagger Petstore Example Apis":"Mostra le api di esempio di Swagger Petstore",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.",
-    "Please specify the protocol for":"Si prega di specificare il protocollo per",
-    "Can't read swagger JSON from":"Impossibile leggere JSON swagger da:",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Lettura informazioni risorse termianta. Swagger UI viene mostrata",
-    "Unable to read api":"Impossibile leggere la api",
-    "from path":"da cartella",
-    "server returned":"il server ha restituito"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ja.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/ja.js
deleted file mode 100644
index 1cbeb37..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ja.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"警告: 廃止予定",
-    "Implementation Notes":"実装メモ",
-    "Response Class":"レスポンスクラス",
-    "Status":"ステータス",
-    "Parameters":"パラメータ群",
-    "Parameter":"パラメータ",
-    "Value":"値",
-    "Description":"説明",
-    "Parameter Type":"パラメータタイプ",
-    "Data Type":"データタイプ",
-    "Response Messages":"レスポンスメッセージ",
-    "HTTP Status Code":"HTTPステータスコード",
-    "Reason":"理由",
-    "Response Model":"レスポンスモデル",
-    "Request URL":"リクエストURL",
-    "Response Body":"レスポンスボディ",
-    "Response Code":"レスポンスコード",
-    "Response Headers":"レスポンスヘッダ",
-    "Hide Response":"レスポンスを隠す",
-    "Headers":"ヘッダ",
-    "Try it out!":"実際に実行!",
-    "Show/Hide":"表示/非表示",
-    "List Operations":"操作一覧",
-    "Expand Operations":"操作の展開",
-    "Raw":"未加工",
-    "can't parse JSON.  Raw result":"JSONへ解釈できません.  未加工の結果",
-    "Example Value":"値の例",
-    "Model Schema":"モデルスキーマ",
-    "Model":"モデル",
-    "Click to set as parameter value":"パラメータ値と設定するにはクリック",
-    "apply":"実行",
-    "Username":"ユーザ名",
-    "Password":"パスワード",
-    "Terms of service":"サービス利用規約",
-    "Created by":"Created by",
-    "See more at":"詳細を見る",
-    "Contact the developer":"開発者に連絡",
-    "api version":"APIバージョン",
-    "Response Content Type":"レスポンス コンテンツタイプ",
-    "Parameter content type:":"パラメータコンテンツタイプ:",
-    "fetching resource":"リソースの取得",
-    "fetching resource list":"リソース一覧の取得",
-    "Explore":"調査",
-    "Show Swagger Petstore Example Apis":"SwaggerペットストアAPIの表示",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"サーバから読み込めません.  適切なaccess-control-origin設定を持っていない可能性があります.",
-    "Please specify the protocol for":"プロトコルを指定してください",
-    "Can't read swagger JSON from":"次からswagger JSONを読み込めません",
-    "Finished Loading Resource Information. Rendering Swagger UI":"リソース情報の読み込みが完了しました. Swagger UIを描画しています",
-    "Unable to read api":"APIを読み込めません",
-    "from path":"次のパスから",
-    "server returned":"サーバからの返答"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ko-kr.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/ko-kr.js
deleted file mode 100644
index 03c7626..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ko-kr.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"경고:폐기예정됨",
-    "Implementation Notes":"구현 노트",
-    "Response Class":"응답 클래스",
-    "Status":"상태",
-    "Parameters":"매개변수들",
-    "Parameter":"매개변수",
-    "Value":"값",
-    "Description":"설명",
-    "Parameter Type":"매개변수 타입",
-    "Data Type":"데이터 타입",
-    "Response Messages":"응답 메세지",
-    "HTTP Status Code":"HTTP 상태 코드",
-    "Reason":"원인",
-    "Response Model":"응답 모델",
-    "Request URL":"요청 URL",
-    "Response Body":"응답 본문",
-    "Response Code":"응답 코드",
-    "Response Headers":"응답 헤더",
-    "Hide Response":"응답 숨기기",
-    "Headers":"헤더",
-    "Try it out!":"써보기!",
-    "Show/Hide":"보이기/숨기기",
-    "List Operations":"목록 작업",
-    "Expand Operations":"전개 작업",
-    "Raw":"원본",
-    "can't parse JSON.  Raw result":"JSON을 파싱할수 없음. 원본결과:",
-    "Model Schema":"모델 스키마",
-    "Model":"모델",
-    "apply":"적용",
-    "Username":"사용자 이름",
-    "Password":"암호",
-    "Terms of service":"이용약관",
-    "Created by":"작성자",
-    "See more at":"추가정보:",
-    "Contact the developer":"개발자에게 문의",
-    "api version":"api버전",
-    "Response Content Type":"응답Content Type",
-    "fetching resource":"리소스 가져오기",
-    "fetching resource list":"리소스 목록 가져오기",
-    "Explore":"탐색",
-    "Show Swagger Petstore Example Apis":"Swagger Petstore 예제 보기",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"서버로부터 읽어들일수 없습니다. access-control-origin 설정이 올바르지 않을수 있습니다.",
-    "Please specify the protocol for":"다음을 위한 프로토콜을 정하세요",
-    "Can't read swagger JSON from":"swagger JSON 을 다음으로 부터 읽을수 없습니다",
-    "Finished Loading Resource Information. Rendering Swagger UI":"리소스 정보 불러오기 완료. Swagger UI 랜더링",
-    "Unable to read api":"api를 읽을 수 없습니다.",
-    "from path":"다음 경로로 부터",
-    "server returned":"서버 응답함."
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/pl.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/pl.js
deleted file mode 100644
index ce41e91..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/pl.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Uwaga: Wycofane",
-    "Implementation Notes":"Uwagi Implementacji",
-    "Response Class":"Klasa Odpowiedzi",
-    "Status":"Status",
-    "Parameters":"Parametry",
-    "Parameter":"Parametr",
-    "Value":"Wartość",
-    "Description":"Opis",
-    "Parameter Type":"Typ Parametru",
-    "Data Type":"Typ Danych",
-    "Response Messages":"Wiadomości Odpowiedzi",
-    "HTTP Status Code":"Kod Statusu HTTP",
-    "Reason":"Przyczyna",
-    "Response Model":"Model Odpowiedzi",
-    "Request URL":"URL Wywołania",
-    "Response Body":"Treść Odpowiedzi",
-    "Response Code":"Kod Odpowiedzi",
-    "Response Headers":"Nagłówki Odpowiedzi",
-    "Hide Response":"Ukryj Odpowiedź",
-    "Headers":"Nagłówki",
-    "Try it out!":"Wypróbuj!",
-    "Show/Hide":"Pokaż/Ukryj",
-    "List Operations":"Lista Operacji",
-    "Expand Operations":"Rozwiń Operacje",
-    "Raw":"Nieprzetworzone",
-    "can't parse JSON.  Raw result":"nie można przetworzyć pliku JSON.  Nieprzetworzone dane",
-    "Model Schema":"Schemat Modelu",
-    "Model":"Model",
-    "apply":"użyj",
-    "Username":"Nazwa użytkownika",
-    "Password":"Hasło",
-    "Terms of service":"Warunki używania",
-    "Created by":"Utworzone przez",
-    "See more at":"Zobacz więcej na",
-    "Contact the developer":"Kontakt z deweloperem",
-    "api version":"wersja api",
-    "Response Content Type":"Typ Zasobu Odpowiedzi",
-    "fetching resource":"ładowanie zasobu",
-    "fetching resource list":"ładowanie listy zasobów",
-    "Explore":"Eksploruj",
-    "Show Swagger Petstore Example Apis":"Pokaż Przykładowe Api Swagger Petstore",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.",
-    "Please specify the protocol for":"Proszę podać protokół dla",
-    "Can't read swagger JSON from":"Nie można odczytać swagger JSON z",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI",
-    "Unable to read api":"Nie można odczytać api",
-    "from path":"ze ścieżki",
-    "server returned":"serwer zwrócił"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/pt.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/pt.js
deleted file mode 100644
index f2e7c13..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/pt.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Aviso: Depreciado",
-    "Implementation Notes":"Notas de Implementação",
-    "Response Class":"Classe de resposta",
-    "Status":"Status",
-    "Parameters":"Parâmetros",
-    "Parameter":"Parâmetro",
-    "Value":"Valor",
-    "Description":"Descrição",
-    "Parameter Type":"Tipo de parâmetro",
-    "Data Type":"Tipo de dados",
-    "Response Messages":"Mensagens de resposta",
-    "HTTP Status Code":"Código de status HTTP",
-    "Reason":"Razão",
-    "Response Model":"Modelo resposta",
-    "Request URL":"URL requisição",
-    "Response Body":"Corpo da resposta",
-    "Response Code":"Código da resposta",
-    "Response Headers":"Cabeçalho da resposta",
-    "Headers":"Cabeçalhos",
-    "Hide Response":"Esconder resposta",
-    "Try it out!":"Tente agora!",
-    "Show/Hide":"Mostrar/Esconder",
-    "List Operations":"Listar operações",
-    "Expand Operations":"Expandir operações",
-    "Raw":"Cru",
-    "can't parse JSON.  Raw result":"Falha ao analisar JSON.  Resulto cru",
-    "Model Schema":"Modelo esquema",
-    "Model":"Modelo",
-    "apply":"Aplicar",
-    "Username":"Usuário",
-    "Password":"Senha",
-    "Terms of service":"Termos do serviço",
-    "Created by":"Criado por",
-    "See more at":"Veja mais em",
-    "Contact the developer":"Contate o desenvolvedor",
-    "api version":"Versão api",
-    "Response Content Type":"Tipo de conteúdo da resposta",
-    "fetching resource":"busca recurso",
-    "fetching resource list":"buscando lista de recursos",
-    "Explore":"Explorar",
-    "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin",
-    "Please specify the protocol for":"Por favor especifique o protocolo",
-    "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI",
-    "Unable to read api":"Não foi possível ler api",
-    "from path":"do caminho",
-    "server returned":"servidor retornou"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ru.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/ru.js
deleted file mode 100644
index 592744e..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/ru.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Предупреждение: Устарело",
-    "Implementation Notes":"Заметки",
-    "Response Class":"Пример ответа",
-    "Status":"Статус",
-    "Parameters":"Параметры",
-    "Parameter":"Параметр",
-    "Value":"Значение",
-    "Description":"Описание",
-    "Parameter Type":"Тип параметра",
-    "Data Type":"Тип данных",
-    "HTTP Status Code":"HTTP код",
-    "Reason":"Причина",
-    "Response Model":"Структура ответа",
-    "Request URL":"URL запроса",
-    "Response Body":"Тело ответа",
-    "Response Code":"HTTP код ответа",
-    "Response Headers":"Заголовки ответа",
-    "Hide Response":"Спрятать ответ",
-    "Headers":"Заголовки",
-    "Response Messages":"Что может прийти в ответ",
-    "Try it out!":"Попробовать!",
-    "Show/Hide":"Показать/Скрыть",
-    "List Operations":"Операции кратко",
-    "Expand Operations":"Операции подробно",
-    "Raw":"В сыром виде",
-    "can't parse JSON.  Raw result":"Не удается распарсить ответ:",
-    "Example Value":"Пример",
-    "Model Schema":"Структура",
-    "Model":"Описание",
-    "Click to set as parameter value":"Нажмите, чтобы испльзовать в качестве значения параметра",
-    "apply":"применить",
-    "Username":"Имя пользователя",
-    "Password":"Пароль",
-    "Terms of service":"Условия использования",
-    "Created by":"Разработано",
-    "See more at":"Еще тут",
-    "Contact the developer":"Связаться с разработчиком",
-    "api version":"Версия API",
-    "Response Content Type":"Content Type ответа",
-    "Parameter content type:":"Content Type параметра:",
-    "fetching resource":"Получение ресурса",
-    "fetching resource list":"Получение ресурсов",
-    "Explore":"Показать",
-    "Show Swagger Petstore Example Apis":"Показать примеры АПИ",
-    "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, проблема с настройками доступа",
-    "Please specify the protocol for":"Пожалуйста, укажите протокол для",
-    "Can't read swagger JSON from":"Не получается прочитать swagger json из",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим",
-    "Unable to read api":"Не удалось прочитать api",
-    "from path":"по адресу",
-    "server returned":"сервер сказал"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/tr.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/tr.js
deleted file mode 100644
index 16426a9..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/tr.js
+++ /dev/null
@@ -1,53 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"Uyarı: Deprecated",
-    "Implementation Notes":"Gerçekleştirim Notları",
-    "Response Class":"Dönen Sınıf",
-    "Status":"Statü",
-    "Parameters":"Parametreler",
-    "Parameter":"Parametre",
-    "Value":"Değer",
-    "Description":"Açıklama",
-    "Parameter Type":"Parametre Tipi",
-    "Data Type":"Veri Tipi",
-    "Response Messages":"Dönüş Mesajı",
-    "HTTP Status Code":"HTTP Statü Kodu",
-    "Reason":"Gerekçe",
-    "Response Model":"Dönüş Modeli",
-    "Request URL":"İstek URL",
-    "Response Body":"Dönüş İçeriği",
-    "Response Code":"Dönüş Kodu",
-    "Response Headers":"Dönüş Üst Bilgileri",
-    "Hide Response":"Dönüşü Gizle",
-    "Headers":"Üst Bilgiler",
-    "Try it out!":"Dene!",
-    "Show/Hide":"Göster/Gizle",
-    "List Operations":"Operasyonları Listele",
-    "Expand Operations":"Operasyonları Aç",
-    "Raw":"Ham",
-    "can't parse JSON.  Raw result":"JSON çözümlenemiyor.  Ham sonuç",
-    "Model Schema":"Model Şema",
-    "Model":"Model",
-    "apply":"uygula",
-    "Username":"Kullanıcı Adı",
-    "Password":"Parola",
-    "Terms of service":"Servis şartları",
-    "Created by":"Oluşturan",
-    "See more at":"Daha fazlası için",
-    "Contact the developer":"Geliştirici ile İletişime Geçin",
-    "api version":"api versiyon",
-    "Response Content Type":"Dönüş İçerik Tipi",
-    "fetching resource":"kaynak getiriliyor",
-    "fetching resource list":"kaynak listesi getiriliyor",
-    "Explore":"Keşfet",
-    "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.",
-    "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz",
-    "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor",
-    "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor",
-    "Unable to read api":"api okunamadı",
-    "from path":"yoldan",
-    "server returned":"sunucuya dönüldü"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/translator.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/translator.js
deleted file mode 100644
index ffb879f..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/translator.js
+++ /dev/null
@@ -1,39 +0,0 @@
-'use strict';
-
-/**
- * Translator for documentation pages.
- *
- * To enable translation you should include one of language-files in your index.html
- * after <script src='lang/translator.js' type='text/javascript'></script>.
- * For example - <script src='lang/ru.js' type='text/javascript'></script>
- *
- * If you wish to translate some new texts you should do two things:
- * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too.
- * 2. Mark that text it templates this way <anyHtmlTag data-sw-translate>New Phrase</anyHtmlTag> or <anyHtmlTag data-sw-translate value='New Phrase'/>.
- * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate.
- *
- */
-window.SwaggerTranslator = {
-
-    _words:[],
-
-    translate: function(sel) {
-      var $this = this;
-      sel = sel || '[data-sw-translate]';
-
-      $(sel).each(function() {
-        $(this).html($this._tryTranslate($(this).html()));
-
-        $(this).val($this._tryTranslate($(this).val()));
-        $(this).attr('title', $this._tryTranslate($(this).attr('title')));
-      });
-    },
-
-    _tryTranslate: function(word) {
-      return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word;
-    },
-
-    learn: function(wordsMap) {
-      this._words = wordsMap;
-    }
-};
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lang/zh-cn.js b/example/application/helloworld/src/main/webapp/swagger-ui/lang/zh-cn.js
deleted file mode 100644
index 3af61ad..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lang/zh-cn.js
+++ /dev/null
@@ -1,56 +0,0 @@
-'use strict';
-
-/* jshint quotmark: double */
-window.SwaggerTranslator.learn({
-    "Warning: Deprecated":"警告:已过时",
-    "Implementation Notes":"实现备注",
-    "Response Class":"响应类",
-    "Status":"状态",
-    "Parameters":"参数",
-    "Parameter":"参数",
-    "Value":"值",
-    "Description":"描述",
-    "Parameter Type":"参数类型",
-    "Data Type":"数据类型",
-    "Response Messages":"响应消息",
-    "HTTP Status Code":"HTTP状态码",
-    "Reason":"原因",
-    "Response Model":"响应模型",
-    "Request URL":"请求URL",
-    "Response Body":"响应体",
-    "Response Code":"响应码",
-    "Response Headers":"响应头",
-    "Hide Response":"隐藏响应",
-    "Headers":"头",
-    "Try it out!":"试一下!",
-    "Show/Hide":"显示/隐藏",
-    "List Operations":"显示操作",
-    "Expand Operations":"展开操作",
-    "Raw":"原始",
-    "can't parse JSON.  Raw result":"无法解析JSON. 原始结果",
-    "Example Value":"示例",
-    "Click to set as parameter value":"点击设置参数",
-    "Model Schema":"模型架构",
-    "Model":"模型",
-    "apply":"应用",
-    "Username":"用户名",
-    "Password":"密码",
-    "Terms of service":"服务条款",
-    "Created by":"创建者",
-    "See more at":"查看更多:",
-    "Contact the developer":"联系开发者",
-    "api version":"api版本",
-    "Response Content Type":"响应Content Type",
-    "Parameter content type:":"参数类型:",
-    "fetching resource":"正在获取资源",
-    "fetching resource list":"正在获取资源列表",
-    "Explore":"浏览",
-    "Show Swagger Petstore Example Apis":"显示 Swagger Petstore 示例 Apis",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"无法从服务器读取。可能没有正确设置access-control-origin。",
-    "Please specify the protocol for":"请指定协议:",
-    "Can't read swagger JSON from":"无法读取swagger JSON于",
-    "Finished Loading Resource Information. Rendering Swagger UI":"已加载资源信息。正在渲染Swagger UI",
-    "Unable to read api":"无法读取api",
-    "from path":"从路径",
-    "server returned":"服务器返回"
-});
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/backbone-min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/backbone-min.js
deleted file mode 100644
index 8eff02e..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/backbone-min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,s){t.Backbone=e(t,s,i,n)});else if("undefined"!=typeof exports){var i=require("underscore");e(t,exports,i)}else t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}(this,function(t,e,i,n){var s=t.Backbone,r=[],a=(r.push,r.slice);r.splice;e.VERSION="1.1.2",e.$=n,e.noConflict=function(){return t.Backbone=s,this},e.emulateHTTP=!1,e.emulateJSON=!1;var o=e.Events={on:function(t,e,i [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/es5-shim.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/es5-shim.js
deleted file mode 100644
index 4c0fcab..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/es5-shim.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){"use strict";"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():t.returnExports=e()}(this,function(){var t,e,r=Array,n=r.prototype,o=Object,i=o.prototype,a=Function,u=a.prototype,f=String,s=f.prototype,l=Number,c=l.prototype,h=n.slice,p=n.splice,y=n.push,d=n.unshift,g=n.concat,v=n.join,b=u.call,w=u.apply,T=Math.max,m=Math.min,D=i.toString,x="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,S=Function.prototype.toString, [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/handlebars-4.0.5.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/handlebars-4.0.5.js
deleted file mode 100644
index 57025bc..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/handlebars-4.0.5.js
+++ /dev/null
@@ -1,3 +0,0 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Handlebars=e():t.Handlebars=e()}(this,function(){return function(t){function e(s){if(r[s])return r[s].exports;var i=r[s]={exports:{},id:s,loaded:!1};return t[s].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";function s(){var t=v();return t.compile= [...]
-48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(t,e){throw new Error(t)},parse:function(t) [...]
-s.push(i),this.push(this.source.functionCall("container.invokePartial","",s))},assignToHash:function(t){var e=this.popStack(),r=void 0,s=void 0,i=void 0;this.trackIds&&(i=this.popStack()),this.stringParams&&(s=this.popStack(),r=this.popStack());var a=this.hash;r&&(a.contexts[t]=r),s&&(a.types[t]=s),i&&(a.ids[t]=i),a.values[t]=e},pushId:function(t,e,r){"BlockParam"===t?this.pushStackLiteral("blockParams["+e[0]+"].path["+e[1]+"]"+(r?" + "+JSON.stringify("."+r):"")):"PathExpression"===t?thi [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack.js
deleted file mode 100644
index 7b00c68..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){"undefined"!=typeof exports?e(exports):(self.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return self.hljs}))}(function(e){function r(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function n(e,r){var t=e&&e.exec(r);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function c(e){var r,t,n,c=e.className+" ";if(c+=e.parentNode?e.parentNo [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack_extended.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack_extended.js
deleted file mode 100644
index 162a224..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/highlight.9.1.0.pack_extended.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";!function(){var h,l;h=hljs.configure,hljs.configure=function(l){var i=l.highlightSizeThreshold;hljs.highlightSizeThreshold=i===+i?i:null,h.call(this,l)},l=hljs.highlightBlock,hljs.highlightBlock=function(h){var i=h.innerHTML,g=hljs.highlightSizeThreshold;(null==g||g>i.length)&&l.call(hljs,h)}}();
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery-1.8.0.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery-1.8.0.min.js
deleted file mode 100644
index e2e2b7f..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery-1.8.0.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-!function(e,t){function n(e){var t=he[e]={};return K.each(e.split(te),function(e,n){t[n]=!0}),t}function r(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(me,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r||"false"!==r&&("null"===r?null:+r+""===r?+r:ge.test(r)?K.parseJSON(r):r)}catch(o){}K.data(e,n,r)}else r=t}return r}function i(e){var t;for(t in e)if(("data"!==t||!K.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function o(){return!1}func [...]
-n}})}),K.attrHooks.contenteditable={get:ye.get,set:function(e,t,n){""===t&&(t="false"),ye.set(e,t,n)}}),K.support.hrefNormalized||K.each(["href","src","width","height"],function(e,n){K.attrHooks[n]=K.extend(K.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null===r?t:r}})}),K.support.style||(K.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=""+t}}),K.support.optSelected||(K.propHooks.selected=K.extend(K.pro [...]
-Ze.optgroup=Ze.option,Ze.tbody=Ze.tfoot=Ze.colgroup=Ze.caption=Ze.thead,Ze.th=Ze.td,K.support.htmlSerialize||(Ze._default=[1,"X<div>","</div>"]),K.fn.extend({text:function(e){return K.access(this,function(e){return e===t?K.text(this):this.empty().append((this[0]&&this[0].ownerDocument||R).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(K.isFunction(e))return this.each(function(t){K(this).wrapAll(e.call(this,t))});if(this[0]){var t=K(e,this[0].ownerDocument).eq(0).clo [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.ba-bbq.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.ba-bbq.min.js
deleted file mode 100644
index 78d1ff5..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.ba-bbq.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){function n(e){return"string"==typeof e}function r(e){var t=g.call(arguments,1);return function(){return e.apply(this,t.concat(g.call(arguments)))}}function o(e){return e.replace(/^[^#]*#?(.*)$/,"$1")}function a(e){return e.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function i(r,o,a,i,c){var u,s,p,h,d;return i!==f?(p=a.match(r?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/),d=p[3]||"",2===c&&n(i)?s=i.replace(r?R:E,""):(h=l(p[2]),i=n(i)?l[r?A:w](i):i,s=2===c?i:1===c?e.extend [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.slideto.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.slideto.min.js
deleted file mode 100644
index b15997b..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.slideto.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(i){i.fn.slideto=function(o){return o=i.extend({slide_duration:"slow",highlight_duration:3e3,highlight:!0,highlight_color:"#FFFF99"},o),this.each(function(){obj=i(this),i("body").animate({scrollTop:obj.offset().top},o.slide_duration,function(){o.highlight&&i.ui.version&&obj.effect("highlight",{color:o.highlight_color},o.highlight_duration)})})}}(jQuery);
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.wiggle.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.wiggle.min.js
deleted file mode 100644
index 6b4e261..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jquery.wiggle.min.js
+++ /dev/null
@@ -1 +0,0 @@
-jQuery.fn.wiggle=function(e){var a={speed:50,wiggles:3,travel:5,callback:null},e=jQuery.extend(a,e);return this.each(function(){var a=this,l=(jQuery(this).wrap('<div class="wiggle-wrap"></div>').css("position","relative"),0);for(i=1;i<=e.wiggles;i++)jQuery(this).animate({left:"-="+e.travel},e.speed).animate({left:"+="+2*e.travel},2*e.speed).animate({left:"-="+e.travel},e.speed,function(){l++,jQuery(a).parent().hasClass("wiggle-wrap")&&jQuery(a).parent().replaceWith(a),l==e.wiggles&&jQuer [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/js-yaml.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/js-yaml.min.js
deleted file mode 100644
index 2514a41..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/js-yaml.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.jsyaml=t()}}(function(){var t;return function e(t,n,i){function r(a,s){if(!n[a]){if(!t[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");thro [...]
-predicate:a,represent:o})},{"../type":13,buffer:30}],15:[function(t,e,n){"use strict";function i(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)}function r(t){return"true"===t||"True"===t||"TRUE"===t}function o(t){return"[object Boolean]"===Object.prototype.toString.call(t)}var a=t("../type");e.exports=new a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:i,construct:r,predicate:o,represent:{lowerca [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jsoneditor.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/jsoneditor.min.js
deleted file mode 100644
index 21db1ab..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/jsoneditor.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-!function(){var t;!function(){var e=!1,i=/xyz/.test(function(){window.postMessage("xyz")})?/\b_super\b/:/.*/;return t=function(){},t.extend=function(t){function s(){!e&&this.init&&this.init.apply(this,arguments)}var r=this.prototype;e=!0;var n=new this;e=!1;for(var o in t)n[o]="function"==typeof t[o]&&"function"==typeof r[o]&&i.test(t[o])?function(t,e){return function(){var i=this._super;this._super=r[t];var s=e.apply(this,arguments);return this._super=i,s}}(o,t[o]):t[o];return s.prototy [...]
-var s=this.input_type;("cpp"===s||"c++"===s||"c"===s)&&(s="c_cpp"),this.ace_container=document.createElement("div"),this.ace_container.style.width="100%",this.ace_container.style.position="relative",this.ace_container.style.height="400px",this.input.parentNode.insertBefore(this.ace_container,this.input),this.input.style.display="none",this.ace_editor=window.ace.edit(this.ace_container),this.ace_editor.setValue(this.getValue()),n.plugins.ace.theme&&this.ace_editor.setTheme("ace/theme/"+n. [...]
-this.delete_last_row_button.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation();var i=t.getValue(),s=null;t.rows.length>1&&t.rows[t.rows.length-1].tab===t.active_tab&&(s=t.rows[t.rows.length-2].tab),i.pop(),t.setValue(i),s&&(t.active_tab=s,t.refreshTabs()),t.onChange(!0)}),t.controls.appendChild(this.delete_last_row_button),this.remove_all_rows_button=this.getButton("All","delete","Delete All"),this.remove_all_rows_button.addEventListener("click",function(e){e.pre [...]
-this.preview.appendChild(s)}this.preview.innerHTML+="<br>";var r=this.getButton("Upload","upload","Upload");this.preview.appendChild(r),r.addEventListener("click",function(e){e.preventDefault(),r.setAttribute("disabled","disabled"),t.theme.removeInputError(t.uploader),t.theme.getProgressBar&&(t.progressBar=t.theme.getProgressBar(),t.preview.appendChild(t.progressBar)),t.jsoneditor.options.upload(t.path,i,{success:function(e){t.setValue(e),t.parent?t.parent.onChildEditorChange(t):t.jsoned [...]
-}),n.defaults.resolvers.unshift(function(t){return"any"===t.type?"multiple":void 0}),n.defaults.resolvers.unshift(function(t){return"string"===t.type&&t.media&&"base64"===t.media.binaryEncoding?"base64":void 0}),n.defaults.resolvers.unshift(function(t){return"string"===t.type&&"url"===t.format&&t.options&&t.options.upload===!0&&window.FileReader?"upload":void 0}),n.defaults.resolvers.unshift(function(t){return"array"==t.type&&"table"==t.format?"table":void 0}),n.defaults.resolvers.unshif [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/lodash.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/lodash.min.js
deleted file mode 100644
index 3625da8..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/lodash.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(){function n(n,t){if(n!==t){var r=null===n,e=n===x,u=n===n,o=null===t,i=t===x,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return"function"==typeof n||!1}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e= [...]
-Nn.bindKey=Ao,Nn.callback=Le,Nn.chain=te,Nn.chunk=function(n,t,r){t=(r?$r(n,t,r):null==t)?1:ju(xu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=De(du(e/t));r<e;)o[++u]=St(n,r,r+=t);return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=fo,Nn.create=function(n,t,r){var e=Pu(n);return r&&$r(n,t,r)&&(t=x),t?et(e,t):e},Nn.curry=jo,Nn.curryRight=ko,Nn.debounce=le,Nn.defaults [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/marked.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/marked.js
deleted file mode 100644
index c334bff..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/marked.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(){function e(e){this.tokens=[],this.tokens.links={},this.options=e||a.defaults,this.rules=p.normal,this.options.gfm&&(this.options.tables?this.rules=p.tables:this.rules=p.gfm)}function t(e,t){if(this.options=t||a.defaults,this.links=e,this.rules=u.normal,this.renderer=this.options.renderer||new n,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=u.breaks:this.rules=u.gfm:th [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/object-assign-pollyfill.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/object-assign-pollyfill.js
deleted file mode 100644
index b34d63c..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/object-assign-pollyfill.js
+++ /dev/null
@@ -1 +0,0 @@
-"function"!=typeof Object.assign&&!function(){Object.assign=function(n){"use strict";if(void 0===n||null===n)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(n),o=1;o<arguments.length;o++){var r=arguments[o];if(void 0!==r&&null!==r)for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t}}();
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/sanitize-html.min.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/sanitize-html.min.js
deleted file mode 100644
index ade2508..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/sanitize-html.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.sanitizeHtml=t()}}(function(){return function t(e,r,n){function i(o,a){if(!r[o]){if(!e[o]){var c="function"==typeof require&&require;if(!a&&c)return c(o,!0);if(s)return s(o,!0);var u=new Error("Cannot find module '"+o+"'");thro [...]
-t.next=null,this._options.withStartIndices&&(t.startIndex=this._parser.startIndex),this._options.withDomLvl1&&(t.__proto__="tag"===t.type?a:o),n?(t.prev=n,n.next=t):t.prev=null,r.push(t),t.parent=e||null},n.prototype.onopentag=function(t,e){var r={type:"script"===t?i.Script:"style"===t?i.Style:i.Tag,name:t,attribs:e,children:[]};this._addDomElement(r),this._tagStack.push(r)},n.prototype.ontext=function(t){var e,r=this._options.normalizeWhitespace||this._options.ignoreWhitespace;!this._ta [...]
-ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",t [...]
-},get ProxyHandler(){return n("ProxyHandler",t("./ProxyHandler.js"))},get DomUtils(){return n("DomUtils",t("domutils"))},get CollectingHandler(){return n("CollectingHandler",t("./CollectingHandler.js"))},DefaultHandler:s,get RssHandler(){return n("RssHandler",this.FeedHandler)},parseDOM:function(t,e){var r=new s(e);return new i(r,e).end(t),r.dom},parseFeed:function(t,r){var n=new e.exports.FeedHandler(r);return new i(n,r).end(t),n.dom},createDomStream:function(t,e,r){var n=new s(t,e,r);r [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/lib/swagger-oauth.js b/example/application/helloworld/src/main/webapp/swagger-ui/lib/swagger-oauth.js
deleted file mode 100644
index 7160291..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/lib/swagger-oauth.js
+++ /dev/null
@@ -1 +0,0 @@
-function handleLogin(){var e=[],o=window.swaggerUiAuth.authSchemes||window.swaggerUiAuth.securityDefinitions;if(o){var i,n=o;for(i in n){var a=n[i];if("oauth2"===a.type&&a.scopes){var t;if(Array.isArray(a.scopes)){var p;for(p=0;p<a.scopes.length;p++)e.push(a.scopes[p])}else for(t in a.scopes)e.push({scope:t,description:a.scopes[t],OAuthSchemeKey:i})}}}for(window.swaggerUi.api&&window.swaggerUi.api.info&&(appName=window.swaggerUi.api.info.title),$(".api-popup-dialog").remove(),popupDialog [...]
\ No newline at end of file
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/o2c.html b/example/application/helloworld/src/main/webapp/swagger-ui/o2c.html
deleted file mode 100644
index 0cde1d3..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/o2c.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<script>
-var qp = null;
-if(/code|token|error/.test(window.location.hash)) {
-  qp = location.hash.substring(1);
-}
-else {
-  qp = location.search.substring(1);
-}
-qp = qp ? JSON.parse('{"' + qp.replace(/&/g, '","').replace(/=/g,'":"') + '"}',
-  function(key, value) {
-    return key===""?value:decodeURIComponent(value) }
-  ):{}
-
-if (window.opener.swaggerUiAuth.tokenUrl)
-    window.opener.processOAuthCode(qp);
-else
-    window.opener.onOAuthComplete(qp);
-
-window.close();
-</script>
diff --git a/example/application/helloworld/src/main/webapp/swagger-ui/swagger-ui.js b/example/application/helloworld/src/main/webapp/swagger-ui/swagger-ui.js
deleted file mode 100644
index 5219d03..0000000
--- a/example/application/helloworld/src/main/webapp/swagger-ui/swagger-ui.js
+++ /dev/null
@@ -1,25344 +0,0 @@
-/**
- * swagger-ui - Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API
- * @version v2.2.10
- * @link http://swagger.io
- * @license Apache-2.0
- */
-(function(){/* jshint ignore:start */ 
- {(function() {
-  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
-templates['apikey_auth'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "                <span class=\"key_auth__value\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.value : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</span>\n";
-},"3":function(container,depth0,helpers,partials,data) {
-    return "                <input placeholder=\"api_key\" class=\"auth_input input_apiKey_entry\" name=\"apiKey\" type=\"text\"/>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<div class=\"key_input_container\">\n    <h3 class=\"auth__title\">Api key authorization</h3>\n    <div class=\"auth__description\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>\n    <div>\n        <div class=\"key_auth__field\">\n            <span class=\"key_auth__label\">name:</span>\n            <span class=\"key_auth__value\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</span>\n        </div>\n        <div class=\"key_auth__field\">\n            <span class=\"key_auth__label\">in:</span>\n            <span class=\"key_auth__value\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0["in"] : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</span>\n        </div>\n        <div class=\"key_auth__field\">\n            <span class=\"key_auth__label\">value:</span>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
-    + "        </div>\n    </div>\n</div>\n";
-},"useData":true});
-templates['auth_button'] = template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    return "<a class='authorize__btn' href=\"#\">Authorize</a>\n";
-},"useData":true});
-templates['auth_button_operation'] = template({"1":function(container,depth0,helpers,partials,data) {
-    return "        authorize__btn_operation_login\n";
-},"3":function(container,depth0,helpers,partials,data) {
-    return "        authorize__btn_operation_logout\n";
-},"5":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "        <ul class=\"authorize-scopes\">\n"
-    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.scopes : depth0),{"name":"each","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "        </ul>\n";
-},"6":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "                <li class=\"authorize__scope\" title=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.scope : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</li>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "<div class=\"authorize__btn authorize__btn_operation\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
-    + "\">\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.scopes : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "</div>\n";
-},"useData":true});
-templates['auth_view'] = template({"1":function(container,depth0,helpers,partials,data) {
-    return "            <button type=\"button\" class=\"auth__button auth_submit__button\" data-sw-translate>Authorize</button>\n";
-},"3":function(container,depth0,helpers,partials,data) {
-    return "            <button type=\"button\" class=\"auth__button auth_logout__button\" data-sw-translate>Logout</button>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "<div class=\"auth_container\">\n\n    <div class=\"auth_inner\"></div>\n    <div class=\"auth_submit\">\n"
-    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isAuthorized : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "    </div>\n\n</div>\n";
-},"useData":true});
-templates['basic_auth'] = template({"1":function(container,depth0,helpers,partials,data) {
-    return " - authorized";
-},"3":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "                <span class=\"basic_auth__value\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.username : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</span>\n";
-},"5":function(container,depth0,helpers,partials,data) {
-    return "                <input required placeholder=\"username\" class=\"basic_auth__username auth_input\" name=\"username\" type=\"text\"/>\n";
-},"7":function(container,depth0,helpers,partials,data) {
-    return "            <div class=\"auth_label\">\n                <span class=\"basic_auth__label\" data-sw-translate>password:</span>\n                <input required placeholder=\"password\" class=\"basic_auth__password auth_input\" name=\"password\" type=\"password\"/></label>\n            </div>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "<div class='basic_auth_container'>\n    <h3 class=\"auth__title\">Basic authentication"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "</h3>\n    <form class=\"basic_input_container\">\n        <div class=\"auth__description\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>\n        <div class=\"auth_label\">\n            <span class=\"basic_auth__label\" data-sw-translate>username:</span>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(5, data, 0),"data":data})) != null ? stack1 : "")
-    + "        </div>\n"
-    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.isLogout : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "    </form>\n</div>\n";
-},"useData":true});
-templates['content_type'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.produces : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "	<option value=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</option>\n";
-},"4":function(container,depth0,helpers,partials,data) {
-    return "  <option value=\"application/json\">application/json</option>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<label data-sw-translate for=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.contentTypeId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">Response Content Type</label>\n<select name=\"contentType\" id=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.contentTypeId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.produces : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "")
-    + "</select>\n";
-},"useData":true});
-templates['main'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "  <div class=\"info_title\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.title : stack1),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>\n  <div class=\"info_description markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.description : stack1),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.externalDocs : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "  "
-    + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.termsOfServiceUrl : stack1),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n  "
-    + ((stack1 = helpers["if"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.name : stack1),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n  "
-    + ((stack1 = helpers["if"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n  "
-    + ((stack1 = helpers["if"].call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.email : stack1),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n  "
-    + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n";
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "  <p>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.description : stack1),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</p>\n  <a href=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" target=\"_blank\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.externalDocs : depth0)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</a>\n";
-},"4":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "<div class=\"info_tos\"><a target=\"_blank\" href=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.termsOfServiceUrl : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" data-sw-translate>Terms of service</a></div>";
-},"6":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "<div><div class='info_name' style=\"display: inline\" data-sw-translate>Created by </div> "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.name : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>";
-},"8":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<div class='info_url' data-sw-translate>See more at <a href=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</a></div>";
-},"10":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<div class='info_email'><a target=\"_parent\" href=\"mailto:"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.contact : stack1)) != null ? stack1.email : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "?subject="
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.title : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" data-sw-translate>Contact the developer</a></div>";
-},"12":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<div class='info_license'><a target=\"_blank\" href='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1)) != null ? stack1.url : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,((stack1 = ((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.license : stack1)) != null ? stack1.name : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</a></div>";
-},"14":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "  , <span style=\"font-variant: small-caps\" data-sw-translate>api version</span>: "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n    ";
-},"16":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "    <span style=\"float:right\"><a target=\"_blank\" href=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.validatorUrl : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "/debug?url="
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.url : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\"><img id=\"validator\" src=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.validatorUrl : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "?url="
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.url : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\"></a>\n    </span>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "<div class='info' id='api_info'>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.info : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "</div>\n<div class='container' id='resources_container'>\n  <div class='authorize-wrapper'></div>\n\n  <ul id='resources'></ul>\n\n  <div class=\"footer\">\n    <h4 style=\"color: #999\">[ <span style=\"font-variant: small-caps\">base url</span>: "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.basePath : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n"
-    + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1),{"name":"if","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "]\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.validatorUrl : depth0),{"name":"if","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "    </h4>\n    </div>\n</div>\n";
-},"useData":true});
-templates['oauth2'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "<p>Authorization URL: "
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.authorizationUrl : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</p>";
-},"3":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "<p>Token URL: "
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.tokenUrl : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</p>";
-},"5":function(container,depth0,helpers,partials,data) {
-    return "        <p>Please input username and password for password flow authorization</p>\n        <fieldset>\n            <div><label>Username: <input class=\"oauth-username\" type=\"text\" name=\"username\"></label></div>\n            <div><label>Password: <input class=\"oauth-password\" type=\"password\" name=\"password\"></label></div>\n        </fieldset>\n";
-},"7":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "        <p>Setup client authentication."
-    + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.requireClientAuthenticaiton : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "</p>\n        <fieldset>\n            <div><label>Type:\n                <select class=\"oauth-client-authentication-type\" name=\"client-authentication-type\">\n                    <option value=\"none\" selected>None or other</option>\n                    <option value=\"basic\">Basic auth</option>\n                    <option value=\"request-body\">Request body</option>\n                </select>\n            </label></div>\n            <div class=\"oauth-client-authentication\ [...]
-},"8":function(container,depth0,helpers,partials,data) {
-    return "(Required)";
-},"10":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "            <li>\n                <input class=\"oauth-scope\" type=\"checkbox\" data-scope=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.scope : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" oauthtype=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.OAuthSchemeKey : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\"/>\n                <label>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.scope : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</label><br/>\n                <span class=\"api-scope-desc\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.OAuthSchemeKey : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "                </span>\n            </li>\n";
-},"11":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "                        ("
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.OAuthSchemeKey : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + ")\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<div>\n    <h3 class=\"auth__title\">OAuth2.0</h3>\n    <p>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</p>\n    "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.authorizationUrl : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n    "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tokenUrl : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n    <p>flow: "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.flow : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</p>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isPasswordFlow : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.clientAuthentication : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "    <p><strong> "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.appName : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + " </strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>\n    <p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.\n        <a href=\"#\">Learn how to use</a>\n    </p>\n    <ul class=\"api-popup-scopes\">\n"
-    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.scopes : depth0),{"name":"each","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "    </ul>\n</div>";
-},"useData":true});
-templates['operation'] = template({"1":function(container,depth0,helpers,partials,data) {
-    return "deprecated";
-},"3":function(container,depth0,helpers,partials,data) {
-    return "            <h4><span data-sw-translate>Warning: Deprecated</span></h4>\n";
-},"5":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "        <h4><span data-sw-translate>Implementation Notes</span></h4>\n        <div class=\"markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>\n";
-},"7":function(container,depth0,helpers,partials,data) {
-    return "            <div class='authorize-wrapper authorize-wrapper_operation'></div>\n";
-},"9":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "          <div class=\"response-class\">\n            <h4><span data-sw-translate>Response Class</span> (<span data-sw-translate>Status</span> "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.successCode : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + ")</h4>\n              "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.successDescription : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n            <p><span class=\"model-signature\" /></p>\n            <br/>\n            <div class=\"response-content-type\" />\n            </div>\n";
-},"10":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "<div class=\"markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.successDescription : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</div>";
-},"12":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "          <h4 data-sw-translate>Headers</h4>\n          <table class=\"headers\">\n            <thead>\n              <tr>\n                <th style=\"width: 100px; max-width: 100px\" data-sw-translate>Header</th>\n                <th style=\"width: 310px; max-width: 310px\" data-sw-translate>Description</th>\n                <th style=\"width: 200px; max-width: 200px\" data-sw-translate>Type</th>\n                <th style=\"width: 320px; max-width: 320px\" data-sw-translate> [...]
-    + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.headers : depth0),{"name":"each","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "            </tbody>\n          </table>\n";
-},"13":function(container,depth0,helpers,partials,data) {
-    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "              <tr>\n                <td>"
-    + container.escapeExpression(((helper = (helper = helpers.key || (data && data.key)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"key","hash":{},"data":data}) : helper)))
-    + "</td>\n                <td>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n                <td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n                <td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.other : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n              </tr>\n";
-},"15":function(container,depth0,helpers,partials,data) {
-    return "          <h4 data-sw-translate>Parameters</h4>\n          <table class='fullwidth parameters'>\n          <thead>\n            <tr>\n            <th style=\"width: 100px; max-width: 100px\" data-sw-translate>Parameter</th>\n            <th style=\"width: 310px; max-width: 310px\" data-sw-translate>Value</th>\n            <th style=\"width: 200px; max-width: 200px\" data-sw-translate>Description</th>\n            <th style=\"width: 100px; max-width: 100px\" data-sw-translate> [...]
-},"17":function(container,depth0,helpers,partials,data) {
-    return "          <div style='margin:0;padding:0;display:inline'></div>\n          <h4 data-sw-translate>Response Messages</h4>\n          <table class='fullwidth response-messages'>\n            <thead>\n            <tr>\n              <th data-sw-translate>HTTP Status Code</th>\n              <th data-sw-translate>Reason</th>\n              <th data-sw-translate>Response Model</th>\n              <th data-sw-translate>Headers</th>\n            </tr>\n            </thead>\n          [...]
-},"19":function(container,depth0,helpers,partials,data) {
-    return "";
-},"21":function(container,depth0,helpers,partials,data) {
-    return "          <div class='sandbox_header'>\n            <input class='submit' type='submit' value='Try it out!' data-sw-translate/>\n            <a href='#' class='response_hider' style='display:none' data-sw-translate>Hide Response</a>\n            <span class='response_throbber' style='display:none'></span>\n          </div>\n";
-},"23":function(container,depth0,helpers,partials,data) {
-    return "          <h4 data-sw-translate>Request Headers</h4>\n          <div class='block request_headers'></div>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression;
-
-  return "  <ul class='operations' >\n    <li class='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.method : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + " operation' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.parentId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "_"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>\n      <div class='heading'>\n        <h3>\n          <span class='http_method'>\n          <a href='#!/"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "/"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "' class=\"toggleOperation\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.method : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</a>\n          </span>\n          <span class='path'>\n          <a href='#!/"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "/"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "' class=\"toggleOperation "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.deprecated : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.path : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</a>\n          </span>\n        </h3>\n        <ul class='options'>\n          <li>\n          <a href='#!/"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "/"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "' class=\"toggleOperation\"><span class=\"markdown\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.summary : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</span></a>\n          </li>\n        </ul>\n      </div>\n      <div class='content' id='"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.encodedParentId : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "_"
-    + alias3((helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.nickname : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "_content' style='display:none'>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.deprecated : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.security : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.type : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.headers : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n        <form accept-charset='UTF-8' class='sandbox'>\n          <div style='margin:0;padding:0;display:inline'></div>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.parameters : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.responseMessages : depth0),{"name":"if","hash":{},"fn":container.program(17, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isReadOnly : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.program(21, data, 0),"data":data})) != null ? stack1 : "")
-    + "        </form>\n        <div class='response' style='display:none'>\n          <h4 class='curl'>Curl</h4>\n          <div class='block curl'></div>\n          <h4 data-sw-translate>Request URL</h4>\n          <div class='block request_url'></div>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.showRequestHeaders : depth0),{"name":"if","hash":{},"fn":container.program(23, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "          <h4 data-sw-translate>Response Body</h4>\n          <div class='block response_body'></div>\n          <h4 data-sw-translate>Response Code</h4>\n          <div class='block response_code'></div>\n          <h4 data-sw-translate>Response Headers</h4>\n          <div class='block response_headers'></div>\n        </div>\n      </div>\n    </li>\n  </ul>\n";
-},"useData":true});
-templates['param'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "");
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "			<input type=\"file\" name='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'/>\n			<div class=\"parameter-content-type\" />\n";
-},"4":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "");
-},"5":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "				<div class=\"editor_holder\"></div>\n				<textarea class='body-textarea' name='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</textarea>\n        <br />\n        <div class=\"parameter-content-type\" />\n";
-},"7":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "				<textarea class='body-textarea' name='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'></textarea>\n				<div class=\"editor_holder\"></div>\n				<br />\n				<div class=\"parameter-content-type\" />\n";
-},"9":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(10, data, 0),"data":data})) != null ? stack1 : "");
-},"10":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = (helpers.renderTextParam || (depth0 && depth0.renderTextParam) || helpers.helperMissing).call(depth0 != null ? depth0 : {},depth0,{"name":"renderTextParam","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
-},"11":function(container,depth0,helpers,partials,data) {
-    return "";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<td class='code'><label for='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</label></td>\n<td>\n\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(9, data, 0),"data":data})) != null ? stack1 : "")
-    + "\n</td>\n<td class=\"markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td>\n	<span class=\"model-signature\"></span>\n</td>\n";
-},"useData":true});
-templates['param_list'] = template({"1":function(container,depth0,helpers,partials,data) {
-    return " required";
-},"3":function(container,depth0,helpers,partials,data) {
-    return " multiple=\"multiple\"";
-},"5":function(container,depth0,helpers,partials,data) {
-    return " required ";
-},"7":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "      <option "
-    + ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.hasDefault : depth0),{"name":"unless","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + " value=''></option>\n";
-},"8":function(container,depth0,helpers,partials,data) {
-    return "  selected=\"\" ";
-},"10":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "\n      <option "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isDefault : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "  value='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.value : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "'> "
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.value : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + " "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isDefault : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + " </option>\n\n";
-},"11":function(container,depth0,helpers,partials,data) {
-    return " selected=\"\"  ";
-},"13":function(container,depth0,helpers,partials,data) {
-    return " (default) ";
-},"15":function(container,depth0,helpers,partials,data) {
-    return "<strong>";
-},"17":function(container,depth0,helpers,partials,data) {
-    return "</strong>";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<td class='code"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "'><label for='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</label></td>\n<td>\n  <select "
-    + ((stack1 = (helpers.isArray || (depth0 && depth0.isArray) || alias2).call(alias1,depth0,{"name":"isArray","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + " class=\"parameter "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\" name=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" id=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">\n\n"
-    + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n"
-    + ((stack1 = helpers.each.call(alias1,((stack1 = (depth0 != null ? depth0.allowableValues : depth0)) != null ? stack1.descriptiveValues : stack1),{"name":"each","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n  </select>\n</td>\n<td class=\"markdown\">"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.required : depth0),{"name":"if","hash":{},"fn":container.program(17, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "</td>\n<td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
-},"useData":true});
-templates['param_readonly'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "        <textarea class='body-textarea' readonly='readonly' name='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</textarea>\n        <div class=\"parameter-content-type\" />\n";
-},"3":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : "");
-},"4":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "            "
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n";
-},"6":function(container,depth0,helpers,partials,data) {
-    return "            (empty)\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<td class='code'><label for='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</label></td>\n<td>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
-    + "</td>\n<td class=\"markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
-},"useData":true});
-templates['param_readonly_required'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "        <textarea class='body-textarea' readonly='readonly' placeholder='(required)' name='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</textarea>\n";
-},"3":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : "");
-},"4":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "            "
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n";
-},"6":function(container,depth0,helpers,partials,data) {
-    return "            (empty)\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<td class='code required'><label for='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</label></td>\n<td>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "")
-    + "</td>\n<td class=\"markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
-},"useData":true});
-templates['param_required'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "");
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "			<input type=\"file\" name='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'/>\n";
-},"4":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0["default"] : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "");
-},"5":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "				<div class=\"editor_holder\"></div>\n				<textarea class='body-textarea required' placeholder='(required)' name='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id=\""
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0["default"] : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</textarea>\n        <br />\n        <div class=\"parameter-content-type\" />\n";
-},"7":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "				<textarea class='body-textarea required' placeholder='(required)' name='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'></textarea>\n				<div class=\"editor_holder\"></div>\n				<br />\n				<div class=\"parameter-content-type\" />\n";
-},"9":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.isFile : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.program(12, data, 0),"data":data})) != null ? stack1 : "");
-},"10":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "			<input class='parameter required' type='file' name='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'/>\n";
-},"12":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = (helpers.renderTextParam || (depth0 && depth0.renderTextParam) || helpers.helperMissing).call(depth0 != null ? depth0 : {},depth0,{"name":"renderTextParam","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
-},"13":function(container,depth0,helpers,partials,data) {
-    return "";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<td class='code required'><label for='"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.valueId : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "'>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</label></td>\n<td>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isBody : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(9, data, 0),"data":data})) != null ? stack1 : "")
-    + "</td>\n<td>\n	<strong><span class=\"markdown\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</span></strong>\n</td>\n<td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.paramType : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td><span class=\"model-signature\"></span></td>\n";
-},"useData":true});
-templates['parameter_content_type'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.consumes : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "  <option value=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</option>\n";
-},"4":function(container,depth0,helpers,partials,data) {
-    return "  <option value=\"application/json\">application/json</option>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<label for=\""
-    + container.escapeExpression(((helper = (helper = helpers.parameterContentTypeId || (depth0 != null ? depth0.parameterContentTypeId : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"parameterContentTypeId","hash":{},"data":data}) : helper)))
-    + "\" data-sw-translate>Parameter content type:</label>\n<select name=\"parameterContentType\" id=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.parameterContentTypeId : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.consumes : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "")
-    + "</select>\n";
-},"useData":true});
-templates['popup'] = template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var helper;
-
-  return "<div class=\"api-popup-dialog-wrapper\">\n    <div class=\"api-popup-title\">"
-    + container.escapeExpression(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"title","hash":{},"data":data}) : helper)))
-    + "</div>\n    <div class=\"api-popup-content\"></div>\n    <p class=\"error-msg\"></p>\n    <div class=\"api-popup-actions\">\n        <button class=\"api-popup-cancel api-button gray\" type=\"button\">Cancel</button>\n    </div>\n</div>\n<div class=\"api-popup-dialog-shadow\"></div>";
-},"useData":true});
-templates['resource'] = template({"1":function(container,depth0,helpers,partials,data) {
-    return " : ";
-},"3":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "    <li>\n      <a href='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.url : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' data-sw-translate>Raw</a>\n    </li>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, helper, options, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, buffer = 
-  "<div class='heading'>\n  <h2>\n    <a href='#!/"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' class=\"toggleEndpointList\" data-id=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.name : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</a> ";
-  stack1 = ((helper = (helper = helpers.summary || (depth0 != null ? depth0.summary : depth0)) != null ? helper : alias2),(options={"name":"summary","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data}),(typeof helper === "function" ? helper.call(alias1,options) : helper));
-  if (!helpers.summary) { stack1 = helpers.blockHelperMissing.call(depth0,stack1,options)}
-  if (stack1 != null) { buffer += stack1; }
-  return buffer + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.summary : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n  </h2>\n  <ul class='options'>\n    <li>\n      <a href='#!/"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' id='endpointListTogger_"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "' class=\"toggleEndpointList\" data-id=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" data-sw-translate>Show/Hide</a>\n    </li>\n    <li>\n      <a href='#' class=\"collapseResource\" data-id=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" data-sw-translate>\n        List Operations\n      </a>\n    </li>\n    <li>\n      <a href='#' class=\"expandResource\" data-id=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\" data-sw-translate>\n        Expand Operations\n      </a>\n    </li>\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.url : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "  </ul>\n</div>\n<ul class='endpoints' id='"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "_endpoint_list' style='display:none'>\n\n</ul>\n";
-},"useData":true});
-templates['response_content_type'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.produces : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "");
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "  <option value=\""
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "\">"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,depth0,{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</option>\n";
-},"4":function(container,depth0,helpers,partials,data) {
-    return "  <option value=\"application/json\">application/json</option>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression;
-
-  return "<label data-sw-translate for=\""
-    + alias4(((helper = (helper = helpers.responseContentTypeId || (depth0 != null ? depth0.responseContentTypeId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"responseContentTypeId","hash":{},"data":data}) : helper)))
-    + "\">Response Content Type</label>\n<select name=\"responseContentType\" id=\""
-    + alias4(((helper = (helper = helpers.responseContentTypeId || (depth0 != null ? depth0.responseContentTypeId : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"responseContentTypeId","hash":{},"data":data}) : helper)))
-    + "\">\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.produces : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "")
-    + "</select>\n";
-},"useData":true});
-templates['signature'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "\n<div>\n<ul class=\"signature-nav\">\n  <li><a class=\"description-link\" href=\"#\" data-sw-translate>Model</a></li>\n  <li><a class=\"snippet-link\" href=\"#\" data-sw-translate>Example Value</a></li>\n</ul>\n<div>\n\n<div class=\"signature-container\">\n  <div class=\"description\">\n      "
-    + container.escapeExpression((helpers.sanitize || (depth0 && depth0.sanitize) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.signature : depth0),{"name":"sanitize","hash":{},"data":data}))
-    + "\n  </div>\n\n  <div class=\"snippet\">\n"
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.sampleJSON : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.sampleXML : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "  </div>\n</div>\n";
-},"2":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "      <div class=\"snippet_json\">\n        <pre><code>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.sampleJSON : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</code></pre>\n        "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isParam : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n      </div>\n";
-},"3":function(container,depth0,helpers,partials,data) {
-    return "<small class=\"notice\" data-sw-translate></small>";
-},"5":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {};
-
-  return "    <div class=\"snippet_xml\">\n      <pre><code>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.sampleXML : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</code></pre>\n      "
-    + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isParam : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "\n    </div>\n";
-},"7":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return "    "
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.signature : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1;
-
-  return ((stack1 = (helpers.ifCond || (depth0 && depth0.ifCond) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.sampleJSON : depth0),"||",(depth0 != null ? depth0.sampleXML : depth0),{"name":"ifCond","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "");
-},"useData":true});
-templates['status_code'] = template({"1":function(container,depth0,helpers,partials,data) {
-    var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "      <tr>\n        <td>"
-    + container.escapeExpression(((helper = (helper = helpers.key || (data && data.key)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"key","hash":{},"data":data}) : helper)))
-    + "</td>\n        <td>"
-    + ((stack1 = (helpers.sanitize || (depth0 && depth0.sanitize) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"sanitize","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n        <td>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.type : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n      </tr>\n";
-},"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
-    var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing;
-
-  return "<td width='15%' class='code'>"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.code : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td class=\"markdown\">"
-    + ((stack1 = (helpers.escape || (depth0 && depth0.escape) || alias2).call(alias1,(depth0 != null ? depth0.message : depth0),{"name":"escape","hash":{},"data":data})) != null ? stack1 : "")
-    + "</td>\n<td width='50%'><span class=\"model-signature\" /></td>\n<td class=\"headers\">\n  <table>\n    <tbody>\n"
-    + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.headers : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "")
-    + "    </tbody>\n  </table>\n</td>";
-},"useData":true});
-})();} 
- /* jshint ignore:end */
-'use strict';
-
-
-$(function() {
-
-	// Helper function for vertically aligning DOM elements
-	// http://www.seodenver.com/simple-vertical-align-plugin-for-jquery/
-	$.fn.vAlign = function() {
-		return this.each(function(){
-			var ah = $(this).height();
-			var ph = $(this).parent().height();
-			var mh = (ph - ah) / 2;
-			$(this).css('margin-top', mh);
-		});
-	};
-
-	$.fn.stretchFormtasticInputWidthToParent = function() {
-		return this.each(function(){
-			var p_width = $(this).closest("form").innerWidth();
-			var p_padding = parseInt($(this).closest("form").css('padding-left') ,10) + parseInt($(this).closest('form').css('padding-right'), 10);
-			var this_padding = parseInt($(this).css('padding-left'), 10) + parseInt($(this).css('padding-right'), 10);
-			$(this).css('width', p_width - p_padding - this_padding);
-		});
-	};
-
-	$('form.formtastic li.string input, form.formtastic textarea').stretchFormtasticInputWidthToParent();
-
-	// Vertically center these paragraphs
-	// Parent may need a min-height for this to work..
-	$('ul.downplayed li div.content p').vAlign();
-
-	// When a sandbox form is submitted..
-	$("form.sandbox").submit(function(){
-
-		var error_free = true;
-
-		// Cycle through the forms required inputs
- 		$(this).find("input.required").each(function() {
-
-			// Remove any existing error styles from the input
-			$(this).removeClass('error');
-
-			// Tack the error style on if the input is empty..
-			if ($(this).val() === '') {
-				$(this).addClass('error');
-				$(this).wiggle();
-				error_free = false;
-			}
-
-		});
-
-		return error_free;
-	});
-
-});
-
-function clippyCopiedCallback() {
-  $('#api_key_copied').fadeIn().delay(1000).fadeOut();
-
-  // var b = $("#clippy_tooltip_" + a);
-  // b.length != 0 && (b.attr("title", "copied!").trigger("tipsy.reload"), setTimeout(function() {
-  //   b.attr("title", "copy to clipboard")
-  // },
-  // 500))
-}
-
-// Logging function that accounts for browsers that don't have window.console
-function log(){
-  log.history = log.history || [];
-  log.history.push(arguments);
-  if(this.console){
-    console.log( Array.prototype.slice.call(arguments)[0] );
-  }
-}
-
-// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)
-if (Function.prototype.bind && console && typeof console.log === "object") {
-    [
-      "log","info","warn","error","assert","dir","clear","profile","profileEnd"
-    ].forEach(function (method) {
-        console[method] = this.bind(console[method], console);
-    }, Function.prototype.call);
-}
-
-window.Docs = {
-
-	shebang: function() {
-
-		// If shebang has an operation nickname in it..
-		// e.g. /docs/#!/words/get_search
-		var fragments = $.param.fragment().split('/');
-		fragments.shift(); // get rid of the bang
-
-		switch (fragments.length) {
-			case 1:
-        if (fragments[0].length > 0) { // prevent matching "#/"
-          // Expand all operations for the resource and scroll to it
-          var dom_id = 'resource_' + fragments[0];
-
-          Docs.expandEndpointListForResource(fragments[0]);
-          $("#"+dom_id).slideto({highlight: false});
-        }
-				break;
-			case 2:
-				// Refer to the endpoint DOM element, e.g. #words_get_search
-
-        // Expand Resource
-        Docs.expandEndpointListForResource(fragments[0]);
-        $("#"+dom_id).slideto({highlight: false});
-
-            // Expand operation
-            var li_dom_id = fragments.join('_');
-            var li_content_dom_id = li_dom_id + "_content";
-
-
-            Docs.expandOperation($('#'+li_content_dom_id));
-            $('#'+li_dom_id).slideto({highlight: false});
-            break;
-		}
-	},
-
-	toggleEndpointListForResource: function(resource) {
-		var elem = $('li#resource_' + Docs.escapeResourceName(resource) + ' ul.endpoints');
-		if (elem.is(':visible')) {
-			$.bbq.pushState('#/', 2);
-			Docs.collapseEndpointListForResource(resource);
-		} else {
-            $.bbq.pushState('#/' + resource, 2);
-			Docs.expandEndpointListForResource(resource);
-		}
-	},
-
-	// Expand resource
-	expandEndpointListForResource: function(resource) {
-		var resource = Docs.escapeResourceName(resource);
-		if (resource == '') {
-			$('.resource ul.endpoints').slideDown();
-			return;
-		}
-
-		$('li#resource_' + resource).addClass('active');
-
-		var elem = $('li#resource_' + resource + ' ul.endpoints');
-		elem.slideDown();
-	},
-
-	// Collapse resource and mark as explicitly closed
-	collapseEndpointListForResource: function(resource) {
-		var resource = Docs.escapeResourceName(resource);
-		if (resource == '') {
-			$('.resource ul.endpoints').slideUp();
-			return;
-		}
-
-		$('li#resource_' + resource).removeClass('active');
-
-		var elem = $('li#resource_' + resource + ' ul.endpoints');
-		elem.slideUp();
-	},
-
-	expandOperationsForResource: function(resource) {
-		// Make sure the resource container is open..
-		Docs.expandEndpointListForResource(resource);
-
-		if (resource == '') {
-			$('.resource ul.endpoints li.operation div.content').slideDown();
-			return;
-		}
-
-		$('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
-			Docs.expandOperation($(this));
-		});
-	},
-
-	collapseOperationsForResource: function(resource) {
-		// Make sure the resource container is open..
-		Docs.expandEndpointListForResource(resource);
-
-		if (resource == '') {
-			$('.resource ul.endpoints li.operation div.content').slideUp();
-			return;
-		}
-
-		$('li#resource_' + Docs.escapeResourceName(resource) + ' li.operation div.content').each(function() {
-			Docs.collapseOperation($(this));
-		});
-	},
-
-	escapeResourceName: function(resource) {
-		return resource.replace(/[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g, "\\$&");
-	},
-
-	expandOperation: function(elem) {
-		elem.slideDown();
-	},
-
-	collapseOperation: function(elem) {
-		elem.slideUp();
-	}
-};
-
-/*!
- * https://github.com/es-shims/es5-shim
- * @license es5-shim Copyright 2009-2015 by contributors, MIT License
- * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
- */
-
-// vim: ts=4 sts=4 sw=4 expandtab
-
-// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
-;
-
-// UMD (Universal Module Definition)
-// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js
-(function (root, factory) {
-    'use strict';
-
-    /* global define, exports, module */
-    if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
-        define(factory);
-    } else if (typeof exports === 'object') {
-        // Node. Does not work with strict CommonJS, but
-        // only CommonJS-like enviroments that support module.exports,
-        // like Node.
-        module.exports = factory();
-    } else {
-        // Browser globals (root is window)
-        root.returnExports = factory();
-    }
-}(this, function () {
-    /**
-     * Brings an environment as close to ECMAScript 5 compliance
-     * as is possible with the facilities of erstwhile engines.
-     *
-     * Annotated ES5: http://es5.github.com/ (specific links below)
-     * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
-     * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/
-     */
-
-    // Shortcut to an often accessed properties, in order to avoid multiple
-    // dereference that costs universally. This also holds a reference to known-good
-    // functions.
-    var $Array = Array;
-    var ArrayPrototype = $Array.prototype;
-    var $Object = Object;
-    var ObjectPrototype = $Object.prototype;
-    var $Function = Function;
-    var FunctionPrototype = $Function.prototype;
-    var $String = String;
-    var StringPrototype = $String.prototype;
-    var $Number = Number;
-    var NumberPrototype = $Number.prototype;
-    var array_slice = ArrayPrototype.slice;
-    var array_splice = ArrayPrototype.splice;
-    var array_push = ArrayPrototype.push;
-    var array_unshift = ArrayPrototype.unshift;
-    var array_concat = ArrayPrototype.concat;
-    var array_join = ArrayPrototype.join;
-    var call = FunctionPrototype.call;
-    var apply = FunctionPrototype.apply;
-    var max = Math.max;
-    var min = Math.min;
-
-    // Having a toString local variable name breaks in Opera so use to_string.
-    var to_string = ObjectPrototype.toString;
-
-    /* global Symbol */
-    /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */
-    var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
-    var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\/\/.*\n/g, ''); var multiStripped = singleStripped.replace(/\/\*[.\s\S]*\*\//g, ''); var spaceStripped = multiStripped.replace(/\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { ret [...]
-
-    var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
-    var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
-    /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */
-
-    /* inlined from http://npmjs.com/define-properties */
-    var supportsDescriptors = $Object.defineProperty && (function () {
-        try {
-            var obj = {};
-            $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
-            for (var _ in obj) { // jscs:ignore disallowUnusedVariables
-                return false;
-            }
-            return obj.x === obj;
-        } catch (e) { /* this is ES3 */
-            return false;
-        }
-    }());
-    var defineProperties = (function (has) {
-        // Define configurable, writable, and non-enumerable props
-        // if they don't exist.
-        var defineProperty;
-        if (supportsDescriptors) {
-            defineProperty = function (object, name, method, forceAssign) {
-                if (!forceAssign && (name in object)) {
-                    return;
-                }
-                $Object.defineProperty(object, name, {
-                    configurable: true,
-                    enumerable: false,
-                    writable: true,
-                    value: method
-                });
-            };
-        } else {
-            defineProperty = function (object, name, method, forceAssign) {
-                if (!forceAssign && (name in object)) {
-                    return;
-                }
-                object[name] = method;
-            };
-        }
-        return function defineProperties(object, map, forceAssign) {
-            for (var name in map) {
-                if (has.call(map, name)) {
-                    defineProperty(object, name, map[name], forceAssign);
-                }
-            }
-        };
-    }(ObjectPrototype.hasOwnProperty));
-
-    //
-    // Util
-    // ======
-    //
-
-    /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
-    var isPrimitive = function isPrimitive(input) {
-        var type = typeof input;
-        return input === null || (type !== 'object' && type !== 'function');
-    };
-
-    var isActualNaN = $Number.isNaN || function isActualNaN(x) {
-        return x !== x;
-    };
-
-    var ES = {
-        // ES5 9.4
-        // http://es5.github.com/#x9.4
-        // http://jsperf.com/to-integer
-        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
-        ToInteger: function ToInteger(num) {
-            var n = +num;
-            if (isActualNaN(n)) {
-                n = 0;
-            } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
-                n = (n > 0 || -1) * Math.floor(Math.abs(n));
-            }
-            return n;
-        },
-
-        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
-        ToPrimitive: function ToPrimitive(input) {
-            var val, valueOf, toStr;
-            if (isPrimitive(input)) {
-                return input;
-            }
-            valueOf = input.valueOf;
-            if (isCallable(valueOf)) {
-                val = valueOf.call(input);
-                if (isPrimitive(val)) {
-                    return val;
-                }
-            }
-            toStr = input.toString;
-            if (isCallable(toStr)) {
-                val = toStr.call(input);
-                if (isPrimitive(val)) {
-                    return val;
-                }
-            }
-            throw new TypeError();
-        },
-
-        // ES5 9.9
-        // http://es5.github.com/#x9.9
-        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
-        ToObject: function (o) {
-            if (o == null) { // this matches both null and undefined
-                throw new TypeError("can't convert " + o + ' to object');
-            }
-            return $Object(o);
-        },
-
-        /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
-        ToUint32: function ToUint32(x) {
-            return x >>> 0;
-        }
-    };
-
-    //
-    // Function
-    // ========
-    //
-
-    // ES-5 15.3.4.5
-    // http://es5.github.com/#x15.3.4.5
-
-    var Empty = function Empty() {};
-
-    defineProperties(FunctionPrototype, {
-        bind: function bind(that) { // .length is 1
-            // 1. Let Target be the this value.
-            var target = this;
-            // 2. If IsCallable(Target) is false, throw a TypeError exception.
-            if (!isCallable(target)) {
-                throw new TypeError('Function.prototype.bind called on incompatible ' + target);
-            }
-            // 3. Let A be a new (possibly empty) internal list of all of the
-            //   argument values provided after thisArg (arg1, arg2 etc), in order.
-            // XXX slicedArgs will stand in for "A" if used
-            var args = array_slice.call(arguments, 1); // for normal call
-            // 4. Let F be a new native ECMAScript object.
-            // 11. Set the [[Prototype]] internal property of F to the standard
-            //   built-in Function prototype object as specified in 15.3.3.1.
-            // 12. Set the [[Call]] internal property of F as described in
-            //   15.3.4.5.1.
-            // 13. Set the [[Construct]] internal property of F as described in
-            //   15.3.4.5.2.
-            // 14. Set the [[HasInstance]] internal property of F as described in
-            //   15.3.4.5.3.
-            var bound;
-            var binder = function () {
-
-                if (this instanceof bound) {
-                    // 15.3.4.5.2 [[Construct]]
-                    // When the [[Construct]] internal method of a function object,
-                    // F that was created using the bind function is called with a
-                    // list of arguments ExtraArgs, the following steps are taken:
-                    // 1. Let target be the value of F's [[TargetFunction]]
-                    //   internal property.
-                    // 2. If target has no [[Construct]] internal method, a
-                    //   TypeError exception is thrown.
-                    // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
-                    //   property.
-                    // 4. Let args be a new list containing the same values as the
-                    //   list boundArgs in the same order followed by the same
-                    //   values as the list ExtraArgs in the same order.
-                    // 5. Return the result of calling the [[Construct]] internal
-                    //   method of target providing args as the arguments.
-
-                    var result = apply.call(
-                        target,
-                        this,
-                        array_concat.call(args, array_slice.call(arguments))
-                    );
-                    if ($Object(result) === result) {
-                        return result;
-                    }
-                    return this;
-
-                } else {
-                    // 15.3.4.5.1 [[Call]]
-                    // When the [[Call]] internal method of a function object, F,
-                    // which was created using the bind function is called with a
-                    // this value and a list of arguments ExtraArgs, the following
-                    // steps are taken:
-                    // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
-                    //   property.
-                    // 2. Let boundThis be the value of F's [[BoundThis]] internal
-                    //   property.
-                    // 3. Let target be the value of F's [[TargetFunction]] internal
-                    //   property.
-                    // 4. Let args be a new list containing the same values as the
-                    //   list boundArgs in the same order followed by the same
-                    //   values as the list ExtraArgs in the same order.
-                    // 5. Return the result of calling the [[Call]] internal method
-                    //   of target providing boundThis as the this value and
-                    //   providing args as the arguments.
-
-                    // equiv: target.call(this, ...boundArgs, ...args)
-                    return apply.call(
-                        target,
-                        that,
-                        array_concat.call(args, array_slice.call(arguments))
-                    );
-
-                }
-
-            };
-
-            // 15. If the [[Class]] internal property of Target is "Function", then
-            //     a. Let L be the length property of Target minus the length of A.
-            //     b. Set the length own property of F to either 0 or L, whichever is
-            //       larger.
-            // 16. Else set the length own property of F to 0.
-
-            var boundLength = max(0, target.length - args.length);
-
-            // 17. Set the attributes of the length own property of F to the values
-            //   specified in 15.3.5.1.
-            var boundArgs = [];
-            for (var i = 0; i < boundLength; i++) {
-                array_push.call(boundArgs, '$' + i);
-            }
-
-            // XXX Build a dynamic function with desired amount of arguments is the only
-            // way to set the length property of a function.
-            // In environments where Content Security Policies enabled (Chrome extensions,
-            // for ex.) all use of eval or Function costructor throws an exception.
-            // However in all of these environments Function.prototype.bind exists
-            // and so this code will never be executed.
-            bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);
-
-            if (target.prototype) {
-                Empty.prototype = target.prototype;
-                bound.prototype = new Empty();
-                // Clean up dangling references.
-                Empty.prototype = null;
-            }
-
-            // TODO
-            // 18. Set the [[Extensible]] internal property of F to true.
-
-            // TODO
-            // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
-            // 20. Call the [[DefineOwnProperty]] internal method of F with
-            //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
-            //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
-            //   false.
-            // 21. Call the [[DefineOwnProperty]] internal method of F with
-            //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
-            //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
-            //   and false.
-
-            // TODO
-            // NOTE Function objects created using Function.prototype.bind do not
-            // have a prototype property or the [[Code]], [[FormalParameters]], and
-            // [[Scope]] internal properties.
-            // XXX can't delete prototype in pure-js.
-
-            // 22. Return F.
-            return bound;
-        }
-    });
-
-    // _Please note: Shortcuts are defined after `Function.prototype.bind` as we
-    // use it in defining shortcuts.
-    var owns = call.bind(ObjectPrototype.hasOwnProperty);
-    var toStr = call.bind(ObjectPrototype.toString);
-    var arraySlice = call.bind(array_slice);
-    var arraySliceApply = apply.bind(array_slice);
-    var strSlice = call.bind(StringPrototype.slice);
-    var strSplit = call.bind(StringPrototype.split);
-    var strIndexOf = call.bind(StringPrototype.indexOf);
-    var pushCall = call.bind(array_push);
-    var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);
-    var arraySort = call.bind(ArrayPrototype.sort);
-
-    //
-    // Array
-    // =====
-    //
-
-    var isArray = $Array.isArray || function isArray(obj) {
-        return toStr(obj) === '[object Array]';
-    };
-
-    // ES5 15.4.4.12
-    // http://es5.github.com/#x15.4.4.13
-    // Return len+argCount.
-    // [bugfix, ielt8]
-    // IE < 8 bug: [].unshift(0) === undefined but should be "1"
-    var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
-    defineProperties(ArrayPrototype, {
-        unshift: function () {
-            array_unshift.apply(this, arguments);
-            return this.length;
-        }
-    }, hasUnshiftReturnValueBug);
-
-    // ES5 15.4.3.2
-    // http://es5.github.com/#x15.4.3.2
-    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
-    defineProperties($Array, { isArray: isArray });
-
-    // The IsCallable() check in the Array functions
-    // has been replaced with a strict check on the
-    // internal class of the object to trap cases where
-    // the provided function was actually a regular
-    // expression literal, which in V8 and
-    // JavaScriptCore is a typeof "function".  Only in
-    // V8 are regular expression literals permitted as
-    // reduce parameters, so it is desirable in the
-    // general case for the shim to match the more
-    // strict and common behavior of rejecting regular
-    // expressions.
-
-    // ES5 15.4.4.18
-    // http://es5.github.com/#x15.4.4.18
-    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
-
-    // Check failure of by-index access of string characters (IE < 9)
-    // and failure of `0 in boxedString` (Rhino)
-    var boxedString = $Object('a');
-    var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
-
-    var properlyBoxesContext = function properlyBoxed(method) {
-        // Check node 0.6.21 bug where third parameter is not boxed
-        var properlyBoxesNonStrict = true;
-        var properlyBoxesStrict = true;
-        var threwException = false;
-        if (method) {
-            try {
-                method.call('foo', function (_, __, context) {
-                    if (typeof context !== 'object') {
-                        properlyBoxesNonStrict = false;
-                    }
-                });
-
-                method.call([1], function () {
-                    'use strict';
-
-                    properlyBoxesStrict = typeof this === 'string';
-                }, 'x');
-            } catch (e) {
-                threwException = true;
-            }
-        }
-        return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
-    };
-
-    defineProperties(ArrayPrototype, {
-        forEach: function forEach(callbackfn/*, thisArg*/) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var i = -1;
-            var length = ES.ToUint32(self.length);
-            var T;
-            if (arguments.length > 1) {
-                T = arguments[1];
-            }
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.forEach callback must be a function');
-            }
-
-            while (++i < length) {
-                if (i in self) {
-                    // Invoke the callback function with call, passing arguments:
-                    // context, property value, property key, thisArg object
-                    if (typeof T === 'undefined') {
-                        callbackfn(self[i], i, object);
-                    } else {
-                        callbackfn.call(T, self[i], i, object);
-                    }
-                }
-            }
-        }
-    }, !properlyBoxesContext(ArrayPrototype.forEach));
-
-    // ES5 15.4.4.19
-    // http://es5.github.com/#x15.4.4.19
-    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
-    defineProperties(ArrayPrototype, {
-        map: function map(callbackfn/*, thisArg*/) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var length = ES.ToUint32(self.length);
-            var result = $Array(length);
-            var T;
-            if (arguments.length > 1) {
-                T = arguments[1];
-            }
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.map callback must be a function');
-            }
-
-            for (var i = 0; i < length; i++) {
-                if (i in self) {
-                    if (typeof T === 'undefined') {
-                        result[i] = callbackfn(self[i], i, object);
-                    } else {
-                        result[i] = callbackfn.call(T, self[i], i, object);
-                    }
-                }
-            }
-            return result;
-        }
-    }, !properlyBoxesContext(ArrayPrototype.map));
-
-    // ES5 15.4.4.20
-    // http://es5.github.com/#x15.4.4.20
-    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
-    defineProperties(ArrayPrototype, {
-        filter: function filter(callbackfn/*, thisArg*/) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var length = ES.ToUint32(self.length);
-            var result = [];
-            var value;
-            var T;
-            if (arguments.length > 1) {
-                T = arguments[1];
-            }
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.filter callback must be a function');
-            }
-
-            for (var i = 0; i < length; i++) {
-                if (i in self) {
-                    value = self[i];
-                    if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
-                        pushCall(result, value);
-                    }
-                }
-            }
-            return result;
-        }
-    }, !properlyBoxesContext(ArrayPrototype.filter));
-
-    // ES5 15.4.4.16
-    // http://es5.github.com/#x15.4.4.16
-    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
-    defineProperties(ArrayPrototype, {
-        every: function every(callbackfn/*, thisArg*/) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var length = ES.ToUint32(self.length);
-            var T;
-            if (arguments.length > 1) {
-                T = arguments[1];
-            }
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.every callback must be a function');
-            }
-
-            for (var i = 0; i < length; i++) {
-                if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }, !properlyBoxesContext(ArrayPrototype.every));
-
-    // ES5 15.4.4.17
-    // http://es5.github.com/#x15.4.4.17
-    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
-    defineProperties(ArrayPrototype, {
-        some: function some(callbackfn/*, thisArg */) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var length = ES.ToUint32(self.length);
-            var T;
-            if (arguments.length > 1) {
-                T = arguments[1];
-            }
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.some callback must be a function');
-            }
-
-            for (var i = 0; i < length; i++) {
-                if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }, !properlyBoxesContext(ArrayPrototype.some));
-
-    // ES5 15.4.4.21
-    // http://es5.github.com/#x15.4.4.21
-    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
-    var reduceCoercesToObject = false;
-    if (ArrayPrototype.reduce) {
-        reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {
-            return list;
-        }) === 'object';
-    }
-    defineProperties(ArrayPrototype, {
-        reduce: function reduce(callbackfn/*, initialValue*/) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var length = ES.ToUint32(self.length);
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.reduce callback must be a function');
-            }
-
-            // no value to return if no initial value and an empty array
-            if (length === 0 && arguments.length === 1) {
-                throw new TypeError('reduce of empty array with no initial value');
-            }
-
-            var i = 0;
-            var result;
-            if (arguments.length >= 2) {
-                result = arguments[1];
-            } else {
-                do {
-                    if (i in self) {
-                        result = self[i++];
-                        break;
-                    }
-
-                    // if array contains no values, no initial value to return
-                    if (++i >= length) {
-                        throw new TypeError('reduce of empty array with no initial value');
-                    }
-                } while (true);
-            }
-
-            for (; i < length; i++) {
-                if (i in self) {
-                    result = callbackfn(result, self[i], i, object);
-                }
-            }
-
-            return result;
-        }
-    }, !reduceCoercesToObject);
-
-    // ES5 15.4.4.22
-    // http://es5.github.com/#x15.4.4.22
-    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
-    var reduceRightCoercesToObject = false;
-    if (ArrayPrototype.reduceRight) {
-        reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {
-            return list;
-        }) === 'object';
-    }
-    defineProperties(ArrayPrototype, {
-        reduceRight: function reduceRight(callbackfn/*, initial*/) {
-            var object = ES.ToObject(this);
-            var self = splitString && isString(this) ? strSplit(this, '') : object;
-            var length = ES.ToUint32(self.length);
-
-            // If no callback function or if callback is not a callable function
-            if (!isCallable(callbackfn)) {
-                throw new TypeError('Array.prototype.reduceRight callback must be a function');
-            }
-
-            // no value to return if no initial value, empty array
-            if (length === 0 && arguments.length === 1) {
-                throw new TypeError('reduceRight of empty array with no initial value');
-            }
-
-            var result;
-            var i = length - 1;
-            if (arguments.length >= 2) {
-                result = arguments[1];
-            } else {
-                do {
-                    if (i in self) {
-                        result = self[i--];
-                        break;
-                    }
-
-                    // if array contains no values, no initial value to return
-                    if (--i < 0) {
-                        throw new TypeError('reduceRight of empty array with no initial value');
-                    }
-                } while (true);
-            }
-
-            if (i < 0) {
-                return result;
-            }
-
-            do {
-                if (i in self) {
-                    result = callbackfn(result, self[i], i, object);
-                }
-            } while (i--);
-
-            return result;
-        }
-    }, !reduceRightCoercesToObject);
-
-    // ES5 15.4.4.14
-    // http://es5.github.com/#x15.4.4.14
-    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
-    var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
-    defineProperties(ArrayPrototype, {
-        indexOf: function indexOf(searchElement/*, fromIndex */) {
-            var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
-            var length = ES.ToUint32(self.length);
-
-            if (length === 0) {
-                return -1;
-            }
-
-            var i = 0;
-            if (arguments.length > 1) {
-                i = ES.ToInteger(arguments[1]);
-            }
-
-            // handle negative indices
-            i = i >= 0 ? i : max(0, length + i);
-            for (; i < length; i++) {
-                if (i in self && self[i] === searchElement) {
-                    return i;
-                }
-            }
-            return -1;
-        }
-    }, hasFirefox2IndexOfBug);
-
-    // ES5 15.4.4.15
-    // http://es5.github.com/#x15.4.4.15
-    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
-    var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
-    defineProperties(ArrayPrototype, {
-        lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {
-            var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
-            var length = ES.ToUint32(self.length);
-
-            if (length === 0) {
-                return -1;
-            }
-            var i = length - 1;
-            if (arguments.length > 1) {
-                i = min(i, ES.ToInteger(arguments[1]));
-            }
-            // handle negative indices
-            i = i >= 0 ? i : length - Math.abs(i);
-            for (; i >= 0; i--) {
-                if (i in self && searchElement === self[i]) {
-                    return i;
-                }
-            }
-            return -1;
-        }
-    }, hasFirefox2LastIndexOfBug);
-
-    // ES5 15.4.4.12
-    // http://es5.github.com/#x15.4.4.12
-    var spliceNoopReturnsEmptyArray = (function () {
-        var a = [1, 2];
-        var result = a.splice();
-        return a.length === 2 && isArray(result) && result.length === 0;
-    }());
-    defineProperties(ArrayPrototype, {
-        // Safari 5.0 bug where .splice() returns undefined
-        splice: function splice(start, deleteCount) {
-            if (arguments.length === 0) {
-                return [];
-            } else {
-                return array_splice.apply(this, arguments);
-            }
-        }
-    }, !spliceNoopReturnsEmptyArray);
-
-    var spliceWorksWithEmptyObject = (function () {
-        var obj = {};
-        ArrayPrototype.splice.call(obj, 0, 0, 1);
-        return obj.length === 1;
-    }());
-    defineProperties(ArrayPrototype, {
-        splice: function splice(start, deleteCount) {
-            if (arguments.length === 0) {
-                return [];
-            }
-            var args = arguments;
-            this.length = max(ES.ToInteger(this.length), 0);
-            if (arguments.length > 0 && typeof deleteCount !== 'number') {
-                args = arraySlice(arguments);
-                if (args.length < 2) {
-                    pushCall(args, this.length - start);
-                } else {
-                    args[1] = ES.ToInteger(deleteCount);
-                }
-            }
-            return array_splice.apply(this, args);
-        }
-    }, !spliceWorksWithEmptyObject);
-    var spliceWorksWithLargeSparseArrays = (function () {
-        // Per https://github.com/es-shims/es5-shim/issues/295
-        // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
-        var arr = new $Array(1e5);
-        // note: the index MUST be 8 or larger or the test will false pass
-        arr[8] = 'x';
-        arr.splice(1, 1);
-        // note: this test must be defined *after* the indexOf shim
-        // per https://github.com/es-shims/es5-shim/issues/313
-        return arr.indexOf('x') === 7;
-    }());
-    var spliceWorksWithSmallSparseArrays = (function () {
-        // Per https://github.com/es-shims/es5-shim/issues/295
-        // Opera 12.15 breaks on this, no idea why.
-        var n = 256;
-        var arr = [];
-        arr[n] = 'a';
-        arr.splice(n + 1, 0, 'b');
-        return arr[n] === 'a';
-    }());
-    defineProperties(ArrayPrototype, {
-        splice: function splice(start, deleteCount) {
-            var O = ES.ToObject(this);
-            var A = [];
-            var len = ES.ToUint32(O.length);
-            var relativeStart = ES.ToInteger(start);
-            var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
-            var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
-
-            var k = 0;
-            var from;
-            while (k < actualDeleteCount) {
-                from = $String(actualStart + k);
-                if (owns(O, from)) {
-                    A[k] = O[from];
-                }
-                k += 1;
-            }
-
-            var items = arraySlice(arguments, 2);
-            var itemCount = items.length;
-            var to;
-            if (itemCount < actualDeleteCount) {
-                k = actualStart;
-                var maxK = len - actualDeleteCount;
-                while (k < maxK) {
-                    from = $String(k + actualDeleteCount);
-                    to = $String(k + itemCount);
-                    if (owns(O, from)) {
-                        O[to] = O[from];
-                    } else {
-                        delete O[to];
-                    }
-                    k += 1;
-                }
-                k = len;
-                var minK = len - actualDeleteCount + itemCount;
-                while (k > minK) {
-                    delete O[k - 1];
-                    k -= 1;
-                }
-            } else if (itemCount > actualDeleteCount) {
-                k = len - actualDeleteCount;
-                while (k > actualStart) {
-                    from = $String(k + actualDeleteCount - 1);
-                    to = $String(k + itemCount - 1);
-                    if (owns(O, from)) {
-                        O[to] = O[from];
-                    } else {
-                        delete O[to];
-                    }
-                    k -= 1;
-                }
-            }
-            k = actualStart;
-            for (var i = 0; i < items.length; ++i) {
-                O[k] = items[i];
-                k += 1;
-            }
-            O.length = len - actualDeleteCount + itemCount;
-
-            return A;
-        }
-    }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
-
-    var originalJoin = ArrayPrototype.join;
-    var hasStringJoinBug;
-    try {
-        hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';
-    } catch (e) {
-        hasStringJoinBug = true;
-    }
-    if (hasStringJoinBug) {
-        defineProperties(ArrayPrototype, {
-            join: function join(separator) {
-                var sep = typeof separator === 'undefined' ? ',' : separator;
-                return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);
-            }
-        }, hasStringJoinBug);
-    }
-
-    var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';
-    if (hasJoinUndefinedBug) {
-        defineProperties(ArrayPrototype, {
-            join: function join(separator) {
-                var sep = typeof separator === 'undefined' ? ',' : separator;
-                return originalJoin.call(this, sep);
-            }
-        }, hasJoinUndefinedBug);
-    }
-
-    var pushShim = function push(item) {
-        var O = ES.ToObject(this);
-        var n = ES.ToUint32(O.length);
-        var i = 0;
-        while (i < arguments.length) {
-            O[n + i] = arguments[i];
-            i += 1;
-        }
-        O.length = n + i;
-        return n + i;
-    };
-
-    var pushIsNotGeneric = (function () {
-        var obj = {};
-        var result = Array.prototype.push.call(obj, undefined);
-        return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);
-    }());
-    defineProperties(ArrayPrototype, {
-        push: function push(item) {
-            if (isArray(this)) {
-                return array_push.apply(this, arguments);
-            }
-            return pushShim.apply(this, arguments);
-        }
-    }, pushIsNotGeneric);
-
-    // This fixes a very weird bug in Opera 10.6 when pushing `undefined
-    var pushUndefinedIsWeird = (function () {
-        var arr = [];
-        var result = arr.push(undefined);
-        return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);
-    }());
-    defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);
-
-    // ES5 15.2.3.14
-    // http://es5.github.io/#x15.4.4.10
-    // Fix boxed string bug
-    defineProperties(ArrayPrototype, {
-        slice: function (start, end) {
-            var arr = isString(this) ? strSplit(this, '') : this;
-            return arraySliceApply(arr, arguments);
-        }
-    }, splitString);
-
-    var sortIgnoresNonFunctions = (function () {
-        try {
-            [1, 2].sort(null);
-            [1, 2].sort({});
-            return true;
-        } catch (e) {}
-        return false;
-    }());
-    var sortThrowsOnRegex = (function () {
-        // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`
-        try {
-            [1, 2].sort(/a/);
-            return false;
-        } catch (e) {}
-        return true;
-    }());
-    var sortIgnoresUndefined = (function () {
-        // applies in IE 8, for one.
-        try {
-            [1, 2].sort(undefined);
-            return true;
-        } catch (e) {}
-        return false;
-    }());
-    defineProperties(ArrayPrototype, {
-        sort: function sort(compareFn) {
-            if (typeof compareFn === 'undefined') {
-                return arraySort(this);
-            }
-            if (!isCallable(compareFn)) {
-                throw new TypeError('Array.prototype.sort callback must be a function');
-            }
-            return arraySort(this, compareFn);
-        }
-    }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);
-
-    //
-    // Object
-    // ======
-    //
-
-    // ES5 15.2.3.14
-    // http://es5.github.com/#x15.2.3.14
-
-    // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
-    var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString');
-    var hasProtoEnumBug = isEnum(function () {}, 'prototype');
-    var hasStringEnumBug = !owns('x', '0');
-    var equalsConstructorPrototype = function (o) {
-        var ctor = o.constructor;
-        return ctor && ctor.prototype === o;
-    };
-    var blacklistedKeys = {
-        $window: true,
-        $console: true,
-        $parent: true,
-        $self: true,
-        $frame: true,
-        $frames: true,
-        $frameElement: true,
-        $webkitIndexedDB: true,
-        $webkitStorageInfo: true,
-        $external: true
-    };
-    var hasAutomationEqualityBug = (function () {
-        /* globals window */
-        if (typeof window === 'undefined') {
-            return false;
-        }
-        for (var k in window) {
-            try {
-                if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
-                    equalsConstructorPrototype(window[k]);
-                }
-            } catch (e) {
-                return true;
-            }
-        }
-        return false;
-    }());
-    var equalsConstructorPrototypeIfNotBuggy = function (object) {
-        if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
-            return equalsConstructorPrototype(object);
-        }
-        try {
-            return equalsConstructorPrototype(object);
-        } catch (e) {
-            return false;
-        }
-    };
-    var dontEnums = [
-        'toString',
-        'toLocaleString',
-        'valueOf',
-        'hasOwnProperty',
-        'isPrototypeOf',
-        'propertyIsEnumerable',
-        'constructor'
-    ];
-    var dontEnumsLength = dontEnums.length;
-
-    // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
-    // can be replaced with require('is-arguments') if we ever use a build process instead
-    var isStandardArguments = function isArguments(value) {
-        return toStr(value) === '[object Arguments]';
-    };
-    var isLegacyArguments = function isArguments(value) {
-        return value !== null &&
-            typeof value === 'object' &&
-            typeof value.length === 'number' &&
-            value.length >= 0 &&
-            !isArray(value) &&
-            isCallable(value.callee);
-    };
-    var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
-
-    defineProperties($Object, {
-        keys: function keys(object) {
-            var isFn = isCallable(object);
-            var isArgs = isArguments(object);
-            var isObject = object !== null && typeof object === 'object';
-            var isStr = isObject && isString(object);
-
-            if (!isObject && !isFn && !isArgs) {
-                throw new TypeError('Object.keys called on a non-object');
-            }
-
-            var theKeys = [];
-            var skipProto = hasProtoEnumBug && isFn;
-            if ((isStr && hasStringEnumBug) || isArgs) {
-                for (var i = 0; i < object.length; ++i) {
-                    pushCall(theKeys, $String(i));
-                }
-            }
-
-            if (!isArgs) {
-                for (var name in object) {
-                    if (!(skipProto && name === 'prototype') && owns(object, name)) {
-                        pushCall(theKeys, $String(name));
-                    }
-                }
-            }
-
-            if (hasDontEnumBug) {
-                var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
-                for (var j = 0; j < dontEnumsLength; j++) {
-                    var dontEnum = dontEnums[j];
-                    if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
-                        pushCall(theKeys, dontEnum);
-                    }
-                }
-            }
-            return theKeys;
-        }
-    });
-
-    var keysWorksWithArguments = $Object.keys && (function () {
-        // Safari 5.0 bug
-        return $Object.keys(arguments).length === 2;
-    }(1, 2));
-    var keysHasArgumentsLengthBug = $Object.keys && (function () {
-        var argKeys = $Object.keys(arguments);
-        return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;
-    }(1));
-    var originalKeys = $Object.keys;
-    defineProperties($Object, {
-        keys: function keys(object) {
-            if (isArguments(object)) {
-                return originalKeys(arraySlice(object));
-            } else {
-                return originalKeys(object);
-            }
-        }
-    }, !keysWorksWithArguments || keysHasArgumentsLengthBug);
-
-    //
-    // Date
-    // ====
-    //
-
-    var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;
-    var aNegativeTestDate = new Date(-1509842289600292);
-    var aPositiveTestDate = new Date(1449662400000);
-    var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';
-    var hasToDateStringFormatBug;
-    var hasToStringFormatBug;
-    var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();
-    if (timeZoneOffset < -720) {
-        hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';
-        hasToStringFormatBug = !(/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/).test(aPositiveTestDate.toString());
-    } else {
-        hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';
-        hasToStringFormatBug = !(/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/).test(aPositiveTestDate.toString());
-    }
-
-    var originalGetFullYear = call.bind(Date.prototype.getFullYear);
-    var originalGetMonth = call.bind(Date.prototype.getMonth);
-    var originalGetDate = call.bind(Date.prototype.getDate);
-    var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);
-    var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);
-    var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);
-    var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);
-    var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);
-    var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);
-    var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);
-    var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);
-    var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
-    var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
-    var daysInMonth = function daysInMonth(month, year) {
-        return originalGetDate(new Date(year, month, 0));
-    };
-
-    defineProperties(Date.prototype, {
-        getFullYear: function getFullYear() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var year = originalGetFullYear(this);
-            if (year < 0 && originalGetMonth(this) > 11) {
-                return year + 1;
-            }
-            return year;
-        },
-        getMonth: function getMonth() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var year = originalGetFullYear(this);
-            var month = originalGetMonth(this);
-            if (year < 0 && month > 11) {
-                return 0;
-            }
-            return month;
-        },
-        getDate: function getDate() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var year = originalGetFullYear(this);
-            var month = originalGetMonth(this);
-            var date = originalGetDate(this);
-            if (year < 0 && month > 11) {
-                if (month === 12) {
-                    return date;
-                }
-                var days = daysInMonth(0, year + 1);
-                return (days - date) + 1;
-            }
-            return date;
-        },
-        getUTCFullYear: function getUTCFullYear() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var year = originalGetUTCFullYear(this);
-            if (year < 0 && originalGetUTCMonth(this) > 11) {
-                return year + 1;
-            }
-            return year;
-        },
-        getUTCMonth: function getUTCMonth() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var year = originalGetUTCFullYear(this);
-            var month = originalGetUTCMonth(this);
-            if (year < 0 && month > 11) {
-                return 0;
-            }
-            return month;
-        },
-        getUTCDate: function getUTCDate() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var year = originalGetUTCFullYear(this);
-            var month = originalGetUTCMonth(this);
-            var date = originalGetUTCDate(this);
-            if (year < 0 && month > 11) {
-                if (month === 12) {
-                    return date;
-                }
-                var days = daysInMonth(0, year + 1);
-                return (days - date) + 1;
-            }
-            return date;
-        }
-    }, hasNegativeMonthYearBug);
-
-    defineProperties(Date.prototype, {
-        toUTCString: function toUTCString() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var day = originalGetUTCDay(this);
-            var date = originalGetUTCDate(this);
-            var month = originalGetUTCMonth(this);
-            var year = originalGetUTCFullYear(this);
-            var hour = originalGetUTCHours(this);
-            var minute = originalGetUTCMinutes(this);
-            var second = originalGetUTCSeconds(this);
-            return dayName[day] + ', ' +
-                (date < 10 ? '0' + date : date) + ' ' +
-                monthName[month] + ' ' +
-                year + ' ' +
-                (hour < 10 ? '0' + hour : hour) + ':' +
-                (minute < 10 ? '0' + minute : minute) + ':' +
-                (second < 10 ? '0' + second : second) + ' GMT';
-        }
-    }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);
-
-    // Opera 12 has `,`
-    defineProperties(Date.prototype, {
-        toDateString: function toDateString() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var day = this.getDay();
-            var date = this.getDate();
-            var month = this.getMonth();
-            var year = this.getFullYear();
-            return dayName[day] + ' ' +
-                monthName[month] + ' ' +
-                (date < 10 ? '0' + date : date) + ' ' +
-                year;
-        }
-    }, hasNegativeMonthYearBug || hasToDateStringFormatBug);
-
-    // can't use defineProperties here because of toString enumeration issue in IE <= 8
-    if (hasNegativeMonthYearBug || hasToStringFormatBug) {
-        Date.prototype.toString = function toString() {
-            if (!this || !(this instanceof Date)) {
-                throw new TypeError('this is not a Date object.');
-            }
-            var day = this.getDay();
-            var date = this.getDate();
-            var month = this.getMonth();
-            var year = this.getFullYear();
-            var hour = this.getHours();
-            var minute = this.getMinutes();
-            var second = this.getSeconds();
-            var timezoneOffset = this.getTimezoneOffset();
-            var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);
-            var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);
-            return dayName[day] + ' ' +
-                monthName[month] + ' ' +
-                (date < 10 ? '0' + date : date) + ' ' +
-                year + ' ' +
-                (hour < 10 ? '0' + hour : hour) + ':' +
-                (minute < 10 ? '0' + minute : minute) + ':' +
-                (second < 10 ? '0' + second : second) + ' GMT' +
-                (timezoneOffset > 0 ? '-' : '+') +
-                (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset) +
-                (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);
-        };
-        if (supportsDescriptors) {
-            $Object.defineProperty(Date.prototype, 'toString', {
-                configurable: true,
-                enumerable: false,
-                writable: true
-            });
-        }
-    }
-
-    // ES5 15.9.5.43
-    // http://es5.github.com/#x15.9.5.43
-    // This function returns a String value represent the instance in time
-    // represented by this Date object. The format of the String is the Date Time
-    // string format defined in 15.9.1.15. All fields are present in the String.
-    // The time zone is always UTC, denoted by the suffix Z. If the time value of
-    // this object is not a finite Number a RangeError exception is thrown.
-    var negativeDate = -62198755200000;
-    var negativeYearString = '-000001';
-    var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
-    var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
-
-    var getTime = call.bind(Date.prototype.getTime);
-
-    defineProperties(Date.prototype, {
-        toISOString: function toISOString() {
-            if (!isFinite(this) || !isFinite(getTime(this))) {
-                // Adope Photoshop requires the second check.
-                throw new RangeError('Date.prototype.toISOString called on non-finite value.');
-            }
-
-            var year = originalGetUTCFullYear(this);
-
-            var month = originalGetUTCMonth(this);
-            // see https://github.com/es-shims/es5-shim/issues/111
-            year += Math.floor(month / 12);
-            month = (month % 12 + 12) % 12;
-
-            // the date time string format is specified in 15.9.1.15.
-            var result = [month + 1, originalGetUTCDate(this), originalGetUTCHours(this), originalGetUTCMinutes(this), originalGetUTCSeconds(this)];
-            year = (
-                (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
-                strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
-            );
-
-            for (var i = 0; i < result.length; ++i) {
-                // pad months, days, hours, minutes, and seconds to have two digits.
-                result[i] = strSlice('00' + result[i], -2);
-            }
-            // pad milliseconds to have three digits.
-            return (
-                year + '-' + arraySlice(result, 0, 2).join('-') +
-                'T' + arraySlice(result, 2).join(':') + '.' +
-                strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'
-            );
-        }
-    }, hasNegativeDateBug || hasSafari51DateBug);
-
-    // ES5 15.9.5.44
-    // http://es5.github.com/#x15.9.5.44
-    // This function provides a String representation of a Date object for use by
-    // JSON.stringify (15.12.3).
-    var dateToJSONIsSupported = (function () {
-        try {
-            return Date.prototype.toJSON &&
-                new Date(NaN).toJSON() === null &&
-                new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
-                Date.prototype.toJSON.call({ // generic
-                    toISOString: function () { return true; }
-                });
-        } catch (e) {
-            return false;
-        }
-    }());
-    if (!dateToJSONIsSupported) {
-        Date.prototype.toJSON = function toJSON(key) {
-            // When the toJSON method is called with argument key, the following
-            // steps are taken:
-
-            // 1.  Let O be the result of calling ToObject, giving it the this
-            // value as its argument.
-            // 2. Let tv be ES.ToPrimitive(O, hint Number).
-            var O = $Object(this);
-            var tv = ES.ToPrimitive(O);
-            // 3. If tv is a Number and is not finite, return null.
-            if (typeof tv === 'number' && !isFinite(tv)) {
-                return null;
-            }
-            // 4. Let toISO be the result of calling the [[Get]] internal method of
-            // O with argument "toISOString".
-            var toISO = O.toISOString;
-            // 5. If IsCallable(toISO) is false, throw a TypeError exception.
-            if (!isCallable(toISO)) {
-                throw new TypeError('toISOString property is not callable');
-            }
-            // 6. Return the result of calling the [[Call]] internal method of
-            //  toISO with O as the this value and an empty argument list.
-            return toISO.call(O);
-
-            // NOTE 1 The argument is ignored.
-
-            // NOTE 2 The toJSON function is intentionally generic; it does not
-            // require that its this value be a Date object. Therefore, it can be
-            // transferred to other kinds of objects for use as a method. However,
-            // it does require that any such object have a toISOString method. An
-            // object is free to use the argument key to filter its
-            // stringification.
-        };
-    }
-
-    // ES5 15.9.4.2
-    // http://es5.github.com/#x15.9.4.2
-    // based on work shared by Daniel Friesen (dantman)
-    // http://gist.github.com/303249
-    var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
-    var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
-    var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
-    if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
-        // XXX global assignment won't work in embeddings that use
-        // an alternate object for the context.
-        /* global Date: true */
-        /* eslint-disable no-undef */
-        var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;
-        var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());
-        /* eslint-disable no-implicit-globals */
-        Date = (function (NativeDate) {
-        /* eslint-enable no-implicit-globals */
-        /* eslint-enable no-undef */
-            // Date.length === 7
-            var DateShim = function Date(Y, M, D, h, m, s, ms) {
-                var length = arguments.length;
-                var date;
-                if (this instanceof NativeDate) {
-                    var seconds = s;
-                    var millis = ms;
-                    if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
-                        // work around a Safari 8/9 bug where it treats the seconds as signed
-                        var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
-                        var sToShift = Math.floor(msToShift / 1e3);
-                        seconds += sToShift;
-                        millis -= sToShift * 1e3;
-                    }
-                    date = length === 1 && $String(Y) === Y ? // isString(Y)
-                        // We explicitly pass it through parse:
-                        new NativeDate(DateShim.parse(Y)) :
-                        // We have to manually make calls depending on argument
-                        // length here
-                        length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) :
-                        length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) :
-                        length >= 5 ? new NativeDate(Y, M, D, h, m) :
-                        length >= 4 ? new NativeDate(Y, M, D, h) :
-                        length >= 3 ? new NativeDate(Y, M, D) :
-                        length >= 2 ? new NativeDate(Y, M) :
-                        length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y) :
-                                      new NativeDate();
-                } else {
-                    date = NativeDate.apply(this, arguments);
-                }
-                if (!isPrimitive(date)) {
-                    // Prevent mixups with unfixed Date object
-                    defineProperties(date, { constructor: DateShim }, true);
-                }
-                return date;
-            };
-
-            // 15.9.1.15 Date Time String Format.
-            var isoDateExpression = new RegExp('^' +
-                '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
-                                          // 6-digit extended year
-                '(?:-(\\d{2})' + // optional month capture
-                '(?:-(\\d{2})' + // optional day capture
-                '(?:' + // capture hours:minutes:seconds.milliseconds
-                    'T(\\d{2})' + // hours capture
-                    ':(\\d{2})' + // minutes capture
-                    '(?:' + // optional :seconds.milliseconds
-                        ':(\\d{2})' + // seconds capture
-                        '(?:(\\.\\d{1,}))?' + // milliseconds capture
-                    ')?' +
-                '(' + // capture UTC offset component
-                    'Z|' + // UTC capture
-                    '(?:' + // offset specifier +/-hours:minutes
-                        '([-+])' + // sign capture
-                        '(\\d{2})' + // hours offset capture
-                        ':(\\d{2})' + // minutes offset capture
-                    ')' +
-                ')?)?)?)?' +
-            '$');
-
-            var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
-
-            var dayFromMonth = function dayFromMonth(year, month) {
-                var t = month > 1 ? 1 : 0;
-                return (
-                    months[month] +
-                    Math.floor((year - 1969 + t) / 4) -
-                    Math.floor((year - 1901 + t) / 100) +
-                    Math.floor((year - 1601 + t) / 400) +
-                    365 * (year - 1970)
-                );
-            };
-
-            var toUTC = function toUTC(t) {
-                var s = 0;
-                var ms = t;
-                if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {
-                    // work around a Safari 8/9 bug where it treats the seconds as signed
-                    var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
-                    var sToShift = Math.floor(msToShift / 1e3);
-                    s += sToShift;
-                    ms -= sToShift * 1e3;
-                }
-                return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));
-            };
-
-            // Copy any custom methods a 3rd party library may have added
-            for (var key in NativeDate) {
-                if (owns(NativeDate, key)) {
-                    DateShim[key] = NativeDate[key];
-                }
-            }
-
-            // Copy "native" methods explicitly; they may be non-enumerable
-            defineProperties(DateShim, {
-                now: NativeDate.now,
-                UTC: NativeDate.UTC
-            }, true);
-            DateShim.prototype = NativeDate.prototype;
-            defineProperties(DateShim.prototype, {
-                constructor: DateShim
-            }, true);
-
-            // Upgrade Date.parse to handle simplified ISO 8601 strings
-            var parseShim = function parse(string) {
-                var match = isoDateExpression.exec(string);
-                if (match) {
-                    // parse months, days, hours, minutes, seconds, and milliseconds
-                    // provide default values if necessary
-                    // parse the UTC offset component
-                    var year = $Number(match[1]),
-                        month = $Number(match[2] || 1) - 1,
-                        day = $Number(match[3] || 1) - 1,
-                        hour = $Number(match[4] || 0),
-                        minute = $Number(match[5] || 0),
-                        second = $Number(match[6] || 0),
-                        millisecond = Math.floor($Number(match[7] || 0) * 1000),
-                        // When time zone is missed, local offset should be used
-                        // (ES 5.1 bug)
-                        // see https://bugs.ecmascript.org/show_bug.cgi?id=112
-                        isLocalTime = Boolean(match[4] && !match[8]),
-                        signOffset = match[9] === '-' ? 1 : -1,
-                        hourOffset = $Number(match[10] || 0),
-                        minuteOffset = $Number(match[11] || 0),
-                        result;
-                    var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;
-                    if (
-                        hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25) &&
-                        minute < 60 && second < 60 && millisecond < 1000 &&
-                        month > -1 && month < 12 && hourOffset < 24 &&
-                        minuteOffset < 60 && // detect invalid offsets
-                        day > -1 &&
-                        day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))
-                    ) {
-                        result = (
-                            (dayFromMonth(year, month) + day) * 24 +
-                            hour +
-                            hourOffset * signOffset
-                        ) * 60;
-                        result = (
-                            (result + minute + minuteOffset * signOffset) * 60 +
-                            second
-                        ) * 1000 + millisecond;
-                        if (isLocalTime) {
-                            result = toUTC(result);
-                        }
-                        if (-8.64e15 <= result && result <= 8.64e15) {
-                            return result;
-                        }
-                    }
-                    return NaN;
-                }
-                return NativeDate.parse.apply(this, arguments);
-            };
-            defineProperties(DateShim, { parse: parseShim });
-
-            return DateShim;
-        }(Date));
-        /* global Date: false */
-    }
-
-    // ES5 15.9.4.4
-    // http://es5.github.com/#x15.9.4.4
-    if (!Date.now) {
-        Date.now = function now() {
-            return new Date().getTime();
-        };
-    }
-
-    //
-    // Number
-    // ======
-    //
-
-    // ES5.1 15.7.4.5
-    // http://es5.github.com/#x15.7.4.5
-    var hasToFixedBugs = NumberPrototype.toFixed && (
-      (0.00008).toFixed(3) !== '0.000' ||
-      (0.9).toFixed(0) !== '1' ||
-      (1.255).toFixed(2) !== '1.25' ||
-      (1000000000000000128).toFixed(0) !== '1000000000000000128'
-    );
-
-    var toFixedHelpers = {
-        base: 1e7,
-        size: 6,
-        data: [0, 0, 0, 0, 0, 0],
-        multiply: function multiply(n, c) {
-            var i = -1;
-            var c2 = c;
-            while (++i < toFixedHelpers.size) {
-                c2 += n * toFixedHelpers.data[i];
-                toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
-                c2 = Math.floor(c2 / toFixedHelpers.base);
-            }
-        },
-        divide: function divide(n) {
-            var i = toFixedHelpers.size;
-            var c = 0;
-            while (--i >= 0) {
-                c += toFixedHelpers.data[i];
-                toFixedHelpers.data[i] = Math.floor(c / n);
-                c = (c % n) * toFixedHelpers.base;
-            }
-        },
-        numToString: function numToString() {
-            var i = toFixedHelpers.size;
-            var s = '';
-            while (--i >= 0) {
-                if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
-                    var t = $String(toFixedHelpers.data[i]);
-                    if (s === '') {
-                        s = t;
-                    } else {
-                        s += strSlice('0000000', 0, 7 - t.length) + t;
-                    }
-                }
-            }
-            return s;
-        },
-        pow: function pow(x, n, acc) {
-            return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
-        },
-        log: function log(x) {
-            var n = 0;
-            var x2 = x;
-            while (x2 >= 4096) {
-                n += 12;
-                x2 /= 4096;
-            }
-            while (x2 >= 2) {
-                n += 1;
-                x2 /= 2;
-            }
-            return n;
-        }
-    };
-
-    var toFixedShim = function toFixed(fractionDigits) {
-        var f, x, s, m, e, z, j, k;
-
-        // Test for NaN and round fractionDigits down
-        f = $Number(fractionDigits);
-        f = isActualNaN(f) ? 0 : Math.floor(f);
-
-        if (f < 0 || f > 20) {
-            throw new RangeError('Number.toFixed called with invalid number of decimals');
-        }
-
-        x = $Number(this);
-
-        if (isActualNaN(x)) {
-            return 'NaN';
-        }
-
-        // If it is too big or small, return the string value of the number
-        if (x <= -1e21 || x >= 1e21) {
-            return $String(x);
-        }
-
-        s = '';
-
-        if (x < 0) {
-            s = '-';
-            x = -x;
-        }
-
-        m = '0';
-
-        if (x > 1e-21) {
-            // 1e-21 < x < 1e21
-            // -70 < log2(x) < 70
-            e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
-            z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
-            z *= 0x10000000000000; // Math.pow(2, 52);
-            e = 52 - e;
-
-            // -18 < e < 122
-            // x = z / 2 ^ e
-            if (e > 0) {
-                toFixedHelpers.multiply(0, z);
-                j = f;
-
-                while (j >= 7) {
-                    toFixedHelpers.multiply(1e7, 0);
-                    j -= 7;
-                }
-
-                toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
-                j = e - 1;
-
-                while (j >= 23) {
-                    toFixedHelpers.divide(1 << 23);
-                    j -= 23;
-                }
-
-                toFixedHelpers.divide(1 << j);
-                toFixedHelpers.multiply(1, 1);
-                toFixedHelpers.divide(2);
-                m = toFixedHelpers.numToString();
-            } else {
-                toFixedHelpers.multiply(0, z);
-                toFixedHelpers.multiply(1 << (-e), 0);
-                m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
-            }
-        }
-
-        if (f > 0) {
-            k = m.length;
-
-            if (k <= f) {
-                m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
-            } else {
-                m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
-            }
-        } else {
-            m = s + m;
-        }
-
-        return m;
-    };
-    defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);
-
-    var hasToPrecisionUndefinedBug = (function () {
-        try {
-            return 1.0.toPrecision(undefined) === '1';
-        } catch (e) {
-            return true;
-        }
-    }());
-    var originalToPrecision = NumberPrototype.toPrecision;
-    defineProperties(NumberPrototype, {
-        toPrecision: function toPrecision(precision) {
-            return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);
-        }
-    }, hasToPrecisionUndefinedBug);
-
-    //
-    // String
-    // ======
-    //
-
-    // ES5 15.5.4.14
-    // http://es5.github.com/#x15.5.4.14
-
-    // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
-    // Many browsers do not split properly with regular expressions or they
-    // do not perform the split correctly under obscure conditions.
-    // See http://blog.stevenlevithan.com/archives/cross-browser-split
-    // I've tested in many browsers and this seems to cover the deviant ones:
-    //    'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
-    //    '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
-    //    'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
-    //       [undefined, "t", undefined, "e", ...]
-    //    ''.split(/.?/) should be [], not [""]
-    //    '.'.split(/()()/) should be ["."], not ["", "", "."]
-
-    if (
-        'ab'.split(/(?:ab)*/).length !== 2 ||
-        '.'.split(/(.?)(.?)/).length !== 4 ||
-        'tesst'.split(/(s)*/)[1] === 't' ||
-        'test'.split(/(?:)/, -1).length !== 4 ||
-        ''.split(/.?/).length ||
-        '.'.split(/()()/).length > 1
-    ) {
-        (function () {
-            var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
-            var maxSafe32BitInt = Math.pow(2, 32) - 1;
-
-            StringPrototype.split = function (separator, limit) {
-                var string = String(this);
-                if (typeof separator === 'undefined' && limit === 0) {
-                    return [];
-                }
-
-                // If `separator` is not a regex, use native split
-                if (!isRegex(separator)) {
-                    return strSplit(this, separator, limit);
-                }
-
-                var output = [];
-                var flags = (separator.ignoreCase ? 'i' : '') +
-                            (separator.multiline ? 'm' : '') +
-                            (separator.unicode ? 'u' : '') + // in ES6
-                            (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
-                    lastLastIndex = 0,
-                    // Make `global` and avoid `lastIndex` issues by working with a copy
-                    separator2, match, lastIndex, lastLength;
-                var separatorCopy = new RegExp(separator.source, flags + 'g');
-                if (!compliantExecNpcg) {
-                    // Doesn't need flags gy, but they don't hurt
-                    separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
-                }
-                /* Values for `limit`, per the spec:
-                 * If undefined: 4294967295 // maxSafe32BitInt
-                 * If 0, Infinity, or NaN: 0
-                 * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
-                 * If negative number: 4294967296 - Math.floor(Math.abs(limit))
-                 * If other: Type-convert, then use the above rules
-                 */
-                var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);
-                match = separatorCopy.exec(string);
-                while (match) {
-                    // `separatorCopy.lastIndex` is not reliable cross-browser
-                    lastIndex = match.index + match[0].length;
-                    if (lastIndex > lastLastIndex) {
-                        pushCall(output, strSlice(string, lastLastIndex, match.index));
-                        // Fix browsers whose `exec` methods don't consistently return `undefined` for
-                        // nonparticipating capturing groups
-                        if (!compliantExecNpcg && match.length > 1) {
-                            /* eslint-disable no-loop-func */
-                            match[0].replace(separator2, function () {
-                                for (var i = 1; i < arguments.length - 2; i++) {
-                                    if (typeof arguments[i] === 'undefined') {
-                                        match[i] = void 0;
-                                    }
-                                }
-                            });
-                            /* eslint-enable no-loop-func */
-                        }
-                        if (match.length > 1 && match.index < string.length) {
-                            array_push.apply(output, arraySlice(match, 1));
-                        }
-                        lastLength = match[0].length;
-                        lastLastIndex = lastIndex;
-                        if (output.length >= splitLimit) {
-                            break;
-                        }
-                    }
-                    if (separatorCopy.lastIndex === match.index) {
-                        separatorCopy.lastIndex++; // Avoid an infinite loop
-                    }
-                    match = separatorCopy.exec(string);
-                }
-                if (lastLastIndex === string.length) {
-                    if (lastLength || !separatorCopy.test('')) {
-                        pushCall(output, '');
-                    }
-                } else {
-                    pushCall(output, strSlice(string, lastLastIndex));
-                }
-                return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;
-            };
-        }());
-
-    // [bugfix, chrome]
-    // If separator is undefined, then the result array contains just one String,
-    // which is the this value (converted to a String). If limit is not undefined,
-    // then the output array is truncated so that it contains no more than limit
-    // elements.
-    // "0".split(undefined, 0) -> []
-    } else if ('0'.split(void 0, 0).length) {
-        StringPrototype.split = function split(separator, limit) {
-            if (typeof separator === 'undefined' && limit === 0) {
-                return [];
-            }
-            return strSplit(this, separator, limit);
-        };
-    }
-
-    var str_replace = StringPrototype.replace;
-    var replaceReportsGroupsCorrectly = (function () {
-        var groups = [];
-        'x'.replace(/x(.)?/g, function (match, group) {
-            pushCall(groups, group);
-        });
-        return groups.length === 1 && typeof groups[0] === 'undefined';
-    }());
-
-    if (!replaceReportsGroupsCorrectly) {
-        StringPrototype.replace = function replace(searchValue, replaceValue) {
-            var isFn = isCallable(replaceValue);
-            var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
-            if (!isFn || !hasCapturingGroups) {
-                return str_replace.call(this, searchValue, replaceValue);
-            } else {
-                var wrappedReplaceValue = function (match) {
-                    var length = arguments.length;
-                    var originalLastIndex = searchValue.lastIndex;
-                    searchValue.lastIndex = 0;
-                    var args = searchValue.exec(match) || [];
-                    searchValue.lastIndex = originalLastIndex;
-                    pushCall(args, arguments[length - 2], arguments[length - 1]);
-                    return replaceValue.apply(this, args);
-                };
-                return str_replace.call(this, searchValue, wrappedReplaceValue);
-            }
-        };
-    }
-
-    // ECMA-262, 3rd B.2.3
-    // Not an ECMAScript standard, although ECMAScript 3rd Edition has a
-    // non-normative section suggesting uniform semantics and it should be
-    // normalized across all browsers
-    // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
-    var string_substr = StringPrototype.substr;
-    var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
-    defineProperties(StringPrototype, {
-        substr: function substr(start, length) {
-            var normalizedStart = start;
-            if (start < 0) {
-                normalizedStart = max(this.length + start, 0);
-            }
-            return string_substr.call(this, normalizedStart, length);
-        }
-    }, hasNegativeSubstrBug);
-
-    // ES5 15.5.4.20
-    // whitespace from: http://es5.github.io/#x15.5.4.20
-    var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
-        '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
-        '\u2029\uFEFF';
-    var zeroWidth = '\u200b';
-    var wsRegexChars = '[' + ws + ']';
-    var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
-    var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
-    var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
-    defineProperties(StringPrototype, {
-        // http://blog.stevenlevithan.com/archives/faster-trim-javascript
-        // http://perfectionkills.com/whitespace-deviations/
-        trim: function trim() {
-            if (typeof this === 'undefined' || this === null) {
-                throw new TypeError("can't convert " + this + ' to object');
-            }
-            return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
-        }
-    }, hasTrimWhitespaceBug);
-    var trim = call.bind(String.prototype.trim);
-
-    var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;
-    defineProperties(StringPrototype, {
-        lastIndexOf: function lastIndexOf(searchString) {
-            if (typeof this === 'undefined' || this === null) {
-                throw new TypeError("can't convert " + this + ' to object');
-            }
-            var S = $String(this);
-            var searchStr = $String(searchString);
-            var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;
-            var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);
-            var start = min(max(pos, 0), S.length);
-            var searchLen = searchStr.length;
-            var k = start + searchLen;
-            while (k > 0) {
-                k = max(0, k - searchLen);
-                var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);
-                if (index !== -1) {
-                    return k + index;
-                }
-            }
-            return -1;
-        }
-    }, hasLastIndexBug);
-
-    var originalLastIndexOf = StringPrototype.lastIndexOf;
-    defineProperties(StringPrototype, {
-        lastIndexOf: function lastIndexOf(searchString) {
-            return originalLastIndexOf.apply(this, arguments);
-        }
-    }, StringPrototype.lastIndexOf.length !== 1);
-
-    // ES-5 15.1.2.2
-    /* eslint-disable radix */
-    if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
-    /* eslint-enable radix */
-        /* global parseInt: true */
-        parseInt = (function (origParseInt) {
-            var hexRegex = /^[\-+]?0[xX]/;
-            return function parseInt(str, radix) {
-                var string = trim(String(str));
-                var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
-                return origParseInt(string, defaultedRadix);
-            };
-        }(parseInt));
-    }
-
-    // https://es5.github.io/#x15.1.2.3
-    if (1 / parseFloat('-0') !== -Infinity) {
-        /* global parseFloat: true */
-        parseFloat = (function (origParseFloat) {
-            return function parseFloat(string) {
-                var inputString = trim(String(string));
-                var result = origParseFloat(inputString);
-                return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;
-            };
-        }(parseFloat));
-    }
-
-    if (String(new RangeError('test')) !== 'RangeError: test') {
-        var errorToStringShim = function toString() {
-            if (typeof this === 'undefined' || this === null) {
-                throw new TypeError("can't convert " + this + ' to object');
-            }
-            var name = this.name;
-            if (typeof name === 'undefined') {
-                name = 'Error';
-            } else if (typeof name !== 'string') {
-                name = $String(name);
-            }
-            var msg = this.message;
-            if (typeof msg === 'undefined') {
-                msg = '';
-            } else if (typeof msg !== 'string') {
-                msg = $String(msg);
-            }
-            if (!name) {
-                return msg;
-            }
-            if (!msg) {
-                return name;
-            }
-            return name + ': ' + msg;
-        };
-        // can't use defineProperties here because of toString enumeration issue in IE <= 8
-        Error.prototype.toString = errorToStringShim;
-    }
-
-    if (supportsDescriptors) {
-        var ensureNonEnumerable = function (obj, prop) {
-            if (isEnum(obj, prop)) {
-                var desc = Object.getOwnPropertyDescriptor(obj, prop);
-                if (desc.configurable) {
-                    desc.enumerable = false;
-                    Object.defineProperty(obj, prop, desc);
-                }
-            }
-        };
-        ensureNonEnumerable(Error.prototype, 'message');
-        if (Error.prototype.message !== '') {
-            Error.prototype.message = '';
-        }
-        ensureNonEnumerable(Error.prototype, 'name');
-    }
-
-    if (String(/a/mig) !== '/a/gim') {
-        var regexToString = function toString() {
-            var str = '/' + this.source + '/';
-            if (this.global) {
-                str += 'g';
-            }
-            if (this.ignoreCase) {
-                str += 'i';
-            }
-            if (this.multiline) {
-                str += 'm';
-            }
-            return str;
-        };
-        // can't use defineProperties here because of toString enumeration issue in IE <= 8
-        RegExp.prototype.toString = regexToString;
-    }
-}));
-
-'use strict';
-/*jslint eqeq: true*/
-
-Handlebars.registerHelper('sanitize', function (text) {
-    var result;
-
-    if (text === undefined) { return ''; }
-
-    result = sanitizeHtml(text, {
-        allowedTags: [ 'div', 'span', 'b', 'i', 'em', 'strong', 'a', 'br', 'table', 'tbody', 'tr', 'th', 'td' ],
-        allowedAttributes: {
-            'div': [ 'class' ],
-            'span': [ 'class' ],
-            'table': [ 'class' ],
-            'td': [ 'class' ],
-            'th': [ 'colspan' ],
-            'a': [ 'href' ]
-        }
-    });
-
-    return new Handlebars.SafeString(result);
-});
-
-Handlebars.registerHelper('renderTextParam', function(param) {
-    var result, type = 'text', idAtt = '';
-    var paramType = param.type || param.schema && param.schema.type || '';
-    var isArray = paramType.toLowerCase() === 'array' || param.allowMultiple;
-    var defaultValue = isArray && Array.isArray(param.default) ? param.default.join('\n') : param.default;
-    var name = Handlebars.Utils.escapeExpression(param.name);
-    var valueId = Handlebars.Utils.escapeExpression(param.valueId);
-    paramType = Handlebars.Utils.escapeExpression(paramType);
-
-    var dataVendorExtensions = Object.keys(param).filter(function(property) {
-        // filter X-data- properties
-        return property.match(/^X-data-/i) !== null;
-    }).reduce(function(result, property) {
-        // remove X- from property name, so it results in html attributes like data-foo='bar'
-        return result += ' ' + property.substring(2, property.length) + '=\'' + param[property] + '\'';
-    }, '');
-
-    if(param.format && param.format === 'password') {
-        type = 'password';
-    }
-
-    if(valueId) {
-        idAtt = ' id=\'' + valueId + '\'';
-    }
-
-    if (defaultValue) {
-      defaultValue = sanitizeHtml(defaultValue);
-    } else {
-      defaultValue = '';
-    }
-
-    if(isArray) {
-        result = '<textarea class=\'body-textarea' + (param.required ? ' required' : '') + '\' name=\'' + name + '\'' + idAtt + dataVendorExtensions;
-        result += ' placeholder=\'Provide multiple values in new lines' + (param.required ? ' (at least one required).' : '.') + '\'>';
-        result += defaultValue + '</textarea>';
-    } else {
-        var parameterClass = 'parameter';
-        if(param.required) {
-          parameterClass += ' required';
-        }
-        result = '<input class=\'' + parameterClass + '\' minlength=\'' + (param.required ? 1 : 0) + '\'';
-        result += ' name=\'' + name +'\' placeholder=\'' + (param.required ? '(required)' : '') + '\'' + idAtt + dataVendorExtensions;
-        result += ' type=\'' + type + '\' value=\'' + defaultValue + '\'/>';
-    }
-    return new Handlebars.SafeString(result);
-});
-
-Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
-
-    switch (operator) {
-        case '==':
-            return (v1 == v2) ? options.fn(this) : options.inverse(this);
-        case '===':
-            return (v1 === v2) ? options.fn(this) : options.inverse(this);
-        case '<':
-            return (v1 < v2) ? options.fn(this) : options.inverse(this);
-        case '<=':
-            return (v1 <= v2) ? options.fn(this) : options.inverse(this);
-        case '>':
-            return (v1 > v2) ? options.fn(this) : options.inverse(this);
-        case '>=':
-            return (v1 >= v2) ? options.fn(this) : options.inverse(this);
-        case '&&':
-            return (v1 && v2) ? options.fn(this) : options.inverse(this);
-        case '||':
-            return (v1 || v2) ? options.fn(this) : options.inverse(this);
-        default:
-            return options.inverse(this);
-    }
-});
-
-Handlebars.registerHelper('escape', function (value) {
-    var text = Handlebars.Utils.escapeExpression(value);
-
-    return new Handlebars.SafeString(text);
-});
-
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sanitizeHtml=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if [...]
-var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset [...]
-}}module.exports={XML:decodeXMLStrict,HTML:decodeHTML,HTMLStrict:decodeHTMLStrict}},{"../maps/entities.json":25,"../maps/legacy.json":26,"../maps/xml.json":27,"./decode_codepoint.js":22}],22:[function(require,module,exports){var decodeMap=require("../maps/decode.json");module.exports=decodeCodePoint;function decodeCodePoint(codePoint){if(codePoint>=55296&&codePoint<=57343||codePoint>1114111){return"�"}if(codePoint in decodeMap){codePoint=decodeMap[codePoint]}var output="";if(codePoint>65 [...]
-}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._e [...]
-this._cbs.ontext(data)}};Tokenizer.prototype.reset=function(){Tokenizer.call(this,{xmlMode:this._xmlMode,decodeEntities:this._decodeEntities},this._cbs)};Tokenizer.prototype.getAbsoluteIndex=function(){return this._bufferOffset+this._index};Tokenizer.prototype._getSection=function(){return this._buffer.substring(this._sectionStart,this._index)};Tokenizer.prototype._emitToken=function(name){this._cbs[name](this._getSection());this._sectionStart=-1};Tokenizer.prototype._emitPartial=functio [...]
-state.pendingcb++;ret=writeOrBuffer(this,state,chunk,encoding,cb)}return ret};Writable.prototype.cork=function(){var state=this._writableState;state.corked++};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state)}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){if(typeof encoding==="string")enco [...]
-
-/**
- * swagger-client - swagger-client is a javascript client for use with swaggering APIs.
- * @version v2.1.29
- * @link http://swagger.io
- * @license Apache-2.0
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.SwaggerClient = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0 [...]
-'use strict';
-
-var auth = require('./lib/auth');
-var helpers = require('./lib/helpers');
-var SwaggerClient = require('./lib/client');
-var deprecationWrapper = function (url, options) {
-  helpers.log('This is deprecated, use "new SwaggerClient" instead.');
-
-  return new SwaggerClient(url, options);
-};
-
-/* Here for IE8 Support */
-if (!Array.prototype.indexOf) {
-  Array.prototype.indexOf = function(obj, start) {
-    for (var i = (start || 0), j = this.length; i < j; i++) {
-      if (this[i] === obj) { return i; }
-    }
-    return -1;
-  };
-}
-
-/* Here for IE8 Support */
-if (!String.prototype.trim) {
-  String.prototype.trim = function () {
-    return this.replace(/^\s+|\s+$/g, '');
-  };
-}
-
-/* Here for node 10.x support */
-if (!String.prototype.endsWith) {
-  String.prototype.endsWith = function(suffix) {
-    return this.indexOf(suffix, this.length - suffix.length) !== -1;
-  };
-}
-
-module.exports = SwaggerClient;
-
-SwaggerClient.ApiKeyAuthorization = auth.ApiKeyAuthorization;
-SwaggerClient.PasswordAuthorization = auth.PasswordAuthorization;
-SwaggerClient.CookieAuthorization = auth.CookieAuthorization;
-SwaggerClient.SwaggerApi = deprecationWrapper;
-SwaggerClient.SwaggerClient = deprecationWrapper;
-SwaggerClient.SchemaMarkup = require('./lib/schema-markup');
-
-},{"./lib/auth":2,"./lib/client":3,"./lib/helpers":4,"./lib/schema-markup":7}],2:[function(require,module,exports){
-'use strict';
-
-var helpers = require('./helpers');
-var btoa = require('btoa'); // jshint ignore:line
-var CookieJar = require('cookiejar').CookieJar;
-var _ = {
-  each: require('lodash-compat/collection/each'),
-  includes: require('lodash-compat/collection/includes'),
-  isObject: require('lodash-compat/lang/isObject'),
-  isArray: require('lodash-compat/lang/isArray')
-};
-
-/**
- * SwaggerAuthorizations applies the correct authorization to an operation being executed
- */
-var SwaggerAuthorizations = module.exports.SwaggerAuthorizations = function (authz) {
-  this.authz = authz || {};
-};
-
-/**
- * Add auths to the hash
- * Will overwrite any existing
- *
- */
-SwaggerAuthorizations.prototype.add = function (name, auth) {
-  if(_.isObject(name)) {
-    for (var key in name) {
-      this.authz[key] = name[key];
-    }
-  } else if(typeof name === 'string' ){
-    this.authz[name] = auth;
-  }
-
-  return auth;
-};
-
-SwaggerAuthorizations.prototype.remove = function (name) {
-  return delete this.authz[name];
-};
-
-SwaggerAuthorizations.prototype.apply = function (obj, securities) {
-  var status = true;
-  var applyAll = !securities;
-  var flattenedSecurities = [];
-
-  // favor the object-level authorizations over global
-  var authz = obj.clientAuthorizations || this.authz;
-
-  // Securities could be [ {} ]
-  _.each(securities, function (obj, key) {
-
-    // Make sure we account for securities being [ str ]
-    if(typeof key === 'string') {
-      flattenedSecurities.push(key);
-    }
-
-    // Flatten keys in to our array
-    _.each(obj, function (val, key) {
-      flattenedSecurities.push(key);
-    });
-  });
-
-  _.each(authz, function (auth, authName) {
-    if(applyAll || _.includes(flattenedSecurities, authName)) {
-      var newStatus = auth.apply(obj);
-      status = status && !!newStatus; // logical ORs regarding status
-    }
-  });
-
-  return status;
-};
-
-/**
- * ApiKeyAuthorization allows a query param or header to be injected
- */
-var ApiKeyAuthorization = module.exports.ApiKeyAuthorization = function (name, value, type) {
-  this.name = name;
-  this.value = value;
-  this.type = type;
-};
-
-ApiKeyAuthorization.prototype.apply = function (obj) {
-  if (this.type === 'query') {
-    // see if already applied.  If so, don't do it again
-
-    var qp;
-    if (obj.url.indexOf('?') > 0) {
-      qp = obj.url.substring(obj.url.indexOf('?') + 1);
-      var parts = qp.split('&');
-      if(parts && parts.length > 0) {
-        for(var i = 0; i < parts.length; i++) {
-          var kv = parts[i].split('=');
-          if(kv && kv.length > 0) {
-            if (kv[0] === this.name) {
-              // skip it
-              return false;
-            }
-          }
-        }
-      }
-    }
-
-    if (obj.url.indexOf('?') > 0) {
-      obj.url = obj.url + '&' + this.name + '=' + this.value;
-    } else {
-      obj.url = obj.url + '?' + this.name + '=' + this.value;
-    }
-
-    return true;
-  } else if (this.type === 'header') {
-    if(typeof obj.headers[this.name] === 'undefined') {
-      obj.headers[this.name] = this.value;
-    }
-
-    return true;
-  }
-};
-
-var CookieAuthorization = module.exports.CookieAuthorization = function (cookie) {
-  this.cookie = cookie;
-};
-
-CookieAuthorization.prototype.apply = function (obj) {
-  obj.cookieJar = obj.cookieJar || new CookieJar();
-  obj.cookieJar.setCookie(this.cookie);
-
-  return true;
-};
-
-/**
- * Password Authorization is a basic auth implementation
- */
-var PasswordAuthorization = module.exports.PasswordAuthorization = function (username, password) {
-  if (arguments.length === 3) {
-    helpers.log('PasswordAuthorization: the \'name\' argument has been removed, pass only username and password');
-    username = arguments[1];
-    password = arguments[2];
-  }
-  this.username = username;
-  this.password = password;
-};
-
-PasswordAuthorization.prototype.apply = function (obj) {
-  if(typeof obj.headers.Authorization === 'undefined') {
-    obj.headers.Authorization = 'Basic ' + btoa(this.username + ':' + this.password);
-  }
-
-  return true;
-};
-
-},{"./helpers":4,"btoa":13,"cookiejar":18,"lodash-compat/collection/each":52,"lodash-compat/collection/includes":55,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isObject":144}],3:[function(require,module,exports){
-'use strict';
-
-var _ = {
-  bind: require('lodash-compat/function/bind'),
-  cloneDeep: require('lodash-compat/lang/cloneDeep'),
-  find: require('lodash-compat/collection/find'),
-  forEach: require('lodash-compat/collection/forEach'),
-  indexOf: require('lodash-compat/array/indexOf'),
-  isArray: require('lodash-compat/lang/isArray'),
-  isObject: require('lodash-compat/lang/isObject'),
-  isFunction: require('lodash-compat/lang/isFunction'),
-  isPlainObject: require('lodash-compat/lang/isPlainObject'),
-  isUndefined: require('lodash-compat/lang/isUndefined')
-};
-var auth = require('./auth');
-var helpers = require('./helpers');
-var Model = require('./types/model');
-var Operation = require('./types/operation');
-var OperationGroup = require('./types/operationGroup');
-var Resolver = require('./resolver');
-var SwaggerHttp = require('./http');
-var SwaggerSpecConverter = require('./spec-converter');
-var Q = require('q');
-
-// We have to keep track of the function/property names to avoid collisions for tag names which are used to allow the
-// following usage: 'client.{tagName}'
-var reservedClientTags = [
-  'apis',
-  'authorizationScheme',
-  'authorizations',
-  'basePath',
-  'build',
-  'buildFrom1_1Spec',
-  'buildFrom1_2Spec',
-  'buildFromSpec',
-  'clientAuthorizations',
-  'convertInfo',
-  'debug',
-  'defaultErrorCallback',
-  'defaultSuccessCallback',
-  'enableCookies',
-  'fail',
-  'failure',
-  'finish',
-  'help',
-  'host',
-  'idFromOp',
-  'info',
-  'initialize',
-  'isBuilt',
-  'isValid',
-  'modelPropertyMacro',
-  'models',
-  'modelsArray',
-  'options',
-  'parameterMacro',
-  'parseUri',
-  'progress',
-  'resourceCount',
-  'sampleModels',
-  'selfReflect',
-  'setConsolidatedModels',
-  'spec',
-  'supportedSubmitMethods',
-  'swaggerRequestHeaders',
-  'tagFromLabel',
-  'title',
-  'url',
-  'useJQuery',
-  'jqueryAjaxCache'
-];
-// We have to keep track of the function/property names to avoid collisions for tag names which are used to allow the
-// following usage: 'client.apis.{tagName}'
-var reservedApiTags = [
-  'apis',
-  'asCurl',
-  'description',
-  'externalDocs',
-  'help',
-  'label',
-  'name',
-  'operation',
-  'operations',
-  'operationsArray',
-  'path',
-  'tag'
-];
-var supportedOperationMethods = ['delete', 'get', 'head', 'options', 'patch', 'post', 'put'];
-var SwaggerClient = module.exports = function (url, options) {
-  this.authorizations = null;
-  this.authorizationScheme = null;
-  this.basePath = null;
-  this.debug = false;
-  this.enableCookies = false;
-  this.info = null;
-  this.isBuilt = false;
-  this.isValid = false;
-  this.modelsArray = [];
-  this.resourceCount = 0;
-  this.url = null;
-  this.useJQuery = false;
-  this.jqueryAjaxCache = false;
-  this.swaggerObject = {};
-  this.deferredClient = undefined;
-
-  this.clientAuthorizations = new auth.SwaggerAuthorizations();
-
-  if (typeof url !== 'undefined') {
-    return this.initialize(url, options);
-  } else {
-    return this;
-  }
-};
-
-SwaggerClient.prototype.initialize = function (url, options) {
-  this.models = {};
-  this.sampleModels = {};
-
-  if (typeof url === 'string') {
-    this.url = url;
-  } else if (_.isObject(url)) {
-    options = url;
-    this.url = options.url;
-  }
-
-  if(this.url && this.url.indexOf('http:') === -1 && this.url.indexOf('https:') === -1) {
-    // no protocol, so we can only use window if it exists
-    if(typeof(window) !== 'undefined' && window && window.location) {
-      this.url = window.location.origin + this.url;
-    }
-  }
-
-  options = options || {};
-  this.clientAuthorizations.add(options.authorizations);
-  this.swaggerRequestHeaders = options.swaggerRequestHeaders || 'application/json;charset=utf-8,*/*';
-  this.defaultSuccessCallback = options.defaultSuccessCallback || null;
-  this.defaultErrorCallback = options.defaultErrorCallback || null;
-  this.modelPropertyMacro = options.modelPropertyMacro || null;
-  this.connectionAgent = options.connectionAgent || null;
-  this.parameterMacro = options.parameterMacro || null;
-  this.usePromise = options.usePromise || null;
-
-  // operation request timeout default
-  this.timeout = options.timeout || null;
-  // default to request timeout when not specified
-  this.fetchSpecTimeout = typeof options.fetchSpecTimeout !== 'undefined' ?
-      options.fetchSpecTimeout : options.timeout || null;
-
-  if(this.usePromise) {
-    this.deferredClient = Q.defer();
-  }
-
-  if (typeof options.success === 'function') {
-    this.success = options.success;
-  }
-  if (options.useJQuery) {
-    this.useJQuery = options.useJQuery;
-  }
-
-  if (options.jqueryAjaxCache) {
-    this.jqueryAjaxCache = options.jqueryAjaxCache;
-  }
-
-  if (options.enableCookies) {
-    this.enableCookies = options.enableCookies;
-  }
-
-  this.options = options || {};
-
-  // maybe don't need this?
-  this.options.timeout = this.timeout;
-  this.options.fetchSpecTimeout = this.fetchSpecTimeout;
-
-  this.supportedSubmitMethods = options.supportedSubmitMethods || [];
-  this.failure = options.failure || function (err) { throw err; };
-  this.progress = options.progress || function () {};
-  this.spec = _.cloneDeep(options.spec); // Clone so we do not alter the provided document
-
-  if (options.scheme) {
-    this.scheme = options.scheme;
-  }
-
-  if (this.usePromise || typeof options.success === 'function') {
-    this.ready = true;
-    return this.build();
-  }
-};
-
-SwaggerClient.prototype.build = function (mock) {
-  if (this.isBuilt) {
-    return this;
-  }
-
-  var self = this;
-
-  if (this.spec) {
-    this.progress('fetching resource list; Please wait.');
-  } else {
-    this.progress('fetching resource list: ' + this.url + '; Please wait.');
-  }
-
-  var obj = {
-    useJQuery: this.useJQuery,
-    jqueryAjaxCache: this.jqueryAjaxCache,
-    connectionAgent: this.connectionAgent,
-    enableCookies: this.enableCookies,
-    url: this.url,
-    method: 'get',
-    headers: {
-      accept: this.swaggerRequestHeaders
-    },
-    on: {
-      error: function (response) {
-        if (self.url.substring(0, 4) !== 'http') {
-          return self.fail('Please specify the protocol for ' + self.url);
-        } else if (response.errObj && (response.errObj.code === 'ECONNABORTED' || response.errObj.message.indexOf('timeout') !== -1)) {
-          return self.fail('Request timed out after ' + self.fetchSpecTimeout + 'ms');
-        } else if (response.status === 0) {
-          return self.fail('Can\'t read from server.  It may not have the appropriate access-control-origin settings.');
-        } else if (response.status === 404) {
-          return self.fail('Can\'t read swagger JSON from ' + self.url);
-        } else {
-          return self.fail(response.status + ' : ' + response.statusText + ' ' + self.url);
-        }
-      },
-      response: function (resp) {
-
-        var responseObj = resp.obj;
-        if(!responseObj) {
-          return self.fail('failed to parse JSON/YAML response');
-        }
-
-        self.swaggerVersion = responseObj.swaggerVersion;
-        self.swaggerObject = responseObj;
-
-        if (responseObj.swagger && parseInt(responseObj.swagger) === 2) {
-          self.swaggerVersion = responseObj.swagger;
-
-          new Resolver().resolve(responseObj, self.url, self.buildFromSpec, self);
-
-          self.isValid = true;
-        } else {
-          var converter = new SwaggerSpecConverter();
-          self.oldSwaggerObject = self.swaggerObject;
-
-          converter.setDocumentationLocation(self.url);
-          converter.convert(responseObj, self.clientAuthorizations, self.options, function(spec) {
-            self.swaggerObject = spec;
-            new Resolver().resolve(spec, self.url, self.buildFromSpec, self);
-            self.isValid = true;
-          });
-        }
-      }
-    }
-  };
-
-  // only set timeout when specified
-  if (this.fetchSpecTimeout) {
-    obj.timeout = this.fetchSpecTimeout;
-  }
-
-  if (this.spec) {
-    self.swaggerObject = this.spec;
-    setTimeout(function () {
-      new Resolver().resolve(self.spec, self.url, self.buildFromSpec, self);
-    }, 10);
-  } else {
-    this.clientAuthorizations.apply(obj);
-
-    if (mock) {
-      return obj;
-    }
-
-    new SwaggerHttp().execute(obj, this.options);
-  }
-
-  return (this.usePromise) ? this.deferredClient.promise : this;
-};
-
-SwaggerClient.prototype.buildFromSpec = function (response) {
-  if (this.isBuilt) {
-    return this;
-  }
-
-  this.apis = {};
-  this.apisArray = [];
-  this.basePath = response.basePath || '';
-  this.consumes = response.consumes;
-  this.host = response.host || '';
-  this.info = response.info || {};
-  this.produces = response.produces;
-  this.schemes = response.schemes || [];
-  this.securityDefinitions = _.cloneDeep(response.securityDefinitions);
-  this.security = response.security;
-  this.title = response.title || '';
-
-  var key, definedTags = {}, k, location, self = this, i;
-
-  if (response.externalDocs) {
-    this.externalDocs = response.externalDocs;
-  }
-
-  // legacy support
-  this.authSchemes = this.securityDefinitions;
-
-  if(this.securityDefinitions) {
-    for(key in this.securityDefinitions) {
-      var securityDefinition = this.securityDefinitions[key];
-      securityDefinition.vendorExtensions = {};
-      for(var ext in securityDefinition) {
-        helpers.extractExtensions(ext, securityDefinition);
-        if (ext === 'scopes') {
-          var scopes = securityDefinition[ext];
-          if(typeof scopes === 'object') {
-            scopes.vendorExtensions = {};
-            for (var s in scopes) {
-              helpers.extractExtensions(s, scopes);
-              if(s.indexOf('x-') === 0) {
-                delete scopes[s];
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-
-  if (Array.isArray(response.tags)) {
-    definedTags = {};
-
-    for (k = 0; k < response.tags.length; k++) {
-      var t = _.cloneDeep(response.tags[k]);
-      definedTags[t.name] = t;
-      for(i in t) {
-        if(i === 'externalDocs' && typeof t[i] === 'object') {
-          for(var j in t[i]) {
-            helpers.extractExtensions(j, t[i]);
-          }
-        }
-        helpers.extractExtensions(i, t);
-      }
-    }
-  }
-
-
-  if (typeof this.url === 'string') {
-    location = this.parseUri(this.url);
-    if (typeof this.scheme === 'undefined' && typeof this.schemes === 'undefined' || this.schemes.length === 0) {
-      if(typeof window !== 'undefined') {
-        // use the window scheme
-        this.scheme = window.location.protocol.replace(':','');
-      }
-      else {
-        this.scheme = location.scheme || 'http';
-      }
-    } else if (typeof window !== 'undefined' && window.location.protocol.indexOf('chrome-extension') === 0) {
-		// if it is chrome swagger ui extension scheme then let swagger doc url scheme decide the protocol
-		this.scheme = location.scheme;
-	} else if (typeof this.scheme === 'undefined') {
-      if(typeof window !== 'undefined') {
-        var scheme = window.location.protocol.replace(':','');
-        if(scheme === 'https' && this.schemes.indexOf(scheme) === -1) {
-          // can't call http from https served page in a browser!
-          helpers.log('Cannot call a http server from https inside a browser!');
-          this.scheme = 'http';
-        }
-        else if(this.schemes.indexOf(scheme) !== -1) {
-          this.scheme = scheme;
-        }
-        else {
-          if(this.schemes.indexOf('https') !== -1) {
-            this.scheme = 'https';
-          }
-          else {
-            this.scheme = 'http';
-          }
-        }
-      }
-      else {
-        this.scheme = this.schemes[0] || location.scheme;
-      }
-    }
-
-    if (typeof this.host === 'undefined' || this.host === '') {
-      this.host = location.host;
-
-      if (location.port) {
-        this.host = this.host + ':' + location.port;
-      }
-    }
-  }
-  else {
-    if (typeof this.schemes === 'undefined' || this.schemes.length === 0) {
-      this.scheme = 'http';
-    }
-    else if (typeof this.scheme === 'undefined') {
-      this.scheme = this.schemes[0];
-    }
-  }
-
-  this.definitions = response.definitions;
-
-  for (key in this.definitions) {
-    var model = new Model(key, this.definitions[key], this.models, this.modelPropertyMacro);
-
-    if (model) {
-      this.models[key] = model;
-    }
-  }
-
-  // get paths, create functions for each operationId
-
-  // Bind help to 'client.apis'
-  self.apis.help = _.bind(self.help, self);
-
-  _.forEach(response.paths, function (pathObj, path) {
-    // Only process a path if it's an object
-    if (!_.isPlainObject(pathObj)) {
-      return;
-    }
-
-    _.forEach(supportedOperationMethods, function (method) {
-      var operation = pathObj[method];
-
-      if (_.isUndefined(operation)) {
-        // Operation does not exist
-        return;
-      } else if (!_.isPlainObject(operation)) {
-        // Operation exists but it is not an Operation Object.  Since this is invalid, log it.
-        helpers.log('The \'' + method + '\' operation for \'' + path + '\' path is not an Operation Object');
-
-        return;
-      }
-
-      var tags = operation.tags;
-
-      if (_.isUndefined(tags) || !_.isArray(tags) || tags.length === 0) {
-        tags = operation.tags = [ 'default' ];
-      }
-
-      var operationId = self.idFromOp(path, method, operation);
-
-      var operationObject = new Operation(self,
-        operation.scheme,
-        operationId,
-        method,
-        path,
-        operation,
-        self.definitions,
-        self.models,
-        self.clientAuthorizations);
-
-      operationObject.connectionAgent = self.connectionAgent;
-      operationObject.vendorExtensions = {};
-      for(i in operation) {
-        helpers.extractExtensions(i, operationObject, operation[i]);
-      }
-      operationObject.externalDocs = operation.externalDocs;
-      if(operationObject.externalDocs) {
-        operationObject.externalDocs = _.cloneDeep(operationObject.externalDocs);
-        operationObject.externalDocs.vendorExtensions = {};
-        for(i in operationObject.externalDocs) {
-          helpers.extractExtensions(i, operationObject.externalDocs);
-        }
-      }
-
-      // bind self operation's execute command to the api
-      _.forEach(tags, function (tag) {
-        var clientProperty = _.indexOf(reservedClientTags, tag) > -1 ? '_' + tag : tag;
-        var apiProperty = _.indexOf(reservedApiTags, tag) > -1 ? '_' + tag : tag;
-        var operationGroup = self[clientProperty];
-
-        if (clientProperty !== tag) {
-          helpers.log('The \'' + tag + '\' tag conflicts with a SwaggerClient function/property name.  Use \'client.' +
-                      clientProperty + '\' or \'client.apis.' + tag + '\' instead of \'client.' + tag + '\'.');
-        }
-
-        if (apiProperty !== tag) {
-          helpers.log('The \'' + tag + '\' tag conflicts with a SwaggerClient operation function/property name.  Use ' +
-                      '\'client.apis.' + apiProperty + '\' instead of \'client.apis.' + tag + '\'.');
-        }
-
-        if (_.indexOf(reservedApiTags, operationId) > -1) {
-          helpers.log('The \'' + operationId + '\' operationId conflicts with a SwaggerClient operation ' +
-                      'function/property name.  Use \'client.apis.' + apiProperty + '._' + operationId +
-                      '\' instead of \'client.apis.' + apiProperty + '.' + operationId + '\'.');
-
-          operationId = '_' + operationId;
-          operationObject.nickname = operationId; // So 'client.apis.[tag].operationId.help() works properly
-        }
-
-        if (_.isUndefined(operationGroup)) {
-          operationGroup = self[clientProperty] = self.apis[apiProperty] = {};
-
-          operationGroup.operations = {};
-          operationGroup.label = apiProperty;
-          operationGroup.apis = {};
-
-          var tagDef = definedTags[tag];
-
-          if (!_.isUndefined(tagDef)) {
-            operationGroup.description = tagDef.description;
-            operationGroup.externalDocs = tagDef.externalDocs;
-            operationGroup.vendorExtensions = tagDef.vendorExtensions;
-          }
-
-          self[clientProperty].help = _.bind(self.help, operationGroup);
-          self.apisArray.push(new OperationGroup(tag, operationGroup.description, operationGroup.externalDocs, operationObject));
-        }
-
-        operationId = self.makeUniqueOperationId(operationId, self.apis[apiProperty]);
-
-        // Bind tag help
-        if (!_.isFunction(operationGroup.help)) {
-          operationGroup.help = _.bind(self.help, operationGroup);
-        }
-
-        // bind to the apis object
-        self.apis[apiProperty][operationId] = operationGroup[operationId] = _.bind(operationObject.execute,
-                                                                                  operationObject);
-        self.apis[apiProperty][operationId].help = operationGroup[operationId].help = _.bind(operationObject.help,
-                                                                                             operationObject);
-        self.apis[apiProperty][operationId].asCurl = operationGroup[operationId].asCurl = _.bind(operationObject.asCurl,
-                                                                                                 operationObject);
-
-        operationGroup.apis[operationId] = operationGroup.operations[operationId] = operationObject;
-
-        // legacy UI feature
-        var api = _.find(self.apisArray, function (api) {
-          return api.tag === tag;
-        });
-
-        if (api) {
-          api.operationsArray.push(operationObject);
-        }
-      });
-    });
-  });
-
-  // sort the apisArray according to the tags
-  var sortedApis = [];
-  _.forEach(Object.keys(definedTags), function (tag) {
-    var pos;
-    for(pos in self.apisArray) {
-      var _api = self.apisArray[pos];
-      if(_api && tag === _api.name) {
-        sortedApis.push(_api);
-        self.apisArray[pos] = null;
-      }
-    }
-  });
-  // add anything left
-  _.forEach(self.apisArray, function (api) {
-    if(api) {
-      sortedApis.push(api);
-    }
-  });
-  self.apisArray = sortedApis;
-
-  _.forEach(response.definitions, function (definitionObj, definition) {
-    definitionObj.id = definition.toLowerCase();
-    definitionObj.name = definition;
-    self.modelsArray.push(definitionObj);
-  });
-
-  this.isBuilt = true;
-
-  if (this.usePromise) {
-    this.isValid = true;
-    this.isBuilt = true;
-    this.deferredClient.resolve(this);
-
-    return this.deferredClient.promise;
-  }
-
-  if (this.success) {
-    this.success();
-  }
-
-  return this;
-};
-
-SwaggerClient.prototype.makeUniqueOperationId = function(operationId, api) {
-  var count = 0;
-  var name = operationId;
-
-  // make unique across this operation group
-  while(true) {
-    var matched = false;
-    _.forEach(api.operations, function (operation) {
-      if(operation.nickname === name) {
-        matched = true;
-      }
-    });
-    if(!matched) {
-      return name;
-    }
-    name = operationId + '_' + count;
-    count ++;
-  }
-
-  return operationId;
-};
-
-SwaggerClient.prototype.parseUri = function (uri) {
-  var urlParseRE = /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/;
-  var parts = urlParseRE.exec(uri);
-
-  return {
-    scheme: parts[4] ? parts[4].replace(':','') : undefined,
-    host: parts[11],
-    port: parts[12],
-    path: parts[15]
-  };
-};
-
-SwaggerClient.prototype.help = function (dontPrint) {
-  var output = '';
-
-  if (this instanceof SwaggerClient) {
-    _.forEach(this.apis, function (api, name) {
-      if (_.isPlainObject(api)) {
-        output += 'operations for the \'' + name + '\' tag\n';
-
-        _.forEach(api.operations, function (operation, name) {
-          output += '  * ' + name + ': ' + operation.summary + '\n';
-        });
-      }
-    });
-  } else if (this instanceof OperationGroup || _.isPlainObject(this)) {
-    output += 'operations for the \'' + this.label + '\' tag\n';
-
-    _.forEach(this.apis, function (operation, name) {
-      output += '  * ' + name + ': ' + operation.summary + '\n';
-    });
-  }
-
-  if (dontPrint) {
-    return output;
-  } else {
-    helpers.log(output);
-
-    return output;
-  }
-};
-
-SwaggerClient.prototype.tagFromLabel = function (label) {
-  return label;
-};
-
-SwaggerClient.prototype.idFromOp = function (path, httpMethod, op) {
-  if(!op || !op.operationId) {
-    op = op || {};
-    op.operationId = httpMethod + '_' + path;
-  }
-  var opId = op.operationId.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|.\/?,\\'""-]/g, '_') || (path.substring(1) + '_' + httpMethod);
-
-  opId = opId.replace(/((_){2,})/g, '_');
-  opId = opId.replace(/^(_)*/g, '');
-  opId = opId.replace(/([_])*$/g, '');
-
-  return opId;
-};
-
-SwaggerClient.prototype.setHost = function (host) {
-  this.host = host;
-
-  if(this.apis) {
-    _.forEach(this.apis, function(api) {
-      if(api.operations) {
-        _.forEach(api.operations, function(operation) {
-          operation.host = host;
-        });
-      }
-    });
-  }
-};
-
-SwaggerClient.prototype.setBasePath = function (basePath) {
-  this.basePath = basePath;
-
-  if(this.apis) {
-    _.forEach(this.apis, function(api) {
-      if(api.operations) {
-        _.forEach(api.operations, function(operation) {
-          operation.basePath = basePath;
-        });
-      }
-    });
-  }
-};
-
-SwaggerClient.prototype.setSchemes = function (schemes) {
-  this.schemes = schemes;
-
-  if(schemes && schemes.length > 0) {
-    if(this.apis) {
-      _.forEach(this.apis, function (api) {
-        if (api.operations) {
-          _.forEach(api.operations, function (operation) {
-            operation.scheme = schemes[0];
-          });
-        }
-      });
-    }
-  }
-};
-
-SwaggerClient.prototype.fail = function (message) {
-  if (this.usePromise) {
-    this.deferredClient.reject(message);
-    return this.deferredClient.promise;
-  } else {
-    if (this.failure) {
-      this.failure(message);
-    }
-    else {
-      this.failure(message);
-    }
-  }
-};
-
-},{"./auth":2,"./helpers":4,"./http":5,"./resolver":6,"./spec-converter":8,"./types/model":9,"./types/operation":10,"./types/operationGroup":11,"lodash-compat/array/indexOf":49,"lodash-compat/collection/find":53,"lodash-compat/collection/forEach":54,"lodash-compat/function/bind":58,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isFunction":142,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isPlainObject":145,"lodash-compat/lang/isUndefined" [...]
-(function (process){
-'use strict';
-
-var _ = {
-  isPlainObject: require('lodash-compat/lang/isPlainObject'),
-  indexOf: require('lodash-compat/array/indexOf')
-};
-
-module.exports.__bind = function (fn, me) {
-  return function(){
-    return fn.apply(me, arguments);
-  };
-};
-
-var log = module.exports.log = function() {
-  // Only log if available and we're not testing
-  if (console && process.env.NODE_ENV !== 'test') {
-    console.log(Array.prototype.slice.call(arguments)[0]);
-  }
-};
-
-module.exports.fail = function (message) {
-  log(message);
-};
-
-module.exports.optionHtml = function (label, value) {
-  return '<tr><td class="optionName">' + label + ':</td><td>' + value + '</td></tr>';
-};
-
-var resolveSchema = module.exports.resolveSchema = function (schema) {
-  if (_.isPlainObject(schema.schema)) {
-    schema = resolveSchema(schema.schema);
-  }
-
-  return schema;
-};
-
-module.exports.simpleRef = function (name) {
-  if (typeof name === 'undefined') {
-    return null;
-  }
-
-  if (name.indexOf('#/definitions/') === 0) {
-    return name.substring('#/definitions/'.length);
-  } else {
-    return name;
-  }
-};
-
-/**
- * helper to remove extensions and add them to an object
- *
- * @param keyname
- * @param obj
- */
-module.exports.extractExtensions = function (keyname, obj, value) {
-  if(!keyname || !obj) {
-    return;
-  }
-
-  if (typeof keyname === 'string' && keyname.indexOf('x-') === 0) {
-    obj.vendorExtensions = obj.vendorExtensions || {};
-    if(value) {
-      obj.vendorExtensions[keyname] = value;
-    }
-    else {
-      obj.vendorExtensions[keyname] = obj[keyname];
-    }
-  }
-};
-}).call(this,require('_process'))
-
-},{"_process":12,"lodash-compat/array/indexOf":49,"lodash-compat/lang/isPlainObject":145}],5:[function(require,module,exports){
-(function (Buffer){
-'use strict';
-
-var helpers = require('./helpers');
-var request = require('superagent');
-var jsyaml = require('js-yaml');
-var _ = {
-  isObject: require('lodash-compat/lang/isObject'),
-  keys: require('lodash-compat/object/keys')
-};
-
-/*
- * JQueryHttpClient is a light-weight, node or browser HTTP client
- */
-var JQueryHttpClient = function () {
-  this.type = 'JQueryHttpClient';
-};
-
-/*
- * SuperagentHttpClient is a light-weight, node or browser HTTP client
- */
-var SuperagentHttpClient = function () {
-  this.type = 'SuperagentHttpClient';
-};
-
-/**
- * SwaggerHttp is a wrapper for executing requests
- */
-var SwaggerHttp = module.exports = function () {};
-
-SwaggerHttp.prototype.execute = function (obj, opts) {
-  var client;
-
-  if(opts && opts.client) {
-    client = opts.client;
-  }
-  else {
-    client = new SuperagentHttpClient(opts);
-  }
-  client.opts = opts || {};
-
-  if (opts && opts.requestAgent) {
-    request = opts.requestAgent;
-  }
-
-  // legacy support
-  var hasJQuery = false;
-  if(typeof window !== 'undefined') {
-    if(typeof window.jQuery !== 'undefined') {
-      hasJQuery = true;
-    }
-  }
-  // OPTIONS support
-  if(obj.method.toLowerCase() === 'options' && client.type === 'SuperagentHttpClient') {
-    log('forcing jQuery as OPTIONS are not supported by SuperAgent');
-    obj.useJQuery = true;
-  }
-  if(this.isInternetExplorer() && (obj.useJQuery === false || !hasJQuery )) {
-    throw new Error('Unsupported configuration! JQuery is required but not available');
-  }
-  if ((obj && obj.useJQuery === true) || this.isInternetExplorer() && hasJQuery) {
-    client = new JQueryHttpClient(opts);
-  }
-
-  var success = obj.on.response;
-  var error = obj.on.error;
-
-  var requestInterceptor = function(data) {
-    if(opts && opts.requestInterceptor) {
-      data = opts.requestInterceptor.apply(data);
-    }
-    return data;
-  };
-
-  var responseInterceptor = function(data) {
-    if(opts && opts.responseInterceptor) {
-      data = opts.responseInterceptor.apply(data, [obj]);
-    }
-    return success(data);
-  };
-
-  var errorInterceptor = function(data) {
-    if(opts && opts.responseInterceptor) {
-      data = opts.responseInterceptor.apply(data, [obj]);
-    }
-    error(data);
-  };
-
-  obj.on.error = function(data) {
-    errorInterceptor(data);
-  };
-
-  obj.on.response = function(data) {
-    if(data && data.status >= 400) {
-      errorInterceptor(data);
-    }
-    else {
-      responseInterceptor(data);
-    }
-  };
-
-  if (_.isObject(obj) && _.isObject(obj.body)) {
-    // special processing for file uploads via jquery
-    if (obj.body.type && obj.body.type === 'formData'){
-      if(opts.useJQuery) {
-        obj.contentType = false;
-        obj.processData = false;
-        delete obj.headers['Content-Type'];
-      }
-    }
-  }
-
-  obj = requestInterceptor(obj) || obj;
-  if (obj.beforeSend) {
-    obj.beforeSend(function(_obj) {
-      client.execute(_obj || obj);
-    });
-  } else {
-    client.execute(obj);
-  }
-
-  return (obj.deferred) ? obj.deferred.promise : obj;
-};
-
-SwaggerHttp.prototype.isInternetExplorer = function () {
-  var detectedIE = false;
-
-  if (typeof navigator !== 'undefined' && navigator.userAgent) {
-    var nav = navigator.userAgent.toLowerCase();
-
-    if (nav.indexOf('msie') !== -1) {
-      var version = parseInt(nav.split('msie')[1]);
-
-      if (version <= 8) {
-        detectedIE = true;
-      }
-    }
-  }
-
-  return detectedIE;
-};
-
-JQueryHttpClient.prototype.execute = function (obj) {
-  var jq = this.jQuery || (typeof window !== 'undefined' && window.jQuery);
-  var cb = obj.on;
-  var request = obj;
-
-  if(typeof jq === 'undefined' || jq === false) {
-    throw new Error('Unsupported configuration! JQuery is required but not available');
-  }
-
-  obj.type = obj.method;
-  obj.cache = obj.jqueryAjaxCache;
-  obj.data = obj.body;
-  delete obj.jqueryAjaxCache;
-  delete obj.useJQuery;
-  delete obj.body;
-
-  obj.complete = function (response) {
-    var headers = {};
-    var headerArray = response.getAllResponseHeaders().split('\n');
-
-    for (var i = 0; i < headerArray.length; i++) {
-      var toSplit = headerArray[i].trim();
-
-      if (toSplit.length === 0) {
-        continue;
-      }
-
-      var separator = toSplit.indexOf(':');
-
-      if (separator === -1) {
-        // Name but no value in the header
-        headers[toSplit] = null;
-
-        continue;
-      }
-
-      var name = toSplit.substring(0, separator).trim();
-      var value = toSplit.substring(separator + 1).trim();
-
-      headers[name] = value;
-    }
-
-    var out = {
-      url: request.url,
-      method: request.method,
-      status: response.status,
-      statusText: response.statusText,
-      data: response.responseText,
-      headers: headers
-    };
-
-    try {
-      var possibleObj =  response.responseJSON || jsyaml.safeLoad(response.responseText);
-      out.obj = (typeof possibleObj === 'string') ? {} : possibleObj;
-    } catch (ex) {
-      // do not set out.obj
-      helpers.log('unable to parse JSON/YAML content');
-    }
-
-    // I can throw, or parse null?
-    out.obj = out.obj || null;
-
-    if (response.status >= 200 && response.status < 300) {
-      cb.response(out);
-    } else if (response.status === 0 || (response.status >= 400 && response.status < 599)) {
-      cb.error(out);
-    } else {
-      return cb.response(out);
-    }
-  };
-
-  jq.support.cors = true;
-
-  return jq.ajax(obj);
-};
-
-SuperagentHttpClient.prototype.execute = function (obj) {
-  var method = obj.method.toLowerCase();
-  var timeout = obj.timeout;
-
-  if (method === 'delete') {
-    method = 'del';
-  }
-  var headers = obj.headers || {};
-
-  var r = request[method](obj.url);
-
-  if (obj.connectionAgent) {
-    r.agent(obj.connectionAgent);
-  }
-
-  if (timeout) {
-    r.timeout(timeout);
-  }
-
-  if (obj.enableCookies) {
-    r.withCredentials();
-  }
-
-  var accept = obj.headers.Accept;
-
-  if(this.binaryRequest(accept)) {
-    r.on('request', function () {
-      if(this.xhr) {
-        this.xhr.responseType = 'blob';
-      }
-    });
-  }
-
-  if(obj.body) {
-    if(_.isObject(obj.body)) {
-      var contentType = obj.headers['Content-Type'] || '';
-      if (contentType.indexOf('multipart/form-data') === 0) {
-        delete headers['Content-Type'];
-        if({}.toString.apply(obj.body) === '[object FormData]') {
-          r.send(obj.body);
-        }
-        else {
-          var keyname, value, v;
-          for (keyname in obj.body) {
-            value = obj.body[keyname];
-            if(Array.isArray(value)) {
-              for(v in value) {
-                r.field(keyname, v);
-              }
-            }
-            else {
-              r.field(keyname, value);
-            }
-          }
-        }
-      }
-      else if (_.isObject(obj.body)) {
-        // non multipart/form-data
-        obj.body = JSON.stringify(obj.body);
-        r.send(obj.body);
-      }
-    }
-    else {
-      r.send(obj.body);
-    }
-  }
-
-  var name;
-  for (name in headers) {
-    r.set(name, headers[name]);
-  }
-
-  if(typeof r.buffer === 'function') {
-    r.buffer(); // force superagent to populate res.text with the raw response data
-  }
-
-  r.end(function (err, res) {
-    res = res || {
-      status: 0,
-      headers: {error: 'no response from server'}
-    };
-    var response = {
-      url: obj.url,
-      method: obj.method,
-      headers: res.headers
-    };
-    var cb;
-
-    if (!err && res.error) {
-      err = res.error;
-    }
-
-    if (err && obj.on && obj.on.error) {
-      response.errObj = err;
-      response.status = res ? res.status : 500;
-      response.statusText = res ? res.text : err.message;
-      if (res.headers && res.headers['content-type']) {
-        if (res.headers['content-type'].indexOf('application/json') >= 0) {
-          try {
-            response.obj = JSON.parse(response.statusText);
-          }
-          catch (e) {
-            response.obj = null;
-          }
-        }
-      }
-      cb = obj.on.error;
-    } else if (res && obj.on && obj.on.response) {
-      var possibleObj;
-
-      // Already parsed by by superagent?
-      if (res.body && _.keys(res.body).length > 0) {
-        possibleObj = res.body;
-      } else {
-        try {
-          possibleObj = jsyaml.safeLoad(res.text);
-          // can parse into a string... which we don't need running around in the system
-          possibleObj = (typeof possibleObj === 'string') ? null : possibleObj;
-        } catch (e) {
-          helpers.log('cannot parse JSON/YAML content');
-        }
-      }
-
-      // null means we can't parse into object
-      if(typeof Buffer === 'function' && Buffer.isBuffer(possibleObj)) {
-        response.data = possibleObj;
-      }
-      else {
-        response.obj = (typeof possibleObj === 'object') ? possibleObj : null;
-      }
-
-      response.status = res.status;
-      response.statusText = res.text;
-      cb = obj.on.response;
-    }
-    if (res.xhr && res.xhr.response) {
-      response.data = res.xhr.response;
-    }
-    else if(!response.data) {
-      response.data = response.statusText;
-    }
-
-    if (cb) {
-      cb(response);
-    }
-  });
-};
-
-SuperagentHttpClient.prototype. binaryRequest = function (accept) {
-  if(!accept) {
-    return false;
-  }
-  return (/^image/i).test(accept)
-    || (/^application\/pdf/).test(accept)
-    || (/^application\/octet-stream/).test(accept);
-};
-
-}).call(this,require("buffer").Buffer)
-
-},{"./helpers":4,"buffer":14,"js-yaml":19,"lodash-compat/lang/isObject":144,"lodash-compat/object/keys":149,"superagent":158}],6:[function(require,module,exports){
-'use strict';
-
-var SwaggerHttp = require('./http');
-var _ = {
-  isObject: require('lodash-compat/lang/isObject'),
-  cloneDeep: require('lodash-compat/lang/cloneDeep'),
-  isArray: require('lodash-compat/lang/isArray'),
-  isString: require('lodash-compat/lang/isString')
-};
-
-
-/**
- * Resolves a spec's remote references
- */
-var Resolver = module.exports = function () {
-  this.failedUrls = [];
-  this.resolverCache = {};
-  this.pendingUrls = {};
-};
-
-Resolver.prototype.processAllOf = function(root, name, definition, resolutionTable, unresolvedRefs, spec) {
-  var i, location, property;
-
-  definition['x-resolved-from'] = [ '#/definitions/' + name ];
-  var allOf = definition.allOf;
-  // the refs go first
-  allOf.sort(function(a, b) {
-    if(a.$ref && b.$ref) { return 0; }
-    else if(a.$ref) { return -1; }
-    else { return 1; }
-  });
-  for (i = 0; i < allOf.length; i++) {
-    property = allOf[i];
-    location = '/definitions/' + name + '/allOf';
-    this.resolveInline(root, spec, property, resolutionTable, unresolvedRefs, location);
-  }
-};
-
-Resolver.prototype.resolve = function (spec, arg1, arg2, arg3) {
-  this.spec = spec;
-  var root = arg1, callback = arg2, scope = arg3, opts = {}, location, i;
-  if(typeof arg1 === 'function') {
-    root = null;
-    callback = arg1;
-    scope = arg2;
-  }
-  var _root = root, modelName;
-  this.scope = (scope || this);
-  this.iteration = this.iteration || 0;
-
-  if(this.scope.options && this.scope.options.requestInterceptor){
-    opts.requestInterceptor = this.scope.options.requestInterceptor;
-  }
-
-  if(this.scope.options && this.scope.options.responseInterceptor){
-    opts.responseInterceptor = this.scope.options.responseInterceptor;
-  }
-
-  var name, path, property, propertyName, parameter, done, counter;
-  var processedCalls = 0, resolvedRefs = {}, unresolvedRefs = {};
-  var resolutionTable = []; // store objects for dereferencing
-
-  spec.definitions = spec.definitions || {};
-  // definitions
-  for (name in spec.definitions) {
-    var definition = spec.definitions[name];
-    if(definition.$ref) {
-      this.resolveInline(root, spec, definition, resolutionTable, unresolvedRefs, definition);
-    }
-    else {
-      for (propertyName in definition.properties) {
-        property = definition.properties[propertyName];
-        if (_.isArray(property.allOf)) {
-          this.processAllOf(root, name, property, resolutionTable, unresolvedRefs, spec);
-        }
-        else {
-          this.resolveTo(root, property, resolutionTable, '/definitions');
-        }
-      }
-
-      if (definition.allOf) {
-        this.processAllOf(root, name, definition, resolutionTable, unresolvedRefs, spec);
-      }
-    }
-  }
-
-  // shared parameters
-  spec.parameters = spec.parameters || {};
-  for(name in spec.parameters) {
-    parameter = spec.parameters[name];
-    if (parameter.in === 'body' && parameter.schema) {
-      if(_.isArray(parameter.schema.allOf)) {
-        // move to a definition
-        modelName = 'inline_model';
-        var _name = modelName;
-        done = false; counter = 0;
-        while(!done) {
-          if(typeof spec.definitions[_name] === 'undefined') {
-            done = true;
-            break;
-          }
-          _name = modelName + '_' + counter;
-          counter ++;
-        }
-        spec.definitions[_name] = { allOf: parameter.schema.allOf };
-        delete parameter.schema.allOf;
-        parameter.schema.$ref = '#/definitions/' + _name;
-        this.processAllOf(root, _name, spec.definitions[_name], resolutionTable, unresolvedRefs, spec);
-      }
-      else {
-        this.resolveTo(root, parameter.schema, resolutionTable, location);
-      }
-    }
-
-    if (parameter.$ref) {
-      // parameter reference
-      this.resolveInline(root, spec, parameter, resolutionTable, unresolvedRefs, parameter.$ref);
-    }
-  }
-
-  // operations
-  for (name in spec.paths) {
-    var method, operation, responseCode;
-    path = spec.paths[name];
-
-    if(typeof path === 'object') {
-      for (method in path) {
-        // operation reference
-        if (method === '$ref') {
-          // location = path[method];
-          location = '/paths' + name;
-          this.resolveInline(root, spec, path, resolutionTable, unresolvedRefs, location);
-        }
-        else {
-          operation = path[method];
-          var sharedParameters = path.parameters || [];
-          var parameters = operation.parameters || [];
-
-          sharedParameters.forEach(function(parameter) {
-            parameters.unshift(parameter);
-          });
-
-          if (method !== 'parameters' && _.isObject(operation)) {
-            operation.parameters = operation.parameters || parameters;
-          }
-
-          for (i in parameters) {
-            parameter = parameters[i];
-            location = '/paths' + name + '/' + method + '/parameters';
-
-            if (parameter.in === 'body' && parameter.schema) {
-              if (_.isArray(parameter.schema.allOf)) {
-                // move to a definition
-                modelName = 'inline_model';
-                name = modelName;
-                done = false;
-                counter = 0;
-                while (!done) {
-                  if (typeof spec.definitions[name] === 'undefined') {
-                    done = true;
-                    break;
-                  }
-                  name = modelName + '_' + counter;
-                  counter++;
-                }
-                spec.definitions[name] = {allOf: parameter.schema.allOf};
-                delete parameter.schema.allOf;
-                parameter.schema.$ref = '#/definitions/' + name;
-                this.processAllOf(root, name, spec.definitions[name], resolutionTable, unresolvedRefs, spec);
-              }
-              else {
-                this.resolveTo(root, parameter.schema, resolutionTable, location);
-              }
-            }
-
-            if (parameter.$ref) {
-              // parameter reference
-              this.resolveInline(root, spec, parameter, resolutionTable, unresolvedRefs, parameter.$ref);
-            }
-          }
-
-          for (responseCode in operation.responses) {
-            var response = operation.responses[responseCode];
-            location = '/paths' + name + '/' + method + '/responses/' + responseCode;
-
-            if (_.isObject(response)) {
-              if (response.$ref) {
-                // response reference
-                this.resolveInline(root, spec, response, resolutionTable, unresolvedRefs, location);
-              }
-              if (response.schema) {
-                var responseObj = response;
-                if (_.isArray(responseObj.schema.allOf)) {
-                  // move to a definition
-                  modelName = 'inline_model';
-                  name = modelName;
-                  done = false;
-                  counter = 0;
-                  while (!done) {
-                    if (typeof spec.definitions[name] === 'undefined') {
-                      done = true;
-                      break;
-                    }
-                    name = modelName + '_' + counter;
-                    counter++;
-                  }
-                  spec.definitions[name] = {allOf: responseObj.schema.allOf};
-                  delete responseObj.schema.allOf;
-                  delete responseObj.schema.type;
-                  responseObj.schema.$ref = '#/definitions/' + name;
-                  this.processAllOf(root, name, spec.definitions[name], resolutionTable, unresolvedRefs, spec);
-                }
-                else if ('array' === responseObj.schema.type) {
-                  if (responseObj.schema.items && responseObj.schema.items.$ref) {
-                    // response reference
-                    this.resolveInline(root, spec, responseObj.schema.items, resolutionTable, unresolvedRefs, location);
-                  }
-                }
-                else {
-                  this.resolveTo(root, response.schema, resolutionTable, location);
-                }
-              }
-            }
-          }
-        }
-      }
-      // clear them out to avoid multiple resolutions
-      path.parameters = [];
-    }
-  }
-
-  var expectedCalls = 0, toResolve = [];
-  // if the root is same as obj[i].root we can resolve locally
-  var all = resolutionTable;
-
-  var parts;
-  for(i = 0; i < all.length; i++) {
-    var a = all[i];
-    if(root === a.root) {
-      if(a.resolveAs === 'ref') {
-        // resolve any path walking
-        var joined = ((a.root || '') + '/' + a.key).split('/');
-        var normalized = [];
-        var url = '';
-        var k;
-
-        if(a.key.indexOf('../') >= 0) {
-          for(var j = 0; j < joined.length; j++) {
-            if(joined[j] === '..') {
-              normalized = normalized.slice(0, normalized.length-1);
-            }
-            else {
-              normalized.push(joined[j]);
-            }
-          }
-          for(k = 0; k < normalized.length; k ++) {
-            if(k > 0) {
-              url += '/';
-            }
-            url += normalized[k];
-          }
-          // we now have to remote resolve this because the path has changed
-          a.root = url;
-          toResolve.push(a);
-        }
-        else {
-          parts = a.key.split('#');
-          if(parts.length === 2) {
-            if(parts[0].indexOf('http:') === 0 || parts[0].indexOf('https:') === 0) {
-              a.root = parts[0];
-            }
-            location = parts[1].split('/');
-            var r;
-            var s = spec;
-            for(k = 0; k < location.length; k++) {
-              var part = location[k];
-              if(part !== '') {
-                s = s[part];
-                if(typeof s !== 'undefined') {
-                  r = s;
-                }
-                else {
-                  r = null;
-                  break;
-                }
-              }
-            }
-            if(r === null) {
-              // must resolve this too
-              toResolve.push(a);
-            }
-          }
-        }
-      }
-      else {
-        if (a.resolveAs === 'inline') {
-          if(a.key && a.key.indexOf('#') === -1 && a.key.charAt(0) !== '/') {
-            // handle relative schema
-            parts = a.root.split('/');
-            location = '';
-            for(i = 0; i < parts.length - 1; i++) {
-              location += parts[i] + '/';
-            }
-            location += a.key;
-            a.root = location;
-            a.location = '';
-          }
-          toResolve.push(a);
-        }
-      }
-    }
-    else {
-      toResolve.push(a);
-    }
-  }
-  expectedCalls = toResolve.length;
-
-  // resolve anything that is local
-
-  var lock = {};
-  for(var ii = 0; ii < toResolve.length; ii++) {
-    (function(item, spec, self, lock, ii) {
-      if(!item.root || item.root === root) {
-        // local resolve
-        self.resolveItem(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, item);
-        processedCalls += 1;
-
-        if(processedCalls === expectedCalls) {
-          self.finish(spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback, true);
-        }
-      }
-      else if(self.failedUrls.indexOf(item.root) === -1) {
-        var obj = {
-          useJQuery: false,  // TODO
-          url: item.root,
-          method: 'get',
-          headers: {
-            accept: self.scope.swaggerRequestHeaders || 'application/json'
-          },
-          on: {
-            error: function (error) {
-              processedCalls += 1;
-              console.log('failed url: ' + obj.url);
-              self.failedUrls.push(obj.url);
-              if (lock) {
-                delete lock[item.root];
-              }
-              unresolvedRefs[item.key] = {
-                root: item.root,
-                location: item.location
-              };
-
-              if (processedCalls === expectedCalls) {
-                self.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
-              }
-            },  // jshint ignore:line
-            response: function (response) {
-              var swagger = response.obj;
-              if (lock) {
-                delete lock[item.root];
-              }
-              if (self.resolverCache) {
-                self.resolverCache[item.root] = swagger;
-              }
-              self.resolveItem(swagger, item.root, resolutionTable, resolvedRefs, unresolvedRefs, item);
-              processedCalls += 1;
-
-              if (processedCalls === expectedCalls) {
-                self.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
-              }
-            }
-          } // jshint ignore:line
-        };
-
-        // apply timeout only when specified
-        if (scope && scope.fetchSpecTimeout) {
-          obj.timeout = scope.fetchSpecTimeout;
-        }
-
-        if (scope && scope.clientAuthorizations) {
-          scope.clientAuthorizations.apply(obj);
-        }
-
-        (function waitForUnlock() {
-          setTimeout(function() {
-            if (lock[obj.url]) {
-              waitForUnlock();
-            }
-            else {
-              var cached = self.resolverCache[obj.url];
-              if (_.isObject(cached)) {
-                obj.on.response({obj: cached});
-              }
-              else {
-                lock[obj.url] = true;
-                new SwaggerHttp().execute(obj, opts);
-              }
-            }
-          }, 0);
-        })();
-      }
-
-      else {
-        processedCalls += 1;
-        unresolvedRefs[item.key] = {
-          root: item.root,
-          location: item.location
-        };
-        if (processedCalls === expectedCalls) {
-          self.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
-        }
-      }
-    }(toResolve[ii], spec, this, lock, ii));
-  }
-
-  if (Object.keys(toResolve).length === 0) {
-    this.finish(spec, _root, resolutionTable, resolvedRefs, unresolvedRefs, callback);
-  }
-};
-
-Resolver.prototype.resolveItem = function(spec, root, resolutionTable, resolvedRefs, unresolvedRefs, item) {
-  var path = item.location;
-  var location = spec, parts = path.split('/');
-  if(path !== '') {
-    for (var j = 0; j < parts.length; j++) {
-      var segment = parts[j];
-      if (segment.indexOf('~1') !== -1) {
-        segment = parts[j].replace(/~0/g, '~').replace(/~1/g, '/');
-        if (segment.charAt(0) !== '/') {
-          segment = '/' + segment;
-        }
-      }
-      if (typeof location === 'undefined' || location === null) {
-        break;
-      }
-      if (segment === '' && j === (parts.length - 1) && parts.length > 1) {
-        location = null;
-        break;
-      }
-      if (segment.length > 0) {
-        location = location[segment];
-      }
-    }
-  }
-  var resolved = item.key;
-  parts = item.key.split('/');
-  var resolvedName = parts[parts.length-1];
-
-  if(resolvedName.indexOf('#') >= 0) {
-    resolvedName = resolvedName.split('#')[1];
-  }
-
-  if (location !== null && typeof location !== 'undefined') {
-    resolvedRefs[resolved] = {
-      name: resolvedName,
-      obj: location,
-      key: item.key,
-      root: item.root
-    };
-  } else {
-    unresolvedRefs[resolved] = {
-      root: item.root,
-      location: item.location
-    };
-  }
-};
-
-Resolver.prototype.finish = function (spec, root, resolutionTable, resolvedRefs, unresolvedRefs, callback, localResolve) {
-  // walk resolution table and replace with resolved refs
-  var ref, abs;
-  for (ref in resolutionTable) {
-    var item = resolutionTable[ref];
-
-    var key = item.key;
-    var resolvedTo = resolvedRefs[key];
-    if (resolvedTo) {
-      spec.definitions = spec.definitions || {};
-      if (item.resolveAs === 'ref') {
-        if (localResolve !== true) {
-          // don't retain root for local definitions
-          for (key in resolvedTo.obj) {
-            abs = this.retainRoot(key, resolvedTo.obj[key], item.root);
-            resolvedTo.obj[key] = abs;
-          }
-        }
-        spec.definitions[resolvedTo.name] = resolvedTo.obj;
-        item.obj.$ref = '#/definitions/' + resolvedTo.name;
-      } else if (item.resolveAs === 'inline') {
-        var targetObj = item.obj;
-        targetObj['x-resolved-from'] = [ item.key ];
-        delete targetObj.$ref;
-
-        for (key in resolvedTo.obj) {
-          abs = resolvedTo.obj[key];
-
-          if (localResolve !== true) {
-            // don't retain root for local definitions
-            abs = this.retainRoot(key, resolvedTo.obj[key], item.root);
-          }
-          targetObj[key] = abs;
-        }
-      }
-    }
-  }
-  var existingUnresolved = this.countUnresolvedRefs(spec);
-
-  if(existingUnresolved === 0 || this.iteration > 5) {
-    this.resolveAllOf(spec.definitions);
-    this.resolverCache = null;
-    callback.call(this.scope, spec, unresolvedRefs);
-  }
-  else {
-    this.iteration += 1;
-    this.resolve(spec, root, callback, this.scope);
-  }
-};
-
-Resolver.prototype.countUnresolvedRefs = function(spec) {
-  var i;
-  var refs = this.getRefs(spec);
-  var keys = [];
-  var unresolvedKeys = [];
-  for(i in refs) {
-    if(i.indexOf('#') === 0) {
-      keys.push(i.substring(1));
-    }
-    else {
-      unresolvedKeys.push(i);
-    }
-  }
-
-  // verify possible keys
-  for (i = 0; i < keys.length; i++) {
-    var part = keys[i];
-    var parts = part.split('/');
-    var obj = spec;
-
-    for (var k = 0; k < parts.length; k++) {
-      var key = parts[k];
-      if(key !== '') {
-        obj = obj[key];
-        if(typeof obj === 'undefined') {
-          unresolvedKeys.push(part);
-          break;
-        }
-      }
-    }
-  }
-  return unresolvedKeys.length;
-};
-
-Resolver.prototype.getRefs = function(spec, obj) {
-  obj = obj || spec;
-  var output = {};
-  for(var key in obj) {
-    if (!obj.hasOwnProperty(key)) {
-      continue;
-    }
-    var item = obj[key];
-    if(key === '$ref' && typeof item === 'string') {
-      output[item] = null;
-    }
-    else if(_.isObject(item)) {
-      var o = this.getRefs(item);
-      for(var k in o) {
-        output[k] = null;
-      }
-    }
-  }
-  return output;
-};
-
-function splitUrl(url) {
-  var result = {};
-  var proto = /[a-z]+:\/\//i.exec(url);
-  if (proto) {
-    result.proto = proto[0].slice(0, -3);
-    url = url.slice(result.proto.length + 1);
-  }
-  if (url.slice(0, 2) === '//') {
-    result.domain = url.slice(2).split('/')[0];
-    url = url.slice(2 + result.domain.length);
-  }
-  var p = url.split('#');
-  if (p[0].length) {
-    result.path = p[0];
-  }
-  if (p.length > 1) {
-    result.fragment = p.slice(1).join('#');
-  }
-  return result;
-}
-
-function unsplitUrl(url) {
-  var result = url.path;
-  if (result === undefined) {
-    result = '';
-  }
-  if (url.fragment !== undefined) {
-    result += '#' + url.fragment;
-  }
-  if (url.domain !== undefined) {
-    if (result.slice(0, 1) === '/') {
-      result = result.slice(1);
-    }
-    result = '//' + url.domain + '/' + result;
-    if (url.proto !== undefined) {
-      result = url.proto + ':' + result;
-    }
-  }
-  return result;
-}
-
-function joinUrl(base, rel) {
-  var relsp = splitUrl(rel);
-  if (relsp.domain !== undefined) {
-    return rel;
-  }
-  var result = splitUrl(base);
-  if (relsp.path === undefined) {
-    // change only fragment part
-    result.fragment = relsp.fragment;
-  } else if (relsp.path.slice(0, 1) === '/') {
-    // relative to domain
-    result.path = relsp.path;
-    result.fragment = relsp.fragment;
-  } else {
-    // relative to path
-    var path = result.path === undefined ? [] : result.path.split('/');
-    var relpath = relsp.path.split('/');
-    if (path.length) {
-      path.pop();
-    }
-    while (relpath[0] === '..' || relpath[0] === '.') {
-      if (relpath[0] === '..') {
-        path.pop();
-      }
-      relpath.shift();
-    }
-    result.path = path.concat(relpath).join('/');
-    result.fragment = relsp.fragment;
-  }
-  return unsplitUrl(result);
-}
-
-Resolver.prototype.retainRoot = function(origKey, obj, root) {
-  // walk object and look for relative $refs
-  if(_.isObject(obj)) {
-    for(var key in obj) {
-      var item = obj[key];
-      if (key === '$ref' && typeof item === 'string') {
-        obj[key] = joinUrl(root, item);
-      }
-      else if (_.isObject(item)) {
-        this.retainRoot(key, item, root);
-      }
-    }
-  }
-  else if(_.isString(obj) && origKey === '$ref') {
-    obj = joinUrl(root, obj);
-  }
-  return obj;
-};
-
-/**
- * immediately in-lines local refs, queues remote refs
- * for inline resolution
- */
-Resolver.prototype.resolveInline = function (root, spec, property, resolutionTable, unresolvedRefs, location) {
-  var key = property.$ref, ref = property.$ref, i, p, p2, rs;
-  var rootTrimmed = false;
-
-  root = root || ''; // Guard against .split. @fehguy, you'll need to check if this logic fits
-  // More imporantly is how do we gracefully handle relative urls, when provided just a 'spec', not a 'url' ?
-
-  if (ref) {
-    if(ref.indexOf('../') === 0) {
-      // reset root
-      p = ref.split('../');
-      p2 = root.split('/');
-      ref = '';
-      for(i = 0; i < p.length; i++) {
-        if(p[i] === '') {
-          p2 = p2.slice(0, p2.length-1);
-        }
-        else {
-          ref += p[i];
-        }
-      }
-      root = '';
-      for(i = 0; i < p2.length - 1; i++) {
-        if(i > 0) { root += '/'; }
-        root += p2[i];
-      }
-      rootTrimmed = true;
-    }
-    if(ref.indexOf('#') >= 0) {
-      if(ref.indexOf('/') === 0) {
-        rs = ref.split('#');
-        p  = root.split('//');
-        p2 = p[1].split('/');
-        root = p[0] + '//' + p2[0] + rs[0];
-        location = rs[1];
-      }
-      else {
-        rs = ref.split('#');
-        if(rs[0] !== '') {
-          p2 = root.split('/');
-          p2 = p2.slice(0, p2.length - 1);
-          if(!rootTrimmed) {
-            root = '';
-            for (var k = 0; k < p2.length; k++) {
-              if(k > 0) { root += '/'; }
-              root += p2[k];
-            }
-          }
-          root += '/' + ref.split('#')[0];
-        }
-        location = rs[1];
-      }
-    }
-    if (ref.indexOf('http:') === 0 || ref.indexOf('https:') === 0) {
-      if(ref.indexOf('#') >= 0) {
-        root = ref.split('#')[0];
-        location = ref.split('#')[1];
-      }
-      else {
-        root = ref;
-        location = '';
-      }
-      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
-    } else if (ref.indexOf('#') === 0) {
-      location = ref.split('#')[1];
-      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
-    } else if (ref.indexOf('/') === 0 && ref.indexOf('#') === -1) {
-      location = ref;
-      var matches = root.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);
-      if(matches) {
-        root = matches[0] + ref.substring(1);
-        location = '';
-      }
-      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
-    }
-    else {
-      resolutionTable.push({obj: property, resolveAs: 'inline', root: root, key: key, location: location});
-    }
-  }
-  else if (property.type === 'array') {
-    this.resolveTo(root, property.items, resolutionTable, location);
-  }
-};
-
-Resolver.prototype.resolveTo = function (root, property, resolutionTable, location) {
-  var sp, i;
-  var ref = property.$ref;
-  var lroot = root;
-  if ((typeof ref !== 'undefined') && (ref !== null)) {
-    if(ref.indexOf('#') >= 0) {
-      var parts = ref.split('#');
-
-      // #/definitions/foo
-      // foo.json#/bar
-      if(parts[0] && ref.indexOf('/') === 0) {
-
-      }
-      else if(parts[0] && (parts[0].indexOf('http:') === 0 || parts[0].indexOf('https:') === 0)) {
-        lroot = parts[0];
-        ref = parts[1];
-      }
-      else if(parts[0] && parts[0].length > 0) {
-        // relative file
-        sp = root.split('/');
-        lroot = '';
-        for(i = 0; i < sp.length - 1; i++) {
-          lroot += sp[i] + '/';
-        }
-        lroot += parts[0];
-      }
-      else {
-
-      }
-
-      location = parts[1];
-    }
-    else if (ref.indexOf('http:') === 0 || ref.indexOf('https:') === 0) {
-      lroot = ref;
-      location = '';
-    }
-    else {
-      // relative file
-      sp = root.split('/');
-      lroot = '';
-      for(i = 0; i < sp.length - 1; i++) {
-        lroot += sp[i] + '/';
-      }
-      lroot += ref;
-      location = '';
-    }
-    resolutionTable.push({
-      obj: property, resolveAs: 'ref', root: lroot, key: ref, location: location
-    });
-  } else if (property.type === 'array') {
-    var items = property.items;
-    this.resolveTo(root, items, resolutionTable, location);
-  } else {
-    if(property && (property.properties || property.additionalProperties)) {
-      var name = this.uniqueName('inline_model');
-      if (property.title) {
-        name = this.uniqueName(property.title);
-      }
-      delete property.title;
-      this.spec.definitions[name] = _.cloneDeep(property);
-      property.$ref = '#/definitions/' + name;
-      delete property.type;
-      delete property.properties;
-    }
-  }
-};
-
-Resolver.prototype.uniqueName = function(base) {
-  var name = base;
-  var count = 0;
-  while(true) {
-    if(!_.isObject(this.spec.definitions[name])) {
-      return name;
-    }
-    name = base + '_' + count;
-    count++;
-  }
-};
-
-Resolver.prototype.resolveAllOf = function(spec, obj, depth) {
-  depth = depth || 0;
-  obj = obj || spec;
-  var name;
-  for(var key in obj) {
-    if (!obj.hasOwnProperty(key)) {
-      continue;
-    }
-    var item = obj[key];
-    if(item === null) {
-      throw new TypeError('Swagger 2.0 does not support null types (' + obj + ').  See https://github.com/swagger-api/swagger-spec/issues/229.');
-    }
-    if(typeof item === 'object') {
-      this.resolveAllOf(spec, item, depth + 1);
-    }
-    if(item && typeof item.allOf !== 'undefined') {
-      var allOf = item.allOf;
-      if(_.isArray(allOf)) {
-        var output = _.cloneDeep(item);
-        delete output.allOf;
-
-        output['x-composed'] = true;
-        if (typeof item['x-resolved-from'] !== 'undefined') {
-          output['x-resolved-from'] = item['x-resolved-from'];
-        }
-
-        for(var i = 0; i < allOf.length; i++) {
-          var component = allOf[i];
-          var source = 'self';
-          if(typeof component['x-resolved-from'] !== 'undefined') {
-            source = component['x-resolved-from'][0];
-          }
-
-          for(var part in component) {
-            if(!output.hasOwnProperty(part)) {
-              output[part] = _.cloneDeep(component[part]);
-              if(part === 'properties') {
-                for(name in output[part]) {
-                  output[part][name]['x-resolved-from'] = source;
-                }
-              }
-            }
-            else {
-              if(part === 'properties') {
-                var properties = component[part];
-                for(name in properties) {
-                  output.properties[name] = _.cloneDeep(properties[name]);
-                  var resolvedFrom = properties[name]['x-resolved-from'];
-                  if (typeof resolvedFrom === 'undefined' || resolvedFrom === 'self') {
-                    resolvedFrom = source;
-                  }
-                  output.properties[name]['x-resolved-from'] = resolvedFrom;
-                }
-              }
-              else if(part === 'required') {
-                // merge & dedup the required array
-                var a = output.required.concat(component[part]);
-                for(var k = 0; k < a.length; ++k) {
-                  for(var j = k + 1; j < a.length; ++j) {
-                    if(a[k] === a[j]) { a.splice(j--, 1); }
-                  }
-                }
-                output.required = a;
-              }
-              else if(part === 'x-resolved-from') {
-                output['x-resolved-from'].push(source);
-              }
-              else {
-                // TODO: need to merge this property
-                // console.log('what to do with ' + part)
-              }
-            }
-          }
-        }
-        obj[key] = output;
-      }
-    }
-  }
-};
-
-},{"./http":5,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isString":146}],7:[function(require,module,exports){
-'use strict';
-
-var Helpers = require('./helpers');
-
-var _ = {
-  isPlainObject: require('lodash-compat/lang/isPlainObject'),
-  isUndefined: require('lodash-compat/lang/isUndefined'),
-  isArray: require('lodash-compat/lang/isArray'),
-  isObject: require('lodash-compat/lang/isObject'),
-  isEmpty: require('lodash-compat/lang/isEmpty'),
-  map: require('lodash-compat/collection/map'),
-  indexOf: require('lodash-compat/array/indexOf'),
-  cloneDeep: require('lodash-compat/lang/cloneDeep'),
-  keys: require('lodash-compat/object/keys'),
-  forEach: require('lodash-compat/collection/forEach')
-};
-
-var optionHtml = module.exports.optionHtml = function  (label, value) {
-  return '<tr><td class="optionName">' + label + ':</td><td>' + value + '</td></tr>';
-};
-
-module.exports.typeFromJsonSchema = function (type, format) {
-  var str;
-
-  if (type === 'integer' && format === 'int32') {
-    str = 'integer';
-  } else if (type === 'integer' && format === 'int64') {
-    str = 'long';
-  } else if (type === 'integer' && typeof format === 'undefined') {
-    str = 'long';
-  } else if (type === 'string' && format === 'date-time') {
-    str = 'date-time';
-  } else if (type === 'string' && format === 'date') {
-    str = 'date';
-  } else if (type === 'number' && format === 'float') {
-    str = 'float';
-  } else if (type === 'number' && format === 'double') {
-    str = 'double';
-  } else if (type === 'number' && typeof format === 'undefined') {
-    str = 'double';
-  } else if (type === 'boolean') {
-    str = 'boolean';
-  } else if (type === 'string') {
-    str = 'string';
-  }
-
-  return str;
-};
-
-var getStringSignature = module.exports.getStringSignature = function (obj, baseComponent) {
-  var str = '';
-
-  if (typeof obj.$ref !== 'undefined') {
-    str += Helpers.simpleRef(obj.$ref);
-  } else if (typeof obj.type === 'undefined') {
-    str += 'object';
-  } else if (obj.type === 'array') {
-    if (baseComponent) {
-      str += getStringSignature((obj.items || obj.$ref || {}));
-    } else {
-      str += 'Array[';
-      str += getStringSignature((obj.items || obj.$ref || {}));
-      str += ']';
-    }
-  } else if (obj.type === 'integer' && obj.format === 'int32') {
-    str += 'integer';
-  } else if (obj.type === 'integer' && obj.format === 'int64') {
-    str += 'long';
-  } else if (obj.type === 'integer' && typeof obj.format === 'undefined') {
-    str += 'long';
-  } else if (obj.type === 'string' && obj.format === 'date-time') {
-    str += 'date-time';
-  } else if (obj.type === 'string' && obj.format === 'date') {
-    str += 'date';
-  } else if (obj.type === 'string' && typeof obj.format === 'undefined') {
-    str += 'string';
-  } else if (obj.type === 'number' && obj.format === 'float') {
-    str += 'float';
-  } else if (obj.type === 'number' && obj.format === 'double') {
-    str += 'double';
-  } else if (obj.type === 'number' && typeof obj.format === 'undefined') {
-    str += 'double';
-  } else if (obj.type === 'boolean') {
-    str += 'boolean';
-  } else if (obj.$ref) {
-    str += Helpers.simpleRef(obj.$ref);
-  } else {
-    str += obj.type;
-  }
-
-  return str;
-};
-
-var schemaToJSON = module.exports.schemaToJSON = function (schema, models, modelsToIgnore, modelPropertyMacro) {
-  // Resolve the schema (Handle nested schemas)
-  schema = Helpers.resolveSchema(schema);
-
-  if(typeof modelPropertyMacro !== 'function') {
-    modelPropertyMacro = function(prop){
-      return (prop || {}).default;
-    };
-  }
-
-  modelsToIgnore= modelsToIgnore || {};
-
-  var type = schema.type || 'object';
-  var format = schema.format;
-  var model;
-  var output;
-
-  if (!_.isUndefined(schema.example)) {
-    output = schema.example;
-  } else if (_.isUndefined(schema.items) && _.isArray(schema.enum)) {
-    output = schema.enum[0];
-  }
-
-  if (_.isUndefined(output)) {
-    if (schema.$ref) {
-      model = models[Helpers.simpleRef(schema.$ref)];
-
-      if (!_.isUndefined(model)) {
-        if (_.isUndefined(modelsToIgnore[model.name])) {
-          modelsToIgnore[model.name] = model;
-          output = schemaToJSON(model.definition, models, modelsToIgnore, modelPropertyMacro);
-          delete modelsToIgnore[model.name];
-        } else {
-          if (model.type === 'array') {
-            output = [];
-          } else {
-            output = {};
-          }
-        }
-      }
-    } else if (!_.isUndefined(schema.default)) {
-      output = schema.default;
-    } else if (type === 'string') {
-      if (format === 'date-time') {
-        output = new Date().toISOString();
-      } else if (format === 'date') {
-        output = new Date().toISOString().split('T')[0];
-      } else {
-        output = 'string';
-      }
-    } else if (type === 'integer') {
-      output = 0;
-    } else if (type === 'number') {
-      output = 0.0;
-    } else if (type === 'boolean') {
-      output = true;
-    } else if (type === 'object') {
-      output = {};
-
-      _.forEach(schema.properties, function (property, name) {
-        var cProperty = _.cloneDeep(property);
-
-        // Allow macro to set the default value
-        cProperty.default = modelPropertyMacro(property);
-
-        output[name] = schemaToJSON(cProperty, models, modelsToIgnore, modelPropertyMacro);
-      });
-    } else if (type === 'array') {
-      output = [];
-
-      if (_.isArray(schema.items)) {
-        _.forEach(schema.items, function (item) {
-          output.push(schemaToJSON(item, models, modelsToIgnore, modelPropertyMacro));
-        });
-      } else if (_.isPlainObject(schema.items)) {
-        output.push(schemaToJSON(schema.items, models, modelsToIgnore, modelPropertyMacro));
-      } else if (_.isUndefined(schema.items)) {
-        output.push({});
-      } else {
-        Helpers.log('Array type\'s \'items\' property is not an array or an object, cannot process');
-      }
-    }
-  }
-
-  return output;
-};
-
-module.exports.schemaToHTML =function (name, schema, models, modelPropertyMacro) {
-  var strongOpen = '<span class="strong">';
-  var strongClose = '</span>';
-
-  // Allow for ignoring the 'name' argument.... shifting the rest
-  if(_.isObject(arguments[0])) {
-    name = void 0;
-    schema = arguments[0];
-    models = arguments[1];
-    modelPropertyMacro = arguments[2];
-  }
-
-  models = models || {};
-
-  // Resolve the schema (Handle nested schemas)
-  schema = Helpers.resolveSchema(schema);
-
-  // Return for empty object
-  if(_.isEmpty(schema)) {
-    return strongOpen + 'Empty' + strongClose;
-  }
-
-  // Dereference $ref from 'models'
-  if(typeof schema.$ref === 'string') {
-    name = Helpers.simpleRef(schema.$ref);
-    schema = models[name];
-    if(typeof schema === 'undefined')
-    {
-      return strongOpen + name + ' is not defined!' + strongClose;
-    }
-  }
-
-  if(typeof name !== 'string') {
-    name = schema.title || 'Inline Model';
-  }
-
-  // If we are a Model object... adjust accordingly
-  if(schema.definition) {
-    schema = schema.definition;
-  }
-
-  if(typeof modelPropertyMacro !== 'function') {
-    modelPropertyMacro = function(prop){
-      return (prop || {}).default;
-    };
-  }
-
-  var references = {};
-  var seenModels = [];
-  var inlineModels = 0;
-
-
-
-  // Generate current HTML
-  var html = processModel(schema, name);
-
-  // Generate references HTML
-  while (_.keys(references).length > 0) {
-    /* jshint ignore:start */
-    _.forEach(references, function (schema, name) {
-      var seenModel = _.indexOf(seenModels, name) > -1;
-
-      delete references[name];
-
-      if (!seenModel) {
-        seenModels.push(name);
-
-        html += '<br />' + processModel(schema, name);
-      }
-    });
-    /* jshint ignore:end */
-  }
-
-  return html;
-
-  /////////////////////////////////
-
-  function addReference(schema, name, skipRef) {
-    var modelName = name;
-    var model;
-
-    if (schema.$ref) {
-      modelName = schema.title || Helpers.simpleRef(schema.$ref);
-      model = models[modelName];
-    } else if (_.isUndefined(name)) {
-      modelName = schema.title || 'Inline Model ' + (++inlineModels);
-      model = {definition: schema};
-    }
-
-    if (skipRef !== true) {
-      references[modelName] = _.isUndefined(model) ? {} : model.definition;
-    }
-
-    return modelName;
-  }
-
-  function primitiveToHTML(schema) {
-    var html = '<span class="propType">';
-    var type = schema.type || 'object';
-
-    if (schema.$ref) {
-      html += addReference(schema, Helpers.simpleRef(schema.$ref));
-    } else if (type === 'object') {
-      if (!_.isUndefined(schema.properties)) {
-        html += addReference(schema);
-      } else {
-        html += 'object';
-      }
-    } else if (type === 'array') {
-      html += 'Array[';
-
-      if (_.isArray(schema.items)) {
-        html += _.map(schema.items, addReference).join(',');
-      } else if (_.isPlainObject(schema.items)) {
-        if (_.isUndefined(schema.items.$ref)) {
-          if (!_.isUndefined(schema.items.type) && _.indexOf(['array', 'object'], schema.items.type) === -1) {
-            html += schema.items.type;
-          } else {
-            html += addReference(schema.items);
-          }
-        } else {
-          html += addReference(schema.items, Helpers.simpleRef(schema.items.$ref));
-        }
-      } else {
-        Helpers.log('Array type\'s \'items\' schema is not an array or an object, cannot process');
-        html += 'object';
-      }
-
-      html += ']';
-    } else {
-      html += schema.type;
-    }
-
-    html += '</span>';
-
-    return html;
-  }
-
-  function primitiveToOptionsHTML(schema, html) {
-    var options = '';
-    var type = schema.type || 'object';
-    var isArray = type === 'array';
-
-    if (isArray) {
-      if (_.isPlainObject(schema.items) && !_.isUndefined(schema.items.type)) {
-        type = schema.items.type;
-      } else {
-        type = 'object';
-      }
-    }
-
-    if (!_.isUndefined(schema.default)) {
-      options += optionHtml('Default', schema.default);
-    }
-
-    switch (type) {
-    case 'string':
-      if (schema.minLength) {
-        options += optionHtml('Min. Length', schema.minLength);
-      }
-
-      if (schema.maxLength) {
-        options += optionHtml('Max. Length', schema.maxLength);
-      }
-
-      if (schema.pattern) {
-        options += optionHtml('Reg. Exp.', schema.pattern);
-      }
-      break;
-    case 'integer':
-    case 'number':
-      if (schema.minimum) {
-        options += optionHtml('Min. Value', schema.minimum);
-      }
-
-      if (schema.exclusiveMinimum) {
-        options += optionHtml('Exclusive Min.', 'true');
-      }
-
-      if (schema.maximum) {
-        options += optionHtml('Max. Value', schema.maximum);
-      }
-
-      if (schema.exclusiveMaximum) {
-        options += optionHtml('Exclusive Max.', 'true');
-      }
-
-      if (schema.multipleOf) {
-        options += optionHtml('Multiple Of', schema.multipleOf);
-      }
-
-      break;
-    }
-
-    if (isArray) {
-      if (schema.minItems) {
-        options += optionHtml('Min. Items', schema.minItems);
-      }
-
-      if (schema.maxItems) {
-        options += optionHtml('Max. Items', schema.maxItems);
-      }
-
-      if (schema.uniqueItems) {
-        options += optionHtml('Unique Items', 'true');
-      }
-
-      if (schema.collectionFormat) {
-        options += optionHtml('Coll. Format', schema.collectionFormat);
-      }
-    }
-
-    if (_.isUndefined(schema.items)) {
-      if (_.isArray(schema.enum)) {
-        var enumString;
-
-        if (type === 'number' || type === 'integer') {
-          enumString = schema.enum.join(', ');
-        } else {
-          enumString = '"' + schema.enum.join('", "') + '"';
-        }
-
-        options += optionHtml('Enum', enumString);
-      }
-    }
-
-    if (options.length > 0) {
-      html = '<span class="propWrap">' + html + '<table class="optionsWrapper"><tr><th colspan="2">' + type + '</th></tr>' + options + '</table></span>';
-    }
-
-    return html;
-  }
-
-  function processModel(schema, name) {
-    var type = schema.type || 'object';
-    var isArray = schema.type === 'array';
-    var html = strongOpen + name + ' ' + (isArray ? '[' : '{') + strongClose;
-
-    if (name) {
-      seenModels.push(name);
-    }
-
-    if (isArray) {
-      if (_.isArray(schema.items)) {
-        html += '<div>' + _.map(schema.items, function (item) {
-          var type = item.type || 'object';
-
-          if (_.isUndefined(item.$ref)) {
-            if (_.indexOf(['array', 'object'], type) > -1) {
-              if (type === 'object' && _.isUndefined(item.properties)) {
-                return 'object';
-              } else {
-                return addReference(item);
-              }
-            } else {
-              return primitiveToOptionsHTML(item, type);
-            }
-          } else {
-            return addReference(item, Helpers.simpleRef(item.$ref));
-          }
-        }).join(',</div><div>');
-      } else if (_.isPlainObject(schema.items)) {
-        if (_.isUndefined(schema.items.$ref)) {
-          if (_.indexOf(['array', 'object'], schema.items.type || 'object') > -1) {
-            if ((_.isUndefined(schema.items.type) || schema.items.type === 'object') && _.isUndefined(schema.items.properties)) {
-              html += '<div>object</div>';
-            } else {
-              html += '<div>' + addReference(schema.items) + '</div>';
-            }
-          } else {
-            html += '<div>' + primitiveToOptionsHTML(schema.items, schema.items.type) + '</div>';
-          }
-        } else {
-          html += '<div>' + addReference(schema.items, Helpers.simpleRef(schema.items.$ref)) + '</div>';
-        }
-      } else {
-        Helpers.log('Array type\'s \'items\' property is not an array or an object, cannot process');
-        html += '<div>object</div>';
-      }
-    } else {
-      if (schema.$ref) {
-        html += '<div>' + addReference(schema, name) + '</div>';
-      } else if (type === 'object') {
-        if (_.isPlainObject(schema.properties)) {
-          var contents = _.map(schema.properties, function (property, name) {
-            var propertyIsRequired = (_.indexOf(schema.required, name) >= 0);
-            var cProperty = _.cloneDeep(property);
-
-            var requiredClass = propertyIsRequired ? 'required' : '';
-            var html = '<span class="propName ' + requiredClass + '">' + name + '</span> (';
-            var model;
-            var propDescription;
-
-            // Allow macro to set the default value
-            cProperty.default = modelPropertyMacro(cProperty);
-
-            // Resolve the schema (Handle nested schemas)
-            cProperty = Helpers.resolveSchema(cProperty);
-
-            propDescription = property.description || cProperty.description;
-
-            // We need to handle property references to primitives (Issue 339)
-            if (!_.isUndefined(cProperty.$ref)) {
-              model = models[Helpers.simpleRef(cProperty.$ref)];
-
-              if (!_.isUndefined(model) && _.indexOf([undefined, 'array', 'object'], model.definition.type) === -1) {
-                // Use referenced schema
-                cProperty = Helpers.resolveSchema(model.definition);
-              }
-            }
-
-            html += primitiveToHTML(cProperty);
-
-            if(!propertyIsRequired) {
-              html += ', <span class="propOptKey">optional</span>';
-            }
-
-            if(property.readOnly) {
-                html += ', <span class="propReadOnly">read only</span>';
-            }
-
-            html += ')';
-
-            if (!_.isUndefined(propDescription)) {
-              html += ': ' + '<span class="propDesc">' + propDescription + '</span>';
-            }
-
-            if (cProperty.enum) {
-              html += ' = <span class="propVals">[\'' + cProperty.enum.join('\', \'') + '\']</span>';
-            }
-
-            return '<div' + (property.readOnly ? ' class="readOnly"' : '') + '>' + primitiveToOptionsHTML(cProperty, html);
-          }).join(',</div>');
-
-          if (contents) {
-            html += contents + '</div>';
-          }
-        }
-      } else {
-        html += '<div>' + primitiveToOptionsHTML(schema, type) + '</div>';
-      }
-    }
-
-    return html + strongOpen + (isArray ? ']' : '}') + strongClose;
-  }
-};
-},{"./helpers":4,"lodash-compat/array/indexOf":49,"lodash-compat/collection/forEach":54,"lodash-compat/collection/map":56,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isArray":140,"lodash-compat/lang/isEmpty":141,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isPlainObject":145,"lodash-compat/lang/isUndefined":148,"lodash-compat/object/keys":149}],8:[function(require,module,exports){
-'use strict';
-
-var SwaggerHttp = require('./http');
-var _ = {
-  isObject: require('lodash-compat/lang/isObject')
-};
-
-var SwaggerSpecConverter = module.exports = function () {
-  this.errors = [];
-  this.warnings = [];
-  this.modelMap = {};
-};
-
-SwaggerSpecConverter.prototype.setDocumentationLocation = function (location) {
-  this.docLocation = location;
-};
-
-/**
- * converts a resource listing OR api declaration
- **/
-SwaggerSpecConverter.prototype.convert = function (obj, clientAuthorizations, opts, callback) {
-  // not a valid spec
-  if(!obj || !Array.isArray(obj.apis)) {
-    return this.finish(callback, null);
-  }
-  this.clientAuthorizations = clientAuthorizations;
-
-  // create a new swagger object to return
-  var swagger = { swagger: '2.0' };
-
-  swagger.originalVersion = obj.swaggerVersion;
-
-  // add the info
-  this.apiInfo(obj, swagger);
-
-  // add security definitions
-  this.securityDefinitions(obj, swagger);
-
-  // take basePath into account
-  if (obj.basePath) {
-    this.setDocumentationLocation(obj.basePath);
-  }
-
-  // see if this is a single-file swagger definition
-  var isSingleFileSwagger = false;
-  var i;
-  for(i = 0; i < obj.apis.length; i++) {
-    var api = obj.apis[i];
-    if(Array.isArray(api.operations)) {
-      isSingleFileSwagger = true;
-    }
-  }
-  if(isSingleFileSwagger) {
-    this.declaration(obj, swagger);
-    this.finish(callback, swagger);
-  }
-  else {
-    this.resourceListing(obj, swagger, opts, callback);
-  }
-};
-
-SwaggerSpecConverter.prototype.declaration = function(obj, swagger) {
-  var name, i, p, pos;
-  if(!obj.apis) {
-    return;
-  }
-
-  if (obj.basePath.indexOf('http://') === 0) {
-    p = obj.basePath.substring('http://'.length);
-    pos = p.indexOf('/');
-    if (pos > 0) {
-      swagger.host = p.substring(0, pos);
-      swagger.basePath = p.substring(pos);
-    }
-    else {
-      swagger.host = p;
-      swagger.basePath = '/';
-    }
-  } else if (obj.basePath.indexOf('https://') === 0) {
-    p = obj.basePath.substring('https://'.length);
-    pos = p.indexOf('/');
-    if (pos > 0) {
-      swagger.host = p.substring(0, pos);
-      swagger.basePath = p.substring(pos);
-    }
-    else {
-      swagger.host = p;
-      swagger.basePath = '/';
-    }
-  } else {
-    swagger.basePath = obj.basePath;
-  }
-
-  var resourceLevelAuth;
-  if(obj.authorizations) {
-    resourceLevelAuth = obj.authorizations;
-  }
-  if(obj.consumes) {
-    swagger.consumes = obj.consumes;
-  }
-  if(obj.produces) {
-    swagger.produces = obj.produces;
-  }
-
-  // build a mapping of id to name for 1.0 model resolutions
-  if(_.isObject(obj)) {
-    for(name in obj.models) {
-      var existingModel = obj.models[name];
-      var key = (existingModel.id || name);
-      this.modelMap[key] = name;
-    }
-  }
-
-  for(i = 0; i < obj.apis.length; i++) {
-    var api = obj.apis[i];
-    var path = api.path;
-    var operations = api.operations;
-    this.operations(path, obj.resourcePath, operations, resourceLevelAuth, swagger);
-  }
-
-  var models = obj.models || {};
-  this.models(models, swagger);
-};
-
-SwaggerSpecConverter.prototype.models = function(obj, swagger) {
-  if(!_.isObject(obj)) {
-    return;
-  }
-  var name;
-
-  swagger.definitions = swagger.definitions || {};
-  for(name in obj) {
-    var existingModel = obj[name];
-    var _required = [];
-    var schema = { properties: {}};
-    var propertyName;
-    for(propertyName in existingModel.properties) {
-      var existingProperty = existingModel.properties[propertyName];
-      var property = {};
-      this.dataType(existingProperty, property);
-      if(existingProperty.description) {
-        property.description = existingProperty.description;
-      }
-      if(existingProperty['enum']) {
-        property['enum'] = existingProperty['enum'];
-      }
-      if(typeof existingProperty.required === 'boolean' && existingProperty.required === true) {
-        _required.push(propertyName);
-      }
-      if(typeof existingProperty.required === 'string' && existingProperty.required === 'true') {
-        _required.push(propertyName);
-      }
-      schema.properties[propertyName] = property;
-    }
-    if(_required.length > 0) {
-      schema.required = _required;
-    } else {
-      schema.required = existingModel.required;
-    }
-    swagger.definitions[name] = schema;
-  }
-};
-
-SwaggerSpecConverter.prototype.extractTag = function(resourcePath) {
-  var pathString = resourcePath || 'default';
-  if(pathString.indexOf('http:') === 0 || pathString.indexOf('https:') === 0) {
-    pathString = pathString.split(['/']);
-    pathString = pathString[pathString.length -1].substring();
-  }
-  if(pathString.endsWith('.json')) {
-    pathString = pathString.substring(0, pathString.length - '.json'.length);
-  }
-  return pathString.replace('/','');
-};
-
-SwaggerSpecConverter.prototype.operations = function(path, resourcePath, obj, resourceLevelAuth, swagger) {
-  if(!Array.isArray(obj)) {
-    return;
-  }
-  var i;
-
-  if(!swagger.paths) {
-    swagger.paths = {};
-  }
-
-  var pathObj = swagger.paths[path] || {};
-  var tag = this.extractTag(resourcePath);
-  swagger.tags = swagger.tags || [];
-  var matched = false;
-  for(i = 0; i < swagger.tags.length; i++) {
-    var tagObject = swagger.tags[i];
-    if(tagObject.name === tag) {
-      matched = true;
-    }
-  }
-  if(!matched) {
-    swagger.tags.push({name: tag});
-  }
-
-  for(i = 0; i < obj.length; i++) {
-    var existingOperation = obj[i];
-    var method = (existingOperation.method || existingOperation.httpMethod).toLowerCase();
-    var operation = {tags: [tag]};
-    var existingAuthorizations = existingOperation.authorizations;
-
-    if(existingAuthorizations && Object.keys(existingAuthorizations).length === 0) {
-      existingAuthorizations = resourceLevelAuth;
-    }
-
-    if(typeof existingAuthorizations !== 'undefined') {
-      var scopesObject;
-      for(var key in existingAuthorizations) {
-        operation.security = operation.security || [];
-        var scopes = existingAuthorizations[key];
-        if(scopes) {
-          var securityScopes = [];
-          for(var j in scopes) {
-            securityScopes.push(scopes[j].scope);
-          }
-          scopesObject = {};
-          scopesObject[key] = securityScopes;
-          operation.security.push(scopesObject);
-        }
-        else {
-          scopesObject = {};
-          scopesObject[key] = [];
-          operation.security.push(scopesObject);
-        }
-      }
-    }
-
-    if(existingOperation.consumes) {
-      operation.consumes = existingOperation.consumes;
-    }
-    else if(swagger.consumes) {
-      operation.consumes = swagger.consumes;
-    }
-    if(existingOperation.produces) {
-      operation.produces = existingOperation.produces;
-    }
-    else if(swagger.produces) {
-      operation.produces = swagger.produces;
-    }
-    if(existingOperation.summary) {
-      operation.summary = existingOperation.summary;
-    }
-    if(existingOperation.notes) {
-      operation.description = existingOperation.notes;
-    }
-    if(existingOperation.nickname) {
-      operation.operationId = existingOperation.nickname;
-    }
-    if(existingOperation.deprecated) {
-      operation.deprecated = existingOperation.deprecated;
-    }
-
-    this.authorizations(existingAuthorizations, swagger);
-    this.parameters(operation, existingOperation.parameters, swagger);
-    this.responseMessages(operation, existingOperation, swagger);
-
-    pathObj[method] = operation;
-  }
-
-  swagger.paths[path] = pathObj;
-};
-
-SwaggerSpecConverter.prototype.responseMessages = function(operation, existingOperation) {
-  if(!_.isObject(existingOperation)) {
-    return;
-  }
-  // build default response from the operation (1.x)
-  var defaultResponse = {};
-  this.dataType(existingOperation, defaultResponse);
-  // TODO: look into the real problem of rendering responses in swagger-ui
-  // ....should reponseType have an implicit schema?
-  if(!defaultResponse.schema && defaultResponse.type) {
-    defaultResponse = {schema: defaultResponse};
-  }
-
-  operation.responses = operation.responses || {};
-
-  // grab from responseMessages (1.2)
-  var has200 = false;
-  if(Array.isArray(existingOperation.responseMessages)) {
-    var i;
-    var existingResponses = existingOperation.responseMessages;
-    for(i = 0; i < existingResponses.length; i++) {
-      var existingResponse = existingResponses[i];
-      var response = { description: existingResponse.message };
-      if(existingResponse.code === 200) {
-        has200 = true;
-      }
-      // Convert responseModel -> schema{$ref: responseModel}
-      if(existingResponse.responseModel) {
-        response.schema = {'$ref': '#/definitions/' + existingResponse.responseModel};
-      }
-      operation.responses['' + existingResponse.code] = response;
-    }
-  }
-
-  if(has200) {
-    operation.responses['default'] = defaultResponse;
-  }
-  else {
-    operation.responses['200'] = defaultResponse;
-  }
-};
-
-SwaggerSpecConverter.prototype.authorizations = function(obj) {
-  // TODO
-  if(!_.isObject(obj)) {
-    return;
-  }
-};
-
-SwaggerSpecConverter.prototype.parameters = function(operation, obj) {
-  if(!Array.isArray(obj)) {
-    return;
-  }
-  var i;
-  for(i = 0; i < obj.length; i++) {
-    var existingParameter = obj[i];
-    var parameter = {};
-    parameter.name = existingParameter.name;
-    parameter.description = existingParameter.description;
-    parameter.required = existingParameter.required;
-    parameter.in = existingParameter.paramType;
-
-    // per #168
-    if(parameter.in === 'body') {
-      parameter.name = 'body';
-    }
-    if(parameter.in === 'form') {
-      parameter.in = 'formData';
-    }
-
-    if(existingParameter.enum) {
-      parameter.enum = existingParameter.enum;
-    }
-
-    if(existingParameter.allowMultiple === true || existingParameter.allowMultiple === 'true') {
-      var innerType = {};
-      this.dataType(existingParameter, innerType);
-      parameter.type = 'array';
-      parameter.items = innerType;
-
-      if(existingParameter.allowableValues) {
-        var av = existingParameter.allowableValues;
-        if(av.valueType === 'LIST') {
-          parameter['enum'] = av.values;
-        }
-      }
-    }
-    else {
-      this.dataType(existingParameter, parameter);
-    }
-    if(typeof existingParameter.defaultValue !== 'undefined') {
-      parameter.default = existingParameter.defaultValue;
-    }
-
-    operation.parameters = operation.parameters || [];
-    operation.parameters.push(parameter);
-  }
-};
-
-SwaggerSpecConverter.prototype.dataType = function(source, target) {
-  if(!_.isObject(source)) {
-    return;
-  }
-
-  if(source.minimum) {
-    target.minimum = source.minimum;
-  }
-  if(source.maximum) {
-    target.maximum = source.maximum;
-  }
-  if (source.format) {
-    target.format = source.format;
-  }
-
-  // default can be 'false'
-  if(typeof source.defaultValue !== 'undefined') {
-    target.default = source.defaultValue;
-  }
-
-  var jsonSchemaType = this.toJsonSchema(source);
-  if(jsonSchemaType) {
-    target = target || {};
-    if(jsonSchemaType.type) {
-      target.type = jsonSchemaType.type;
-    }
-    if(jsonSchemaType.format) {
-      target.format = jsonSchemaType.format;
-    }
-    if(jsonSchemaType.$ref) {
-      target.schema = {$ref: jsonSchemaType.$ref};
-    }
-    if(jsonSchemaType.items) {
-      target.items = jsonSchemaType.items;
-    }
-  }
-};
-
-SwaggerSpecConverter.prototype.toJsonSchema = function(source) {
-  if(!source) {
-    return 'object';
-  }
-  var detectedType = (source.type || source.dataType || source.responseClass || '');
-  var lcType = detectedType.toLowerCase();
-  var format = (source.format || '').toLowerCase();
-
-  if(lcType.indexOf('list[') === 0) {
-    var innerType = detectedType.substring(5, detectedType.length - 1);
-    var jsonType = this.toJsonSchema({type: innerType});
-    return {type: 'array', items: jsonType};
-  } else if(lcType === 'int' || (lcType === 'integer' && format === 'int32')) {
-    {return {type: 'integer', format: 'int32'};}
-  } else if(lcType === 'long' || (lcType === 'integer' && format === 'int64')) {
-    {return {type: 'integer', format: 'int64'};}
-  } else if(lcType === 'integer') {
-    {return {type: 'integer', format: 'int64'};}
-  } else if(lcType === 'float' || (lcType === 'number' && format === 'float')) {
-    {return {type: 'number', format: 'float'};}
-  } else if(lcType === 'double' || (lcType === 'number' && format === 'double')) {
-    {return {type: 'number', format: 'double'};}
-  } else if((lcType === 'string' && format === 'date-time') || (lcType === 'date')) {
-    {return {type: 'string', format: 'date-time'};}
-  } else if(lcType === 'string') {
-    {return {type: 'string'};}
-  } else if(lcType === 'file') {
-    {return {type: 'file'};}
-  } else if(lcType === 'boolean') {
-    {return {type: 'boolean'};}
-  } else if(lcType === 'boolean') {
-    {return {type: 'boolean'};}
-  } else if(lcType === 'array' || lcType === 'list') {
-    if(source.items) {
-      var it = this.toJsonSchema(source.items);
-      return {type: 'array', items: it};
-    }
-    else {
-      return {type: 'array', items: {type: 'object'}};
-    }
-  } else if(source.$ref) {
-    return {$ref: this.modelMap[source.$ref] ? '#/definitions/' + this.modelMap[source.$ref] : source.$ref};
-  } else if(lcType === 'void' || lcType === '') {
-    {return {};}
-  } else if (this.modelMap[source.type]) {
-    // If this a model using `type` instead of `$ref`, that's fine.
-    return {$ref: '#/definitions/' + this.modelMap[source.type]};
-  } else {
-    // Unknown model type or 'object', pass it along.
-    return {type: source.type};
-  }
-};
-
-SwaggerSpecConverter.prototype.resourceListing = function(obj, swagger, opts, callback) {
-  var i;
-  var processedCount = 0;   // jshint ignore:line
-  var self = this;          // jshint ignore:line
-  var expectedCount = obj.apis.length;
-  var _swagger = swagger;   // jshint ignore:line
-  var _opts = {};
-
-  if(opts && opts.requestInterceptor){
-    _opts.requestInterceptor = opts.requestInterceptor;
-  }
-
-  if(opts && opts.responseInterceptor){
-    _opts.responseInterceptor = opts.responseInterceptor;
-  }
-
-  var swaggerRequestHeaders = 'application/json';
-
-  if(opts && opts.swaggerRequestHeaders) {
-    swaggerRequestHeaders = opts.swaggerRequestHeaders;
-  }
-
-  if(expectedCount === 0) {
-    this.finish(callback, swagger);
-  }
-
-  for(i = 0; i < expectedCount; i++) {
-    var api = obj.apis[i];
-    var path = api.path;
-    var absolutePath = this.getAbsolutePath(obj.swaggerVersion, this.docLocation, path);
-
-    if(api.description) {
-      swagger.tags = swagger.tags || [];
-      swagger.tags.push({
-        name : this.extractTag(api.path),
-        description : api.description || ''
-      });
-    }
-    var http = {
-      url: absolutePath,
-      headers: { accept: swaggerRequestHeaders },
-      on: {},
-      method: 'get',
-      timeout: opts.timeout
-    };
-    /* jshint ignore:start */
-    http.on.response = function(data) {
-      processedCount += 1;
-      var obj = data.obj;
-      if(obj) {
-        self.declaration(obj, _swagger);
-      }
-      if(processedCount === expectedCount) {
-        self.finish(callback, _swagger);
-      }
-    };
-    http.on.error = function(data) {
-      console.error(data);
-      processedCount += 1;
-      if(processedCount === expectedCount) {
-        self.finish(callback, _swagger);
-      }
-    };
-    /* jshint ignore:end */
-
-    if(this.clientAuthorizations && typeof this.clientAuthorizations.apply === 'function') {
-      this.clientAuthorizations.apply(http);
-    }
-
-    new SwaggerHttp().execute(http, _opts);
-  }
-};
-
-SwaggerSpecConverter.prototype.getAbsolutePath = function(version, docLocation, path)  {
-  if(version === '1.0') {
-    if(docLocation.endsWith('.json')) {
-      // get root path
-      var pos = docLocation.lastIndexOf('/');
-      if(pos > 0) {
-        docLocation = docLocation.substring(0, pos);
-      }
-    }
-  }
-
-  var location = docLocation;
-  if(path.indexOf('http:') === 0 || path.indexOf('https:') === 0) {
-    location = path;
-  }
-  else {
-    if(docLocation.endsWith('/')) {
-      location = docLocation.substring(0, docLocation.length - 1);
-    }
-    location += path;
-  }
-  location = location.replace('{format}', 'json');
-  return location;
-};
-
-SwaggerSpecConverter.prototype.securityDefinitions = function(obj, swagger) {
-  if(obj.authorizations) {
-    var name;
-    for(name in obj.authorizations) {
-      var isValid = false;
-      var securityDefinition = {
-        vendorExtensions: {}
-      };
-      var definition = obj.authorizations[name];
-      if(definition.type === 'apiKey') {
-        securityDefinition.type = 'apiKey';
-        securityDefinition.in = definition.passAs;
-        securityDefinition.name = definition.keyname || name;
-        isValid = true;
-      }
-      else if(definition.type === 'basicAuth') {
-        securityDefinition.type = 'basicAuth';
-        isValid = true;
-      }
-      else if(definition.type === 'oauth2') {
-        var existingScopes = definition.scopes || [];
-        var scopes = {};
-        var i;
-        for(i in existingScopes) {
-          var scope = existingScopes[i];
-          scopes[scope.scope] = scope.description;
-        }
-        securityDefinition.type = 'oauth2';
-        if(i > 0) {
-          securityDefinition.scopes = scopes;
-        }
-        if(definition.grantTypes) {
-          if(definition.grantTypes.implicit) {
-            var implicit = definition.grantTypes.implicit;
-            securityDefinition.flow = 'implicit';
-            securityDefinition.authorizationUrl = implicit.loginEndpoint;
-            isValid = true;
-          }
-          /* jshint ignore:start */
-          if(definition.grantTypes['authorization_code']) {
-            if(!securityDefinition.flow) {
-              // cannot set if flow is already defined
-              var authCode = definition.grantTypes['authorization_code'];
-              securityDefinition.flow = 'accessCode';
-              securityDefinition.authorizationUrl = authCode.tokenRequestEndpoint.url;
-              securityDefinition.tokenUrl = authCode.tokenEndpoint.url;
-              isValid = true;
-            }
-          }
-          /* jshint ignore:end */
-        }
-      }
-      if(isValid) {
-        swagger.securityDefinitions = swagger.securityDefinitions || {};
-        swagger.securityDefinitions[name] = securityDefinition;
-      }
-    }
-  }
-};
-
-SwaggerSpecConverter.prototype.apiInfo = function(obj, swagger) {
-  // info section
-  if(obj.info) {
-    var info = obj.info;
-    swagger.info = {};
-
-    if(info.contact) {
-      swagger.info.contact = {};
-      swagger.info.contact.email = info.contact;
-    }
-    if(info.description) {
-      swagger.info.description = info.description;
-    }
-    if(info.title) {
-      swagger.info.title = info.title;
-    }
-    if(info.termsOfServiceUrl) {
-      swagger.info.termsOfService = info.termsOfServiceUrl;
-    }
-    if(info.license || info.licenseUrl) {
-      swagger.license = {};
-      if(info.license) {
-        swagger.license.name = info.license;
-      }
-      if(info.licenseUrl) {
-        swagger.license.url = info.licenseUrl;
-      }
-    }
-  }
-  else {
-    this.warnings.push('missing info section');
-  }
-};
-
-SwaggerSpecConverter.prototype.finish = function (callback, obj) {
-  callback(obj);
-};
-
-},{"./http":5,"lodash-compat/lang/isObject":144}],9:[function(require,module,exports){
-'use strict';
-
-var log = require('../helpers').log;
-var _ = {
-  isPlainObject: require('lodash-compat/lang/isPlainObject'),
-  isString: require('lodash-compat/lang/isString'),
-};
-
-var SchemaMarkup = require('../schema-markup.js');
-var jsyaml = require('js-yaml');
-
-var Model = module.exports = function (name, definition, models, modelPropertyMacro) {
-  this.definition = definition || {};
-  this.isArray = definition.type === 'array';
-  this.models = models || {};
-  this.name = name || definition.title || 'Inline Model';
-  this.modelPropertyMacro = modelPropertyMacro || function (property) {
-    return property.default;
-  };
-
-  return this;
-};
-
-// Note!  This function will be removed in 2.2.x!
-Model.prototype.createJSONSample = Model.prototype.getSampleValue = function (modelsToIgnore) {
-  modelsToIgnore = modelsToIgnore || {};
-
-  modelsToIgnore[this.name] = this;
-
-  // Response support
-  if (this.examples && _.isPlainObject(this.examples) && this.examples['application/json']) {
-    this.definition.example = this.examples['application/json'];
-
-    if (_.isString(this.definition.example)) {
-      this.definition.example = jsyaml.safeLoad(this.definition.example);
-    }
-  } else if (!this.definition.example) {
-    this.definition.example = this.examples;
-  }
-
-  return SchemaMarkup.schemaToJSON(this.definition, this.models, modelsToIgnore, this.modelPropertyMacro);
-};
-
-Model.prototype.getMockSignature = function () {
-  return SchemaMarkup.schemaToHTML(this.name, this.definition, this.models, this.modelPropertyMacro);
-};
-
-},{"../helpers":4,"../schema-markup.js":7,"js-yaml":19,"lodash-compat/lang/isPlainObject":145,"lodash-compat/lang/isString":146}],10:[function(require,module,exports){
-'use strict';
-
-var _ = {
-  cloneDeep: require('lodash-compat/lang/cloneDeep'),
-  isUndefined: require('lodash-compat/lang/isUndefined'),
-  isEmpty: require('lodash-compat/lang/isEmpty'),
-  isObject: require('lodash-compat/lang/isObject')
-};
-var helpers = require('../helpers');
-var Model = require('./model');
-var SwaggerHttp = require('../http');
-var Q = require('q');
-
-var Operation = module.exports = function (parent, scheme, operationId, httpMethod, path, args, definitions, models, clientAuthorizations) {
-  var errors = [];
-
-  parent = parent || {};
-  args = args || {};
-
-  if(parent && parent.options) {
-    this.client = parent.options.client || null;
-    this.requestInterceptor = parent.options.requestInterceptor || null;
-    this.responseInterceptor = parent.options.responseInterceptor || null;
-    this.requestAgent = parent.options.requestAgent;
-  }
-  this.authorizations = args.security;
-  this.basePath = parent.basePath || '/';
-  this.clientAuthorizations = clientAuthorizations;
-  this.consumes = args.consumes || parent.consumes || ['application/json'];
-  this.produces = args.produces || parent.produces || ['application/json'];
-  this.deprecated = args.deprecated;
-  this.description = args.description;
-  this.host = parent.host;
-  this.method = (httpMethod || errors.push('Operation ' + operationId + ' is missing method.'));
-  this.models = models || {};
-  this.nickname = (operationId || errors.push('Operations must have a nickname.'));
-  this.operation = args;
-  this.operations = {};
-  this.parameters = args !== null ? (args.parameters || []) : {};
-  this.parent = parent;
-  this.path = (path || errors.push('Operation ' + this.nickname + ' is missing path.'));
-  this.responses = (args.responses || {});
-  this.scheme = scheme || parent.scheme || 'http';
-  this.schemes = args.schemes || parent.schemes;
-  this.security = args.security || parent.security;
-  this.summary = args.summary || '';
-  this.timeout = parent.timeout;
-  this.type = null;
-  this.useJQuery = parent.useJQuery;
-  this.jqueryAjaxCache = parent.jqueryAjaxCache;
-  this.enableCookies = parent.enableCookies;
-
-  var key;
-
-  if(!this.host) {
-    if(typeof window !== 'undefined') {
-      this.host = window.location.host;
-    }
-    else {
-      this.host = 'localhost';
-    }
-  }
-  this.parameterMacro = parent.parameterMacro || function (operation, parameter) {
-    return parameter.default;
-  };
-
-  this.inlineModels = [];
-
-  if(this.basePath !== '/' && this.basePath.slice(-1) === '/') {
-    this.basePath = this.basePath.slice(0, -1);
-  }
-
-  if (typeof this.deprecated === 'string') {
-    switch(this.deprecated.toLowerCase()) {
-      case 'true': case 'yes': case '1': {
-        this.deprecated = true;
-        break;
-      }
-
-      case 'false': case 'no': case '0': case null: {
-        this.deprecated = false;
-        break;
-      }
-
-      default: this.deprecated = Boolean(this.deprecated);
-    }
-  }
-
-  var i, model;
-
-  if (definitions) {
-    // add to global models
-    for (key in definitions) {
-      model = new Model(key, definitions[key], this.models, parent.modelPropertyMacro);
-
-      if (model) {
-        this.models[key] = model;
-      }
-    }
-  }
-  else {
-    definitions = {};
-  }
-
-  for (i = 0; i < this.parameters.length; i++) {
-    var d, param = this.parameters[i];
-
-    // Allow macro to set the default value
-    param.default = this.parameterMacro(this, param);
-
-    if (param.type === 'array') {
-      param.isList = true;
-      param.allowMultiple = true;
-    }
-
-    var innerType = this.getType(param);
-
-    if (innerType && innerType.toString().toLowerCase() === 'boolean') {
-      param.allowableValues = {};
-      param.isList = true;
-      param['enum'] = [true, false]; // use actual primitives
-    }
-
-    for(key in param) {
-      helpers.extractExtensions(key, param);
-    }
-    if(typeof param['x-example'] !== 'undefined') {
-      d = param['x-example'];
-      param.default = d;
-    }
-    if(param['x-examples']) {
-      d = param['x-examples'].default;
-      if(typeof d !== 'undefined') {
-        param.default = d;
-      }
-    }
-
-    var enumValues = param['enum'] || (param.items && param.items['enum']);
-
-    if (typeof enumValues !== 'undefined') {
-      var id;
-
-      param.allowableValues = {};
-      param.allowableValues.values = [];
-      param.allowableValues.descriptiveValues = [];
-
-      for (id = 0; id < enumValues.length; id++) {
-        var value = enumValues[id];
-        var isDefault = (value === param.default || value+'' === param.default);
-
-        param.allowableValues.values.push(value);
-        // Always have string for descriptive values....
-        param.allowableValues.descriptiveValues.push({value : value+'', isDefault: isDefault});
-      }
-    }
-
-    if (param.type === 'array') {
-      innerType = [innerType];
-
-      if (typeof param.allowableValues === 'undefined') {
-        // can't show as a list if no values to select from
-        delete param.isList;
-        delete param.allowMultiple;
-      }
-    }
-
-    param.modelSignature = {type: innerType, definitions: this.models};
-    param.signature = this.getModelSignature(innerType, this.models).toString();
-    param.sampleJSON = this.getModelSampleJSON(innerType, this.models);
-    param.responseClassSignature = param.signature;
-  }
-
-  var keyname, defaultResponseCode, response, responses = this.responses;
-
-  if (responses['200']) {
-    response = responses['200'];
-    defaultResponseCode = '200';
-  } else if (responses['201']) {
-    response = responses['201'];
-    defaultResponseCode = '201';
-  } else if (responses['202']) {
-    response = responses['202'];
-    defaultResponseCode = '202';
-  } else if (responses['203']) {
-    response = responses['203'];
-    defaultResponseCode = '203';
-  } else if (responses['204']) {
-    response = responses['204'];
-    defaultResponseCode = '204';
-  } else if (responses['205']) {
-    response = responses['205'];
-    defaultResponseCode = '205';
-  } else if (responses['206']) {
-    response = responses['206'];
-    defaultResponseCode = '206';
-  } else if (responses['default']) {
-    response = responses['default'];
-    defaultResponseCode = 'default';
-  }
-
-  for(keyname in responses) {
-    helpers.extractExtensions(keyname, responses);
-    if(typeof keyname === 'string' && keyname.indexOf('x-') === -1) {
-      var responseObject = responses[keyname];
-      if(typeof responseObject === 'object' && typeof responseObject.headers === 'object') {
-        var headers = responseObject.headers;
-        for(var headerName in headers) {
-          var header = headers[headerName];
-          if(typeof header === 'object') {
-            for(var headerKey in header) {
-              helpers.extractExtensions(headerKey, header);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  if (response) {
-    for(keyname in response) {
-      helpers.extractExtensions(keyname, response);
-    }
-  }
-
-  if (response && response.schema) {
-    var resolvedModel = this.resolveModel(response.schema, definitions);
-    var successResponse;
-
-    delete responses[defaultResponseCode];
-
-    if (resolvedModel) {
-      this.successResponse = {};
-      successResponse = this.successResponse[defaultResponseCode] = resolvedModel;
-    } else if (!response.schema.type || response.schema.type === 'object' || response.schema.type === 'array') {
-      // Inline model
-      this.successResponse = {};
-      successResponse = this.successResponse[defaultResponseCode] = new Model(undefined, response.schema || {}, this.models, parent.modelPropertyMacro);
-    } else {
-      // Primitive
-      this.successResponse = {};
-      successResponse = this.successResponse[defaultResponseCode] = response.schema;
-    }
-
-    if (successResponse) {
-      successResponse.vendorExtensions = response.vendorExtensions;
-      // Attach response properties
-      if (response.description) {
-        successResponse.description = response.description;
-      }
-
-      if (response.examples) {
-        successResponse.examples = response.examples;
-      }
-
-      if (response.headers) {
-        successResponse.headers = response.headers;
-      }
-    }
-
-    this.type = response;
-  }
-
-  if (errors.length > 0) {
-    if (this.resource && this.resource.api && this.resource.api.fail) {
-      this.resource.api.fail(errors);
-    }
-  }
-
-  return this;
-};
-
-Operation.prototype.isDefaultArrayItemValue = function(value, param) {
-  if (param.default && Array.isArray(param.default)) {
-    return param.default.indexOf(value) !== -1;
-  }
-  return value === param.default;
-};
-
-Operation.prototype.getType = function (param) {
-  var type = param.type;
-  var format = param.format;
-  var isArray = false;
-  var str;
-
-  if (type === 'integer' && format === 'int32') {
-    str = 'integer';
-  } else if (type === 'integer' && format === 'int64') {
-    str = 'long';
-  } else if (type === 'integer') {
-    str = 'integer';
-  } else if (type === 'string') {
-    if (format === 'date-time') {
-      str = 'date-time';
-    } else if (format === 'date') {
-      str = 'date';
-    } else {
-      str = 'string';
-    }
-  } else if (type === 'number' && format === 'float') {
-    str = 'float';
-  } else if (type === 'number' && format === 'double') {
-    str = 'double';
-  } else if (type === 'number') {
-    str = 'double';
-  } else if (type === 'boolean') {
-    str = 'boolean';
-  } else if (type === 'array') {
-    isArray = true;
-
-    if (param.items) {
-      str = this.getType(param.items);
-    }
-  } else if (type === 'file') {
-    str = 'file';
-  }
-
-  if (param.$ref) {
-    str = helpers.simpleRef(param.$ref);
-  }
-
-  var schema = param.schema;
-
-  if (schema) {
-    var ref = schema.$ref;
-
-    if (ref) {
-      ref = helpers.simpleRef(ref);
-
-      if (isArray) {
-        return [ ref ];
-      } else {
-        return ref;
-      }
-    } else {
-      // If inline schema, we add it our interal hash -> which gives us it's ID (int)
-      if(schema.type === 'object') {
-        return this.addInlineModel(schema);
-      }
-      return this.getType(schema);
-    }
-  }
-  if (isArray) {
-    return [ str ];
-  } else {
-    return str;
-  }
-};
-
-/**
- * adds an inline schema (model) to a hash, where we can ref it later
- * @param {object} schema a schema
- * @return {number} the ID of the schema being added, or null
- **/
-Operation.prototype.addInlineModel = function (schema) {
-  var len = this.inlineModels.length;
-  var model = this.resolveModel(schema, {});
-  if(model) {
-    this.inlineModels.push(model);
-    return 'Inline Model '+len; // return string ref of the inline model (used with #getInlineModel)
-  }
-  return null; // report errors?
-};
-
-/**
- * gets the internal ref to an inline model
- * @param {string} inline_str a string reference to an inline model
- * @return {Model} the model being referenced. Or null
- **/
-Operation.prototype.getInlineModel = function(inlineStr) {
-  if(/^Inline Model \d+$/.test(inlineStr)) {
-    var id = parseInt(inlineStr.substr('Inline Model'.length).trim(),10); //
-    var model = this.inlineModels[id];
-    return model;
-  }
-  // I'm returning null here, should I rather throw an error?
-  return null;
-};
-
-Operation.prototype.resolveModel = function (schema, definitions) {
-  if (typeof schema.$ref !== 'undefined') {
-    var ref = schema.$ref;
-
-    if (ref.indexOf('#/definitions/') === 0) {
-      ref = ref.substring('#/definitions/'.length);
-    }
-
-    if (definitions[ref]) {
-      return new Model(ref, definitions[ref], this.models, this.parent.modelPropertyMacro);
-    }
-  // schema must at least be an object to get resolved to an inline Model
-  } else if (schema && typeof schema === 'object' &&
-            (schema.type === 'object' || _.isUndefined(schema.type))) {
-    return new Model(undefined, schema, this.models, this.parent.modelPropertyMacro);
-  }
-
-  return null;
-};
-
-Operation.prototype.help = function (dontPrint) {
-  var out = this.nickname + ': ' + this.summary + '\n';
-
-  for (var i = 0; i < this.parameters.length; i++) {
-    var param = this.parameters[i];
-    var typeInfo = param.signature;
-
-    out += '\n  * ' + param.name + ' (' + typeInfo + '): ' + param.description;
-  }
-
-  if (typeof dontPrint === 'undefined') {
-    helpers.log(out);
-  }
-
-  return out;
-};
-
-Operation.prototype.getModelSignature = function (type, definitions) {
-  var isPrimitive, listType;
-
-  if (type instanceof Array) {
-    listType = true;
-    type = type[0];
-  }
-
-  // Convert undefined to string of 'undefined'
-  if (typeof type === 'undefined') {
-    type = 'undefined';
-    isPrimitive = true;
-
-  } else if (definitions[type]){
-    // a model def exists?
-    type = definitions[type]; /* Model */
-    isPrimitive = false;
-
-  } else if (this.getInlineModel(type)) {
-    type = this.getInlineModel(type); /* Model */
-    isPrimitive = false;
-
-  } else {
-    // We default to primitive
-    isPrimitive = true;
-  }
-
-  if (isPrimitive) {
-    if (listType) {
-      return 'Array[' + type + ']';
-    } else {
-      return type.toString();
-    }
-  } else {
-    if (listType) {
-      return 'Array[' + type.getMockSignature() + ']';
-    } else {
-      return type.getMockSignature();
-    }
-  }
-};
-
-Operation.prototype.supportHeaderParams = function () {
-  return true;
-};
-
-Operation.prototype.supportedSubmitMethods = function () {
-  return this.parent.supportedSubmitMethods;
-};
-
-Operation.prototype.getHeaderParams = function (args) {
-  var headers = this.setContentTypes(args, {});
-  var headerParamsByLowerCase = {};
-
-  for (var i = 0; i < this.parameters.length; i++) {
-    var param = this.parameters[i];
-
-    if (param.in === 'header') {
-      headerParamsByLowerCase[param.name.toLowerCase()] = param;
-    }
-  }
-
-  for (var arg in args) {
-    var headerParam = headerParamsByLowerCase[arg.toLowerCase()];
-    if (typeof headerParam !== 'undefined') {
-      var value = args[arg];
-
-      if (Array.isArray(value)) {
-        value = value.toString();
-      }
-
-      headers[headerParam.name] = value;
-    }
-  }
-
-  return headers;
-};
-
-Operation.prototype.urlify = function (args, maskPasswords) {
-  var formParams = {};
-  var requestUrl = this.path.replace(/#.*/, ''); // remove URL fragment
-  var querystring = ''; // grab params from the args, build the querystring along the way
-
-  for (var i = 0; i < this.parameters.length; i++) {
-    var param = this.parameters[i];
-
-    if (typeof args[param.name] !== 'undefined') {
-      var isPassword;
-      if(param.type === 'string' && param.format === 'password' && maskPasswords) {
-        isPassword = true;
-      }
-
-      if (param.in === 'path') {
-        var reg = new RegExp('\{' + param.name + '\}', 'gi');
-        var value = args[param.name];
-
-        if (Array.isArray(value)) {
-          value = this.encodePathCollection(param.collectionFormat, param.name, value, isPassword);
-        } else {
-          value = this.encodePathParam(value, isPassword);
-        }
-
-        requestUrl = requestUrl.replace(reg, value);
-      } else if (param.in === 'query' && typeof args[param.name] !== 'undefined') {
-        if (querystring === '' && requestUrl.indexOf('?') < 0) {
-          querystring += '?';
-        } else {
-          querystring += '&';
-        }
-
-        if (typeof param.collectionFormat !== 'undefined') {
-          var qp = args[param.name];
-
-          if (Array.isArray(qp)) {
-            querystring += this.encodeQueryCollection(param.collectionFormat, param.name, qp, isPassword);
-          } else {
-            querystring += this.encodeQueryKey(param.name) + '=' + this.encodeQueryParam(args[param.name], isPassword);
-          }
-        } else {
-          querystring += this.encodeQueryKey(param.name) + '=' + this.encodeQueryParam(args[param.name], isPassword);
-        }
-      } else if (param.in === 'formData') {
-        formParams[param.name] = args[param.name];
-      }
-    }
-  }
-  var url = this.scheme + '://' + this.host;
-
-  if (this.basePath !== '/') {
-    url += this.basePath;
-  }
-  return url + requestUrl + querystring;
-};
-
-Operation.prototype.getMissingParams = function (args) {
-  var missingParams = []; // check required params, track the ones that are missing
-  var i;
-
-  for (i = 0; i < this.parameters.length; i++) {
-    var param = this.parameters[i];
-
-    if (param.required === true) {
-      if (typeof args[param.name] === 'undefined') {
-        missingParams = param.name;
-      }
-    }
-  }
-
-  return missingParams;
-};
-
-Operation.prototype.getBody = function (headers, args, opts) {
-  var formParams = {}, hasFormParams, param, body, key, value, hasBody = false;
-
-  // look at each param and put form params in an object
-  for (var i = 0; i < this.parameters.length; i++) {
-    param = this.parameters[i];
-    if (typeof args[param.name] !== 'undefined') {
-      var isPassword;
-      if(param.type === 'string' && param.format === 'password') {
-        isPassword = 'password';
-      }
-      if (param.in === 'body') {
-        body = args[param.name];
-      } else if (param.in === 'formData') {
-        formParams[param.name] = {
-          param: param,
-          value: args[param.name],
-          password: isPassword
-        };
-        hasFormParams = true;
-      }
-    }
-    else {
-      if(param.in === 'body') {
-        hasBody = true;
-      }
-    }
-  }
-
-  // if body is null and hasBody is true, AND a JSON body is requested, send empty {}
-  if(hasBody && typeof body === 'undefined') {
-    var contentType = headers['Content-Type'];
-    if(contentType && contentType.indexOf('application/json') === 0) {
-      body = '{}';
-    }
-  }
-
-  var isMultiPart = false;
-  if(headers['Content-Type'] && headers['Content-Type'].indexOf('multipart/form-data') >= 0) {
-    isMultiPart = true;
-  }
-
-  // handle form params
-  if (hasFormParams && !isMultiPart) {
-    var encoded = '';
-
-    for (key in formParams) {
-      param = formParams[key].param;
-      value = formParams[key].value;
-      var password;
-
-      if(opts && opts.maskPasswords) {
-        password = formParams[key].password;
-      }
-
-      if (typeof value !== 'undefined') {
-        if (Array.isArray(value)) {
-          if (encoded !== '') {
-            encoded += '&';
-          }
-          encoded += this.encodeQueryCollection(param.collectionFormat, key, value, password);
-        }
-        else {
-          if (encoded !== '') {
-            encoded += '&';
-          }
-
-          encoded += encodeURIComponent(key) + '=' + mask(encodeURIComponent(value), password);
-        }
-      }
-    }
-
-    body = encoded;
-  } else if (isMultiPart) {
-    var bodyParam;
-    if (typeof FormData === 'function') {
-      bodyParam = new FormData();
-
-      bodyParam.type = 'formData';
-
-      for (key in formParams) {
-        param = formParams[key].param;
-        value = args[key];
-
-        if (typeof value !== 'undefined') {
-          if({}.toString.apply(value) === '[object File]') {
-            bodyParam.append(key, value);
-          }
-          else if (value.type === 'file' && value.value) {
-            bodyParam.append(key, value.value);
-          } else {
-            if (Array.isArray(value)) {
-              if(param.collectionFormat === 'multi') {
-                bodyParam.delete(key);
-                for(var v in value) {
-                  bodyParam.append(key, value[v]);
-                }
-              }
-              else {
-                bodyParam.append(key, this.encodeQueryCollection(param.collectionFormat, key, value).split('=').slice(1).join('='));
-              }
-            }
-            else {
-              bodyParam.append(key, value);
-            }
-          }
-        }
-      }
-      body = bodyParam;
-    }
-    else {
-      bodyParam = {};
-      for (key in formParams) {
-        value = args[key];
-        if (Array.isArray(value)) {
-          var delimeter;
-          var format = param.collectionFormat || 'multi';
-          if(format === 'ssv') {
-            delimeter = ' ';
-          }
-          else if(format === 'pipes') {
-            delimeter = '|';
-          }
-          else if(format === 'tsv') {
-            delimeter = '\t';
-          }
-          else if(format === 'multi') {
-            bodyParam[key] = value;
-            break;
-          }
-          else {
-            delimeter = ',';
-          }
-          var data;
-          value.forEach(function(v) {
-            if(data) {
-              data += delimeter;
-            }
-            else {
-              data = '';
-            }
-            data += v;
-          });
-          bodyParam[key] = data;
-        }
-        else {
-          bodyParam[key] = value;
-        }
-      }
-      body = bodyParam;
-    }
-    headers['Content-Type'] = 'multipart/form-data';
-  }
-
-  return body;
-};
-
-/**
- * gets sample response for a single operation
- **/
-Operation.prototype.getModelSampleJSON = function (type, models) {
-  var listType, sampleJson, innerType;
-  models = models || {};
-
-  listType = (type instanceof Array);
-  innerType = listType ? type[0] : type;
-
-  if(models[innerType]) {
-    sampleJson = models[innerType].createJSONSample();
-  } else if (this.getInlineModel(innerType)){
-    sampleJson = this.getInlineModel(innerType).createJSONSample(); // may return null, if type isn't correct
-  }
-
-
-  if (sampleJson) {
-    sampleJson = listType ? [sampleJson] : sampleJson;
-
-    if (typeof sampleJson === 'string') {
-      return sampleJson;
-    } else if (_.isObject(sampleJson)) {
-      var t = sampleJson;
-
-      if (sampleJson instanceof Array && sampleJson.length > 0) {
-        t = sampleJson[0];
-      }
-
-      if (t.nodeName && typeof t === 'Node') {
-        var xmlString = new XMLSerializer().serializeToString(t);
-
-        return this.formatXml(xmlString);
-      } else {
-        return JSON.stringify(sampleJson, null, 2);
-      }
-    } else {
-      return sampleJson;
-    }
-  }
-};
-
-/**
- * legacy binding
- **/
-Operation.prototype.do = function (args, opts, callback, error, parent) {
-  return this.execute(args, opts, callback, error, parent);
-};
-
-/**
- * executes an operation
- **/
-Operation.prototype.execute = function (arg1, arg2, arg3, arg4, parent) {
-  var args = arg1 || {};
-  var opts = {}, success, error, deferred, timeout;
-
-  if (_.isObject(arg2)) {
-    opts = arg2;
-    success = arg3;
-    error = arg4;
-  }
-
-  timeout = typeof opts.timeout !== 'undefined' ? opts.timeout : this.timeout;
-
-  if(this.client) {
-    opts.client = this.client;
-  }
-
-  if(this.requestAgent) {
-    opts.requestAgent = this.requestAgent;
-  }
-
-  // add the request interceptor from parent, if none sent from client
-  if(!opts.requestInterceptor && this.requestInterceptor ) {
-    opts.requestInterceptor = this.requestInterceptor ;
-  }
-
-  if(!opts.responseInterceptor && this.responseInterceptor) {
-    opts.responseInterceptor = this.responseInterceptor;
-  }
-
-  if (typeof arg2 === 'function') {
-    success = arg2;
-    error = arg3;
-  }
-
-  if (this.parent.usePromise) {
-    deferred = Q.defer();
-  } else {
-    success = (success || this.parent.defaultSuccessCallback || helpers.log);
-    error = (error || this.parent.defaultErrorCallback || helpers.log);
-  }
-
-  if (typeof opts.useJQuery === 'undefined') {
-    opts.useJQuery = this.useJQuery;
-  }
-
-  if (typeof opts.jqueryAjaxCache === 'undefined') {
-    opts.jqueryAjaxCache = this.jqueryAjaxCache;
-  }
-
-  if (typeof opts.enableCookies === 'undefined') {
-    opts.enableCookies = this.enableCookies;
-  }
-
-  var missingParams = this.getMissingParams(args);
-
-  if (missingParams.length > 0) {
-    var message = 'missing required params: ' + missingParams;
-
-    helpers.fail(message);
-
-    if (this.parent.usePromise) {
-      deferred.reject(message);
-      return deferred.promise;
-    } else {
-      error(message, parent);
-      return {};
-    }
-  }
-
-  var allHeaders = this.getHeaderParams(args);
-  var contentTypeHeaders = this.setContentTypes(args, opts);
-  var headers = {}, attrname;
-
-  for (attrname in allHeaders) { headers[attrname] = allHeaders[attrname]; }
-  for (attrname in contentTypeHeaders) { headers[attrname] = contentTypeHeaders[attrname]; }
-
-  var body = this.getBody(contentTypeHeaders, args, opts);
-  var url = this.urlify(args, opts.maskPasswords);
-
-  if(url.indexOf('.{format}') > 0) {
-    if(headers) {
-      var format = headers.Accept || headers.accept;
-      if(format && format.indexOf('json') > 0) {
-        url = url.replace('.{format}', '.json');
-      }
-      else if(format && format.indexOf('xml') > 0) {
-        url = url.replace('.{format}', '.xml');
-      }
-    }
-  }
-
-  var obj = {
-    url: url,
-    method: this.method.toUpperCase(),
-    body: body,
-    enableCookies: opts.enableCookies,
-    useJQuery: opts.useJQuery,
-    jqueryAjaxCache: opts.jqueryAjaxCache,
-    deferred: deferred,
-    headers: headers,
-    clientAuthorizations: opts.clientAuthorizations,
-    operation: this,
-    connectionAgent: this.connectionAgent,
-    on: {
-      response: function (response) {
-        if (deferred) {
-          deferred.resolve(response);
-          return deferred.promise;
-        } else {
-          return success(response, parent);
-        }
-      },
-      error: function (response) {
-        if (deferred) {
-          deferred.reject(response);
-          return deferred.promise;
-        } else {
-          return error(response, parent);
-        }
-      }
-    }
-  };
-
-  if (timeout) {
-    obj.timeout = timeout;
-  }
-
-  this.clientAuthorizations.apply(obj, this.operation.security);
-  if (opts.mock === true) {
-    return obj;
-  } else {
-    return new SwaggerHttp().execute(obj, opts);
-  }
-};
-
-function itemByPriority(col, itemPriority) {
-
-  // No priorities? return first...
-  if(_.isEmpty(itemPriority)) {
-    return col[0];
-  }
-
-  for (var i = 0, len = itemPriority.length; i < len; i++) {
-    if(col.indexOf(itemPriority[i]) > -1) {
-      return itemPriority[i];
-    }
-  }
-
-  // Otherwise return first
-  return col[0];
-}
-
-Operation.prototype.setContentTypes = function (args, opts) {
-  // default type
-  var allDefinedParams = this.parameters;
-  var body;
-  var consumes = args.parameterContentType || itemByPriority(this.consumes, ['application/json', 'application/yaml']);
-  var accepts = opts.responseContentType || itemByPriority(this.produces, ['application/json', 'application/yaml']);
-  var definedFileParams = [];
-  var definedFormParams = [];
-  var headers = {};
-  var i;
-
-  // get params from the operation and set them in definedFileParams, definedFormParams, headers
-  for (i = 0; i < allDefinedParams.length; i++) {
-    var param = allDefinedParams[i];
-
-    if (param.in === 'formData') {
-      if (param.type === 'file') {
-        definedFileParams.push(param);
-      } else {
-        definedFormParams.push(param);
-      }
-    } else if (param.in === 'header' && opts) {
-      var key = param.name;
-      var headerValue = opts[param.name];
-
-      if (typeof opts[param.name] !== 'undefined') {
-        headers[key] = headerValue;
-      }
-    } else if (param.in === 'body' && typeof args[param.name] !== 'undefined') {
-      body = args[param.name];
-    }
-  }
-
-  // if there's a body, need to set the consumes header via requestContentType
-  var hasBody = body || definedFileParams.length || definedFormParams.length;
-  if (this.method === 'post' || this.method === 'put' || this.method === 'patch' ||
-      ((this.method === 'delete' || this.method === 'get') && hasBody)) {
-    if (opts.requestContentType) {
-      consumes = opts.requestContentType;
-    }
-    // if any form params, content type must be set
-    if (definedFormParams.length > 0) {
-      consumes = undefined;
-      if (opts.requestContentType) {             // override if set
-        consumes = opts.requestContentType;
-      } else if (definedFileParams.length > 0) { // if a file, must be multipart/form-data
-        consumes = 'multipart/form-data';
-      } else {
-        if (this.consumes && this.consumes.length > 0) {
-          // use the consumes setting
-          for(var c in this.consumes) {
-            var chk = this.consumes[c];
-            if(chk.indexOf('application/x-www-form-urlencoded') === 0 || chk.indexOf('multipart/form-data') === 0) {
-              consumes = chk;
-            }
-          }
-        }
-      }
-      if(typeof consumes === 'undefined') {
-        // default to x-www-from-urlencoded
-        consumes = 'application/x-www-form-urlencoded';
-      }
-    }
-  }
-  else {
-    consumes = null;
-  }
-
-  if (consumes && this.consumes) {
-    if (this.consumes.indexOf(consumes) === -1) {
-      helpers.log('server doesn\'t consume ' + consumes + ', try ' + JSON.stringify(this.consumes));
-    }
-  }
-
-  if (!this.matchesAccept(accepts)) {
-    helpers.log('server can\'t produce ' + accepts);
-  }
-
-  if ((consumes && body !== '') || (consumes === 'application/x-www-form-urlencoded')) {
-    headers['Content-Type'] = consumes;
-  }
-  else if(this.consumes && this.consumes.length > 0 && this.consumes[0] === 'application/x-www-form-urlencoded') {
-    headers['Content-Type'] = this.consumes[0];
-  }
-
-  if (accepts) {
-    headers.Accept = accepts;
-  }
-
-  return headers;
-};
-
-/**
- * Returns true if the request accepts header matches anything in this.produces.
- *  If this.produces contains * / *, ignore the accept header.
- * @param {string=} accepts The client request accept header.
- * @return {boolean}
- */
-Operation.prototype.matchesAccept = function(accepts) {
-  // no accepts or produces, no problem!
-  if (!accepts || !this.produces) {
-    return true;
-  }
-  return this.produces.indexOf(accepts) !== -1 || this.produces.indexOf('*/*') !== -1;
-};
-
-Operation.prototype.asCurl = function (args1, args2) {
-  var opts = {mock: true, maskPasswords: true};
-  if (typeof args2 === 'object') {
-    for (var argKey in args2) {
-      opts[argKey] = args2[argKey];
-    }
-  }
-  var obj = this.execute(args1, opts);
-
-  this.clientAuthorizations.apply(obj, this.operation.security);
-
-  var results = [];
-
-  results.push('-X ' + this.method.toUpperCase());
-
-  if (typeof obj.headers !== 'undefined') {
-    var key;
-
-    for (key in obj.headers) {
-      var value = obj.headers[key];
-      if(typeof value === 'string'){
-        value = value.replace(/\'/g, '\\u0027');
-      }
-      results.push('--header \'' + key + ': ' + value + '\'');
-    }
-  }
-  var isFormData = false;
-  var isMultipart = false;
-
-  var type = obj.headers['Content-Type'];
-  if(type && type.indexOf('application/x-www-form-urlencoded') === 0) {
-    isFormData = true;
-  }
-  else if (type && type.indexOf('multipart/form-data') === 0) {
-    isFormData = true;
-    isMultipart = true;
-  }
-
-  if (obj.body) {
-    var body;
-    if (_.isObject(obj.body)) {
-      if(isMultipart) {
-        isMultipart = true;
-        // add the form data
-        for(var i = 0; i < this.parameters.length; i++) {
-          var parameter = this.parameters[i];
-          if(parameter.in === 'formData') {
-            if (!body) {
-              body = '';
-            }
-
-            var paramValue;
-            if(typeof FormData === 'function' && obj.body instanceof FormData) {
-              paramValue = obj.body.getAll(parameter.name);
-            }
-            else {
-              paramValue = obj.body[parameter.name];
-            }
-            if (paramValue) {
-              if (parameter.type === 'file') {
-                if(paramValue.name) {
-                  body += '-F ' + parameter.name + '=@"' + paramValue.name + '" ';
-                }
-              }
-              else {
-                if (Array.isArray(paramValue)) {
-                  if(parameter.collectionFormat === 'multi') {
-                    for(var v in paramValue) {
-                      body += '-F ' + this.encodeQueryKey(parameter.name) + '=' + mask(paramValue[v], parameter.format) + ' ';
-                    }
-                  }
-                  else {
-                    body += '-F ' + this.encodeQueryCollection(parameter.collectionFormat, parameter.name, mask(paramValue, parameter.format)) + ' ';
-                  }
-                } else {
-                  body += '-F ' + this.encodeQueryKey(parameter.name) + '=' + mask(paramValue, parameter.format) + ' ';
-                }
-              }
-            }
-          }
-        }
-      }
-      if(!body) {
-        body = JSON.stringify(obj.body);
-      }
-    } else {
-      body = obj.body;
-    }
-    // escape @ => %40, ' => %27
-    body = body.replace(/\'/g, '%27').replace(/\n/g, ' \\ \n ');
-
-    if(!isFormData) {
-      // escape & => %26
-      body = body.replace(/&/g, '%26');
-    }
-    if(isMultipart) {
-      results.push(body);
-    }
-    else {
-      results.push('-d \'' + body.replace(/@/g, '%40') + '\'');
-    }
-  }
-
-  return 'curl ' + (results.join(' ')) + ' \'' + obj.url + '\'';
-};
-
-Operation.prototype.encodePathCollection = function (type, name, value, maskPasswords) {
-  var encoded = '';
-  var i;
-  var separator = '';
-
-  if (type === 'ssv') {
-    separator = '%20';
-  } else if (type === 'tsv') {
-    separator = '%09';
-  } else if (type === 'pipes') {
-    separator = '|';
-  } else {
-    separator = ',';
-  }
-
-  for (i = 0; i < value.length; i++) {
-    if (i === 0) {
-      encoded = this.encodeQueryParam(value[i], maskPasswords);
-    } else {
-      encoded += separator + this.encodeQueryParam(value[i], maskPasswords);
-    }
-  }
-
-  return encoded;
-};
-
-Operation.prototype.encodeQueryCollection = function (type, name, value, maskPasswords) {
-  var encoded = '';
-  var i;
-
-  type = type || 'default';
-  if (type === 'default' || type === 'multi') {
-    for (i = 0; i < value.length; i++) {
-      if (i > 0) {encoded += '&';}
-
-      encoded += this.encodeQueryKey(name) + '=' + mask(this.encodeQueryParam(value[i]), maskPasswords);
-    }
-  } else {
-    var separator = '';
-
-    if (type === 'csv') {
-      separator = ',';
-    } else if (type === 'ssv') {
-      separator = '%20';
-    } else if (type === 'tsv') {
-      separator = '%09';
-    } else if (type === 'pipes') {
-      separator = '|';
-    } else if (type === 'brackets') {
-      for (i = 0; i < value.length; i++) {
-        if (i !== 0) {
-          encoded += '&';
-        }
-        encoded += this.encodeQueryKey(name) + '[]=' + mask(this.encodeQueryParam(value[i]), maskPasswords);
-      }
-    }
-
-    if (separator !== '') {
-      for (i = 0; i < value.length; i++) {
-        if (i === 0) {
-          encoded = this.encodeQueryKey(name) + '=' + this.encodeQueryParam(value[i]);
-        } else {
-          encoded += separator + this.encodeQueryParam(value[i]);
-        }
-      }
-    }
-  }
-
-  return encoded;
-};
-
-Operation.prototype.encodeQueryKey = function (arg) {
-  return encodeURIComponent(arg)
-      .replace('%5B','[').replace('%5D', ']').replace('%24', '$');
-};
-
-Operation.prototype.encodeQueryParam = function (arg, maskPasswords) {
-  if(maskPasswords) {
-    return "******";
-  }
-  return encodeURIComponent(arg);
-};
-
-/**
- * TODO revisit, might not want to leave '/'
- **/
-Operation.prototype.encodePathParam = function (pathParam, maskPasswords) {
-  return encodeURIComponent(pathParam, maskPasswords);
-};
-
-var mask = function(value, format) {
-  if(typeof format === 'string' && format === 'password') {
-    return '******';
-  }
-  return value;
-}
-},{"../helpers":4,"../http":5,"./model":9,"lodash-compat/lang/cloneDeep":138,"lodash-compat/lang/isEmpty":141,"lodash-compat/lang/isObject":144,"lodash-compat/lang/isUndefined":148,"q":157}],11:[function(require,module,exports){
-'use strict';
-
-var OperationGroup = module.exports = function (tag, description, externalDocs, operation) {
-  this.description = description;
-  this.externalDocs = externalDocs;
-  this.name = tag;
-  this.operation = operation;
-  this.operationsArray = [];
-  this.path = tag;
-  this.tag = tag;
-};
-
-OperationGroup.prototype.sort = function () {
-
-};
-
-
-},{}],12:[function(require,module,exports){
-// shim for using process in browser
-
-var process = module.exports = {};
-var queue = [];
-var draining = false;
-
-function drainQueue() {
-    if (draining) {
-        return;
-    }
-    draining = true;
-    var currentQueue;
-    var len = queue.length;
-    while(len) {
-        currentQueue = queue;
-        queue = [];
-        var i = -1;
-        while (++i < len) {
-            currentQueue[i]();
-        }
-        len = queue.length;
-    }
-    draining = false;
-}
-process.nextTick = function (fun) {
-    queue.push(fun);
-    if (!draining) {
-        setTimeout(drainQueue, 0);
-    }
-};
-
-process.title = 'browser';
-process.browser = true;
-process.env = {};
-process.argv = [];
-process.version = ''; // empty string to avoid regexp issues
-process.versions = {};
-
-function noop() {}
-
-process.on = noop;
-process.addListener = noop;
-process.once = noop;
-process.off = noop;
-process.removeListener = noop;
-process.removeAllListeners = noop;
-process.emit = noop;
-
-process.binding = function (name) {
-    throw new Error('process.binding is not supported');
-};
-
-// TODO(shtylman)
-process.cwd = function () { return '/' };
-process.chdir = function (dir) {
-    throw new Error('process.chdir is not supported');
-};
-process.umask = function() { return 0; };
-
-},{}],13:[function(require,module,exports){
-(function (Buffer){
-(function () {
-  "use strict";
-
-  function btoa(str) {
-    var buffer
-      ;
-
-    if (str instanceof Buffer) {
-      buffer = str;
-    } else {
-      buffer = new Buffer(str.toString(), 'binary');
-    }
-
-    return buffer.toString('base64');
-  }
-
-  module.exports = btoa;
-}());
-
-}).call(this,require("buffer").Buffer)
-
-},{"buffer":14}],14:[function(require,module,exports){
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author   Feross Aboukhadijeh <fe...@feross.org> <http://feross.org>
- * @license  MIT
- */
-
-var base64 = require('base64-js')
-var ieee754 = require('ieee754')
-var isArray = require('is-array')
-
-exports.Buffer = Buffer
-exports.SlowBuffer = SlowBuffer
-exports.INSPECT_MAX_BYTES = 50
-Buffer.poolSize = 8192 // not used by this implementation
-
-var rootParent = {}
-
-/**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- *   === true    Use Uint8Array implementation (fastest)
- *   === false   Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * Due to various browser bugs, sometimes the Object implementation will be used even
- * when the browser supports typed arrays.
- *
- * Note:
- *
- *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
- *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
- *
- *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
- *     on objects.
- *
- *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
- *
- *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- *     incorrect length in some situations.
-
- * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
- * get the Object implementation, which is slower but behaves correctly.
- */
-Buffer.TYPED_ARRAY_SUPPORT = (function () {
-  function Bar () {}
-  try {
-    var arr = new Uint8Array(1)
-    arr.foo = function () { return 42 }
-    arr.constructor = Bar
-    return arr.foo() === 42 && // typed array instances can be augmented
-        arr.constructor === Bar && // constructor can be set
-        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
-        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
-  } catch (e) {
-    return false
-  }
-})()
-
-function kMaxLength () {
-  return Buffer.TYPED_ARRAY_SUPPORT
-    ? 0x7fffffff
-    : 0x3fffffff
-}
-
-/**
- * Class: Buffer
- * =============
- *
- * The Buffer constructor returns instances of `Uint8Array` that are augmented
- * with function properties for all the node `Buffer` API functions. We use
- * `Uint8Array` so that square bracket notation works as expected -- it returns
- * a single octet.
- *
- * By augmenting the instances, we can avoid modifying the `Uint8Array`
- * prototype.
- */
-function Buffer (arg) {
-  if (!(this instanceof Buffer)) {
-    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
-    if (arguments.length > 1) return new Buffer(arg, arguments[1])
-    return new Buffer(arg)
-  }
-
-  this.length = 0
-  this.parent = undefined
-
-  // Common case.
-  if (typeof arg === 'number') {
-    return fromNumber(this, arg)
-  }
-
-  // Slightly less common case.
-  if (typeof arg === 'string') {
-    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
-  }
-
-  // Unusual.
-  return fromObject(this, arg)
-}
-
-function fromNumber (that, length) {
-  that = allocate(that, length < 0 ? 0 : checked(length) | 0)
-  if (!Buffer.TYPED_ARRAY_SUPPORT) {
-    for (var i = 0; i < length; i++) {
-      that[i] = 0
-    }
-  }
-  return that
-}
-
-function fromString (that, string, encoding) {
-  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
-
-  // Assumption: byteLength() return value is always < kMaxLength.
-  var length = byteLength(string, encoding) | 0
-  that = allocate(that, length)
-
-  that.write(string, encoding)
-  return that
-}
-
-function fromObject (that, object) {
-  if (Buffer.isBuffer(object)) return fromBuffer(that, object)
-
-  if (isArray(object)) return fromArray(that, object)
-
-  if (object == null) {
-    throw new TypeError('must start with number, buffer, array or string')
-  }
-
-  if (typeof ArrayBuffer !== 'undefined') {
-    if (object.buffer instanceof ArrayBuffer) {
-      return fromTypedArray(that, object)
-    }
-    if (object instanceof ArrayBuffer) {
-      return fromArrayBuffer(that, object)
-    }
-  }
-
-  if (object.length) return fromArrayLike(that, object)
-
-  return fromJsonObject(that, object)
-}
-
-function fromBuffer (that, buffer) {
-  var length = checked(buffer.length) | 0
-  that = allocate(that, length)
-  buffer.copy(that, 0, 0, length)
-  return that
-}
-
-function fromArray (that, array) {
-  var length = checked(array.length) | 0
-  that = allocate(that, length)
-  for (var i = 0; i < length; i += 1) {
-    that[i] = array[i] & 255
-  }
-  return that
-}
-
-// Duplicate of fromArray() to keep fromArray() monomorphic.
-function fromTypedArray (that, array) {
-  var length = checked(array.length) | 0
-  that = allocate(that, length)
-  // Truncating the elements is probably not what people expect from typed
-  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
-  // of the old Buffer constructor.
-  for (var i = 0; i < length; i += 1) {
-    that[i] = array[i] & 255
-  }
-  return that
-}
-
-function fromArrayBuffer (that, array) {
-  if (Buffer.TYPED_ARRAY_SUPPORT) {
-    // Return an augmented `Uint8Array` instance, for best performance
-    array.byteLength
-    that = Buffer._augment(new Uint8Array(array))
-  } else {
-    // Fallback: Return an object instance of the Buffer class
-    that = fromTypedArray(that, new Uint8Array(array))
-  }
-  return that
-}
-
-function fromArrayLike (that, array) {
-  var length = checked(array.length) | 0
-  that = allocate(that, length)
-  for (var i = 0; i < length; i += 1) {
-    that[i] = array[i] & 255
-  }
-  return that
-}
-
-// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
-// Returns a zero-length buffer for inputs that don't conform to the spec.
-function fromJsonObject (that, object) {
-  var array
-  var length = 0
-
-  if (object.type === 'Buffer' && isArray(object.data)) {
-    array = object.data
-    length = checked(array.length) | 0
-  }
-  that = allocate(that, length)
-
-  for (var i = 0; i < length; i += 1) {
-    that[i] = array[i] & 255
-  }
-  return that
-}
-
-function allocate (that, length) {
-  if (Buffer.TYPED_ARRAY_SUPPORT) {
-    // Return an augmented `Uint8Array` instance, for best performance
-    that = Buffer._augment(new Uint8Array(length))
-  } else {
-    // Fallback: Return an object instance of the Buffer class
-    that.length = length
-    that._isBuffer = true
-  }
-
-  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
-  if (fromPool) that.parent = rootParent
-
-  return that
-}
-
-function checked (length) {
-  // Note: cannot use `length < kMaxLength` here because that fails when
-  // length is NaN (which is otherwise coerced to zero.)
-  if (length >= kMaxLength()) {
-    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
-                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
-  }
-  return length | 0
-}
-
-function SlowBuffer (subject, encoding) {
-  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
-
-  var buf = new Buffer(subject, encoding)
-  delete buf.parent
-  return buf
-}
-
-Buffer.isBuffer = function isBuffer (b) {
-  return !!(b != null && b._isBuffer)
-}
-
-Buffer.compare = function compare (a, b) {
-  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
-    throw new TypeError('Arguments must be Buffers')
-  }
-
-  if (a === b) return 0
-
-  var x = a.length
-  var y = b.length
-
-  var i = 0
-  var len = Math.min(x, y)
-  while (i < len) {
-    if (a[i] !== b[i]) break
-
-    ++i
-  }
-
-  if (i !== len) {
-    x = a[i]
-    y = b[i]
-  }
-
-  if (x < y) return -1
-  if (y < x) return 1
-  return 0
-}
-
-Buffer.isEncoding = function isEncoding (encoding) {
... 97564 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.