From 6422201c269d2b36c08d2287e5c9abf72079cf0d Mon Sep 17 00:00:00 2001 From: Marcel Patzsch Date: Sun, 27 Dec 2020 14:37:52 +0100 Subject: [PATCH 01/62] Add .gitignore Copied from https://github.com/github/gitignore/blob/master/Node.gitignore --- .gitignore | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f22b9c --- /dev/null +++ b/.gitignore @@ -0,0 +1,116 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* From fbee5e2f64ce4a549c2e577bf13a47acb4029260 Mon Sep 17 00:00:00 2001 From: Marcel Patzsch Date: Sun, 27 Dec 2020 14:45:05 +0100 Subject: [PATCH 02/62] Update package.json -Increase Version -Add Contributor -Change Author to Object -Add Hompage -Add Repository -Add Bug-Tracker -Remove package bootstrap from development dependencies is already in production dependencies -Add package http-server -Add build script > webpack -Add start script -Add test script --- package-lock.json | 5782 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 91 +- 2 files changed, 5838 insertions(+), 35 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f819a74 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5782 @@ +{ + "name": "thw-egs", + "version": "0.0.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true, + "optional": true + }, + "backbone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "requires": { + "underscore": ">=1.8.3" + } + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" + }, + "bootstrap-webpack": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/bootstrap-webpack/-/bootstrap-webpack-0.0.5.tgz", + "integrity": "sha1-yENJQCIUC1RbcRtc0nKUK52gF2Y=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "browserify-aes": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-db": { + "version": "1.0.30001170", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001170.tgz", + "integrity": "sha512-NzQ5cfHv/pCgVbNWl9eIILms/hb57N+8Ku2yf2IOkBCmYSF4pweMtLTbBAwN/LzKPEtxE42hhTz0sb8gBlkPXA==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "^1.1.3" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "optional": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "coffee-loader": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/coffee-loader/-/coffee-loader-0.7.3.tgz", + "integrity": "sha1-+tvG79b8fsyIxbMEaiwpIGa8tUo=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2" + } + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "^1.0.0" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "optional": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, + "crypto-browserify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "dev": true, + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.23.1.tgz", + "integrity": "sha1-n6I/K1wJZSNZEK1ezvO4o2OQ/lA=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.5.1", + "cssnano": ">=2.6.1 <4", + "loader-utils": "~0.2.2", + "lodash.camelcase": "^3.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.0.0", + "postcss-modules-local-by-default": "^1.0.1", + "postcss-modules-scope": "^1.0.0", + "postcss-modules-values": "^1.1.0", + "source-list-map": "^0.1.4" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz", + "integrity": "sha1-E5uv00o1/QwUKEhwSeBpnm9qLCE=", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecstatic": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", + "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", + "dev": true, + "requires": { + "he": "^1.1.1", + "mime": "^1.6.0", + "minimist": "^1.1.0", + "url-join": "^2.0.5" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.633", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz", + "integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" + }, + "dependencies": { + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + } + } + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "exports-loader": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "source-map": "0.5.x" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "optional": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extract-text-webpack-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz", + "integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=", + "dev": true, + "requires": { + "async": "^1.5.0", + "loader-utils": "^0.2.3", + "webpack-sources": "^0.1.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "optional": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-loader": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz", + "integrity": "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=", + "dev": true, + "requires": { + "loader-utils": "~0.2.5" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "dev": true + }, + "follow-redirects": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "handlebars-loader": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/handlebars-loader/-/handlebars-loader-1.7.1.tgz", + "integrity": "sha512-Q+Z/hDPQzU8ZTlVnAe/0T1LHABlyhL7opNcSKcQDhmUXK2ByGTqib1Z2Tfv4Ic50WqDcLFWQcOb3mhjcBRbscQ==", + "dev": true, + "requires": { + "async": "~0.2.10", + "fastparse": "^1.0.0", + "loader-utils": "1.0.x", + "object-assign": "^4.1.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.0.4.tgz", + "integrity": "sha1-E/Vhl/FSOjBYkSSLTHJEVAhIQmw=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true, + "optional": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + } + } + } + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "^3.4.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "toposort": "^1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "http-server": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", + "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "dev": true, + "requires": { + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "ecstatic": "^3.3.2", + "http-proxy": "^1.18.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0" + }, + "dependencies": { + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "imports-loader": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.6.5.tgz", + "integrity": "sha1-rnRlMDHVnjezwvslRKxhrq41MKY=", + "dev": true, + "requires": { + "loader-utils": "0.2.x", + "source-map": "0.1.x" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "jquery": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", + "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "dev": true, + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "less-loader": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-2.2.3.tgz", + "integrity": "sha1-ttj4E5yEk98J2ZKpOgBzSwj4RSg=", + "dev": true, + "requires": { + "loader-utils": "^0.2.5" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash._createcompounder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz", + "integrity": "sha1-XdLLVTctbnDg4jkvsjBNZjEJEHU=", + "dev": true, + "requires": { + "lodash.deburr": "^3.0.0", + "lodash.words": "^3.0.0" + } + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.camelcase": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz", + "integrity": "sha1-kyyLh/ikN3iXxnGXUzKC+Xrqwpg=", + "dev": true, + "requires": { + "lodash._createcompounder": "^3.0.0" + } + }, + "lodash.deburr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-3.2.0.tgz", + "integrity": "sha1-baj1QzSjZqfPTEx2742Aqhs2XtU=", + "dev": true, + "requires": { + "lodash._root": "^3.0.0" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.words": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.words/-/lodash.words-3.2.0.tgz", + "integrity": "sha1-TiqGSbwIdFsXxpWxo86P7llmI7M=", + "dev": true, + "requires": { + "lodash._root": "^3.0.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-expression-evaluator": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.7.tgz", + "integrity": "sha512-nrbaifCl42w37hYd6oRLvoymFK42tWB+WQTMFtksDGQMi5GvlJwnz/CsS30FFAISFLtX+A0csJ0xLiuuyyec7w==", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-libs-browser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.1.4", + "buffer": "^4.9.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "0.0.1", + "os-browserify": "^0.2.0", + "path-browserify": "0.0.0", + "process": "^0.11.0", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.0.5", + "stream-browserify": "^2.0.1", + "stream-http": "^2.3.1", + "string_decoder": "^0.10.25", + "timers-browserify": "^2.0.2", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "open": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "pbkdf2-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "^5.0.16" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "^5.0.5" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + } + }, + "reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + } + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", + "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "lodash": "^4.17.20", + "strip-ansi": "^3.0.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "ripemd160": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.4.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "optional": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", + "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", + "dev": true + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "style-loader": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "three": { + "version": "0.75.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.75.0.tgz", + "integrity": "sha1-lE3gxoqbG6K+eoKcBRGJGmFetQA=" + }, + "three-orbit-controls": { + "version": "72.0.0", + "resolved": "https://registry.npmjs.org/three-orbit-controls/-/three-orbit-controls-72.0.0.tgz", + "integrity": "sha1-E6TL83gMxuVEau0AMv4cUTXnJ1U=" + }, + "time-stamp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", + "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.12.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.3.tgz", + "integrity": "sha512-feZzR+kIcSVuLi3s/0x0b2Tx4Iokwqt+8PJM7yRHKuldg4MLdam4TCFeICv+lgDtuYiCtdmrtIP+uN9LWvDasw==", + "dev": true, + "optional": true + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "underscore": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", + "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + }, + "union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "requires": { + "qs": "^6.4.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "url-loader": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "mime": "1.3.x" + }, + "dependencies": { + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "dev": true, + "requires": { + "async": "^0.9.0", + "chokidar": "^1.0.0", + "graceful-fs": "^4.1.2" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "webpack": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", + "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", + "dev": true, + "requires": { + "acorn": "^3.0.0", + "async": "^1.3.0", + "clone": "^1.0.2", + "enhanced-resolve": "~0.9.0", + "interpret": "^0.6.4", + "loader-utils": "^0.2.11", + "memory-fs": "~0.3.0", + "mkdirp": "~0.5.0", + "node-libs-browser": "^0.7.0", + "optimist": "~0.6.0", + "supports-color": "^3.1.0", + "tapable": "~0.1.8", + "uglify-js": "~2.7.3", + "watchpack": "^0.2.1", + "webpack-core": "~0.6.9" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "1.16.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz", + "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", + "dev": true, + "requires": { + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "express": "^4.13.3", + "http-proxy-middleware": "~0.17.1", + "open": "0.0.5", + "optimist": "~0.6.1", + "serve-index": "^1.7.2", + "sockjs": "^0.3.15", + "sockjs-client": "^1.0.3", + "stream-cache": "~0.0.1", + "strip-ansi": "^3.0.0", + "supports-color": "^3.1.1", + "webpack-dev-middleware": "^1.10.2" + } + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.5.3" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } +} diff --git a/package.json b/package.json index cfb31a4..21d7222 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,58 @@ { - "name": "thw-egs", - "version": "0.0.1", - "description": "", - "main": "index.html", - "scripts": {}, - "author": "Robert Wolke ", - "license": "MIT", - "devDependencies": { - "bootstrap": "^3.3.6", - "bootstrap-webpack": "0.0.5", - "coffee-loader": "^0.7.2", - "coffee-script": "^1.10.0", - "css-loader": "^0.23.1", - "exports-loader": "^0.6.3", - "extract-text-webpack-plugin": "^1.0.1", - "file-loader": "^0.8.5", - "handlebars": "^4.0.5", - "handlebars-loader": "^1.2.0", - "html-webpack-plugin": "^2.15.0", - "imports-loader": "^0.6.5", - "less": "^2.6.1", - "less-loader": "^2.2.3", - "style-loader": "^0.13.1", - "url-loader": "^0.5.7", - "webpack": "^1.12.14", - "webpack-dev-server": "^1.14.1" - }, - "dependencies": { - "backbone": "^1.3.3", - "bootstrap": "^3.3.6", - "jquery": "^2.2.3", - "three": "^0.75.0", - "three-orbit-controls": "^72.0.0", - "underscore": "^1.8.3" - } + "name": "thw-egs", + "version": "0.0.2", + "description": "", + "main": "index.html", + "scripts": { + "build": "npx webpack", + "start": "http-server", + "test": "http-server" + }, + "author": { + "name": "Robert Wolke", + "email": "r.wolke+app@thw-rostock.de" + }, + "contributors": [ + { + "name": "Marcel Patzsch", + "email": "coding@marcel-patzsch.de" + } + ], + "license": "MIT", + "homepage": "https://github.com/rwolke/thw-egs#readme", + "repository": { + "type": "git", + "url": "https://github.com/rwolke/thw-egs.git" + }, + "bugs": { + "url": "https://github.com/rwolke/thw-egs/issues" + }, + "devDependencies": { + "bootstrap-webpack": "0.0.5", + "coffee-loader": "^0.7.2", + "coffee-script": "^1.10.0", + "css-loader": "^0.23.1", + "exports-loader": "^0.6.3", + "extract-text-webpack-plugin": "^1.0.1", + "file-loader": "^0.8.5", + "handlebars": "^4.0.5", + "handlebars-loader": "^1.2.0", + "html-webpack-plugin": "^2.15.0", + "http-server": "^0.12.3", + "imports-loader": "^0.6.5", + "less": "^2.6.1", + "less-loader": "^2.2.3", + "style-loader": "^0.13.1", + "url-loader": "^0.5.7", + "webpack": "^1.12.14", + "webpack-dev-server": "^1.14.1" + }, + "dependencies": { + "backbone": "^1.3.3", + "bootstrap": "^3.3.6", + "jquery": "^2.2.3", + "three": "^0.75.0", + "three-orbit-controls": "^72.0.0", + "underscore": "^1.8.3" + } } From d3a694383381654f22150d2446ba2751d7a5d951 Mon Sep 17 00:00:00 2001 From: Marcel Patzsch Date: Sun, 27 Dec 2020 15:30:07 +0100 Subject: [PATCH 03/62] Bugfix - Solve Issue 13 -Changed Loading of Google Charts Library --- index.html | 2 +- js/app.js | 8037 ++++++- js/app.js.map | 2 +- js/lib.js | 53272 ++++++++++++++++++++++++++++++++++++++++++++++- js/lib.js.map | 2 +- src/app.coffee | 50 +- 6 files changed, 61317 insertions(+), 48 deletions(-) diff --git a/index.html b/index.html index 7cbbc57..40e2ba6 100644 --- a/index.html +++ b/index.html @@ -89,5 +89,5 @@ - + diff --git a/js/app.js b/js/app.js index 4e5e79c..20bd4a4 100644 --- a/js/app.js +++ b/js/app.js @@ -1,4 +1,8035 @@ -webpackJsonp([1],[function(t,e,n){var r,i,s,a,o,u,l,c,h,p,f=function(t,e){function n(){this.constructor=t}for(var r in e)d.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},d={}.hasOwnProperty;i=n(2),c=n(12),p=n(54),o=n(22),i.sync=function(t,e,n){var r,i;return r=e.id.split("/"),console.log("sync called with key: ",r),i="https://docs.google.com/spreadsheets/d/"+r[r.length-2]+"/gviz/tq?gid="+r[r.length-1],"read"===t?new h.visualization.Query(i).send(function(t){return function(t){return t.isError()?n.error(t):n.success(t)}}(this)):void 0},a=n(8),s=n(16),u=n(18),r=l=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,t),e.prototype.view={},e.prototype.egsElementProvider=null,e.prototype.dataSourceList=null,e.prototype.activeSource=null,e.prototype.activeConstruct=null,e.prototype.routes={"":"default",":skey":"loadSource",":skey/:sgid(/)":"loadSource",":skey/:sgid/:ckey/:cgid":"loadConstruct"},e.prototype["default"]=function(){return this.setActiveDataSource.call(this)},e.prototype.loadSource=function(t,e){return null==e&&(e=0),console.log("Routed to loadSource '"+t+"'/'"+e+"'"),this.setActiveDataSource.call(this,t+"/"+e)},e.prototype.loadConstruct=function(t,e,n,r){return console.log("Routed to loadConstruct '"+t+"'/'"+e+"'/'"+n+"'/'"+r+"'"),this.setActiveDataSource.call(this,t+"/"+e,function(i){return function(s){return i.setActiveConstruction.call(i,t+"/"+e+"/"+n+"/"+r,function(t){return i.view.EGS.showConstruct(t)})}}(this))},e.prototype.setActiveDataSource=function(t,e){return null==e&&(e=null),console.log("setActiveDataSource",t),t?(t=t.split("/"),t=t[0]+"/"+t[1],this.dataSourceList.get(t)||this.dataSourceList.add([{source:t}]),this.activeSource=this.dataSourceList.get(t).setSelected(e)):this.dataSourceList.length?this.activeSource=this.dataSourceList.at(0).setSelected(e):void 0},e.prototype.setActiveConstruction=function(t,e){var n;return null==e&&(e=null),n=this.dataSourceList.selected,null!==n?(console.log("setActiveConstruction",t),n.get("constructions").get(t)||alert("ausgewählte Konstruktion nicht in Datenquelle definiert!"),this.activeConstruct=n.get("constructions").get(t).setSelected(e)):void 0},e.prototype.initialize=function(t){var e,r,i,a,l,c,h;console.log("App Init"),this.dataSourceList=new s([{source:t.defaultSource}],{app:this}),this.egsElementProvider=new u,r=n(23),this.view.PrimaryNav=new r(this.dataSourceList),i=n(24),this.view.SecondaryNav=new i(this),e=n(21),this.view.DataSource=new e(this),this.view.EGS=new o(this,"display"),l=this.view,c=[];for(a in l)h=l[a],null!=h.startup?c.push(h.startup()):c.push(void 0);return c},e.prototype.start=function(){return console.log("App start"),i.history.start()},e}(i.Router),h=n(53),h.setOnLoadCallback(function(t){var e;return e=document.getElementsByTagName("body")[0],p.App?void 0:(p.App=new r({defaultSource:e.getAttribute("data-defaultSource")}),p.App.start())}),h.load("visualization","1",{packages:["table"]})},function(t,e){t.exports=function(t,e,n){if(arguments.length<3)throw new Error("Handlebars Helper equal needs 2 parameters");return t!=e?n.inverse(this):n.fn(this)}},function(t,e,n){var r,i;(function(s){!function(a){var o="object"==typeof self&&self.self===self&&self||"object"==typeof s&&s.global===s&&s;r=[n(12),n(4),e],i=function(t,e,n){o.Backbone=a(o,n,t,e)}.apply(e,r),!(void 0!==i&&(t.exports=i))}(function(t,e,n,r){var i=t.Backbone,s=Array.prototype.slice;e.VERSION="1.3.3",e.$=r,e.noConflict=function(){return t.Backbone=i,this},e.emulateHTTP=!1,e.emulateJSON=!1;var a=function(t,e,r){switch(t){case 1:return function(){return n[e](this[r])};case 2:return function(t){return n[e](this[r],t)};case 3:return function(t,i){return n[e](this[r],u(t,this),i)};case 4:return function(t,i,s){return n[e](this[r],u(t,this),i,s)};default:return function(){var t=s.call(arguments);return t.unshift(this[r]),n[e].apply(n,t)}}},o=function(t,e,r){n.each(e,function(e,i){n[i]&&(t.prototype[i]=a(e,i,r))})},u=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?l(t):n.isString(t)?function(e){return e.get(t)}:t},l=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}},c=e.Events={},h=/\s+/,p=function(t,e,r,i,s){var a,o=0;if(r&&"object"==typeof r){void 0!==i&&"context"in s&&void 0===s.context&&(s.context=i);for(a=n.keys(r);or;r++)n[r]=arguments[r+1];return p(m,this._events,t,void 0,n),this};var m=function(t,e,n,r){if(t){var i=t[e],s=t.all;i&&s&&(s=s.slice()),i&&y(i,r),s&&y(s,[e].concat(r))}return t},y=function(t,e){var n,r=-1,i=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:for(;++rr;r++)t[r+n]=e[r];for(r=0;rthis.length&&(i=this.length),0>i&&(i+=this.length+1);var s,a,o=[],u=[],l=[],c=[],h={},p=e.add,f=e.merge,d=e.remove,v=!1,g=this.comparator&&null==i&&e.sort!==!1,m=n.isString(this.comparator)?this.comparator:null;for(a=0;at&&(t+=this.length),this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,!0)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var r=e.length;return n.isFunction(e)&&(e=n.bind(e,this)),1===r||n.isString(e)?this.models=this.sortBy(e):this.models.sort(e),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return this.map(t+"")},fetch:function(t){t=n.extend({parse:!0},t);var e=t.success,r=this;return t.success=function(n){var i=t.reset?"reset":"set";r[i](n,t),e&&e.call(t.context,r,n,t),r.trigger("sync",r,n,t)},F(this,t),this.sync("read",this,t)},create:function(t,e){e=e?n.clone(e):{};var r=e.wait;if(t=this._prepareModel(t,e),!t)return!1;r||this.add(t,e);var i=this,s=e.success;return e.success=function(t,e,n){r&&i.add(t,n),s&&s.call(n.context,t,e,n)},t.save(null,e),t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t){return t[this.model.prototype.idAttribute||"id"]},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,e){if(this._isModel(t))return t.collection||(t.collection=this),t;e=e?n.clone(e):{},e.collection=this;var r=new this.model(t,e);return r.validationError?(this.trigger("invalid",this,r.validationError,e),!1):r},_removeModels:function(t,e){for(var n=[],r=0;r7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(N,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var r=document.body,i=r.insertBefore(this.iframe,r.firstChild).contentWindow;i.document.open(),i.document.close(),i.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};return this._usePushState?s("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?s("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),this.options.silent?void 0:this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),j.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();return e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment?!1:(this.iframe&&this.navigate(e),void this.loadUrl())},loadUrl:function(t){return this.matchRoot()?(t=this.fragment=this.getFragment(t),n.some(this.handlers,function(e){return e.route.test(t)?(e.callback(t),!0):void 0})):!1},navigate:function(t,e){if(!j.started)return!1;e&&e!==!0||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var r=n+t;if(t=this.decodeFragment(t.replace(V,"")),this.fragment!==t){if(this.fragment=t,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var i=this.iframe.contentWindow;e.replace||(i.document.open(),i.document.close()),this._updateHash(i.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else t.hash="#"+e}}),e.history=new j;var B=function(t,e){var r,i=this;return r=t&&n.has(t,"constructor")?t.constructor:function(){return i.apply(this,arguments)},n.extend(r,i,e),r.prototype=n.create(i.prototype,t),r.prototype.constructor=r,r.__super__=i.prototype,r};b.extend=_.extend=A.extend=k.extend=j.extend=B;var D=function(){throw new Error('A "url" property or function must be specified')},F=function(t,e){var n=e.error;e.error=function(r){n&&n.call(e.context,t,r,e),t.trigger("error",t,r,e)}};return e})}).call(e,function(){return this}())},function(t,e){"use strict";function n(t){return c[t]}function r(t){for(var e=1;en;n++)if(t[n]===e)return n;return-1}function s(t){if("string"!=typeof t){if(t&&t.toHTML)return t.toHTML();if(null==t)return"";if(!t)return t+"";t=""+t}return p.test(t)?t.replace(h,n):t}function a(t){return t||0===t?!(!v(t)||0!==t.length):!0}function o(t){var e=r({},t);return e._parent=t,e}function u(t,e){return t.path=e,t}function l(t,e){return(t?t+".":"")+e}e.__esModule=!0,e.extend=r,e.indexOf=i,e.escapeExpression=s,e.isEmpty=a,e.createFrame=o,e.blockParams=u,e.appendContextPath=l;var c={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},h=/[&<>"'`=]/g,p=/[&<>"'`=]/,f=Object.prototype.toString;e.toString=f;var d=function(t){return"function"==typeof t};d(/x/)&&(e.isFunction=d=function(t){return"function"==typeof t&&"[object Function]"===f.call(t)}),e.isFunction=d;var v=Array.isArray||function(t){return t&&"object"==typeof t?"[object Array]"===f.call(t):!1};e.isArray=v},,function(t,e){"use strict";function n(t,e){var i=e&&e.loc,s=void 0,a=void 0;i&&(s=i.start.line,a=i.start.column,t+=" - "+s+":"+a);for(var o=Error.prototype.constructor.call(this,t),u=0;u=f?d>o:o>d;p=d>=f?++o:--o){n={};for(h in this.columns){for(u=function(t){return t},"sheet"===h&&(u=function(t){return function(e){return[t.id,a(e,!1,t.id).join("/")].join("/")}}(this)),e=c=0,v=this.dataTable.getNumberOfColumns();v>=0?v>c:c>v;e=v>=0?++c:--c)(s&&this.dataTable.getValue(0,e)===this.columns[h]||this.dataTable.getColumnLabel(e)===this.columns[h])&&(n[h]=u(this.dataTable.getValue(p,e)));if(!n[h])return void alert("Übersichtstabelle: Spalte '"+this.columns[h]+"' wurde nicht in der Tabelle gefunden!")}r.push(n)}return console.log("DataSource: loaded construction list: ",r),{constructions:new i(r,{app:this.app})}},e}(r.Model)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t,e,n){this.helpers=t||{},this.partials=e||{},this.decorators=n||{},u.registerDefaultHelpers(this),l.registerDefaultDecorators(this)}e.__esModule=!0,e.HandlebarsEnvironment=i;var s=n(3),a=n(5),o=r(a),u=n(32),l=n(30),c=n(40),h=r(c),p="4.0.5";e.VERSION=p;var f=7;e.COMPILER_REVISION=f;var d={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};e.REVISION_CHANGES=d;var v="[object Object]";i.prototype={constructor:i,logger:h["default"],log:h["default"].log,registerHelper:function(t,e){if(s.toString.call(t)===v){if(e)throw new o["default"]("Arg not supported with multiple helpers");s.extend(this.helpers,t)}else this.helpers[t]=e},unregisterHelper:function(t){delete this.helpers[t]},registerPartial:function(t,e){if(s.toString.call(t)===v)s.extend(this.partials,t);else{if("undefined"==typeof e)throw new o["default"]('Attempting to register a partial called "'+t+'" as undefined');this.partials[t]=e}},unregisterPartial:function(t){delete this.partials[t]},registerDecorator:function(t,e){if(s.toString.call(t)===v){if(e)throw new o["default"]("Arg not supported with multiple decorators");s.extend(this.decorators,t)}else this.decorators[t]=e},unregisterDecorator:function(t){delete this.decorators[t]}};var g=h["default"].log;e.log=g,e.createFrame=s.createFrame,e.logger=h["default"]},function(t,e,n){t.exports=n(29)["default"]},,function(t,e,n){var r,i;(function(){function n(t){function e(e,n,r,i,s,a){for(;s>=0&&a>s;s+=t){var o=i?i[s]:s;r=n(r,e[o],o,e)}return r}return function(n,r,i,s){r=S(r,s,4);var a=!A(n)&&x.keys(n),o=(a||n).length,u=t>0?0:o-1;return arguments.length<3&&(i=n[a?a[u]:u],u+=t),e(n,r,i,a,u,o)}}function s(t){return function(e,n,r){n=M(n,r);for(var i=R(e),s=t>0?0:i-1;s>=0&&i>s;s+=t)if(n(e[s],s,e))return s;return-1}}function a(t,e,n){return function(r,i,s){var a=0,o=R(r);if("number"==typeof s)t>0?a=s>=0?s:Math.max(s+o,a):o=s>=0?Math.min(s+1,o):s+o+1;else if(n&&s&&o)return s=n(r,i),r[s]===i?s:-1;if(i!==i)return s=e(d.call(r,a,o),x.isNaN),s>=0?s+a:-1;for(s=t>0?a:o-1;s>=0&&o>s;s+=t)if(r[s]===i)return s;return-1}}function o(t,e){var n=j.length,r=t.constructor,i=x.isFunction(r)&&r.prototype||h,s="constructor";for(x.has(t,s)&&!x.contains(e,s)&&e.push(s);n--;)s=j[n],s in t&&t[s]!==i[s]&&!x.contains(e,s)&&e.push(s); -}var u=this,l=u._,c=Array.prototype,h=Object.prototype,p=Function.prototype,f=c.push,d=c.slice,v=h.toString,g=h.hasOwnProperty,m=Array.isArray,y=Object.keys,b=p.bind,w=Object.create,_=function(){},x=function(t){return t instanceof x?t:this instanceof x?void(this._wrapped=t):new x(t)};"undefined"!=typeof t&&t.exports&&(e=t.exports=x),e._=x,x.VERSION="1.8.3";var S=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,s){return t.call(e,n,r,i,s)}}return function(){return t.apply(e,arguments)}},M=function(t,e,n){return null==t?x.identity:x.isFunction(t)?S(t,e,n):x.isObject(t)?x.matcher(t):x.property(t)};x.iteratee=function(t,e){return M(t,e,1/0)};var E=function(t,e){return function(n){var r=arguments.length;if(2>r||null==n)return n;for(var i=1;r>i;i++)for(var s=arguments[i],a=t(s),o=a.length,u=0;o>u;u++){var l=a[u];e&&void 0!==n[l]||(n[l]=s[l])}return n}},k=function(t){if(!x.isObject(t))return{};if(w)return w(t);_.prototype=t;var e=new _;return _.prototype=null,e},I=function(t){return function(e){return null==e?void 0:e[t]}},P=Math.pow(2,53)-1,R=I("length"),A=function(t){var e=R(t);return"number"==typeof e&&e>=0&&P>=e};x.each=x.forEach=function(t,e,n){e=S(e,n);var r,i;if(A(t))for(r=0,i=t.length;i>r;r++)e(t[r],r,t);else{var s=x.keys(t);for(r=0,i=s.length;i>r;r++)e(t[s[r]],s[r],t)}return t},x.map=x.collect=function(t,e,n){e=M(e,n);for(var r=!A(t)&&x.keys(t),i=(r||t).length,s=Array(i),a=0;i>a;a++){var o=r?r[a]:a;s[a]=e(t[o],o,t)}return s},x.reduce=x.foldl=x.inject=n(1),x.reduceRight=x.foldr=n(-1),x.find=x.detect=function(t,e,n){var r;return r=A(t)?x.findIndex(t,e,n):x.findKey(t,e,n),void 0!==r&&-1!==r?t[r]:void 0},x.filter=x.select=function(t,e,n){var r=[];return e=M(e,n),x.each(t,function(t,n,i){e(t,n,i)&&r.push(t)}),r},x.reject=function(t,e,n){return x.filter(t,x.negate(M(e)),n)},x.every=x.all=function(t,e,n){e=M(e,n);for(var r=!A(t)&&x.keys(t),i=(r||t).length,s=0;i>s;s++){var a=r?r[s]:s;if(!e(t[a],a,t))return!1}return!0},x.some=x.any=function(t,e,n){e=M(e,n);for(var r=!A(t)&&x.keys(t),i=(r||t).length,s=0;i>s;s++){var a=r?r[s]:s;if(e(t[a],a,t))return!0}return!1},x.contains=x.includes=x.include=function(t,e,n,r){return A(t)||(t=x.values(t)),("number"!=typeof n||r)&&(n=0),x.indexOf(t,e,n)>=0},x.invoke=function(t,e){var n=d.call(arguments,2),r=x.isFunction(e);return x.map(t,function(t){var i=r?e:t[e];return null==i?i:i.apply(t,n)})},x.pluck=function(t,e){return x.map(t,x.property(e))},x.where=function(t,e){return x.filter(t,x.matcher(e))},x.findWhere=function(t,e){return x.find(t,x.matcher(e))},x.max=function(t,e,n){var r,i,s=-(1/0),a=-(1/0);if(null==e&&null!=t){t=A(t)?t:x.values(t);for(var o=0,u=t.length;u>o;o++)r=t[o],r>s&&(s=r)}else e=M(e,n),x.each(t,function(t,n,r){i=e(t,n,r),(i>a||i===-(1/0)&&s===-(1/0))&&(s=t,a=i)});return s},x.min=function(t,e,n){var r,i,s=1/0,a=1/0;if(null==e&&null!=t){t=A(t)?t:x.values(t);for(var o=0,u=t.length;u>o;o++)r=t[o],s>r&&(s=r)}else e=M(e,n),x.each(t,function(t,n,r){i=e(t,n,r),(a>i||i===1/0&&s===1/0)&&(s=t,a=i)});return s},x.shuffle=function(t){for(var e,n=A(t)?t:x.values(t),r=n.length,i=Array(r),s=0;r>s;s++)e=x.random(0,s),e!==s&&(i[s]=i[e]),i[e]=n[s];return i},x.sample=function(t,e,n){return null==e||n?(A(t)||(t=x.values(t)),t[x.random(t.length-1)]):x.shuffle(t).slice(0,Math.max(0,e))},x.sortBy=function(t,e,n){return e=M(e,n),x.pluck(x.map(t,function(t,n,r){return{value:t,index:n,criteria:e(t,n,r)}}).sort(function(t,e){var n=t.criteria,r=e.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(r>n||void 0===r)return-1}return t.index-e.index}),"value")};var C=function(t){return function(e,n,r){var i={};return n=M(n,r),x.each(e,function(r,s){var a=n(r,s,e);t(i,r,a)}),i}};x.groupBy=C(function(t,e,n){x.has(t,n)?t[n].push(e):t[n]=[e]}),x.indexBy=C(function(t,e,n){t[n]=e}),x.countBy=C(function(t,e,n){x.has(t,n)?t[n]++:t[n]=1}),x.toArray=function(t){return t?x.isArray(t)?d.call(t):A(t)?x.map(t,x.identity):x.values(t):[]},x.size=function(t){return null==t?0:A(t)?t.length:x.keys(t).length},x.partition=function(t,e,n){e=M(e,n);var r=[],i=[];return x.each(t,function(t,n,s){(e(t,n,s)?r:i).push(t)}),[r,i]},x.first=x.head=x.take=function(t,e,n){return null!=t?null==e||n?t[0]:x.initial(t,t.length-e):void 0},x.initial=function(t,e,n){return d.call(t,0,Math.max(0,t.length-(null==e||n?1:e)))},x.last=function(t,e,n){return null!=t?null==e||n?t[t.length-1]:x.rest(t,Math.max(0,t.length-e)):void 0},x.rest=x.tail=x.drop=function(t,e,n){return d.call(t,null==e||n?1:e)},x.compact=function(t){return x.filter(t,x.identity)};var T=function(t,e,n,r){for(var i=[],s=0,a=r||0,o=R(t);o>a;a++){var u=t[a];if(A(u)&&(x.isArray(u)||x.isArguments(u))){e||(u=T(u,e,n));var l=0,c=u.length;for(i.length+=c;c>l;)i[s++]=u[l++]}else n||(i[s++]=u)}return i};x.flatten=function(t,e){return T(t,e,!1)},x.without=function(t){return x.difference(t,d.call(arguments,1))},x.uniq=x.unique=function(t,e,n,r){x.isBoolean(e)||(r=n,n=e,e=!1),null!=n&&(n=M(n,r));for(var i=[],s=[],a=0,o=R(t);o>a;a++){var u=t[a],l=n?n(u,a,t):u;e?(a&&s===l||i.push(u),s=l):n?x.contains(s,l)||(s.push(l),i.push(u)):x.contains(i,u)||i.push(u)}return i},x.union=function(){return x.uniq(T(arguments,!0,!0))},x.intersection=function(t){for(var e=[],n=arguments.length,r=0,i=R(t);i>r;r++){var s=t[r];if(!x.contains(e,s)){for(var a=1;n>a&&x.contains(arguments[a],s);a++);a===n&&e.push(s)}}return e},x.difference=function(t){var e=T(arguments,!0,!0,1);return x.filter(t,function(t){return!x.contains(e,t)})},x.zip=function(){return x.unzip(arguments)},x.unzip=function(t){for(var e=t&&x.max(t,R).length||0,n=Array(e),r=0;e>r;r++)n[r]=x.pluck(t,r);return n},x.object=function(t,e){for(var n={},r=0,i=R(t);i>r;r++)e?n[t[r]]=e[r]:n[t[r][0]]=t[r][1];return n},x.findIndex=s(1),x.findLastIndex=s(-1),x.sortedIndex=function(t,e,n,r){n=M(n,r,1);for(var i=n(e),s=0,a=R(t);a>s;){var o=Math.floor((s+a)/2);n(t[o])s;s++,t+=n)i[s]=t;return i};var O=function(t,e,n,r,i){if(!(r instanceof e))return t.apply(n,i);var s=k(t.prototype),a=t.apply(s,i);return x.isObject(a)?a:s};x.bind=function(t,e){if(b&&t.bind===b)return b.apply(t,d.call(arguments,1));if(!x.isFunction(t))throw new TypeError("Bind must be called on a function");var n=d.call(arguments,2),r=function(){return O(t,r,e,this,n.concat(d.call(arguments)))};return r},x.partial=function(t){var e=d.call(arguments,1),n=function(){for(var r=0,i=e.length,s=Array(i),a=0;i>a;a++)s[a]=e[a]===x?arguments[r++]:e[a];for(;r=r)throw new Error("bindAll must be passed function names");for(e=1;r>e;e++)n=arguments[e],t[n]=x.bind(t[n],t);return t},x.memoize=function(t,e){var n=function(r){var i=n.cache,s=""+(e?e.apply(this,arguments):r);return x.has(i,s)||(i[s]=t.apply(this,arguments)),i[s]};return n.cache={},n},x.delay=function(t,e){var n=d.call(arguments,2);return setTimeout(function(){return t.apply(null,n)},e)},x.defer=x.partial(x.delay,x,1),x.throttle=function(t,e,n){var r,i,s,a=null,o=0;n||(n={});var u=function(){o=n.leading===!1?0:x.now(),a=null,s=t.apply(r,i),a||(r=i=null)};return function(){var l=x.now();o||n.leading!==!1||(o=l);var c=e-(l-o);return r=this,i=arguments,0>=c||c>e?(a&&(clearTimeout(a),a=null),o=l,s=t.apply(r,i),a||(r=i=null)):a||n.trailing===!1||(a=setTimeout(u,c)),s}},x.debounce=function(t,e,n){var r,i,s,a,o,u=function(){var l=x.now()-a;e>l&&l>=0?r=setTimeout(u,e-l):(r=null,n||(o=t.apply(s,i),r||(s=i=null)))};return function(){s=this,i=arguments,a=x.now();var l=n&&!r;return r||(r=setTimeout(u,e)),l&&(o=t.apply(s,i),s=i=null),o}},x.wrap=function(t,e){return x.partial(e,t)},x.negate=function(t){return function(){return!t.apply(this,arguments)}},x.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},x.after=function(t,e){return function(){return--t<1?e.apply(this,arguments):void 0}},x.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),1>=t&&(e=null),n}},x.once=x.partial(x.before,2);var H=!{toString:null}.propertyIsEnumerable("toString"),j=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];x.keys=function(t){if(!x.isObject(t))return[];if(y)return y(t);var e=[];for(var n in t)x.has(t,n)&&e.push(n);return H&&o(t,e),e},x.allKeys=function(t){if(!x.isObject(t))return[];var e=[];for(var n in t)e.push(n);return H&&o(t,e),e},x.values=function(t){for(var e=x.keys(t),n=e.length,r=Array(n),i=0;n>i;i++)r[i]=t[e[i]];return r},x.mapObject=function(t,e,n){e=M(e,n);for(var r,i=x.keys(t),s=i.length,a={},o=0;s>o;o++)r=i[o],a[r]=e(t[r],r,t);return a},x.pairs=function(t){for(var e=x.keys(t),n=e.length,r=Array(n),i=0;n>i;i++)r[i]=[e[i],t[e[i]]];return r},x.invert=function(t){for(var e={},n=x.keys(t),r=0,i=n.length;i>r;r++)e[t[n[r]]]=n[r];return e},x.functions=x.methods=function(t){var e=[];for(var n in t)x.isFunction(t[n])&&e.push(n);return e.sort()},x.extend=E(x.allKeys),x.extendOwn=x.assign=E(x.keys),x.findKey=function(t,e,n){e=M(e,n);for(var r,i=x.keys(t),s=0,a=i.length;a>s;s++)if(r=i[s],e(t[r],r,t))return r},x.pick=function(t,e,n){var r,i,s={},a=t;if(null==a)return s;x.isFunction(e)?(i=x.allKeys(a),r=S(e,n)):(i=T(arguments,!1,!1,1),r=function(t,e,n){return e in n},a=Object(a));for(var o=0,u=i.length;u>o;o++){var l=i[o],c=a[l];r(c,l,a)&&(s[l]=c)}return s},x.omit=function(t,e,n){if(x.isFunction(e))e=x.negate(e);else{var r=x.map(T(arguments,!1,!1,1),String);e=function(t,e){return!x.contains(r,e)}}return x.pick(t,e,n)},x.defaults=E(x.allKeys,!0),x.create=function(t,e){var n=k(t);return e&&x.extendOwn(n,e),n},x.clone=function(t){return x.isObject(t)?x.isArray(t)?t.slice():x.extend({},t):t},x.tap=function(t,e){return e(t),t},x.isMatch=function(t,e){var n=x.keys(e),r=n.length;if(null==t)return!r;for(var i=Object(t),s=0;r>s;s++){var a=n[s];if(e[a]!==i[a]||!(a in i))return!1}return!0};var L=function(t,e,n,r){if(t===e)return 0!==t||1/t===1/e;if(null==t||null==e)return t===e;t instanceof x&&(t=t._wrapped),e instanceof x&&(e=e._wrapped);var i=v.call(t);if(i!==v.call(e))return!1;switch(i){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!==+t?+e!==+e:0===+t?1/+t===1/e:+t===+e;case"[object Date]":case"[object Boolean]":return+t===+e}var s="[object Array]"===i;if(!s){if("object"!=typeof t||"object"!=typeof e)return!1;var a=t.constructor,o=e.constructor;if(a!==o&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(o)&&o instanceof o)&&"constructor"in t&&"constructor"in e)return!1}n=n||[],r=r||[];for(var u=n.length;u--;)if(n[u]===t)return r[u]===e;if(n.push(t),r.push(e),s){if(u=t.length,u!==e.length)return!1;for(;u--;)if(!L(t[u],e[u],n,r))return!1}else{var l,c=x.keys(t);if(u=c.length,x.keys(e).length!==u)return!1;for(;u--;)if(l=c[u],!x.has(e,l)||!L(t[l],e[l],n,r))return!1}return n.pop(),r.pop(),!0};x.isEqual=function(t,e){return L(t,e)},x.isEmpty=function(t){return null==t?!0:A(t)&&(x.isArray(t)||x.isString(t)||x.isArguments(t))?0===t.length:0===x.keys(t).length},x.isElement=function(t){return!(!t||1!==t.nodeType)},x.isArray=m||function(t){return"[object Array]"===v.call(t)},x.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},x.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(t){x["is"+t]=function(e){return v.call(e)==="[object "+t+"]"}}),x.isArguments(arguments)||(x.isArguments=function(t){return x.has(t,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(x.isFunction=function(t){return"function"==typeof t||!1}),x.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},x.isNaN=function(t){return x.isNumber(t)&&t!==+t},x.isBoolean=function(t){return t===!0||t===!1||"[object Boolean]"===v.call(t)},x.isNull=function(t){return null===t},x.isUndefined=function(t){return void 0===t},x.has=function(t,e){return null!=t&&g.call(t,e)},x.noConflict=function(){return u._=l,this},x.identity=function(t){return t},x.constant=function(t){return function(){return t}},x.noop=function(){},x.property=I,x.propertyOf=function(t){return null==t?function(){}:function(e){return t[e]}},x.matcher=x.matches=function(t){return t=x.extendOwn({},t),function(e){return x.isMatch(e,t)}},x.times=function(t,e,n){var r=Array(Math.max(0,t));e=S(e,n,1);for(var i=0;t>i;i++)r[i]=e(i);return r},x.random=function(t,e){return null==e&&(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))},x.now=Date.now||function(){return(new Date).getTime()};var N={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},V=x.invert(N),B=function(t){var e=function(e){return t[e]},n="(?:"+x.keys(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(t){return t=null==t?"":""+t,r.test(t)?t.replace(i,e):t}};x.escape=B(N),x.unescape=B(V),x.result=function(t,e,n){var r=null==t?void 0:t[e];return void 0===r&&(r=n),x.isFunction(r)?r.call(t):r};var D=0;x.uniqueId=function(t){var e=++D+"";return t?t+e:e},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var F=/(.)^/,G={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},z=/\\|'|\r|\n|\u2028|\u2029/g,$=function(t){return"\\"+G[t]};x.template=function(t,e,n){!e&&n&&(e=n),e=x.defaults({},e,x.templateSettings);var r=RegExp([(e.escape||F).source,(e.interpolate||F).source,(e.evaluate||F).source].join("|")+"|$","g"),i=0,s="__p+='";t.replace(r,function(e,n,r,a,o){return s+=t.slice(i,o).replace(z,$),i=o+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(s+="';\n"+a+"\n__p+='"),e}),s+="';\n",e.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{var a=new Function(e.variable||"obj","_",s)}catch(o){throw o.source=s,o}var u=function(t){return a.call(this,t,x)},l=e.variable||"obj";return u.source="function("+l+"){\n"+s+"}",u},x.chain=function(t){var e=x(t);return e._chain=!0,e};var U=function(t,e){return t._chain?x(e).chain():e};x.mixin=function(t){x.each(x.functions(t),function(e){var n=x[e]=t[e];x.prototype[e]=function(){var t=[this._wrapped];return f.apply(t,arguments),U(this,n.apply(x,t))}})},x.mixin(x),x.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=c[t];x.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],U(this,n)}}),x.each(["concat","join","slice"],function(t){var e=c[t];x.prototype[t]=function(){return U(this,e.apply(this._wrapped,arguments))}}),x.prototype.value=function(){return this._wrapped},x.prototype.valueOf=x.prototype.toJSON=x.prototype.value,x.prototype.toString=function(){return""+this._wrapped},r=[],i=function(){return x}.apply(e,r),!(void 0!==i&&(t.exports=i))}).call(this)},,,function(t,e,n){var r,i,s,a=function(t,e){function n(){this.constructor=t}for(var r in e)o.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},o={}.hasOwnProperty;r=n(2),i=n(19),t.exports=s=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return a(e,t),e.prototype.app=null,e.prototype.model=i,e.prototype.selected=null,e.prototype.setSelected=function(t){return console.log("CL select: ",t,this.selected),t!==this.selected?(this.selected&&this.trigger("unselect",this.selected),this.selected=t,console.log("CL triggered select"),this.trigger("select",this.selected),this.selected.fetched?this.trigger("sync"):void 0):void 0},e.prototype.initialize=function(t,e){return this.app=e.app},e}(r.Collection)},function(t,e,n){var r,i,s,a=function(t,e){function n(){this.constructor=t}for(var r in e)o.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},o={}.hasOwnProperty;r=n(2),i=n(8),t.exports=s=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return a(e,t),e.prototype.app=null,e.prototype.model=i,e.prototype.selected=null,e.prototype.setSelected=function(t){return t!==this.selected?(this.selected&&this.trigger("unselect",this.selected),this.selected=t,this.trigger("select",this.selected),this.selected.fetched?this.trigger("sync"):void 0):void 0},e.prototype.initialize=function(t,e){return this.app=e.app,console.log("init DataSourceList",this.app)},e}(r.Collection)},function(t,e,n){var r,i,s=function(t,e){function n(){this.constructor=t}for(var r in e)a.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},a={}.hasOwnProperty;r=n(2),i=n(20),t.exports=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return s(e,t),e.prototype.model=i,e.prototype.initialize=function(t,e){return this.app=e.app},e}(r.Collection)},function(t,e,n){var r,i,s=function(t,e){function n(){this.constructor=t}for(var r in e)a.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},a={}.hasOwnProperty;i=n(6),n(52),i.ThreadCurve=function(t){function e(t,n,r){this.height=t,this.pitch=n,this.radius=r,e.__super__.constructor.call(this)}return s(e,t),e.prototype.getPoint=function(t){return t=t*this.height/this.pitch,new i.Vector3(this.radius*Math.cos(2*Math.PI*(t-Math.floor(t))),this.radius*Math.sin(2*Math.PI*(t-Math.floor(t))),t*this.pitch)},e}(i.Curve),i.CustomGeometry=function(t){function e(t,n){var r,s,a,o,u,l;for(e.__super__.constructor.call(this),s=0,o=t.length;o>s;s++)l=t[s],this.vertices.push(new i.Vector3(l[0],l[1],l[2]));for(a=0,u=n.length;u>a;a++)r=n[a],this.faces.push(new i.Face3(r[0],r[1],r[2]));this.computeBoundingSphere(),this.computeFaceNormals(),this.computeVertexNormals(),this.calcUVs()}return s(e,t),e.prototype.calcUVs=function(){var t,e,n,r,s,a,o,u,l,c,h;for(this.computeBoundingBox(),r=this.boundingBox.max,s=this.boundingBox.min,a=new i.Vector2(0-s.x,0-s.y),o=new i.Vector2(r.x-s.x,r.y-s.y),this.faceVertexUvs[0]=[],t=this.faces,e=n=0,u=this.faces.length;u>=0?u>n:n>u;e=u>=0?++n:--n)l=this.vertices[this.faces[e].a],c=this.vertices[this.faces[e].b],h=this.vertices[this.faces[e].c],this.faceVertexUvs[0].push([new i.Vector2((l.x+a.x)/o.x,(l.y+a.y)/o.y),new i.Vector2((c.x+a.x)/o.x,(c.y+a.y)/o.y),new i.Vector2((h.x+a.x)/o.x,(h.y+a.y)/o.y)]);return this.uvsNeedUpdate=!0},e}(i.Geometry),r=function(){function t(){console.log("EGS_Elements constructed")}var e,n,r,s,a,o,u,l,c,h,p,f,d,v,g,m,y,b,w,_,x,S,M,E,k,I,P,R,A,C,T,O,H,j,L,N,V,B;return o=8,a=.5*Math.PI,r=Math.PI,s=2*Math.PI,y=new i.Vector3(1,0,0),b=new i.Vector3(0,1,0),w=new i.Vector3(0,0,1),d=123.6,p=48.3,f=45.1,v=9,j=function(t,e,n,r,s){var o;return o=(new i.Matrix4).makeTranslation(t,e,n),"X"===r&&o.multiply((new i.Matrix4).makeRotationX(s*a)),"Y"===r&&o.multiply((new i.Matrix4).makeRotationY(s*a)),"Z"===r&&o.multiply((new i.Matrix4).makeRotationZ(s*a)),o},I=function(t,e,n,r){var s,a;return s=new i.CircleGeometry(r,o),a=s.vertices,a.push(new i.Vector3(t/2,e/2,n)),a.push(new i.Vector3(-t/2,e/2,n)),a.push(new i.Vector3(-t/2,-e/2,n)),a.push(new i.Vector3(t/2,-e/2,n)),new i.ConvexGeometry(a)},A=function(t,e,n){var r,a;return a=new i.Shape,a.absarc(0,0,t/2,0,s,!0),e&&(r=new i.Path,r.absarc(0,0,e/2,0,s,!0),a.holes.push(r)),a.extrude({amount:n,steps:1,bevelEnabled:!1,curveSegments:o})},C=function(t,e,n){var r,a;return a=new i.Shape,a.absarc(0,0,t/2,0,s,!0),e&&(r=new i.Path,r.absarc(0,0,e/2,0,s,!0),a.holes.push(r)),a.extrude({steps:10,extrudePath:n})},B=function(t){var e,n,r,a,u,l;return o>=16?(a=13,r=8):(a=18,r=15),u=new i.Shape,u.absarc(0,0,a,0,s,!0),r&&(n=new i.Path,n.absarc(0,0,r,0,s,!0),u.holes.push(n)),e=u.extrude({amount:t,steps:1,bevelEnabled:!1,curveSegments:o}),o>=16&&(t-=10,l=new i.TubeGeometry(new i.ThreadCurve(t,10,13),o*t/10,4),e.merge(l,j(0,0,5))),e},L=function(t){return A(p,f,t)},_=function(){var t;return t=new i.Geometry,t.merge(L(165),j(0,0,-65)),t.merge(V()),t.merge(A(55,49,170),j(0,0,95)),t.applyMatrix(j(0,0,0,"X",-1)),t},P=function(t){var e,n,r,s,a;return s=new i.Shape,a=30,n=25,r=33,s.moveTo(0,0),s.lineTo(30,0),s.arc(25,0,n,0,Math.PI),s.lineTo(17+r+r,0),s.arc(-33,0,r,.7*Math.PI,0),s.lineTo(30,35),s.lineTo(0,35),s.lineTo(0,0),e=s.extrude({amount:40,steps:1,bevelEnabled:!1,curveSegments:o}),e.applyMatrix(j(t,0,55,"Y",1)),e},R=function(t,e){var n,r,s;return r=50,s=[[0,45,r],[e,45,r],[e,45,t-r],[0,45,t-r],[0,-30,r],[e,-30,r],[e,-30,t-r],[0,-30,t-r],[5,-30,r+5],[e-5,-30,r+5],[e-5,-30,t-r-5],[5,-30,t-r-5],[5,40,r+5],[e-5,40,r+5],[e-5,40,t-r-5],[5,40,t-r-5]],n=[[0,2,1],[0,3,2],[12,13,14],[12,14,15],[0,1,5],[0,5,4],[1,2,6],[1,6,5],[2,3,7],[2,7,6],[3,0,4],[3,4,7],[4,5,9],[4,9,8],[5,6,10],[5,10,9],[6,7,11],[6,11,10],[7,4,8],[7,8,11],[8,9,13],[8,13,12],[9,10,14],[9,14,13],[10,11,15],[10,15,14],[11,8,12],[11,12,15]],new i.CustomGeometry(s,n)},x=function(t,e,n){var r;return null==n&&(n=0),r=new i.Geometry,r.merge(P(1),j(60,0,0)),r.merge(P(1),j(e-60,0,0)),r.merge(R(t,e),j(0,0,0)),r.merge(P(1),j(60,0,t,"Y",2)),r.merge(P(1),j(e-60,0,t,"Y",2)),r.applyMatrix(j(55+n,0,0)),r},O=function(t,e){var n,r,s,a,o,u,l,c;for(null==e&&(e=1),c=35,l=[[25,7,38],[26,0,38],[25,-7,38],[25,7,11],[26,0,11],[25,-7,11],[25,7,-1],[26,0,-1],[25,-7,-1],[25,7,-35],[26,0,-35],[25,-7,-35],[65,12,24],[65,-12,24],[65,22,11],[65,-22,11],[65,22,-1],[65,-22,-1],[65,12,-24],[65,-12,-24],[65,1*e,20],[65,1*e,-20],[65,11*e,-20],[65,11*e,20],[65+c,1*e+c*e,20],[65+c,1*e+c*e,-20],[65+c-5,6*e+c*e,-20],[65+c-5,6*e+c*e,20]],n=[[0,1,12],[1,13,12],[1,2,13],[9,18,10],[10,18,19],[10,19,11],[1,0,4],[4,0,3],[2,1,5],[5,1,4],[7,6,10],[10,6,9],[8,7,11],[11,7,10],[4,3,14],[4,14,15],[5,4,15],[6,7,16],[7,17,16],[7,8,17],[14,17,15],[14,16,17],[14,15,17],[14,17,16],[3,0,14],[0,12,14],[16,9,6],[18,9,16],[2,5,15],[2,15,13],[17,8,11],[17,11,19],[12,13,14],[13,15,14],[16,17,18],[17,19,18]],r=[[20,21,25],[20,25,24],[22,23,27],[22,27,26],[20,27,23],[20,24,27],[21,22,26],[21,26,25],[24,25,26],[24,26,27]],a=0,u=r.length;u>a;a++)s=r[a],e>0?n.push(s):n.push([s[1],s[0],s[2]]);return o=new i.CustomGeometry(l,n),o.applyMatrix(j(0,0,0,"Z",.5*e*t)),o},E=function(t,e,n){var r,s,o,u,l;return null==e&&(e=1),null==n&&(n=2e3),l=new i.Geometry,u=new i.Geometry,e*=-1,r=Math.sqrt(Math.pow(t-155,2)+Math.pow(n,2)),s=Math.atan2(t-155,n),l.merge(O(-1,1*e)),l.merge(O(-1,-1*e),j(t,0,n,"Z",2)),o=e>0?14:7,u.merge(new i.BoxGeometry(35,10,60),j(0,0,10)),u.merge(A(16,0,21),j(0,o,0,"X",1)),u.merge(I(35,10,70,p/2),j(0,0,110,"X",2)),u.merge(A(p,f,r-220),j(0,0,110)),u.merge(I(35,10,70,p/2),j(0,0,r-110)),u.merge(new i.BoxGeometry(35,10,60),j(0,0,r-10)),u.merge(A(16,0,21),j(0,o,r,"X",1)),l.merge(u,j(77.5,-50*e,0,"Y",s/a)),l},H=function(){var t,e;return e=[[25,7,38],[26,0,38],[25,-7,38],[25,7,11],[26,0,11],[25,-7,11],[25,7,-1],[26,0,-1],[25,-7,-1],[25,7,-35],[26,0,-35],[25,-7,-35],[65,12,24],[65,-12,24],[65,22,11],[65,-22,11],[65,22,-1],[65,-22,-1],[65,12,-24],[65,-12,-24],[77,0,24],[77,-17,17],[77,-24,0],[77,-17,-17],[77,0,-24],[77,17,-17],[77,24,0],[77,17,17]],t=[[0,1,12],[1,13,12],[1,2,13],[9,18,10],[10,18,19],[10,19,11],[1,0,4],[4,0,3],[2,1,5],[5,1,4],[7,6,10],[10,6,9],[8,7,11],[11,7,10],[4,3,14],[4,14,15],[5,4,15],[6,7,16],[7,17,16],[7,8,17],[14,17,15],[14,16,17],[3,0,14],[0,12,14],[16,9,6],[18,9,16],[2,5,15],[2,15,13],[17,8,11],[17,11,19],[20,12,13],[20,13,21],[21,13,15],[21,15,22],[22,15,17],[22,17,23],[23,17,19],[23,19,24],[24,19,18],[24,18,25],[25,18,16],[25,16,26],[26,16,14],[26,14,27],[27,14,12],[27,12,20]],new i.CustomGeometry(e,t)},T=function(){var t;return t=new i.BoxGeometry(10,50,550),t.applyMatrix(j(82,0,250)),t.merge(H(),j(0,0,0)),t.merge(H(),j(0,0,500)),t.applyMatrix(j(0,0,0,"X",-1)),t},M=function(t){var e;return e=A(p,f,t-150),e.applyMatrix(j(75,0,0,"Y",1)),e.merge(H()),e.merge(H(),j(t,0,0,"Z",2)),e.applyMatrix(j(0,0,0,"X",-1)),e},S=function(t){var e,n,r,s,a,o,u;for(a=A(p,f,t-150),a.applyMatrix(j(75,0,0,"Y",1)),a.merge(H()),a.merge(H(),j(t,0,0,"Z",2)),s=new i.CurvePath,s.add(new i.LineCurve3(new i.Vector3(0,0,0),new i.Vector3(200,100,0))),s.add(new i.LineCurve3(new i.Vector3(200,100,0),new i.Vector3(t-350,100,0))),s.add(new i.LineCurve3(new i.Vector3(t-350,100,0),new i.Vector3(t-150,0,0))),o=C(.6*p,.6*f,s),o.applyMatrix(j(75,0,0,"X",-1)),a.merge(o),n=r=500,u=t-1;u>=r;n=r+=500)e=new i.BoxGeometry(100,100,5),e.applyMatrix(j(n,0,-50,"X",1)),a.merge(e);return a.applyMatrix(j(0,0,0,"X",-1)),a},V=function(){return A(d,p,v)},N=function(){var t;return t=A(45,30,400),t.applyMatrix(j(0,0,-200)),t},k=function(t,e){var n,r,s,a;for(null==e&&(e=1),a=new i.Geometry,a.merge(L(t),j(0,0,100)),n=r=500,s=t;s>=r;n=r+=500)a.merge(V(),j(0,0,n));return 1===e&&a.merge(N(),j(0,0,t)),a.applyMatrix(j(0,0,0,"X",-1)),a},l=function(t,e,n,r,s){var a;return a=B(10*t),a.merge(new i.BoxGeometry(100,100,5)),a.merge(new i.BoxGeometry(120,40,10),j(0,0,70,"Z",.5)),parseInt(s)<0||s&&"n"===s[0]||"-"===s?a.applyMatrix(j(10*e,10*n+175,10*r,"X",1)):a.applyMatrix(j(10*e,10*n-144,10*r,"X",-1)),a},m=function(t,e,n,r,i){var s,a,o,u,l,c,h;if(s=0,l=1,i)for(u=i.split(","),a=0,o=u.length;o>a;a++)c=u[a],(parseInt(c)<0||c&&"n"===c[0]||"-"===c)&&(s=2),"o"===c[0]&&(l=0);return h=k(10*t,l),h.applyMatrix(j(10*e,10*n,10*r,"X",s)),h},h=function(t,e,n,r,i){var s;switch(s=M(10*t),i){case"X":i=0;break;case"Y":i=1;break;case"-X":i=2;break;case"-Y":i=3;break;default:return}return s.applyMatrix(j(10*e,10*n,10*r,"Y",-i)),s},u=function(t,e,n,r,i){var s;switch(s=S(10*t),i){case"X":i=0;break;case"Y":i=1;break;case"-X":i=2;break;case"-Y":i=3;break;default:return}return s.applyMatrix(j(10*e,10*n,10*r,"Y",-i)),s},g=function(t,e,n,r,i,s,a){var o,u;switch(o=-1,s){case"X":s=0;break;case"Y":s=1;break;case"-X":s=2;break;case"-Y":s=3;break;default:return}return o=1===s||2===s?1:-1,(parseInt(a)<0||a&&"n"===a[0]||"-"===a)&&(o*=-1),u=E(10*t,o,10*e),u.applyMatrix(j(0,0,0,"X",-1)),u.applyMatrix(j(0,0,0,"Y",-s)),u.applyMatrix(j(10*n,10*r,10*i)),u},n=function(t,e,n,r,s,a){var o,u,l,c,h,p,f;for(u=new i.Geometry,a=a.split("/"),h=0,f=a[0],a.length>=2&&parseInt(a[1])&&(h=parseInt(a[1])),p=f.split(","),l=0,c=p.length;c>l;l++)o=p[l],u.merge(x(10*t,10*o,h)),h+=10*o+5;switch(s){case"X":u.applyMatrix(j(10*e+10*t,10*n,10*r,"Y",-1));break;case"Y":u.applyMatrix(j(10*e,10*n,10*r));break;case"-X":u.applyMatrix(j(10*e,10*n,10*r,"Y",1));break;case"-Y":u.applyMatrix(j(10*e,10*n,10*r+10*t,"Y",2))}return u},c=function(t,e,n,r){var i;switch(i=T(),r){case"X":r=0;break;case"Y":r=1;break;case"-X":r=2;break;case"-Y":r=3;break;default:return}return i.applyMatrix(j(10*t,10*e,10*n,"Y",-r)),i},e=function(t,e,n){var r;return r=_(),r.applyMatrix(j(10*t,10*e,10*n)),r},t.prototype.getGeometry=function(t){var r,s,a,o,p,f;switch(a=t.get("element"),p=t.get("x"),f=t.get("y"),s=t.get("h"),r=t.get("direction"),o=t.get("special"),a){case"AnfSt":return e(p,s,f);case"V50":return m(50,p,s,f,o);case"V100":return m(100,p,s,f,o);case"V150":return m(150,p,s,f,o);case"V200":return m(200,p,s,f,o);case"V300":return m(300,p,s,f,o);case"V400":return m(400,p,s,f,o);case"R25":return h(25,p,s,f,r);case"R50":return h(50,p,s,f,r);case"R100":return h(100,p,s,f,r);case"R200":return h(200,p,s,f,r);case"R300":return h(300,p,s,f,r);case"DR100":return u(100,p,s,f,r);case"DR200":return u(200,p,s,f,r);case"DR300":return u(300,p,s,f,r);case"D100":return g(100,200,p,s,f,r,o);case"D150":return g(150,200,p,s,f,r,o);case"D200":return g(200,200,p,s,f,r,o);case"D300":return g(300,200,p,s,f,r,o);case"DS200":return g(200,100,p,s,f,r,o);case"F40":return l(40,p,s,f,o);case"F60":return l(40,p,s,f,o);case"B100":return n(100,p,s,f,r,o);case"B200":return n(200,p,s,f,r,o);case"B300":return n(300,p,s,f,r,o);case"HV":return c(p,s,f,r);default:return new i.Geometry}},t}(),t.exports=r},function(t,e,n){var r,i,s=function(t,e){function n(){this.constructor=t}for(var r in e)a.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},a={}.hasOwnProperty;r=n(2),i=n(17),t.exports=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return s(e,t),e.prototype.dataTable=null,e.prototype.fetched=!1,e.prototype.fields={show:{name:"Anzeige"},color:{name:"Farbe"},element:{name:"Bauteil"},x:{name:"X"},y:{name:"Y"},h:{name:"H"},direction:{name:"Richtung"},special:{name:"Besonderheit"}},e.prototype.determineColumn=function(t){return/^\s?(Element|Bauteil)\s$/i.test(t)?"element":/^\s?(Richtung)\s?$/i.test(t)?"direction":/^\s?(Besonderheit)\s(.*)?$/i.test(t)?"special":/^(Anzeige\s)?(Anzeige)$/i.test(t)?"show":/^(Position)?\s?(X)$/i.test(t)?"x":/^(Position)?\s?(Y)$/i.test(t)?"y":/^(Position)?\s?(H)$/i.test(t)?"h":/^(Anzeige)?\s?(Farbe)$/i.test(t)?"color":null},e.prototype.idAttribute="sheet",e.prototype.initialize=function(t,e){return this.app=e.collection.app,this.elements=new i([],{app:this.app})},e.prototype.setSelected=function(t){return this.collection.setSelected(this),this.fetched?t?t(this):void 0:this.fetch({success:function(e){return function(){return e.fetched=!0,t?t(e):void 0}}(this)})},e.prototype.parse=function(t){var e,n,r,s,a,o,u,l,c,h,p,f,d,v;for(this.dataTable=t.getDataTable(),r={},n={},e=l=0,f=this.dataTable.getNumberOfColumns();f>=0?f>l:l>f;e=f>=0?++l:--l)s=this.determineColumn(this.dataTable.getColumnLabel(e)),s&&(r[s]=e,n[s]=!0);d=this.fields;for(u in d)if(e=d[u],null==n[u])return void console.log("Spalte '"+e.name+"' nicht gefunden!");for(o=[],p=c=0,v=this.dataTable.getNumberOfRows();v>=0?v>c:c>v;p=v>=0?++c:--c){a={};for(h in r)e=r[h],a[h]=this.dataTable.getValue(p,e);o.push(a)}return console.log("Construction: loaded element list: ",o),{elements:new i(o,{app:this.app})}},e}(r.Model)},function(t,e,n){var r,i=function(t,e){function n(){this.constructor=t}for(var r in e)s.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},s={}.hasOwnProperty;r=n(2),t.exports=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return i(e,t),e.prototype.app=null,e.prototype.geometry=null,e.prototype.initialize=function(t,n){return e.__super__.initialize.call(this,t,n),this.app=n.collection.app,this.geometry=this.app.egsElementProvider.getGeometry(this)},e}(r.Model)},function(t,e,n){var r,i,s,a=function(t,e){return function(){return t.apply(e,arguments)}};r=n(2),s=n(7),t.exports=i=function(){function t(t){this.app=t,this.save=a(this.save,this),this.reset=a(this.reset,this),this.saveButton.addEventListener("click",this.save),this.cancelButton.addEventListener("click",this.cancel),this.resetButton.addEventListener("click",this.reset)}return t.prototype.modal=document.getElementById("dataSourceModal"),t.prototype.inputField=document.getElementById("dataSourceModal-input"),t.prototype.saveButton=document.getElementById("dataSourceModal-save"),t.prototype.cancelButton=document.getElementById("dataSourceModal-cancel"),t.prototype.resetButton=document.getElementById("dataSourceModal-reset"),t.prototype.errorBanner=document.getElementById("dataSourceModal-error"),t.prototype.reset=function(t){return this.inputField.value=App.defaultSource},t.prototype.save=function(t){var e;return e=s(this.inputField.value,!0),e?(this.errorBanner.style.display="none",this.app.navigate(e.join("/"),{trigger:!0})):(this.errorBanner.style.display="",t.preventDefault(),t.stopPropagation())},t}()},function(t,e,n){var r,i,s,a,o,u,l=function(t,e){function n(){this.constructor=t}for(var r in e)c.call(e,r)&&(t[r]=e[r]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},c={}.hasOwnProperty,h=function(t,e){return function(){return t.apply(e,arguments)}};r=n(2),u=n(6),o=n(11)(u),s=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return l(e,t),e.prototype.parent=null,e.prototype.mesh=null, -e.prototype.color=null,e.prototype.display=null,e.prototype.parseNum=function(t){var e,n,r,i,s,a,o,u;if(!t)return[];for(i=[],a=String(t).split(","),n=0,r=a.length;r>n;n++)o=a[n],u=o.split(":"),s=u[0].split("-"),e=2===u.length?u[1]:null,""===s[0]&&(s[0]=null),1===s.length&&(s[1]=s[0]),""===s[1]&&(s[1]=null),s[0]>=0&&i.push([s[0],s[1],e]);return i},e.prototype.initialize=function(t){var e,n,r,i,s,a,o,l,c;for(this.parent=t.parent,this.model.geometry.computeBoundingBox(),this.color=this.parent.getAndStoreColor(this.model.get("color")),this.mesh=new u.Mesh(this.model.geometry,this.color),this.mesh.visible=!1,this.display=[],o=this.parseNum(this.model.get("show")),c=[],r=0,s=o.length;s>r;r++){for(e=o[r],l=[0,1],i=0,a=l.length;a>i;i++)n=l[i],null!==e[n]&&(e[n]=parseInt(e[n]),this.parent.steps.push(e[n]));e[2]=null===e[2]?this.color:this.parent.getAndStoreColor(e[2]),c.push(this.display.push(e))}return c},e.prototype.getMesh=function(){return this.mesh},e.prototype.setStep=function(t){var e,n;n=null;for(e in this.display)null!==this.display[e][0]&&null!==this.display[e][1]?t>=this.display[e][0]&&t<=this.display[e][1]&&(n=this.display[e][2]):null!==this.display[e][0]?t>=this.display[e][0]&&(n=this.display[e][2]):null!==this.display[e][1]&&t<=this.display[e][1]&&(n=this.display[e][2]);return this.mesh.visible=null!==n,this.mesh.material=n?n:this.color},e}(r.View),i=function(){function t(t){this.domElementID=t,this.onWindowResize=h(this.onWindowResize,this),this.scene=new u.Scene,this._addRenderer(this.domElementID),this._addLights(),this._addCamera(),this._addControls(),this.onWindowResize(),this._animationStart()}return t.prototype.center=new u.Vector3,t.prototype.bbox=new u.Box3,t.prototype.startTime=null,t.prototype.turnRate=0,t.prototype.turnOffset=0,t.prototype.camDistance=0,t.prototype.camDistanceOffset=0,t.prototype.camHeight=0,t.prototype.camHeightOffset=0,t.prototype.scene=null,t.prototype.renderer=null,t.prototype.camera=null,t.prototype.controls=null,t.prototype.animationRequest=null,t.prototype._addRenderer=function(t){var e,n;n=!1;try{e=document.createElement("canvas"),n=!(!window.WebGLRenderingContext||!e.getContext("webgl")&&!e.getContext("experimental-webgl"))}catch(r){}return n?this.renderer=new u.WebGLRenderer({antialias:!0}):this.renderer=new u.CanvasRenderer,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(window.innerWidth,window.innerHeight),document.getElementById(t).appendChild(this.renderer.domElement)},t.prototype._addLights=function(){var t,e;return e=new u.HemisphereLight(16777215,16777215,.6),e.color.setHSL(.6,1,.6),e.groundColor.setHSL(.095,1,.75),e.position.set(0,500,0),this.scene.add(e),t=new u.DirectionalLight(16777215,1),t.color.setHSL(.1,1,.95),t.position.set(-5e3,1e4,-5e3),t.position.multiplyScalar(50),this.scene.add(t)},t.prototype._addCamera=function(){var t,e;return e=window.innerWidth,t=window.innerHeight,this.camera=new u.PerspectiveCamera(70,e/t,1,2e5)},t.prototype._addControls=function(){return this.controls=new o(this.camera,this.renderer.domElement),this.controls.zoomSpeed=.3,this.controls.rotateSpeed=.3},t.prototype.onWindowResize=function(){var t,e,n;if(this.camera)return e=getComputedStyle(document.getElementById(this.domElementID),null),n=parseInt(e.getPropertyValue("width")),t=parseInt(e.getPropertyValue("height")),this.camera.aspect=n/t,this.camera.updateProjectionMatrix(),this.renderer.setSize(n,t)},t.prototype._animationStart=function(){return this.scene?this.animationRequest?void 0:this._animationFrame():void 0},t.prototype._animationStop=function(){return this.animationRequest&&window.cancelAnimationFrame(this.animationRequest),this.animationRequest=null},t.prototype._animationFrame=function(){return this.animationRequest=window.requestAnimationFrame(function(t){return function(){return t._animationFrame()}}(this)),this.calcCamPos(),this.renderer.render(this.scene,this.camera)},t.prototype.resetView=function(){var t,e;return this.center=this.bbox.center(),e=this.bbox.size(),t=this.camera.fov/180*Math.PI*80/100,this.camDistance=Math.max.apply(Math,[e.y/2*Math.tan(t)+Math.sqrt(e.x*e.x/4+e.z*e.z/4),e.y/2*Math.tan(t)+e.z/2,e.y/2*Math.tan(t)+e.x/2,e.x/2*Math.tan(t)/this.camera.aspect+e.z/2,e.z/2*Math.tan(t)/this.camera.aspect+e.x/2]),this.camHeight=this.center.y,this.controls.target.copy(this.center)},t.prototype.removeAll=function(){for(;this.scene.children.length;)this.scene.remove(this.scene.children[0]);return this._addLights(),this.bbox=new u.Box3},t.prototype.add=function(t){return this.scene.add(t.getMesh()),this.bbox.union(t.model.geometry.boundingBox),this.resetView()},t.prototype.setTurnRate=function(t){var e;return e=Date.now()-this.startTime,this.turnOffset=this.turnOffset+e/(6e4/this.turnRate),this.startTime=Date.now(),this.controls.enableZoom=0===t,this.controls.enablePan=0===t,this.controls.enableRotate=0===t,this.turnRate=t,this.calcCamPos(!0)},t.prototype.setHeight=function(t,e){return this.camHeight=function(){switch(e){case"abs":return 10*t;case"incr":return this.camHeight+10*t;case"rel":return 2*this.center.y*t;default:return this.camHeight}}.call(this)},t.prototype.calcCamPos=function(t){var e,n;if(t)n=this.turnOffset;else{if(0===this.turnRate)return;e=Date.now()-this.startTime,n=this.turnOffset+e/(6e4/this.turnRate)}return this.camera.position.x=this.center.x+Math.sin(2*Math.PI*n)*(this.camDistance+this.camDistanceOffset),this.camera.position.y=this.camHeight,this.camera.position.z=this.center.z+Math.cos(2*Math.PI*n)*(this.camDistance+this.camDistanceOffset),this.camera.lookAt(this.center)},t}(),a=function(t){function e(t,e){this.app=t,this.domElementID=e,this.display=new i(this.domElementID)}var n,r;return l(e,t),e.prototype.elements=[],e.prototype.steps=[],e.prototype.stepNo=0,r=[],e.prototype.setTurnRate=function(t){return this.display.setTurnRate(Math.max(0,t))},e.prototype.setHeight=function(t,e){return this.display.setHeight(t,e)},e.prototype.resetView=function(){return this.display.resetView()},e.prototype.showConstruct=function(t){var e,n,r,i;for(this.elements=[],this.steps=[],t.get("elements").each(function(t){return function(e){return t.elements.push(new s({model:e,parent:t}))}}(this)),this.steps=this.steps.filter(function(t,e,n){return e===n.indexOf(t)}),this.steps.sort(function(t,e){return t-e}),this.app.view.SecondaryNav.setSteps(this.steps),this.display.removeAll(),i=this.elements,n=0,r=i.length;r>n;n++)e=i[n],this.display.add(e);return this.updateConstruct(this.stepNo)},e.prototype.updateConstruct=function(t){var e,n,r,i;for(this.stepNo=t,i=this.elements,n=0,r=i.length;r>n;n++)e=i[n],e.setStep(parseInt(this.steps[this.stepNo]));return this.render()},n=function(t){var e,n;return e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t),n=/^#?([a-f\d])([a-f\d])([a-f\d])$/i.exec(t),e?(parseInt(e[1],16)<<16)+(parseInt(e[2],16)<<8)+parseInt(e[3],16):n?(17*parseInt(n[1],16)<<16)+(17*parseInt(n[2],16)<<8)+17*parseInt(n[3],16):8947848},e.prototype.getAndStoreColor=function(t){return null==r[t]&&(r[t]=new u.MeshPhongMaterial({color:n(t),emissive:0,specular:0,shininess:30})),r[t]},e}(r.View),t.exports=a},function(t,e,n){var r;r=n(2),t.exports=r.View.extend({el:document.getElementById("primaryNav"),template:n(27),activeConstructionList:null,initialize:function(t){return this.dataSourceList=t,this.listenTo(this.dataSourceList,"select",function(){return this.activeConstructionList&&this.stopListening(this.activeConstructionList),this.activeConstructionList=null,this.render("loading","unset")}),this.listenTo(this.dataSourceList,"sync",function(){return this.activeConstructionList=this.dataSourceList.selected.get("constructions"),this.listenTo(this.activeConstructionList,"select",function(){return this.render("loaded","loading")}),this.listenTo(this.activeConstructionList,"sync",function(){return this.render("loaded","loaded")}),this.render("loaded","unset")}),this.render("unset","unset")},render:function(t,e){var n,r,i;return null==t&&(t=0),null==e&&(e=0),i={},"loaded"===t&&(i.item=[],n=this.dataSourceList.selected.get("constructions"),r=null,n.each(function(t){return t===n.selected&&(r=t.get("name")),i.item.push({sheet:t.get("sheet"),name:t.get("name")})}),"unset"!==e?i.auswahl=""+r:i.auswahl=i.item.length+" Konstruktionen zur Auswahl"),"loading"!==t&&"loading"!==e||(i.loading=!0),this.el.innerHTML=this.template(i)}})},function(t,e,n){(function(e){var r,i=function(t,e){return(+t%(e=+e)+e)%e};r=n(2),t.exports=r.View.extend({el:document.getElementById("secondaryNav"),template:n(28),steps:[],step:0,counter:0,stepper:5,rotRate:2,events:{"click .step-rel":"stepRel","click .step-abs":"stepAbs","click .step-auto":"stepAuto","click .rot-incr":"rotationIncr","click .rot-setp":"rotationSetp","click .view-reset":"viewReset","click .height-incr":"heightIncr","click .height-setabs":"heightSetAbs","click .height-setrel":"heightSetRel"},heightIncr:function(t){return this.app.view.EGS&&this.app.view.EGS.setHeight(parseInt(t.target.dataset.incr),"incr"),this.update()},heightSetAbs:function(t){return this.app.view.EGS&&this.app.view.EGS.setHeight(parseInt(t.target.dataset.setabs),"abs"),this.update()},heightSetRel:function(t){return this.app.view.EGS&&this.app.view.EGS.setHeight(parseFloat(t.target.dataset.setrel),"rel"),this.update()},stepRel:function(t){return this.incrStep(t.target.dataset.step)},stepAbs:function(t){return this.setStep(t.target.dataset.step)},stepAuto:function(t){return this.stepper=parseInt(t.target.dataset.val),this.render()},rotationIncr:function(t){return this.rotRate+=parseFloat(t.target.dataset.incr),this.app.view.EGS&&this.app.view.EGS.setTurnRate(this.rotRate),this.update()},rotationSetp:function(t){return this.rotRate=parseFloat(t.target.dataset.setp),this.app.view.EGS&&this.app.view.EGS.setTurnRate(this.rotRate),this.update()},viewReset:function(t){return this.rotRate=2,this.app.view.EGS&&this.app.view.EGS.setTurnRate(this.rotRate),this.app.view.EGS&&this.app.view.EGS.resetView(),this.update()},startup:function(){return this.setStep(0),setInterval(function(t){return function(){return t.timeTrigger()}}(this),1e3),this.app.view.EGS.updateConstruct(this.step),this.app.view.EGS.setTurnRate(this.rotRate)},setSteps:function(t){return this.steps=t,this.step=0,this.render()},incrStep:function(t){return t=parseInt(t),this.step+t<0?this.setStep(this.step+this.steps.length+t):this.step+t>=this.steps.length?this.setStep(this.step-this.steps.length+t):this.setStep(this.step+t)},setStep:function(t){return this.step=parseInt(t),console.log("Aufbauschritt: "+this.steps[this.step]+" (index: "+this.step+")"),this.app.view.EGS&&this.app.view.EGS.updateConstruct(this.step),this.update()},timeTrigger:function(){return this.stepper&&0===i(++this.counter,this.stepper)?this.incrStep(1):void 0},initialize:function(t){return this.app=t,this.render()},update:function(){return e("#stepNo",this.$el).text(this.steps[this.step]),e(".steps li",this.$el).removeClass("active"),e(".step-"+this.step,this.$el).addClass("active"),e(".rots li",this.$el).removeClass("active"),e(".rot-"+this.rotRate,this.$el).addClass("active")},render:function(){var t,e,n;e=[];for(t in this.steps)e.push({i:t,name:"Schritt "+this.steps[t]});return n={steps:e,step:this.step,stepName:this.steps[this.step],auto:this.stepper,rotMode:this.rotRate>0?this.rotRate+" U/min":"Manuell",rate:this.rotRate},this.el.innerHTML=this.template(n)}})}).call(e,n(4))},,,function(t,e,n){var r=n(10);t.exports=(r["default"]||r).template({1:function(t,e,n,r,i){var s,a,o=null!=e?e:{};return' \n \n"+(null!=(s=n["if"].call(o,null!=e?e.loading:e,{name:"if",hash:{},fn:t.program(4,i,0),inverse:t.noop,data:i}))?s:"")},2:function(t,e,n,r,i){var s,a=null!=e?e:{},o=n.helperMissing,u="function",l=t.escapeExpression;return'
  • '+l((s=null!=(s=n.name||(null!=e?e.name:e))?s:o,typeof s===u?s.call(a,{name:"name",hash:{},data:i}):s))+"
  • \n"},4:function(t,e,n,r,i){return' \n \n'},6:function(t,e,n,r,i){var s;return null!=(s=n["if"].call(null!=e?e:{},null!=e?e.loading:e,{name:"if",hash:{},fn:t.program(7,i,0),inverse:t.program(9,i,0),data:i}))?s:""},7:function(t,e,n,r,i){return' \n \n'},9:function(t,e,n,r,i){return' \n'},compiler:[7,">= 4.0.0"],main:function(t,e,n,r,i){var s;return'\n\n'},useData:!0})},function(t,e,n){function r(t){return t&&(t.__esModule?t["default"]:t)}var i=n(10);t.exports=(i["default"]||i).template({1:function(t,e,n,r,i){return""},3:function(t,e,n,r,i){return" active"},5:function(t,e,n,r,i){return"active"},7:function(t,e,i,s,a,o,u){var l,c=t.lambda,h=t.escapeExpression;return'
  • '+h(c(null!=e?e.name:e,e))+"
  • \n"},compiler:[7,">= 4.0.0"],main:function(t,e,i,s,a,o,u){var l,c=null!=e?e:{},h=t.lambda,p=t.escapeExpression;return'\n'},useData:!0,useDepths:!0})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e["default"]=t,e}function s(){var t=new o.HandlebarsEnvironment;return f.extend(t,o),t.SafeString=l["default"],t.Exception=h["default"],t.Utils=f,t.escapeExpression=f.escapeExpression,t.VM=v,t.template=function(e){return v.template(e,t)},t}e.__esModule=!0;var a=n(9),o=i(a),u=n(43),l=r(u),c=n(5),h=r(c),p=n(3),f=i(p),d=n(42),v=i(d),g=n(41),m=r(g),y=s();y.create=s,m["default"](y),y["default"]=y,e["default"]=y,t.exports=e["default"]},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){a["default"](t)}e.__esModule=!0,e.registerDefaultDecorators=i;var s=n(31),a=r(s)},function(t,e,n){"use strict";e.__esModule=!0;var r=n(3);e["default"]=function(t){t.registerDecorator("inline",function(t,e,n,i){var s=t;return e.partials||(e.partials={},s=function(i,s){var a=n.partials;n.partials=r.extend({},a,e.partials);var o=t(i,s);return n.partials=a,o}),e.partials[i.args[0]]=i.fn,s})},t.exports=e["default"]},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){a["default"](t),u["default"](t),c["default"](t),p["default"](t),d["default"](t),g["default"](t),y["default"](t)}e.__esModule=!0,e.registerDefaultHelpers=i;var s=n(33),a=r(s),o=n(34),u=r(o),l=n(35),c=r(l),h=n(36),p=r(h),f=n(37),d=r(f),v=n(38),g=r(v),m=n(39),y=r(m)},function(t,e,n){"use strict";e.__esModule=!0;var r=n(3);e["default"]=function(t){t.registerHelper("blockHelperMissing",function(e,n){var i=n.inverse,s=n.fn;if(e===!0)return s(this);if(e===!1||null==e)return i(this);if(r.isArray(e))return e.length>0?(n.ids&&(n.ids=[n.name]),t.helpers.each(e,n)):i(this);if(n.data&&n.ids){var a=r.createFrame(n.data);a.contextPath=r.appendContextPath(n.data.contextPath,n.name),n={data:a}}return s(e,n)})},t.exports=e["default"]},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var i=n(3),s=n(5),a=r(s);e["default"]=function(t){t.registerHelper("each",function(t,e){function n(e,n,s){l&&(l.key=e,l.index=n,l.first=0===n,l.last=!!s,c&&(l.contextPath=c+e)),u+=r(t[e],{data:l,blockParams:i.blockParams([t[e],e],[c+e,null])})}if(!e)throw new a["default"]("Must pass iterator to #each");var r=e.fn,s=e.inverse,o=0,u="",l=void 0,c=void 0;if(e.data&&e.ids&&(c=i.appendContextPath(e.data.contextPath,e.ids[0])+"."),i.isFunction(t)&&(t=t.call(this)),e.data&&(l=i.createFrame(e.data)),t&&"object"==typeof t)if(i.isArray(t))for(var h=t.length;h>o;o++)o in t&&n(o,o,o===t.length-1);else{var p=void 0;for(var f in t)t.hasOwnProperty(f)&&(void 0!==p&&n(p,o-1),p=f,o++);void 0!==p&&n(p,o-1,!0)}return 0===o&&(u=s(this)),u})},t.exports=e["default"]},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var i=n(5),s=r(i);e["default"]=function(t){t.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new s["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},t.exports=e["default"]},function(t,e,n){"use strict";e.__esModule=!0;var r=n(3);e["default"]=function(t){t.registerHelper("if",function(t,e){return r.isFunction(t)&&(t=t.call(this)),!e.hash.includeZero&&!t||r.isEmpty(t)?e.inverse(this):e.fn(this)}),t.registerHelper("unless",function(e,n){return t.helpers["if"].call(this,e,{fn:n.inverse,inverse:n.fn,hash:n.hash})})},t.exports=e["default"]},function(t,e){"use strict";e.__esModule=!0,e["default"]=function(t){t.registerHelper("log",function(){for(var e=[void 0],n=arguments[arguments.length-1],r=0;r=0?e:parseInt(t,10)}return t},log:function(t){if(t=i.lookupLevel(t),"undefined"!=typeof console&&i.lookupLevel(i.level)<=t){var e=i.methodMap[t];console[e]||(e="log");for(var n=arguments.length,r=Array(n>1?n-1:0),s=1;n>s;s++)r[s-1]=arguments[s];console[e].apply(console,r)}}};e["default"]=i,t.exports=e["default"]},function(t,e){(function(n){"use strict";e.__esModule=!0,e["default"]=function(t){var e="undefined"!=typeof n?n:window,r=e.Handlebars;t.noConflict=function(){return e.Handlebars===t&&(e.Handlebars=r),t}},t.exports=e["default"]}).call(e,function(){return this}())},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e["default"]=t,e}function s(t){var e=t&&t[0]||1,n=m.COMPILER_REVISION;if(e!==n){if(n>e){var r=m.REVISION_CHANGES[n],i=m.REVISION_CHANGES[e];throw new g["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+r+") or downgrade your runtime to an older version ("+i+").")}throw new g["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+t[1]+").")}}function a(t,e){function n(n,r,i){i.hash&&(r=d.extend({},r,i.hash),i.ids&&(i.ids[0]=!0)),n=e.VM.resolvePartial.call(this,n,r,i);var s=e.VM.invokePartial.call(this,n,r,i);if(null==s&&e.compile&&(i.partials[i.name]=e.compile(n,t.compilerOptions,e),s=i.partials[i.name](r,i)),null!=s){if(i.indent){for(var a=s.split("\n"),o=0,u=a.length;u>o&&(a[o]||o+1!==u);o++)a[o]=i.indent+a[o];s=a.join("\n")}return s}throw new g["default"]("The partial "+i.name+" could not be compiled when running in runtime-only mode")}function r(e){function n(e){return""+t.main(i,e,i.helpers,i.partials,a,u,o)}var s=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],a=s.data;r._setup(s),!s.partial&&t.useData&&(a=h(e,a));var o=void 0,u=t.useBlockParams?[]:void 0;return t.useDepths&&(o=s.depths?e!==s.depths[0]?[e].concat(s.depths):s.depths:[e]),(n=p(t.main,n,i,s.depths||[],a,u))(e,s)}if(!e)throw new g["default"]("No environment passed to template");if(!t||!t.main)throw new g["default"]("Unknown template object: "+typeof t);t.main.decorator=t.main_d,e.VM.checkRevision(t.compiler);var i={strict:function(t,e){if(!(e in t))throw new g["default"]('"'+e+'" not defined in '+t);return t[e]},lookup:function(t,e){for(var n=t.length,r=0;n>r;r++)if(t[r]&&null!=t[r][e])return t[r][e]},lambda:function(t,e){return"function"==typeof t?t.call(e):t},escapeExpression:d.escapeExpression,invokePartial:n,fn:function(e){var n=t[e];return n.decorator=t[e+"_d"],n},programs:[],program:function(t,e,n,r,i){var s=this.programs[t],a=this.fn(t);return e||i||r||n?s=o(this,t,a,e,n,r,i):s||(s=this.programs[t]=o(this,t,a)),s},data:function(t,e){for(;t&&e--;)t=t._parent;return t},merge:function(t,e){var n=t||e;return t&&e&&t!==e&&(n=d.extend({},e,t)),n},noop:e.VM.noop,compilerInfo:t.compiler};return r.isTop=!0,r._setup=function(n){n.partial?(i.helpers=n.helpers,i.partials=n.partials,i.decorators=n.decorators):(i.helpers=i.merge(n.helpers,e.helpers),t.usePartial&&(i.partials=i.merge(n.partials,e.partials)),(t.usePartial||t.useDecorators)&&(i.decorators=i.merge(n.decorators,e.decorators)))},r._child=function(e,n,r,s){if(t.useBlockParams&&!r)throw new g["default"]("must pass block params");if(t.useDepths&&!s)throw new g["default"]("must pass parent depths");return o(i,e,t[e],n,0,r,s)},r}function o(t,e,n,r,i,s,a){function o(e){var i=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],o=a;return a&&e!==a[0]&&(o=[e].concat(a)),n(t,e,t.helpers,t.partials,i.data||r,s&&[i.blockParams].concat(s),o)}return o=p(n,o,t,a,r,s),o.program=e,o.depth=a?a.length:0,o.blockParams=i||0,o}function u(t,e,n){return t?t.call||n.name||(n.name=t,t=n.partials[t]):t="@partial-block"===n.name?n.data["partial-block"]:n.partials[n.name],t}function l(t,e,n){n.partial=!0,n.ids&&(n.data.contextPath=n.ids[0]||n.data.contextPath);var r=void 0;if(n.fn&&n.fn!==c&&(n.data=m.createFrame(n.data),r=n.data["partial-block"]=n.fn,r.partials&&(n.partials=d.extend({},n.partials,r.partials))),void 0===t&&r&&(t=r),void 0===t)throw new g["default"]("The partial "+n.name+" could not be found");return t instanceof Function?t(e,n):void 0}function c(){return""}function h(t,e){return e&&"root"in e||(e=e?m.createFrame(e):{},e.root=t),e}function p(t,e,n,r,i,s){if(t.decorator){var a={};e=t.decorator(e,a,n,r&&r[0],i,s,r),d.extend(e,a)}return e}e.__esModule=!0,e.checkRevision=s,e.template=a,e.wrapProgram=o,e.resolvePartial=u,e.invokePartial=l,e.noop=c;var f=n(3),d=i(f),v=n(5),g=r(v),m=n(9)},function(t,e){"use strict";function n(t){this.string=t}e.__esModule=!0,n.prototype.toString=n.prototype.toHTML=function(){return""+this.string},e["default"]=n,t.exports=e["default"]},,,,,,,,,function(t,e,n){(function(t){t.ConvexGeometry=function(e){function n(t){var n=e[t].clone(),i=n.length();n.x+=i*a(),n.y+=i*a(),n.z+=i*a();for(var o=[],l=0;lh;h++){for(var p=[c[h],c[(h+1)%3]],f=!0,d=0;d=u}function i(e,n,r){var i=new t.Vector3,s=new t.Vector3;return i.subVectors(r,n),s.subVectors(e,n),i.cross(s),i.normalize(),i}function s(t,e){return t[0]===e[1]&&t[1]===e[0]}function a(){return 2*(Math.random()-.5)*1e-6}function o(e){var n=e.length();return new t.Vector2(e.x/n,e.y/n)}t.Geometry.call(this);for(var u=[[0,1,2],[0,2,1]],l=3;lf;f++)void 0===h[p[f]]&&(h[p[f]]=c++,this.vertices.push(e[p[f]])),p[f]=h[p[f]];for(var l=0;l this.length) at = this.length; + if (at < 0) at += this.length + 1; + + var set = []; + var toAdd = []; + var toMerge = []; + var toRemove = []; + var modelMap = {}; + + var add = options.add; + var merge = options.merge; + var remove = options.remove; + + var sort = false; + var sortable = this.comparator && at == null && options.sort !== false; + var sortAttr = _.isString(this.comparator) ? this.comparator : null; + + // Turn bare objects into model references, and prevent invalid models + // from being added. + var model, i; + for (i = 0; i < models.length; i++) { + model = models[i]; + + // If a duplicate is found, prevent it from being added and + // optionally merge it into the existing model. + var existing = this.get(model); + if (existing) { + if (merge && model !== existing) { + var attrs = this._isModel(model) ? model.attributes : model; + if (options.parse) attrs = existing.parse(attrs, options); + existing.set(attrs, options); + toMerge.push(existing); + if (sortable && !sort) sort = existing.hasChanged(sortAttr); + } + if (!modelMap[existing.cid]) { + modelMap[existing.cid] = true; + set.push(existing); + } + models[i] = existing; + + // If this is a new, valid model, push it to the `toAdd` list. + } else if (add) { + model = models[i] = this._prepareModel(model, options); + if (model) { + toAdd.push(model); + this._addReference(model, options); + modelMap[model.cid] = true; + set.push(model); + } + } + } + + // Remove stale models. + if (remove) { + for (i = 0; i < this.length; i++) { + model = this.models[i]; + if (!modelMap[model.cid]) toRemove.push(model); + } + if (toRemove.length) this._removeModels(toRemove, options); + } + + // See if sorting is needed, update `length` and splice in new models. + var orderChanged = false; + var replace = !sortable && add && remove; + if (set.length && replace) { + orderChanged = this.length !== set.length || _.some(this.models, function(m, index) { + return m !== set[index]; + }); + this.models.length = 0; + splice(this.models, set, 0); + this.length = this.models.length; + } else if (toAdd.length) { + if (sortable) sort = true; + splice(this.models, toAdd, at == null ? this.length : at); + this.length = this.models.length; + } + + // Silently sort the collection if appropriate. + if (sort) this.sort({silent: true}); + + // Unless silenced, it's time to fire all appropriate add/sort/update events. + if (!options.silent) { + for (i = 0; i < toAdd.length; i++) { + if (at != null) options.index = at + i; + model = toAdd[i]; + model.trigger('add', model, this, options); + } + if (sort || orderChanged) this.trigger('sort', this, options); + if (toAdd.length || toRemove.length || toMerge.length) { + options.changes = { + added: toAdd, + removed: toRemove, + merged: toMerge + }; + this.trigger('update', this, options); + } + } + + // Return the added (or merged) model (or models). + return singular ? models[0] : models; + }, + + // When you have more items than you want to add or remove individually, + // you can reset the entire set with a new list of models, without firing + // any granular `add` or `remove` events. Fires `reset` when finished. + // Useful for bulk operations and optimizations. + reset: function(models, options) { + options = options ? _.clone(options) : {}; + for (var i = 0; i < this.models.length; i++) { + this._removeReference(this.models[i], options); + } + options.previousModels = this.models; + this._reset(); + models = this.add(models, _.extend({silent: true}, options)); + if (!options.silent) this.trigger('reset', this, options); + return models; + }, + + // Add a model to the end of the collection. + push: function(model, options) { + return this.add(model, _.extend({at: this.length}, options)); + }, + + // Remove a model from the end of the collection. + pop: function(options) { + var model = this.at(this.length - 1); + return this.remove(model, options); + }, + + // Add a model to the beginning of the collection. + unshift: function(model, options) { + return this.add(model, _.extend({at: 0}, options)); + }, + + // Remove a model from the beginning of the collection. + shift: function(options) { + var model = this.at(0); + return this.remove(model, options); + }, + + // Slice out a sub-array of models from the collection. + slice: function() { + return slice.apply(this.models, arguments); + }, + + // Get a model from the set by id, cid, model object with id or cid + // properties, or an attributes object that is transformed through modelId. + get: function(obj) { + if (obj == null) return void 0; + return this._byId[obj] || + this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] || + obj.cid && this._byId[obj.cid]; + }, + + // Returns `true` if the model is in the collection. + has: function(obj) { + return this.get(obj) != null; + }, + + // Get the model at the given index. + at: function(index) { + if (index < 0) index += this.length; + return this.models[index]; + }, + + // Return models with matching attributes. Useful for simple cases of + // `filter`. + where: function(attrs, first) { + return this[first ? 'find' : 'filter'](attrs); + }, + + // Return the first model with matching attributes. Useful for simple cases + // of `find`. + findWhere: function(attrs) { + return this.where(attrs, true); + }, + + // Force the collection to re-sort itself. You don't need to call this under + // normal circumstances, as the set will maintain sort order as each item + // is added. + sort: function(options) { + var comparator = this.comparator; + if (!comparator) throw new Error('Cannot sort a set without a comparator'); + options || (options = {}); + + var length = comparator.length; + if (_.isFunction(comparator)) comparator = comparator.bind(this); + + // Run sort based on type of `comparator`. + if (length === 1 || _.isString(comparator)) { + this.models = this.sortBy(comparator); + } else { + this.models.sort(comparator); + } + if (!options.silent) this.trigger('sort', this, options); + return this; + }, + + // Pluck an attribute from each model in the collection. + pluck: function(attr) { + return this.map(attr + ''); + }, + + // Fetch the default set of models for this collection, resetting the + // collection when they arrive. If `reset: true` is passed, the response + // data will be passed through the `reset` method instead of `set`. + fetch: function(options) { + options = _.extend({parse: true}, options); + var success = options.success; + var collection = this; + options.success = function(resp) { + var method = options.reset ? 'reset' : 'set'; + collection[method](resp, options); + if (success) success.call(options.context, collection, resp, options); + collection.trigger('sync', collection, resp, options); + }; + wrapError(this, options); + return this.sync('read', this, options); + }, + + // Create a new instance of a model in this collection. Add the model to the + // collection immediately, unless `wait: true` is passed, in which case we + // wait for the server to agree. + create: function(model, options) { + options = options ? _.clone(options) : {}; + var wait = options.wait; + model = this._prepareModel(model, options); + if (!model) return false; + if (!wait) this.add(model, options); + var collection = this; + var success = options.success; + options.success = function(m, resp, callbackOpts) { + if (wait) collection.add(m, callbackOpts); + if (success) success.call(callbackOpts.context, m, resp, callbackOpts); + }; + model.save(null, options); + return model; + }, + + // **parse** converts a response into a list of models to be added to the + // collection. The default implementation is just to pass it through. + parse: function(resp, options) { + return resp; + }, + + // Create a new collection with an identical list of models as this one. + clone: function() { + return new this.constructor(this.models, { + model: this.model, + comparator: this.comparator + }); + }, + + // Define how to uniquely identify models in the collection. + modelId: function(attrs) { + return attrs[this.model.prototype.idAttribute || 'id']; + }, + + // Get an iterator of all models in this collection. + values: function() { + return new CollectionIterator(this, ITERATOR_VALUES); + }, + + // Get an iterator of all model IDs in this collection. + keys: function() { + return new CollectionIterator(this, ITERATOR_KEYS); + }, + + // Get an iterator of all [ID, model] tuples in this collection. + entries: function() { + return new CollectionIterator(this, ITERATOR_KEYSVALUES); + }, + + // Private method to reset all internal state. Called when the collection + // is first initialized or reset. + _reset: function() { + this.length = 0; + this.models = []; + this._byId = {}; + }, + + // Prepare a hash of attributes (or other model) to be added to this + // collection. + _prepareModel: function(attrs, options) { + if (this._isModel(attrs)) { + if (!attrs.collection) attrs.collection = this; + return attrs; + } + options = options ? _.clone(options) : {}; + options.collection = this; + var model = new this.model(attrs, options); + if (!model.validationError) return model; + this.trigger('invalid', this, model.validationError, options); + return false; + }, + + // Internal method called by both remove and set. + _removeModels: function(models, options) { + var removed = []; + for (var i = 0; i < models.length; i++) { + var model = this.get(models[i]); + if (!model) continue; + + var index = this.indexOf(model); + this.models.splice(index, 1); + this.length--; + + // Remove references before triggering 'remove' event to prevent an + // infinite loop. #3693 + delete this._byId[model.cid]; + var id = this.modelId(model.attributes); + if (id != null) delete this._byId[id]; + + if (!options.silent) { + options.index = index; + model.trigger('remove', model, this, options); + } + + removed.push(model); + this._removeReference(model, options); + } + return removed; + }, + + // Method for checking whether an object should be considered a model for + // the purposes of adding to the collection. + _isModel: function(model) { + return model instanceof Model; + }, + + // Internal method to create a model's ties to a collection. + _addReference: function(model, options) { + this._byId[model.cid] = model; + var id = this.modelId(model.attributes); + if (id != null) this._byId[id] = model; + model.on('all', this._onModelEvent, this); + }, + + // Internal method to sever a model's ties to a collection. + _removeReference: function(model, options) { + delete this._byId[model.cid]; + var id = this.modelId(model.attributes); + if (id != null) delete this._byId[id]; + if (this === model.collection) delete model.collection; + model.off('all', this._onModelEvent, this); + }, + + // Internal method called every time a model in the set fires an event. + // Sets need to update their indexes when models change ids. All other + // events simply proxy through. "add" and "remove" events that originate + // in other collections are ignored. + _onModelEvent: function(event, model, collection, options) { + if (model) { + if ((event === 'add' || event === 'remove') && collection !== this) return; + if (event === 'destroy') this.remove(model, options); + if (event === 'change') { + var prevId = this.modelId(model.previousAttributes()); + var id = this.modelId(model.attributes); + if (prevId !== id) { + if (prevId != null) delete this._byId[prevId]; + if (id != null) this._byId[id] = model; + } + } + } + this.trigger.apply(this, arguments); + } + + }); + + // Defining an @@iterator method implements JavaScript's Iterable protocol. + // In modern ES2015 browsers, this value is found at Symbol.iterator. + /* global Symbol */ + var $$iterator = typeof Symbol === 'function' && Symbol.iterator; + if ($$iterator) { + Collection.prototype[$$iterator] = Collection.prototype.values; + } + + // CollectionIterator + // ------------------ + + // A CollectionIterator implements JavaScript's Iterator protocol, allowing the + // use of `for of` loops in modern browsers and interoperation between + // Backbone.Collection and other JavaScript functions and third-party libraries + // which can operate on Iterables. + var CollectionIterator = function(collection, kind) { + this._collection = collection; + this._kind = kind; + this._index = 0; + }; + + // This "enum" defines the three possible kinds of values which can be emitted + // by a CollectionIterator that correspond to the values(), keys() and entries() + // methods on Collection, respectively. + var ITERATOR_VALUES = 1; + var ITERATOR_KEYS = 2; + var ITERATOR_KEYSVALUES = 3; + + // All Iterators should themselves be Iterable. + if ($$iterator) { + CollectionIterator.prototype[$$iterator] = function() { + return this; + }; + } + + CollectionIterator.prototype.next = function() { + if (this._collection) { + + // Only continue iterating if the iterated collection is long enough. + if (this._index < this._collection.length) { + var model = this._collection.at(this._index); + this._index++; + + // Construct a value depending on what kind of values should be iterated. + var value; + if (this._kind === ITERATOR_VALUES) { + value = model; + } else { + var id = this._collection.modelId(model.attributes); + if (this._kind === ITERATOR_KEYS) { + value = id; + } else { // ITERATOR_KEYSVALUES + value = [id, model]; + } + } + return {value: value, done: false}; + } + + // Once exhausted, remove the reference to the collection so future + // calls to the next method always return done. + this._collection = void 0; + } + + return {value: void 0, done: true}; + }; + + // Backbone.View + // ------------- + + // Backbone Views are almost more convention than they are actual code. A View + // is simply a JavaScript object that represents a logical chunk of UI in the + // DOM. This might be a single item, an entire list, a sidebar or panel, or + // even the surrounding frame which wraps your whole app. Defining a chunk of + // UI as a **View** allows you to define your DOM events declaratively, without + // having to worry about render order ... and makes it easy for the view to + // react to specific changes in the state of your models. + + // Creating a Backbone.View creates its initial element outside of the DOM, + // if an existing element is not provided... + var View = Backbone.View = function(options) { + this.cid = _.uniqueId('view'); + this.preinitialize.apply(this, arguments); + _.extend(this, _.pick(options, viewOptions)); + this._ensureElement(); + this.initialize.apply(this, arguments); + }; + + // Cached regex to split keys for `delegate`. + var delegateEventSplitter = /^(\S+)\s*(.*)$/; + + // List of view options to be set as properties. + var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']; + + // Set up all inheritable **Backbone.View** properties and methods. + _.extend(View.prototype, Events, { + + // The default `tagName` of a View's element is `"div"`. + tagName: 'div', + + // jQuery delegate for element lookup, scoped to DOM elements within the + // current view. This should be preferred to global lookups where possible. + $: function(selector) { + return this.$el.find(selector); + }, + + // preinitialize is an empty function by default. You can override it with a function + // or object. preinitialize will run before any instantiation logic is run in the View + preinitialize: function(){}, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // **render** is the core function that your view should override, in order + // to populate its element (`this.el`), with the appropriate HTML. The + // convention is for **render** to always return `this`. + render: function() { + return this; + }, + + // Remove this view by taking the element out of the DOM, and removing any + // applicable Backbone.Events listeners. + remove: function() { + this._removeElement(); + this.stopListening(); + return this; + }, + + // Remove this view's element from the document and all event listeners + // attached to it. Exposed for subclasses using an alternative DOM + // manipulation API. + _removeElement: function() { + this.$el.remove(); + }, + + // Change the view's element (`this.el` property) and re-delegate the + // view's events on the new element. + setElement: function(element) { + this.undelegateEvents(); + this._setElement(element); + this.delegateEvents(); + return this; + }, + + // Creates the `this.el` and `this.$el` references for this view using the + // given `el`. `el` can be a CSS selector or an HTML string, a jQuery + // context or an element. Subclasses can override this to utilize an + // alternative DOM manipulation API and are only required to set the + // `this.el` property. + _setElement: function(el) { + this.$el = el instanceof Backbone.$ ? el : Backbone.$(el); + this.el = this.$el[0]; + }, + + // Set callbacks, where `this.events` is a hash of + // + // *{"event selector": "callback"}* + // + // { + // 'mousedown .title': 'edit', + // 'click .button': 'save', + // 'click .open': function(e) { ... } + // } + // + // pairs. Callbacks will be bound to the view, with `this` set properly. + // Uses event delegation for efficiency. + // Omitting the selector binds the event to `this.el`. + delegateEvents: function(events) { + events || (events = _.result(this, 'events')); + if (!events) return this; + this.undelegateEvents(); + for (var key in events) { + var method = events[key]; + if (!_.isFunction(method)) method = this[method]; + if (!method) continue; + var match = key.match(delegateEventSplitter); + this.delegate(match[1], match[2], method.bind(this)); + } + return this; + }, + + // Add a single event listener to the view's element (or a child element + // using `selector`). This only works for delegate-able events: not `focus`, + // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer. + delegate: function(eventName, selector, listener) { + this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Clears all callbacks previously bound to the view by `delegateEvents`. + // You usually don't need to use this, but may wish to if you have multiple + // Backbone views attached to the same DOM element. + undelegateEvents: function() { + if (this.$el) this.$el.off('.delegateEvents' + this.cid); + return this; + }, + + // A finer-grained `undelegateEvents` for removing a single delegated event. + // `selector` and `listener` are both optional. + undelegate: function(eventName, selector, listener) { + this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener); + return this; + }, + + // Produces a DOM element to be assigned to your view. Exposed for + // subclasses using an alternative DOM manipulation API. + _createElement: function(tagName) { + return document.createElement(tagName); + }, + + // Ensure that the View has a DOM element to render into. + // If `this.el` is a string, pass it through `$()`, take the first + // matching element, and re-assign it to `el`. Otherwise, create + // an element from the `id`, `className` and `tagName` properties. + _ensureElement: function() { + if (!this.el) { + var attrs = _.extend({}, _.result(this, 'attributes')); + if (this.id) attrs.id = _.result(this, 'id'); + if (this.className) attrs['class'] = _.result(this, 'className'); + this.setElement(this._createElement(_.result(this, 'tagName'))); + this._setAttributes(attrs); + } else { + this.setElement(_.result(this, 'el')); + } + }, + + // Set attributes from a hash on this view's element. Exposed for + // subclasses using an alternative DOM manipulation API. + _setAttributes: function(attributes) { + this.$el.attr(attributes); + } + + }); + + // Proxy Backbone class methods to Underscore functions, wrapping the model's + // `attributes` object or collection's `models` array behind the scenes. + // + // collection.filter(function(model) { return model.get('age') > 10 }); + // collection.each(this.addView); + // + // `Function#apply` can be slow so we use the method's arg count, if we know it. + var addMethod = function(base, length, method, attribute) { + switch (length) { + case 1: return function() { + return base[method](this[attribute]); + }; + case 2: return function(value) { + return base[method](this[attribute], value); + }; + case 3: return function(iteratee, context) { + return base[method](this[attribute], cb(iteratee, this), context); + }; + case 4: return function(iteratee, defaultVal, context) { + return base[method](this[attribute], cb(iteratee, this), defaultVal, context); + }; + default: return function() { + var args = slice.call(arguments); + args.unshift(this[attribute]); + return base[method].apply(base, args); + }; + } + }; + + var addUnderscoreMethods = function(Class, base, methods, attribute) { + _.each(methods, function(length, method) { + if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute); + }); + }; + + // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`. + var cb = function(iteratee, instance) { + if (_.isFunction(iteratee)) return iteratee; + if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee); + if (_.isString(iteratee)) return function(model) { return model.get(iteratee); }; + return iteratee; + }; + var modelMatcher = function(attrs) { + var matcher = _.matches(attrs); + return function(model) { + return matcher(model.attributes); + }; + }; + + // Underscore methods that we want to implement on the Collection. + // 90% of the core usefulness of Backbone Collections is actually implemented + // right here: + var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0, + foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3, + select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3, + contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, + head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, + without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, + isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3, + sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3}; + + + // Underscore methods that we want to implement on the Model, mapped to the + // number of arguments they take. + var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, + omit: 0, chain: 1, isEmpty: 1}; + + // Mix in each Underscore method as a proxy to `Collection#models`. + + _.each([ + [Collection, collectionMethods, 'models'], + [Model, modelMethods, 'attributes'] + ], function(config) { + var Base = config[0], + methods = config[1], + attribute = config[2]; + + Base.mixin = function(obj) { + var mappings = _.reduce(_.functions(obj), function(memo, name) { + memo[name] = 0; + return memo; + }, {}); + addUnderscoreMethods(Base, obj, mappings, attribute); + }; + + addUnderscoreMethods(Base, _, methods, attribute); + }); + + // Backbone.sync + // ------------- + + // Override this function to change the manner in which Backbone persists + // models to the server. You will be passed the type of request, and the + // model in question. By default, makes a RESTful Ajax request + // to the model's `url()`. Some possible customizations could be: + // + // * Use `setTimeout` to batch rapid-fire updates into a single request. + // * Send up the models as XML instead of JSON. + // * Persist models via WebSockets instead of Ajax. + // + // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests + // as `POST`, with a `_method` parameter containing the true HTTP method, + // as well as all requests with the body as `application/x-www-form-urlencoded` + // instead of `application/json` with the model in a param named `model`. + // Useful when interfacing with server-side languages like **PHP** that make + // it difficult to read the body of `PUT` requests. + Backbone.sync = function(method, model, options) { + var type = methodMap[method]; + + // Default options, unless specified. + _.defaults(options || (options = {}), { + emulateHTTP: Backbone.emulateHTTP, + emulateJSON: Backbone.emulateJSON + }); + + // Default JSON-request options. + var params = {type: type, dataType: 'json'}; + + // Ensure that we have a URL. + if (!options.url) { + params.url = _.result(model, 'url') || urlError(); + } + + // Ensure that we have the appropriate request data. + if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) { + params.contentType = 'application/json'; + params.data = JSON.stringify(options.attrs || model.toJSON(options)); + } + + // For older servers, emulate JSON by encoding the request into an HTML-form. + if (options.emulateJSON) { + params.contentType = 'application/x-www-form-urlencoded'; + params.data = params.data ? {model: params.data} : {}; + } + + // For older servers, emulate HTTP by mimicking the HTTP method with `_method` + // And an `X-HTTP-Method-Override` header. + if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) { + params.type = 'POST'; + if (options.emulateJSON) params.data._method = type; + var beforeSend = options.beforeSend; + options.beforeSend = function(xhr) { + xhr.setRequestHeader('X-HTTP-Method-Override', type); + if (beforeSend) return beforeSend.apply(this, arguments); + }; + } + + // Don't process data on a non-GET request. + if (params.type !== 'GET' && !options.emulateJSON) { + params.processData = false; + } + + // Pass along `textStatus` and `errorThrown` from jQuery. + var error = options.error; + options.error = function(xhr, textStatus, errorThrown) { + options.textStatus = textStatus; + options.errorThrown = errorThrown; + if (error) error.call(options.context, xhr, textStatus, errorThrown); + }; + + // Make the request, allowing the user to override any Ajax options. + var xhr = options.xhr = Backbone.ajax(_.extend(params, options)); + model.trigger('request', model, xhr, options); + return xhr; + }; + + // Map from CRUD to HTTP for our default `Backbone.sync` implementation. + var methodMap = { + create: 'POST', + update: 'PUT', + patch: 'PATCH', + delete: 'DELETE', + read: 'GET' + }; + + // Set the default implementation of `Backbone.ajax` to proxy through to `$`. + // Override this if you'd like to use a different library. + Backbone.ajax = function() { + return Backbone.$.ajax.apply(Backbone.$, arguments); + }; + + // Backbone.Router + // --------------- + + // Routers map faux-URLs to actions, and fire events when routes are + // matched. Creating a new one sets its `routes` hash, if not set statically. + var Router = Backbone.Router = function(options) { + options || (options = {}); + this.preinitialize.apply(this, arguments); + if (options.routes) this.routes = options.routes; + this._bindRoutes(); + this.initialize.apply(this, arguments); + }; + + // Cached regular expressions for matching named param parts and splatted + // parts of route strings. + var optionalParam = /\((.*?)\)/g; + var namedParam = /(\(\?)?:\w+/g; + var splatParam = /\*\w+/g; + var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; + + // Set up all inheritable **Backbone.Router** properties and methods. + _.extend(Router.prototype, Events, { + + // preinitialize is an empty function by default. You can override it with a function + // or object. preinitialize will run before any instantiation logic is run in the Router. + preinitialize: function(){}, + + // Initialize is an empty function by default. Override it with your own + // initialization logic. + initialize: function(){}, + + // Manually bind a single named route to a callback. For example: + // + // this.route('search/:query/p:num', 'search', function(query, num) { + // ... + // }); + // + route: function(route, name, callback) { + if (!_.isRegExp(route)) route = this._routeToRegExp(route); + if (_.isFunction(name)) { + callback = name; + name = ''; + } + if (!callback) callback = this[name]; + var router = this; + Backbone.history.route(route, function(fragment) { + var args = router._extractParameters(route, fragment); + if (router.execute(callback, args, name) !== false) { + router.trigger.apply(router, ['route:' + name].concat(args)); + router.trigger('route', name, args); + Backbone.history.trigger('route', router, name, args); + } + }); + return this; + }, + + // Execute a route handler with the provided parameters. This is an + // excellent place to do pre-route setup or post-route cleanup. + execute: function(callback, args, name) { + if (callback) callback.apply(this, args); + }, + + // Simple proxy to `Backbone.history` to save a fragment into the history. + navigate: function(fragment, options) { + Backbone.history.navigate(fragment, options); + return this; + }, + + // Bind all defined routes to `Backbone.history`. We have to reverse the + // order of the routes here to support behavior where the most general + // routes can be defined at the bottom of the route map. + _bindRoutes: function() { + if (!this.routes) return; + this.routes = _.result(this, 'routes'); + var route, routes = _.keys(this.routes); + while ((route = routes.pop()) != null) { + this.route(route, this.routes[route]); + } + }, + + // Convert a route string into a regular expression, suitable for matching + // against the current location hash. + _routeToRegExp: function(route) { + route = route.replace(escapeRegExp, '\\$&') + .replace(optionalParam, '(?:$1)?') + .replace(namedParam, function(match, optional) { + return optional ? match : '([^/?]+)'; + }) + .replace(splatParam, '([^?]*?)'); + return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$'); + }, + + // Given a route, and a URL fragment that it matches, return the array of + // extracted decoded parameters. Empty or unmatched parameters will be + // treated as `null` to normalize cross-browser behavior. + _extractParameters: function(route, fragment) { + var params = route.exec(fragment).slice(1); + return _.map(params, function(param, i) { + // Don't decode the search params. + if (i === params.length - 1) return param || null; + return param ? decodeURIComponent(param) : null; + }); + } + + }); + + // Backbone.History + // ---------------- + + // Handles cross-browser history management, based on either + // [pushState](http://diveintohtml5.info/history.html) and real URLs, or + // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange) + // and URL fragments. If the browser supports neither (old IE, natch), + // falls back to polling. + var History = Backbone.History = function() { + this.handlers = []; + this.checkUrl = this.checkUrl.bind(this); + + // Ensure that `History` can be used outside of the browser. + if (typeof window !== 'undefined') { + this.location = window.location; + this.history = window.history; + } + }; + + // Cached regex for stripping a leading hash/slash and trailing space. + var routeStripper = /^[#\/]|\s+$/g; + + // Cached regex for stripping leading and trailing slashes. + var rootStripper = /^\/+|\/+$/g; + + // Cached regex for stripping urls of hash. + var pathStripper = /#.*$/; + + // Has the history handling already been started? + History.started = false; + + // Set up all inheritable **Backbone.History** properties and methods. + _.extend(History.prototype, Events, { + + // The default interval to poll for hash changes, if necessary, is + // twenty times a second. + interval: 50, + + // Are we at the app root? + atRoot: function() { + var path = this.location.pathname.replace(/[^\/]$/, '$&/'); + return path === this.root && !this.getSearch(); + }, + + // Does the pathname match the root? + matchRoot: function() { + var path = this.decodeFragment(this.location.pathname); + var rootPath = path.slice(0, this.root.length - 1) + '/'; + return rootPath === this.root; + }, + + // Unicode characters in `location.pathname` are percent encoded so they're + // decoded for comparison. `%25` should not be decoded since it may be part + // of an encoded parameter. + decodeFragment: function(fragment) { + return decodeURI(fragment.replace(/%25/g, '%2525')); + }, + + // In IE6, the hash fragment and search params are incorrect if the + // fragment contains `?`. + getSearch: function() { + var match = this.location.href.replace(/#.*/, '').match(/\?.+/); + return match ? match[0] : ''; + }, + + // Gets the true hash value. Cannot use location.hash directly due to bug + // in Firefox where location.hash will always be decoded. + getHash: function(window) { + var match = (window || this).location.href.match(/#(.*)$/); + return match ? match[1] : ''; + }, + + // Get the pathname and search params, without the root. + getPath: function() { + var path = this.decodeFragment( + this.location.pathname + this.getSearch() + ).slice(this.root.length - 1); + return path.charAt(0) === '/' ? path.slice(1) : path; + }, + + // Get the cross-browser normalized URL fragment from the path or hash. + getFragment: function(fragment) { + if (fragment == null) { + if (this._usePushState || !this._wantsHashChange) { + fragment = this.getPath(); + } else { + fragment = this.getHash(); + } + } + return fragment.replace(routeStripper, ''); + }, + + // Start the hash change handling, returning `true` if the current URL matches + // an existing route, and `false` otherwise. + start: function(options) { + if (History.started) throw new Error('Backbone.history has already been started'); + History.started = true; + + // Figure out the initial configuration. Do we need an iframe? + // Is pushState desired ... is it available? + this.options = _.extend({root: '/'}, this.options, options); + this.root = this.options.root; + this._wantsHashChange = this.options.hashChange !== false; + this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7); + this._useHashChange = this._wantsHashChange && this._hasHashChange; + this._wantsPushState = !!this.options.pushState; + this._hasPushState = !!(this.history && this.history.pushState); + this._usePushState = this._wantsPushState && this._hasPushState; + this.fragment = this.getFragment(); + + // Normalize root to always include a leading and trailing slash. + this.root = ('/' + this.root + '/').replace(rootStripper, '/'); + + // Transition from hashChange to pushState or vice versa if both are + // requested. + if (this._wantsHashChange && this._wantsPushState) { + + // If we've started off with a route from a `pushState`-enabled + // browser, but we're currently in a browser that doesn't support it... + if (!this._hasPushState && !this.atRoot()) { + var rootPath = this.root.slice(0, -1) || '/'; + this.location.replace(rootPath + '#' + this.getPath()); + // Return immediately as browser will do redirect to new url + return true; + + // Or if we've started out with a hash-based route, but we're currently + // in a browser where it could be `pushState`-based instead... + } else if (this._hasPushState && this.atRoot()) { + this.navigate(this.getHash(), {replace: true}); + } + + } + + // Proxy an iframe to handle location events if the browser doesn't + // support the `hashchange` event, HTML5 history, or the user wants + // `hashChange` but not `pushState`. + if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { + this.iframe = document.createElement('iframe'); + this.iframe.src = 'javascript:0'; + this.iframe.style.display = 'none'; + this.iframe.tabIndex = -1; + var body = document.body; + // Using `appendChild` will throw on IE < 9 if the document is not ready. + var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow; + iWindow.document.open(); + iWindow.document.close(); + iWindow.location.hash = '#' + this.fragment; + } + + // Add a cross-platform `addEventListener` shim for older browsers. + var addEventListener = window.addEventListener || function(eventName, listener) { + return attachEvent('on' + eventName, listener); + }; + + // Depending on whether we're using pushState or hashes, and whether + // 'onhashchange' is supported, determine how we check the URL state. + if (this._usePushState) { + addEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + addEventListener('hashchange', this.checkUrl, false); + } else if (this._wantsHashChange) { + this._checkUrlInterval = setInterval(this.checkUrl, this.interval); + } + + if (!this.options.silent) return this.loadUrl(); + }, + + // Disable Backbone.history, perhaps temporarily. Not useful in a real app, + // but possibly useful for unit testing Routers. + stop: function() { + // Add a cross-platform `removeEventListener` shim for older browsers. + var removeEventListener = window.removeEventListener || function(eventName, listener) { + return detachEvent('on' + eventName, listener); + }; + + // Remove window listeners. + if (this._usePushState) { + removeEventListener('popstate', this.checkUrl, false); + } else if (this._useHashChange && !this.iframe) { + removeEventListener('hashchange', this.checkUrl, false); + } + + // Clean up the iframe if necessary. + if (this.iframe) { + document.body.removeChild(this.iframe); + this.iframe = null; + } + + // Some environments will throw when clearing an undefined interval. + if (this._checkUrlInterval) clearInterval(this._checkUrlInterval); + History.started = false; + }, + + // Add a route to be tested when the fragment changes. Routes added later + // may override previous routes. + route: function(route, callback) { + this.handlers.unshift({route: route, callback: callback}); + }, + + // Checks the current URL to see if it has changed, and if it has, + // calls `loadUrl`, normalizing across the hidden iframe. + checkUrl: function(e) { + var current = this.getFragment(); + + // If the user pressed the back button, the iframe's hash will have + // changed and we should use that for comparison. + if (current === this.fragment && this.iframe) { + current = this.getHash(this.iframe.contentWindow); + } + + if (current === this.fragment) return false; + if (this.iframe) this.navigate(current); + this.loadUrl(); + }, + + // Attempt to load the current URL fragment. If a route succeeds with a + // match, returns `true`. If no defined routes matches the fragment, + // returns `false`. + loadUrl: function(fragment) { + // If the root doesn't match, no routes can match either. + if (!this.matchRoot()) return false; + fragment = this.fragment = this.getFragment(fragment); + return _.some(this.handlers, function(handler) { + if (handler.route.test(fragment)) { + handler.callback(fragment); + return true; + } + }); + }, + + // Save a fragment into the hash history, or replace the URL state if the + // 'replace' option is passed. You are responsible for properly URL-encoding + // the fragment in advance. + // + // The options object can contain `trigger: true` if you wish to have the + // route callback be fired (not usually desirable), or `replace: true`, if + // you wish to modify the current URL without adding an entry to the history. + navigate: function(fragment, options) { + if (!History.started) return false; + if (!options || options === true) options = {trigger: !!options}; + + // Normalize the fragment. + fragment = this.getFragment(fragment || ''); + + // Don't include a trailing slash on the root. + var rootPath = this.root; + if (fragment === '' || fragment.charAt(0) === '?') { + rootPath = rootPath.slice(0, -1) || '/'; + } + var url = rootPath + fragment; + + // Strip the fragment of the query and hash for matching. + fragment = fragment.replace(pathStripper, ''); + + // Decode for matching. + var decodedFragment = this.decodeFragment(fragment); + + if (this.fragment === decodedFragment) return; + this.fragment = decodedFragment; + + // If pushState is available, we use it to set the fragment as a real URL. + if (this._usePushState) { + this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url); + + // If hash changes haven't been explicitly disabled, update the hash + // fragment to store history. + } else if (this._wantsHashChange) { + this._updateHash(this.location, fragment, options.replace); + if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) { + var iWindow = this.iframe.contentWindow; + + // Opening and closing the iframe tricks IE7 and earlier to push a + // history entry on hash-tag change. When replace is true, we don't + // want this. + if (!options.replace) { + iWindow.document.open(); + iWindow.document.close(); + } + + this._updateHash(iWindow.location, fragment, options.replace); + } + + // If you've told us that you explicitly don't want fallback hashchange- + // based history, then `navigate` becomes a page refresh. + } else { + return this.location.assign(url); + } + if (options.trigger) return this.loadUrl(fragment); + }, + + // Update the hash location, either replacing the current entry, or adding + // a new one to the browser history. + _updateHash: function(location, fragment, replace) { + if (replace) { + var href = location.href.replace(/(javascript:|#).*$/, ''); + location.replace(href + '#' + fragment); + } else { + // Some browsers require that `hash` contains a leading #. + location.hash = '#' + fragment; + } + } + + }); + + // Create the default Backbone.history. + Backbone.history = new History; + + // Helpers + // ------- + + // Helper function to correctly set up the prototype chain for subclasses. + // Similar to `goog.inherits`, but uses a hash of prototype properties and + // class properties to be extended. + var extend = function(protoProps, staticProps) { + var parent = this; + var child; + + // The constructor function for the new subclass is either defined by you + // (the "constructor" property in your `extend` definition), or defaulted + // by us to simply call the parent constructor. + if (protoProps && _.has(protoProps, 'constructor')) { + child = protoProps.constructor; + } else { + child = function(){ return parent.apply(this, arguments); }; + } + + // Add static properties to the constructor function, if supplied. + _.extend(child, parent, staticProps); + + // Set the prototype chain to inherit from `parent`, without calling + // `parent`'s constructor function and add the prototype properties. + child.prototype = _.create(parent.prototype, protoProps); + child.prototype.constructor = child; + + // Set a convenience property in case the parent's prototype is needed + // later. + child.__super__ = parent.prototype; + + return child; + }; + + // Set up inheritance for the model, collection, router, view and history. + Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend; + + // Throw an error when a URL is needed, and none is supplied. + var urlError = function() { + throw new Error('A "url" property or function must be specified'); + }; + + // Wrap an optional error callback with a fallback error event. + var wrapError = function(model, options) { + var error = options.error; + options.error = function(resp) { + if (error) error.call(options.context, model, resp, options); + model.trigger('error', model, resp, options); + }; + }; + + return Backbone; + }); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {(function (global, factory) { + true ? module.exports = factory() : + typeof define === 'function' && define.amd ? define('underscore', factory) : + (global = global || self, (function () { + var current = global._; + var exports = global._ = factory(); + exports.noConflict = function () { global._ = current; return exports; }; + }())); + }(this, (function () { + // Underscore.js 1.12.0 + // https://underscorejs.org + // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + // Underscore may be freely distributed under the MIT license. + + // Current version. + var VERSION = '1.12.0'; + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + Function('return this')() || + {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // Modern feature detection. + var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; + + // All **ECMAScript 5+** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; + + // Create references to these builtin functions because we override them. + var _isNaN = isNaN, + _isFinite = isFinite; + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + // The largest integer that can be represented exactly. + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + } + + // Is a given variable an object? + function isObject(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + } + + // Is a given value equal to null? + function isNull(obj) { + return obj === null; + } + + // Is a given variable undefined? + function isUndefined(obj) { + return obj === void 0; + } + + // Is a given value a boolean? + function isBoolean(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + } + + // Is a given value a DOM element? + function isElement(obj) { + return !!(obj && obj.nodeType === 1); + } + + // Internal function for creating a `toString`-based type tester. + function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return toString.call(obj) === tag; + }; + } + + var isString = tagTester('String'); + + var isNumber = tagTester('Number'); + + var isDate = tagTester('Date'); + + var isRegExp = tagTester('RegExp'); + + var isError = tagTester('Error'); + + var isSymbol = tagTester('Symbol'); + + var isArrayBuffer = tagTester('ArrayBuffer'); + + var isFunction = tagTester('Function'); + + // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old + // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root.document && root.document.childNodes; + if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + var isFunction$1 = isFunction; + + var hasObjectTag = tagTester('Object'); + + // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. + // In IE 11, the most common among them, this problem also applies to + // `Map`, `WeakMap` and `Set`. + var hasStringTagBug = ( + supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + + var isDataView = tagTester('DataView'); + + // In IE 10 - Edge 13, we need a different heuristic + // to determine whether an object is a `DataView`. + function ie10IsDataView(obj) { + return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); + } + + var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); + + // Is a given value an array? + // Delegates to ECMA5's native `Array.isArray`. + var isArray = nativeIsArray || tagTester('Array'); + + // Internal function to check whether `key` is an own property name of `obj`. + function has(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + } + + var isArguments = tagTester('Arguments'); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + (function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has(obj, 'callee'); + }; + } + }()); + + var isArguments$1 = isArguments; + + // Is a given object a finite number? + function isFinite$1(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); + } + + // Is the given value `NaN`? + function isNaN$1(obj) { + return isNumber(obj) && _isNaN(obj); + } + + // Predicate-generating function. Often useful outside of Underscore. + function constant(value) { + return function() { + return value; + }; + } + + // Common internal logic for `isArrayLike` and `isBufferLike`. + function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; + } + } + + // Internal helper to generate a function to obtain property `key` from `obj`. + function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + } + + // Internal helper to obtain the `byteLength` property of an object. + var getByteLength = shallowProperty('byteLength'); + + // Internal helper to determine whether we should spend extensive checks against + // `ArrayBuffer` et al. + var isBufferLike = createSizePropertyCheck(getByteLength); + + // Is a given value a typed array? + var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; + function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : + isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); + } + + var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); + + // Internal helper to obtain the `length` property of an object. + var getLength = shallowProperty('length'); + + // Internal helper to create a simple lookup structure. + // `collectNonEnumProps` used to depend on `_.contains`, but this led to + // circular imports. `emulatedSet` is a one-off solution that only works for + // arrays of strings. + function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key]; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; + } + + // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't + // be iterated by `for key in ...` and thus missed. Extends `keys` in place if + // needed. + function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = isFunction$1(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !keys.contains(prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + } + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || isArguments$1(obj) + )) return length === 0; + return getLength(keys(obj)) === 0; + } + + // Returns whether an object has a given set of `key:value` pairs. + function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + } + + // If Underscore is called as a function, it returns a wrapped object that can + // be used OO-style. This wrapper holds altered versions of all functions added + // through `_.mixin`. Wrapped objects may be chained. + function _(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + } + + _.VERSION = VERSION; + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxies for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return String(this._wrapped); + }; + + // Internal function to wrap or shallow-copy an ArrayBuffer, + // typed array or DataView to a new view, reusing the buffer. + function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + getByteLength(bufferSource) + ); + } + + // We use this string twice, so give it a name for minification. + var tagDataView = '[object DataView]'; + + // Internal recursive comparison function for `_.isEqual`. + function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + } + + // Internal recursive comparison function for `_.isEqual`. + function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { + if (!isDataView$1(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } + + var areArrays = className === '[object Array]'; + if (!areArrays && isTypedArray$1(a)) { + var byteLength = getByteLength(a); + if (byteLength !== getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && + isFunction$1(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + } + + // Perform a deep comparison to check if two objects are equal. + function isEqual(a, b) { + return eq(a, b); + } + + // Retrieve all the enumerable property names of an object. + function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + } + + // Since the regular `Object.prototype.toString` type tests don't work for + // some types in IE 11, we use a fingerprinting heuristic instead, based + // on the methods. It's not great, but it's the best we got. + // The fingerprint method lists are defined below. + function ie11fingerprint(methods) { + var length = getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!isFunction$1(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + }; + } + + // In the interest of compact minification, we write + // each string in the fingerprints only once. + var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + + // `Map`, `WeakMap` and `Set` each have slightly different + // combinations of the above sublists. + var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + + var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); + + var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); + + var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); + + var isWeakSet = tagTester('WeakSet'); + + // Retrieve the values of an object's properties. + function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; + } + return values; + } + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of `_.object` with one argument. + function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; + } + + // Invert the keys and values of an object. The values must be serializable. + function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; + } + + // Return a sorted list of the function names available on the object. + function functions(obj) { + var names = []; + for (var key in obj) { + if (isFunction$1(obj[key])) names.push(key); + } + return names.sort(); + } + + // An internal function for creating assigner functions. + function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + } + + // Extend a given object with all the properties in passed-in object(s). + var extend = createAssigner(allKeys); + + // Assigns a given object with all the own properties in the passed-in + // object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + var extendOwn = createAssigner(keys); + + // Fill in a given object with default properties. + var defaults = createAssigner(allKeys, true); + + // Create a naked function reference for surrogate-prototype-swapping. + function ctor() { + return function(){}; + } + + // An internal function for creating a new object that inherits from another. + function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + } + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; + } + + // Create a (shallow-cloned) duplicate of an object. + function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); + } + + // Invokes `interceptor` with the `obj` and then returns `obj`. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + function tap(obj, interceptor) { + interceptor(obj); + return obj; + } + + // Normalize a (deep) property `path` to array. + // Like `_.iteratee`, this function can be customized. + function toPath(path) { + return isArray(path) ? path : [path]; + } + _.toPath = toPath; + + // Internal wrapper for `_.toPath` to enable minification. + // Similar to `cb` for `_.iteratee`. + function toPath$1(path) { + return _.toPath(path); + } + + // Internal function to obtain a nested property in `obj` along `path`. + function deepGet(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + } + + // Get the value of the (deep) property on `path` from `object`. + // If any property in `path` does not exist or if the value is + // `undefined`, return `defaultValue` instead. + // The `path` is normalized through `_.toPath`. + function get(object, path, defaultValue) { + var value = deepGet(object, toPath$1(path)); + return isUndefined(value) ? defaultValue : value; + } + + // Shortcut function for checking if an object has a given property directly on + // itself (in other words, not on a prototype). Unlike the internal `has` + // function, this public version can also traverse nested properties. + function has$1(obj, path) { + path = toPath$1(path); + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (!has(obj, key)) return false; + obj = obj[key]; + } + return !!length; + } + + // Keep the identity function around for default iteratees. + function identity(value) { + return value; + } + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + function matcher(attrs) { + attrs = extendOwn({}, attrs); + return function(obj) { + return isMatch(obj, attrs); + }; + } + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indices. + function property(path) { + path = toPath$1(path); + return function(obj) { + return deepGet(obj, path); + }; + } + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + function optimizeCb(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + } + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `_.identity`, + // an arbitrary callback, a property matcher, or a property accessor. + function baseIteratee(value, context, argCount) { + if (value == null) return identity; + if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (isObject(value) && !isArray(value)) return matcher(value); + return property(value); + } + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only `argCount` argument. + function iteratee(value, context) { + return baseIteratee(value, context, Infinity); + } + _.iteratee = iteratee; + + // The function we call internally to generate a callback. It invokes + // `_.iteratee` if overridden, otherwise `baseIteratee`. + function cb(value, context, argCount) { + if (_.iteratee !== iteratee) return _.iteratee(value, context); + return baseIteratee(value, context, argCount); + } + + // Returns the results of applying the `iteratee` to each element of `obj`. + // In contrast to `_.map` it returns an object. + function mapObject(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = keys(obj), + length = _keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = _keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Predicate-generating function. Often useful outside of Underscore. + function noop(){} + + // Generates a function for a given object that returns a given property. + function propertyOf(obj) { + if (obj == null) return noop; + return function(path) { + return get(obj, path); + }; + } + + // Run a function **n** times. + function times(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + } + + // Return a random integer between `min` and `max` (inclusive). + function random(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + } + + // A (possibly faster) way to get the current timestamp as an integer. + var now = Date.now || function() { + return new Date().getTime(); + }; + + // Internal helper to generate functions for escaping and unescaping strings + // to/from HTML interpolation. + function createEscaper(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + } + + // Internal list of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + // Function for escaping strings to HTML interpolation. + var _escape = createEscaper(escapeMap); + + // Internal list of HTML entities for unescaping. + var unescapeMap = invert(escapeMap); + + // Function for unescaping strings from HTML interpolation. + var _unescape = createEscaper(unescapeMap); + + // By default, Underscore uses ERB-style template delimiters. Change the + // following template settings to use alternative delimiters. + var templateSettings = _.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `_.templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + function escapeChar(match) { + return '\\' + escapes[match]; + } + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + function template(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + } + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + function result(obj, path, fallback) { + path = toPath$1(path); + var length = path.length; + if (!length) { + return isFunction$1(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = isFunction$1(prop) ? prop.call(obj) : prop; + } + return obj; + } + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + function uniqueId(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + } + + // Start chaining a wrapped Underscore object. + function chain(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + } + + // Internal function to execute `sourceFunc` bound to `context` with optional + // `args`. Determines whether to execute a function as a constructor or as a + // normal function. + function executeBound(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (isObject(result)) return result; + return self; + } + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. `_` acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. + var partial = restArguments(function(func, boundArgs) { + var placeholder = partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + partial.placeholder = _; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). + var bind = restArguments(function(func, context, args) { + if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Internal helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var isArrayLike = createSizePropertyCheck(getLength); + + // Internal implementation of a recursive `flatten` function. + function flatten(input, depth, strict, output) { + output = output || []; + if (!depth && depth !== 0) { + depth = Infinity; + } else if (depth <= 0) { + return output.concat(input); + } + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + // Flatten current level of array or arguments object. + if (depth > 1) { + flatten(value, depth - 1, strict, output); + idx = output.length; + } else { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + } + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + var bindAll = restArguments(function(obj, keys) { + keys = flatten(keys, false, false); + var index = keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = keys[index]; + obj[key] = bind(obj[key], obj); + } + return obj; + }); + + // Memoize an expensive function by storing its results. + function memoize(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + } + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + var delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + var defer = partial(delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + function throttle(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var _now = now(); + if (!previous && options.leading === false) previous = _now; + var remaining = wait - (_now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = _now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + } + + // When a sequence of calls of the returned function ends, the argument + // function is triggered. The end of a sequence is defined by the `wait` + // parameter. If `immediate` is passed, the argument function will be + // triggered at the beginning of the sequence instead of at the end. + function debounce(func, wait, immediate) { + var timeout, result; + + var later = function(context, args) { + timeout = null; + if (args) result = func.apply(context, args); + }; + + var debounced = restArguments(function(args) { + if (timeout) clearTimeout(timeout); + if (immediate) { + var callNow = !timeout; + timeout = setTimeout(later, wait); + if (callNow) result = func.apply(this, args); + } else { + timeout = delay(later, wait, this, args); + } + + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = null; + }; + + return debounced; + } + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + function wrap(func, wrapper) { + return partial(wrapper, func); + } + + // Returns a negated version of the passed-in predicate. + function negate(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + } + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + function compose() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + } + + // Returns a function that will only be executed on and after the Nth call. + function after(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + } + + // Returns a function that will only be executed up to (but not including) the + // Nth call. + function before(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + } + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + var once = partial(before, 2); + + // Returns the first key on an object that passes a truth test. + function findKey(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = keys(obj), key; + for (var i = 0, length = _keys.length; i < length; i++) { + key = _keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + } + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a truth test. + var findIndex = createPredicateIndexFinder(1); + + // Returns the last index on an array-like that passes a truth test. + var findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + function sortedIndex(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + } + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), isNaN$1); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + var indexOf = createIndexFinder(1, findIndex, sortedIndex); + + // Return the position of the last occurrence of an item in an array, + // or -1 if the item is not included in the array. + var lastIndexOf = createIndexFinder(-1, findLastIndex); + + // Return the first value which passes a truth test. + function find(obj, predicate, context) { + var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + } + + // Convenience version of a common use case of `_.find`: getting the first + // object containing specific `key:value` pairs. + function findWhere(obj, attrs) { + return find(obj, matcher(attrs)); + } + + // The cornerstone for collection functions, an `each` + // implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + function each(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var _keys = keys(obj); + for (i = 0, length = _keys.length; i < length; i++) { + iteratee(obj[_keys[i]], _keys[i], obj); + } + } + return obj; + } + + // Return the results of applying the iteratee to each element. + function map(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Internal helper to create a reducing function, iterating left or right. + function createReduce(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[_keys ? _keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = _keys ? _keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + var reduce = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + var reduceRight = createReduce(-1); + + // Return all the elements that pass a truth test. + function filter(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + } + + // Return all the elements for which a truth test fails. + function reject(obj, predicate, context) { + return filter(obj, negate(cb(predicate)), context); + } + + // Determine whether all of the elements pass a truth test. + function every(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + } + + // Determine if at least one element in the object passes a truth test. + function some(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + } + + // Determine if the array or object contains a given item (using `===`). + function contains(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return indexOf(obj, item, fromIndex) >= 0; + } + + // Invoke a method (with arguments) on every item in a collection. + var invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (isFunction$1(path)) { + func = path; + } else { + path = toPath$1(path); + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `_.map`: fetching a property. + function pluck(obj, key) { + return map(obj, property(key)); + } + + // Convenience version of a common use case of `_.filter`: selecting only + // objects containing specific `key:value` pairs. + function where(obj, attrs) { + return filter(obj, matcher(attrs)); + } + + // Return the maximum element (or element-based computation). + function max(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Return the minimum element (or element-based computation). + function min(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `_.map`. + function sample(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = values(obj); + return obj[random(obj.length - 1)]; + } + var sample = isArrayLike(obj) ? clone(obj) : values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + } + + // Shuffle a collection. + function shuffle(obj) { + return sample(obj, Infinity); + } + + // Sort the object's values by a criterion produced by an iteratee. + function sortBy(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return pluck(map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + } + + // An internal function used for aggregate "group by" operations. + function group(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + } + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + var groupBy = group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for + // when you know that your index values will be unique. + var indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + var countBy = group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; + }); + + // Split a collection into two arrays: one whose elements all pass the given + // truth test, and one whose elements all do not pass the truth test. + var partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Safely create a real, live array from anything iterable. + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + function toArray(obj) { + if (!obj) return []; + if (isArray(obj)) return slice.call(obj); + if (isString(obj)) { + // Keep surrogate pair characters together. + return obj.match(reStrSymbol); + } + if (isArrayLike(obj)) return map(obj, identity); + return values(obj); + } + + // Return the number of elements in a collection. + function size(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : keys(obj).length; + } + + // Internal `_.pick` helper function to determine whether `key` is an enumerable + // property name of `obj`. + function keyInObj(value, key, obj) { + return key in obj; + } + + // Return a copy of the object only containing the allowed properties. + var pick = restArguments(function(obj, keys) { + var result = {}, iteratee = keys[0]; + if (obj == null) return result; + if (isFunction$1(iteratee)) { + if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); + keys = allKeys(obj); + } else { + iteratee = keyInObj; + keys = flatten(keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the disallowed properties. + var omit = restArguments(function(obj, keys) { + var iteratee = keys[0], context; + if (isFunction$1(iteratee)) { + iteratee = negate(iteratee); + if (keys.length > 1) context = keys[1]; + } else { + keys = map(flatten(keys, false, false), String); + iteratee = function(value, key) { + return !contains(keys, key); + }; + } + return pick(obj, iteratee, context); + }); + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + function initial(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + } + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. The **guard** check allows it to work with `_.map`. + function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); + } + + // Returns everything but the first entry of the `array`. Especially useful on + // the `arguments` object. Passing an **n** will return the rest N values in the + // `array`. + function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + } + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); + } + + // Trim out all falsy values from an array. + function compact(array) { + return filter(array, Boolean); + } + + // Flatten out an array, either recursively (by default), or up to `depth`. + // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. + function flatten$1(array, depth) { + return flatten(array, depth, false); + } + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + var difference = restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); + }); + + // Return a version of the array that does not contain the specified value(s). + var without = restArguments(function(array, otherArrays) { + return difference(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; + } + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + var union = restArguments(function(arrays) { + return uniq(flatten(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + } + + // Complement of zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + function unzip(array) { + var length = array && max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; + } + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + var zip = restArguments(unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of `_.pairs`. + function object(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + } + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](https://docs.python.org/library/functions.html#range). + function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + } + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + } + + // Helper function to continue chaining intermediate results. + function chainResult(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + } + + // Add your own custom functions to the Underscore object. + function mixin(obj) { + each(functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; + } + + // Add all mutator `Array` functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; + }); + + // Add all accessor `Array` functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; + }); + + // Named Exports + + var allExports = { + __proto__: null, + VERSION: VERSION, + restArguments: restArguments, + isObject: isObject, + isNull: isNull, + isUndefined: isUndefined, + isBoolean: isBoolean, + isElement: isElement, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isRegExp: isRegExp, + isError: isError, + isSymbol: isSymbol, + isArrayBuffer: isArrayBuffer, + isDataView: isDataView$1, + isArray: isArray, + isFunction: isFunction$1, + isArguments: isArguments$1, + isFinite: isFinite$1, + isNaN: isNaN$1, + isTypedArray: isTypedArray$1, + isEmpty: isEmpty, + isMatch: isMatch, + isEqual: isEqual, + isMap: isMap, + isWeakMap: isWeakMap, + isSet: isSet, + isWeakSet: isWeakSet, + keys: keys, + allKeys: allKeys, + values: values, + pairs: pairs, + invert: invert, + functions: functions, + methods: functions, + extend: extend, + extendOwn: extendOwn, + assign: extendOwn, + defaults: defaults, + create: create, + clone: clone, + tap: tap, + get: get, + has: has$1, + mapObject: mapObject, + identity: identity, + constant: constant, + noop: noop, + toPath: toPath, + property: property, + propertyOf: propertyOf, + matcher: matcher, + matches: matcher, + times: times, + random: random, + now: now, + escape: _escape, + unescape: _unescape, + templateSettings: templateSettings, + template: template, + result: result, + uniqueId: uniqueId, + chain: chain, + iteratee: iteratee, + partial: partial, + bind: bind, + bindAll: bindAll, + memoize: memoize, + delay: delay, + defer: defer, + throttle: throttle, + debounce: debounce, + wrap: wrap, + negate: negate, + compose: compose, + after: after, + before: before, + once: once, + findKey: findKey, + findIndex: findIndex, + findLastIndex: findLastIndex, + sortedIndex: sortedIndex, + indexOf: indexOf, + lastIndexOf: lastIndexOf, + find: find, + detect: find, + findWhere: findWhere, + each: each, + forEach: each, + map: map, + collect: map, + reduce: reduce, + foldl: reduce, + inject: reduce, + reduceRight: reduceRight, + foldr: reduceRight, + filter: filter, + select: filter, + reject: reject, + every: every, + all: every, + some: some, + any: some, + contains: contains, + includes: contains, + include: contains, + invoke: invoke, + pluck: pluck, + where: where, + max: max, + min: min, + shuffle: shuffle, + sample: sample, + sortBy: sortBy, + groupBy: groupBy, + indexBy: indexBy, + countBy: countBy, + partition: partition, + toArray: toArray, + size: size, + pick: pick, + omit: omit, + first: first, + head: first, + take: first, + initial: initial, + last: last, + rest: rest, + tail: rest, + drop: rest, + compact: compact, + flatten: flatten$1, + without: without, + uniq: uniq, + unique: uniq, + union: union, + intersection: intersection, + difference: difference, + unzip: unzip, + transpose: unzip, + zip: zip, + object: object, + range: range, + chunk: chunk, + mixin: mixin, + 'default': _ + }; + + // Default Export + + // Add all of the Underscore functions to the wrapper object. + var _$1 = mixin(allExports); + // Legacy Node.js API. + _$1._ = _$1; + + return _$1; + + }))); + //# sourceMappingURL=underscore.js.map + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 56 */, +/* 57 */ +/***/ (function(module, exports) { + + module.exports = window; + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, Display, EGS_ElementView, EGS_View, OrbitControls, THREE, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Backbone = __webpack_require__(54); + + THREE = __webpack_require__(59); + + OrbitControls = __webpack_require__(60)(THREE); + + EGS_ElementView = (function(superClass) { + extend(EGS_ElementView, superClass); + + function EGS_ElementView() { + return EGS_ElementView.__super__.constructor.apply(this, arguments); + } + + EGS_ElementView.prototype.parent = null; + + EGS_ElementView.prototype.mesh = null; + + EGS_ElementView.prototype.color = null; + + EGS_ElementView.prototype.display = null; + + EGS_ElementView.prototype.parseNum = function(text) { + var color, j, len, list, ptt, t1, t2, tt; + if (!text) { + return []; + } + list = []; + t1 = String(text).split(','); + for (j = 0, len = t1.length; j < len; j++) { + t2 = t1[j]; + tt = t2.split(':'); + ptt = tt[0].split('-'); + color = tt.length === 2 ? tt[1] : null; + if (ptt[0] === '') { + ptt[0] = null; + } + if (ptt.length === 1) { + ptt[1] = ptt[0]; + } + if (ptt[1] === '') { + ptt[1] = null; + } + if (ptt[0] >= 0) { + list.push([ptt[0], ptt[1], color]); + } + } + return list; + }; + + EGS_ElementView.prototype.initialize = function(options) { + var d, i, j, k, len, len1, ref, ref1, results; + this.parent = options.parent; + this.model.geometry.computeBoundingBox(); + this.color = this.parent.getAndStoreColor(this.model.get('color')); + this.mesh = new THREE.Mesh(this.model.geometry, this.color); + this.mesh.visible = false; + this.display = []; + ref = this.parseNum(this.model.get('show')); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + d = ref[j]; + ref1 = [0, 1]; + for (k = 0, len1 = ref1.length; k < len1; k++) { + i = ref1[k]; + if (d[i] !== null) { + d[i] = parseInt(d[i]); + this.parent.steps.push(d[i]); + } + } + d[2] = d[2] === null ? this.color : this.parent.getAndStoreColor(d[2]); + results.push(this.display.push(d)); + } + return results; + }; + + EGS_ElementView.prototype.getMesh = function() { + return this.mesh; + }; + + EGS_ElementView.prototype.setStep = function(step) { + var i, show; + show = null; + for (i in this.display) { + if (this.display[i][0] !== null && this.display[i][1] !== null) { + if (step >= this.display[i][0] && step <= this.display[i][1]) { + show = this.display[i][2]; + } + } else if (this.display[i][0] !== null) { + if (step >= this.display[i][0]) { + show = this.display[i][2]; + } + } else if (this.display[i][1] !== null) { + if (step <= this.display[i][1]) { + show = this.display[i][2]; + } + } + } + this.mesh.visible = show !== null; + return this.mesh.material = show ? show : this.color; + }; + + return EGS_ElementView; + + })(Backbone.View); + + Display = (function() { + Display.prototype.center = new THREE.Vector3(); + + Display.prototype.bbox = new THREE.Box3(); + + Display.prototype.startTime = null; + + Display.prototype.turnRate = 0; + + Display.prototype.turnOffset = 0; + + Display.prototype.camDistance = 0; + + Display.prototype.camDistanceOffset = 0; + + Display.prototype.camHeight = 0; + + Display.prototype.camHeightOffset = 0; + + Display.prototype.scene = null; + + Display.prototype.renderer = null; + + Display.prototype.camera = null; + + Display.prototype.controls = null; + + Display.prototype.animationRequest = null; + + Display.prototype._addRenderer = function(domElementID) { + var canvas, hasWebGL; + hasWebGL = false; + try { + canvas = document.createElement('canvas'); + hasWebGL = !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl'))); + } catch (error) {} + if (hasWebGL) { + this.renderer = new THREE.WebGLRenderer({ + antialias: true + }); + } else { + this.renderer = new THREE.CanvasRenderer(); + } + this.renderer.setPixelRatio(window.devicePixelRatio); + this.renderer.setSize(window.innerWidth, window.innerHeight); + return document.getElementById(domElementID).appendChild(this.renderer.domElement); + }; + + Display.prototype._addLights = function() { + var dirLight, hemiLight; + hemiLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.6); + hemiLight.color.setHSL(0.6, 1, 0.6); + hemiLight.groundColor.setHSL(0.095, 1, 0.75); + hemiLight.position.set(0, 500, 0); + this.scene.add(hemiLight); + dirLight = new THREE.DirectionalLight(0xffffff, 1); + dirLight.color.setHSL(0.1, 1, 0.95); + dirLight.position.set(-5000, 10000, -5000); + dirLight.position.multiplyScalar(50); + return this.scene.add(dirLight); + }; + + Display.prototype._addCamera = function() { + var height, width; + width = window.innerWidth; + height = window.innerHeight; + return this.camera = new THREE.PerspectiveCamera(70, width / height, 1, 200000); + }; + + Display.prototype._addControls = function() { + this.controls = new OrbitControls(this.camera, this.renderer.domElement); + this.controls.zoomSpeed = .3; + return this.controls.rotateSpeed = .3; + }; + + Display.prototype.onWindowResize = function() { + var h, style, w; + if (!this.camera) { + return; + } + style = getComputedStyle(document.getElementById(this.domElementID), null); + w = parseInt(style.getPropertyValue('width')); + h = parseInt(style.getPropertyValue('height')); + this.camera.aspect = w / h; + this.camera.updateProjectionMatrix(); + return this.renderer.setSize(w, h); + }; + + Display.prototype._animationStart = function() { + if (!this.scene) { + return; + } + if (!this.animationRequest) { + return this._animationFrame(); + } + }; + + Display.prototype._animationStop = function() { + if (this.animationRequest) { + window.cancelAnimationFrame(this.animationRequest); + } + return this.animationRequest = null; + }; + + Display.prototype._animationFrame = function() { + this.animationRequest = window.requestAnimationFrame(((function(_this) { + return function() { + return _this._animationFrame(); + }; + })(this))); + this.calcCamPos(); + return this.renderer.render(this.scene, this.camera); + }; + + function Display(domElementID1) { + this.domElementID = domElementID1; + this.onWindowResize = bind(this.onWindowResize, this); + this.scene = new THREE.Scene; + this._addRenderer(this.domElementID); + this._addLights(); + this._addCamera(); + this._addControls(); + this.onWindowResize(); + this._animationStart(); + } + + Display.prototype.resetView = function() { + var fovH, size; + this.center = this.bbox.center(); + size = this.bbox.size(); + fovH = this.camera.fov / 180 * Math.PI * 80 / 100; + this.camDistance = Math.max.apply(Math, [size.y / 2 * Math.tan(fovH) + Math.sqrt(size.x * size.x / 4 + size.z * size.z / 4), size.y / 2 * Math.tan(fovH) + size.z / 2, size.y / 2 * Math.tan(fovH) + size.x / 2, size.x / 2 * Math.tan(fovH) / this.camera.aspect + size.z / 2, size.z / 2 * Math.tan(fovH) / this.camera.aspect + size.x / 2]); + this.camHeight = this.center.y; + return this.controls.target.copy(this.center); + }; + + Display.prototype.removeAll = function() { + while (this.scene.children.length) { + this.scene.remove(this.scene.children[0]); + } + this._addLights(); + return this.bbox = new THREE.Box3(); + }; + + Display.prototype.add = function(element) { + this.scene.add(element.getMesh()); + this.bbox.union(element.model.geometry.boundingBox); + return this.resetView(); + }; + + Display.prototype.setTurnRate = function(rate) { + var delta; + delta = (Date.now()) - this.startTime; + this.turnOffset = this.turnOffset + delta / (60000 / this.turnRate); + this.startTime = Date.now(); + this.controls.enableZoom = rate === 0; + this.controls.enablePan = rate === 0; + this.controls.enableRotate = rate === 0; + this.turnRate = rate; + return this.calcCamPos(true); + }; + + Display.prototype.setHeight = function(height, relation) { + return this.camHeight = (function() { + switch (relation) { + case "abs": + return 10 * height; + case "incr": + return this.camHeight + 10 * height; + case "rel": + return 2 * this.center.y * height; + default: + return this.camHeight; + } + }).call(this); + }; + + Display.prototype.calcCamPos = function(override) { + var delta, turnIndex; + if (override) { + turnIndex = this.turnOffset; + } else { + if (this.turnRate === 0) { + return; + } + delta = (Date.now()) - this.startTime; + turnIndex = this.turnOffset + delta / (60000 / this.turnRate); + } + this.camera.position.x = this.center.x + Math.sin(2 * Math.PI * turnIndex) * (this.camDistance + this.camDistanceOffset); + this.camera.position.y = this.camHeight; + this.camera.position.z = this.center.z + Math.cos(2 * Math.PI * turnIndex) * (this.camDistance + this.camDistanceOffset); + return this.camera.lookAt(this.center); + }; + + return Display; + + })(); + + EGS_View = (function(superClass) { + var _hexToRGB, colorTable; + + extend(EGS_View, superClass); + + EGS_View.prototype.elements = []; + + EGS_View.prototype.steps = []; + + EGS_View.prototype.stepNo = 0; + + colorTable = []; + + EGS_View.prototype.setTurnRate = function(rate) { + return this.display.setTurnRate(Math.max(0, rate)); + }; + + EGS_View.prototype.setHeight = function(height, relation) { + return this.display.setHeight(height, relation); + }; + + EGS_View.prototype.resetView = function() { + return this.display.resetView(); + }; + + function EGS_View(app, domElementID1) { + this.app = app; + this.domElementID = domElementID1; + this.display = new Display(this.domElementID); + } + + EGS_View.prototype.showConstruct = function(construction) { + var e, j, len, ref; + this.elements = []; + this.steps = []; + construction.get('elements').each((function(_this) { + return function(e) { + return _this.elements.push(new EGS_ElementView({ + model: e, + parent: _this + })); + }; + })(this)); + this.steps = this.steps.filter(function(v, i, x) { + return i === x.indexOf(v); + }); + this.steps.sort(function(a, b) { + return a - b; + }); + this.app.view.SecondaryNav.setSteps(this.steps); + this.display.removeAll(); + ref = this.elements; + for (j = 0, len = ref.length; j < len; j++) { + e = ref[j]; + this.display.add(e); + } + return this.updateConstruct(this.stepNo); + }; + + EGS_View.prototype.updateConstruct = function(step) { + var e, j, len, ref; + this.stepNo = step; + ref = this.elements; + for (j = 0, len = ref.length; j < len; j++) { + e = ref[j]; + e.setStep(parseInt(this.steps[this.stepNo])); + } + return this.render(); + }; + + _hexToRGB = function(hex) { + var r, rs; + r = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + rs = /^#?([a-f\d])([a-f\d])([a-f\d])$/i.exec(hex); + if (r) { + return (parseInt(r[1], 16) << 16) + (parseInt(r[2], 16) << 8) + parseInt(r[3], 16); + } + if (rs) { + return ((parseInt(rs[1], 16) * 17) << 16) + ((parseInt(rs[2], 16) * 17) << 8) + (parseInt(rs[3], 16) * 17); + } + return 0x888888; + }; + + EGS_View.prototype.getAndStoreColor = function(val) { + if (colorTable[val] == null) { + colorTable[val] = new THREE.MeshPhongMaterial({ + color: _hexToRGB(val), + emissive: 0x000000, + specular: 0x000000, + shininess: 30 + }); + } + return colorTable[val]; + }; + + return EGS_View; + + })(Backbone.View); + + module.exports = EGS_View; + + +/***/ }), +/* 59 */, +/* 60 */, +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, ConstructionList, DataSource, keyNormalizer, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Backbone = __webpack_require__(54); + + ConstructionList = __webpack_require__(62); + + keyNormalizer = __webpack_require__(66); + + module.exports = DataSource = (function(superClass) { + extend(DataSource, superClass); + + function DataSource() { + return DataSource.__super__.constructor.apply(this, arguments); + } + + DataSource.prototype.app = null; + + DataSource.prototype.fetched = false; + + DataSource.prototype.dataTable = null; + + DataSource.prototype.columns = { + sheet: "Blatt-Link (gid)", + name: "Konstruktion", + desc: "Beschreibung" + }; + + DataSource.prototype.idAttribute = "source"; + + DataSource.prototype.initialize = function(attributes, options) { + this.app = options.collection.app; + return this.set('constructions', new ConstructionList([], { + app: this.app + })); + }; + + DataSource.prototype.setSelected = function(cb) { + this.collection.setSelected(this); + if (!this.fetched) { + return this.fetch({ + success: (function(_this) { + return function() { + _this.fetched = true; + if (cb) { + return cb(_this); + } + }; + })(this) + }); + } else { + if (cb) { + return cb(this); + } + } + }; + + DataSource.prototype.set = function(attr, opts) { + if (attr.source) { + attr.source = keyNormalizer(attr.source).join('/'); + } + return Backbone.Model.prototype.set.call(this, attr, opts); + }; + + DataSource.prototype.parse = function(resp) { + var c, d, data, firstDataRow, i, importer, isConstructTable, j, k, r, ref, ref1, ref2; + this.dataTable = resp.getDataTable(); + firstDataRow = this.dataTable.getColumnLabel(0).length ? 0 : 1; + isConstructTable = firstDataRow === 0; + for (k in this.columns) { + if (this.columns[k] === this.dataTable.getColumnLabel(0)) { + isConstructTable = false; + } + } + if (isConstructTable) { + return { + constructions: new ConstructionList([ + { + name: "Konstruktion", + desc: "", + sheet: this.id + } + ]) + }; + } + data = []; + for (r = i = ref = firstDataRow, ref1 = this.dataTable.getNumberOfRows(); ref <= ref1 ? i < ref1 : i > ref1; r = ref <= ref1 ? ++i : --i) { + d = {}; + for (k in this.columns) { + importer = function(v) { + return v; + }; + if (k === "sheet") { + importer = (function(_this) { + return function(v) { + return [_this.id, keyNormalizer(v, false, _this.id).join('/')].join('/'); + }; + })(this); + } + for (c = j = 0, ref2 = this.dataTable.getNumberOfColumns(); 0 <= ref2 ? j < ref2 : j > ref2; c = 0 <= ref2 ? ++j : --j) { + if ((firstDataRow && this.dataTable.getValue(0, c) === this.columns[k]) || this.dataTable.getColumnLabel(c) === this.columns[k]) { + d[k] = importer(this.dataTable.getValue(r, c)); + } + } + if (!d[k]) { + alert("Übersichtstabelle: Spalte '" + this.columns[k] + "' wurde nicht in der Tabelle gefunden!"); + return; + } + } + data.push(d); + } + console.log("DataSource: loaded construction list: ", data); + return { + constructions: new ConstructionList(data, { + app: this.app + }) + }; + }; + + return DataSource; + + })(Backbone.Model); + + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, Construction, ConstructionList, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Backbone = __webpack_require__(54); + + Construction = __webpack_require__(63); + + module.exports = ConstructionList = (function(superClass) { + extend(ConstructionList, superClass); + + function ConstructionList() { + return ConstructionList.__super__.constructor.apply(this, arguments); + } + + ConstructionList.prototype.app = null; + + ConstructionList.prototype.model = Construction; + + ConstructionList.prototype.selected = null; + + ConstructionList.prototype.setSelected = function(ds) { + console.log("CL select: ", ds, this.selected); + if (ds === this.selected) { + return; + } + if (this.selected) { + this.trigger("unselect", this.selected); + } + this.selected = ds; + console.log("CL triggered select"); + this.trigger("select", this.selected); + if (this.selected.fetched) { + return this.trigger("sync"); + } + }; + + ConstructionList.prototype.initialize = function(models, options) { + return this.app = options.app; + }; + + return ConstructionList; + + })(Backbone.Collection); + + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, ElementList, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Backbone = __webpack_require__(54); + + ElementList = __webpack_require__(64); + + module.exports = (function(superClass) { + extend(_Class, superClass); + + function _Class() { + return _Class.__super__.constructor.apply(this, arguments); + } + + _Class.prototype.dataTable = null; + + _Class.prototype.fetched = false; + + _Class.prototype.fields = { + show: { + name: "Anzeige" + }, + color: { + name: "Farbe" + }, + element: { + name: "Bauteil" + }, + x: { + name: "X" + }, + y: { + name: "Y" + }, + h: { + name: "H" + }, + direction: { + name: "Richtung" + }, + special: { + name: "Besonderheit" + } + }; + + _Class.prototype.determineColumn = function(label) { + if (/^\s?(Element|Bauteil)\s$/i.test(label)) { + return 'element'; + } + if (/^\s?(Richtung)\s?$/i.test(label)) { + return 'direction'; + } + if (/^\s?(Besonderheit)\s(.*)?$/i.test(label)) { + return 'special'; + } + if (/^(Anzeige\s)?(Anzeige)$/i.test(label)) { + return 'show'; + } + if (/^(Position)?\s?(X)$/i.test(label)) { + return 'x'; + } + if (/^(Position)?\s?(Y)$/i.test(label)) { + return 'y'; + } + if (/^(Position)?\s?(H)$/i.test(label)) { + return 'h'; + } + if (/^(Anzeige)?\s?(Farbe)$/i.test(label)) { + return 'color'; + } + return null; + }; + + _Class.prototype.idAttribute = "sheet"; + + _Class.prototype.initialize = function(attributes, options) { + this.app = options.collection.app; + return this.elements = new ElementList([], { + app: this.app + }); + }; + + _Class.prototype.setSelected = function(cb) { + this.collection.setSelected(this); + if (!this.fetched) { + return this.fetch({ + success: (function(_this) { + return function() { + _this.fetched = true; + if (cb) { + return cb(_this); + } + }; + })(this) + }); + } else { + if (cb) { + return cb(this); + } + } + }; + + _Class.prototype.parse = function(resp) { + var c, colTypes, cols, cv, d, data, i, j, k, key, r, ref, ref1, ref2; + this.dataTable = resp.getDataTable(); + cols = {}; + colTypes = {}; + for (c = j = 0, ref = this.dataTable.getNumberOfColumns(); 0 <= ref ? j < ref : j > ref; c = 0 <= ref ? ++j : --j) { + cv = this.determineColumn(this.dataTable.getColumnLabel(c)); + if (cv) { + cols[cv] = c; + colTypes[cv] = true; + } + } + ref1 = this.fields; + for (i in ref1) { + c = ref1[i]; + if (colTypes[i] == null) { + console.log("Spalte '" + c.name + "' nicht gefunden!"); + return; + } + } + data = []; + for (r = k = 0, ref2 = this.dataTable.getNumberOfRows(); 0 <= ref2 ? k < ref2 : k > ref2; r = 0 <= ref2 ? ++k : --k) { + d = {}; + for (key in cols) { + c = cols[key]; + d[key] = this.dataTable.getValue(r, c); + } + data.push(d); + } + console.log("Construction: loaded element list: ", data); + return { + elements: new ElementList(data, { + app: this.app + }) + }; + }; + + return _Class; + + })(Backbone.Model); + + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, ConstructionElement, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Backbone = __webpack_require__(54); + + ConstructionElement = __webpack_require__(65); + + module.exports = (function(superClass) { + extend(_Class, superClass); + + function _Class() { + return _Class.__super__.constructor.apply(this, arguments); + } + + _Class.prototype.model = ConstructionElement; + + _Class.prototype.initialize = function(models, options) { + return this.app = options.app; + }; + + return _Class; + + })(Backbone.Collection); + + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Backbone = __webpack_require__(54); + + module.exports = (function(superClass) { + extend(_Class, superClass); + + function _Class() { + return _Class.__super__.constructor.apply(this, arguments); + } + + _Class.prototype.app = null; + + _Class.prototype.geometry = null; + + _Class.prototype.initialize = function(attributes, options) { + _Class.__super__.initialize.call(this, attributes, options); + this.app = options.collection.app; + return this.geometry = this.app.egsElementProvider.getGeometry(this); + }; + + return _Class; + + })(Backbone.Model); + + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + + module.exports = function(someKey, silent, parent) { + var gid, match, reg; + if (silent == null) { + silent = false; + } + if (parent == null) { + parent = null; + } + reg = new RegExp('spreadsheets\/d\/([^\/]+)[^#]*(?:#.*gid=([0-9]+).*)?'); + match = reg.exec(someKey); + if (match) { + if (match[2]) { + gid = match[2]; + } + return [match[1], gid]; + } + reg = new RegExp('([0-9]+)'); + match = reg.exec(someKey); + if (match && parent) { + parent = parent.split('/'); + if (match[1]) { + gid = match[1]; + } + return [parent[0], gid]; + } + reg = new RegExp('([^\/]+)(?:\/([0-9]+))?'); + match = reg.exec(someKey); + if (match) { + if (match[2]) { + gid = match[2]; + } + return [match[1], gid]; + } + if (silent) { + return false; + } + alert("Ungültige Datenquelle: In '" + someKey + "' konnte nicht der Tabellen-Key gefunden werden!"); + return ["", 0]; + }; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, DataSource, DataSourceList, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Backbone = __webpack_require__(54); + + DataSource = __webpack_require__(61); + + module.exports = DataSourceList = (function(superClass) { + extend(DataSourceList, superClass); + + function DataSourceList() { + return DataSourceList.__super__.constructor.apply(this, arguments); + } + + DataSourceList.prototype.app = null; + + DataSourceList.prototype.model = DataSource; + + DataSourceList.prototype.selected = null; + + DataSourceList.prototype.setSelected = function(ds) { + if (ds === this.selected) { + return; + } + if (this.selected) { + this.trigger("unselect", this.selected); + } + this.selected = ds; + this.trigger("select", this.selected); + if (this.selected.fetched) { + return this.trigger("sync"); + } + }; + + DataSourceList.prototype.initialize = function(models, options) { + this.app = options.app; + return console.log("init DataSourceList", this.app); + }; + + return DataSourceList; + + })(Backbone.Collection); + + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + + var EGS_Elements, THREE, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + THREE = __webpack_require__(59); + + __webpack_require__(69); + + THREE.ThreadCurve = (function(superClass) { + extend(ThreadCurve, superClass); + + function ThreadCurve(height, pitch, radius) { + this.height = height; + this.pitch = pitch; + this.radius = radius; + ThreadCurve.__super__.constructor.call(this); + } + + ThreadCurve.prototype.getPoint = function(t) { + t = t * this.height / this.pitch; + return new THREE.Vector3(this.radius * Math.cos(2 * Math.PI * (t - Math.floor(t))), this.radius * Math.sin(2 * Math.PI * (t - Math.floor(t))), t * this.pitch); + }; + + return ThreadCurve; + + })(THREE.Curve); + + THREE.CustomGeometry = (function(superClass) { + extend(CustomGeometry, superClass); + + CustomGeometry.prototype.calcUVs = function() { + var faces, i, j, max, min, offset, range, ref, v1, v2, v3; + this.computeBoundingBox(); + max = this.boundingBox.max; + min = this.boundingBox.min; + offset = new THREE.Vector2(0 - min.x, 0 - min.y); + range = new THREE.Vector2(max.x - min.x, max.y - min.y); + this.faceVertexUvs[0] = []; + faces = this.faces; + for (i = j = 0, ref = this.faces.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + v1 = this.vertices[this.faces[i].a]; + v2 = this.vertices[this.faces[i].b]; + v3 = this.vertices[this.faces[i].c]; + this.faceVertexUvs[0].push([new THREE.Vector2((v1.x + offset.x) / range.x, (v1.y + offset.y) / range.y), new THREE.Vector2((v2.x + offset.x) / range.x, (v2.y + offset.y) / range.y), new THREE.Vector2((v3.x + offset.x) / range.x, (v3.y + offset.y) / range.y)]); + } + return this.uvsNeedUpdate = true; + }; + + function CustomGeometry(vertices, faces) { + var f, j, k, len, len1, v; + CustomGeometry.__super__.constructor.call(this); + for (j = 0, len = vertices.length; j < len; j++) { + v = vertices[j]; + this.vertices.push(new THREE.Vector3(v[0], v[1], v[2])); + } + for (k = 0, len1 = faces.length; k < len1; k++) { + f = faces[k]; + this.faces.push(new THREE.Face3(f[0], f[1], f[2])); + } + this.computeBoundingSphere(); + this.computeFaceNormals(); + this.computeVertexNormals(); + this.calcUVs(); + } + + return CustomGeometry; + + })(THREE.Geometry); + + EGS_Elements = (function() { + var AnfSt, BX, D180, D360, D90, DETAIL, DRX, FX, HV, RX, RohrDurchmesserAussen, RohrDurchmesserInnen, TellerDurchmesser, TellerHoehe, VDX, VX, X, Y, Z, _AnfStk, _Belag, _DoppelRiegel, _Riegel, _VertikalDiagonale, _VertikalStiel, _barToCircle, _belagKlammer, _belagRahmen, _cylinder, _cylinderPath, _haengegeruestVerbinder, _keilKupplungDiagonale, _keilKupplungRiegel, _m, _rohr, _rohrverbinder, _teller, _threadCyl; + + DETAIL = 8; + + D90 = .5 * Math.PI; + + D180 = Math.PI; + + D360 = 2 * Math.PI; + + X = new THREE.Vector3(1, 0, 0); + + Y = new THREE.Vector3(0, 1, 0); + + Z = new THREE.Vector3(0, 0, 1); + + TellerDurchmesser = 123.6; + + RohrDurchmesserAussen = 48.3; + + RohrDurchmesserInnen = 45.1; + + TellerHoehe = 9; + + _m = function(x, y, z, A, n) { + var m; + m = (new THREE.Matrix4()).makeTranslation(x, y, z); + if (A === 'X') { + m.multiply((new THREE.Matrix4()).makeRotationX(n * D90)); + } + if (A === 'Y') { + m.multiply((new THREE.Matrix4()).makeRotationY(n * D90)); + } + if (A === 'Z') { + m.multiply((new THREE.Matrix4()).makeRotationZ(n * D90)); + } + return m; + }; + + _barToCircle = function(x, y, l, r) { + var circle, vert; + circle = new THREE.CircleGeometry(r, DETAIL); + vert = circle.vertices; + vert.push(new THREE.Vector3(x / 2, y / 2, l)); + vert.push(new THREE.Vector3(-x / 2, y / 2, l)); + vert.push(new THREE.Vector3(-x / 2, -y / 2, l)); + vert.push(new THREE.Vector3(x / 2, -y / 2, l)); + return new THREE.ConvexGeometry(vert); + }; + + _cylinder = function(o, i, h) { + var hole, shape; + shape = new THREE.Shape(); + shape.absarc(0, 0, o / 2, 0, D360, true); + if (i) { + hole = new THREE.Path(); + hole.absarc(0, 0, i / 2, 0, D360, true); + shape.holes.push(hole); + } + return shape.extrude({ + amount: h, + steps: 1, + bevelEnabled: false, + curveSegments: DETAIL + }); + }; + + _cylinderPath = function(o, i, p) { + var hole, shape; + shape = new THREE.Shape(); + shape.absarc(0, 0, o / 2, 0, D360, true); + if (i) { + hole = new THREE.Path(); + hole.absarc(0, 0, i / 2, 0, D360, true); + shape.holes.push(hole); + } + return shape.extrude({ + steps: 10, + extrudePath: p + }); + }; + + _threadCyl = function(h) { + var cyl, hole, i, o, shape, thread; + if (DETAIL >= 16) { + o = 13; + i = 8; + } else { + o = 18; + i = 15; + } + shape = new THREE.Shape(); + shape.absarc(0, 0, o, 0, D360, true); + if (i) { + hole = new THREE.Path(); + hole.absarc(0, 0, i, 0, D360, true); + shape.holes.push(hole); + } + cyl = shape.extrude({ + amount: h, + steps: 1, + bevelEnabled: false, + curveSegments: DETAIL + }); + if (DETAIL >= 16) { + h -= 10; + thread = new THREE.TubeGeometry(new THREE.ThreadCurve(h, 10, 13), DETAIL * h / 10, 4); + cyl.merge(thread, _m(0, 0, 5)); + } + return cyl; + }; + + _rohr = function(length) { + return _cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, length); + }; + + _AnfStk = function() { + var a; + a = new THREE.Geometry(); + a.merge(_rohr(165), _m(0, 0, -65)); + a.merge(_teller()); + a.merge(_cylinder(55, 49, 170), _m(0, 0, 95)); + a.applyMatrix(_m(0, 0, 0, 'X', -1)); + return a; + }; + + _belagKlammer = function(x) { + var bk, d1, d2, shape, z; + shape = new THREE.Shape(); + z = 30; + d1 = 25; + d2 = 33; + shape.moveTo(0, 0); + shape.lineTo(30, 0); + shape.arc(25, 0, d1, 0, Math.PI); + shape.lineTo(17 + d2 + d2, 0); + shape.arc(-33, 0, d2, Math.PI * .7, 0); + shape.lineTo(30, 35); + shape.lineTo(0, 35); + shape.lineTo(0, 0); + bk = shape.extrude({ + amount: 40, + steps: 1, + bevelEnabled: false, + curveSegments: DETAIL + }); + bk.applyMatrix(_m(x, 0, 55, 'Y', 1)); + return bk; + }; + + _belagRahmen = function(l, b) { + var faces, o, vertices; + o = 50; + vertices = [[0, 45, o], [b, 45, o], [b, 45, l - o], [0, 45, l - o], [0, -30, o], [b, -30, o], [b, -30, l - o], [0, -30, l - o], [5, -30, o + 5], [b - 5, -30, o + 5], [b - 5, -30, l - o - 5], [5, -30, l - o - 5], [5, 40, o + 5], [b - 5, 40, o + 5], [b - 5, 40, l - o - 5], [5, 40, l - o - 5]]; + faces = [[0, 2, 1], [0, 3, 2], [12, 13, 14], [12, 14, 15], [0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7], [4, 5, 9], [4, 9, 8], [5, 6, 10], [5, 10, 9], [6, 7, 11], [6, 11, 10], [7, 4, 8], [7, 8, 11], [8, 9, 13], [8, 13, 12], [9, 10, 14], [9, 14, 13], [10, 11, 15], [10, 15, 14], [11, 8, 12], [11, 12, 15]]; + return new THREE.CustomGeometry(vertices, faces); + }; + + _Belag = function(l, w, x) { + var b; + if (x == null) { + x = 0; + } + b = new THREE.Geometry(); + b.merge(_belagKlammer(1), _m(60, 0, 0)); + b.merge(_belagKlammer(1), _m(w - 60, 0, 0)); + b.merge(_belagRahmen(l, w), _m(0, 0, 0)); + b.merge(_belagKlammer(1), _m(60, 0, l, 'Y', 2)); + b.merge(_belagKlammer(1), _m(w - 60, 0, l, 'Y', 2)); + b.applyMatrix(_m(55 + x, 0, 0)); + return b; + }; + + _keilKupplungDiagonale = function(d, r) { + var faces, facesD, fd, j, kkd, len, vertices, z; + if (r == null) { + r = 1; + } + z = 35; + vertices = [[25, 7, 38], [26, 0, 38], [25, -7, 38], [25, 7, 11], [26, 0, 11], [25, -7, 11], [25, 7, -1], [26, 0, -1], [25, -7, -1], [25, 7, -35], [26, 0, -35], [25, -7, -35], [65, 12, 24], [65, -12, 24], [65, 22, 11], [65, -22, 11], [65, 22, -1], [65, -22, -1], [65, 12, -24], [65, -12, -24], [65, 1 * r, 20], [65, 1 * r, -20], [65, 11 * r, -20], [65, 11 * r, 20], [65 + z, 1 * r + z * r, 20], [65 + z, 1 * r + z * r, -20], [65 + z - 5, 6 * r + z * r, -20], [65 + z - 5, 6 * r + z * r, 20]]; + faces = [[0, 1, 12], [1, 13, 12], [1, 2, 13], [9, 18, 10], [10, 18, 19], [10, 19, 11], [1, 0, 4], [4, 0, 3], [2, 1, 5], [5, 1, 4], [7, 6, 10], [10, 6, 9], [8, 7, 11], [11, 7, 10], [4, 3, 14], [4, 14, 15], [5, 4, 15], [6, 7, 16], [7, 17, 16], [7, 8, 17], [14, 17, 15], [14, 16, 17], [14, 15, 17], [14, 17, 16], [3, 0, 14], [0, 12, 14], [16, 9, 6], [18, 9, 16], [2, 5, 15], [2, 15, 13], [17, 8, 11], [17, 11, 19], [12, 13, 14], [13, 15, 14], [16, 17, 18], [17, 19, 18]]; + facesD = [[20, 21, 25], [20, 25, 24], [22, 23, 27], [22, 27, 26], [20, 27, 23], [20, 24, 27], [21, 22, 26], [21, 26, 25], [24, 25, 26], [24, 26, 27]]; + for (j = 0, len = facesD.length; j < len; j++) { + fd = facesD[j]; + if (r > 0) { + faces.push(fd); + } else { + faces.push([fd[1], fd[0], fd[2]]); + } + } + kkd = new THREE.CustomGeometry(vertices, faces); + kkd.applyMatrix(_m(0, 0, 0, 'Z', .5 * r * d)); + return kkd; + }; + + _VertikalDiagonale = function(w, s, h) { + var bohrAbstand, degree, offset, r, vd; + if (s == null) { + s = 1; + } + if (h == null) { + h = 2000; + } + vd = new THREE.Geometry(); + r = new THREE.Geometry(); + s *= -1; + bohrAbstand = Math.sqrt(Math.pow(w - 155, 2) + Math.pow(h, 2)); + degree = Math.atan2(w - 155, h); + vd.merge(_keilKupplungDiagonale(-1, 1 * s)); + vd.merge(_keilKupplungDiagonale(-1, -1 * s), _m(w, 0, h, 'Z', 2)); + offset = s > 0 ? 14 : 7; + r.merge(new THREE.BoxGeometry(35, 10, 60), _m(0, 0, 10)); + r.merge(_cylinder(16, 0, 21), _m(0, offset, 0, 'X', 1)); + r.merge(_barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m(0, 0, 110, 'X', 2)); + r.merge(_cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, bohrAbstand - 220), _m(0, 0, 110)); + r.merge(_barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m(0, 0, bohrAbstand - 110)); + r.merge(new THREE.BoxGeometry(35, 10, 60), _m(0, 0, bohrAbstand - 10)); + r.merge(_cylinder(16, 0, 21), _m(0, offset, bohrAbstand, 'X', 1)); + vd.merge(r, _m(77.5, -50 * s, 0, 'Y', degree / D90)); + return vd; + }; + + _keilKupplungRiegel = function() { + var faces, vertices; + vertices = [[25, 7, 38], [26, 0, 38], [25, -7, 38], [25, 7, 11], [26, 0, 11], [25, -7, 11], [25, 7, -1], [26, 0, -1], [25, -7, -1], [25, 7, -35], [26, 0, -35], [25, -7, -35], [65, 12, 24], [65, -12, 24], [65, 22, 11], [65, -22, 11], [65, 22, -1], [65, -22, -1], [65, 12, -24], [65, -12, -24], [77, 0, 24], [77, -17, 17], [77, -24, 0], [77, -17, -17], [77, 0, -24], [77, 17, -17], [77, 24, 0], [77, 17, 17]]; + faces = [[0, 1, 12], [1, 13, 12], [1, 2, 13], [9, 18, 10], [10, 18, 19], [10, 19, 11], [1, 0, 4], [4, 0, 3], [2, 1, 5], [5, 1, 4], [7, 6, 10], [10, 6, 9], [8, 7, 11], [11, 7, 10], [4, 3, 14], [4, 14, 15], [5, 4, 15], [6, 7, 16], [7, 17, 16], [7, 8, 17], [14, 17, 15], [14, 16, 17], [3, 0, 14], [0, 12, 14], [16, 9, 6], [18, 9, 16], [2, 5, 15], [2, 15, 13], [17, 8, 11], [17, 11, 19], [20, 12, 13], [20, 13, 21], [21, 13, 15], [21, 15, 22], [22, 15, 17], [22, 17, 23], [23, 17, 19], [23, 19, 24], [24, 19, 18], [24, 18, 25], [25, 18, 16], [25, 16, 26], [26, 16, 14], [26, 14, 27], [27, 14, 12], [27, 12, 20]]; + return new THREE.CustomGeometry(vertices, faces); + }; + + _haengegeruestVerbinder = function() { + var rv; + rv = new THREE.BoxGeometry(10, 50, 550); + rv.applyMatrix(_m(82, 0, 250)); + rv.merge(_keilKupplungRiegel(), _m(0, 0, 0)); + rv.merge(_keilKupplungRiegel(), _m(0, 0, 500)); + rv.applyMatrix(_m(0, 0, 0, 'X', -1)); + return rv; + }; + + _Riegel = function(l) { + var r; + r = _cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150); + r.applyMatrix(_m(75, 0, 0, 'Y', 1)); + r.merge(_keilKupplungRiegel()); + r.merge(_keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2)); + r.applyMatrix(_m(0, 0, 0, 'X', -1)); + return r; + }; + + _DoppelRiegel = function(l) { + var f, i, j, p, r, r2, ref; + r = _cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150); + r.applyMatrix(_m(75, 0, 0, 'Y', 1)); + r.merge(_keilKupplungRiegel()); + r.merge(_keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2)); + p = new THREE.CurvePath(); + p.add(new THREE.LineCurve3(new THREE.Vector3(0, 0, 0), new THREE.Vector3(200, 100, 0))); + p.add(new THREE.LineCurve3(new THREE.Vector3(200, 100, 0), new THREE.Vector3(l - 350, 100, 0))); + p.add(new THREE.LineCurve3(new THREE.Vector3(l - 350, 100, 0), new THREE.Vector3(l - 150, 0, 0))); + r2 = _cylinderPath(RohrDurchmesserAussen * .6, RohrDurchmesserInnen * .6, p); + r2.applyMatrix(_m(75, 0, 0, 'X', -1)); + r.merge(r2); + for (i = j = 500, ref = l - 1; j <= ref; i = j += 500) { + f = new THREE.BoxGeometry(100, 100, 5); + f.applyMatrix(_m(i, 0, -50, 'X', 1)); + r.merge(f); + } + r.applyMatrix(_m(0, 0, 0, 'X', -1)); + return r; + }; + + _teller = function() { + return _cylinder(TellerDurchmesser, RohrDurchmesserAussen, TellerHoehe); + }; + + _rohrverbinder = function() { + var rv; + rv = _cylinder(45, 30, 400); + rv.applyMatrix(_m(0, 0, -200)); + return rv; + }; + + _VertikalStiel = function(l, rv) { + var i, j, ref, v; + if (rv == null) { + rv = 1; + } + v = new THREE.Geometry(); + v.merge(_rohr(l), _m(0, 0, 100)); + for (i = j = 500, ref = l; j <= ref; i = j += 500) { + v.merge(_teller(), _m(0, 0, i)); + } + if (rv === 1) { + v.merge(_rohrverbinder(), _m(0, 0, l)); + } + v.applyMatrix(_m(0, 0, 0, 'X', -1)); + return v; + }; + + FX = function(l, x, y, z, o) { + var f; + f = _threadCyl(10 * l); + f.merge(new THREE.BoxGeometry(100, 100, 5)); + f.merge(new THREE.BoxGeometry(120, 40, 10), _m(0, 0, 70, 'Z', .5)); + if (parseInt(o) < 0 || (o && o[0] === 'n') || o === '-') { + f.applyMatrix(_m(10 * x, 10 * y + 175, 10 * z, 'X', 1)); + } else { + f.applyMatrix(_m(10 * x, 10 * y - 144, 10 * z, 'X', -1)); + } + return f; + }; + + VX = function(l, x, y, z, o) { + var d, j, len, ref, rv, s, v; + d = 0; + rv = 1; + if (o) { + ref = o.split(','); + for (j = 0, len = ref.length; j < len; j++) { + s = ref[j]; + if (parseInt(s) < 0 || (s && s[0] === 'n') || s === '-') { + d = 2; + } + if (s[0] === 'o') { + rv = 0; + } + } + } + v = _VertikalStiel(10 * l, rv); + v.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'X', d)); + return v; + }; + + RX = function(l, x, y, z, d) { + var r; + r = _Riegel(10 * l); + switch (d) { + case "X": + d = 0; + break; + case "Y": + d = 1; + break; + case "-X": + d = 2; + break; + case "-Y": + d = 3; + break; + default: + return; + } + r.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'Y', -d)); + return r; + }; + + DRX = function(l, x, y, z, d) { + var r; + r = _DoppelRiegel(10 * l); + switch (d) { + case "X": + d = 0; + break; + case "Y": + d = 1; + break; + case "-X": + d = 2; + break; + case "-Y": + d = 3; + break; + default: + return; + } + r.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'Y', -d)); + return r; + }; + + VDX = function(w, h, x, y, z, d, o) { + var s, vd; + s = -1; + switch (d) { + case "X": + d = 0; + break; + case "Y": + d = 1; + break; + case "-X": + d = 2; + break; + case "-Y": + d = 3; + break; + default: + return; + } + s = d === 1 || d === 2 ? 1 : -1; + if (parseInt(o) < 0 || (o && o[0] === 'n') || o === '-') { + s *= -1; + } + vd = _VertikalDiagonale(10 * w, s, 10 * h); + vd.applyMatrix(_m(0, 0, 0, 'X', -1)); + vd.applyMatrix(_m(0, 0, 0, 'Y', -d)); + vd.applyMatrix(_m(10 * x, 10 * y, 10 * z)); + return vd; + }; + + BX = function(l, x, y, z, d, s) { + var b, bl, j, len, o, ref, w; + bl = new THREE.Geometry(); + s = s.split('/'); + o = 0; + w = s[0]; + if (s.length >= 2 && parseInt(s[1])) { + o = parseInt(s[1]); + } + ref = w.split(','); + for (j = 0, len = ref.length; j < len; j++) { + b = ref[j]; + bl.merge(_Belag(10 * l, 10 * b, o)); + o += 10 * b + 5; + } + switch (d) { + case "X": + bl.applyMatrix(_m(10 * x + 10 * l, 10 * y, 10 * z, 'Y', -1)); + break; + case "Y": + bl.applyMatrix(_m(10 * x, 10 * y, 10 * z)); + break; + case "-X": + bl.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'Y', 1)); + break; + case "-Y": + bl.applyMatrix(_m(10 * x, 10 * y, 10 * z + 10 * l, 'Y', 2)); + } + return bl; + }; + + HV = function(x, h, z, d) { + var hv; + hv = _haengegeruestVerbinder(); + switch (d) { + case "X": + d = 0; + break; + case "Y": + d = 1; + break; + case "-X": + d = 2; + break; + case "-Y": + d = 3; + break; + default: + return; + } + hv.applyMatrix(_m(10 * x, 10 * h, 10 * z, 'Y', -d)); + return hv; + }; + + AnfSt = function(x, h, z) { + var a; + a = _AnfStk(); + a.applyMatrix(_m(10 * x, 10 * h, 10 * z)); + return a; + }; + + function EGS_Elements() { + console.log("EGS_Elements constructed"); + } + + EGS_Elements.prototype.getGeometry = function(element) { + var d, h, n, s, x, z; + n = element.get('element'); + x = element.get('x'); + z = element.get('y'); + h = element.get('h'); + d = element.get('direction'); + s = element.get('special'); + switch (n) { + case "AnfSt": + return AnfSt(x, h, z); + case "V50": + return VX(50, x, h, z, s); + case "V100": + return VX(100, x, h, z, s); + case "V150": + return VX(150, x, h, z, s); + case "V200": + return VX(200, x, h, z, s); + case "V300": + return VX(300, x, h, z, s); + case "V400": + return VX(400, x, h, z, s); + case "R25": + return RX(25, x, h, z, d); + case "R50": + return RX(50, x, h, z, d); + case "R100": + return RX(100, x, h, z, d); + case "R200": + return RX(200, x, h, z, d); + case "R300": + return RX(300, x, h, z, d); + case "DR100": + return DRX(100, x, h, z, d); + case "DR200": + return DRX(200, x, h, z, d); + case "DR300": + return DRX(300, x, h, z, d); + case "D100": + return VDX(100, 200, x, h, z, d, s); + case "D150": + return VDX(150, 200, x, h, z, d, s); + case "D200": + return VDX(200, 200, x, h, z, d, s); + case "D300": + return VDX(300, 200, x, h, z, d, s); + case "DS200": + return VDX(200, 100, x, h, z, d, s); + case "F40": + return FX(40, x, h, z, s); + case "F60": + return FX(40, x, h, z, s); + case "B100": + return BX(100, x, h, z, d, s); + case "B200": + return BX(200, x, h, z, d, s); + case "B300": + return BX(300, x, h, z, d, s); + case "HV": + return HV(x, h, z, d); + default: + return new THREE.Geometry(); + } + }; + + return EGS_Elements; + + })(); + + module.exports = EGS_Elements; + + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(THREE) {/** + * @author qiao / https://github.com/qiao + * @fileoverview This is a convex hull generator using the incremental method. + * The complexity is O(n^2) where n is the number of vertices. + * O(nlogn) algorithms do exist, but they are much more complicated. + * + * Benchmark: + * + * Platform: CPU: P7350 @2.00GHz Engine: V8 + * + * Num Vertices Time(ms) + * + * 10 1 + * 20 3 + * 30 19 + * 40 48 + * 50 107 + */ + + THREE.ConvexGeometry = function( vertices ) { + + THREE.Geometry.call( this ); + + var faces = [ [ 0, 1, 2 ], [ 0, 2, 1 ] ]; + + for ( var i = 3; i < vertices.length; i++ ) { + + addPoint( i ); + + } + + + function addPoint( vertexId ) { + + var vertex = vertices[ vertexId ].clone(); + + var mag = vertex.length(); + vertex.x += mag * randomOffset(); + vertex.y += mag * randomOffset(); + vertex.z += mag * randomOffset(); + + var hole = []; + + for ( var f = 0; f < faces.length; ) { + + var face = faces[ f ]; + + // for each face, if the vertex can see it, + // then we try to add the face's edges into the hole. + if ( visible( face, vertex ) ) { + + for ( var e = 0; e < 3; e++ ) { + + var edge = [ face[ e ], face[ ( e + 1 ) % 3 ] ]; + var boundary = true; + + // remove duplicated edges. + for ( var h = 0; h < hole.length; h++ ) { + + if ( equalEdge( hole[ h ], edge ) ) { + + hole[ h ] = hole[ hole.length - 1 ]; + hole.pop(); + boundary = false; + break; + + } + + } + + if ( boundary ) { + + hole.push( edge ); + + } + + } + + // remove faces[ f ] + faces[ f ] = faces[ faces.length - 1 ]; + faces.pop(); + + } else { // not visible + + f++; + + } + } + + // construct the new faces formed by the edges of the hole and the vertex + for ( var h = 0; h < hole.length; h++ ) { + + faces.push( [ + hole[ h ][ 0 ], + hole[ h ][ 1 ], + vertexId + ] ); + + } + } + + /** + * Whether the face is visible from the vertex + */ + function visible( face, vertex ) { + + var va = vertices[ face[ 0 ] ]; + var vb = vertices[ face[ 1 ] ]; + var vc = vertices[ face[ 2 ] ]; + + var n = normal( va, vb, vc ); + + // distance from face to origin + var dist = n.dot( va ); + + return n.dot( vertex ) >= dist; + + } + + /** + * Face normal + */ + function normal( va, vb, vc ) { + + var cb = new THREE.Vector3(); + var ab = new THREE.Vector3(); + + cb.subVectors( vc, vb ); + ab.subVectors( va, vb ); + cb.cross( ab ); + + cb.normalize(); + + return cb; + + } + + /** + * Detect whether two edges are equal. + * Note that when constructing the convex hull, two same edges can only + * be of the negative direction. + */ + function equalEdge( ea, eb ) { + + return ea[ 0 ] === eb[ 1 ] && ea[ 1 ] === eb[ 0 ]; + + } + + /** + * Create a random offset between -1e-6 and 1e-6. + */ + function randomOffset() { + + return ( Math.random() - 0.5 ) * 2 * 1e-6; + + } + + + /** + * XXX: Not sure if this is the correct approach. Need someone to review. + */ + function vertexUv( vertex ) { + + var mag = vertex.length(); + return new THREE.Vector2( vertex.x / mag, vertex.y / mag ); + + } + + // Push vertices into `this.vertices`, skipping those inside the hull + var id = 0; + var newId = new Array( vertices.length ); // map from old vertex id to new id + + for ( var i = 0; i < faces.length; i++ ) { + + var face = faces[ i ]; + + for ( var j = 0; j < 3; j++ ) { + + if ( newId[ face[ j ] ] === undefined ) { + + newId[ face[ j ] ] = id++; + this.vertices.push( vertices[ face[ j ] ] ); + + } + + face[ j ] = newId[ face[ j ] ]; + + } + + } + + // Convert faces into instances of THREE.Face3 + for ( var i = 0; i < faces.length; i++ ) { + + this.faces.push( new THREE.Face3( + faces[ i ][ 0 ], + faces[ i ][ 1 ], + faces[ i ][ 2 ] + ) ); + + } + + // Compute UVs + for ( var i = 0; i < this.faces.length; i++ ) { + + var face = this.faces[ i ]; + + this.faceVertexUvs[ 0 ].push( [ + vertexUv( this.vertices[ face.a ] ), + vertexUv( this.vertices[ face.b ] ), + vertexUv( this.vertices[ face.c ]) + ] ); + + } + + + // this.computeCentroids(); + this.computeFaceNormals(); + this.computeVertexNormals(); + + }; + + THREE.ConvexGeometry.prototype = Object.create( THREE.Geometry.prototype ); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(59))) + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone; + + Backbone = __webpack_require__(54); + + module.exports = Backbone.View.extend({ + el: document.getElementById('primaryNav'), + template: __webpack_require__(71), + activeConstructionList: null, + initialize: function(dataSourceList) { + this.dataSourceList = dataSourceList; + this.listenTo(this.dataSourceList, 'select', function() { + if (this.activeConstructionList) { + this.stopListening(this.activeConstructionList); + } + this.activeConstructionList = null; + return this.render('loading', 'unset'); + }); + this.listenTo(this.dataSourceList, "sync", function() { + this.activeConstructionList = this.dataSourceList.selected.get('constructions'); + this.listenTo(this.activeConstructionList, 'select', function() { + return this.render('loaded', 'loading'); + }); + this.listenTo(this.activeConstructionList, 'sync', function() { + return this.render('loaded', 'loaded'); + }); + return this.render('loaded', 'unset'); + }); + return this.render('unset', 'unset'); + }, + render: function(dataSourceState, constructionState) { + var constructionList, selected, tpl; + if (dataSourceState == null) { + dataSourceState = 0; + } + if (constructionState == null) { + constructionState = 0; + } + tpl = {}; + if (dataSourceState === 'loaded') { + tpl.item = []; + constructionList = this.dataSourceList.selected.get('constructions'); + selected = null; + constructionList.each(function(e) { + if (e === constructionList.selected) { + selected = e.get('name'); + } + return tpl.item.push({ + sheet: e.get('sheet'), + name: e.get('name') + }); + }); + if (constructionState !== "unset") { + tpl.auswahl = "" + selected; + } else { + tpl.auswahl = tpl.item.length + " Konstruktionen zur Auswahl"; + } + } + if (dataSourceState === 'loading' || constructionState === 'loading') { + tpl.loading = true; + } + return this.el.innerHTML = this.template(tpl); + } + }); + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + var Handlebars = __webpack_require__(72); + function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); } + module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) { + var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
  • \n Konstruktion: \n
  • \n
  • \n " + + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"auswahl") || (depth0 != null ? lookupProperty(depth0,"auswahl") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"auswahl","hash":{},"data":data,"loc":{"start":{"line":7,"column":119},"end":{"line":7,"column":132}}}) : helper))) + + " \n
      \n" + + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"item") : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":3},"end":{"line":11,"column":12}}})) != null ? stack1 : "") + + "
    \n
  • \n" + + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"loading") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":14,"column":1},"end":{"line":23,"column":8}}})) != null ? stack1 : ""); + },"2":function(container,depth0,helpers,partials,data) { + var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
  • " + + alias4(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data,"loc":{"start":{"line":10,"column":30},"end":{"line":10,"column":40}}}) : helper))) + + "
  • \n"; + },"4":function(container,depth0,helpers,partials,data) { + return "
  • \n
    \n
    \n
    \n
  • \n
  • \n wird geladen...\n
  • \n"; + },"6":function(container,depth0,helpers,partials,data) { + var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"loading") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.program(9, data, 0),"data":data,"loc":{"start":{"line":25,"column":1},"end":{"line":38,"column":8}}})) != null ? stack1 : ""); + },"7":function(container,depth0,helpers,partials,data) { + return "
  • \n
    \n
    \n
    \n
  • \n
  • \n Konstuktionen werden geladen...\n
  • \n"; + },"9":function(container,depth0,helpers,partials,data) { + return "
  • \n Keine Datenquelle ausgewählt!\n
  • \n"; + },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
      \n" + + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"item") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(6, data, 0),"data":data,"loc":{"start":{"line":2,"column":1},"end":{"line":39,"column":8}}})) != null ? stack1 : "") + + "
    \n
    \n \n
    \n"; + },"useData":true}); + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + + // Create a simple path alias to allow browserify to resolve + // the runtime on a supported path. + module.exports = __webpack_require__(73)['default']; + + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + // istanbul ignore next + + function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + var _handlebarsBase = __webpack_require__(74); + + var base = _interopRequireWildcard(_handlebarsBase); + + // Each of these augment the Handlebars object. No need to setup here. + // (This is done to easily share code between commonjs and browse envs) + + var _handlebarsSafeString = __webpack_require__(90); + + var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString); + + var _handlebarsException = __webpack_require__(76); + + var _handlebarsException2 = _interopRequireDefault(_handlebarsException); + + var _handlebarsUtils = __webpack_require__(75); + + var Utils = _interopRequireWildcard(_handlebarsUtils); + + var _handlebarsRuntime = __webpack_require__(91); + + var runtime = _interopRequireWildcard(_handlebarsRuntime); + + var _handlebarsNoConflict = __webpack_require__(93); + + var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); + + // For compatibility and usage outside of module systems, make the Handlebars object a namespace + function create() { + var hb = new base.HandlebarsEnvironment(); + + Utils.extend(hb, base); + hb.SafeString = _handlebarsSafeString2['default']; + hb.Exception = _handlebarsException2['default']; + hb.Utils = Utils; + hb.escapeExpression = Utils.escapeExpression; + + hb.VM = runtime; + hb.template = function (spec) { + return runtime.template(spec, hb); + }; + + return hb; + } + + var inst = create(); + inst.create = create; + + _handlebarsNoConflict2['default'](inst); + + inst['default'] = inst; + + exports['default'] = inst; + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0= + + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.HandlebarsEnvironment = HandlebarsEnvironment; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _utils = __webpack_require__(75); + + var _exception = __webpack_require__(76); + + var _exception2 = _interopRequireDefault(_exception); + + var _helpers = __webpack_require__(77); + + var _decorators = __webpack_require__(85); + + var _logger = __webpack_require__(87); + + var _logger2 = _interopRequireDefault(_logger); + + var _internalProtoAccess = __webpack_require__(88); + + var VERSION = '4.7.6'; + exports.VERSION = VERSION; + var COMPILER_REVISION = 8; + exports.COMPILER_REVISION = COMPILER_REVISION; + var LAST_COMPATIBLE_COMPILER_REVISION = 7; + + exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION; + var REVISION_CHANGES = { + 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it + 2: '== 1.0.0-rc.3', + 3: '== 1.0.0-rc.4', + 4: '== 1.x.x', + 5: '== 2.0.0-alpha.x', + 6: '>= 2.0.0-beta.1', + 7: '>= 4.0.0 <4.3.0', + 8: '>= 4.3.0' + }; + + exports.REVISION_CHANGES = REVISION_CHANGES; + var objectType = '[object Object]'; + + function HandlebarsEnvironment(helpers, partials, decorators) { + this.helpers = helpers || {}; + this.partials = partials || {}; + this.decorators = decorators || {}; + + _helpers.registerDefaultHelpers(this); + _decorators.registerDefaultDecorators(this); + } + + HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: _logger2['default'], + log: _logger2['default'].log, + + registerHelper: function registerHelper(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple helpers'); + } + _utils.extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function unregisterHelper(name) { + delete this.helpers[name]; + }, + + registerPartial: function registerPartial(name, partial) { + if (_utils.toString.call(name) === objectType) { + _utils.extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function unregisterPartial(name) { + delete this.partials[name]; + }, + + registerDecorator: function registerDecorator(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple decorators'); + } + _utils.extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function unregisterDecorator(name) { + delete this.decorators[name]; + }, + /** + * Reset the memory of illegal property accesses that have already been logged. + * @deprecated should only be used in handlebars test-cases + */ + resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() { + _internalProtoAccess.resetLoggedProperties(); + } + }; + + var log = _logger2['default'].log; + + exports.log = log; + exports.createFrame = _utils.createFrame; + exports.logger = _logger2['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy42JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19 + + +/***/ }), +/* 75 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.createFrame = createFrame; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' + }; + + var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /* eslint-disable func-style */ + var isFunction = function isFunction(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + exports.isFunction = isFunction; + + /* eslint-enable func-style */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0= + + +/***/ }), +/* 76 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + endLineNumber = undefined, + column = undefined, + endColumn = undefined; + + if (loc) { + line = loc.start.line; + endLineNumber = loc.end.line; + column = loc.start.column; + endColumn = loc.end.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + this.endLineNumber = endLineNumber; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (Object.defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + Object.defineProperty(this, 'endColumn', { + value: endColumn, + enumerable: true + }); + } else { + this.column = column; + this.endColumn = endColumn; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } + } + + Exception.prototype = new Error(); + + exports['default'] = Exception; + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0= + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.registerDefaultHelpers = registerDefaultHelpers; + exports.moveHelperToHooks = moveHelperToHooks; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _helpersBlockHelperMissing = __webpack_require__(78); + + var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); + + var _helpersEach = __webpack_require__(79); + + var _helpersEach2 = _interopRequireDefault(_helpersEach); + + var _helpersHelperMissing = __webpack_require__(80); + + var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); + + var _helpersIf = __webpack_require__(81); + + var _helpersIf2 = _interopRequireDefault(_helpersIf); + + var _helpersLog = __webpack_require__(82); + + var _helpersLog2 = _interopRequireDefault(_helpersLog); + + var _helpersLookup = __webpack_require__(83); + + var _helpersLookup2 = _interopRequireDefault(_helpersLookup); + + var _helpersWith = __webpack_require__(84); + + var _helpersWith2 = _interopRequireDefault(_helpersWith); + + function registerDefaultHelpers(instance) { + _helpersBlockHelperMissing2['default'](instance); + _helpersEach2['default'](instance); + _helpersHelperMissing2['default'](instance); + _helpersIf2['default'](instance); + _helpersLog2['default'](instance); + _helpersLookup2['default'](instance); + _helpersWith2['default'](instance); + } + + function moveHelperToHooks(instance, helperName, keepHelper) { + if (instance.helpers[helperName]) { + instance.hooks[helperName] = instance.helpers[helperName]; + if (!keepHelper) { + delete instance.helpers[helperName]; + } + } + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19 + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(75); + + exports['default'] = function (instance) { + instance.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse, + fn = options.fn; + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (_utils.isArray(context)) { + if (context.length > 0) { + if (options.ids) { + options.ids = [options.name]; + } + + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + if (options.data && options.ids) { + var data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); + options = { data: data }; + } + + return fn(context, options); + } + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== + + +/***/ }), +/* 79 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + exports.__esModule = true; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _utils = __webpack_require__(75); + + var _exception = __webpack_require__(76); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('each', function (context, options) { + if (!options) { + throw new _exception2['default']('Must pass iterator to #each'); + } + + var fn = options.fn, + inverse = options.inverse, + i = 0, + ret = '', + data = undefined, + contextPath = undefined; + + if (options.data && options.ids) { + contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; + } + + if (_utils.isFunction(context)) { + context = context.call(this); + } + + if (options.data) { + data = _utils.createFrame(options.data); + } + + function execIteration(field, index, last) { + if (data) { + data.key = field; + data.index = index; + data.first = index === 0; + data.last = !!last; + + if (contextPath) { + data.contextPath = contextPath + field; + } + } + + ret = ret + fn(context[field], { + data: data, + blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) + }); + } + + if (context && typeof context === 'object') { + if (_utils.isArray(context)) { + for (var j = context.length; i < j; i++) { + if (i in context) { + execIteration(i, i, i === context.length - 1); + } + } + } else if (global.Symbol && context[global.Symbol.iterator]) { + var newContext = []; + var iterator = context[global.Symbol.iterator](); + for (var it = iterator.next(); !it.done; it = iterator.next()) { + newContext.push(it.value); + } + context = newContext; + for (var j = context.length; i < j; i++) { + execIteration(i, i, i === context.length - 1); + } + } else { + (function () { + var priorKey = undefined; + + Object.keys(context).forEach(function (key) { + // We're running the iterations one step out of sync so we can detect + // the last iteration without have to scan the object twice and create + // an itermediate keys array. + if (priorKey !== undefined) { + execIteration(priorKey, i - 1); + } + priorKey = key; + i++; + }); + if (priorKey !== undefined) { + execIteration(priorKey, i - 1, true); + } + })(); + } + } + + if (i === 0) { + ret = inverse(this); + } + + return ret; + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _exception = __webpack_require__(76); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19 + + +/***/ }), +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _utils = __webpack_require__(75); + + var _exception = __webpack_require__(76); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#if requires exactly one argument'); + } + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19 + + +/***/ }), +/* 82 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19 + + +/***/ }), +/* 83 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('lookup', function (obj, field, options) { + if (!obj) { + // Note for 5.0: Change to "obj == null" in 5.0 + return obj; + } + return options.lookupProperty(obj, field); + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ== + + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _utils = __webpack_require__(75); + + var _exception = __webpack_require__(76); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('with', function (context, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#with requires exactly one argument'); + } + if (_utils.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!_utils.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: _utils.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= + + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.registerDefaultDecorators = registerDefaultDecorators; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _decoratorsInline = __webpack_require__(86); + + var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); + + function registerDefaultDecorators(instance) { + _decoratorsInline2['default'](instance); + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0= + + +/***/ }), +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(75); + + exports['default'] = function (instance) { + instance.registerDecorator('inline', function (fn, props, container, options) { + var ret = fn; + if (!props.partials) { + props.partials = {}; + ret = function (context, options) { + // Create a new partials stack frame prior to exec. + var original = container.partials; + container.partials = _utils.extend({}, original, props.partials); + var ret = fn(context, options); + container.partials = original; + return ret; + }; + } + + props.partials[options.args[0]] = options.fn; + + return ret; + }); + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(75); + + var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + // eslint-disable-next-line no-console + if (!console[method]) { + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } + }; + + exports['default'] = logger; + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0= + + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.createProtoAccessControl = createProtoAccessControl; + exports.resultIsAllowed = resultIsAllowed; + exports.resetLoggedProperties = resetLoggedProperties; + // istanbul ignore next + + function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + var _createNewLookupObject = __webpack_require__(89); + + var _logger = __webpack_require__(87); + + var logger = _interopRequireWildcard(_logger); + + var loggedProperties = Object.create(null); + + function createProtoAccessControl(runtimeOptions) { + var defaultMethodWhiteList = Object.create(null); + defaultMethodWhiteList['constructor'] = false; + defaultMethodWhiteList['__defineGetter__'] = false; + defaultMethodWhiteList['__defineSetter__'] = false; + defaultMethodWhiteList['__lookupGetter__'] = false; + + var defaultPropertyWhiteList = Object.create(null); + // eslint-disable-next-line no-proto + defaultPropertyWhiteList['__proto__'] = false; + + return { + properties: { + whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties), + defaultValue: runtimeOptions.allowProtoPropertiesByDefault + }, + methods: { + whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods), + defaultValue: runtimeOptions.allowProtoMethodsByDefault + } + }; + } + + function resultIsAllowed(result, protoAccessControl, propertyName) { + if (typeof result === 'function') { + return checkWhiteList(protoAccessControl.methods, propertyName); + } else { + return checkWhiteList(protoAccessControl.properties, propertyName); + } + } + + function checkWhiteList(protoAccessControlForType, propertyName) { + if (protoAccessControlForType.whitelist[propertyName] !== undefined) { + return protoAccessControlForType.whitelist[propertyName] === true; + } + if (protoAccessControlForType.defaultValue !== undefined) { + return protoAccessControlForType.defaultValue; + } + logUnexpecedPropertyAccessOnce(propertyName); + return false; + } + + function logUnexpecedPropertyAccessOnce(propertyName) { + if (loggedProperties[propertyName] !== true) { + loggedProperties[propertyName] = true; + logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'); + } + } + + function resetLoggedProperties() { + Object.keys(loggedProperties).forEach(function (propertyName) { + delete loggedProperties[propertyName]; + }); + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0= + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.createNewLookupObject = createNewLookupObject; + + var _utils = __webpack_require__(75); + + /** + * Create a new object with "null"-prototype to avoid truthy results on prototype properties. + * The resulting object can be used with "object[property]" to check if a property exists + * @param {...object} sources a varargs parameter of source objects that will be merged + * @returns {object} + */ + + function createNewLookupObject() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + return _utils.extend.apply(undefined, [Object.create(null)].concat(sources)); + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19 + + +/***/ }), +/* 90 */ +/***/ (function(module, exports) { + + // Build out our basic SafeString type + 'use strict'; + + exports.__esModule = true; + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + exports['default'] = SafeString; + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ== + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.checkRevision = checkRevision; + exports.template = template; + exports.wrapProgram = wrapProgram; + exports.resolvePartial = resolvePartial; + exports.invokePartial = invokePartial; + exports.noop = noop; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + // istanbul ignore next + + function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + var _utils = __webpack_require__(75); + + var Utils = _interopRequireWildcard(_utils); + + var _exception = __webpack_require__(76); + + var _exception2 = _interopRequireDefault(_exception); + + var _base = __webpack_require__(74); + + var _helpers = __webpack_require__(77); + + var _internalWrapHelper = __webpack_require__(92); + + var _internalProtoAccess = __webpack_require__(88); + + function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = _base.COMPILER_REVISION; + + if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) { + return; + } + + if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) { + var runtimeVersions = _base.REVISION_CHANGES[currentRevision], + compilerVersions = _base.REVISION_CHANGES[compilerRevision]; + throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } + } + + function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _exception2['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as pseudo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) + var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = Utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + partial = env.VM.resolvePartial.call(this, partial, context, options); + + var extendedOptions = Utils.extend({}, options, { + hooks: this.hooks, + protoAccessControl: this.protoAccessControl + }); + + var result = env.VM.invokePartial.call(this, partial, context, extendedOptions); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, extendedOptions); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name, loc) { + if (!obj || !(name in obj)) { + throw new _exception2['default']('"' + name + '" not defined in ' + obj, { + loc: loc + }); + } + return obj[name]; + }, + lookupProperty: function lookupProperty(parent, propertyName) { + var result = parent[propertyName]; + if (result == null) { + return result; + } + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return result; + } + + if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { + return result; + } + return undefined; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + var result = depths[i] && container.lookupProperty(depths[i], name); + if (result != null) { + return depths[i][name]; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: Utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + mergeIfNeeded: function mergeIfNeeded(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = Utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: Object.seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + var mergedHelpers = Utils.extend({}, env.helpers, options.helpers); + wrapHelpersToPassLookupProperty(mergedHelpers, container); + container.helpers = mergedHelpers; + + if (templateSpec.usePartial) { + // Use mergeIfNeeded here to prevent compiling global partials multiple times + container.partials = container.mergeIfNeeded(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = Utils.extend({}, env.decorators, options.decorators); + } + + container.hooks = {}; + container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options); + + var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; + _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); + _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); + } else { + container.protoAccessControl = options.protoAccessControl; // internal option + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + container.hooks = options.hooks; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _exception2['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _exception2['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; + } + + function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; + } + + /** + * This is currently part of the official API, therefore implementation details should not be changed. + */ + + function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = options.data['partial-block']; + } else { + partial = options.partials[options.name]; + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = options.partials[partial]; + } + return partial; + } + + function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = options.data && options.data['partial-block']; + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = _base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = _base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = Utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _exception2['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } + } + + function noop() { + return ''; + } + + function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? _base.createFrame(data) : {}; + data.root = context; + } + return data; + } + + function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + Utils.extend(prog, props); + } + return prog; + } + + function wrapHelpersToPassLookupProperty(mergedHelpers, container) { + Object.keys(mergedHelpers).forEach(function (helperName) { + var helper = mergedHelpers[helperName]; + mergedHelpers[helperName] = passLookupPropertyOption(helper, container); + }); + } + + function passLookupPropertyOption(helper, container) { + var lookupProperty = container.lookupProperty; + return _internalWrapHelper.wrapHelper(helper, function (options) { + return Utils.extend({ lookupProperty: lookupProperty }, options); + }); + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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LE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBZCxjQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsRCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7XG4gIENPTVBJTEVSX1JFVklTSU9OLFxuICBjcmVhdGVGcmFtZSxcbiAgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OLFxuICBSRVZJU0lPTl9DSEFOR0VTXG59IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBtb3ZlSGVscGVyVG9Ib29rcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB3cmFwSGVscGVyIH0gZnJvbSAnLi9pbnRlcm5hbC93cmFwSGVscGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCxcbiAgcmVzdWx0SXNBbGxvd2VkXG59IGZyb20gJy4vaW50ZXJuYWwvcHJvdG8tYWNjZXNzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSAoY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSkgfHwgMSxcbiAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoXG4gICAgY29tcGlsZXJSZXZpc2lvbiA+PSBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gJiZcbiAgICBjb21waWxlclJldmlzaW9uIDw9IENPTVBJTEVSX1JFVklTSU9OXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb21waWxlclJldmlzaW9uIDwgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBydW50aW1lVmVyc2lvbnMgK1xuICAgICAgICAnKSBvciBkb3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlclZlcnNpb25zICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICtcbiAgICAgICAgY29tcGlsZXJJbmZvWzFdICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0ZW1wbGF0ZSBvYmplY3Q6ICcgKyB0eXBlb2YgdGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIHRlbXBsYXRlU3BlYy5tYWluLmRlY29yYXRvciA9IHRlbXBsYXRlU3BlYy5tYWluX2Q7XG5cbiAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9jYWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3dcbiAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRoZXNlIGFzIHBzZXVkby1zdXBwb3J0ZWQgQVBJcy5cbiAgZW52LlZNLmNoZWNrUmV2aXNpb24odGVtcGxhdGVTcGVjLmNvbXBpbGVyKTtcblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgcHJlY29tcGlsZWQgdGVtcGxhdGVzIHdpdGggY29tcGlsZXItdmVyc2lvbiA3ICg8NC4zLjApXG4gIGNvbnN0IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9XG4gICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyICYmIHRlbXBsYXRlU3BlYy5jb21waWxlclswXSA9PT0gNztcblxuICBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsV3JhcHBlcihwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgICAgY29udGV4dCA9IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTtcbiAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGxldCBleHRlbmRlZE9wdGlvbnMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGhvb2tzOiB0aGlzLmhvb2tzLFxuICAgICAgcHJvdG9BY2Nlc3NDb250cm9sOiB0aGlzLnByb3RvQWNjZXNzQ29udHJvbFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgcGFydGlhbCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBleHRlbmRlZE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIGV4dGVuZGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1RoZSBwYXJ0aWFsICcgK1xuICAgICAgICAgIG9wdGlvbnMubmFtZSArXG4gICAgICAgICAgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICBsZXQgY29udGFpbmVyID0ge1xuICAgIHN0cmljdDogZnVuY3Rpb24ob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaiwge1xuICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGVwdGhzW2ldICYmIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShkZXB0aHNbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZUlmTmVlZGVkOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID1cbiAgICAgICAgICBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdXG4gICAgICAgICAgICA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpXG4gICAgICAgICAgICA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dCAvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnJyArXG4gICAgICAgIHRlbXBsYXRlU3BlYy5tYWluKFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLFxuICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyhcbiAgICAgIHRlbXBsYXRlU3BlYy5tYWluLFxuICAgICAgbWFpbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMuZGVwdGhzIHx8IFtdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgbGV0IG1lcmdlZEhlbHBlcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5oZWxwZXJzLCBvcHRpb25zLmhlbHBlcnMpO1xuICAgICAgd3JhcEhlbHBlcnNUb1Bhc3NMb29rdXBQcm9wZXJ0eShtZXJnZWRIZWxwZXJzLCBjb250YWluZXIpO1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBtZXJnZWRIZWxwZXJzO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgLy8gVXNlIG1lcmdlSWZOZWVkZWQgaGVyZSB0byBwcmV2ZW50IGNvbXBpbGluZyBnbG9iYWwgcGFydGlhbHMgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlSWZOZWVkZWQoXG4gICAgICAgICAgb3B0aW9ucy5wYXJ0aWFscyxcbiAgICAgICAgICBlbnYucGFydGlhbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZChcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBlbnYuZGVjb3JhdG9ycyxcbiAgICAgICAgICBvcHRpb25zLmRlY29yYXRvcnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmhvb2tzID0ge307XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKG9wdGlvbnMpO1xuXG4gICAgICBsZXQga2VlcEhlbHBlckluSGVscGVycyA9XG4gICAgICAgIG9wdGlvbnMuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZyB8fFxuICAgICAgICB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjc7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdoZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdibG9ja0hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IG9wdGlvbnMucHJvdG9BY2Nlc3NDb250cm9sOyAvLyBpbnRlcm5hbCBvcHRpb25cbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgICAgY29udGFpbmVyLmhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGksXG4gICAgICB0ZW1wbGF0ZVNwZWNbaV0sXG4gICAgICBkYXRhLFxuICAgICAgMCxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKFxuICBjb250YWluZXIsXG4gIGksXG4gIGZuLFxuICBkYXRhLFxuICBkZWNsYXJlZEJsb2NrUGFyYW1zLFxuICBibG9ja1BhcmFtcyxcbiAgZGVwdGhzXG4pIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoXG4gICAgICBkZXB0aHMgJiZcbiAgICAgIGNvbnRleHQgIT0gZGVwdGhzWzBdICYmXG4gICAgICAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpXG4gICAgKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICBjdXJyZW50RGVwdGhzXG4gICAgKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY3VycmVudGx5IHBhcnQgb2YgdGhlIG9mZmljaWFsIEFQSSwgdGhlcmVmb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgLy8gVXNlIHRoZSBjdXJyZW50IGNsb3N1cmUgY29udGV4dCB0byBzYXZlIHRoZSBwYXJ0aWFsLWJsb2NrIGlmIHRoaXMgcGFydGlhbFxuICBjb25zdCBjdXJyZW50UGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAvLyBXcmFwcGVyIGZ1bmN0aW9uIHRvIGdldCBhY2Nlc3MgdG8gY3VycmVudFBhcnRpYWxCbG9jayBmcm9tIHRoZSBjbG9zdXJlXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoXG4gICAgICBjb250ZXh0LFxuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgKSB7XG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4gZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSA/IGNyZWF0ZUZyYW1lKGRhdGEpIDoge307XG4gICAgZGF0YS5yb290ID0gY29udGV4dDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykge1xuICBpZiAoZm4uZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb3BzID0ge307XG4gICAgcHJvZyA9IGZuLmRlY29yYXRvcihcbiAgICAgIHByb2csXG4gICAgICBwcm9wcyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRlcHRocyAmJiBkZXB0aHNbMF0sXG4gICAgICBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICBkZXB0aHNcbiAgICApO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goaGVscGVyTmFtZSA9PiB7XG4gICAgbGV0IGhlbHBlciA9IG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpIHtcbiAgY29uc3QgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiB3cmFwSGVscGVyKGhlbHBlciwgb3B0aW9ucyA9PiB7XG4gICAgcmV0dXJuIFV0aWxzLmV4dGVuZCh7IGxvb2t1cFByb3BlcnR5IH0sIG9wdGlvbnMpO1xuICB9KTtcbn1cbiJdfQ== + + +/***/ }), +/* 92 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.wrapHelper = wrapHelper; + + function wrapHelper(helper, transformOptionsFn) { + if (typeof helper !== 'function') { + // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 + // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. + return helper; + } + var wrapper = function wrapper() /* dynamic arguments */{ + var options = arguments[arguments.length - 1]; + arguments[arguments.length - 1] = transformOptionsFn(options); + return helper.apply(this, arguments); + }; + return wrapper; + } + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0= + + +/***/ }), +/* 93 */ +/***/ (function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + exports.__esModule = true; + + exports['default'] = function (Handlebars) { + /* istanbul ignore next */ + var root = typeof global !== 'undefined' ? global : window, + $Handlebars = root.Handlebars; + /* istanbul ignore next */ + Handlebars.noConflict = function () { + if (root.Handlebars === Handlebars) { + root.Handlebars = $Handlebars; + } + return Handlebars; + }; + }; + + module.exports = exports['default']; + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ== + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }), +/* 94 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function($) {var Backbone, + modulo = function(a, b) { return (+a % (b = +b) + b) % b; }; + + Backbone = __webpack_require__(54); + + module.exports = Backbone.View.extend({ + el: document.getElementById('secondaryNav'), + template: __webpack_require__(95), + steps: [], + step: 0, + counter: 0, + stepper: 5, + rotRate: 2, + events: { + "click .step-rel": "stepRel", + "click .step-abs": "stepAbs", + "click .step-auto": "stepAuto", + "click .rot-incr": "rotationIncr", + "click .rot-setp": "rotationSetp", + "click .view-reset": "viewReset", + "click .height-incr": "heightIncr", + "click .height-setabs": "heightSetAbs", + "click .height-setrel": "heightSetRel" + }, + heightIncr: function(e) { + if (this.app.view.EGS) { + this.app.view.EGS.setHeight(parseInt(e.target.dataset.incr), 'incr'); + } + return this.update(); + }, + heightSetAbs: function(e) { + if (this.app.view.EGS) { + this.app.view.EGS.setHeight(parseInt(e.target.dataset.setabs), 'abs'); + } + return this.update(); + }, + heightSetRel: function(e) { + if (this.app.view.EGS) { + this.app.view.EGS.setHeight(parseFloat(e.target.dataset.setrel), 'rel'); + } + return this.update(); + }, + stepRel: function(e) { + return this.incrStep(e.target.dataset.step); + }, + stepAbs: function(e) { + return this.setStep(e.target.dataset.step); + }, + stepAuto: function(e) { + this.stepper = parseInt(e.target.dataset.val); + return this.render(); + }, + rotationIncr: function(e) { + this.rotRate += parseFloat(e.target.dataset.incr); + if (this.app.view.EGS) { + this.app.view.EGS.setTurnRate(this.rotRate); + } + return this.update(); + }, + rotationSetp: function(e) { + this.rotRate = parseFloat(e.target.dataset.setp); + if (this.app.view.EGS) { + this.app.view.EGS.setTurnRate(this.rotRate); + } + return this.update(); + }, + viewReset: function(e) { + this.rotRate = 2; + if (this.app.view.EGS) { + this.app.view.EGS.setTurnRate(this.rotRate); + } + if (this.app.view.EGS) { + this.app.view.EGS.resetView(); + } + return this.update(); + }, + startup: function() { + this.setStep(0); + setInterval(((function(_this) { + return function() { + return _this.timeTrigger(); + }; + })(this)), 1000); + this.app.view.EGS.updateConstruct(this.step); + return this.app.view.EGS.setTurnRate(this.rotRate); + }, + setSteps: function(steps) { + this.steps = steps; + this.step = 0; + return this.render(); + }, + incrStep: function(dir) { + dir = parseInt(dir); + if (this.step + dir < 0) { + return this.setStep(this.step + this.steps.length + dir); + } + if (this.step + dir >= this.steps.length) { + return this.setStep(this.step - this.steps.length + dir); + } + return this.setStep(this.step + dir); + }, + setStep: function(step) { + this.step = parseInt(step); + console.log("Aufbauschritt: " + this.steps[this.step] + " (index: " + this.step + ")"); + if (this.app.view.EGS) { + this.app.view.EGS.updateConstruct(this.step); + } + return this.update(); + }, + timeTrigger: function() { + if (this.stepper && modulo(++this.counter, this.stepper) === 0) { + return this.incrStep(1); + } + }, + initialize: function(app) { + this.app = app; + return this.render(); + }, + update: function() { + $('#stepNo', this.$el).text(this.steps[this.step]); + $('.steps li', this.$el).removeClass('active'); + $('.step-' + this.step, this.$el).addClass('active'); + $('.rots li', this.$el).removeClass('active'); + return $('.rot-' + this.rotRate, this.$el).addClass('active'); + }, + render: function() { + var i, steps, tpl; + steps = []; + for (i in this.steps) { + steps.push({ + i: i, + name: "Schritt " + this.steps[i] + }); + } + tpl = { + steps: steps, + step: this.step, + stepName: this.steps[this.step], + auto: this.stepper, + rotMode: this.rotRate > 0 ? this.rotRate + ' U/min' : "Manuell", + rate: this.rotRate + }; + return this.el.innerHTML = this.template(tpl); + } + }); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(56))) + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + + var Handlebars = __webpack_require__(72); + function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); } + module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) { + return ""; + },"3":function(container,depth0,helpers,partials,data) { + return " active"; + },"5":function(container,depth0,helpers,partials,data) { + return "active"; + },"7":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
  • " + + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0)) + + "
  • \n"; + },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) { + var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
      \n
    • \n Aufbauschritte:\n
    • \n
    • \n
      \n \n
      \n \n \n
      \n
      \n \n
        \n" + + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"steps") : depth0),{"name":"each","hash":{},"fn":container.program(7, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":25,"column":5},"end":{"line":27,"column":14}}})) != null ? stack1 : "") + + "
      \n
      \n \n
      \n
    • \n
    • \n Ansicht:\n
    • \n
    • \n
      \n \n
      \n \n \n
      \n \n
      \n  \n
    • \n
    • \n
      \n \n
      \n \n \n
      \n \n
      \n  \n
    • \n
    • \n
      \n \n
      \n
    • \n
    \n"; + },"useData":true,"useDepths":true}); + +/***/ }), +/* 96 */ +/***/ (function(module, exports) { + + module.exports = function(lvalue, rvalue, options) { + if (arguments.length < 3) + throw new Error("Handlebars Helper equal needs 2 parameters"); + if( lvalue != rvalue ) + return options.inverse(this); + return options.fn(this); + } + +/***/ }), +/* 97 */ +/***/ (function(module, exports, __webpack_require__) { + + var Backbone, DataSourceModal, keyNormalizer, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Backbone = __webpack_require__(54); + + keyNormalizer = __webpack_require__(66); + + module.exports = DataSourceModal = (function() { + DataSourceModal.prototype.modal = document.getElementById('dataSourceModal'); + + DataSourceModal.prototype.inputField = document.getElementById('dataSourceModal-input'); + + DataSourceModal.prototype.saveButton = document.getElementById('dataSourceModal-save'); + + DataSourceModal.prototype.cancelButton = document.getElementById('dataSourceModal-cancel'); + + DataSourceModal.prototype.resetButton = document.getElementById('dataSourceModal-reset'); + + DataSourceModal.prototype.errorBanner = document.getElementById('dataSourceModal-error'); + + function DataSourceModal(app) { + this.app = app; + this.save = bind(this.save, this); + this.reset = bind(this.reset, this); + this.saveButton.addEventListener('click', this.save); + this.cancelButton.addEventListener('click', this.cancel); + this.resetButton.addEventListener('click', this.reset); + } + + DataSourceModal.prototype.reset = function(evt) { + return this.inputField.value = App.defaultSource; + }; + + DataSourceModal.prototype.save = function(evt) { + var keygid; + keygid = keyNormalizer(this.inputField.value, true); + if (keygid) { + this.errorBanner.style.display = 'none'; + return this.app.navigate(keygid.join('/'), { + trigger: true + }); + } else { + this.errorBanner.style.display = ''; + evt.preventDefault(); + return evt.stopPropagation(); + } + }; + + return DataSourceModal; + + })(); + + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + + module.exports = google; + +/***/ }) +]); //# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/js/app.js.map b/js/app.js.map index d8582cd..948b739 100644 --- a/js/app.js.map +++ b/js/app.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///js/app.js","webpack:///./src/app.coffee","webpack:///./src/_helpers/handlebars/cmp.js","webpack:///./~/backbone/backbone.js","webpack:///./~/handlebars/dist/cjs/handlebars/utils.js","webpack:///./~/handlebars/dist/cjs/handlebars/exception.js","webpack:///./src/_helpers/keyNormalizer.coffee","webpack:///./src/models/DataSource.coffee","webpack:///./~/handlebars/dist/cjs/handlebars/base.js","webpack:///./~/handlebars/runtime.js","webpack:///./~/underscore/underscore.js","webpack:///./src/collections/ConstructionList.coffee","webpack:///./src/collections/DataSourceList.coffee","webpack:///./src/collections/ElementList.coffee","webpack:///./src/egs/EGS_Elements.coffee","webpack:///./src/models/Construction.coffee","webpack:///./src/models/Element.coffee","webpack:///./src/views/DataSourceModal.coffee","webpack:///./src/views/EGS.coffee","webpack:///./src/views/PrimaryNav.coffee","webpack:///./src/views/SecondaryNav.coffee","webpack:///./src/templates/PrimaryNav.hbs","webpack:///./src/templates/SecondaryNav.hbs","webpack:///./~/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./~/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./~/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./~/handlebars/dist/cjs/handlebars/logger.js","webpack:///./~/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./~/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./~/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./src/_helpers/ConvexGeometry.js","webpack:///external \"google\"","webpack:///external \"window\""],"names":["webpackJsonp","module","exports","__webpack_require__","App","Backbone","DataSourceListCollection","DataSourceModel","EGS","EGS_Elements","MainApp","_","google","window","extend","child","parent","ctor","this","constructor","key","hasProp","call","prototype","__super__","hasOwnProperty","sync","method","model","options","url","id","split","console","log","length","visualization","Query","send","_this","resp","isError","error","success","superClass","apply","arguments","view","egsElementProvider","dataSourceList","activeSource","activeConstruct","routes","",":skey",":skey/:sgid(/)",":skey/:sgid/:ckey/:cgid","setActiveDataSource","loadSource","skey","sgid","loadConstruct","ckey","cgid","ds","setActiveConstruction","c","showConstruct","source","cb","get","add","setSelected","at","construct","selected","alert","initialize","data","DataSourceModal","PrimaryNavView","SecondaryNavView","i","ref","results","v","defaultSource","app","PrimaryNav","SecondaryNav","DataSource","startup","push","start","history","Router","setOnLoadCallback","e","body","document","getElementsByTagName","getAttribute","load","packages","lvalue","rvalue","Error","inverse","fn","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","root","self","$","undefined","previousBackbone","slice","Array","VERSION","noConflict","emulateHTTP","emulateJSON","addMethod","attribute","value","iteratee","context","defaultVal","args","unshift","addUnderscoreMethods","Class","methods","each","instance","isFunction","isObject","_isModel","modelMatcher","isString","attrs","matcher","matches","attributes","Events","eventSplitter","eventsApi","events","name","callback","opts","names","keys","test","on","internalOn","obj","listening","_events","onApi","ctx","listeners","_listeners","listenTo","_listenId","uniqueId","listeningTo","_listeningTo","thisId","objId","count","handlers","off","offApi","stopListening","ids","remaining","j","handler","_callback","once","onceMap","bind","listenToOnce","map","offer","trigger","Math","max","triggerApi","objEvents","allEvents","all","triggerEvents","concat","ev","l","a1","a2","a3","unbind","Model","cid","cidPrefix","collection","parse","defaults","result","set","changed","validationError","idAttribute","toJSON","clone","attr","escape","has","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","_pending","clear","hasChanged","isEmpty","changedAttributes","diff","old","size","previous","previousAttributes","fetch","serverAttrs","wrapError","save","validate","wait","isNew","patch","xhr","destroy","defer","base","urlError","replace","encodeURIComponent","isValid","modelMethods","values","pairs","invert","pick","omit","chain","Collection","models","comparator","_reset","reset","setOptions","remove","merge","addOptions","splice","array","insert","min","tail","singular","isArray","removed","_removeModels","added","merged","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","some","m","index","_removeReference","previousModels","pop","shift","_byId","modelId","where","first","findWhere","sortBy","pluck","create","callbackOpts","indexOf","_onModelEvent","event","prevId","collectionMethods","forEach","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","any","include","includes","contains","invoke","toArray","head","take","initial","rest","drop","last","without","difference","shuffle","lastIndexOf","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","match","delegate","eventName","listener","undelegate","_createElement","createElement","className","_setAttributes","type","methodMap","params","dataType","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","path","pathname","getSearch","matchRoot","decodeFragment","rootPath","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","src","style","display","tabIndex","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","title","assign","_updateHash","protoProps","staticProps","escapeChar","chr","Object","len","escapeExpression","string","toHTML","possible","badChars","createFrame","object","frame","_parent","blockParams","appendContextPath","contextPath","__esModule","&","<",">","\"","'","`","=","toString","Exception","message","node","loc","line","column","tmp","idx","errorProps","captureStackTrace","lineNumber","someKey","gid","reg","ConstructionList","keyNormalizer","fetched","dataTable","columns","sheet","desc","join","d","firstDataRow","importer","isConstructTable","k","r","ref1","ref2","getDataTable","getColumnLabel","constructions","getNumberOfRows","getNumberOfColumns","getValue","_interopRequireDefault","default","HandlebarsEnvironment","helpers","partials","decorators","_helpers","registerDefaultHelpers","_decorators","registerDefaultDecorators","_utils","_exception","_exception2","_logger","_logger2","COMPILER_REVISION","REVISION_CHANGES",1,2,3,4,5,6,7,"objectType","logger","registerHelper","unregisterHelper","registerPartial","partial","unregisterPartial","registerDecorator","unregisterDecorator","createReduce","dir","iterator","memo","currentKey","optimizeCb","isArrayLike","createPredicateIndexFinder","predicate","getLength","createIndexFinder","predicateFind","sortedIndex","item","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","proto","ObjProto","prop","previousUnderscore","ArrayProto","FuncProto","Function","nativeIsArray","nativeKeys","nativeBind","nativeCreate","Ctor","_wrapped","func","argCount","other","accumulator","identity","property","Infinity","createAssigner","keysFunc","undefinedOnly","baseCreate","MAX_ARRAY_INDEX","pow","findKey","list","negate","fromIndex","guard","isFunc","computed","lastComputed","rand","shuffled","random","n","criteria","left","right","a","b","group","behavior","pass","fail","compact","flatten","input","shallow","strict","startIndex","output","isArguments","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","low","high","mid","floor","range","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","boundArgs","position","bindAll","memoize","hasher","cache","address","delay","setTimeout","throttle","timeout","later","leading","now","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","functions","extendOwn","oiteratee","String","props","tap","interceptor","isMatch","eq","aStack","bStack","areArrays","aCtor","bCtor","isElement","nodeType","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","constant","noop","propertyOf","accum","Date","getTime","escapeMap","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","unescape","fallback","idCounter","prefix","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","template","text","settings","oldSettings","offset","variable","argument","_chain","mixin","valueOf","Construction","DataSourceList","ConstructionElement","_Class","THREE","ThreadCurve","height","pitch","radius","getPoint","t","Vector3","cos","PI","sin","Curve","CustomGeometry","vertices","faces","f","len1","Face3","computeBoundingSphere","computeFaceNormals","computeVertexNormals","calcUVs","v1","v2","v3","computeBoundingBox","boundingBox","Vector2","x","y","faceVertexUvs","uvsNeedUpdate","Geometry","AnfSt","BX","D180","D360","D90","DETAIL","DRX","FX","HV","RX","RohrDurchmesserAussen","RohrDurchmesserInnen","TellerDurchmesser","TellerHoehe","VDX","VX","X","Y","Z","_AnfStk","_Belag","_DoppelRiegel","_Riegel","_VertikalDiagonale","_VertikalStiel","_barToCircle","_belagKlammer","_belagRahmen","_cylinder","_cylinderPath","_haengegeruestVerbinder","_keilKupplungDiagonale","_keilKupplungRiegel","_m","_rohr","_rohrverbinder","_teller","_threadCyl","z","A","Matrix4","makeTranslation","multiply","makeRotationX","makeRotationY","makeRotationZ","circle","vert","CircleGeometry","ConvexGeometry","o","h","hole","shape","Shape","absarc","Path","holes","extrude","amount","steps","bevelEnabled","curveSegments","p","extrudePath","cyl","thread","TubeGeometry","applyMatrix","bk","d1","d2","moveTo","lineTo","arc","w","facesD","fd","kkd","s","bohrAbstand","degree","vd","sqrt","atan2","BoxGeometry","rv","r2","CurvePath","LineCurve3","parseInt","bl","hv","getGeometry","ElementList","fields","show","color","direction","special","determineColumn","label","elements","colTypes","cols","cv","geometry","me","saveButton","cancelButton","cancel","resetButton","modal","getElementById","inputField","errorBanner","evt","keygid","preventDefault","stopPropagation","Display","EGS_ElementView","EGS_View","OrbitControls","mesh","parseNum","ptt","t1","t2","tt","getAndStoreColor","Mesh","visible","getMesh","setStep","material","domElementID1","domElementID","onWindowResize","scene","Scene","_addRenderer","_addLights","_addCamera","_addControls","_animationStart","center","bbox","Box3","startTime","turnRate","turnOffset","camDistance","camDistanceOffset","camHeight","camHeightOffset","renderer","camera","controls","animationRequest","canvas","hasWebGL","WebGLRenderingContext","getContext","WebGLRenderer","antialias","CanvasRenderer","setPixelRatio","devicePixelRatio","setSize","innerWidth","innerHeight","appendChild","domElement","dirLight","hemiLight","HemisphereLight","setHSL","groundColor","DirectionalLight","multiplyScalar","width","PerspectiveCamera","zoomSpeed","rotateSpeed","getComputedStyle","getPropertyValue","aspect","updateProjectionMatrix","_animationFrame","_animationStop","cancelAnimationFrame","requestAnimationFrame","calcCamPos","resetView","fovH","fov","tan","target","copy","removeAll","children","setTurnRate","rate","delta","enableZoom","enablePan","enableRotate","setHeight","relation","override","turnIndex","lookAt","_hexToRGB","colorTable","stepNo","construction","setSteps","updateConstruct","hex","rs","MeshPhongMaterial","emissive","specular","shininess","activeConstructionList","dataSourceState","constructionState","constructionList","tpl","auswahl","loading","innerHTML","modulo","counter","stepper","rotRate","click .step-rel","click .step-abs","click .step-auto","click .rot-incr","click .rot-setp","click .view-reset","click .height-incr","click .height-setabs","click .height-setrel","heightIncr","dataset","incr","heightSetAbs","setabs","heightSetRel","setrel","stepRel","incrStep","stepAbs","stepAuto","rotationIncr","rotationSetp","setp","viewReset","timeTrigger","removeClass","addClass","stepName","auto","rotMode","Handlebars","container","depth0","stack1","helper","alias1","helperMissing","program","alias2","alias3","alias4","9","compiler","main","useData","__default","depths","lambda","useDepths","_interopRequireWildcard","newObj","hb","Utils","SafeString","_handlebarsSafeString2","_handlebarsException2","VM","runtime","spec","_handlebarsBase","_handlebarsSafeString","_handlebarsException","_handlebarsUtils","_handlebarsRuntime","_handlebarsNoConflict","_handlebarsNoConflict2","inst","_decoratorsInline2","_decoratorsInline","ret","original","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","_helpersBlockHelperMissing","_helpersEach","_helpersHelperMissing","_helpersIf","_helpersLog","_helpersLookup","_helpersWith","execIteration","field","priorKey","conditional","includeZero","level","lookupLevel","levelMap","toLowerCase","_len","_key","$Handlebars","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","invokePartialWrapper","resolvePartial","invokePartial","compile","compilerOptions","indent","lines","_setup","initData","useBlockParams","executeDecorators","decorator","main_d","lookup","programs","declaredBlockParams","programWrapper","wrapProgram","depth","common","isTop","usePartial","useDecorators","_child","prog","currentDepths","partialBlock","addPoint","vertexId","vertex","mag","randomOffset","face","edge","boundary","equalEdge","va","vb","vc","normal","dist","dot","ab","subVectors","cross","normalize","ea","eb","vertexUv","newId"],"mappings":"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","file":"js/app.js","sourcesContent":["webpackJsonp([1],[\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar App, Backbone, DataSourceListCollection, DataSourceModel, EGS, EGS_Elements, MainApp, _, google, window,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\t_ = __webpack_require__(12);\n\t\n\twindow = __webpack_require__(54);\n\t\n\tEGS = __webpack_require__(22);\n\t\n\tBackbone.sync = function(method, model, options) {\n\t var key, url;\n\t key = model.id.split('/');\n\t console.log(\"sync called with key: \", key);\n\t url = 'https://docs.google.com/spreadsheets/d/' + key[key.length - 2] + '/gviz/tq?gid=' + key[key.length - 1];\n\t if (method === 'read') {\n\t return (new google.visualization.Query(url)).send((function(_this) {\n\t return function(resp) {\n\t if (resp.isError()) {\n\t return options.error(resp);\n\t } else {\n\t return options.success(resp);\n\t }\n\t };\n\t })(this));\n\t }\n\t};\n\t\n\tDataSourceModel = __webpack_require__(8);\n\t\n\tDataSourceListCollection = __webpack_require__(16);\n\t\n\tEGS_Elements = __webpack_require__(18);\n\t\n\tApp = MainApp = (function(superClass) {\n\t extend(MainApp, superClass);\n\t\n\t function MainApp() {\n\t return MainApp.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t MainApp.prototype.view = {};\n\t\n\t MainApp.prototype.egsElementProvider = null;\n\t\n\t MainApp.prototype.dataSourceList = null;\n\t\n\t MainApp.prototype.activeSource = null;\n\t\n\t MainApp.prototype.activeConstruct = null;\n\t\n\t MainApp.prototype.routes = {\n\t \"\": \"default\",\n\t \":skey\": \"loadSource\",\n\t \":skey/:sgid(/)\": \"loadSource\",\n\t \":skey/:sgid/:ckey/:cgid\": \"loadConstruct\"\n\t };\n\t\n\t MainApp.prototype[\"default\"] = function() {\n\t return this.setActiveDataSource.call(this);\n\t };\n\t\n\t MainApp.prototype.loadSource = function(skey, sgid) {\n\t if (sgid == null) {\n\t sgid = 0;\n\t }\n\t console.log(\"Routed to loadSource '\" + skey + \"'/'\" + sgid + \"'\");\n\t return this.setActiveDataSource.call(this, skey + \"/\" + sgid);\n\t };\n\t\n\t MainApp.prototype.loadConstruct = function(skey, sgid, ckey, cgid) {\n\t console.log(\"Routed to loadConstruct '\" + skey + \"'/'\" + sgid + \"'/'\" + ckey + \"'/'\" + cgid + \"'\");\n\t return this.setActiveDataSource.call(this, skey + \"/\" + sgid, (function(_this) {\n\t return function(ds) {\n\t return _this.setActiveConstruction.call(_this, skey + \"/\" + sgid + \"/\" + ckey + \"/\" + cgid, function(c) {\n\t return _this.view.EGS.showConstruct(c);\n\t });\n\t };\n\t })(this));\n\t };\n\t\n\t MainApp.prototype.setActiveDataSource = function(source, cb) {\n\t if (cb == null) {\n\t cb = null;\n\t }\n\t console.log(\"setActiveDataSource\", source);\n\t if (source) {\n\t source = source.split('/');\n\t source = source[0] + '/' + source[1];\n\t if (!this.dataSourceList.get(source)) {\n\t this.dataSourceList.add([\n\t {\n\t source: source\n\t }\n\t ]);\n\t }\n\t return this.activeSource = this.dataSourceList.get(source).setSelected(cb);\n\t } else if (this.dataSourceList.length) {\n\t return this.activeSource = this.dataSourceList.at(0).setSelected(cb);\n\t }\n\t };\n\t\n\t MainApp.prototype.setActiveConstruction = function(construct, cb) {\n\t var source;\n\t if (cb == null) {\n\t cb = null;\n\t }\n\t source = this.dataSourceList.selected;\n\t if (source === null) {\n\t return;\n\t }\n\t console.log(\"setActiveConstruction\", construct);\n\t if (!source.get('constructions').get(construct)) {\n\t alert(\"ausgewählte Konstruktion nicht in Datenquelle definiert!\");\n\t }\n\t return this.activeConstruct = source.get('constructions').get(construct).setSelected(cb);\n\t };\n\t\n\t MainApp.prototype.initialize = function(data) {\n\t var DataSourceModal, PrimaryNavView, SecondaryNavView, i, ref, results, v;\n\t console.log(\"App Init\");\n\t this.dataSourceList = new DataSourceListCollection([\n\t {\n\t source: data.defaultSource\n\t }\n\t ], {\n\t app: this\n\t });\n\t this.egsElementProvider = new EGS_Elements();\n\t PrimaryNavView = __webpack_require__(23);\n\t this.view.PrimaryNav = new PrimaryNavView(this.dataSourceList);\n\t SecondaryNavView = __webpack_require__(24);\n\t this.view.SecondaryNav = new SecondaryNavView(this);\n\t DataSourceModal = __webpack_require__(21);\n\t this.view.DataSource = new DataSourceModal(this);\n\t this.view.EGS = new EGS(this, 'display');\n\t ref = this.view;\n\t results = [];\n\t for (i in ref) {\n\t v = ref[i];\n\t if (v.startup != null) {\n\t results.push(v.startup());\n\t } else {\n\t results.push(void 0);\n\t }\n\t }\n\t return results;\n\t };\n\t\n\t MainApp.prototype.start = function() {\n\t console.log(\"App start\");\n\t return Backbone.history.start();\n\t };\n\t\n\t return MainApp;\n\t\n\t})(Backbone.Router);\n\t\n\tgoogle = __webpack_require__(53);\n\t\n\tgoogle.setOnLoadCallback(function(e) {\n\t var body;\n\t body = document.getElementsByTagName('body')[0];\n\t if (window.App) {\n\t return;\n\t }\n\t window.App = new App({\n\t defaultSource: body.getAttribute('data-defaultSource')\n\t });\n\t return window.App.start();\n\t});\n\t\n\tgoogle.load('visualization', '1', {\n\t packages: ['table']\n\t});\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(lvalue, rvalue, options) {\n\t\tif (arguments.length < 3)\n\t\t\tthrow new Error(\"Handlebars Helper equal needs 2 parameters\");\n\t\tif( lvalue != rvalue )\n\t\t\treturn options.inverse(this);\n\t\treturn options.fn(this);\n\t}\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global) {// Backbone.js 1.3.3\n\t\n\t// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t// Backbone may be freely distributed under the MIT license.\n\t// For all details and documentation:\n\t// http://backbonejs.org\n\t\n\t(function(factory) {\n\t\n\t // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n\t // We use `self` instead of `window` for `WebWorker` support.\n\t var root = (typeof self == 'object' && self.self === self && self) ||\n\t (typeof global == 'object' && global.global === global && global);\n\t\n\t // Set up Backbone appropriately for the environment. Start with AMD.\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(12), __webpack_require__(4), exports], __WEBPACK_AMD_DEFINE_RESULT__ = function(_, $, exports) {\n\t // Export global even in AMD case in case this script is loaded with\n\t // others that may still expect a global Backbone.\n\t root.Backbone = factory(root, exports, _, $);\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\n\t // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n\t } else if (typeof exports !== 'undefined') {\n\t var _ = require('underscore'), $;\n\t try { $ = require('jquery'); } catch (e) {}\n\t factory(root, exports, _, $);\n\t\n\t // Finally, as a browser global.\n\t } else {\n\t root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n\t }\n\t\n\t})(function(root, Backbone, _, $) {\n\t\n\t // Initial Setup\n\t // -------------\n\t\n\t // Save the previous value of the `Backbone` variable, so that it can be\n\t // restored later on, if `noConflict` is used.\n\t var previousBackbone = root.Backbone;\n\t\n\t // Create a local reference to a common array method we'll want to use later.\n\t var slice = Array.prototype.slice;\n\t\n\t // Current version of the library. Keep in sync with `package.json`.\n\t Backbone.VERSION = '1.3.3';\n\t\n\t // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n\t // the `$` variable.\n\t Backbone.$ = $;\n\t\n\t // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n\t // to its previous owner. Returns a reference to this Backbone object.\n\t Backbone.noConflict = function() {\n\t root.Backbone = previousBackbone;\n\t return this;\n\t };\n\t\n\t // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n\t // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n\t // set a `X-Http-Method-Override` header.\n\t Backbone.emulateHTTP = false;\n\t\n\t // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n\t // `application/json` requests ... this will encode the body as\n\t // `application/x-www-form-urlencoded` instead and will send the model in a\n\t // form param named `model`.\n\t Backbone.emulateJSON = false;\n\t\n\t // Proxy Backbone class methods to Underscore functions, wrapping the model's\n\t // `attributes` object or collection's `models` array behind the scenes.\n\t //\n\t // collection.filter(function(model) { return model.get('age') > 10 });\n\t // collection.each(this.addView);\n\t //\n\t // `Function#apply` can be slow so we use the method's arg count, if we know it.\n\t var addMethod = function(length, method, attribute) {\n\t switch (length) {\n\t case 1: return function() {\n\t return _[method](this[attribute]);\n\t };\n\t case 2: return function(value) {\n\t return _[method](this[attribute], value);\n\t };\n\t case 3: return function(iteratee, context) {\n\t return _[method](this[attribute], cb(iteratee, this), context);\n\t };\n\t case 4: return function(iteratee, defaultVal, context) {\n\t return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n\t };\n\t default: return function() {\n\t var args = slice.call(arguments);\n\t args.unshift(this[attribute]);\n\t return _[method].apply(_, args);\n\t };\n\t }\n\t };\n\t var addUnderscoreMethods = function(Class, methods, attribute) {\n\t _.each(methods, function(length, method) {\n\t if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n\t });\n\t };\n\t\n\t // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n\t var cb = function(iteratee, instance) {\n\t if (_.isFunction(iteratee)) return iteratee;\n\t if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n\t if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n\t return iteratee;\n\t };\n\t var modelMatcher = function(attrs) {\n\t var matcher = _.matches(attrs);\n\t return function(model) {\n\t return matcher(model.attributes);\n\t };\n\t };\n\t\n\t // Backbone.Events\n\t // ---------------\n\t\n\t // A module that can be mixed in to *any object* in order to provide it with\n\t // a custom event channel. You may bind a callback to an event with `on` or\n\t // remove with `off`; `trigger`-ing an event fires all callbacks in\n\t // succession.\n\t //\n\t // var object = {};\n\t // _.extend(object, Backbone.Events);\n\t // object.on('expand', function(){ alert('expanded'); });\n\t // object.trigger('expand');\n\t //\n\t var Events = Backbone.Events = {};\n\t\n\t // Regular expression used to split event strings.\n\t var eventSplitter = /\\s+/;\n\t\n\t // Iterates over the standard `event, callback` (as well as the fancy multiple\n\t // space-separated events `\"change blur\", callback` and jQuery-style event\n\t // maps `{event: callback}`).\n\t var eventsApi = function(iteratee, events, name, callback, opts) {\n\t var i = 0, names;\n\t if (name && typeof name === 'object') {\n\t // Handle event maps.\n\t if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n\t for (names = _.keys(name); i < names.length ; i++) {\n\t events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n\t }\n\t } else if (name && eventSplitter.test(name)) {\n\t // Handle space-separated event names by delegating them individually.\n\t for (names = name.split(eventSplitter); i < names.length; i++) {\n\t events = iteratee(events, names[i], callback, opts);\n\t }\n\t } else {\n\t // Finally, standard events.\n\t events = iteratee(events, name, callback, opts);\n\t }\n\t return events;\n\t };\n\t\n\t // Bind an event to a `callback` function. Passing `\"all\"` will bind\n\t // the callback to all events fired.\n\t Events.on = function(name, callback, context) {\n\t return internalOn(this, name, callback, context);\n\t };\n\t\n\t // Guard the `listening` argument from the public API.\n\t var internalOn = function(obj, name, callback, context, listening) {\n\t obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n\t context: context,\n\t ctx: obj,\n\t listening: listening\n\t });\n\t\n\t if (listening) {\n\t var listeners = obj._listeners || (obj._listeners = {});\n\t listeners[listening.id] = listening;\n\t }\n\t\n\t return obj;\n\t };\n\t\n\t // Inversion-of-control versions of `on`. Tell *this* object to listen to\n\t // an event in another object... keeping track of what it's listening to\n\t // for easier unbinding later.\n\t Events.listenTo = function(obj, name, callback) {\n\t if (!obj) return this;\n\t var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n\t var listeningTo = this._listeningTo || (this._listeningTo = {});\n\t var listening = listeningTo[id];\n\t\n\t // This object is not listening to any other events on `obj` yet.\n\t // Setup the necessary references to track the listening callbacks.\n\t if (!listening) {\n\t var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n\t listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n\t }\n\t\n\t // Bind callbacks on obj, and keep track of them on listening.\n\t internalOn(obj, name, callback, this, listening);\n\t return this;\n\t };\n\t\n\t // The reducing API that adds a callback to the `events` object.\n\t var onApi = function(events, name, callback, options) {\n\t if (callback) {\n\t var handlers = events[name] || (events[name] = []);\n\t var context = options.context, ctx = options.ctx, listening = options.listening;\n\t if (listening) listening.count++;\n\t\n\t handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n\t }\n\t return events;\n\t };\n\t\n\t // Remove one or many callbacks. If `context` is null, removes all\n\t // callbacks with that function. If `callback` is null, removes all\n\t // callbacks for the event. If `name` is null, removes all bound\n\t // callbacks for all events.\n\t Events.off = function(name, callback, context) {\n\t if (!this._events) return this;\n\t this._events = eventsApi(offApi, this._events, name, callback, {\n\t context: context,\n\t listeners: this._listeners\n\t });\n\t return this;\n\t };\n\t\n\t // Tell this object to stop listening to either specific events ... or\n\t // to every object it's currently listening to.\n\t Events.stopListening = function(obj, name, callback) {\n\t var listeningTo = this._listeningTo;\n\t if (!listeningTo) return this;\n\t\n\t var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\t\n\t for (var i = 0; i < ids.length; i++) {\n\t var listening = listeningTo[ids[i]];\n\t\n\t // If listening doesn't exist, this object is not currently\n\t // listening to obj. Break out early.\n\t if (!listening) break;\n\t\n\t listening.obj.off(name, callback, this);\n\t }\n\t\n\t return this;\n\t };\n\t\n\t // The reducing API that removes a callback from the `events` object.\n\t var offApi = function(events, name, callback, options) {\n\t if (!events) return;\n\t\n\t var i = 0, listening;\n\t var context = options.context, listeners = options.listeners;\n\t\n\t // Delete all events listeners and \"drop\" events.\n\t if (!name && !callback && !context) {\n\t var ids = _.keys(listeners);\n\t for (; i < ids.length; i++) {\n\t listening = listeners[ids[i]];\n\t delete listeners[listening.id];\n\t delete listening.listeningTo[listening.objId];\n\t }\n\t return;\n\t }\n\t\n\t var names = name ? [name] : _.keys(events);\n\t for (; i < names.length; i++) {\n\t name = names[i];\n\t var handlers = events[name];\n\t\n\t // Bail out if there are no events stored.\n\t if (!handlers) break;\n\t\n\t // Replace events if there are any remaining. Otherwise, clean up.\n\t var remaining = [];\n\t for (var j = 0; j < handlers.length; j++) {\n\t var handler = handlers[j];\n\t if (\n\t callback && callback !== handler.callback &&\n\t callback !== handler.callback._callback ||\n\t context && context !== handler.context\n\t ) {\n\t remaining.push(handler);\n\t } else {\n\t listening = handler.listening;\n\t if (listening && --listening.count === 0) {\n\t delete listeners[listening.id];\n\t delete listening.listeningTo[listening.objId];\n\t }\n\t }\n\t }\n\t\n\t // Update tail event if the list has any events. Otherwise, clean up.\n\t if (remaining.length) {\n\t events[name] = remaining;\n\t } else {\n\t delete events[name];\n\t }\n\t }\n\t return events;\n\t };\n\t\n\t // Bind an event to only be triggered a single time. After the first time\n\t // the callback is invoked, its listener will be removed. If multiple events\n\t // are passed in using the space-separated syntax, the handler will fire\n\t // once for each event, not once for a combination of all events.\n\t Events.once = function(name, callback, context) {\n\t // Map the event into a `{event: once}` object.\n\t var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n\t if (typeof name === 'string' && context == null) callback = void 0;\n\t return this.on(events, callback, context);\n\t };\n\t\n\t // Inversion-of-control versions of `once`.\n\t Events.listenToOnce = function(obj, name, callback) {\n\t // Map the event into a `{event: once}` object.\n\t var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n\t return this.listenTo(obj, events);\n\t };\n\t\n\t // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n\t // `offer` unbinds the `onceWrapper` after it has been called.\n\t var onceMap = function(map, name, callback, offer) {\n\t if (callback) {\n\t var once = map[name] = _.once(function() {\n\t offer(name, once);\n\t callback.apply(this, arguments);\n\t });\n\t once._callback = callback;\n\t }\n\t return map;\n\t };\n\t\n\t // Trigger one or many events, firing all bound callbacks. Callbacks are\n\t // passed the same arguments as `trigger` is, apart from the event name\n\t // (unless you're listening on `\"all\"`, which will cause your callback to\n\t // receive the true name of the event as the first argument).\n\t Events.trigger = function(name) {\n\t if (!this._events) return this;\n\t\n\t var length = Math.max(0, arguments.length - 1);\n\t var args = Array(length);\n\t for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\t\n\t eventsApi(triggerApi, this._events, name, void 0, args);\n\t return this;\n\t };\n\t\n\t // Handles triggering the appropriate event callbacks.\n\t var triggerApi = function(objEvents, name, callback, args) {\n\t if (objEvents) {\n\t var events = objEvents[name];\n\t var allEvents = objEvents.all;\n\t if (events && allEvents) allEvents = allEvents.slice();\n\t if (events) triggerEvents(events, args);\n\t if (allEvents) triggerEvents(allEvents, [name].concat(args));\n\t }\n\t return objEvents;\n\t };\n\t\n\t // A difficult-to-believe, but optimized internal dispatch function for\n\t // triggering events. Tries to keep the usual cases speedy (most internal\n\t // Backbone events have 3 arguments).\n\t var triggerEvents = function(events, args) {\n\t var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n\t switch (args.length) {\n\t case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n\t case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n\t case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n\t case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n\t default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n\t }\n\t };\n\t\n\t // Aliases for backwards compatibility.\n\t Events.bind = Events.on;\n\t Events.unbind = Events.off;\n\t\n\t // Allow the `Backbone` object to serve as a global event bus, for folks who\n\t // want global \"pubsub\" in a convenient place.\n\t _.extend(Backbone, Events);\n\t\n\t // Backbone.Model\n\t // --------------\n\t\n\t // Backbone **Models** are the basic data object in the framework --\n\t // frequently representing a row in a table in a database on your server.\n\t // A discrete chunk of data and a bunch of useful, related methods for\n\t // performing computations and transformations on that data.\n\t\n\t // Create a new model with the specified attributes. A client id (`cid`)\n\t // is automatically generated and assigned for you.\n\t var Model = Backbone.Model = function(attributes, options) {\n\t var attrs = attributes || {};\n\t options || (options = {});\n\t this.cid = _.uniqueId(this.cidPrefix);\n\t this.attributes = {};\n\t if (options.collection) this.collection = options.collection;\n\t if (options.parse) attrs = this.parse(attrs, options) || {};\n\t var defaults = _.result(this, 'defaults');\n\t attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n\t this.set(attrs, options);\n\t this.changed = {};\n\t this.initialize.apply(this, arguments);\n\t };\n\t\n\t // Attach all inheritable methods to the Model prototype.\n\t _.extend(Model.prototype, Events, {\n\t\n\t // A hash of attributes whose current and previous value differ.\n\t changed: null,\n\t\n\t // The value returned during the last failed validation.\n\t validationError: null,\n\t\n\t // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n\t // CouchDB users may want to set this to `\"_id\"`.\n\t idAttribute: 'id',\n\t\n\t // The prefix is used to create the client id which is used to identify models locally.\n\t // You may want to override this if you're experiencing name clashes with model ids.\n\t cidPrefix: 'c',\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // Return a copy of the model's `attributes` object.\n\t toJSON: function(options) {\n\t return _.clone(this.attributes);\n\t },\n\t\n\t // Proxy `Backbone.sync` by default -- but override this if you need\n\t // custom syncing semantics for *this* particular model.\n\t sync: function() {\n\t return Backbone.sync.apply(this, arguments);\n\t },\n\t\n\t // Get the value of an attribute.\n\t get: function(attr) {\n\t return this.attributes[attr];\n\t },\n\t\n\t // Get the HTML-escaped value of an attribute.\n\t escape: function(attr) {\n\t return _.escape(this.get(attr));\n\t },\n\t\n\t // Returns `true` if the attribute contains a value that is not null\n\t // or undefined.\n\t has: function(attr) {\n\t return this.get(attr) != null;\n\t },\n\t\n\t // Special-cased proxy to underscore's `_.matches` method.\n\t matches: function(attrs) {\n\t return !!_.iteratee(attrs, this)(this.attributes);\n\t },\n\t\n\t // Set a hash of model attributes on the object, firing `\"change\"`. This is\n\t // the core primitive operation of a model, updating the data and notifying\n\t // anyone who needs to know about the change in state. The heart of the beast.\n\t set: function(key, val, options) {\n\t if (key == null) return this;\n\t\n\t // Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t var attrs;\n\t if (typeof key === 'object') {\n\t attrs = key;\n\t options = val;\n\t } else {\n\t (attrs = {})[key] = val;\n\t }\n\t\n\t options || (options = {});\n\t\n\t // Run validation.\n\t if (!this._validate(attrs, options)) return false;\n\t\n\t // Extract attributes and options.\n\t var unset = options.unset;\n\t var silent = options.silent;\n\t var changes = [];\n\t var changing = this._changing;\n\t this._changing = true;\n\t\n\t if (!changing) {\n\t this._previousAttributes = _.clone(this.attributes);\n\t this.changed = {};\n\t }\n\t\n\t var current = this.attributes;\n\t var changed = this.changed;\n\t var prev = this._previousAttributes;\n\t\n\t // For each `set` attribute, update or delete the current value.\n\t for (var attr in attrs) {\n\t val = attrs[attr];\n\t if (!_.isEqual(current[attr], val)) changes.push(attr);\n\t if (!_.isEqual(prev[attr], val)) {\n\t changed[attr] = val;\n\t } else {\n\t delete changed[attr];\n\t }\n\t unset ? delete current[attr] : current[attr] = val;\n\t }\n\t\n\t // Update the `id`.\n\t if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\t\n\t // Trigger all relevant attribute changes.\n\t if (!silent) {\n\t if (changes.length) this._pending = options;\n\t for (var i = 0; i < changes.length; i++) {\n\t this.trigger('change:' + changes[i], this, current[changes[i]], options);\n\t }\n\t }\n\t\n\t // You might be wondering why there's a `while` loop here. Changes can\n\t // be recursively nested within `\"change\"` events.\n\t if (changing) return this;\n\t if (!silent) {\n\t while (this._pending) {\n\t options = this._pending;\n\t this._pending = false;\n\t this.trigger('change', this, options);\n\t }\n\t }\n\t this._pending = false;\n\t this._changing = false;\n\t return this;\n\t },\n\t\n\t // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n\t // if the attribute doesn't exist.\n\t unset: function(attr, options) {\n\t return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n\t },\n\t\n\t // Clear all attributes on the model, firing `\"change\"`.\n\t clear: function(options) {\n\t var attrs = {};\n\t for (var key in this.attributes) attrs[key] = void 0;\n\t return this.set(attrs, _.extend({}, options, {unset: true}));\n\t },\n\t\n\t // Determine if the model has changed since the last `\"change\"` event.\n\t // If you specify an attribute name, determine if that attribute has changed.\n\t hasChanged: function(attr) {\n\t if (attr == null) return !_.isEmpty(this.changed);\n\t return _.has(this.changed, attr);\n\t },\n\t\n\t // Return an object containing all the attributes that have changed, or\n\t // false if there are no changed attributes. Useful for determining what\n\t // parts of a view need to be updated and/or what attributes need to be\n\t // persisted to the server. Unset attributes will be set to undefined.\n\t // You can also pass an attributes object to diff against the model,\n\t // determining if there *would be* a change.\n\t changedAttributes: function(diff) {\n\t if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n\t var old = this._changing ? this._previousAttributes : this.attributes;\n\t var changed = {};\n\t for (var attr in diff) {\n\t var val = diff[attr];\n\t if (_.isEqual(old[attr], val)) continue;\n\t changed[attr] = val;\n\t }\n\t return _.size(changed) ? changed : false;\n\t },\n\t\n\t // Get the previous value of an attribute, recorded at the time the last\n\t // `\"change\"` event was fired.\n\t previous: function(attr) {\n\t if (attr == null || !this._previousAttributes) return null;\n\t return this._previousAttributes[attr];\n\t },\n\t\n\t // Get all of the attributes of the model at the time of the previous\n\t // `\"change\"` event.\n\t previousAttributes: function() {\n\t return _.clone(this._previousAttributes);\n\t },\n\t\n\t // Fetch the model from the server, merging the response with the model's\n\t // local attributes. Any changed attributes will trigger a \"change\" event.\n\t fetch: function(options) {\n\t options = _.extend({parse: true}, options);\n\t var model = this;\n\t var success = options.success;\n\t options.success = function(resp) {\n\t var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n\t if (!model.set(serverAttrs, options)) return false;\n\t if (success) success.call(options.context, model, resp, options);\n\t model.trigger('sync', model, resp, options);\n\t };\n\t wrapError(this, options);\n\t return this.sync('read', this, options);\n\t },\n\t\n\t // Set a hash of model attributes, and sync the model to the server.\n\t // If the server returns an attributes hash that differs, the model's\n\t // state will be `set` again.\n\t save: function(key, val, options) {\n\t // Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t var attrs;\n\t if (key == null || typeof key === 'object') {\n\t attrs = key;\n\t options = val;\n\t } else {\n\t (attrs = {})[key] = val;\n\t }\n\t\n\t options = _.extend({validate: true, parse: true}, options);\n\t var wait = options.wait;\n\t\n\t // If we're not waiting and attributes exist, save acts as\n\t // `set(attr).save(null, opts)` with validation. Otherwise, check if\n\t // the model will be valid when the attributes, if any, are set.\n\t if (attrs && !wait) {\n\t if (!this.set(attrs, options)) return false;\n\t } else if (!this._validate(attrs, options)) {\n\t return false;\n\t }\n\t\n\t // After a successful server-side save, the client is (optionally)\n\t // updated with the server-side state.\n\t var model = this;\n\t var success = options.success;\n\t var attributes = this.attributes;\n\t options.success = function(resp) {\n\t // Ensure attributes are restored during synchronous saves.\n\t model.attributes = attributes;\n\t var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n\t if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n\t if (serverAttrs && !model.set(serverAttrs, options)) return false;\n\t if (success) success.call(options.context, model, resp, options);\n\t model.trigger('sync', model, resp, options);\n\t };\n\t wrapError(this, options);\n\t\n\t // Set temporary attributes if `{wait: true}` to properly find new ids.\n\t if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\t\n\t var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n\t if (method === 'patch' && !options.attrs) options.attrs = attrs;\n\t var xhr = this.sync(method, this, options);\n\t\n\t // Restore attributes.\n\t this.attributes = attributes;\n\t\n\t return xhr;\n\t },\n\t\n\t // Destroy this model on the server if it was already persisted.\n\t // Optimistically removes the model from its collection, if it has one.\n\t // If `wait: true` is passed, waits for the server to respond before removal.\n\t destroy: function(options) {\n\t options = options ? _.clone(options) : {};\n\t var model = this;\n\t var success = options.success;\n\t var wait = options.wait;\n\t\n\t var destroy = function() {\n\t model.stopListening();\n\t model.trigger('destroy', model, model.collection, options);\n\t };\n\t\n\t options.success = function(resp) {\n\t if (wait) destroy();\n\t if (success) success.call(options.context, model, resp, options);\n\t if (!model.isNew()) model.trigger('sync', model, resp, options);\n\t };\n\t\n\t var xhr = false;\n\t if (this.isNew()) {\n\t _.defer(options.success);\n\t } else {\n\t wrapError(this, options);\n\t xhr = this.sync('delete', this, options);\n\t }\n\t if (!wait) destroy();\n\t return xhr;\n\t },\n\t\n\t // Default URL for the model's representation on the server -- if you're\n\t // using Backbone's restful methods, override this to change the endpoint\n\t // that will be called.\n\t url: function() {\n\t var base =\n\t _.result(this, 'urlRoot') ||\n\t _.result(this.collection, 'url') ||\n\t urlError();\n\t if (this.isNew()) return base;\n\t var id = this.get(this.idAttribute);\n\t return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n\t },\n\t\n\t // **parse** converts a response into the hash of attributes to be `set` on\n\t // the model. The default implementation is just to pass the response along.\n\t parse: function(resp, options) {\n\t return resp;\n\t },\n\t\n\t // Create a new model with identical attributes to this one.\n\t clone: function() {\n\t return new this.constructor(this.attributes);\n\t },\n\t\n\t // A model is new if it has never been saved to the server, and lacks an id.\n\t isNew: function() {\n\t return !this.has(this.idAttribute);\n\t },\n\t\n\t // Check if the model is currently in a valid state.\n\t isValid: function(options) {\n\t return this._validate({}, _.extend({}, options, {validate: true}));\n\t },\n\t\n\t // Run validation against the next complete set of model attributes,\n\t // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n\t _validate: function(attrs, options) {\n\t if (!options.validate || !this.validate) return true;\n\t attrs = _.extend({}, this.attributes, attrs);\n\t var error = this.validationError = this.validate(attrs, options) || null;\n\t if (!error) return true;\n\t this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n\t return false;\n\t }\n\t\n\t });\n\t\n\t // Underscore methods that we want to implement on the Model, mapped to the\n\t // number of arguments they take.\n\t var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n\t omit: 0, chain: 1, isEmpty: 1};\n\t\n\t // Mix in each Underscore method as a proxy to `Model#attributes`.\n\t addUnderscoreMethods(Model, modelMethods, 'attributes');\n\t\n\t // Backbone.Collection\n\t // -------------------\n\t\n\t // If models tend to represent a single row of data, a Backbone Collection is\n\t // more analogous to a table full of data ... or a small slice or page of that\n\t // table, or a collection of rows that belong together for a particular reason\n\t // -- all of the messages in this particular folder, all of the documents\n\t // belonging to this particular author, and so on. Collections maintain\n\t // indexes of their models, both in order, and for lookup by `id`.\n\t\n\t // Create a new **Collection**, perhaps to contain a specific type of `model`.\n\t // If a `comparator` is specified, the Collection will maintain\n\t // its models in sort order, as they're added and removed.\n\t var Collection = Backbone.Collection = function(models, options) {\n\t options || (options = {});\n\t if (options.model) this.model = options.model;\n\t if (options.comparator !== void 0) this.comparator = options.comparator;\n\t this._reset();\n\t this.initialize.apply(this, arguments);\n\t if (models) this.reset(models, _.extend({silent: true}, options));\n\t };\n\t\n\t // Default options for `Collection#set`.\n\t var setOptions = {add: true, remove: true, merge: true};\n\t var addOptions = {add: true, remove: false};\n\t\n\t // Splices `insert` into `array` at index `at`.\n\t var splice = function(array, insert, at) {\n\t at = Math.min(Math.max(at, 0), array.length);\n\t var tail = Array(array.length - at);\n\t var length = insert.length;\n\t var i;\n\t for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n\t for (i = 0; i < length; i++) array[i + at] = insert[i];\n\t for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n\t };\n\t\n\t // Define the Collection's inheritable methods.\n\t _.extend(Collection.prototype, Events, {\n\t\n\t // The default model for a collection is just a **Backbone.Model**.\n\t // This should be overridden in most cases.\n\t model: Model,\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // The JSON representation of a Collection is an array of the\n\t // models' attributes.\n\t toJSON: function(options) {\n\t return this.map(function(model) { return model.toJSON(options); });\n\t },\n\t\n\t // Proxy `Backbone.sync` by default.\n\t sync: function() {\n\t return Backbone.sync.apply(this, arguments);\n\t },\n\t\n\t // Add a model, or list of models to the set. `models` may be Backbone\n\t // Models or raw JavaScript objects to be converted to Models, or any\n\t // combination of the two.\n\t add: function(models, options) {\n\t return this.set(models, _.extend({merge: false}, options, addOptions));\n\t },\n\t\n\t // Remove a model, or a list of models from the set.\n\t remove: function(models, options) {\n\t options = _.extend({}, options);\n\t var singular = !_.isArray(models);\n\t models = singular ? [models] : models.slice();\n\t var removed = this._removeModels(models, options);\n\t if (!options.silent && removed.length) {\n\t options.changes = {added: [], merged: [], removed: removed};\n\t this.trigger('update', this, options);\n\t }\n\t return singular ? removed[0] : removed;\n\t },\n\t\n\t // Update a collection by `set`-ing a new list of models, adding new ones,\n\t // removing models that are no longer present, and merging models that\n\t // already exist in the collection, as necessary. Similar to **Model#set**,\n\t // the core operation for updating the data contained by the collection.\n\t set: function(models, options) {\n\t if (models == null) return;\n\t\n\t options = _.extend({}, setOptions, options);\n\t if (options.parse && !this._isModel(models)) {\n\t models = this.parse(models, options) || [];\n\t }\n\t\n\t var singular = !_.isArray(models);\n\t models = singular ? [models] : models.slice();\n\t\n\t var at = options.at;\n\t if (at != null) at = +at;\n\t if (at > this.length) at = this.length;\n\t if (at < 0) at += this.length + 1;\n\t\n\t var set = [];\n\t var toAdd = [];\n\t var toMerge = [];\n\t var toRemove = [];\n\t var modelMap = {};\n\t\n\t var add = options.add;\n\t var merge = options.merge;\n\t var remove = options.remove;\n\t\n\t var sort = false;\n\t var sortable = this.comparator && at == null && options.sort !== false;\n\t var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\t\n\t // Turn bare objects into model references, and prevent invalid models\n\t // from being added.\n\t var model, i;\n\t for (i = 0; i < models.length; i++) {\n\t model = models[i];\n\t\n\t // If a duplicate is found, prevent it from being added and\n\t // optionally merge it into the existing model.\n\t var existing = this.get(model);\n\t if (existing) {\n\t if (merge && model !== existing) {\n\t var attrs = this._isModel(model) ? model.attributes : model;\n\t if (options.parse) attrs = existing.parse(attrs, options);\n\t existing.set(attrs, options);\n\t toMerge.push(existing);\n\t if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n\t }\n\t if (!modelMap[existing.cid]) {\n\t modelMap[existing.cid] = true;\n\t set.push(existing);\n\t }\n\t models[i] = existing;\n\t\n\t // If this is a new, valid model, push it to the `toAdd` list.\n\t } else if (add) {\n\t model = models[i] = this._prepareModel(model, options);\n\t if (model) {\n\t toAdd.push(model);\n\t this._addReference(model, options);\n\t modelMap[model.cid] = true;\n\t set.push(model);\n\t }\n\t }\n\t }\n\t\n\t // Remove stale models.\n\t if (remove) {\n\t for (i = 0; i < this.length; i++) {\n\t model = this.models[i];\n\t if (!modelMap[model.cid]) toRemove.push(model);\n\t }\n\t if (toRemove.length) this._removeModels(toRemove, options);\n\t }\n\t\n\t // See if sorting is needed, update `length` and splice in new models.\n\t var orderChanged = false;\n\t var replace = !sortable && add && remove;\n\t if (set.length && replace) {\n\t orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n\t return m !== set[index];\n\t });\n\t this.models.length = 0;\n\t splice(this.models, set, 0);\n\t this.length = this.models.length;\n\t } else if (toAdd.length) {\n\t if (sortable) sort = true;\n\t splice(this.models, toAdd, at == null ? this.length : at);\n\t this.length = this.models.length;\n\t }\n\t\n\t // Silently sort the collection if appropriate.\n\t if (sort) this.sort({silent: true});\n\t\n\t // Unless silenced, it's time to fire all appropriate add/sort/update events.\n\t if (!options.silent) {\n\t for (i = 0; i < toAdd.length; i++) {\n\t if (at != null) options.index = at + i;\n\t model = toAdd[i];\n\t model.trigger('add', model, this, options);\n\t }\n\t if (sort || orderChanged) this.trigger('sort', this, options);\n\t if (toAdd.length || toRemove.length || toMerge.length) {\n\t options.changes = {\n\t added: toAdd,\n\t removed: toRemove,\n\t merged: toMerge\n\t };\n\t this.trigger('update', this, options);\n\t }\n\t }\n\t\n\t // Return the added (or merged) model (or models).\n\t return singular ? models[0] : models;\n\t },\n\t\n\t // When you have more items than you want to add or remove individually,\n\t // you can reset the entire set with a new list of models, without firing\n\t // any granular `add` or `remove` events. Fires `reset` when finished.\n\t // Useful for bulk operations and optimizations.\n\t reset: function(models, options) {\n\t options = options ? _.clone(options) : {};\n\t for (var i = 0; i < this.models.length; i++) {\n\t this._removeReference(this.models[i], options);\n\t }\n\t options.previousModels = this.models;\n\t this._reset();\n\t models = this.add(models, _.extend({silent: true}, options));\n\t if (!options.silent) this.trigger('reset', this, options);\n\t return models;\n\t },\n\t\n\t // Add a model to the end of the collection.\n\t push: function(model, options) {\n\t return this.add(model, _.extend({at: this.length}, options));\n\t },\n\t\n\t // Remove a model from the end of the collection.\n\t pop: function(options) {\n\t var model = this.at(this.length - 1);\n\t return this.remove(model, options);\n\t },\n\t\n\t // Add a model to the beginning of the collection.\n\t unshift: function(model, options) {\n\t return this.add(model, _.extend({at: 0}, options));\n\t },\n\t\n\t // Remove a model from the beginning of the collection.\n\t shift: function(options) {\n\t var model = this.at(0);\n\t return this.remove(model, options);\n\t },\n\t\n\t // Slice out a sub-array of models from the collection.\n\t slice: function() {\n\t return slice.apply(this.models, arguments);\n\t },\n\t\n\t // Get a model from the set by id, cid, model object with id or cid\n\t // properties, or an attributes object that is transformed through modelId.\n\t get: function(obj) {\n\t if (obj == null) return void 0;\n\t return this._byId[obj] ||\n\t this._byId[this.modelId(obj.attributes || obj)] ||\n\t obj.cid && this._byId[obj.cid];\n\t },\n\t\n\t // Returns `true` if the model is in the collection.\n\t has: function(obj) {\n\t return this.get(obj) != null;\n\t },\n\t\n\t // Get the model at the given index.\n\t at: function(index) {\n\t if (index < 0) index += this.length;\n\t return this.models[index];\n\t },\n\t\n\t // Return models with matching attributes. Useful for simple cases of\n\t // `filter`.\n\t where: function(attrs, first) {\n\t return this[first ? 'find' : 'filter'](attrs);\n\t },\n\t\n\t // Return the first model with matching attributes. Useful for simple cases\n\t // of `find`.\n\t findWhere: function(attrs) {\n\t return this.where(attrs, true);\n\t },\n\t\n\t // Force the collection to re-sort itself. You don't need to call this under\n\t // normal circumstances, as the set will maintain sort order as each item\n\t // is added.\n\t sort: function(options) {\n\t var comparator = this.comparator;\n\t if (!comparator) throw new Error('Cannot sort a set without a comparator');\n\t options || (options = {});\n\t\n\t var length = comparator.length;\n\t if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\t\n\t // Run sort based on type of `comparator`.\n\t if (length === 1 || _.isString(comparator)) {\n\t this.models = this.sortBy(comparator);\n\t } else {\n\t this.models.sort(comparator);\n\t }\n\t if (!options.silent) this.trigger('sort', this, options);\n\t return this;\n\t },\n\t\n\t // Pluck an attribute from each model in the collection.\n\t pluck: function(attr) {\n\t return this.map(attr + '');\n\t },\n\t\n\t // Fetch the default set of models for this collection, resetting the\n\t // collection when they arrive. If `reset: true` is passed, the response\n\t // data will be passed through the `reset` method instead of `set`.\n\t fetch: function(options) {\n\t options = _.extend({parse: true}, options);\n\t var success = options.success;\n\t var collection = this;\n\t options.success = function(resp) {\n\t var method = options.reset ? 'reset' : 'set';\n\t collection[method](resp, options);\n\t if (success) success.call(options.context, collection, resp, options);\n\t collection.trigger('sync', collection, resp, options);\n\t };\n\t wrapError(this, options);\n\t return this.sync('read', this, options);\n\t },\n\t\n\t // Create a new instance of a model in this collection. Add the model to the\n\t // collection immediately, unless `wait: true` is passed, in which case we\n\t // wait for the server to agree.\n\t create: function(model, options) {\n\t options = options ? _.clone(options) : {};\n\t var wait = options.wait;\n\t model = this._prepareModel(model, options);\n\t if (!model) return false;\n\t if (!wait) this.add(model, options);\n\t var collection = this;\n\t var success = options.success;\n\t options.success = function(m, resp, callbackOpts) {\n\t if (wait) collection.add(m, callbackOpts);\n\t if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n\t };\n\t model.save(null, options);\n\t return model;\n\t },\n\t\n\t // **parse** converts a response into a list of models to be added to the\n\t // collection. The default implementation is just to pass it through.\n\t parse: function(resp, options) {\n\t return resp;\n\t },\n\t\n\t // Create a new collection with an identical list of models as this one.\n\t clone: function() {\n\t return new this.constructor(this.models, {\n\t model: this.model,\n\t comparator: this.comparator\n\t });\n\t },\n\t\n\t // Define how to uniquely identify models in the collection.\n\t modelId: function(attrs) {\n\t return attrs[this.model.prototype.idAttribute || 'id'];\n\t },\n\t\n\t // Private method to reset all internal state. Called when the collection\n\t // is first initialized or reset.\n\t _reset: function() {\n\t this.length = 0;\n\t this.models = [];\n\t this._byId = {};\n\t },\n\t\n\t // Prepare a hash of attributes (or other model) to be added to this\n\t // collection.\n\t _prepareModel: function(attrs, options) {\n\t if (this._isModel(attrs)) {\n\t if (!attrs.collection) attrs.collection = this;\n\t return attrs;\n\t }\n\t options = options ? _.clone(options) : {};\n\t options.collection = this;\n\t var model = new this.model(attrs, options);\n\t if (!model.validationError) return model;\n\t this.trigger('invalid', this, model.validationError, options);\n\t return false;\n\t },\n\t\n\t // Internal method called by both remove and set.\n\t _removeModels: function(models, options) {\n\t var removed = [];\n\t for (var i = 0; i < models.length; i++) {\n\t var model = this.get(models[i]);\n\t if (!model) continue;\n\t\n\t var index = this.indexOf(model);\n\t this.models.splice(index, 1);\n\t this.length--;\n\t\n\t // Remove references before triggering 'remove' event to prevent an\n\t // infinite loop. #3693\n\t delete this._byId[model.cid];\n\t var id = this.modelId(model.attributes);\n\t if (id != null) delete this._byId[id];\n\t\n\t if (!options.silent) {\n\t options.index = index;\n\t model.trigger('remove', model, this, options);\n\t }\n\t\n\t removed.push(model);\n\t this._removeReference(model, options);\n\t }\n\t return removed;\n\t },\n\t\n\t // Method for checking whether an object should be considered a model for\n\t // the purposes of adding to the collection.\n\t _isModel: function(model) {\n\t return model instanceof Model;\n\t },\n\t\n\t // Internal method to create a model's ties to a collection.\n\t _addReference: function(model, options) {\n\t this._byId[model.cid] = model;\n\t var id = this.modelId(model.attributes);\n\t if (id != null) this._byId[id] = model;\n\t model.on('all', this._onModelEvent, this);\n\t },\n\t\n\t // Internal method to sever a model's ties to a collection.\n\t _removeReference: function(model, options) {\n\t delete this._byId[model.cid];\n\t var id = this.modelId(model.attributes);\n\t if (id != null) delete this._byId[id];\n\t if (this === model.collection) delete model.collection;\n\t model.off('all', this._onModelEvent, this);\n\t },\n\t\n\t // Internal method called every time a model in the set fires an event.\n\t // Sets need to update their indexes when models change ids. All other\n\t // events simply proxy through. \"add\" and \"remove\" events that originate\n\t // in other collections are ignored.\n\t _onModelEvent: function(event, model, collection, options) {\n\t if (model) {\n\t if ((event === 'add' || event === 'remove') && collection !== this) return;\n\t if (event === 'destroy') this.remove(model, options);\n\t if (event === 'change') {\n\t var prevId = this.modelId(model.previousAttributes());\n\t var id = this.modelId(model.attributes);\n\t if (prevId !== id) {\n\t if (prevId != null) delete this._byId[prevId];\n\t if (id != null) this._byId[id] = model;\n\t }\n\t }\n\t }\n\t this.trigger.apply(this, arguments);\n\t }\n\t\n\t });\n\t\n\t // Underscore methods that we want to implement on the Collection.\n\t // 90% of the core usefulness of Backbone Collections is actually implemented\n\t // right here:\n\t var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n\t foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n\t select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n\t contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n\t head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n\t without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n\t isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n\t sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\t\n\t // Mix in each Underscore method as a proxy to `Collection#models`.\n\t addUnderscoreMethods(Collection, collectionMethods, 'models');\n\t\n\t // Backbone.View\n\t // -------------\n\t\n\t // Backbone Views are almost more convention than they are actual code. A View\n\t // is simply a JavaScript object that represents a logical chunk of UI in the\n\t // DOM. This might be a single item, an entire list, a sidebar or panel, or\n\t // even the surrounding frame which wraps your whole app. Defining a chunk of\n\t // UI as a **View** allows you to define your DOM events declaratively, without\n\t // having to worry about render order ... and makes it easy for the view to\n\t // react to specific changes in the state of your models.\n\t\n\t // Creating a Backbone.View creates its initial element outside of the DOM,\n\t // if an existing element is not provided...\n\t var View = Backbone.View = function(options) {\n\t this.cid = _.uniqueId('view');\n\t _.extend(this, _.pick(options, viewOptions));\n\t this._ensureElement();\n\t this.initialize.apply(this, arguments);\n\t };\n\t\n\t // Cached regex to split keys for `delegate`.\n\t var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\t\n\t // List of view options to be set as properties.\n\t var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\t\n\t // Set up all inheritable **Backbone.View** properties and methods.\n\t _.extend(View.prototype, Events, {\n\t\n\t // The default `tagName` of a View's element is `\"div\"`.\n\t tagName: 'div',\n\t\n\t // jQuery delegate for element lookup, scoped to DOM elements within the\n\t // current view. This should be preferred to global lookups where possible.\n\t $: function(selector) {\n\t return this.$el.find(selector);\n\t },\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // **render** is the core function that your view should override, in order\n\t // to populate its element (`this.el`), with the appropriate HTML. The\n\t // convention is for **render** to always return `this`.\n\t render: function() {\n\t return this;\n\t },\n\t\n\t // Remove this view by taking the element out of the DOM, and removing any\n\t // applicable Backbone.Events listeners.\n\t remove: function() {\n\t this._removeElement();\n\t this.stopListening();\n\t return this;\n\t },\n\t\n\t // Remove this view's element from the document and all event listeners\n\t // attached to it. Exposed for subclasses using an alternative DOM\n\t // manipulation API.\n\t _removeElement: function() {\n\t this.$el.remove();\n\t },\n\t\n\t // Change the view's element (`this.el` property) and re-delegate the\n\t // view's events on the new element.\n\t setElement: function(element) {\n\t this.undelegateEvents();\n\t this._setElement(element);\n\t this.delegateEvents();\n\t return this;\n\t },\n\t\n\t // Creates the `this.el` and `this.$el` references for this view using the\n\t // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n\t // context or an element. Subclasses can override this to utilize an\n\t // alternative DOM manipulation API and are only required to set the\n\t // `this.el` property.\n\t _setElement: function(el) {\n\t this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n\t this.el = this.$el[0];\n\t },\n\t\n\t // Set callbacks, where `this.events` is a hash of\n\t //\n\t // *{\"event selector\": \"callback\"}*\n\t //\n\t // {\n\t // 'mousedown .title': 'edit',\n\t // 'click .button': 'save',\n\t // 'click .open': function(e) { ... }\n\t // }\n\t //\n\t // pairs. Callbacks will be bound to the view, with `this` set properly.\n\t // Uses event delegation for efficiency.\n\t // Omitting the selector binds the event to `this.el`.\n\t delegateEvents: function(events) {\n\t events || (events = _.result(this, 'events'));\n\t if (!events) return this;\n\t this.undelegateEvents();\n\t for (var key in events) {\n\t var method = events[key];\n\t if (!_.isFunction(method)) method = this[method];\n\t if (!method) continue;\n\t var match = key.match(delegateEventSplitter);\n\t this.delegate(match[1], match[2], _.bind(method, this));\n\t }\n\t return this;\n\t },\n\t\n\t // Add a single event listener to the view's element (or a child element\n\t // using `selector`). This only works for delegate-able events: not `focus`,\n\t // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n\t delegate: function(eventName, selector, listener) {\n\t this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n\t return this;\n\t },\n\t\n\t // Clears all callbacks previously bound to the view by `delegateEvents`.\n\t // You usually don't need to use this, but may wish to if you have multiple\n\t // Backbone views attached to the same DOM element.\n\t undelegateEvents: function() {\n\t if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n\t return this;\n\t },\n\t\n\t // A finer-grained `undelegateEvents` for removing a single delegated event.\n\t // `selector` and `listener` are both optional.\n\t undelegate: function(eventName, selector, listener) {\n\t this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n\t return this;\n\t },\n\t\n\t // Produces a DOM element to be assigned to your view. Exposed for\n\t // subclasses using an alternative DOM manipulation API.\n\t _createElement: function(tagName) {\n\t return document.createElement(tagName);\n\t },\n\t\n\t // Ensure that the View has a DOM element to render into.\n\t // If `this.el` is a string, pass it through `$()`, take the first\n\t // matching element, and re-assign it to `el`. Otherwise, create\n\t // an element from the `id`, `className` and `tagName` properties.\n\t _ensureElement: function() {\n\t if (!this.el) {\n\t var attrs = _.extend({}, _.result(this, 'attributes'));\n\t if (this.id) attrs.id = _.result(this, 'id');\n\t if (this.className) attrs['class'] = _.result(this, 'className');\n\t this.setElement(this._createElement(_.result(this, 'tagName')));\n\t this._setAttributes(attrs);\n\t } else {\n\t this.setElement(_.result(this, 'el'));\n\t }\n\t },\n\t\n\t // Set attributes from a hash on this view's element. Exposed for\n\t // subclasses using an alternative DOM manipulation API.\n\t _setAttributes: function(attributes) {\n\t this.$el.attr(attributes);\n\t }\n\t\n\t });\n\t\n\t // Backbone.sync\n\t // -------------\n\t\n\t // Override this function to change the manner in which Backbone persists\n\t // models to the server. You will be passed the type of request, and the\n\t // model in question. By default, makes a RESTful Ajax request\n\t // to the model's `url()`. Some possible customizations could be:\n\t //\n\t // * Use `setTimeout` to batch rapid-fire updates into a single request.\n\t // * Send up the models as XML instead of JSON.\n\t // * Persist models via WebSockets instead of Ajax.\n\t //\n\t // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n\t // as `POST`, with a `_method` parameter containing the true HTTP method,\n\t // as well as all requests with the body as `application/x-www-form-urlencoded`\n\t // instead of `application/json` with the model in a param named `model`.\n\t // Useful when interfacing with server-side languages like **PHP** that make\n\t // it difficult to read the body of `PUT` requests.\n\t Backbone.sync = function(method, model, options) {\n\t var type = methodMap[method];\n\t\n\t // Default options, unless specified.\n\t _.defaults(options || (options = {}), {\n\t emulateHTTP: Backbone.emulateHTTP,\n\t emulateJSON: Backbone.emulateJSON\n\t });\n\t\n\t // Default JSON-request options.\n\t var params = {type: type, dataType: 'json'};\n\t\n\t // Ensure that we have a URL.\n\t if (!options.url) {\n\t params.url = _.result(model, 'url') || urlError();\n\t }\n\t\n\t // Ensure that we have the appropriate request data.\n\t if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t params.contentType = 'application/json';\n\t params.data = JSON.stringify(options.attrs || model.toJSON(options));\n\t }\n\t\n\t // For older servers, emulate JSON by encoding the request into an HTML-form.\n\t if (options.emulateJSON) {\n\t params.contentType = 'application/x-www-form-urlencoded';\n\t params.data = params.data ? {model: params.data} : {};\n\t }\n\t\n\t // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n\t // And an `X-HTTP-Method-Override` header.\n\t if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n\t params.type = 'POST';\n\t if (options.emulateJSON) params.data._method = type;\n\t var beforeSend = options.beforeSend;\n\t options.beforeSend = function(xhr) {\n\t xhr.setRequestHeader('X-HTTP-Method-Override', type);\n\t if (beforeSend) return beforeSend.apply(this, arguments);\n\t };\n\t }\n\t\n\t // Don't process data on a non-GET request.\n\t if (params.type !== 'GET' && !options.emulateJSON) {\n\t params.processData = false;\n\t }\n\t\n\t // Pass along `textStatus` and `errorThrown` from jQuery.\n\t var error = options.error;\n\t options.error = function(xhr, textStatus, errorThrown) {\n\t options.textStatus = textStatus;\n\t options.errorThrown = errorThrown;\n\t if (error) error.call(options.context, xhr, textStatus, errorThrown);\n\t };\n\t\n\t // Make the request, allowing the user to override any Ajax options.\n\t var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n\t model.trigger('request', model, xhr, options);\n\t return xhr;\n\t };\n\t\n\t // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n\t var methodMap = {\n\t 'create': 'POST',\n\t 'update': 'PUT',\n\t 'patch': 'PATCH',\n\t 'delete': 'DELETE',\n\t 'read': 'GET'\n\t };\n\t\n\t // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n\t // Override this if you'd like to use a different library.\n\t Backbone.ajax = function() {\n\t return Backbone.$.ajax.apply(Backbone.$, arguments);\n\t };\n\t\n\t // Backbone.Router\n\t // ---------------\n\t\n\t // Routers map faux-URLs to actions, and fire events when routes are\n\t // matched. Creating a new one sets its `routes` hash, if not set statically.\n\t var Router = Backbone.Router = function(options) {\n\t options || (options = {});\n\t if (options.routes) this.routes = options.routes;\n\t this._bindRoutes();\n\t this.initialize.apply(this, arguments);\n\t };\n\t\n\t // Cached regular expressions for matching named param parts and splatted\n\t // parts of route strings.\n\t var optionalParam = /\\((.*?)\\)/g;\n\t var namedParam = /(\\(\\?)?:\\w+/g;\n\t var splatParam = /\\*\\w+/g;\n\t var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\t\n\t // Set up all inheritable **Backbone.Router** properties and methods.\n\t _.extend(Router.prototype, Events, {\n\t\n\t // Initialize is an empty function by default. Override it with your own\n\t // initialization logic.\n\t initialize: function(){},\n\t\n\t // Manually bind a single named route to a callback. For example:\n\t //\n\t // this.route('search/:query/p:num', 'search', function(query, num) {\n\t // ...\n\t // });\n\t //\n\t route: function(route, name, callback) {\n\t if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n\t if (_.isFunction(name)) {\n\t callback = name;\n\t name = '';\n\t }\n\t if (!callback) callback = this[name];\n\t var router = this;\n\t Backbone.history.route(route, function(fragment) {\n\t var args = router._extractParameters(route, fragment);\n\t if (router.execute(callback, args, name) !== false) {\n\t router.trigger.apply(router, ['route:' + name].concat(args));\n\t router.trigger('route', name, args);\n\t Backbone.history.trigger('route', router, name, args);\n\t }\n\t });\n\t return this;\n\t },\n\t\n\t // Execute a route handler with the provided parameters. This is an\n\t // excellent place to do pre-route setup or post-route cleanup.\n\t execute: function(callback, args, name) {\n\t if (callback) callback.apply(this, args);\n\t },\n\t\n\t // Simple proxy to `Backbone.history` to save a fragment into the history.\n\t navigate: function(fragment, options) {\n\t Backbone.history.navigate(fragment, options);\n\t return this;\n\t },\n\t\n\t // Bind all defined routes to `Backbone.history`. We have to reverse the\n\t // order of the routes here to support behavior where the most general\n\t // routes can be defined at the bottom of the route map.\n\t _bindRoutes: function() {\n\t if (!this.routes) return;\n\t this.routes = _.result(this, 'routes');\n\t var route, routes = _.keys(this.routes);\n\t while ((route = routes.pop()) != null) {\n\t this.route(route, this.routes[route]);\n\t }\n\t },\n\t\n\t // Convert a route string into a regular expression, suitable for matching\n\t // against the current location hash.\n\t _routeToRegExp: function(route) {\n\t route = route.replace(escapeRegExp, '\\\\$&')\n\t .replace(optionalParam, '(?:$1)?')\n\t .replace(namedParam, function(match, optional) {\n\t return optional ? match : '([^/?]+)';\n\t })\n\t .replace(splatParam, '([^?]*?)');\n\t return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n\t },\n\t\n\t // Given a route, and a URL fragment that it matches, return the array of\n\t // extracted decoded parameters. Empty or unmatched parameters will be\n\t // treated as `null` to normalize cross-browser behavior.\n\t _extractParameters: function(route, fragment) {\n\t var params = route.exec(fragment).slice(1);\n\t return _.map(params, function(param, i) {\n\t // Don't decode the search params.\n\t if (i === params.length - 1) return param || null;\n\t return param ? decodeURIComponent(param) : null;\n\t });\n\t }\n\t\n\t });\n\t\n\t // Backbone.History\n\t // ----------------\n\t\n\t // Handles cross-browser history management, based on either\n\t // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n\t // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n\t // and URL fragments. If the browser supports neither (old IE, natch),\n\t // falls back to polling.\n\t var History = Backbone.History = function() {\n\t this.handlers = [];\n\t this.checkUrl = _.bind(this.checkUrl, this);\n\t\n\t // Ensure that `History` can be used outside of the browser.\n\t if (typeof window !== 'undefined') {\n\t this.location = window.location;\n\t this.history = window.history;\n\t }\n\t };\n\t\n\t // Cached regex for stripping a leading hash/slash and trailing space.\n\t var routeStripper = /^[#\\/]|\\s+$/g;\n\t\n\t // Cached regex for stripping leading and trailing slashes.\n\t var rootStripper = /^\\/+|\\/+$/g;\n\t\n\t // Cached regex for stripping urls of hash.\n\t var pathStripper = /#.*$/;\n\t\n\t // Has the history handling already been started?\n\t History.started = false;\n\t\n\t // Set up all inheritable **Backbone.History** properties and methods.\n\t _.extend(History.prototype, Events, {\n\t\n\t // The default interval to poll for hash changes, if necessary, is\n\t // twenty times a second.\n\t interval: 50,\n\t\n\t // Are we at the app root?\n\t atRoot: function() {\n\t var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n\t return path === this.root && !this.getSearch();\n\t },\n\t\n\t // Does the pathname match the root?\n\t matchRoot: function() {\n\t var path = this.decodeFragment(this.location.pathname);\n\t var rootPath = path.slice(0, this.root.length - 1) + '/';\n\t return rootPath === this.root;\n\t },\n\t\n\t // Unicode characters in `location.pathname` are percent encoded so they're\n\t // decoded for comparison. `%25` should not be decoded since it may be part\n\t // of an encoded parameter.\n\t decodeFragment: function(fragment) {\n\t return decodeURI(fragment.replace(/%25/g, '%2525'));\n\t },\n\t\n\t // In IE6, the hash fragment and search params are incorrect if the\n\t // fragment contains `?`.\n\t getSearch: function() {\n\t var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n\t return match ? match[0] : '';\n\t },\n\t\n\t // Gets the true hash value. Cannot use location.hash directly due to bug\n\t // in Firefox where location.hash will always be decoded.\n\t getHash: function(window) {\n\t var match = (window || this).location.href.match(/#(.*)$/);\n\t return match ? match[1] : '';\n\t },\n\t\n\t // Get the pathname and search params, without the root.\n\t getPath: function() {\n\t var path = this.decodeFragment(\n\t this.location.pathname + this.getSearch()\n\t ).slice(this.root.length - 1);\n\t return path.charAt(0) === '/' ? path.slice(1) : path;\n\t },\n\t\n\t // Get the cross-browser normalized URL fragment from the path or hash.\n\t getFragment: function(fragment) {\n\t if (fragment == null) {\n\t if (this._usePushState || !this._wantsHashChange) {\n\t fragment = this.getPath();\n\t } else {\n\t fragment = this.getHash();\n\t }\n\t }\n\t return fragment.replace(routeStripper, '');\n\t },\n\t\n\t // Start the hash change handling, returning `true` if the current URL matches\n\t // an existing route, and `false` otherwise.\n\t start: function(options) {\n\t if (History.started) throw new Error('Backbone.history has already been started');\n\t History.started = true;\n\t\n\t // Figure out the initial configuration. Do we need an iframe?\n\t // Is pushState desired ... is it available?\n\t this.options = _.extend({root: '/'}, this.options, options);\n\t this.root = this.options.root;\n\t this._wantsHashChange = this.options.hashChange !== false;\n\t this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n\t this._useHashChange = this._wantsHashChange && this._hasHashChange;\n\t this._wantsPushState = !!this.options.pushState;\n\t this._hasPushState = !!(this.history && this.history.pushState);\n\t this._usePushState = this._wantsPushState && this._hasPushState;\n\t this.fragment = this.getFragment();\n\t\n\t // Normalize root to always include a leading and trailing slash.\n\t this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\t\n\t // Transition from hashChange to pushState or vice versa if both are\n\t // requested.\n\t if (this._wantsHashChange && this._wantsPushState) {\n\t\n\t // If we've started off with a route from a `pushState`-enabled\n\t // browser, but we're currently in a browser that doesn't support it...\n\t if (!this._hasPushState && !this.atRoot()) {\n\t var rootPath = this.root.slice(0, -1) || '/';\n\t this.location.replace(rootPath + '#' + this.getPath());\n\t // Return immediately as browser will do redirect to new url\n\t return true;\n\t\n\t // Or if we've started out with a hash-based route, but we're currently\n\t // in a browser where it could be `pushState`-based instead...\n\t } else if (this._hasPushState && this.atRoot()) {\n\t this.navigate(this.getHash(), {replace: true});\n\t }\n\t\n\t }\n\t\n\t // Proxy an iframe to handle location events if the browser doesn't\n\t // support the `hashchange` event, HTML5 history, or the user wants\n\t // `hashChange` but not `pushState`.\n\t if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n\t this.iframe = document.createElement('iframe');\n\t this.iframe.src = 'javascript:0';\n\t this.iframe.style.display = 'none';\n\t this.iframe.tabIndex = -1;\n\t var body = document.body;\n\t // Using `appendChild` will throw on IE < 9 if the document is not ready.\n\t var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n\t iWindow.document.open();\n\t iWindow.document.close();\n\t iWindow.location.hash = '#' + this.fragment;\n\t }\n\t\n\t // Add a cross-platform `addEventListener` shim for older browsers.\n\t var addEventListener = window.addEventListener || function(eventName, listener) {\n\t return attachEvent('on' + eventName, listener);\n\t };\n\t\n\t // Depending on whether we're using pushState or hashes, and whether\n\t // 'onhashchange' is supported, determine how we check the URL state.\n\t if (this._usePushState) {\n\t addEventListener('popstate', this.checkUrl, false);\n\t } else if (this._useHashChange && !this.iframe) {\n\t addEventListener('hashchange', this.checkUrl, false);\n\t } else if (this._wantsHashChange) {\n\t this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n\t }\n\t\n\t if (!this.options.silent) return this.loadUrl();\n\t },\n\t\n\t // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n\t // but possibly useful for unit testing Routers.\n\t stop: function() {\n\t // Add a cross-platform `removeEventListener` shim for older browsers.\n\t var removeEventListener = window.removeEventListener || function(eventName, listener) {\n\t return detachEvent('on' + eventName, listener);\n\t };\n\t\n\t // Remove window listeners.\n\t if (this._usePushState) {\n\t removeEventListener('popstate', this.checkUrl, false);\n\t } else if (this._useHashChange && !this.iframe) {\n\t removeEventListener('hashchange', this.checkUrl, false);\n\t }\n\t\n\t // Clean up the iframe if necessary.\n\t if (this.iframe) {\n\t document.body.removeChild(this.iframe);\n\t this.iframe = null;\n\t }\n\t\n\t // Some environments will throw when clearing an undefined interval.\n\t if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n\t History.started = false;\n\t },\n\t\n\t // Add a route to be tested when the fragment changes. Routes added later\n\t // may override previous routes.\n\t route: function(route, callback) {\n\t this.handlers.unshift({route: route, callback: callback});\n\t },\n\t\n\t // Checks the current URL to see if it has changed, and if it has,\n\t // calls `loadUrl`, normalizing across the hidden iframe.\n\t checkUrl: function(e) {\n\t var current = this.getFragment();\n\t\n\t // If the user pressed the back button, the iframe's hash will have\n\t // changed and we should use that for comparison.\n\t if (current === this.fragment && this.iframe) {\n\t current = this.getHash(this.iframe.contentWindow);\n\t }\n\t\n\t if (current === this.fragment) return false;\n\t if (this.iframe) this.navigate(current);\n\t this.loadUrl();\n\t },\n\t\n\t // Attempt to load the current URL fragment. If a route succeeds with a\n\t // match, returns `true`. If no defined routes matches the fragment,\n\t // returns `false`.\n\t loadUrl: function(fragment) {\n\t // If the root doesn't match, no routes can match either.\n\t if (!this.matchRoot()) return false;\n\t fragment = this.fragment = this.getFragment(fragment);\n\t return _.some(this.handlers, function(handler) {\n\t if (handler.route.test(fragment)) {\n\t handler.callback(fragment);\n\t return true;\n\t }\n\t });\n\t },\n\t\n\t // Save a fragment into the hash history, or replace the URL state if the\n\t // 'replace' option is passed. You are responsible for properly URL-encoding\n\t // the fragment in advance.\n\t //\n\t // The options object can contain `trigger: true` if you wish to have the\n\t // route callback be fired (not usually desirable), or `replace: true`, if\n\t // you wish to modify the current URL without adding an entry to the history.\n\t navigate: function(fragment, options) {\n\t if (!History.started) return false;\n\t if (!options || options === true) options = {trigger: !!options};\n\t\n\t // Normalize the fragment.\n\t fragment = this.getFragment(fragment || '');\n\t\n\t // Don't include a trailing slash on the root.\n\t var rootPath = this.root;\n\t if (fragment === '' || fragment.charAt(0) === '?') {\n\t rootPath = rootPath.slice(0, -1) || '/';\n\t }\n\t var url = rootPath + fragment;\n\t\n\t // Strip the hash and decode for matching.\n\t fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\t\n\t if (this.fragment === fragment) return;\n\t this.fragment = fragment;\n\t\n\t // If pushState is available, we use it to set the fragment as a real URL.\n\t if (this._usePushState) {\n\t this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\t\n\t // If hash changes haven't been explicitly disabled, update the hash\n\t // fragment to store history.\n\t } else if (this._wantsHashChange) {\n\t this._updateHash(this.location, fragment, options.replace);\n\t if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n\t var iWindow = this.iframe.contentWindow;\n\t\n\t // Opening and closing the iframe tricks IE7 and earlier to push a\n\t // history entry on hash-tag change. When replace is true, we don't\n\t // want this.\n\t if (!options.replace) {\n\t iWindow.document.open();\n\t iWindow.document.close();\n\t }\n\t\n\t this._updateHash(iWindow.location, fragment, options.replace);\n\t }\n\t\n\t // If you've told us that you explicitly don't want fallback hashchange-\n\t // based history, then `navigate` becomes a page refresh.\n\t } else {\n\t return this.location.assign(url);\n\t }\n\t if (options.trigger) return this.loadUrl(fragment);\n\t },\n\t\n\t // Update the hash location, either replacing the current entry, or adding\n\t // a new one to the browser history.\n\t _updateHash: function(location, fragment, replace) {\n\t if (replace) {\n\t var href = location.href.replace(/(javascript:|#).*$/, '');\n\t location.replace(href + '#' + fragment);\n\t } else {\n\t // Some browsers require that `hash` contains a leading #.\n\t location.hash = '#' + fragment;\n\t }\n\t }\n\t\n\t });\n\t\n\t // Create the default Backbone.history.\n\t Backbone.history = new History;\n\t\n\t // Helpers\n\t // -------\n\t\n\t // Helper function to correctly set up the prototype chain for subclasses.\n\t // Similar to `goog.inherits`, but uses a hash of prototype properties and\n\t // class properties to be extended.\n\t var extend = function(protoProps, staticProps) {\n\t var parent = this;\n\t var child;\n\t\n\t // The constructor function for the new subclass is either defined by you\n\t // (the \"constructor\" property in your `extend` definition), or defaulted\n\t // by us to simply call the parent constructor.\n\t if (protoProps && _.has(protoProps, 'constructor')) {\n\t child = protoProps.constructor;\n\t } else {\n\t child = function(){ return parent.apply(this, arguments); };\n\t }\n\t\n\t // Add static properties to the constructor function, if supplied.\n\t _.extend(child, parent, staticProps);\n\t\n\t // Set the prototype chain to inherit from `parent`, without calling\n\t // `parent`'s constructor function and add the prototype properties.\n\t child.prototype = _.create(parent.prototype, protoProps);\n\t child.prototype.constructor = child;\n\t\n\t // Set a convenience property in case the parent's prototype is needed\n\t // later.\n\t child.__super__ = parent.prototype;\n\t\n\t return child;\n\t };\n\t\n\t // Set up inheritance for the model, collection, router, view and history.\n\t Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\t\n\t // Throw an error when a URL is needed, and none is supplied.\n\t var urlError = function() {\n\t throw new Error('A \"url\" property or function must be specified');\n\t };\n\t\n\t // Wrap an optional error callback with a fallback error event.\n\t var wrapError = function(model, options) {\n\t var error = options.error;\n\t options.error = function(resp) {\n\t if (error) error.call(options.context, model, resp, options);\n\t model.trigger('error', model, resp, options);\n\t };\n\t };\n\t\n\t return Backbone;\n\t});\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.extend = extend;\n\texports.indexOf = indexOf;\n\texports.escapeExpression = escapeExpression;\n\texports.isEmpty = isEmpty;\n\texports.createFrame = createFrame;\n\texports.blockParams = blockParams;\n\texports.appendContextPath = appendContextPath;\n\tvar escape = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`',\n\t '=': '='\n\t};\n\t\n\tvar badChars = /[&<>\"'`=]/g,\n\t possible = /[&<>\"'`=]/;\n\t\n\tfunction escapeChar(chr) {\n\t return escape[chr];\n\t}\n\t\n\tfunction extend(obj /* , ...source */) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t for (var key in arguments[i]) {\n\t if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n\t obj[key] = arguments[i][key];\n\t }\n\t }\n\t }\n\t\n\t return obj;\n\t}\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\texports.toString = toString;\n\t// Sourced from lodash\n\t// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n\t/* eslint-disable func-style */\n\tvar isFunction = function isFunction(value) {\n\t return typeof value === 'function';\n\t};\n\t// fallback for older versions of Chrome and Safari\n\t/* istanbul ignore next */\n\tif (isFunction(/x/)) {\n\t exports.isFunction = isFunction = function (value) {\n\t return typeof value === 'function' && toString.call(value) === '[object Function]';\n\t };\n\t}\n\texports.isFunction = isFunction;\n\t\n\t/* eslint-enable func-style */\n\t\n\t/* istanbul ignore next */\n\tvar isArray = Array.isArray || function (value) {\n\t return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n\t};\n\t\n\texports.isArray = isArray;\n\t// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\t\n\tfunction indexOf(array, value) {\n\t for (var i = 0, len = array.length; i < len; i++) {\n\t if (array[i] === value) {\n\t return i;\n\t }\n\t }\n\t return -1;\n\t}\n\t\n\tfunction escapeExpression(string) {\n\t if (typeof string !== 'string') {\n\t // don't escape SafeStrings, since they're already safe\n\t if (string && string.toHTML) {\n\t return string.toHTML();\n\t } else if (string == null) {\n\t return '';\n\t } else if (!string) {\n\t return string + '';\n\t }\n\t\n\t // Force a string conversion as this will be done by the append regardless and\n\t // the regex test will do this transparently behind the scenes, causing issues if\n\t // an object's to string has escaped characters in it.\n\t string = '' + string;\n\t }\n\t\n\t if (!possible.test(string)) {\n\t return string;\n\t }\n\t return string.replace(badChars, escapeChar);\n\t}\n\t\n\tfunction isEmpty(value) {\n\t if (!value && value !== 0) {\n\t return true;\n\t } else if (isArray(value) && value.length === 0) {\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t}\n\t\n\tfunction createFrame(object) {\n\t var frame = extend({}, object);\n\t frame._parent = object;\n\t return frame;\n\t}\n\t\n\tfunction blockParams(params, ids) {\n\t params.path = ids;\n\t return params;\n\t}\n\t\n\tfunction appendContextPath(contextPath, id) {\n\t return (contextPath ? contextPath + '.' : '') + id;\n\t}\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQ3ZCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRTdCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFtQjtBQUMzQyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQUlNLFVBQVUsR0FKaEIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUJBQW1CLENBQUM7R0FDcEYsQ0FBQztDQUNIO1FBQ08sVUFBVSxHQUFWLFVBQVU7Ozs7O0FBSVgsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFTLEtBQUssRUFBRTtBQUN0RCxTQUFPLEFBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUFHLEtBQUssQ0FBQztDQUNqRyxDQUFDOzs7OztBQUdLLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUdNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUFFLFdBQU8sTUFBTSxDQUFDO0dBQUU7QUFDOUMsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iai8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydCB7aXNGdW5jdGlvbn07XG4vKiBlc2xpbnQtZW5hYmxlIGZ1bmMtc3R5bGUgKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19\n\n\n/***/ },\n/* 4 */,\n/* 5 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\t\n\tfunction Exception(message, node) {\n\t var loc = node && node.loc,\n\t line = undefined,\n\t column = undefined;\n\t if (loc) {\n\t line = loc.start.line;\n\t column = loc.start.column;\n\t\n\t message += ' - ' + line + ':' + column;\n\t }\n\t\n\t var tmp = Error.prototype.constructor.call(this, message);\n\t\n\t // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n\t for (var idx = 0; idx < errorProps.length; idx++) {\n\t this[errorProps[idx]] = tmp[errorProps[idx]];\n\t }\n\t\n\t /* istanbul ignore else */\n\t if (Error.captureStackTrace) {\n\t Error.captureStackTrace(this, Exception);\n\t }\n\t\n\t if (loc) {\n\t this.lineNumber = line;\n\t this.column = column;\n\t }\n\t}\n\t\n\tException.prototype = new Error();\n\t\n\texports['default'] = Exception;\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsSUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbkcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDdEIsSUFBSSxZQUFBO01BQ0osTUFBTSxZQUFBLENBQUM7QUFDWCxNQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBRTFCLFdBQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7R0FDeEM7O0FBRUQsTUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFELE9BQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2hELFFBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDOUM7OztBQUdELE1BQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztHQUN0QjtDQUNGOztBQUVELFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7cUJBRW5CLFNBQVMiLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgbGV0IGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lLFxuICAgICAgY29sdW1uO1xuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIGxldCB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgaWYgKGxvYykge1xuICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n\n\n/***/ },\n/* 6 */,\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(someKey, silent, parent) {\n\t var gid, match, reg;\n\t if (silent == null) {\n\t silent = false;\n\t }\n\t if (parent == null) {\n\t parent = null;\n\t }\n\t reg = new RegExp('spreadsheets\\/d\\/([^\\/]+)[^#]*(?:#.*gid=([0-9]+).*)?');\n\t match = reg.exec(someKey);\n\t if (match) {\n\t if (match[2]) {\n\t gid = match[2];\n\t }\n\t return [match[1], gid];\n\t }\n\t reg = new RegExp('([0-9]+)');\n\t match = reg.exec(someKey);\n\t if (match && parent) {\n\t parent = parent.split('/');\n\t if (match[1]) {\n\t gid = match[1];\n\t }\n\t return [parent[0], gid];\n\t }\n\t reg = new RegExp('([^\\/]+)(?:\\/([0-9]+))?');\n\t match = reg.exec(someKey);\n\t if (match) {\n\t if (match[2]) {\n\t gid = match[2];\n\t }\n\t return [match[1], gid];\n\t }\n\t if (silent) {\n\t return false;\n\t }\n\t alert(\"Ungültige Datenquelle: In '\" + someKey + \"' konnte nicht der Tabellen-Key gefunden werden!\");\n\t return [\"\", 0];\n\t};\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, ConstructionList, DataSource, keyNormalizer,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tConstructionList = __webpack_require__(15);\n\t\n\tkeyNormalizer = __webpack_require__(7);\n\t\n\tmodule.exports = DataSource = (function(superClass) {\n\t extend(DataSource, superClass);\n\t\n\t function DataSource() {\n\t return DataSource.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t DataSource.prototype.app = null;\n\t\n\t DataSource.prototype.fetched = false;\n\t\n\t DataSource.prototype.dataTable = null;\n\t\n\t DataSource.prototype.columns = {\n\t sheet: \"Blatt-Link (gid)\",\n\t name: \"Konstruktion\",\n\t desc: \"Beschreibung\"\n\t };\n\t\n\t DataSource.prototype.idAttribute = \"source\";\n\t\n\t DataSource.prototype.initialize = function(attributes, options) {\n\t this.app = options.collection.app;\n\t return this.set('constructions', new ConstructionList([], {\n\t app: this.app\n\t }));\n\t };\n\t\n\t DataSource.prototype.setSelected = function(cb) {\n\t this.collection.setSelected(this);\n\t if (!this.fetched) {\n\t return this.fetch({\n\t success: (function(_this) {\n\t return function() {\n\t _this.fetched = true;\n\t if (cb) {\n\t return cb(_this);\n\t }\n\t };\n\t })(this)\n\t });\n\t } else {\n\t if (cb) {\n\t return cb(this);\n\t }\n\t }\n\t };\n\t\n\t DataSource.prototype.set = function(attr, opts) {\n\t if (attr.source) {\n\t attr.source = keyNormalizer(attr.source).join('/');\n\t }\n\t return Backbone.Model.prototype.set.call(this, attr, opts);\n\t };\n\t\n\t DataSource.prototype.parse = function(resp) {\n\t var c, d, data, firstDataRow, i, importer, isConstructTable, j, k, r, ref, ref1, ref2;\n\t this.dataTable = resp.getDataTable();\n\t firstDataRow = this.dataTable.getColumnLabel(0).length ? 0 : 1;\n\t isConstructTable = firstDataRow === 0;\n\t for (k in this.columns) {\n\t if (this.columns[k] === this.dataTable.getColumnLabel(0)) {\n\t isConstructTable = false;\n\t }\n\t }\n\t if (isConstructTable) {\n\t return {\n\t constructions: new ConstructionList([\n\t {\n\t name: \"Konstruktion\",\n\t desc: \"\",\n\t sheet: this.id\n\t }\n\t ])\n\t };\n\t }\n\t data = [];\n\t for (r = i = ref = firstDataRow, ref1 = this.dataTable.getNumberOfRows(); ref <= ref1 ? i < ref1 : i > ref1; r = ref <= ref1 ? ++i : --i) {\n\t d = {};\n\t for (k in this.columns) {\n\t importer = function(v) {\n\t return v;\n\t };\n\t if (k === \"sheet\") {\n\t importer = (function(_this) {\n\t return function(v) {\n\t return [_this.id, keyNormalizer(v, false, _this.id).join('/')].join('/');\n\t };\n\t })(this);\n\t }\n\t for (c = j = 0, ref2 = this.dataTable.getNumberOfColumns(); 0 <= ref2 ? j < ref2 : j > ref2; c = 0 <= ref2 ? ++j : --j) {\n\t if ((firstDataRow && this.dataTable.getValue(0, c) === this.columns[k]) || this.dataTable.getColumnLabel(c) === this.columns[k]) {\n\t d[k] = importer(this.dataTable.getValue(r, c));\n\t }\n\t }\n\t if (!d[k]) {\n\t alert(\"Übersichtstabelle: Spalte '\" + this.columns[k] + \"' wurde nicht in der Tabelle gefunden!\");\n\t return;\n\t }\n\t }\n\t data.push(d);\n\t }\n\t console.log(\"DataSource: loaded construction list: \", data);\n\t return {\n\t constructions: new ConstructionList(data, {\n\t app: this.app\n\t })\n\t };\n\t };\n\t\n\t return DataSource;\n\t\n\t})(Backbone.Model);\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.HandlebarsEnvironment = HandlebarsEnvironment;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\tvar _exception = __webpack_require__(5);\n\t\n\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\tvar _helpers = __webpack_require__(32);\n\t\n\tvar _decorators = __webpack_require__(30);\n\t\n\tvar _logger = __webpack_require__(40);\n\t\n\tvar _logger2 = _interopRequireDefault(_logger);\n\t\n\tvar VERSION = '4.0.5';\n\texports.VERSION = VERSION;\n\tvar COMPILER_REVISION = 7;\n\t\n\texports.COMPILER_REVISION = COMPILER_REVISION;\n\tvar REVISION_CHANGES = {\n\t 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n\t 2: '== 1.0.0-rc.3',\n\t 3: '== 1.0.0-rc.4',\n\t 4: '== 1.x.x',\n\t 5: '== 2.0.0-alpha.x',\n\t 6: '>= 2.0.0-beta.1',\n\t 7: '>= 4.0.0'\n\t};\n\t\n\texports.REVISION_CHANGES = REVISION_CHANGES;\n\tvar objectType = '[object Object]';\n\t\n\tfunction HandlebarsEnvironment(helpers, partials, decorators) {\n\t this.helpers = helpers || {};\n\t this.partials = partials || {};\n\t this.decorators = decorators || {};\n\t\n\t _helpers.registerDefaultHelpers(this);\n\t _decorators.registerDefaultDecorators(this);\n\t}\n\t\n\tHandlebarsEnvironment.prototype = {\n\t constructor: HandlebarsEnvironment,\n\t\n\t logger: _logger2['default'],\n\t log: _logger2['default'].log,\n\t\n\t registerHelper: function registerHelper(name, fn) {\n\t if (_utils.toString.call(name) === objectType) {\n\t if (fn) {\n\t throw new _exception2['default']('Arg not supported with multiple helpers');\n\t }\n\t _utils.extend(this.helpers, name);\n\t } else {\n\t this.helpers[name] = fn;\n\t }\n\t },\n\t unregisterHelper: function unregisterHelper(name) {\n\t delete this.helpers[name];\n\t },\n\t\n\t registerPartial: function registerPartial(name, partial) {\n\t if (_utils.toString.call(name) === objectType) {\n\t _utils.extend(this.partials, name);\n\t } else {\n\t if (typeof partial === 'undefined') {\n\t throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n\t }\n\t this.partials[name] = partial;\n\t }\n\t },\n\t unregisterPartial: function unregisterPartial(name) {\n\t delete this.partials[name];\n\t },\n\t\n\t registerDecorator: function registerDecorator(name, fn) {\n\t if (_utils.toString.call(name) === objectType) {\n\t if (fn) {\n\t throw new _exception2['default']('Arg not supported with multiple decorators');\n\t }\n\t _utils.extend(this.decorators, name);\n\t } else {\n\t this.decorators[name] = fn;\n\t }\n\t },\n\t unregisterDecorator: function unregisterDecorator(name) {\n\t delete this.decorators[name];\n\t }\n\t};\n\t\n\tvar log = _logger2['default'].log;\n\t\n\texports.log = log;\n\texports.createFrame = _utils.createFrame;\n\texports.logger = _logger2['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQTRDLFNBQVM7O3lCQUMvQixhQUFhOzs7O3VCQUNFLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNuQyxVQUFVOzs7O0FBRXRCLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxVQUFVO0NBQ2QsQ0FBQzs7O0FBRUYsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFNBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsTUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLE1BQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixNQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGtDQUF1QixJQUFJLENBQUMsQ0FBQztBQUM3Qix3Q0FBMEIsSUFBSSxDQUFDLENBQUM7Q0FDakM7O0FBRUQscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLGFBQVcsRUFBRSxxQkFBcUI7O0FBRWxDLFFBQU0scUJBQVE7QUFDZCxLQUFHLEVBQUUsb0JBQU8sR0FBRzs7QUFFZixnQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDakMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQUUsY0FBTSwyQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO09BQUU7QUFDM0Usb0JBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QixNQUFNO0FBQ0wsVUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDekI7R0FDRjtBQUNELGtCQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDM0I7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFFBQUksZ0JBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdCLE1BQU07QUFDTCxVQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNsQyxjQUFNLHlFQUEwRCxJQUFJLG9CQUFpQixDQUFDO09BQ3ZGO0FBQ0QsVUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDL0I7R0FDRjtBQUNELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxXQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0FBRUQsbUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFBRSxjQUFNLDJCQUFjLDRDQUE0QyxDQUFDLENBQUM7T0FBRTtBQUM5RSxvQkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtHQUNGO0FBQ0QscUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM5QjtDQUNGLENBQUM7O0FBRUssSUFBSSxHQUFHLEdBQUcsb0JBQU8sR0FBRyxDQUFDOzs7UUFFcEIsV0FBVztRQUFFLE1BQU0iLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlRnJhbWUsIGV4dGVuZCwgdG9TdHJpbmd9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdEhlbHBlcnN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnN9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnNC4wLjUnO1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAnXG59O1xuXG5jb25zdCBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBsb2dnZXIsXG4gIGxvZzogbG9nZ2VyLmxvZyxcblxuICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgZXh0ZW5kKHRoaXMucGFydGlhbHMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oYEF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIiR7bmFtZX1cIiBhcyB1bmRlZmluZWRgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgfVxufTtcblxuZXhwb3J0IGxldCBsb2cgPSBsb2dnZXIubG9nO1xuXG5leHBvcnQge2NyZWF0ZUZyYW1lLCBsb2dnZXJ9O1xuIl19\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Create a simple path alias to allow browserify to resolve\n\t// the runtime on a supported path.\n\tmodule.exports = __webpack_require__(29)['default'];\n\n\n/***/ },\n/* 11 */,\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3\n\t// http://underscorejs.org\n\t// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t// Underscore may be freely distributed under the MIT license.\n\t\n\t(function() {\n\t\n\t // Baseline setup\n\t // --------------\n\t\n\t // Establish the root object, `window` in the browser, or `exports` on the server.\n\t var root = this;\n\t\n\t // Save the previous value of the `_` variable.\n\t var previousUnderscore = root._;\n\t\n\t // Save bytes in the minified (but not gzipped) version:\n\t var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\t\n\t // Create quick reference variables for speed access to core prototypes.\n\t var\n\t push = ArrayProto.push,\n\t slice = ArrayProto.slice,\n\t toString = ObjProto.toString,\n\t hasOwnProperty = ObjProto.hasOwnProperty;\n\t\n\t // All **ECMAScript 5** native function implementations that we hope to use\n\t // are declared here.\n\t var\n\t nativeIsArray = Array.isArray,\n\t nativeKeys = Object.keys,\n\t nativeBind = FuncProto.bind,\n\t nativeCreate = Object.create;\n\t\n\t // Naked function reference for surrogate-prototype-swapping.\n\t var Ctor = function(){};\n\t\n\t // Create a safe reference to the Underscore object for use below.\n\t var _ = function(obj) {\n\t if (obj instanceof _) return obj;\n\t if (!(this instanceof _)) return new _(obj);\n\t this._wrapped = obj;\n\t };\n\t\n\t // Export the Underscore object for **Node.js**, with\n\t // backwards-compatibility for the old `require()` API. If we're in\n\t // the browser, add `_` as a global object.\n\t if (true) {\n\t if (typeof module !== 'undefined' && module.exports) {\n\t exports = module.exports = _;\n\t }\n\t exports._ = _;\n\t } else {\n\t root._ = _;\n\t }\n\t\n\t // Current version.\n\t _.VERSION = '1.8.3';\n\t\n\t // Internal function that returns an efficient (for current engines) version\n\t // of the passed-in callback, to be repeatedly applied in other Underscore\n\t // functions.\n\t var optimizeCb = function(func, context, argCount) {\n\t if (context === void 0) return func;\n\t switch (argCount == null ? 3 : argCount) {\n\t case 1: return function(value) {\n\t return func.call(context, value);\n\t };\n\t case 2: return function(value, other) {\n\t return func.call(context, value, other);\n\t };\n\t case 3: return function(value, index, collection) {\n\t return func.call(context, value, index, collection);\n\t };\n\t case 4: return function(accumulator, value, index, collection) {\n\t return func.call(context, accumulator, value, index, collection);\n\t };\n\t }\n\t return function() {\n\t return func.apply(context, arguments);\n\t };\n\t };\n\t\n\t // A mostly-internal function to generate callbacks that can be applied\n\t // to each element in a collection, returning the desired result — either\n\t // identity, an arbitrary callback, a property matcher, or a property accessor.\n\t var cb = function(value, context, argCount) {\n\t if (value == null) return _.identity;\n\t if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n\t if (_.isObject(value)) return _.matcher(value);\n\t return _.property(value);\n\t };\n\t _.iteratee = function(value, context) {\n\t return cb(value, context, Infinity);\n\t };\n\t\n\t // An internal function for creating assigner functions.\n\t var createAssigner = function(keysFunc, undefinedOnly) {\n\t return function(obj) {\n\t var length = arguments.length;\n\t if (length < 2 || obj == null) return obj;\n\t for (var index = 1; index < length; index++) {\n\t var source = arguments[index],\n\t keys = keysFunc(source),\n\t l = keys.length;\n\t for (var i = 0; i < l; i++) {\n\t var key = keys[i];\n\t if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n\t }\n\t }\n\t return obj;\n\t };\n\t };\n\t\n\t // An internal function for creating a new object that inherits from another.\n\t var baseCreate = function(prototype) {\n\t if (!_.isObject(prototype)) return {};\n\t if (nativeCreate) return nativeCreate(prototype);\n\t Ctor.prototype = prototype;\n\t var result = new Ctor;\n\t Ctor.prototype = null;\n\t return result;\n\t };\n\t\n\t var property = function(key) {\n\t return function(obj) {\n\t return obj == null ? void 0 : obj[key];\n\t };\n\t };\n\t\n\t // Helper for collection methods to determine whether a collection\n\t // should be iterated as an array or as an object\n\t // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n\t // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n\t var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\t var getLength = property('length');\n\t var isArrayLike = function(collection) {\n\t var length = getLength(collection);\n\t return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n\t };\n\t\n\t // Collection Functions\n\t // --------------------\n\t\n\t // The cornerstone, an `each` implementation, aka `forEach`.\n\t // Handles raw objects in addition to array-likes. Treats all\n\t // sparse array-likes as if they were dense.\n\t _.each = _.forEach = function(obj, iteratee, context) {\n\t iteratee = optimizeCb(iteratee, context);\n\t var i, length;\n\t if (isArrayLike(obj)) {\n\t for (i = 0, length = obj.length; i < length; i++) {\n\t iteratee(obj[i], i, obj);\n\t }\n\t } else {\n\t var keys = _.keys(obj);\n\t for (i = 0, length = keys.length; i < length; i++) {\n\t iteratee(obj[keys[i]], keys[i], obj);\n\t }\n\t }\n\t return obj;\n\t };\n\t\n\t // Return the results of applying the iteratee to each element.\n\t _.map = _.collect = function(obj, iteratee, context) {\n\t iteratee = cb(iteratee, context);\n\t var keys = !isArrayLike(obj) && _.keys(obj),\n\t length = (keys || obj).length,\n\t results = Array(length);\n\t for (var index = 0; index < length; index++) {\n\t var currentKey = keys ? keys[index] : index;\n\t results[index] = iteratee(obj[currentKey], currentKey, obj);\n\t }\n\t return results;\n\t };\n\t\n\t // Create a reducing function iterating left or right.\n\t function createReduce(dir) {\n\t // Optimized iterator function as using arguments.length\n\t // in the main function will deoptimize the, see #1991.\n\t function iterator(obj, iteratee, memo, keys, index, length) {\n\t for (; index >= 0 && index < length; index += dir) {\n\t var currentKey = keys ? keys[index] : index;\n\t memo = iteratee(memo, obj[currentKey], currentKey, obj);\n\t }\n\t return memo;\n\t }\n\t\n\t return function(obj, iteratee, memo, context) {\n\t iteratee = optimizeCb(iteratee, context, 4);\n\t var keys = !isArrayLike(obj) && _.keys(obj),\n\t length = (keys || obj).length,\n\t index = dir > 0 ? 0 : length - 1;\n\t // Determine the initial value if none is provided.\n\t if (arguments.length < 3) {\n\t memo = obj[keys ? keys[index] : index];\n\t index += dir;\n\t }\n\t return iterator(obj, iteratee, memo, keys, index, length);\n\t };\n\t }\n\t\n\t // **Reduce** builds up a single result from a list of values, aka `inject`,\n\t // or `foldl`.\n\t _.reduce = _.foldl = _.inject = createReduce(1);\n\t\n\t // The right-associative version of reduce, also known as `foldr`.\n\t _.reduceRight = _.foldr = createReduce(-1);\n\t\n\t // Return the first value which passes a truth test. Aliased as `detect`.\n\t _.find = _.detect = function(obj, predicate, context) {\n\t var key;\n\t if (isArrayLike(obj)) {\n\t key = _.findIndex(obj, predicate, context);\n\t } else {\n\t key = _.findKey(obj, predicate, context);\n\t }\n\t if (key !== void 0 && key !== -1) return obj[key];\n\t };\n\t\n\t // Return all the elements that pass a truth test.\n\t // Aliased as `select`.\n\t _.filter = _.select = function(obj, predicate, context) {\n\t var results = [];\n\t predicate = cb(predicate, context);\n\t _.each(obj, function(value, index, list) {\n\t if (predicate(value, index, list)) results.push(value);\n\t });\n\t return results;\n\t };\n\t\n\t // Return all the elements for which a truth test fails.\n\t _.reject = function(obj, predicate, context) {\n\t return _.filter(obj, _.negate(cb(predicate)), context);\n\t };\n\t\n\t // Determine whether all of the elements match a truth test.\n\t // Aliased as `all`.\n\t _.every = _.all = function(obj, predicate, context) {\n\t predicate = cb(predicate, context);\n\t var keys = !isArrayLike(obj) && _.keys(obj),\n\t length = (keys || obj).length;\n\t for (var index = 0; index < length; index++) {\n\t var currentKey = keys ? keys[index] : index;\n\t if (!predicate(obj[currentKey], currentKey, obj)) return false;\n\t }\n\t return true;\n\t };\n\t\n\t // Determine if at least one element in the object matches a truth test.\n\t // Aliased as `any`.\n\t _.some = _.any = function(obj, predicate, context) {\n\t predicate = cb(predicate, context);\n\t var keys = !isArrayLike(obj) && _.keys(obj),\n\t length = (keys || obj).length;\n\t for (var index = 0; index < length; index++) {\n\t var currentKey = keys ? keys[index] : index;\n\t if (predicate(obj[currentKey], currentKey, obj)) return true;\n\t }\n\t return false;\n\t };\n\t\n\t // Determine if the array or object contains a given item (using `===`).\n\t // Aliased as `includes` and `include`.\n\t _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n\t if (!isArrayLike(obj)) obj = _.values(obj);\n\t if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n\t return _.indexOf(obj, item, fromIndex) >= 0;\n\t };\n\t\n\t // Invoke a method (with arguments) on every item in a collection.\n\t _.invoke = function(obj, method) {\n\t var args = slice.call(arguments, 2);\n\t var isFunc = _.isFunction(method);\n\t return _.map(obj, function(value) {\n\t var func = isFunc ? method : value[method];\n\t return func == null ? func : func.apply(value, args);\n\t });\n\t };\n\t\n\t // Convenience version of a common use case of `map`: fetching a property.\n\t _.pluck = function(obj, key) {\n\t return _.map(obj, _.property(key));\n\t };\n\t\n\t // Convenience version of a common use case of `filter`: selecting only objects\n\t // containing specific `key:value` pairs.\n\t _.where = function(obj, attrs) {\n\t return _.filter(obj, _.matcher(attrs));\n\t };\n\t\n\t // Convenience version of a common use case of `find`: getting the first object\n\t // containing specific `key:value` pairs.\n\t _.findWhere = function(obj, attrs) {\n\t return _.find(obj, _.matcher(attrs));\n\t };\n\t\n\t // Return the maximum element (or element-based computation).\n\t _.max = function(obj, iteratee, context) {\n\t var result = -Infinity, lastComputed = -Infinity,\n\t value, computed;\n\t if (iteratee == null && obj != null) {\n\t obj = isArrayLike(obj) ? obj : _.values(obj);\n\t for (var i = 0, length = obj.length; i < length; i++) {\n\t value = obj[i];\n\t if (value > result) {\n\t result = value;\n\t }\n\t }\n\t } else {\n\t iteratee = cb(iteratee, context);\n\t _.each(obj, function(value, index, list) {\n\t computed = iteratee(value, index, list);\n\t if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n\t result = value;\n\t lastComputed = computed;\n\t }\n\t });\n\t }\n\t return result;\n\t };\n\t\n\t // Return the minimum element (or element-based computation).\n\t _.min = function(obj, iteratee, context) {\n\t var result = Infinity, lastComputed = Infinity,\n\t value, computed;\n\t if (iteratee == null && obj != null) {\n\t obj = isArrayLike(obj) ? obj : _.values(obj);\n\t for (var i = 0, length = obj.length; i < length; i++) {\n\t value = obj[i];\n\t if (value < result) {\n\t result = value;\n\t }\n\t }\n\t } else {\n\t iteratee = cb(iteratee, context);\n\t _.each(obj, function(value, index, list) {\n\t computed = iteratee(value, index, list);\n\t if (computed < lastComputed || computed === Infinity && result === Infinity) {\n\t result = value;\n\t lastComputed = computed;\n\t }\n\t });\n\t }\n\t return result;\n\t };\n\t\n\t // Shuffle a collection, using the modern version of the\n\t // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n\t _.shuffle = function(obj) {\n\t var set = isArrayLike(obj) ? obj : _.values(obj);\n\t var length = set.length;\n\t var shuffled = Array(length);\n\t for (var index = 0, rand; index < length; index++) {\n\t rand = _.random(0, index);\n\t if (rand !== index) shuffled[index] = shuffled[rand];\n\t shuffled[rand] = set[index];\n\t }\n\t return shuffled;\n\t };\n\t\n\t // Sample **n** random values from a collection.\n\t // If **n** is not specified, returns a single random element.\n\t // The internal `guard` argument allows it to work with `map`.\n\t _.sample = function(obj, n, guard) {\n\t if (n == null || guard) {\n\t if (!isArrayLike(obj)) obj = _.values(obj);\n\t return obj[_.random(obj.length - 1)];\n\t }\n\t return _.shuffle(obj).slice(0, Math.max(0, n));\n\t };\n\t\n\t // Sort the object's values by a criterion produced by an iteratee.\n\t _.sortBy = function(obj, iteratee, context) {\n\t iteratee = cb(iteratee, context);\n\t return _.pluck(_.map(obj, function(value, index, list) {\n\t return {\n\t value: value,\n\t index: index,\n\t criteria: iteratee(value, index, list)\n\t };\n\t }).sort(function(left, right) {\n\t var a = left.criteria;\n\t var b = right.criteria;\n\t if (a !== b) {\n\t if (a > b || a === void 0) return 1;\n\t if (a < b || b === void 0) return -1;\n\t }\n\t return left.index - right.index;\n\t }), 'value');\n\t };\n\t\n\t // An internal function used for aggregate \"group by\" operations.\n\t var group = function(behavior) {\n\t return function(obj, iteratee, context) {\n\t var result = {};\n\t iteratee = cb(iteratee, context);\n\t _.each(obj, function(value, index) {\n\t var key = iteratee(value, index, obj);\n\t behavior(result, value, key);\n\t });\n\t return result;\n\t };\n\t };\n\t\n\t // Groups the object's values by a criterion. Pass either a string attribute\n\t // to group by, or a function that returns the criterion.\n\t _.groupBy = group(function(result, value, key) {\n\t if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n\t });\n\t\n\t // Indexes the object's values by a criterion, similar to `groupBy`, but for\n\t // when you know that your index values will be unique.\n\t _.indexBy = group(function(result, value, key) {\n\t result[key] = value;\n\t });\n\t\n\t // Counts instances of an object that group by a certain criterion. Pass\n\t // either a string attribute to count by, or a function that returns the\n\t // criterion.\n\t _.countBy = group(function(result, value, key) {\n\t if (_.has(result, key)) result[key]++; else result[key] = 1;\n\t });\n\t\n\t // Safely create a real, live array from anything iterable.\n\t _.toArray = function(obj) {\n\t if (!obj) return [];\n\t if (_.isArray(obj)) return slice.call(obj);\n\t if (isArrayLike(obj)) return _.map(obj, _.identity);\n\t return _.values(obj);\n\t };\n\t\n\t // Return the number of elements in an object.\n\t _.size = function(obj) {\n\t if (obj == null) return 0;\n\t return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n\t };\n\t\n\t // Split a collection into two arrays: one whose elements all satisfy the given\n\t // predicate, and one whose elements all do not satisfy the predicate.\n\t _.partition = function(obj, predicate, context) {\n\t predicate = cb(predicate, context);\n\t var pass = [], fail = [];\n\t _.each(obj, function(value, key, obj) {\n\t (predicate(value, key, obj) ? pass : fail).push(value);\n\t });\n\t return [pass, fail];\n\t };\n\t\n\t // Array Functions\n\t // ---------------\n\t\n\t // Get the first element of an array. Passing **n** will return the first N\n\t // values in the array. Aliased as `head` and `take`. The **guard** check\n\t // allows it to work with `_.map`.\n\t _.first = _.head = _.take = function(array, n, guard) {\n\t if (array == null) return void 0;\n\t if (n == null || guard) return array[0];\n\t return _.initial(array, array.length - n);\n\t };\n\t\n\t // Returns everything but the last entry of the array. Especially useful on\n\t // the arguments object. Passing **n** will return all the values in\n\t // the array, excluding the last N.\n\t _.initial = function(array, n, guard) {\n\t return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n\t };\n\t\n\t // Get the last element of an array. Passing **n** will return the last N\n\t // values in the array.\n\t _.last = function(array, n, guard) {\n\t if (array == null) return void 0;\n\t if (n == null || guard) return array[array.length - 1];\n\t return _.rest(array, Math.max(0, array.length - n));\n\t };\n\t\n\t // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n\t // Especially useful on the arguments object. Passing an **n** will return\n\t // the rest N values in the array.\n\t _.rest = _.tail = _.drop = function(array, n, guard) {\n\t return slice.call(array, n == null || guard ? 1 : n);\n\t };\n\t\n\t // Trim out all falsy values from an array.\n\t _.compact = function(array) {\n\t return _.filter(array, _.identity);\n\t };\n\t\n\t // Internal implementation of a recursive `flatten` function.\n\t var flatten = function(input, shallow, strict, startIndex) {\n\t var output = [], idx = 0;\n\t for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n\t var value = input[i];\n\t if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n\t //flatten current level of array or arguments object\n\t if (!shallow) value = flatten(value, shallow, strict);\n\t var j = 0, len = value.length;\n\t output.length += len;\n\t while (j < len) {\n\t output[idx++] = value[j++];\n\t }\n\t } else if (!strict) {\n\t output[idx++] = value;\n\t }\n\t }\n\t return output;\n\t };\n\t\n\t // Flatten out an array, either recursively (by default), or just one level.\n\t _.flatten = function(array, shallow) {\n\t return flatten(array, shallow, false);\n\t };\n\t\n\t // Return a version of the array that does not contain the specified value(s).\n\t _.without = function(array) {\n\t return _.difference(array, slice.call(arguments, 1));\n\t };\n\t\n\t // Produce a duplicate-free version of the array. If the array has already\n\t // been sorted, you have the option of using a faster algorithm.\n\t // Aliased as `unique`.\n\t _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n\t if (!_.isBoolean(isSorted)) {\n\t context = iteratee;\n\t iteratee = isSorted;\n\t isSorted = false;\n\t }\n\t if (iteratee != null) iteratee = cb(iteratee, context);\n\t var result = [];\n\t var seen = [];\n\t for (var i = 0, length = getLength(array); i < length; i++) {\n\t var value = array[i],\n\t computed = iteratee ? iteratee(value, i, array) : value;\n\t if (isSorted) {\n\t if (!i || seen !== computed) result.push(value);\n\t seen = computed;\n\t } else if (iteratee) {\n\t if (!_.contains(seen, computed)) {\n\t seen.push(computed);\n\t result.push(value);\n\t }\n\t } else if (!_.contains(result, value)) {\n\t result.push(value);\n\t }\n\t }\n\t return result;\n\t };\n\t\n\t // Produce an array that contains the union: each distinct element from all of\n\t // the passed-in arrays.\n\t _.union = function() {\n\t return _.uniq(flatten(arguments, true, true));\n\t };\n\t\n\t // Produce an array that contains every item shared between all the\n\t // passed-in arrays.\n\t _.intersection = function(array) {\n\t var result = [];\n\t var argsLength = arguments.length;\n\t for (var i = 0, length = getLength(array); i < length; i++) {\n\t var item = array[i];\n\t if (_.contains(result, item)) continue;\n\t for (var j = 1; j < argsLength; j++) {\n\t if (!_.contains(arguments[j], item)) break;\n\t }\n\t if (j === argsLength) result.push(item);\n\t }\n\t return result;\n\t };\n\t\n\t // Take the difference between one array and a number of other arrays.\n\t // Only the elements present in just the first array will remain.\n\t _.difference = function(array) {\n\t var rest = flatten(arguments, true, true, 1);\n\t return _.filter(array, function(value){\n\t return !_.contains(rest, value);\n\t });\n\t };\n\t\n\t // Zip together multiple lists into a single array -- elements that share\n\t // an index go together.\n\t _.zip = function() {\n\t return _.unzip(arguments);\n\t };\n\t\n\t // Complement of _.zip. Unzip accepts an array of arrays and groups\n\t // each array's elements on shared indices\n\t _.unzip = function(array) {\n\t var length = array && _.max(array, getLength).length || 0;\n\t var result = Array(length);\n\t\n\t for (var index = 0; index < length; index++) {\n\t result[index] = _.pluck(array, index);\n\t }\n\t return result;\n\t };\n\t\n\t // Converts lists into objects. Pass either a single array of `[key, value]`\n\t // pairs, or two parallel arrays of the same length -- one of keys, and one of\n\t // the corresponding values.\n\t _.object = function(list, values) {\n\t var result = {};\n\t for (var i = 0, length = getLength(list); i < length; i++) {\n\t if (values) {\n\t result[list[i]] = values[i];\n\t } else {\n\t result[list[i][0]] = list[i][1];\n\t }\n\t }\n\t return result;\n\t };\n\t\n\t // Generator function to create the findIndex and findLastIndex functions\n\t function createPredicateIndexFinder(dir) {\n\t return function(array, predicate, context) {\n\t predicate = cb(predicate, context);\n\t var length = getLength(array);\n\t var index = dir > 0 ? 0 : length - 1;\n\t for (; index >= 0 && index < length; index += dir) {\n\t if (predicate(array[index], index, array)) return index;\n\t }\n\t return -1;\n\t };\n\t }\n\t\n\t // Returns the first index on an array-like that passes a predicate test\n\t _.findIndex = createPredicateIndexFinder(1);\n\t _.findLastIndex = createPredicateIndexFinder(-1);\n\t\n\t // Use a comparator function to figure out the smallest index at which\n\t // an object should be inserted so as to maintain order. Uses binary search.\n\t _.sortedIndex = function(array, obj, iteratee, context) {\n\t iteratee = cb(iteratee, context, 1);\n\t var value = iteratee(obj);\n\t var low = 0, high = getLength(array);\n\t while (low < high) {\n\t var mid = Math.floor((low + high) / 2);\n\t if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n\t }\n\t return low;\n\t };\n\t\n\t // Generator function to create the indexOf and lastIndexOf functions\n\t function createIndexFinder(dir, predicateFind, sortedIndex) {\n\t return function(array, item, idx) {\n\t var i = 0, length = getLength(array);\n\t if (typeof idx == 'number') {\n\t if (dir > 0) {\n\t i = idx >= 0 ? idx : Math.max(idx + length, i);\n\t } else {\n\t length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n\t }\n\t } else if (sortedIndex && idx && length) {\n\t idx = sortedIndex(array, item);\n\t return array[idx] === item ? idx : -1;\n\t }\n\t if (item !== item) {\n\t idx = predicateFind(slice.call(array, i, length), _.isNaN);\n\t return idx >= 0 ? idx + i : -1;\n\t }\n\t for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n\t if (array[idx] === item) return idx;\n\t }\n\t return -1;\n\t };\n\t }\n\t\n\t // Return the position of the first occurrence of an item in an array,\n\t // or -1 if the item is not included in the array.\n\t // If the array is large and already in sort order, pass `true`\n\t // for **isSorted** to use binary search.\n\t _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n\t _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\t\n\t // Generate an integer Array containing an arithmetic progression. A port of\n\t // the native Python `range()` function. See\n\t // [the Python documentation](http://docs.python.org/library/functions.html#range).\n\t _.range = function(start, stop, step) {\n\t if (stop == null) {\n\t stop = start || 0;\n\t start = 0;\n\t }\n\t step = step || 1;\n\t\n\t var length = Math.max(Math.ceil((stop - start) / step), 0);\n\t var range = Array(length);\n\t\n\t for (var idx = 0; idx < length; idx++, start += step) {\n\t range[idx] = start;\n\t }\n\t\n\t return range;\n\t };\n\t\n\t // Function (ahem) Functions\n\t // ------------------\n\t\n\t // Determines whether to execute a function as a constructor\n\t // or a normal function with the provided arguments\n\t var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n\t if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n\t var self = baseCreate(sourceFunc.prototype);\n\t var result = sourceFunc.apply(self, args);\n\t if (_.isObject(result)) return result;\n\t return self;\n\t };\n\t\n\t // Create a function bound to a given object (assigning `this`, and arguments,\n\t // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n\t // available.\n\t _.bind = function(func, context) {\n\t if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n\t if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n\t var args = slice.call(arguments, 2);\n\t var bound = function() {\n\t return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n\t };\n\t return bound;\n\t };\n\t\n\t // Partially apply a function by creating a version that has had some of its\n\t // arguments pre-filled, without changing its dynamic `this` context. _ acts\n\t // as a placeholder, allowing any combination of arguments to be pre-filled.\n\t _.partial = function(func) {\n\t var boundArgs = slice.call(arguments, 1);\n\t var bound = function() {\n\t var position = 0, length = boundArgs.length;\n\t var args = Array(length);\n\t for (var i = 0; i < length; i++) {\n\t args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n\t }\n\t while (position < arguments.length) args.push(arguments[position++]);\n\t return executeBound(func, bound, this, this, args);\n\t };\n\t return bound;\n\t };\n\t\n\t // Bind a number of an object's methods to that object. Remaining arguments\n\t // are the method names to be bound. Useful for ensuring that all callbacks\n\t // defined on an object belong to it.\n\t _.bindAll = function(obj) {\n\t var i, length = arguments.length, key;\n\t if (length <= 1) throw new Error('bindAll must be passed function names');\n\t for (i = 1; i < length; i++) {\n\t key = arguments[i];\n\t obj[key] = _.bind(obj[key], obj);\n\t }\n\t return obj;\n\t };\n\t\n\t // Memoize an expensive function by storing its results.\n\t _.memoize = function(func, hasher) {\n\t var memoize = function(key) {\n\t var cache = memoize.cache;\n\t var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n\t if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n\t return cache[address];\n\t };\n\t memoize.cache = {};\n\t return memoize;\n\t };\n\t\n\t // Delays a function for the given number of milliseconds, and then calls\n\t // it with the arguments supplied.\n\t _.delay = function(func, wait) {\n\t var args = slice.call(arguments, 2);\n\t return setTimeout(function(){\n\t return func.apply(null, args);\n\t }, wait);\n\t };\n\t\n\t // Defers a function, scheduling it to run after the current call stack has\n\t // cleared.\n\t _.defer = _.partial(_.delay, _, 1);\n\t\n\t // Returns a function, that, when invoked, will only be triggered at most once\n\t // during a given window of time. Normally, the throttled function will run\n\t // as much as it can, without ever going more than once per `wait` duration;\n\t // but if you'd like to disable the execution on the leading edge, pass\n\t // `{leading: false}`. To disable execution on the trailing edge, ditto.\n\t _.throttle = function(func, wait, options) {\n\t var context, args, result;\n\t var timeout = null;\n\t var previous = 0;\n\t if (!options) options = {};\n\t var later = function() {\n\t previous = options.leading === false ? 0 : _.now();\n\t timeout = null;\n\t result = func.apply(context, args);\n\t if (!timeout) context = args = null;\n\t };\n\t return function() {\n\t var now = _.now();\n\t if (!previous && options.leading === false) previous = now;\n\t var remaining = wait - (now - previous);\n\t context = this;\n\t args = arguments;\n\t if (remaining <= 0 || remaining > wait) {\n\t if (timeout) {\n\t clearTimeout(timeout);\n\t timeout = null;\n\t }\n\t previous = now;\n\t result = func.apply(context, args);\n\t if (!timeout) context = args = null;\n\t } else if (!timeout && options.trailing !== false) {\n\t timeout = setTimeout(later, remaining);\n\t }\n\t return result;\n\t };\n\t };\n\t\n\t // Returns a function, that, as long as it continues to be invoked, will not\n\t // be triggered. The function will be called after it stops being called for\n\t // N milliseconds. If `immediate` is passed, trigger the function on the\n\t // leading edge, instead of the trailing.\n\t _.debounce = function(func, wait, immediate) {\n\t var timeout, args, context, timestamp, result;\n\t\n\t var later = function() {\n\t var last = _.now() - timestamp;\n\t\n\t if (last < wait && last >= 0) {\n\t timeout = setTimeout(later, wait - last);\n\t } else {\n\t timeout = null;\n\t if (!immediate) {\n\t result = func.apply(context, args);\n\t if (!timeout) context = args = null;\n\t }\n\t }\n\t };\n\t\n\t return function() {\n\t context = this;\n\t args = arguments;\n\t timestamp = _.now();\n\t var callNow = immediate && !timeout;\n\t if (!timeout) timeout = setTimeout(later, wait);\n\t if (callNow) {\n\t result = func.apply(context, args);\n\t context = args = null;\n\t }\n\t\n\t return result;\n\t };\n\t };\n\t\n\t // Returns the first function passed as an argument to the second,\n\t // allowing you to adjust arguments, run code before and after, and\n\t // conditionally execute the original function.\n\t _.wrap = function(func, wrapper) {\n\t return _.partial(wrapper, func);\n\t };\n\t\n\t // Returns a negated version of the passed-in predicate.\n\t _.negate = function(predicate) {\n\t return function() {\n\t return !predicate.apply(this, arguments);\n\t };\n\t };\n\t\n\t // Returns a function that is the composition of a list of functions, each\n\t // consuming the return value of the function that follows.\n\t _.compose = function() {\n\t var args = arguments;\n\t var start = args.length - 1;\n\t return function() {\n\t var i = start;\n\t var result = args[start].apply(this, arguments);\n\t while (i--) result = args[i].call(this, result);\n\t return result;\n\t };\n\t };\n\t\n\t // Returns a function that will only be executed on and after the Nth call.\n\t _.after = function(times, func) {\n\t return function() {\n\t if (--times < 1) {\n\t return func.apply(this, arguments);\n\t }\n\t };\n\t };\n\t\n\t // Returns a function that will only be executed up to (but not including) the Nth call.\n\t _.before = function(times, func) {\n\t var memo;\n\t return function() {\n\t if (--times > 0) {\n\t memo = func.apply(this, arguments);\n\t }\n\t if (times <= 1) func = null;\n\t return memo;\n\t };\n\t };\n\t\n\t // Returns a function that will be executed at most one time, no matter how\n\t // often you call it. Useful for lazy initialization.\n\t _.once = _.partial(_.before, 2);\n\t\n\t // Object Functions\n\t // ----------------\n\t\n\t // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n\t var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n\t var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n\t 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\t\n\t function collectNonEnumProps(obj, keys) {\n\t var nonEnumIdx = nonEnumerableProps.length;\n\t var constructor = obj.constructor;\n\t var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\t\n\t // Constructor is a special case.\n\t var prop = 'constructor';\n\t if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\t\n\t while (nonEnumIdx--) {\n\t prop = nonEnumerableProps[nonEnumIdx];\n\t if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n\t keys.push(prop);\n\t }\n\t }\n\t }\n\t\n\t // Retrieve the names of an object's own properties.\n\t // Delegates to **ECMAScript 5**'s native `Object.keys`\n\t _.keys = function(obj) {\n\t if (!_.isObject(obj)) return [];\n\t if (nativeKeys) return nativeKeys(obj);\n\t var keys = [];\n\t for (var key in obj) if (_.has(obj, key)) keys.push(key);\n\t // Ahem, IE < 9.\n\t if (hasEnumBug) collectNonEnumProps(obj, keys);\n\t return keys;\n\t };\n\t\n\t // Retrieve all the property names of an object.\n\t _.allKeys = function(obj) {\n\t if (!_.isObject(obj)) return [];\n\t var keys = [];\n\t for (var key in obj) keys.push(key);\n\t // Ahem, IE < 9.\n\t if (hasEnumBug) collectNonEnumProps(obj, keys);\n\t return keys;\n\t };\n\t\n\t // Retrieve the values of an object's properties.\n\t _.values = function(obj) {\n\t var keys = _.keys(obj);\n\t var length = keys.length;\n\t var values = Array(length);\n\t for (var i = 0; i < length; i++) {\n\t values[i] = obj[keys[i]];\n\t }\n\t return values;\n\t };\n\t\n\t // Returns the results of applying the iteratee to each element of the object\n\t // In contrast to _.map it returns an object\n\t _.mapObject = function(obj, iteratee, context) {\n\t iteratee = cb(iteratee, context);\n\t var keys = _.keys(obj),\n\t length = keys.length,\n\t results = {},\n\t currentKey;\n\t for (var index = 0; index < length; index++) {\n\t currentKey = keys[index];\n\t results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n\t }\n\t return results;\n\t };\n\t\n\t // Convert an object into a list of `[key, value]` pairs.\n\t _.pairs = function(obj) {\n\t var keys = _.keys(obj);\n\t var length = keys.length;\n\t var pairs = Array(length);\n\t for (var i = 0; i < length; i++) {\n\t pairs[i] = [keys[i], obj[keys[i]]];\n\t }\n\t return pairs;\n\t };\n\t\n\t // Invert the keys and values of an object. The values must be serializable.\n\t _.invert = function(obj) {\n\t var result = {};\n\t var keys = _.keys(obj);\n\t for (var i = 0, length = keys.length; i < length; i++) {\n\t result[obj[keys[i]]] = keys[i];\n\t }\n\t return result;\n\t };\n\t\n\t // Return a sorted list of the function names available on the object.\n\t // Aliased as `methods`\n\t _.functions = _.methods = function(obj) {\n\t var names = [];\n\t for (var key in obj) {\n\t if (_.isFunction(obj[key])) names.push(key);\n\t }\n\t return names.sort();\n\t };\n\t\n\t // Extend a given object with all the properties in passed-in object(s).\n\t _.extend = createAssigner(_.allKeys);\n\t\n\t // Assigns a given object with all the own properties in the passed-in object(s)\n\t // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n\t _.extendOwn = _.assign = createAssigner(_.keys);\n\t\n\t // Returns the first key on an object that passes a predicate test\n\t _.findKey = function(obj, predicate, context) {\n\t predicate = cb(predicate, context);\n\t var keys = _.keys(obj), key;\n\t for (var i = 0, length = keys.length; i < length; i++) {\n\t key = keys[i];\n\t if (predicate(obj[key], key, obj)) return key;\n\t }\n\t };\n\t\n\t // Return a copy of the object only containing the whitelisted properties.\n\t _.pick = function(object, oiteratee, context) {\n\t var result = {}, obj = object, iteratee, keys;\n\t if (obj == null) return result;\n\t if (_.isFunction(oiteratee)) {\n\t keys = _.allKeys(obj);\n\t iteratee = optimizeCb(oiteratee, context);\n\t } else {\n\t keys = flatten(arguments, false, false, 1);\n\t iteratee = function(value, key, obj) { return key in obj; };\n\t obj = Object(obj);\n\t }\n\t for (var i = 0, length = keys.length; i < length; i++) {\n\t var key = keys[i];\n\t var value = obj[key];\n\t if (iteratee(value, key, obj)) result[key] = value;\n\t }\n\t return result;\n\t };\n\t\n\t // Return a copy of the object without the blacklisted properties.\n\t _.omit = function(obj, iteratee, context) {\n\t if (_.isFunction(iteratee)) {\n\t iteratee = _.negate(iteratee);\n\t } else {\n\t var keys = _.map(flatten(arguments, false, false, 1), String);\n\t iteratee = function(value, key) {\n\t return !_.contains(keys, key);\n\t };\n\t }\n\t return _.pick(obj, iteratee, context);\n\t };\n\t\n\t // Fill in a given object with default properties.\n\t _.defaults = createAssigner(_.allKeys, true);\n\t\n\t // Creates an object that inherits from the given prototype object.\n\t // If additional properties are provided then they will be added to the\n\t // created object.\n\t _.create = function(prototype, props) {\n\t var result = baseCreate(prototype);\n\t if (props) _.extendOwn(result, props);\n\t return result;\n\t };\n\t\n\t // Create a (shallow-cloned) duplicate of an object.\n\t _.clone = function(obj) {\n\t if (!_.isObject(obj)) return obj;\n\t return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n\t };\n\t\n\t // Invokes interceptor with the obj, and then returns obj.\n\t // The primary purpose of this method is to \"tap into\" a method chain, in\n\t // order to perform operations on intermediate results within the chain.\n\t _.tap = function(obj, interceptor) {\n\t interceptor(obj);\n\t return obj;\n\t };\n\t\n\t // Returns whether an object has a given set of `key:value` pairs.\n\t _.isMatch = function(object, attrs) {\n\t var keys = _.keys(attrs), length = keys.length;\n\t if (object == null) return !length;\n\t var obj = Object(object);\n\t for (var i = 0; i < length; i++) {\n\t var key = keys[i];\n\t if (attrs[key] !== obj[key] || !(key in obj)) return false;\n\t }\n\t return true;\n\t };\n\t\n\t\n\t // Internal recursive comparison function for `isEqual`.\n\t var eq = function(a, b, aStack, bStack) {\n\t // Identical objects are equal. `0 === -0`, but they aren't identical.\n\t // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n\t if (a === b) return a !== 0 || 1 / a === 1 / b;\n\t // A strict comparison is necessary because `null == undefined`.\n\t if (a == null || b == null) return a === b;\n\t // Unwrap any wrapped objects.\n\t if (a instanceof _) a = a._wrapped;\n\t if (b instanceof _) b = b._wrapped;\n\t // Compare `[[Class]]` names.\n\t var className = toString.call(a);\n\t if (className !== toString.call(b)) return false;\n\t switch (className) {\n\t // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n\t case '[object RegExp]':\n\t // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n\t case '[object String]':\n\t // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n\t // equivalent to `new String(\"5\")`.\n\t return '' + a === '' + b;\n\t case '[object Number]':\n\t // `NaN`s are equivalent, but non-reflexive.\n\t // Object(NaN) is equivalent to NaN\n\t if (+a !== +a) return +b !== +b;\n\t // An `egal` comparison is performed for other numeric values.\n\t return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n\t case '[object Date]':\n\t case '[object Boolean]':\n\t // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n\t // millisecond representations. Note that invalid dates with millisecond representations\n\t // of `NaN` are not equivalent.\n\t return +a === +b;\n\t }\n\t\n\t var areArrays = className === '[object Array]';\n\t if (!areArrays) {\n\t if (typeof a != 'object' || typeof b != 'object') return false;\n\t\n\t // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n\t // from different frames are.\n\t var aCtor = a.constructor, bCtor = b.constructor;\n\t if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n\t _.isFunction(bCtor) && bCtor instanceof bCtor)\n\t && ('constructor' in a && 'constructor' in b)) {\n\t return false;\n\t }\n\t }\n\t // Assume equality for cyclic structures. The algorithm for detecting cyclic\n\t // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\t\n\t // Initializing stack of traversed objects.\n\t // It's done here since we only need them for objects and arrays comparison.\n\t aStack = aStack || [];\n\t bStack = bStack || [];\n\t var length = aStack.length;\n\t while (length--) {\n\t // Linear search. Performance is inversely proportional to the number of\n\t // unique nested structures.\n\t if (aStack[length] === a) return bStack[length] === b;\n\t }\n\t\n\t // Add the first object to the stack of traversed objects.\n\t aStack.push(a);\n\t bStack.push(b);\n\t\n\t // Recursively compare objects and arrays.\n\t if (areArrays) {\n\t // Compare array lengths to determine if a deep comparison is necessary.\n\t length = a.length;\n\t if (length !== b.length) return false;\n\t // Deep compare the contents, ignoring non-numeric properties.\n\t while (length--) {\n\t if (!eq(a[length], b[length], aStack, bStack)) return false;\n\t }\n\t } else {\n\t // Deep compare objects.\n\t var keys = _.keys(a), key;\n\t length = keys.length;\n\t // Ensure that both objects contain the same number of properties before comparing deep equality.\n\t if (_.keys(b).length !== length) return false;\n\t while (length--) {\n\t // Deep compare each member\n\t key = keys[length];\n\t if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n\t }\n\t }\n\t // Remove the first object from the stack of traversed objects.\n\t aStack.pop();\n\t bStack.pop();\n\t return true;\n\t };\n\t\n\t // Perform a deep comparison to check if two objects are equal.\n\t _.isEqual = function(a, b) {\n\t return eq(a, b);\n\t };\n\t\n\t // Is a given array, string, or object empty?\n\t // An \"empty\" object has no enumerable own-properties.\n\t _.isEmpty = function(obj) {\n\t if (obj == null) return true;\n\t if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n\t return _.keys(obj).length === 0;\n\t };\n\t\n\t // Is a given value a DOM element?\n\t _.isElement = function(obj) {\n\t return !!(obj && obj.nodeType === 1);\n\t };\n\t\n\t // Is a given value an array?\n\t // Delegates to ECMA5's native Array.isArray\n\t _.isArray = nativeIsArray || function(obj) {\n\t return toString.call(obj) === '[object Array]';\n\t };\n\t\n\t // Is a given variable an object?\n\t _.isObject = function(obj) {\n\t var type = typeof obj;\n\t return type === 'function' || type === 'object' && !!obj;\n\t };\n\t\n\t // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n\t _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n\t _['is' + name] = function(obj) {\n\t return toString.call(obj) === '[object ' + name + ']';\n\t };\n\t });\n\t\n\t // Define a fallback version of the method in browsers (ahem, IE < 9), where\n\t // there isn't any inspectable \"Arguments\" type.\n\t if (!_.isArguments(arguments)) {\n\t _.isArguments = function(obj) {\n\t return _.has(obj, 'callee');\n\t };\n\t }\n\t\n\t // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n\t // IE 11 (#1621), and in Safari 8 (#1929).\n\t if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n\t _.isFunction = function(obj) {\n\t return typeof obj == 'function' || false;\n\t };\n\t }\n\t\n\t // Is a given object a finite number?\n\t _.isFinite = function(obj) {\n\t return isFinite(obj) && !isNaN(parseFloat(obj));\n\t };\n\t\n\t // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n\t _.isNaN = function(obj) {\n\t return _.isNumber(obj) && obj !== +obj;\n\t };\n\t\n\t // Is a given value a boolean?\n\t _.isBoolean = function(obj) {\n\t return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n\t };\n\t\n\t // Is a given value equal to null?\n\t _.isNull = function(obj) {\n\t return obj === null;\n\t };\n\t\n\t // Is a given variable undefined?\n\t _.isUndefined = function(obj) {\n\t return obj === void 0;\n\t };\n\t\n\t // Shortcut function for checking if an object has a given property directly\n\t // on itself (in other words, not on a prototype).\n\t _.has = function(obj, key) {\n\t return obj != null && hasOwnProperty.call(obj, key);\n\t };\n\t\n\t // Utility Functions\n\t // -----------------\n\t\n\t // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n\t // previous owner. Returns a reference to the Underscore object.\n\t _.noConflict = function() {\n\t root._ = previousUnderscore;\n\t return this;\n\t };\n\t\n\t // Keep the identity function around for default iteratees.\n\t _.identity = function(value) {\n\t return value;\n\t };\n\t\n\t // Predicate-generating functions. Often useful outside of Underscore.\n\t _.constant = function(value) {\n\t return function() {\n\t return value;\n\t };\n\t };\n\t\n\t _.noop = function(){};\n\t\n\t _.property = property;\n\t\n\t // Generates a function for a given object that returns a given property.\n\t _.propertyOf = function(obj) {\n\t return obj == null ? function(){} : function(key) {\n\t return obj[key];\n\t };\n\t };\n\t\n\t // Returns a predicate for checking whether an object has a given set of\n\t // `key:value` pairs.\n\t _.matcher = _.matches = function(attrs) {\n\t attrs = _.extendOwn({}, attrs);\n\t return function(obj) {\n\t return _.isMatch(obj, attrs);\n\t };\n\t };\n\t\n\t // Run a function **n** times.\n\t _.times = function(n, iteratee, context) {\n\t var accum = Array(Math.max(0, n));\n\t iteratee = optimizeCb(iteratee, context, 1);\n\t for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n\t return accum;\n\t };\n\t\n\t // Return a random integer between min and max (inclusive).\n\t _.random = function(min, max) {\n\t if (max == null) {\n\t max = min;\n\t min = 0;\n\t }\n\t return min + Math.floor(Math.random() * (max - min + 1));\n\t };\n\t\n\t // A (possibly faster) way to get the current timestamp as an integer.\n\t _.now = Date.now || function() {\n\t return new Date().getTime();\n\t };\n\t\n\t // List of HTML entities for escaping.\n\t var escapeMap = {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '`': '`'\n\t };\n\t var unescapeMap = _.invert(escapeMap);\n\t\n\t // Functions for escaping and unescaping strings to/from HTML interpolation.\n\t var createEscaper = function(map) {\n\t var escaper = function(match) {\n\t return map[match];\n\t };\n\t // Regexes for identifying a key that needs to be escaped\n\t var source = '(?:' + _.keys(map).join('|') + ')';\n\t var testRegexp = RegExp(source);\n\t var replaceRegexp = RegExp(source, 'g');\n\t return function(string) {\n\t string = string == null ? '' : '' + string;\n\t return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n\t };\n\t };\n\t _.escape = createEscaper(escapeMap);\n\t _.unescape = createEscaper(unescapeMap);\n\t\n\t // If the value of the named `property` is a function then invoke it with the\n\t // `object` as context; otherwise, return it.\n\t _.result = function(object, property, fallback) {\n\t var value = object == null ? void 0 : object[property];\n\t if (value === void 0) {\n\t value = fallback;\n\t }\n\t return _.isFunction(value) ? value.call(object) : value;\n\t };\n\t\n\t // Generate a unique integer id (unique within the entire client session).\n\t // Useful for temporary DOM ids.\n\t var idCounter = 0;\n\t _.uniqueId = function(prefix) {\n\t var id = ++idCounter + '';\n\t return prefix ? prefix + id : id;\n\t };\n\t\n\t // By default, Underscore uses ERB-style template delimiters, change the\n\t // following template settings to use alternative delimiters.\n\t _.templateSettings = {\n\t evaluate : /<%([\\s\\S]+?)%>/g,\n\t interpolate : /<%=([\\s\\S]+?)%>/g,\n\t escape : /<%-([\\s\\S]+?)%>/g\n\t };\n\t\n\t // When customizing `templateSettings`, if you don't want to define an\n\t // interpolation, evaluation or escaping regex, we need one that is\n\t // guaranteed not to match.\n\t var noMatch = /(.)^/;\n\t\n\t // Certain characters need to be escaped so that they can be put into a\n\t // string literal.\n\t var escapes = {\n\t \"'\": \"'\",\n\t '\\\\': '\\\\',\n\t '\\r': 'r',\n\t '\\n': 'n',\n\t '\\u2028': 'u2028',\n\t '\\u2029': 'u2029'\n\t };\n\t\n\t var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\t\n\t var escapeChar = function(match) {\n\t return '\\\\' + escapes[match];\n\t };\n\t\n\t // JavaScript micro-templating, similar to John Resig's implementation.\n\t // Underscore templating handles arbitrary delimiters, preserves whitespace,\n\t // and correctly escapes quotes within interpolated code.\n\t // NB: `oldSettings` only exists for backwards compatibility.\n\t _.template = function(text, settings, oldSettings) {\n\t if (!settings && oldSettings) settings = oldSettings;\n\t settings = _.defaults({}, settings, _.templateSettings);\n\t\n\t // Combine delimiters into one regular expression via alternation.\n\t var matcher = RegExp([\n\t (settings.escape || noMatch).source,\n\t (settings.interpolate || noMatch).source,\n\t (settings.evaluate || noMatch).source\n\t ].join('|') + '|$', 'g');\n\t\n\t // Compile the template source, escaping string literals appropriately.\n\t var index = 0;\n\t var source = \"__p+='\";\n\t text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n\t source += text.slice(index, offset).replace(escaper, escapeChar);\n\t index = offset + match.length;\n\t\n\t if (escape) {\n\t source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n\t } else if (interpolate) {\n\t source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n\t } else if (evaluate) {\n\t source += \"';\\n\" + evaluate + \"\\n__p+='\";\n\t }\n\t\n\t // Adobe VMs need the match returned to produce the correct offest.\n\t return match;\n\t });\n\t source += \"';\\n\";\n\t\n\t // If a variable is not specified, place data values in local scope.\n\t if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\t\n\t source = \"var __t,__p='',__j=Array.prototype.join,\" +\n\t \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n\t source + 'return __p;\\n';\n\t\n\t try {\n\t var render = new Function(settings.variable || 'obj', '_', source);\n\t } catch (e) {\n\t e.source = source;\n\t throw e;\n\t }\n\t\n\t var template = function(data) {\n\t return render.call(this, data, _);\n\t };\n\t\n\t // Provide the compiled source as a convenience for precompilation.\n\t var argument = settings.variable || 'obj';\n\t template.source = 'function(' + argument + '){\\n' + source + '}';\n\t\n\t return template;\n\t };\n\t\n\t // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n\t _.chain = function(obj) {\n\t var instance = _(obj);\n\t instance._chain = true;\n\t return instance;\n\t };\n\t\n\t // OOP\n\t // ---------------\n\t // If Underscore is called as a function, it returns a wrapped object that\n\t // can be used OO-style. This wrapper holds altered versions of all the\n\t // underscore functions. Wrapped objects may be chained.\n\t\n\t // Helper function to continue chaining intermediate results.\n\t var result = function(instance, obj) {\n\t return instance._chain ? _(obj).chain() : obj;\n\t };\n\t\n\t // Add your own custom functions to the Underscore object.\n\t _.mixin = function(obj) {\n\t _.each(_.functions(obj), function(name) {\n\t var func = _[name] = obj[name];\n\t _.prototype[name] = function() {\n\t var args = [this._wrapped];\n\t push.apply(args, arguments);\n\t return result(this, func.apply(_, args));\n\t };\n\t });\n\t };\n\t\n\t // Add all of the Underscore functions to the wrapper object.\n\t _.mixin(_);\n\t\n\t // Add all mutator Array functions to the wrapper.\n\t _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n\t var method = ArrayProto[name];\n\t _.prototype[name] = function() {\n\t var obj = this._wrapped;\n\t method.apply(obj, arguments);\n\t if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n\t return result(this, obj);\n\t };\n\t });\n\t\n\t // Add all accessor Array functions to the wrapper.\n\t _.each(['concat', 'join', 'slice'], function(name) {\n\t var method = ArrayProto[name];\n\t _.prototype[name] = function() {\n\t return result(this, method.apply(this._wrapped, arguments));\n\t };\n\t });\n\t\n\t // Extracts the result from a wrapped and chained object.\n\t _.prototype.value = function() {\n\t return this._wrapped;\n\t };\n\t\n\t // Provide unwrapping proxy for some methods used in engine operations\n\t // such as arithmetic and JSON stringification.\n\t _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\t\n\t _.prototype.toString = function() {\n\t return '' + this._wrapped;\n\t };\n\t\n\t // AMD registration happens at the end for compatibility with AMD loaders\n\t // that may not enforce next-turn semantics on modules. Even though general\n\t // practice for AMD registration is to be anonymous, underscore registers\n\t // as a named module because, like jQuery, it is a base library that is\n\t // popular enough to be bundled in a third party lib, but not be part of\n\t // an AMD load request. Those cases could generate an error when an\n\t // anonymous define() is called outside of a loader request.\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t return _;\n\t }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t }\n\t}.call(this));\n\n\n/***/ },\n/* 13 */,\n/* 14 */,\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, Construction, ConstructionList,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tConstruction = __webpack_require__(19);\n\t\n\tmodule.exports = ConstructionList = (function(superClass) {\n\t extend(ConstructionList, superClass);\n\t\n\t function ConstructionList() {\n\t return ConstructionList.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t ConstructionList.prototype.app = null;\n\t\n\t ConstructionList.prototype.model = Construction;\n\t\n\t ConstructionList.prototype.selected = null;\n\t\n\t ConstructionList.prototype.setSelected = function(ds) {\n\t console.log(\"CL select: \", ds, this.selected);\n\t if (ds === this.selected) {\n\t return;\n\t }\n\t if (this.selected) {\n\t this.trigger(\"unselect\", this.selected);\n\t }\n\t this.selected = ds;\n\t console.log(\"CL triggered select\");\n\t this.trigger(\"select\", this.selected);\n\t if (this.selected.fetched) {\n\t return this.trigger(\"sync\");\n\t }\n\t };\n\t\n\t ConstructionList.prototype.initialize = function(models, options) {\n\t return this.app = options.app;\n\t };\n\t\n\t return ConstructionList;\n\t\n\t})(Backbone.Collection);\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, DataSource, DataSourceList,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tDataSource = __webpack_require__(8);\n\t\n\tmodule.exports = DataSourceList = (function(superClass) {\n\t extend(DataSourceList, superClass);\n\t\n\t function DataSourceList() {\n\t return DataSourceList.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t DataSourceList.prototype.app = null;\n\t\n\t DataSourceList.prototype.model = DataSource;\n\t\n\t DataSourceList.prototype.selected = null;\n\t\n\t DataSourceList.prototype.setSelected = function(ds) {\n\t if (ds === this.selected) {\n\t return;\n\t }\n\t if (this.selected) {\n\t this.trigger(\"unselect\", this.selected);\n\t }\n\t this.selected = ds;\n\t this.trigger(\"select\", this.selected);\n\t if (this.selected.fetched) {\n\t return this.trigger(\"sync\");\n\t }\n\t };\n\t\n\t DataSourceList.prototype.initialize = function(models, options) {\n\t this.app = options.app;\n\t return console.log(\"init DataSourceList\", this.app);\n\t };\n\t\n\t return DataSourceList;\n\t\n\t})(Backbone.Collection);\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, ConstructionElement,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tConstructionElement = __webpack_require__(20);\n\t\n\tmodule.exports = (function(superClass) {\n\t extend(_Class, superClass);\n\t\n\t function _Class() {\n\t return _Class.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t _Class.prototype.model = ConstructionElement;\n\t\n\t _Class.prototype.initialize = function(models, options) {\n\t return this.app = options.app;\n\t };\n\t\n\t return _Class;\n\t\n\t})(Backbone.Collection);\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar EGS_Elements, THREE,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tTHREE = __webpack_require__(6);\n\t\n\t__webpack_require__(52);\n\t\n\tTHREE.ThreadCurve = (function(superClass) {\n\t extend(ThreadCurve, superClass);\n\t\n\t function ThreadCurve(height, pitch, radius) {\n\t this.height = height;\n\t this.pitch = pitch;\n\t this.radius = radius;\n\t ThreadCurve.__super__.constructor.call(this);\n\t }\n\t\n\t ThreadCurve.prototype.getPoint = function(t) {\n\t t = t * this.height / this.pitch;\n\t return new THREE.Vector3(this.radius * Math.cos(2 * Math.PI * (t - Math.floor(t))), this.radius * Math.sin(2 * Math.PI * (t - Math.floor(t))), t * this.pitch);\n\t };\n\t\n\t return ThreadCurve;\n\t\n\t})(THREE.Curve);\n\t\n\tTHREE.CustomGeometry = (function(superClass) {\n\t extend(CustomGeometry, superClass);\n\t\n\t CustomGeometry.prototype.calcUVs = function() {\n\t var faces, i, j, max, min, offset, range, ref, v1, v2, v3;\n\t this.computeBoundingBox();\n\t max = this.boundingBox.max;\n\t min = this.boundingBox.min;\n\t offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t this.faceVertexUvs[0] = [];\n\t faces = this.faces;\n\t for (i = j = 0, ref = this.faces.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {\n\t v1 = this.vertices[this.faces[i].a];\n\t v2 = this.vertices[this.faces[i].b];\n\t v3 = this.vertices[this.faces[i].c];\n\t this.faceVertexUvs[0].push([new THREE.Vector2((v1.x + offset.x) / range.x, (v1.y + offset.y) / range.y), new THREE.Vector2((v2.x + offset.x) / range.x, (v2.y + offset.y) / range.y), new THREE.Vector2((v3.x + offset.x) / range.x, (v3.y + offset.y) / range.y)]);\n\t }\n\t return this.uvsNeedUpdate = true;\n\t };\n\t\n\t function CustomGeometry(vertices, faces) {\n\t var f, j, k, len, len1, v;\n\t CustomGeometry.__super__.constructor.call(this);\n\t for (j = 0, len = vertices.length; j < len; j++) {\n\t v = vertices[j];\n\t this.vertices.push(new THREE.Vector3(v[0], v[1], v[2]));\n\t }\n\t for (k = 0, len1 = faces.length; k < len1; k++) {\n\t f = faces[k];\n\t this.faces.push(new THREE.Face3(f[0], f[1], f[2]));\n\t }\n\t this.computeBoundingSphere();\n\t this.computeFaceNormals();\n\t this.computeVertexNormals();\n\t this.calcUVs();\n\t }\n\t\n\t return CustomGeometry;\n\t\n\t})(THREE.Geometry);\n\t\n\tEGS_Elements = (function() {\n\t var AnfSt, BX, D180, D360, D90, DETAIL, DRX, FX, HV, RX, RohrDurchmesserAussen, RohrDurchmesserInnen, TellerDurchmesser, TellerHoehe, VDX, VX, X, Y, Z, _AnfStk, _Belag, _DoppelRiegel, _Riegel, _VertikalDiagonale, _VertikalStiel, _barToCircle, _belagKlammer, _belagRahmen, _cylinder, _cylinderPath, _haengegeruestVerbinder, _keilKupplungDiagonale, _keilKupplungRiegel, _m, _rohr, _rohrverbinder, _teller, _threadCyl;\n\t\n\t DETAIL = 8;\n\t\n\t D90 = .5 * Math.PI;\n\t\n\t D180 = Math.PI;\n\t\n\t D360 = 2 * Math.PI;\n\t\n\t X = new THREE.Vector3(1, 0, 0);\n\t\n\t Y = new THREE.Vector3(0, 1, 0);\n\t\n\t Z = new THREE.Vector3(0, 0, 1);\n\t\n\t TellerDurchmesser = 123.6;\n\t\n\t RohrDurchmesserAussen = 48.3;\n\t\n\t RohrDurchmesserInnen = 45.1;\n\t\n\t TellerHoehe = 9;\n\t\n\t _m = function(x, y, z, A, n) {\n\t var m;\n\t m = (new THREE.Matrix4()).makeTranslation(x, y, z);\n\t if (A === 'X') {\n\t m.multiply((new THREE.Matrix4()).makeRotationX(n * D90));\n\t }\n\t if (A === 'Y') {\n\t m.multiply((new THREE.Matrix4()).makeRotationY(n * D90));\n\t }\n\t if (A === 'Z') {\n\t m.multiply((new THREE.Matrix4()).makeRotationZ(n * D90));\n\t }\n\t return m;\n\t };\n\t\n\t _barToCircle = function(x, y, l, r) {\n\t var circle, vert;\n\t circle = new THREE.CircleGeometry(r, DETAIL);\n\t vert = circle.vertices;\n\t vert.push(new THREE.Vector3(x / 2, y / 2, l));\n\t vert.push(new THREE.Vector3(-x / 2, y / 2, l));\n\t vert.push(new THREE.Vector3(-x / 2, -y / 2, l));\n\t vert.push(new THREE.Vector3(x / 2, -y / 2, l));\n\t return new THREE.ConvexGeometry(vert);\n\t };\n\t\n\t _cylinder = function(o, i, h) {\n\t var hole, shape;\n\t shape = new THREE.Shape();\n\t shape.absarc(0, 0, o / 2, 0, D360, true);\n\t if (i) {\n\t hole = new THREE.Path();\n\t hole.absarc(0, 0, i / 2, 0, D360, true);\n\t shape.holes.push(hole);\n\t }\n\t return shape.extrude({\n\t amount: h,\n\t steps: 1,\n\t bevelEnabled: false,\n\t curveSegments: DETAIL\n\t });\n\t };\n\t\n\t _cylinderPath = function(o, i, p) {\n\t var hole, shape;\n\t shape = new THREE.Shape();\n\t shape.absarc(0, 0, o / 2, 0, D360, true);\n\t if (i) {\n\t hole = new THREE.Path();\n\t hole.absarc(0, 0, i / 2, 0, D360, true);\n\t shape.holes.push(hole);\n\t }\n\t return shape.extrude({\n\t steps: 10,\n\t extrudePath: p\n\t });\n\t };\n\t\n\t _threadCyl = function(h) {\n\t var cyl, hole, i, o, shape, thread;\n\t if (DETAIL >= 16) {\n\t o = 13;\n\t i = 8;\n\t } else {\n\t o = 18;\n\t i = 15;\n\t }\n\t shape = new THREE.Shape();\n\t shape.absarc(0, 0, o, 0, D360, true);\n\t if (i) {\n\t hole = new THREE.Path();\n\t hole.absarc(0, 0, i, 0, D360, true);\n\t shape.holes.push(hole);\n\t }\n\t cyl = shape.extrude({\n\t amount: h,\n\t steps: 1,\n\t bevelEnabled: false,\n\t curveSegments: DETAIL\n\t });\n\t if (DETAIL >= 16) {\n\t h -= 10;\n\t thread = new THREE.TubeGeometry(new THREE.ThreadCurve(h, 10, 13), DETAIL * h / 10, 4);\n\t cyl.merge(thread, _m(0, 0, 5));\n\t }\n\t return cyl;\n\t };\n\t\n\t _rohr = function(length) {\n\t return _cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, length);\n\t };\n\t\n\t _AnfStk = function() {\n\t var a;\n\t a = new THREE.Geometry();\n\t a.merge(_rohr(165), _m(0, 0, -65));\n\t a.merge(_teller());\n\t a.merge(_cylinder(55, 49, 170), _m(0, 0, 95));\n\t a.applyMatrix(_m(0, 0, 0, 'X', -1));\n\t return a;\n\t };\n\t\n\t _belagKlammer = function(x) {\n\t var bk, d1, d2, shape, z;\n\t shape = new THREE.Shape();\n\t z = 30;\n\t d1 = 25;\n\t d2 = 33;\n\t shape.moveTo(0, 0);\n\t shape.lineTo(30, 0);\n\t shape.arc(25, 0, d1, 0, Math.PI);\n\t shape.lineTo(17 + d2 + d2, 0);\n\t shape.arc(-33, 0, d2, Math.PI * .7, 0);\n\t shape.lineTo(30, 35);\n\t shape.lineTo(0, 35);\n\t shape.lineTo(0, 0);\n\t bk = shape.extrude({\n\t amount: 40,\n\t steps: 1,\n\t bevelEnabled: false,\n\t curveSegments: DETAIL\n\t });\n\t bk.applyMatrix(_m(x, 0, 55, 'Y', 1));\n\t return bk;\n\t };\n\t\n\t _belagRahmen = function(l, b) {\n\t var faces, o, vertices;\n\t o = 50;\n\t vertices = [[0, 45, o], [b, 45, o], [b, 45, l - o], [0, 45, l - o], [0, -30, o], [b, -30, o], [b, -30, l - o], [0, -30, l - o], [5, -30, o + 5], [b - 5, -30, o + 5], [b - 5, -30, l - o - 5], [5, -30, l - o - 5], [5, 40, o + 5], [b - 5, 40, o + 5], [b - 5, 40, l - o - 5], [5, 40, l - o - 5]];\n\t faces = [[0, 2, 1], [0, 3, 2], [12, 13, 14], [12, 14, 15], [0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7], [4, 5, 9], [4, 9, 8], [5, 6, 10], [5, 10, 9], [6, 7, 11], [6, 11, 10], [7, 4, 8], [7, 8, 11], [8, 9, 13], [8, 13, 12], [9, 10, 14], [9, 14, 13], [10, 11, 15], [10, 15, 14], [11, 8, 12], [11, 12, 15]];\n\t return new THREE.CustomGeometry(vertices, faces);\n\t };\n\t\n\t _Belag = function(l, w, x) {\n\t var b;\n\t if (x == null) {\n\t x = 0;\n\t }\n\t b = new THREE.Geometry();\n\t b.merge(_belagKlammer(1), _m(60, 0, 0));\n\t b.merge(_belagKlammer(1), _m(w - 60, 0, 0));\n\t b.merge(_belagRahmen(l, w), _m(0, 0, 0));\n\t b.merge(_belagKlammer(1), _m(60, 0, l, 'Y', 2));\n\t b.merge(_belagKlammer(1), _m(w - 60, 0, l, 'Y', 2));\n\t b.applyMatrix(_m(55 + x, 0, 0));\n\t return b;\n\t };\n\t\n\t _keilKupplungDiagonale = function(d, r) {\n\t var faces, facesD, fd, j, kkd, len, vertices, z;\n\t if (r == null) {\n\t r = 1;\n\t }\n\t z = 35;\n\t vertices = [[25, 7, 38], [26, 0, 38], [25, -7, 38], [25, 7, 11], [26, 0, 11], [25, -7, 11], [25, 7, -1], [26, 0, -1], [25, -7, -1], [25, 7, -35], [26, 0, -35], [25, -7, -35], [65, 12, 24], [65, -12, 24], [65, 22, 11], [65, -22, 11], [65, 22, -1], [65, -22, -1], [65, 12, -24], [65, -12, -24], [65, 1 * r, 20], [65, 1 * r, -20], [65, 11 * r, -20], [65, 11 * r, 20], [65 + z, 1 * r + z * r, 20], [65 + z, 1 * r + z * r, -20], [65 + z - 5, 6 * r + z * r, -20], [65 + z - 5, 6 * r + z * r, 20]];\n\t faces = [[0, 1, 12], [1, 13, 12], [1, 2, 13], [9, 18, 10], [10, 18, 19], [10, 19, 11], [1, 0, 4], [4, 0, 3], [2, 1, 5], [5, 1, 4], [7, 6, 10], [10, 6, 9], [8, 7, 11], [11, 7, 10], [4, 3, 14], [4, 14, 15], [5, 4, 15], [6, 7, 16], [7, 17, 16], [7, 8, 17], [14, 17, 15], [14, 16, 17], [14, 15, 17], [14, 17, 16], [3, 0, 14], [0, 12, 14], [16, 9, 6], [18, 9, 16], [2, 5, 15], [2, 15, 13], [17, 8, 11], [17, 11, 19], [12, 13, 14], [13, 15, 14], [16, 17, 18], [17, 19, 18]];\n\t facesD = [[20, 21, 25], [20, 25, 24], [22, 23, 27], [22, 27, 26], [20, 27, 23], [20, 24, 27], [21, 22, 26], [21, 26, 25], [24, 25, 26], [24, 26, 27]];\n\t for (j = 0, len = facesD.length; j < len; j++) {\n\t fd = facesD[j];\n\t if (r > 0) {\n\t faces.push(fd);\n\t } else {\n\t faces.push([fd[1], fd[0], fd[2]]);\n\t }\n\t }\n\t kkd = new THREE.CustomGeometry(vertices, faces);\n\t kkd.applyMatrix(_m(0, 0, 0, 'Z', .5 * r * d));\n\t return kkd;\n\t };\n\t\n\t _VertikalDiagonale = function(w, s, h) {\n\t var bohrAbstand, degree, offset, r, vd;\n\t if (s == null) {\n\t s = 1;\n\t }\n\t if (h == null) {\n\t h = 2000;\n\t }\n\t vd = new THREE.Geometry();\n\t r = new THREE.Geometry();\n\t s *= -1;\n\t bohrAbstand = Math.sqrt(Math.pow(w - 155, 2) + Math.pow(h, 2));\n\t degree = Math.atan2(w - 155, h);\n\t vd.merge(_keilKupplungDiagonale(-1, 1 * s));\n\t vd.merge(_keilKupplungDiagonale(-1, -1 * s), _m(w, 0, h, 'Z', 2));\n\t offset = s > 0 ? 14 : 7;\n\t r.merge(new THREE.BoxGeometry(35, 10, 60), _m(0, 0, 10));\n\t r.merge(_cylinder(16, 0, 21), _m(0, offset, 0, 'X', 1));\n\t r.merge(_barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m(0, 0, 110, 'X', 2));\n\t r.merge(_cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, bohrAbstand - 220), _m(0, 0, 110));\n\t r.merge(_barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m(0, 0, bohrAbstand - 110));\n\t r.merge(new THREE.BoxGeometry(35, 10, 60), _m(0, 0, bohrAbstand - 10));\n\t r.merge(_cylinder(16, 0, 21), _m(0, offset, bohrAbstand, 'X', 1));\n\t vd.merge(r, _m(77.5, -50 * s, 0, 'Y', degree / D90));\n\t return vd;\n\t };\n\t\n\t _keilKupplungRiegel = function() {\n\t var faces, vertices;\n\t vertices = [[25, 7, 38], [26, 0, 38], [25, -7, 38], [25, 7, 11], [26, 0, 11], [25, -7, 11], [25, 7, -1], [26, 0, -1], [25, -7, -1], [25, 7, -35], [26, 0, -35], [25, -7, -35], [65, 12, 24], [65, -12, 24], [65, 22, 11], [65, -22, 11], [65, 22, -1], [65, -22, -1], [65, 12, -24], [65, -12, -24], [77, 0, 24], [77, -17, 17], [77, -24, 0], [77, -17, -17], [77, 0, -24], [77, 17, -17], [77, 24, 0], [77, 17, 17]];\n\t faces = [[0, 1, 12], [1, 13, 12], [1, 2, 13], [9, 18, 10], [10, 18, 19], [10, 19, 11], [1, 0, 4], [4, 0, 3], [2, 1, 5], [5, 1, 4], [7, 6, 10], [10, 6, 9], [8, 7, 11], [11, 7, 10], [4, 3, 14], [4, 14, 15], [5, 4, 15], [6, 7, 16], [7, 17, 16], [7, 8, 17], [14, 17, 15], [14, 16, 17], [3, 0, 14], [0, 12, 14], [16, 9, 6], [18, 9, 16], [2, 5, 15], [2, 15, 13], [17, 8, 11], [17, 11, 19], [20, 12, 13], [20, 13, 21], [21, 13, 15], [21, 15, 22], [22, 15, 17], [22, 17, 23], [23, 17, 19], [23, 19, 24], [24, 19, 18], [24, 18, 25], [25, 18, 16], [25, 16, 26], [26, 16, 14], [26, 14, 27], [27, 14, 12], [27, 12, 20]];\n\t return new THREE.CustomGeometry(vertices, faces);\n\t };\n\t\n\t _haengegeruestVerbinder = function() {\n\t var rv;\n\t rv = new THREE.BoxGeometry(10, 50, 550);\n\t rv.applyMatrix(_m(82, 0, 250));\n\t rv.merge(_keilKupplungRiegel(), _m(0, 0, 0));\n\t rv.merge(_keilKupplungRiegel(), _m(0, 0, 500));\n\t rv.applyMatrix(_m(0, 0, 0, 'X', -1));\n\t return rv;\n\t };\n\t\n\t _Riegel = function(l) {\n\t var r;\n\t r = _cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150);\n\t r.applyMatrix(_m(75, 0, 0, 'Y', 1));\n\t r.merge(_keilKupplungRiegel());\n\t r.merge(_keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2));\n\t r.applyMatrix(_m(0, 0, 0, 'X', -1));\n\t return r;\n\t };\n\t\n\t _DoppelRiegel = function(l) {\n\t var f, i, j, p, r, r2, ref;\n\t r = _cylinder(RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150);\n\t r.applyMatrix(_m(75, 0, 0, 'Y', 1));\n\t r.merge(_keilKupplungRiegel());\n\t r.merge(_keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2));\n\t p = new THREE.CurvePath();\n\t p.add(new THREE.LineCurve3(new THREE.Vector3(0, 0, 0), new THREE.Vector3(200, 100, 0)));\n\t p.add(new THREE.LineCurve3(new THREE.Vector3(200, 100, 0), new THREE.Vector3(l - 350, 100, 0)));\n\t p.add(new THREE.LineCurve3(new THREE.Vector3(l - 350, 100, 0), new THREE.Vector3(l - 150, 0, 0)));\n\t r2 = _cylinderPath(RohrDurchmesserAussen * .6, RohrDurchmesserInnen * .6, p);\n\t r2.applyMatrix(_m(75, 0, 0, 'X', -1));\n\t r.merge(r2);\n\t for (i = j = 500, ref = l - 1; j <= ref; i = j += 500) {\n\t f = new THREE.BoxGeometry(100, 100, 5);\n\t f.applyMatrix(_m(i, 0, -50, 'X', 1));\n\t r.merge(f);\n\t }\n\t r.applyMatrix(_m(0, 0, 0, 'X', -1));\n\t return r;\n\t };\n\t\n\t _teller = function() {\n\t return _cylinder(TellerDurchmesser, RohrDurchmesserAussen, TellerHoehe);\n\t };\n\t\n\t _rohrverbinder = function() {\n\t var rv;\n\t rv = _cylinder(45, 30, 400);\n\t rv.applyMatrix(_m(0, 0, -200));\n\t return rv;\n\t };\n\t\n\t _VertikalStiel = function(l, rv) {\n\t var i, j, ref, v;\n\t if (rv == null) {\n\t rv = 1;\n\t }\n\t v = new THREE.Geometry();\n\t v.merge(_rohr(l), _m(0, 0, 100));\n\t for (i = j = 500, ref = l; j <= ref; i = j += 500) {\n\t v.merge(_teller(), _m(0, 0, i));\n\t }\n\t if (rv === 1) {\n\t v.merge(_rohrverbinder(), _m(0, 0, l));\n\t }\n\t v.applyMatrix(_m(0, 0, 0, 'X', -1));\n\t return v;\n\t };\n\t\n\t FX = function(l, x, y, z, o) {\n\t var f;\n\t f = _threadCyl(10 * l);\n\t f.merge(new THREE.BoxGeometry(100, 100, 5));\n\t f.merge(new THREE.BoxGeometry(120, 40, 10), _m(0, 0, 70, 'Z', .5));\n\t if (parseInt(o) < 0 || (o && o[0] === 'n') || o === '-') {\n\t f.applyMatrix(_m(10 * x, 10 * y + 175, 10 * z, 'X', 1));\n\t } else {\n\t f.applyMatrix(_m(10 * x, 10 * y - 144, 10 * z, 'X', -1));\n\t }\n\t return f;\n\t };\n\t\n\t VX = function(l, x, y, z, o) {\n\t var d, j, len, ref, rv, s, v;\n\t d = 0;\n\t rv = 1;\n\t if (o) {\n\t ref = o.split(',');\n\t for (j = 0, len = ref.length; j < len; j++) {\n\t s = ref[j];\n\t if (parseInt(s) < 0 || (s && s[0] === 'n') || s === '-') {\n\t d = 2;\n\t }\n\t if (s[0] === 'o') {\n\t rv = 0;\n\t }\n\t }\n\t }\n\t v = _VertikalStiel(10 * l, rv);\n\t v.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'X', d));\n\t return v;\n\t };\n\t\n\t RX = function(l, x, y, z, d) {\n\t var r;\n\t r = _Riegel(10 * l);\n\t switch (d) {\n\t case \"X\":\n\t d = 0;\n\t break;\n\t case \"Y\":\n\t d = 1;\n\t break;\n\t case \"-X\":\n\t d = 2;\n\t break;\n\t case \"-Y\":\n\t d = 3;\n\t break;\n\t default:\n\t return;\n\t }\n\t r.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'Y', -d));\n\t return r;\n\t };\n\t\n\t DRX = function(l, x, y, z, d) {\n\t var r;\n\t r = _DoppelRiegel(10 * l);\n\t switch (d) {\n\t case \"X\":\n\t d = 0;\n\t break;\n\t case \"Y\":\n\t d = 1;\n\t break;\n\t case \"-X\":\n\t d = 2;\n\t break;\n\t case \"-Y\":\n\t d = 3;\n\t break;\n\t default:\n\t return;\n\t }\n\t r.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'Y', -d));\n\t return r;\n\t };\n\t\n\t VDX = function(w, h, x, y, z, d, o) {\n\t var s, vd;\n\t s = -1;\n\t switch (d) {\n\t case \"X\":\n\t d = 0;\n\t break;\n\t case \"Y\":\n\t d = 1;\n\t break;\n\t case \"-X\":\n\t d = 2;\n\t break;\n\t case \"-Y\":\n\t d = 3;\n\t break;\n\t default:\n\t return;\n\t }\n\t s = d === 1 || d === 2 ? 1 : -1;\n\t if (parseInt(o) < 0 || (o && o[0] === 'n') || o === '-') {\n\t s *= -1;\n\t }\n\t vd = _VertikalDiagonale(10 * w, s, 10 * h);\n\t vd.applyMatrix(_m(0, 0, 0, 'X', -1));\n\t vd.applyMatrix(_m(0, 0, 0, 'Y', -d));\n\t vd.applyMatrix(_m(10 * x, 10 * y, 10 * z));\n\t return vd;\n\t };\n\t\n\t BX = function(l, x, y, z, d, s) {\n\t var b, bl, j, len, o, ref, w;\n\t bl = new THREE.Geometry();\n\t s = s.split('/');\n\t o = 0;\n\t w = s[0];\n\t if (s.length >= 2 && parseInt(s[1])) {\n\t o = parseInt(s[1]);\n\t }\n\t ref = w.split(',');\n\t for (j = 0, len = ref.length; j < len; j++) {\n\t b = ref[j];\n\t bl.merge(_Belag(10 * l, 10 * b, o));\n\t o += 10 * b + 5;\n\t }\n\t switch (d) {\n\t case \"X\":\n\t bl.applyMatrix(_m(10 * x + 10 * l, 10 * y, 10 * z, 'Y', -1));\n\t break;\n\t case \"Y\":\n\t bl.applyMatrix(_m(10 * x, 10 * y, 10 * z));\n\t break;\n\t case \"-X\":\n\t bl.applyMatrix(_m(10 * x, 10 * y, 10 * z, 'Y', 1));\n\t break;\n\t case \"-Y\":\n\t bl.applyMatrix(_m(10 * x, 10 * y, 10 * z + 10 * l, 'Y', 2));\n\t }\n\t return bl;\n\t };\n\t\n\t HV = function(x, h, z, d) {\n\t var hv;\n\t hv = _haengegeruestVerbinder();\n\t switch (d) {\n\t case \"X\":\n\t d = 0;\n\t break;\n\t case \"Y\":\n\t d = 1;\n\t break;\n\t case \"-X\":\n\t d = 2;\n\t break;\n\t case \"-Y\":\n\t d = 3;\n\t break;\n\t default:\n\t return;\n\t }\n\t hv.applyMatrix(_m(10 * x, 10 * h, 10 * z, 'Y', -d));\n\t return hv;\n\t };\n\t\n\t AnfSt = function(x, h, z) {\n\t var a;\n\t a = _AnfStk();\n\t a.applyMatrix(_m(10 * x, 10 * h, 10 * z));\n\t return a;\n\t };\n\t\n\t function EGS_Elements() {\n\t console.log(\"EGS_Elements constructed\");\n\t }\n\t\n\t EGS_Elements.prototype.getGeometry = function(element) {\n\t var d, h, n, s, x, z;\n\t n = element.get('element');\n\t x = element.get('x');\n\t z = element.get('y');\n\t h = element.get('h');\n\t d = element.get('direction');\n\t s = element.get('special');\n\t switch (n) {\n\t case \"AnfSt\":\n\t return AnfSt(x, h, z);\n\t case \"V50\":\n\t return VX(50, x, h, z, s);\n\t case \"V100\":\n\t return VX(100, x, h, z, s);\n\t case \"V150\":\n\t return VX(150, x, h, z, s);\n\t case \"V200\":\n\t return VX(200, x, h, z, s);\n\t case \"V300\":\n\t return VX(300, x, h, z, s);\n\t case \"V400\":\n\t return VX(400, x, h, z, s);\n\t case \"R25\":\n\t return RX(25, x, h, z, d);\n\t case \"R50\":\n\t return RX(50, x, h, z, d);\n\t case \"R100\":\n\t return RX(100, x, h, z, d);\n\t case \"R200\":\n\t return RX(200, x, h, z, d);\n\t case \"R300\":\n\t return RX(300, x, h, z, d);\n\t case \"DR100\":\n\t return DRX(100, x, h, z, d);\n\t case \"DR200\":\n\t return DRX(200, x, h, z, d);\n\t case \"DR300\":\n\t return DRX(300, x, h, z, d);\n\t case \"D100\":\n\t return VDX(100, 200, x, h, z, d, s);\n\t case \"D150\":\n\t return VDX(150, 200, x, h, z, d, s);\n\t case \"D200\":\n\t return VDX(200, 200, x, h, z, d, s);\n\t case \"D300\":\n\t return VDX(300, 200, x, h, z, d, s);\n\t case \"DS200\":\n\t return VDX(200, 100, x, h, z, d, s);\n\t case \"F40\":\n\t return FX(40, x, h, z, s);\n\t case \"F60\":\n\t return FX(40, x, h, z, s);\n\t case \"B100\":\n\t return BX(100, x, h, z, d, s);\n\t case \"B200\":\n\t return BX(200, x, h, z, d, s);\n\t case \"B300\":\n\t return BX(300, x, h, z, d, s);\n\t case \"HV\":\n\t return HV(x, h, z, d);\n\t default:\n\t return new THREE.Geometry();\n\t }\n\t };\n\t\n\t return EGS_Elements;\n\t\n\t})();\n\t\n\tmodule.exports = EGS_Elements;\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, ElementList,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tElementList = __webpack_require__(17);\n\t\n\tmodule.exports = (function(superClass) {\n\t extend(_Class, superClass);\n\t\n\t function _Class() {\n\t return _Class.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t _Class.prototype.dataTable = null;\n\t\n\t _Class.prototype.fetched = false;\n\t\n\t _Class.prototype.fields = {\n\t show: {\n\t name: \"Anzeige\"\n\t },\n\t color: {\n\t name: \"Farbe\"\n\t },\n\t element: {\n\t name: \"Bauteil\"\n\t },\n\t x: {\n\t name: \"X\"\n\t },\n\t y: {\n\t name: \"Y\"\n\t },\n\t h: {\n\t name: \"H\"\n\t },\n\t direction: {\n\t name: \"Richtung\"\n\t },\n\t special: {\n\t name: \"Besonderheit\"\n\t }\n\t };\n\t\n\t _Class.prototype.determineColumn = function(label) {\n\t if (/^\\s?(Element|Bauteil)\\s$/i.test(label)) {\n\t return 'element';\n\t }\n\t if (/^\\s?(Richtung)\\s?$/i.test(label)) {\n\t return 'direction';\n\t }\n\t if (/^\\s?(Besonderheit)\\s(.*)?$/i.test(label)) {\n\t return 'special';\n\t }\n\t if (/^(Anzeige\\s)?(Anzeige)$/i.test(label)) {\n\t return 'show';\n\t }\n\t if (/^(Position)?\\s?(X)$/i.test(label)) {\n\t return 'x';\n\t }\n\t if (/^(Position)?\\s?(Y)$/i.test(label)) {\n\t return 'y';\n\t }\n\t if (/^(Position)?\\s?(H)$/i.test(label)) {\n\t return 'h';\n\t }\n\t if (/^(Anzeige)?\\s?(Farbe)$/i.test(label)) {\n\t return 'color';\n\t }\n\t return null;\n\t };\n\t\n\t _Class.prototype.idAttribute = \"sheet\";\n\t\n\t _Class.prototype.initialize = function(attributes, options) {\n\t this.app = options.collection.app;\n\t return this.elements = new ElementList([], {\n\t app: this.app\n\t });\n\t };\n\t\n\t _Class.prototype.setSelected = function(cb) {\n\t this.collection.setSelected(this);\n\t if (!this.fetched) {\n\t return this.fetch({\n\t success: (function(_this) {\n\t return function() {\n\t _this.fetched = true;\n\t if (cb) {\n\t return cb(_this);\n\t }\n\t };\n\t })(this)\n\t });\n\t } else {\n\t if (cb) {\n\t return cb(this);\n\t }\n\t }\n\t };\n\t\n\t _Class.prototype.parse = function(resp) {\n\t var c, colTypes, cols, cv, d, data, i, j, k, key, r, ref, ref1, ref2;\n\t this.dataTable = resp.getDataTable();\n\t cols = {};\n\t colTypes = {};\n\t for (c = j = 0, ref = this.dataTable.getNumberOfColumns(); 0 <= ref ? j < ref : j > ref; c = 0 <= ref ? ++j : --j) {\n\t cv = this.determineColumn(this.dataTable.getColumnLabel(c));\n\t if (cv) {\n\t cols[cv] = c;\n\t colTypes[cv] = true;\n\t }\n\t }\n\t ref1 = this.fields;\n\t for (i in ref1) {\n\t c = ref1[i];\n\t if (colTypes[i] == null) {\n\t console.log(\"Spalte '\" + c.name + \"' nicht gefunden!\");\n\t return;\n\t }\n\t }\n\t data = [];\n\t for (r = k = 0, ref2 = this.dataTable.getNumberOfRows(); 0 <= ref2 ? k < ref2 : k > ref2; r = 0 <= ref2 ? ++k : --k) {\n\t d = {};\n\t for (key in cols) {\n\t c = cols[key];\n\t d[key] = this.dataTable.getValue(r, c);\n\t }\n\t data.push(d);\n\t }\n\t console.log(\"Construction: loaded element list: \", data);\n\t return {\n\t elements: new ElementList(data, {\n\t app: this.app\n\t })\n\t };\n\t };\n\t\n\t return _Class;\n\t\n\t})(Backbone.Model);\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tmodule.exports = (function(superClass) {\n\t extend(_Class, superClass);\n\t\n\t function _Class() {\n\t return _Class.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t _Class.prototype.app = null;\n\t\n\t _Class.prototype.geometry = null;\n\t\n\t _Class.prototype.initialize = function(attributes, options) {\n\t _Class.__super__.initialize.call(this, attributes, options);\n\t this.app = options.collection.app;\n\t return this.geometry = this.app.egsElementProvider.getGeometry(this);\n\t };\n\t\n\t return _Class;\n\t\n\t})(Backbone.Model);\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, DataSourceModal, keyNormalizer,\n\t bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tkeyNormalizer = __webpack_require__(7);\n\t\n\tmodule.exports = DataSourceModal = (function() {\n\t DataSourceModal.prototype.modal = document.getElementById('dataSourceModal');\n\t\n\t DataSourceModal.prototype.inputField = document.getElementById('dataSourceModal-input');\n\t\n\t DataSourceModal.prototype.saveButton = document.getElementById('dataSourceModal-save');\n\t\n\t DataSourceModal.prototype.cancelButton = document.getElementById('dataSourceModal-cancel');\n\t\n\t DataSourceModal.prototype.resetButton = document.getElementById('dataSourceModal-reset');\n\t\n\t DataSourceModal.prototype.errorBanner = document.getElementById('dataSourceModal-error');\n\t\n\t function DataSourceModal(app) {\n\t this.app = app;\n\t this.save = bind(this.save, this);\n\t this.reset = bind(this.reset, this);\n\t this.saveButton.addEventListener('click', this.save);\n\t this.cancelButton.addEventListener('click', this.cancel);\n\t this.resetButton.addEventListener('click', this.reset);\n\t }\n\t\n\t DataSourceModal.prototype.reset = function(evt) {\n\t return this.inputField.value = App.defaultSource;\n\t };\n\t\n\t DataSourceModal.prototype.save = function(evt) {\n\t var keygid;\n\t keygid = keyNormalizer(this.inputField.value, true);\n\t if (keygid) {\n\t this.errorBanner.style.display = 'none';\n\t return this.app.navigate(keygid.join('/'), {\n\t trigger: true\n\t });\n\t } else {\n\t this.errorBanner.style.display = '';\n\t evt.preventDefault();\n\t return evt.stopPropagation();\n\t }\n\t };\n\t\n\t return DataSourceModal;\n\n\t})();\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone, Display, EGS_ElementView, EGS_View, OrbitControls, THREE,\n\t extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n\t hasProp = {}.hasOwnProperty,\n\t bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tTHREE = __webpack_require__(6);\n\t\n\tOrbitControls = __webpack_require__(11)(THREE);\n\t\n\tEGS_ElementView = (function(superClass) {\n\t extend(EGS_ElementView, superClass);\n\t\n\t function EGS_ElementView() {\n\t return EGS_ElementView.__super__.constructor.apply(this, arguments);\n\t }\n\t\n\t EGS_ElementView.prototype.parent = null;\n\t\n\t EGS_ElementView.prototype.mesh = null;\n\t\n\t EGS_ElementView.prototype.color = null;\n\t\n\t EGS_ElementView.prototype.display = null;\n\t\n\t EGS_ElementView.prototype.parseNum = function(text) {\n\t var color, j, len, list, ptt, t1, t2, tt;\n\t if (!text) {\n\t return [];\n\t }\n\t list = [];\n\t t1 = String(text).split(',');\n\t for (j = 0, len = t1.length; j < len; j++) {\n\t t2 = t1[j];\n\t tt = t2.split(':');\n\t ptt = tt[0].split('-');\n\t color = tt.length === 2 ? tt[1] : null;\n\t if (ptt[0] === '') {\n\t ptt[0] = null;\n\t }\n\t if (ptt.length === 1) {\n\t ptt[1] = ptt[0];\n\t }\n\t if (ptt[1] === '') {\n\t ptt[1] = null;\n\t }\n\t if (ptt[0] >= 0) {\n\t list.push([ptt[0], ptt[1], color]);\n\t }\n\t }\n\t return list;\n\t };\n\t\n\t EGS_ElementView.prototype.initialize = function(options) {\n\t var d, i, j, k, len, len1, ref, ref1, results;\n\t this.parent = options.parent;\n\t this.model.geometry.computeBoundingBox();\n\t this.color = this.parent.getAndStoreColor(this.model.get('color'));\n\t this.mesh = new THREE.Mesh(this.model.geometry, this.color);\n\t this.mesh.visible = false;\n\t this.display = [];\n\t ref = this.parseNum(this.model.get('show'));\n\t results = [];\n\t for (j = 0, len = ref.length; j < len; j++) {\n\t d = ref[j];\n\t ref1 = [0, 1];\n\t for (k = 0, len1 = ref1.length; k < len1; k++) {\n\t i = ref1[k];\n\t if (d[i] !== null) {\n\t d[i] = parseInt(d[i]);\n\t this.parent.steps.push(d[i]);\n\t }\n\t }\n\t d[2] = d[2] === null ? this.color : this.parent.getAndStoreColor(d[2]);\n\t results.push(this.display.push(d));\n\t }\n\t return results;\n\t };\n\t\n\t EGS_ElementView.prototype.getMesh = function() {\n\t return this.mesh;\n\t };\n\t\n\t EGS_ElementView.prototype.setStep = function(step) {\n\t var i, show;\n\t show = null;\n\t for (i in this.display) {\n\t if (this.display[i][0] !== null && this.display[i][1] !== null) {\n\t if (step >= this.display[i][0] && step <= this.display[i][1]) {\n\t show = this.display[i][2];\n\t }\n\t } else if (this.display[i][0] !== null) {\n\t if (step >= this.display[i][0]) {\n\t show = this.display[i][2];\n\t }\n\t } else if (this.display[i][1] !== null) {\n\t if (step <= this.display[i][1]) {\n\t show = this.display[i][2];\n\t }\n\t }\n\t }\n\t this.mesh.visible = show !== null;\n\t return this.mesh.material = show ? show : this.color;\n\t };\n\t\n\t return EGS_ElementView;\n\t\n\t})(Backbone.View);\n\t\n\tDisplay = (function() {\n\t Display.prototype.center = new THREE.Vector3();\n\t\n\t Display.prototype.bbox = new THREE.Box3();\n\t\n\t Display.prototype.startTime = null;\n\t\n\t Display.prototype.turnRate = 0;\n\t\n\t Display.prototype.turnOffset = 0;\n\t\n\t Display.prototype.camDistance = 0;\n\t\n\t Display.prototype.camDistanceOffset = 0;\n\t\n\t Display.prototype.camHeight = 0;\n\t\n\t Display.prototype.camHeightOffset = 0;\n\t\n\t Display.prototype.scene = null;\n\t\n\t Display.prototype.renderer = null;\n\t\n\t Display.prototype.camera = null;\n\t\n\t Display.prototype.controls = null;\n\t\n\t Display.prototype.animationRequest = null;\n\t\n\t Display.prototype._addRenderer = function(domElementID) {\n\t var canvas, hasWebGL;\n\t hasWebGL = false;\n\t try {\n\t canvas = document.createElement('canvas');\n\t hasWebGL = !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\n\t } catch (undefined) {}\n\t if (hasWebGL) {\n\t this.renderer = new THREE.WebGLRenderer({\n\t antialias: true\n\t });\n\t } else {\n\t this.renderer = new THREE.CanvasRenderer();\n\t }\n\t this.renderer.setPixelRatio(window.devicePixelRatio);\n\t this.renderer.setSize(window.innerWidth, window.innerHeight);\n\t return document.getElementById(domElementID).appendChild(this.renderer.domElement);\n\t };\n\t\n\t Display.prototype._addLights = function() {\n\t var dirLight, hemiLight;\n\t hemiLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.6);\n\t hemiLight.color.setHSL(0.6, 1, 0.6);\n\t hemiLight.groundColor.setHSL(0.095, 1, 0.75);\n\t hemiLight.position.set(0, 500, 0);\n\t this.scene.add(hemiLight);\n\t dirLight = new THREE.DirectionalLight(0xffffff, 1);\n\t dirLight.color.setHSL(0.1, 1, 0.95);\n\t dirLight.position.set(-5000, 10000, -5000);\n\t dirLight.position.multiplyScalar(50);\n\t return this.scene.add(dirLight);\n\t };\n\t\n\t Display.prototype._addCamera = function() {\n\t var height, width;\n\t width = window.innerWidth;\n\t height = window.innerHeight;\n\t return this.camera = new THREE.PerspectiveCamera(70, width / height, 1, 200000);\n\t };\n\t\n\t Display.prototype._addControls = function() {\n\t this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n\t this.controls.zoomSpeed = .3;\n\t return this.controls.rotateSpeed = .3;\n\t };\n\t\n\t Display.prototype.onWindowResize = function() {\n\t var h, style, w;\n\t if (!this.camera) {\n\t return;\n\t }\n\t style = getComputedStyle(document.getElementById(this.domElementID), null);\n\t w = parseInt(style.getPropertyValue('width'));\n\t h = parseInt(style.getPropertyValue('height'));\n\t this.camera.aspect = w / h;\n\t this.camera.updateProjectionMatrix();\n\t return this.renderer.setSize(w, h);\n\t };\n\t\n\t Display.prototype._animationStart = function() {\n\t if (!this.scene) {\n\t return;\n\t }\n\t if (!this.animationRequest) {\n\t return this._animationFrame();\n\t }\n\t };\n\t\n\t Display.prototype._animationStop = function() {\n\t if (this.animationRequest) {\n\t window.cancelAnimationFrame(this.animationRequest);\n\t }\n\t return this.animationRequest = null;\n\t };\n\t\n\t Display.prototype._animationFrame = function() {\n\t this.animationRequest = window.requestAnimationFrame(((function(_this) {\n\t return function() {\n\t return _this._animationFrame();\n\t };\n\t })(this)));\n\t this.calcCamPos();\n\t return this.renderer.render(this.scene, this.camera);\n\t };\n\t\n\t function Display(domElementID1) {\n\t this.domElementID = domElementID1;\n\t this.onWindowResize = bind(this.onWindowResize, this);\n\t this.scene = new THREE.Scene;\n\t this._addRenderer(this.domElementID);\n\t this._addLights();\n\t this._addCamera();\n\t this._addControls();\n\t this.onWindowResize();\n\t this._animationStart();\n\t }\n\t\n\t Display.prototype.resetView = function() {\n\t var fovH, size;\n\t this.center = this.bbox.center();\n\t size = this.bbox.size();\n\t fovH = this.camera.fov / 180 * Math.PI * 80 / 100;\n\t this.camDistance = Math.max.apply(Math, [size.y / 2 * Math.tan(fovH) + Math.sqrt(size.x * size.x / 4 + size.z * size.z / 4), size.y / 2 * Math.tan(fovH) + size.z / 2, size.y / 2 * Math.tan(fovH) + size.x / 2, size.x / 2 * Math.tan(fovH) / this.camera.aspect + size.z / 2, size.z / 2 * Math.tan(fovH) / this.camera.aspect + size.x / 2]);\n\t this.camHeight = this.center.y;\n\t return this.controls.target.copy(this.center);\n\t };\n\t\n\t Display.prototype.removeAll = function() {\n\t while (this.scene.children.length) {\n\t this.scene.remove(this.scene.children[0]);\n\t }\n\t this._addLights();\n\t return this.bbox = new THREE.Box3();\n\t };\n\t\n\t Display.prototype.add = function(element) {\n\t this.scene.add(element.getMesh());\n\t this.bbox.union(element.model.geometry.boundingBox);\n\t return this.resetView();\n\t };\n\t\n\t Display.prototype.setTurnRate = function(rate) {\n\t var delta;\n\t delta = (Date.now()) - this.startTime;\n\t this.turnOffset = this.turnOffset + delta / (60000 / this.turnRate);\n\t this.startTime = Date.now();\n\t this.controls.enableZoom = rate === 0;\n\t this.controls.enablePan = rate === 0;\n\t this.controls.enableRotate = rate === 0;\n\t this.turnRate = rate;\n\t return this.calcCamPos(true);\n\t };\n\t\n\t Display.prototype.setHeight = function(height, relation) {\n\t return this.camHeight = (function() {\n\t switch (relation) {\n\t case \"abs\":\n\t return 10 * height;\n\t case \"incr\":\n\t return this.camHeight + 10 * height;\n\t case \"rel\":\n\t return 2 * this.center.y * height;\n\t default:\n\t return this.camHeight;\n\t }\n\t }).call(this);\n\t };\n\t\n\t Display.prototype.calcCamPos = function(override) {\n\t var delta, turnIndex;\n\t if (override) {\n\t turnIndex = this.turnOffset;\n\t } else {\n\t if (this.turnRate === 0) {\n\t return;\n\t }\n\t delta = (Date.now()) - this.startTime;\n\t turnIndex = this.turnOffset + delta / (60000 / this.turnRate);\n\t }\n\t this.camera.position.x = this.center.x + Math.sin(2 * Math.PI * turnIndex) * (this.camDistance + this.camDistanceOffset);\n\t this.camera.position.y = this.camHeight;\n\t this.camera.position.z = this.center.z + Math.cos(2 * Math.PI * turnIndex) * (this.camDistance + this.camDistanceOffset);\n\t return this.camera.lookAt(this.center);\n\t };\n\t\n\t return Display;\n\t\n\t})();\n\t\n\tEGS_View = (function(superClass) {\n\t var _hexToRGB, colorTable;\n\t\n\t extend(EGS_View, superClass);\n\t\n\t EGS_View.prototype.elements = [];\n\t\n\t EGS_View.prototype.steps = [];\n\t\n\t EGS_View.prototype.stepNo = 0;\n\t\n\t colorTable = [];\n\t\n\t EGS_View.prototype.setTurnRate = function(rate) {\n\t return this.display.setTurnRate(Math.max(0, rate));\n\t };\n\t\n\t EGS_View.prototype.setHeight = function(height, relation) {\n\t return this.display.setHeight(height, relation);\n\t };\n\t\n\t EGS_View.prototype.resetView = function() {\n\t return this.display.resetView();\n\t };\n\t\n\t function EGS_View(app, domElementID1) {\n\t this.app = app;\n\t this.domElementID = domElementID1;\n\t this.display = new Display(this.domElementID);\n\t }\n\t\n\t EGS_View.prototype.showConstruct = function(construction) {\n\t var e, j, len, ref;\n\t this.elements = [];\n\t this.steps = [];\n\t construction.get('elements').each((function(_this) {\n\t return function(e) {\n\t return _this.elements.push(new EGS_ElementView({\n\t model: e,\n\t parent: _this\n\t }));\n\t };\n\t })(this));\n\t this.steps = this.steps.filter(function(v, i, x) {\n\t return i === x.indexOf(v);\n\t });\n\t this.steps.sort(function(a, b) {\n\t return a - b;\n\t });\n\t this.app.view.SecondaryNav.setSteps(this.steps);\n\t this.display.removeAll();\n\t ref = this.elements;\n\t for (j = 0, len = ref.length; j < len; j++) {\n\t e = ref[j];\n\t this.display.add(e);\n\t }\n\t return this.updateConstruct(this.stepNo);\n\t };\n\t\n\t EGS_View.prototype.updateConstruct = function(step) {\n\t var e, j, len, ref;\n\t this.stepNo = step;\n\t ref = this.elements;\n\t for (j = 0, len = ref.length; j < len; j++) {\n\t e = ref[j];\n\t e.setStep(parseInt(this.steps[this.stepNo]));\n\t }\n\t return this.render();\n\t };\n\t\n\t _hexToRGB = function(hex) {\n\t var r, rs;\n\t r = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\t rs = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec(hex);\n\t if (r) {\n\t return (parseInt(r[1], 16) << 16) + (parseInt(r[2], 16) << 8) + parseInt(r[3], 16);\n\t }\n\t if (rs) {\n\t return ((parseInt(rs[1], 16) * 17) << 16) + ((parseInt(rs[2], 16) * 17) << 8) + (parseInt(rs[3], 16) * 17);\n\t }\n\t return 0x888888;\n\t };\n\t\n\t EGS_View.prototype.getAndStoreColor = function(val) {\n\t if (colorTable[val] == null) {\n\t colorTable[val] = new THREE.MeshPhongMaterial({\n\t color: _hexToRGB(val),\n\t emissive: 0x000000,\n\t specular: 0x000000,\n\t shininess: 30\n\t });\n\t }\n\t return colorTable[val];\n\t };\n\t\n\t return EGS_View;\n\t\n\t})(Backbone.View);\n\t\n\tmodule.exports = EGS_View;\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Backbone;\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tmodule.exports = Backbone.View.extend({\n\t el: document.getElementById('primaryNav'),\n\t template: __webpack_require__(27),\n\t activeConstructionList: null,\n\t initialize: function(dataSourceList) {\n\t this.dataSourceList = dataSourceList;\n\t this.listenTo(this.dataSourceList, 'select', function() {\n\t if (this.activeConstructionList) {\n\t this.stopListening(this.activeConstructionList);\n\t }\n\t this.activeConstructionList = null;\n\t return this.render('loading', 'unset');\n\t });\n\t this.listenTo(this.dataSourceList, \"sync\", function() {\n\t this.activeConstructionList = this.dataSourceList.selected.get('constructions');\n\t this.listenTo(this.activeConstructionList, 'select', function() {\n\t return this.render('loaded', 'loading');\n\t });\n\t this.listenTo(this.activeConstructionList, 'sync', function() {\n\t return this.render('loaded', 'loaded');\n\t });\n\t return this.render('loaded', 'unset');\n\t });\n\t return this.render('unset', 'unset');\n\t },\n\t render: function(dataSourceState, constructionState) {\n\t var constructionList, selected, tpl;\n\t if (dataSourceState == null) {\n\t dataSourceState = 0;\n\t }\n\t if (constructionState == null) {\n\t constructionState = 0;\n\t }\n\t tpl = {};\n\t if (dataSourceState === 'loaded') {\n\t tpl.item = [];\n\t constructionList = this.dataSourceList.selected.get('constructions');\n\t selected = null;\n\t constructionList.each(function(e) {\n\t if (e === constructionList.selected) {\n\t selected = e.get('name');\n\t }\n\t return tpl.item.push({\n\t sheet: e.get('sheet'),\n\t name: e.get('name')\n\t });\n\t });\n\t if (constructionState !== \"unset\") {\n\t tpl.auswahl = \"\" + selected;\n\t } else {\n\t tpl.auswahl = tpl.item.length + \" Konstruktionen zur Auswahl\";\n\t }\n\t }\n\t if (dataSourceState === 'loading' || constructionState === 'loading') {\n\t tpl.loading = true;\n\t }\n\t return this.el.innerHTML = this.template(tpl);\n\t }\n\t});\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function($) {var Backbone,\n\t modulo = function(a, b) { return (+a % (b = +b) + b) % b; };\n\t\n\tBackbone = __webpack_require__(2);\n\t\n\tmodule.exports = Backbone.View.extend({\n\t el: document.getElementById('secondaryNav'),\n\t template: __webpack_require__(28),\n\t steps: [],\n\t step: 0,\n\t counter: 0,\n\t stepper: 5,\n\t rotRate: 2,\n\t events: {\n\t \"click .step-rel\": \"stepRel\",\n\t \"click .step-abs\": \"stepAbs\",\n\t \"click .step-auto\": \"stepAuto\",\n\t \"click .rot-incr\": \"rotationIncr\",\n\t \"click .rot-setp\": \"rotationSetp\",\n\t \"click .view-reset\": \"viewReset\",\n\t \"click .height-incr\": \"heightIncr\",\n\t \"click .height-setabs\": \"heightSetAbs\",\n\t \"click .height-setrel\": \"heightSetRel\"\n\t },\n\t heightIncr: function(e) {\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.setHeight(parseInt(e.target.dataset.incr), 'incr');\n\t }\n\t return this.update();\n\t },\n\t heightSetAbs: function(e) {\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.setHeight(parseInt(e.target.dataset.setabs), 'abs');\n\t }\n\t return this.update();\n\t },\n\t heightSetRel: function(e) {\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.setHeight(parseFloat(e.target.dataset.setrel), 'rel');\n\t }\n\t return this.update();\n\t },\n\t stepRel: function(e) {\n\t return this.incrStep(e.target.dataset.step);\n\t },\n\t stepAbs: function(e) {\n\t return this.setStep(e.target.dataset.step);\n\t },\n\t stepAuto: function(e) {\n\t this.stepper = parseInt(e.target.dataset.val);\n\t return this.render();\n\t },\n\t rotationIncr: function(e) {\n\t this.rotRate += parseFloat(e.target.dataset.incr);\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.setTurnRate(this.rotRate);\n\t }\n\t return this.update();\n\t },\n\t rotationSetp: function(e) {\n\t this.rotRate = parseFloat(e.target.dataset.setp);\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.setTurnRate(this.rotRate);\n\t }\n\t return this.update();\n\t },\n\t viewReset: function(e) {\n\t this.rotRate = 2;\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.setTurnRate(this.rotRate);\n\t }\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.resetView();\n\t }\n\t return this.update();\n\t },\n\t startup: function() {\n\t this.setStep(0);\n\t setInterval(((function(_this) {\n\t return function() {\n\t return _this.timeTrigger();\n\t };\n\t })(this)), 1000);\n\t this.app.view.EGS.updateConstruct(this.step);\n\t return this.app.view.EGS.setTurnRate(this.rotRate);\n\t },\n\t setSteps: function(steps) {\n\t this.steps = steps;\n\t this.step = 0;\n\t return this.render();\n\t },\n\t incrStep: function(dir) {\n\t dir = parseInt(dir);\n\t if (this.step + dir < 0) {\n\t return this.setStep(this.step + this.steps.length + dir);\n\t }\n\t if (this.step + dir >= this.steps.length) {\n\t return this.setStep(this.step - this.steps.length + dir);\n\t }\n\t return this.setStep(this.step + dir);\n\t },\n\t setStep: function(step) {\n\t this.step = parseInt(step);\n\t console.log(\"Aufbauschritt: \" + this.steps[this.step] + \" (index: \" + this.step + \")\");\n\t if (this.app.view.EGS) {\n\t this.app.view.EGS.updateConstruct(this.step);\n\t }\n\t return this.update();\n\t },\n\t timeTrigger: function() {\n\t if (this.stepper && modulo(++this.counter, this.stepper) === 0) {\n\t return this.incrStep(1);\n\t }\n\t },\n\t initialize: function(app) {\n\t this.app = app;\n\t return this.render();\n\t },\n\t update: function() {\n\t $('#stepNo', this.$el).text(this.steps[this.step]);\n\t $('.steps li', this.$el).removeClass('active');\n\t $('.step-' + this.step, this.$el).addClass('active');\n\t $('.rots li', this.$el).removeClass('active');\n\t return $('.rot-' + this.rotRate, this.$el).addClass('active');\n\t },\n\t render: function() {\n\t var i, steps, tpl;\n\t steps = [];\n\t for (i in this.steps) {\n\t steps.push({\n\t i: i,\n\t name: \"Schritt \" + this.steps[i]\n\t });\n\t }\n\t tpl = {\n\t steps: steps,\n\t step: this.step,\n\t stepName: this.steps[this.step],\n\t auto: this.stepper,\n\t rotMode: this.rotRate > 0 ? this.rotRate + ' U/min' : \"Manuell\",\n\t rate: this.rotRate\n\t };\n\t return this.el.innerHTML = this.template(tpl);\n\t }\n\t});\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ },\n/* 25 */,\n/* 26 */,\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Handlebars = __webpack_require__(10);\n\tfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\n\tmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n\t var stack1, helper, alias1=depth0 != null ? depth0 : {};\n\t\n\t return \"\t
  • \\n\t\tKonstruktion: \\n\t
  • \\n\t
  • \\n\t\t \"\n\t + container.escapeExpression(((helper = (helper = helpers.auswahl || (depth0 != null ? depth0.auswahl : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"auswahl\",\"hash\":{},\"data\":data}) : helper)))\n\t + \" \\n\t\t
      \\n\"\n\t + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.item : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n\t + \"\t\t
    \\n\t
  • \\n\"\n\t + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.loading : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n\t},\"2\":function(container,depth0,helpers,partials,data) {\n\t var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\t\n\t return \"\t\t\t
  • \"\n\t + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"name\",\"hash\":{},\"data\":data}) : helper)))\n\t + \"
  • \\n\";\n\t},\"4\":function(container,depth0,helpers,partials,data) {\n\t return \"\t
  • \\n\t\t
    \\n\t\t
    \\n\t\t
    \\n\t
  • \\n\t
  • \\n\t\twird geladen...\\n\t
  • \\n\";\n\t},\"6\":function(container,depth0,helpers,partials,data) {\n\t var stack1;\n\t\n\t return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.loading : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data})) != null ? stack1 : \"\");\n\t},\"7\":function(container,depth0,helpers,partials,data) {\n\t return \"\t
  • \\n\t\t
    \\n\t\t
    \\n\t\t
    \\n\t
  • \\n\t
  • \\n\t\tKonstuktionen werden geladen...\\n\t
  • \\n\";\n\t},\"9\":function(container,depth0,helpers,partials,data) {\n\t return \"\t
  • \\n\t\tKeine Datenquelle ausgewählt!\\n\t
  • \\n\";\n\t},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n\t var stack1;\n\t\n\t return \"
      \\n\"\n\t + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.item : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\")\n\t + \"
    \\n
    \\n\t\\n
    \\n\";\n\t},\"useData\":true});\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Handlebars = __webpack_require__(10);\n\tfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\n\tmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n\t return \"\";\n\t},\"3\":function(container,depth0,helpers,partials,data) {\n\t return \" active\";\n\t},\"5\":function(container,depth0,helpers,partials,data) {\n\t return \"active\";\n\t},\"7\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n\t var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\t\n\t return \"\t\t\t\t\t\t
  • \"\n\t + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n\t + \"
  • \\n\";\n\t},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n\t var stack1, alias1=depth0 != null ? depth0 : {}, alias2=container.lambda, alias3=container.escapeExpression;\n\t\n\t return \"
      \\n\t
    • \\n\t\tAufbauschritte:\\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t
        \\n\"\n\t + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.steps : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n\t + \"\t\t\t\t
      \\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t
    • \\n\t
    • \\n\t\tAnsicht:\\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t\t \\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t\t \\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t
      \\n\t
    • \\n
    \\n\";\n\t},\"useData\":true,\"useDepths\":true});\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\t\n\tvar _handlebarsBase = __webpack_require__(9);\n\t\n\tvar base = _interopRequireWildcard(_handlebarsBase);\n\t\n\t// Each of these augment the Handlebars object. No need to setup here.\n\t// (This is done to easily share code between commonjs and browse envs)\n\t\n\tvar _handlebarsSafeString = __webpack_require__(43);\n\t\n\tvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\t\n\tvar _handlebarsException = __webpack_require__(5);\n\t\n\tvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\t\n\tvar _handlebarsUtils = __webpack_require__(3);\n\t\n\tvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\t\n\tvar _handlebarsRuntime = __webpack_require__(42);\n\t\n\tvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\t\n\tvar _handlebarsNoConflict = __webpack_require__(41);\n\t\n\tvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\t\n\t// For compatibility and usage outside of module systems, make the Handlebars object a namespace\n\tfunction create() {\n\t var hb = new base.HandlebarsEnvironment();\n\t\n\t Utils.extend(hb, base);\n\t hb.SafeString = _handlebarsSafeString2['default'];\n\t hb.Exception = _handlebarsException2['default'];\n\t hb.Utils = Utils;\n\t hb.escapeExpression = Utils.escapeExpression;\n\t\n\t hb.VM = runtime;\n\t hb.template = function (spec) {\n\t return runtime.template(spec, hb);\n\t };\n\t\n\t return hb;\n\t}\n\t\n\tvar inst = create();\n\tinst.create = create;\n\t\n\t_handlebarsNoConflict2['default'](inst);\n\t\n\tinst['default'] = inst;\n\t\n\texports['default'] = inst;\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.registerDefaultDecorators = registerDefaultDecorators;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _decoratorsInline = __webpack_require__(31);\n\t\n\tvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\t\n\tfunction registerDefaultDecorators(instance) {\n\t _decoratorsInline2['default'](instance);\n\t}\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ==\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\texports['default'] = function (instance) {\n\t instance.registerDecorator('inline', function (fn, props, container, options) {\n\t var ret = fn;\n\t if (!props.partials) {\n\t props.partials = {};\n\t ret = function (context, options) {\n\t // Create a new partials stack frame prior to exec.\n\t var original = container.partials;\n\t container.partials = _utils.extend({}, original, props.partials);\n\t var ret = fn(context, options);\n\t container.partials = original;\n\t return ret;\n\t };\n\t }\n\t\n\t props.partials[options.args[0]] = options.fn;\n\t\n\t return ret;\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXFCLFVBQVU7O3FCQUVoQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.registerDefaultHelpers = registerDefaultHelpers;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _helpersBlockHelperMissing = __webpack_require__(33);\n\t\n\tvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\t\n\tvar _helpersEach = __webpack_require__(34);\n\t\n\tvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\t\n\tvar _helpersHelperMissing = __webpack_require__(35);\n\t\n\tvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\t\n\tvar _helpersIf = __webpack_require__(36);\n\t\n\tvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\t\n\tvar _helpersLog = __webpack_require__(37);\n\t\n\tvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\t\n\tvar _helpersLookup = __webpack_require__(38);\n\t\n\tvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\t\n\tvar _helpersWith = __webpack_require__(39);\n\t\n\tvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\t\n\tfunction registerDefaultHelpers(instance) {\n\t _helpersBlockHelperMissing2['default'](instance);\n\t _helpersEach2['default'](instance);\n\t _helpersHelperMissing2['default'](instance);\n\t _helpersIf2['default'](instance);\n\t _helpersLog2['default'](instance);\n\t _helpersLookup2['default'](instance);\n\t _helpersWith2['default'](instance);\n\t}\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7eUNBQXVDLGdDQUFnQzs7OzsyQkFDOUMsZ0JBQWdCOzs7O29DQUNQLDBCQUEwQjs7Ozt5QkFDckMsY0FBYzs7OzswQkFDYixlQUFlOzs7OzZCQUNaLGtCQUFrQjs7OzsyQkFDcEIsZ0JBQWdCOzs7O0FBRWxDLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO0FBQy9DLHlDQUEyQixRQUFRLENBQUMsQ0FBQztBQUNyQywyQkFBYSxRQUFRLENBQUMsQ0FBQztBQUN2QixvQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFDaEMseUJBQVcsUUFBUSxDQUFDLENBQUM7QUFDckIsMEJBQVksUUFBUSxDQUFDLENBQUM7QUFDdEIsNkJBQWUsUUFBUSxDQUFDLENBQUM7QUFDekIsMkJBQWEsUUFBUSxDQUFDLENBQUM7Q0FDeEIiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVyRWFjaCBmcm9tICcuL2hlbHBlcnMvZWFjaCc7XG5pbXBvcnQgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJJZiBmcm9tICcuL2hlbHBlcnMvaWYnO1xuaW1wb3J0IHJlZ2lzdGVyTG9nIGZyb20gJy4vaGVscGVycy9sb2cnO1xuaW1wb3J0IHJlZ2lzdGVyTG9va3VwIGZyb20gJy4vaGVscGVycy9sb29rdXAnO1xuaW1wb3J0IHJlZ2lzdGVyV2l0aCBmcm9tICcuL2hlbHBlcnMvd2l0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJFYWNoKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJJZihpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb29rdXAoaW5zdGFuY2UpO1xuICByZWdpc3RlcldpdGgoaW5zdGFuY2UpO1xufVxuIl19\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('blockHelperMissing', function (context, options) {\n\t var inverse = options.inverse,\n\t fn = options.fn;\n\t\n\t if (context === true) {\n\t return fn(this);\n\t } else if (context === false || context == null) {\n\t return inverse(this);\n\t } else if (_utils.isArray(context)) {\n\t if (context.length > 0) {\n\t if (options.ids) {\n\t options.ids = [options.name];\n\t }\n\t\n\t return instance.helpers.each(context, options);\n\t } else {\n\t return inverse(this);\n\t }\n\t } else {\n\t if (options.data && options.ids) {\n\t var data = _utils.createFrame(options.data);\n\t data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n\t options = { data: data };\n\t }\n\t\n\t return fn(context, options);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBc0QsVUFBVTs7cUJBRWpELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGVBQU8sR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztPQUN4Qjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGNyZWF0ZUZyYW1lLCBpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHtkYXRhOiBkYXRhfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\tvar _exception = __webpack_require__(5);\n\t\n\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('each', function (context, options) {\n\t if (!options) {\n\t throw new _exception2['default']('Must pass iterator to #each');\n\t }\n\t\n\t var fn = options.fn,\n\t inverse = options.inverse,\n\t i = 0,\n\t ret = '',\n\t data = undefined,\n\t contextPath = undefined;\n\t\n\t if (options.data && options.ids) {\n\t contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n\t }\n\t\n\t if (_utils.isFunction(context)) {\n\t context = context.call(this);\n\t }\n\t\n\t if (options.data) {\n\t data = _utils.createFrame(options.data);\n\t }\n\t\n\t function execIteration(field, index, last) {\n\t if (data) {\n\t data.key = field;\n\t data.index = index;\n\t data.first = index === 0;\n\t data.last = !!last;\n\t\n\t if (contextPath) {\n\t data.contextPath = contextPath + field;\n\t }\n\t }\n\t\n\t ret = ret + fn(context[field], {\n\t data: data,\n\t blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n\t });\n\t }\n\t\n\t if (context && typeof context === 'object') {\n\t if (_utils.isArray(context)) {\n\t for (var j = context.length; i < j; i++) {\n\t if (i in context) {\n\t execIteration(i, i, i === context.length - 1);\n\t }\n\t }\n\t } else {\n\t var priorKey = undefined;\n\t\n\t for (var key in context) {\n\t if (context.hasOwnProperty(key)) {\n\t // We're running the iterations one step out of sync so we can detect\n\t // the last iteration without have to scan the object twice and create\n\t // an itermediate keys array.\n\t if (priorKey !== undefined) {\n\t execIteration(priorKey, i - 1);\n\t }\n\t priorKey = key;\n\t i++;\n\t }\n\t }\n\t if (priorKey !== undefined) {\n\t execIteration(priorKey, i - 1, true);\n\t }\n\t }\n\t }\n\t\n\t if (i === 0) {\n\t ret = inverse(this);\n\t }\n\t\n\t return ret;\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQUErRSxVQUFVOzt5QkFDbkUsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixZQUFNLDJCQUFjLDZCQUE2QixDQUFDLENBQUM7S0FDcEQ7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDekIsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksWUFBQTtRQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixRQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixpQkFBVyxHQUFHLHlCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pGOztBQUVELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsVUFBSSxHQUFHLG1CQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxhQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN6QyxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN6QixZQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7O0FBRW5CLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO09BQ0Y7O0FBRUQsU0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFlBQUksRUFBRSxJQUFJO0FBQ1YsbUJBQVcsRUFBRSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0UsQ0FBQyxDQUFDO0tBQ0o7O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNO0FBQ0wsWUFBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixhQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtBQUN2QixjQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0IsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0w7U0FDRjtBQUNELFlBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix1QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _exception = __webpack_require__(5);\n\t\n\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('helperMissing', function () /* [args, ]options */{\n\t if (arguments.length === 1) {\n\t // A missing field in a {{foo}} construct.\n\t return undefined;\n\t } else {\n\t // Someone is actually trying to call something, blow up.\n\t throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFBYyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('if', function (conditional, options) {\n\t if (_utils.isFunction(conditional)) {\n\t conditional = conditional.call(this);\n\t }\n\t\n\t // Default behavior is to render the positive path if the value is truthy and not empty.\n\t // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n\t // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n\t if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n\t return options.inverse(this);\n\t } else {\n\t return options.fn(this);\n\t }\n\t });\n\t\n\t instance.registerHelper('unless', function (conditional, options) {\n\t return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBa0MsVUFBVTs7cUJBRTdCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLGtCQUFXLFdBQVcsQ0FBQyxFQUFFO0FBQUUsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQUU7Ozs7O0FBS3RFLFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztHQUN2SCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ==\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('log', function () /* message, options */{\n\t var args = [undefined],\n\t options = arguments[arguments.length - 1];\n\t for (var i = 0; i < arguments.length - 1; i++) {\n\t args.push(arguments[i]);\n\t }\n\t\n\t var level = 1;\n\t if (options.hash.level != null) {\n\t level = options.hash.level;\n\t } else if (options.data && options.data.level != null) {\n\t level = options.data.level;\n\t }\n\t args[0] = level;\n\t\n\t instance.log.apply(instance, args);\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVMsSUFBSSxDQUFDLENBQUM7R0FDeEIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi4gYXJncyk7XG4gIH0pO1xufVxuIl19\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('lookup', function (obj, field) {\n\t return obj && obj[field];\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3JELFdBQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUMxQixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJsb29rdXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9va3VwJywgZnVuY3Rpb24ob2JqLCBmaWVsZCkge1xuICAgIHJldHVybiBvYmogJiYgb2JqW2ZpZWxkXTtcbiAgfSk7XG59XG4iXX0=\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\texports['default'] = function (instance) {\n\t instance.registerHelper('with', function (context, options) {\n\t if (_utils.isFunction(context)) {\n\t context = context.call(this);\n\t }\n\t\n\t var fn = options.fn;\n\t\n\t if (!_utils.isEmpty(context)) {\n\t var data = options.data;\n\t if (options.data && options.ids) {\n\t data = _utils.createFrame(options.data);\n\t data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n\t }\n\t\n\t return fn(context, {\n\t data: data,\n\t blockParams: _utils.blockParams([context], [data && data.contextPath])\n\t });\n\t } else {\n\t return options.inverse(this);\n\t }\n\t });\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUErRSxVQUFVOztxQkFFMUUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLENBQUMsZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNyQixVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFlBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGOztBQUVELGFBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFXLEVBQUUsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO0tBQ0osTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\tvar logger = {\n\t methodMap: ['debug', 'info', 'warn', 'error'],\n\t level: 'info',\n\t\n\t // Maps a given level value to the `methodMap` indexes above.\n\t lookupLevel: function lookupLevel(level) {\n\t if (typeof level === 'string') {\n\t var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n\t if (levelMap >= 0) {\n\t level = levelMap;\n\t } else {\n\t level = parseInt(level, 10);\n\t }\n\t }\n\t\n\t return level;\n\t },\n\t\n\t // Can be overridden in the host environment\n\t log: function log(level) {\n\t level = logger.lookupLevel(level);\n\t\n\t if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n\t var method = logger.methodMap[level];\n\t if (!console[method]) {\n\t // eslint-disable-line no-console\n\t method = 'log';\n\t }\n\t\n\t for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t message[_key - 1] = arguments[_key];\n\t }\n\t\n\t console[method].apply(console, message); // eslint-disable-line no-console\n\t }\n\t }\n\t};\n\t\n\texports['default'] = logger;\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFzQixTQUFTOztBQUUvQixJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDL0UsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUNwQixjQUFNLEdBQUcsS0FBSyxDQUFDO09BQ2hCOzt3Q0FQbUIsT0FBTztBQUFQLGVBQU87OztBQVEzQixhQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO0dBQ0Y7Q0FDRixDQUFDOztxQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/* global window */\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\texports['default'] = function (Handlebars) {\n\t /* istanbul ignore next */\n\t var root = typeof global !== 'undefined' ? global : window,\n\t $Handlebars = root.Handlebars;\n\t /* istanbul ignore next */\n\t Handlebars.noConflict = function () {\n\t if (root.Handlebars === Handlebars) {\n\t root.Handlebars = $Handlebars;\n\t }\n\t return Handlebars;\n\t };\n\t};\n\t\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOztBQUVsQyxNQUFJLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRWxDLFlBQVUsQ0FBQyxVQUFVLEdBQUcsWUFBVztBQUNqQyxRQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFVBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQy9CO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports.checkRevision = checkRevision;\n\texports.template = template;\n\texports.wrapProgram = wrapProgram;\n\texports.resolvePartial = resolvePartial;\n\texports.invokePartial = invokePartial;\n\texports.noop = noop;\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t// istanbul ignore next\n\t\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\t\n\tvar _utils = __webpack_require__(3);\n\t\n\tvar Utils = _interopRequireWildcard(_utils);\n\t\n\tvar _exception = __webpack_require__(5);\n\t\n\tvar _exception2 = _interopRequireDefault(_exception);\n\t\n\tvar _base = __webpack_require__(9);\n\t\n\tfunction checkRevision(compilerInfo) {\n\t var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n\t currentRevision = _base.COMPILER_REVISION;\n\t\n\t if (compilerRevision !== currentRevision) {\n\t if (compilerRevision < currentRevision) {\n\t var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n\t compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n\t throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n\t } else {\n\t // Use the embedded version info since the runtime doesn't know about this revision yet\n\t throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n\t }\n\t }\n\t}\n\t\n\tfunction template(templateSpec, env) {\n\t /* istanbul ignore next */\n\t if (!env) {\n\t throw new _exception2['default']('No environment passed to template');\n\t }\n\t if (!templateSpec || !templateSpec.main) {\n\t throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n\t }\n\t\n\t templateSpec.main.decorator = templateSpec.main_d;\n\t\n\t // Note: Using env.VM references rather than local var references throughout this section to allow\n\t // for external users to override these as psuedo-supported APIs.\n\t env.VM.checkRevision(templateSpec.compiler);\n\t\n\t function invokePartialWrapper(partial, context, options) {\n\t if (options.hash) {\n\t context = Utils.extend({}, context, options.hash);\n\t if (options.ids) {\n\t options.ids[0] = true;\n\t }\n\t }\n\t\n\t partial = env.VM.resolvePartial.call(this, partial, context, options);\n\t var result = env.VM.invokePartial.call(this, partial, context, options);\n\t\n\t if (result == null && env.compile) {\n\t options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n\t result = options.partials[options.name](context, options);\n\t }\n\t if (result != null) {\n\t if (options.indent) {\n\t var lines = result.split('\\n');\n\t for (var i = 0, l = lines.length; i < l; i++) {\n\t if (!lines[i] && i + 1 === l) {\n\t break;\n\t }\n\t\n\t lines[i] = options.indent + lines[i];\n\t }\n\t result = lines.join('\\n');\n\t }\n\t return result;\n\t } else {\n\t throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n\t }\n\t }\n\t\n\t // Just add water\n\t var container = {\n\t strict: function strict(obj, name) {\n\t if (!(name in obj)) {\n\t throw new _exception2['default']('\"' + name + '\" not defined in ' + obj);\n\t }\n\t return obj[name];\n\t },\n\t lookup: function lookup(depths, name) {\n\t var len = depths.length;\n\t for (var i = 0; i < len; i++) {\n\t if (depths[i] && depths[i][name] != null) {\n\t return depths[i][name];\n\t }\n\t }\n\t },\n\t lambda: function lambda(current, context) {\n\t return typeof current === 'function' ? current.call(context) : current;\n\t },\n\t\n\t escapeExpression: Utils.escapeExpression,\n\t invokePartial: invokePartialWrapper,\n\t\n\t fn: function fn(i) {\n\t var ret = templateSpec[i];\n\t ret.decorator = templateSpec[i + '_d'];\n\t return ret;\n\t },\n\t\n\t programs: [],\n\t program: function program(i, data, declaredBlockParams, blockParams, depths) {\n\t var programWrapper = this.programs[i],\n\t fn = this.fn(i);\n\t if (data || depths || blockParams || declaredBlockParams) {\n\t programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n\t } else if (!programWrapper) {\n\t programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n\t }\n\t return programWrapper;\n\t },\n\t\n\t data: function data(value, depth) {\n\t while (value && depth--) {\n\t value = value._parent;\n\t }\n\t return value;\n\t },\n\t merge: function merge(param, common) {\n\t var obj = param || common;\n\t\n\t if (param && common && param !== common) {\n\t obj = Utils.extend({}, common, param);\n\t }\n\t\n\t return obj;\n\t },\n\t\n\t noop: env.VM.noop,\n\t compilerInfo: templateSpec.compiler\n\t };\n\t\n\t function ret(context) {\n\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t var data = options.data;\n\t\n\t ret._setup(options);\n\t if (!options.partial && templateSpec.useData) {\n\t data = initData(context, data);\n\t }\n\t var depths = undefined,\n\t blockParams = templateSpec.useBlockParams ? [] : undefined;\n\t if (templateSpec.useDepths) {\n\t if (options.depths) {\n\t depths = context !== options.depths[0] ? [context].concat(options.depths) : options.depths;\n\t } else {\n\t depths = [context];\n\t }\n\t }\n\t\n\t function main(context /*, options*/) {\n\t return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n\t }\n\t main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n\t return main(context, options);\n\t }\n\t ret.isTop = true;\n\t\n\t ret._setup = function (options) {\n\t if (!options.partial) {\n\t container.helpers = container.merge(options.helpers, env.helpers);\n\t\n\t if (templateSpec.usePartial) {\n\t container.partials = container.merge(options.partials, env.partials);\n\t }\n\t if (templateSpec.usePartial || templateSpec.useDecorators) {\n\t container.decorators = container.merge(options.decorators, env.decorators);\n\t }\n\t } else {\n\t container.helpers = options.helpers;\n\t container.partials = options.partials;\n\t container.decorators = options.decorators;\n\t }\n\t };\n\t\n\t ret._child = function (i, data, blockParams, depths) {\n\t if (templateSpec.useBlockParams && !blockParams) {\n\t throw new _exception2['default']('must pass block params');\n\t }\n\t if (templateSpec.useDepths && !depths) {\n\t throw new _exception2['default']('must pass parent depths');\n\t }\n\t\n\t return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n\t };\n\t return ret;\n\t}\n\t\n\tfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n\t function prog(context) {\n\t var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t var currentDepths = depths;\n\t if (depths && context !== depths[0]) {\n\t currentDepths = [context].concat(depths);\n\t }\n\t\n\t return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n\t }\n\t\n\t prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\t\n\t prog.program = i;\n\t prog.depth = depths ? depths.length : 0;\n\t prog.blockParams = declaredBlockParams || 0;\n\t return prog;\n\t}\n\t\n\tfunction resolvePartial(partial, context, options) {\n\t if (!partial) {\n\t if (options.name === '@partial-block') {\n\t partial = options.data['partial-block'];\n\t } else {\n\t partial = options.partials[options.name];\n\t }\n\t } else if (!partial.call && !options.name) {\n\t // This is a dynamic partial that returned a string\n\t options.name = partial;\n\t partial = options.partials[partial];\n\t }\n\t return partial;\n\t}\n\t\n\tfunction invokePartial(partial, context, options) {\n\t options.partial = true;\n\t if (options.ids) {\n\t options.data.contextPath = options.ids[0] || options.data.contextPath;\n\t }\n\t\n\t var partialBlock = undefined;\n\t if (options.fn && options.fn !== noop) {\n\t options.data = _base.createFrame(options.data);\n\t partialBlock = options.data['partial-block'] = options.fn;\n\t\n\t if (partialBlock.partials) {\n\t options.partials = Utils.extend({}, options.partials, partialBlock.partials);\n\t }\n\t }\n\t\n\t if (partial === undefined && partialBlock) {\n\t partial = partialBlock;\n\t }\n\t\n\t if (partial === undefined) {\n\t throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n\t } else if (partial instanceof Function) {\n\t return partial(context, options);\n\t }\n\t}\n\t\n\tfunction noop() {\n\t return '';\n\t}\n\t\n\tfunction initData(context, data) {\n\t if (!data || !('root' in data)) {\n\t data = data ? _base.createFrame(data) : {};\n\t data.root = context;\n\t }\n\t return data;\n\t}\n\t\n\tfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n\t if (fn.decorator) {\n\t var props = {};\n\t prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n\t Utils.extend(prog, props);\n\t }\n\t return prog;\n\t}\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBQzhCLFFBQVE7O0FBRWxFLFNBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUN2RCxlQUFlLDBCQUFvQixDQUFDOztBQUUxQyxNQUFJLGdCQUFnQixLQUFLLGVBQWUsRUFBRTtBQUN4QyxRQUFJLGdCQUFnQixHQUFHLGVBQWUsRUFBRTtBQUN0QyxVQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1VBQ25ELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVELFlBQU0sMkJBQWMseUZBQXlGLEdBQ3ZHLHFEQUFxRCxHQUFHLGVBQWUsR0FBRyxtREFBbUQsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNoSyxNQUFNOztBQUVMLFlBQU0sMkJBQWMsd0ZBQXdGLEdBQ3RHLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNuRjtHQUNGO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcs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U0FBUyxJQUFJLEdBQUc7QUFBRSxTQUFPLEVBQUUsQ0FBQztDQUFFOztBQUVyQyxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQy9CLE1BQUksQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBLEFBQUMsRUFBRTtBQUM5QixRQUFJLEdBQUcsSUFBSSxHQUFHLGtCQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztHQUNyQjtBQUNELFNBQU8sSUFBSSxDQUFDO0NBQ2I7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUN6RSxNQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUU7QUFDaEIsUUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2YsUUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTLCBjcmVhdGVGcmFtZSB9IGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JldmlzaW9uKGNvbXBpbGVySW5mbykge1xuICBjb25zdCBjb21waWxlclJldmlzaW9uID0gY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSB8fCAxLFxuICAgICAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7XG4gICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBjdXJyZW50UmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2NvbXBpbGVyUmV2aXNpb25dO1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVySW5mb1sxXSArICcpLicpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHN1ZWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUpIHtcbiAgICAgIGlmICghKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGVwdGhzW2ldICYmIGRlcHRoc1tpXVtuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyO1xuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbih2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIChwYXJhbSAhPT0gY29tbW9uKSkge1xuICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG5cbiAgICBub29wOiBlbnYuVk0ubm9vcCxcbiAgICBjb21waWxlckluZm86IHRlbXBsYXRlU3BlYy5jb21waWxlclxuICB9O1xuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgZGF0YSA9IG9wdGlvbnMuZGF0YTtcblxuICAgIHJldC5fc2V0dXAob3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwgJiYgdGVtcGxhdGVTcGVjLnVzZURhdGEpIHtcbiAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0LCBkYXRhKTtcbiAgICB9XG4gICAgbGV0IGRlcHRocyxcbiAgICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9IGNvbnRleHQgIT09IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gJycgKyB0ZW1wbGF0ZVNwZWMubWFpbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIH1cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuaGVscGVycywgZW52LmhlbHBlcnMpO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMucGFydGlhbHMsIGVudi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5kZWNvcmF0b3JzLCBlbnYuZGVjb3JhdG9ycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgIH1cbiAgfTtcblxuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgJiYgIWJsb2NrUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgYmxvY2sgcGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzICYmICFkZXB0aHMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoZGVwdGhzICYmIGNvbnRleHQgIT09IGRlcHRoc1swXSkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oY29udGFpbmVyLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICAgIGN1cnJlbnREZXB0aHMpO1xuICB9XG5cbiAgcHJvZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpO1xuXG4gIHByb2cucHJvZ3JhbSA9IGk7XG4gIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgcHJvZy5ibG9ja1BhcmFtcyA9IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTtcbiAgfVxuICByZXR1cm4gcGFydGlhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAocGFydGlhbEJsb2NrLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBwYXJ0aWFsQmxvY2sucGFydGlhbHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7XG4gICAgcGFydGlhbCA9IHBhcnRpYWxCbG9jaztcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgZm91bmQnKTtcbiAgfSBlbHNlIGlmIChwYXJ0aWFsIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gcGFydGlhbChjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHsgcmV0dXJuICcnOyB9XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IocHJvZywgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGhzICYmIGRlcHRoc1swXSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvZztcbn1cbiJdfQ==\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports) {\n\n\t// Build out our basic SafeString type\n\t'use strict';\n\t\n\texports.__esModule = true;\n\tfunction SafeString(string) {\n\t this.string = string;\n\t}\n\t\n\tSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n\t return '' + this.string;\n\t};\n\t\n\texports['default'] = SafeString;\n\tmodule.exports = exports['default'];\n\t//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n\n\n/***/ },\n/* 44 */,\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */,\n/* 50 */,\n/* 51 */,\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(THREE) {/**\n\t * @author qiao / https://github.com/qiao\n\t * @fileoverview This is a convex hull generator using the incremental method. \n\t * The complexity is O(n^2) where n is the number of vertices.\n\t * O(nlogn) algorithms do exist, but they are much more complicated.\n\t *\n\t * Benchmark: \n\t *\n\t * Platform: CPU: P7350 @2.00GHz Engine: V8\n\t *\n\t * Num Vertices\tTime(ms)\n\t *\n\t * 10 1\n\t * 20 3\n\t * 30 19\n\t * 40 48\n\t * 50 107\n\t */\n\t\n\tTHREE.ConvexGeometry = function( vertices ) {\n\t\n\t\tTHREE.Geometry.call( this );\n\t\n\t\tvar faces = [ [ 0, 1, 2 ], [ 0, 2, 1 ] ]; \n\t\n\t\tfor ( var i = 3; i < vertices.length; i++ ) {\n\t\n\t\t\taddPoint( i );\n\t\n\t\t}\n\t\n\t\n\t\tfunction addPoint( vertexId ) {\n\t\n\t\t\tvar vertex = vertices[ vertexId ].clone();\n\t\n\t\t\tvar mag = vertex.length();\n\t\t\tvertex.x += mag * randomOffset();\n\t\t\tvertex.y += mag * randomOffset();\n\t\t\tvertex.z += mag * randomOffset();\n\t\n\t\t\tvar hole = [];\n\t\n\t\t\tfor ( var f = 0; f < faces.length; ) {\n\t\n\t\t\t\tvar face = faces[ f ];\n\t\n\t\t\t\t// for each face, if the vertex can see it,\n\t\t\t\t// then we try to add the face's edges into the hole.\n\t\t\t\tif ( visible( face, vertex ) ) {\n\t\n\t\t\t\t\tfor ( var e = 0; e < 3; e++ ) {\n\t\n\t\t\t\t\t\tvar edge = [ face[ e ], face[ ( e + 1 ) % 3 ] ];\n\t\t\t\t\t\tvar boundary = true;\n\t\n\t\t\t\t\t\t// remove duplicated edges.\n\t\t\t\t\t\tfor ( var h = 0; h < hole.length; h++ ) {\n\t\n\t\t\t\t\t\t\tif ( equalEdge( hole[ h ], edge ) ) {\n\t\n\t\t\t\t\t\t\t\thole[ h ] = hole[ hole.length - 1 ];\n\t\t\t\t\t\t\t\thole.pop();\n\t\t\t\t\t\t\t\tboundary = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( boundary ) {\n\t\n\t\t\t\t\t\t\thole.push( edge );\n\t\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// remove faces[ f ]\n\t\t\t\t\tfaces[ f ] = faces[ faces.length - 1 ];\n\t\t\t\t\tfaces.pop();\n\t\n\t\t\t\t} else { // not visible\n\t\n\t\t\t\t\tf++;\n\t\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// construct the new faces formed by the edges of the hole and the vertex\n\t\t\tfor ( var h = 0; h < hole.length; h++ ) {\n\t\n\t\t\t\tfaces.push( [ \n\t\t\t\t\thole[ h ][ 0 ],\n\t\t\t\t\thole[ h ][ 1 ],\n\t\t\t\t\tvertexId\n\t\t\t\t] );\n\t\n\t\t\t}\n\t\t}\n\t\n\t\t/**\n\t\t * Whether the face is visible from the vertex\n\t\t */\n\t\tfunction visible( face, vertex ) {\n\t\n\t\t\tvar va = vertices[ face[ 0 ] ];\n\t\t\tvar vb = vertices[ face[ 1 ] ];\n\t\t\tvar vc = vertices[ face[ 2 ] ];\n\t\n\t\t\tvar n = normal( va, vb, vc );\n\t\n\t\t\t// distance from face to origin\n\t\t\tvar dist = n.dot( va );\n\t\n\t\t\treturn n.dot( vertex ) >= dist; \n\t\n\t\t}\n\t\n\t\t/**\n\t\t * Face normal\n\t\t */\n\t\tfunction normal( va, vb, vc ) {\n\t\n\t\t\tvar cb = new THREE.Vector3();\n\t\t\tvar ab = new THREE.Vector3();\n\t\n\t\t\tcb.subVectors( vc, vb );\n\t\t\tab.subVectors( va, vb );\n\t\t\tcb.cross( ab );\n\t\n\t\t\tcb.normalize();\n\t\n\t\t\treturn cb;\n\t\n\t\t}\n\t\n\t\t/**\n\t\t * Detect whether two edges are equal.\n\t\t * Note that when constructing the convex hull, two same edges can only\n\t\t * be of the negative direction.\n\t\t */\n\t\tfunction equalEdge( ea, eb ) {\n\t\n\t\t\treturn ea[ 0 ] === eb[ 1 ] && ea[ 1 ] === eb[ 0 ]; \n\t\n\t\t}\n\t\n\t\t/**\n\t\t * Create a random offset between -1e-6 and 1e-6.\n\t\t */\n\t\tfunction randomOffset() {\n\t\n\t\t\treturn ( Math.random() - 0.5 ) * 2 * 1e-6;\n\t\n\t\t}\n\t\n\t\n\t\t/**\n\t\t * XXX: Not sure if this is the correct approach. Need someone to review.\n\t\t */\n\t\tfunction vertexUv( vertex ) {\n\t\n\t\t\tvar mag = vertex.length();\n\t\t\treturn new THREE.Vector2( vertex.x / mag, vertex.y / mag );\n\t\n\t\t}\n\t\n\t\t// Push vertices into `this.vertices`, skipping those inside the hull\n\t\tvar id = 0;\n\t\tvar newId = new Array( vertices.length ); // map from old vertex id to new id\n\t\n\t\tfor ( var i = 0; i < faces.length; i++ ) {\n\t\n\t\t\t var face = faces[ i ];\n\t\n\t\t\t for ( var j = 0; j < 3; j++ ) {\n\t\n\t\t\t\t\tif ( newId[ face[ j ] ] === undefined ) {\n\t\n\t\t\t\t\t\t\tnewId[ face[ j ] ] = id++;\n\t\t\t\t\t\t\tthis.vertices.push( vertices[ face[ j ] ] );\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t\tface[ j ] = newId[ face[ j ] ];\n\t\n\t\t\t }\n\t\n\t\t}\n\t\n\t\t// Convert faces into instances of THREE.Face3\n\t\tfor ( var i = 0; i < faces.length; i++ ) {\n\t\n\t\t\tthis.faces.push( new THREE.Face3( \n\t\t\t\t\tfaces[ i ][ 0 ],\n\t\t\t\t\tfaces[ i ][ 1 ],\n\t\t\t\t\tfaces[ i ][ 2 ]\n\t\t\t) );\n\t\n\t\t}\n\t\n\t\t// Compute UVs\n\t\tfor ( var i = 0; i < this.faces.length; i++ ) {\n\t\n\t\t\tvar face = this.faces[ i ];\n\t\n\t\t\tthis.faceVertexUvs[ 0 ].push( [\n\t\t\t\tvertexUv( this.vertices[ face.a ] ),\n\t\t\t\tvertexUv( this.vertices[ face.b ] ),\n\t\t\t\tvertexUv( this.vertices[ face.c ])\n\t\t\t] );\n\t\n\t\t}\n\t\n\t\n\t//\tthis.computeCentroids();\n\t\tthis.computeFaceNormals();\n\t\tthis.computeVertexNormals();\n\t\n\t};\n\t\n\tTHREE.ConvexGeometry.prototype = Object.create( THREE.Geometry.prototype );\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))\n\n/***/ },\n/* 53 */\n/***/ function(module, exports) {\n\n\tmodule.exports = google;\n\n/***/ },\n/* 54 */\n/***/ function(module, exports) {\n\n\tmodule.exports = window;\n\n/***/ }\n]);\n\n\n/** WEBPACK FOOTER **\n ** js/app.js\n **/","Backbone = require \"backbone\"\n_ = require \"underscore\"\nwindow = require \"window\"\nEGS = require \"views/EGS\"\n\nBackbone.sync = (method, model, options) ->\n\tkey = model.id.split '/'\n\tconsole.log \"sync called with key: \", key\n\turl = 'https://docs.google.com/spreadsheets/d/' + key[key.length-2] + '/gviz/tq?gid=' + key[key.length-1]\n\t\n\tif method is 'read'\n\t\t(new google.visualization.Query url).send (resp) =>\n\t\t\tif do resp.isError\n\t\t\t\toptions.error(resp)\n\t\t\telse\n\t\t\t\toptions.success(resp)\n\nDataSourceModel = require \"models/DataSource\"\nDataSourceListCollection = require \"collections/DataSourceList\"\nEGS_Elements = require 'egs/EGS_Elements'\n\nApp = class MainApp extends Backbone.Router\n\tview: {}\n\tegsElementProvider: null\n\tdataSourceList: null\n\tactiveSource: null\n\tactiveConstruct: null\n\troutes: \n\t\t\"\": \"default\"\n\t\t\":skey\": \"loadSource\"\n\t\t\":skey/:sgid(/)\": \"loadSource\"\n\t\t\":skey/:sgid/:ckey/:cgid\": \"loadConstruct\"\n\t\n\tdefault: -> \n\t\t@setActiveDataSource.call @\n\t\n\tloadSource: (skey, sgid = 0) -> \n\t\tconsole.log \"Routed to loadSource '#{skey}'/'#{sgid}'\"\n\t\t@setActiveDataSource.call @, skey + \"/\" + sgid\n\t\n\tloadConstruct: (skey, sgid, ckey, cgid) -> \n\t\tconsole.log \"Routed to loadConstruct '#{skey}'/'#{sgid}'/'#{ckey}'/'#{cgid}'\"\n\t\t@setActiveDataSource.call @, skey + \"/\" + sgid, (ds) =>\n\t\t\t@setActiveConstruction.call @, skey + \"/\" + sgid + \"/\" + ckey + \"/\" + cgid, (c) =>\n\t\t\t\t@view.EGS.showConstruct c\n\t\n\tsetActiveDataSource: (source, cb = null) ->\n\t\tconsole.log \"setActiveDataSource\", source\n\t\tif source\n\t\t\tsource = source.split '/'\n\t\t\tsource = source[0] + '/' + source[1]\n\t\t\tif not @dataSourceList.get(source)\n\t\t\t\t@dataSourceList.add [{source: source}]\n\t\t\t@activeSource = @dataSourceList.get(source).setSelected cb\n\t\telse if @dataSourceList.length\n\t\t\t@activeSource = @dataSourceList.at(0).setSelected cb\n\t\n\tsetActiveConstruction: (construct, cb = null) ->\n\t\tsource = @dataSourceList.selected\n\t\treturn if source is null\n\t\tconsole.log \"setActiveConstruction\", construct\n\t\t\n\t\tif not source.get('constructions').get(construct)\n\t\t\talert \"ausgewählte Konstruktion nicht in Datenquelle definiert!\"\n\t\t@activeConstruct = source.get('constructions').get(construct).setSelected cb\n\t\n\tinitialize: (data) ->\n\t\tconsole.log \"App Init\"\n\t\t@dataSourceList = new DataSourceListCollection [{source: data.defaultSource}], \n\t\t\tapp: @\n\t\t\n\t\t@egsElementProvider = new EGS_Elements();\n\t\tPrimaryNavView = require \"views/PrimaryNav\"\n\t\t@view.PrimaryNav = new PrimaryNavView @dataSourceList\n\t\tSecondaryNavView = require \"views/SecondaryNav\"\n\t\t@view.SecondaryNav = new SecondaryNavView @\n\t\tDataSourceModal = require \"views/DataSourceModal\"\n\t\t@view.DataSource = new DataSourceModal @\n\t\t@view.EGS = new EGS @, 'display'\n\t\t\n\t\tfor i,v of @view\n\t\t\tif v.startup?\n\t\t\t\tdo v.startup\n\t\n\tstart: ->\n\t\tconsole.log \"App start\"\n\t\tdo Backbone.history.start\n\t\ngoogle = require \"google\"\n\ngoogle.setOnLoadCallback (e)->\n\tbody = document.getElementsByTagName('body')[0]\n\treturn if window.App ## singleton behaviour\n\twindow.App = new App\n\t\tdefaultSource: body.getAttribute 'data-defaultSource'\n\tdo window.App.start\n\ngoogle.load 'visualization', '1', \n\tpackages: ['table']\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/app.coffee\n **/","module.exports = function(lvalue, rvalue, options) {\n\tif (arguments.length < 3)\n\t\tthrow new Error(\"Handlebars Helper equal needs 2 parameters\");\n\tif( lvalue != rvalue )\n\t\treturn options.inverse(this);\n\treturn options.fn(this);\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/_helpers/handlebars/cmp.js\n ** module id = 1\n ** module chunks = 1\n **/","// Backbone.js 1.3.3\n\n// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global);\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.3.3';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return _[method](this[attribute]);\n };\n case 2: return function(value) {\n return _[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return _[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return _[method].apply(_, args);\n };\n }\n };\n var addUnderscoreMethods = function(Class, methods, attribute) {\n _.each(methods, function(length, method) {\n if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n return internalOn(this, name, callback, context);\n };\n\n // Guard the `listening` argument from the public API.\n var internalOn = function(obj, name, callback, context, listening) {\n obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n context: context,\n ctx: obj,\n listening: listening\n });\n\n if (listening) {\n var listeners = obj._listeners || (obj._listeners = {});\n listeners[listening.id] = listening;\n }\n\n return obj;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n }\n\n // Bind callbacks on obj, and keep track of them on listening.\n internalOn(obj, name, callback, this, listening);\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n }\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var i = 0, listening;\n var context = options.context, listeners = options.listeners;\n\n // Delete all events listeners and \"drop\" events.\n if (!name && !callback && !context) {\n var ids = _.keys(listeners);\n for (; i < ids.length; i++) {\n listening = listeners[ids[i]];\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n return;\n }\n\n var names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Replace events if there are any remaining. Otherwise, clean up.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n listening = handler.listening;\n if (listening && --listening.count === 0) {\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n }\n }\n\n // Update tail event if the list has any events. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n }\n return _.size(changed) ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n addUnderscoreMethods(Model, modelMethods, 'attributes');\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(obj.attributes || obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n addUnderscoreMethods(Collection, collectionMethods, 'models');\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], _.bind(method, this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = _.bind(this.checkUrl, this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the hash and decode for matching.\n fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/backbone/backbone.js\n ** module id = 2\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQ3ZCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRTdCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFtQjtBQUMzQyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQUlNLFVBQVUsR0FKaEIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUJBQW1CLENBQUM7R0FDcEYsQ0FBQztDQUNIO1FBQ08sVUFBVSxHQUFWLFVBQVU7Ozs7O0FBSVgsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFTLEtBQUssRUFBRTtBQUN0RCxTQUFPLEFBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUFHLEtBQUssQ0FBQztDQUNqRyxDQUFDOzs7OztBQUdLLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUdNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUFFLFdBQU8sTUFBTSxDQUFDO0dBQUU7QUFDOUMsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iai8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydCB7aXNGdW5jdGlvbn07XG4vKiBlc2xpbnQtZW5hYmxlIGZ1bmMtc3R5bGUgKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/utils.js\n ** module id = 3\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n column = undefined;\n if (loc) {\n line = loc.start.line;\n column = loc.start.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n if (loc) {\n this.lineNumber = line;\n this.column = column;\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsSUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbkcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDdEIsSUFBSSxZQUFBO01BQ0osTUFBTSxZQUFBLENBQUM7QUFDWCxNQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBRTFCLFdBQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7R0FDeEM7O0FBRUQsTUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFELE9BQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2hELFFBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDOUM7OztBQUdELE1BQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztHQUN0QjtDQUNGOztBQUVELFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7cUJBRW5CLFNBQVMiLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgbGV0IGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lLFxuICAgICAgY29sdW1uO1xuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIGxldCB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgaWYgKGxvYykge1xuICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/exception.js\n ** module id = 5\n ** module chunks = 1\n **/","module.exports = (someKey, silent=false, parent = null) ->\n\t# it is a google table link\n\treg = new RegExp 'spreadsheets\\/d\\/([^\\/]+)[^#]*(?:#.*gid=([0-9]+).*)?'\n\tmatch = reg.exec someKey\n\tif match\n\t\tgid = match[2] if match[2]\n\t\treturn [match[1], gid]\n\t\n\t# it is just the gid\n\treg = new RegExp '([0-9]+)'\n\tmatch = reg.exec someKey\n\tif match and parent\n\t\tparent = parent.split '/'\n\t\tgid = match[1] if match[1]\n\t\treturn [parent[0], gid]\n\t\n\t# it is a short specification\n\treg = new RegExp '([^\\/]+)(?:\\/([0-9]+))?'\n\tmatch = reg.exec someKey\n\tif match\n\t\tgid = match[2] if match[2]\n\t\treturn [match[1], gid]\n\t\n\tif silent\n\t\treturn false\n\t\n\talert \"Ungültige Datenquelle: In '#{someKey}' konnte nicht der Tabellen-Key gefunden werden!\"\n\treturn [\"\", 0]\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/_helpers/keyNormalizer.coffee\n **/","Backbone = require \"backbone\"\nConstructionList = require \"collections/ConstructionList\"\nkeyNormalizer = require \"keyNormalizer\"\n\nmodule.exports = class DataSource extends Backbone.Model\n\tapp: null\n\tfetched: false\n\tdataTable: null\n\tcolumns: \n\t\tsheet: \"Blatt-Link (gid)\"\n\t\tname: \"Konstruktion\"\n\t\tdesc: \"Beschreibung\"\n\t\n\tidAttribute: \"source\"\n\tinitialize: (attributes, options) ->\n\t\t@app = options.collection.app\n\t\t@set 'constructions', new ConstructionList [], \n\t\t\tapp: @app\n\t\n\tsetSelected: (cb) ->\n\t\t@collection.setSelected this\n\t\tif not @fetched \n\t\t\t@fetch success: => \n\t\t\t\t@fetched = true\n\t\t\t\tcb this if cb\n\t\telse\n\t\t\tcb this if cb\n\n\tset: (attr, opts) ->\n\t\tif attr.source\n\t\t\tattr.source = keyNormalizer(attr.source).join('/') \n\t\tBackbone.Model.prototype.set.call this, attr, opts\n\t\n\tparse: (resp) ->\n\t\t@dataTable = do resp.getDataTable\n\t\t\n\t\tfirstDataRow = if @dataTable.getColumnLabel(0).length then 0 else 1\n\t\tisConstructTable = firstDataRow is 0\n\t\tfor k of @columns\n\t\t\tif @columns[k] is @dataTable.getColumnLabel(0)\n\t\t\t\tisConstructTable = false\n\t\t\n\t\tif isConstructTable\n\t\t\treturn constructions: new ConstructionList [{name: \"Konstruktion\", desc: \"\", sheet: @id}]\n\t\tdata = []\n\t\tfor r in [firstDataRow ... @dataTable.getNumberOfRows()]\n\t\t\td = {}\n\t\t\tfor k of @columns\n\t\t\t\timporter = (v) -> v\n\t\t\t\tif k is \"sheet\"\n\t\t\t\t\timporter = (v) => [@id, keyNormalizer(v, false, @id).join '/'].join '/'\n\t\t\t\t\n\t\t\t\tfor c in [0 ... @dataTable.getNumberOfColumns()]\n\t\t\t\t\tif (firstDataRow and @dataTable.getValue(0, c) is @columns[k]) or @dataTable.getColumnLabel(c) is @columns[k]\n\t\t\t\t\t\td[k] = importer @dataTable.getValue r, c\n\t\t\t\tif not d[k]\n\t\t\t\t\talert \"Übersichtstabelle: Spalte '#{@columns[k]}' wurde nicht in der Tabelle gefunden!\"\n\t\t\t\t\treturn\n\t\t\tdata.push d\n\t\t\n\t\tconsole.log \"DataSource: loaded construction list: \", data\n\t\tconstructions: new ConstructionList data, \n\t\t\tapp: @app\n\t\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/DataSource.coffee\n **/","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar VERSION = '4.0.5';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 7;\n\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQTRDLFNBQVM7O3lCQUMvQixhQUFhOzs7O3VCQUNFLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNuQyxVQUFVOzs7O0FBRXRCLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxVQUFVO0NBQ2QsQ0FBQzs7O0FBRUYsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFNBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsTUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLE1BQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixNQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGtDQUF1QixJQUFJLENBQUMsQ0FBQztBQUM3Qix3Q0FBMEIsSUFBSSxDQUFDLENBQUM7Q0FDakM7O0FBRUQscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLGFBQVcsRUFBRSxxQkFBcUI7O0FBRWxDLFFBQU0scUJBQVE7QUFDZCxLQUFHLEVBQUUsb0JBQU8sR0FBRzs7QUFFZixnQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDakMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQUUsY0FBTSwyQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO09BQUU7QUFDM0Usb0JBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QixNQUFNO0FBQ0wsVUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDekI7R0FDRjtBQUNELGtCQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDM0I7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFFBQUksZ0JBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdCLE1BQU07QUFDTCxVQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNsQyxjQUFNLHlFQUEwRCxJQUFJLG9CQUFpQixDQUFDO09BQ3ZGO0FBQ0QsVUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDL0I7R0FDRjtBQUNELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxXQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0FBRUQsbUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFBRSxjQUFNLDJCQUFjLDRDQUE0QyxDQUFDLENBQUM7T0FBRTtBQUM5RSxvQkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtHQUNGO0FBQ0QscUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM5QjtDQUNGLENBQUM7O0FBRUssSUFBSSxHQUFHLEdBQUcsb0JBQU8sR0FBRyxDQUFDOzs7UUFFcEIsV0FBVztRQUFFLE1BQU0iLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlRnJhbWUsIGV4dGVuZCwgdG9TdHJpbmd9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdEhlbHBlcnN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnN9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnNC4wLjUnO1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAnXG59O1xuXG5jb25zdCBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBsb2dnZXIsXG4gIGxvZzogbG9nZ2VyLmxvZyxcblxuICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgZXh0ZW5kKHRoaXMucGFydGlhbHMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oYEF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIiR7bmFtZX1cIiBhcyB1bmRlZmluZWRgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgfVxufTtcblxuZXhwb3J0IGxldCBsb2cgPSBsb2dnZXIubG9nO1xuXG5leHBvcnQge2NyZWF0ZUZyYW1lLCBsb2dnZXJ9O1xuIl19\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/base.js\n ** module id = 9\n ** module chunks = 1\n **/","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/runtime.js\n ** module id = 10\n ** module chunks = 1\n **/","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/underscore/underscore.js\n ** module id = 12\n ** module chunks = 1\n **/","Backbone = require \"backbone\"\nConstruction = require \"models/Construction\"\n\nmodule.exports = class ConstructionList extends Backbone.Collection\n\tapp: null\n\tmodel: Construction\n\tselected: null\n\tsetSelected: (ds) ->\n\t\tconsole.log \"CL select: \", ds, @selected\n\t\treturn if ds is @selected \n\t\t@trigger \"unselect\", @selected if @selected\n\t\t@selected = ds\n\t\tconsole.log \"CL triggered select\"\n\t\t@trigger \"select\", @selected\n\t\t@trigger \"sync\" if @selected.fetched\n\t\t\n\t\n\tinitialize: (models, options)->\n\t\t@app = options.app\n#\t\tconsole.log \"init ConstructionList\"\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/collections/ConstructionList.coffee\n **/","Backbone = require \"backbone\"\nDataSource = require \"models/DataSource\"\n\nmodule.exports = class DataSourceList extends Backbone.Collection\n\tapp: null\n\tmodel: DataSource\n\tselected: null\n\tsetSelected: (ds) ->\n\t\treturn if ds is @selected \n\t\t@trigger \"unselect\", @selected if @selected\n\t\t@selected = ds\n\t\t@trigger \"select\", @selected\n\t\t@trigger \"sync\" if @selected.fetched\n\t\n\tinitialize: (models, options)->\n\t\t@app = options.app\n\t\tconsole.log \"init DataSourceList\", @app\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/collections/DataSourceList.coffee\n **/","Backbone = require \"backbone\"\nConstructionElement = require \"models/Element\"\n\nmodule.exports = class extends Backbone.Collection\n\tmodel: ConstructionElement\n\tinitialize: (models, options)->\n\t\t@app = options.app\n#\t\tconsole.log \"init ConstructionElements\"\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/collections/ElementList.coffee\n **/","THREE = require \"THREE\"\nrequire \"ConvexGeometry\"\n\nclass THREE.ThreadCurve extends THREE.Curve\n\tconstructor: (@height, @pitch, @radius)->\n\t\tsuper()\n\t\n\tgetPoint: (t) ->\n\t\tt = t * @height / @pitch\n\t\tnew THREE.Vector3(\n\t\t\t@radius * Math.cos(2 * Math.PI * (t - Math.floor(t))),\n\t\t\t@radius * Math.sin(2 * Math.PI * (t - Math.floor(t))),\n\t\t\tt * @pitch\n\t\t)\n\nclass THREE.CustomGeometry extends THREE.Geometry\n\tcalcUVs: ->\n\t\tdo @computeBoundingBox\n\t\t\n\t\tmax = @boundingBox.max\n\t\tmin = @boundingBox.min\n\t\t\n\t\toffset = new THREE.Vector2 0 - min.x, 0 - min.y\n\t\trange = new THREE.Vector2 max.x - min.x, max.y - min.y\n\t\t\n\t\t@faceVertexUvs[0] = [];\n\t\tfaces = @faces;\n\t\t\n\t\tfor i in [0...@faces.length]\n\t\t\t\n\t\t\tv1 = @vertices[@faces[i].a]\n\t\t\tv2 = @vertices[@faces[i].b]\n\t\t\tv3 = @vertices[@faces[i].c]\n\t\t\t\n\t\t\t@faceVertexUvs[0].push([\n\t\t\t\tnew THREE.Vector2( ( v1.x + offset.x ) / range.x , ( v1.y + offset.y ) / range.y ),\n\t\t\t\tnew THREE.Vector2( ( v2.x + offset.x ) / range.x , ( v2.y + offset.y ) / range.y ),\n\t\t\t\tnew THREE.Vector2( ( v3.x + offset.x ) / range.x , ( v3.y + offset.y ) / range.y )\n\t\t\t]);\n\t\t\n\t\t@uvsNeedUpdate = true;\n\t\n\tconstructor: (vertices, faces) ->\n\t\tsuper()\n\t\tfor v in vertices\n\t\t\t@vertices.push new THREE.Vector3 v[0], v[1], v[2]\n\t\tfor f in faces\n\t\t\t@faces.push new THREE.Face3 f[0], f[1], f[2]\n\t\tdo @computeBoundingSphere\n\t\tdo @computeFaceNormals\n\t\tdo @computeVertexNormals\n\t\tdo @calcUVs\n\nclass EGS_Elements\n\tDETAIL = 8\n\tD90 = .5 * Math.PI\n\tD180 = Math.PI\n\tD360 = 2 * Math.PI\n\tX = new THREE.Vector3 1, 0, 0\n\tY = new THREE.Vector3 0, 1, 0\n\tZ = new THREE.Vector3 0, 0, 1\n\t\n\tTellerDurchmesser = 123.6\n\tRohrDurchmesserAussen = 48.3\n\tRohrDurchmesserInnen = 45.1\n\tTellerHoehe = 9\n\t\t\n\t_m = (x,y,z,A,n) ->\n\t\tm = (new THREE.Matrix4()).makeTranslation(x,y,z)\n\t\tm.multiply (new THREE.Matrix4()).makeRotationX(n * D90) if A == 'X'\n\t\tm.multiply (new THREE.Matrix4()).makeRotationY(n * D90) if A == 'Y'\n\t\tm.multiply (new THREE.Matrix4()).makeRotationZ(n * D90) if A == 'Z'\n\t\tm\n\t\n\t_barToCircle = (x,y,l,r) ->\n\t\tcircle = new THREE.CircleGeometry r, DETAIL\n\t\tvert = circle.vertices\n\t\tvert.push new THREE.Vector3( x / 2, y / 2, l)\n\t\tvert.push new THREE.Vector3(-x / 2, y / 2, l)\n\t\tvert.push new THREE.Vector3(-x / 2,-y / 2, l)\n\t\tvert.push new THREE.Vector3( x / 2,-y / 2, l)\n\t\tnew THREE.ConvexGeometry vert\n\t\n\t_cylinder = (o,i,h) ->\n\t\tshape = new THREE.Shape()\n\t\tshape.absarc 0, 0, o / 2, 0, D360, true\n\t\tif i\n\t\t\thole = new THREE.Path()\n\t\t\thole.absarc 0, 0, i / 2, 0, D360, true\n\t\t\tshape.holes.push hole\n\t\tshape.extrude\n\t\t\tamount: h\n\t\t\tsteps: 1\n\t\t\tbevelEnabled: false\n\t\t\tcurveSegments: DETAIL\n\t_cylinderPath = (o,i,p) ->\n\t\tshape = new THREE.Shape()\n\t\tshape.absarc 0, 0, o / 2, 0, D360, true\n\t\tif i\n\t\t\thole = new THREE.Path()\n\t\t\thole.absarc 0, 0, i / 2, 0, D360, true\n\t\t\tshape.holes.push hole\n\t\tshape.extrude\n\t\t\tsteps: 10\n\t\t\textrudePath: p\n\t\n\t_threadCyl = (h) ->\n\t\tif DETAIL >= 16\n\t\t\to = 13\n\t\t\ti = 8\n\t\telse\n\t\t\to = 18\n\t\t\ti = 15\n\t\t\n\t\tshape = new THREE.Shape()\n\t\tshape.absarc 0, 0, o, 0, D360, true\n\t\tif i\n\t\t\thole = new THREE.Path()\n\t\t\thole.absarc 0, 0, i, 0, D360, true\n\t\t\tshape.holes.push hole\n\t\tcyl = shape.extrude\n\t\t\tamount: h\n\t\t\tsteps: 1\n\t\t\tbevelEnabled: false\n\t\t\tcurveSegments: DETAIL\n\t\t\n\t\tif DETAIL >= 16\n\t\t\th -= 10\n\t\t\tthread = new THREE.TubeGeometry(\n\t\t\t\tnew THREE.ThreadCurve(h, 10, 13),\n\t\t\t\tDETAIL * h / 10,\n\t\t\t\t4\n\t\t\t\t)\n\t\t\tcyl.merge thread, _m(0,0,5)\n\t\tcyl\n\t\n\t_rohr = (length) ->\n\t\t_cylinder RohrDurchmesserAussen, RohrDurchmesserInnen, length\n\t\t\n\t_AnfStk = ->\n\t\ta = new THREE.Geometry()\n\t\ta.merge _rohr(165), _m(0,0,-65)\n\t\ta.merge _teller()\n\t\ta.merge _cylinder(55,49,170), _m(0,0,95)\n\t\ta.applyMatrix _m(0,0,0, 'X', -1)\n\t\ta\n\t\n\t_belagKlammer = (x) ->\n\t\tshape = new THREE.Shape()\n\t\tz = 30\n\t\td1 = 25\n\t\td2 = 33\n\t\tshape.moveTo( 0, 0)\n\t\tshape.lineTo( 30, 0)\n\t\tshape.arc(25, 0, d1, 0, Math.PI)\n\t\tshape.lineTo(17+d2+d2,0)\n\t\tshape.arc(-33, 0, d2, Math.PI*.7, 0)\n\t\tshape.lineTo( 30, 35)\n\t\tshape.lineTo( 0, 35)\n\t\tshape.lineTo( 0, 0)\n\t\tbk = shape.extrude\n\t\t\tamount: 40\n\t\t\tsteps: 1\n\t\t\tbevelEnabled: false\n\t\t\tcurveSegments: DETAIL\n\t\tbk.applyMatrix _m(x, 0, 55, 'Y', 1)\n\t\tbk\n\t\n\t_belagRahmen = (l, b) ->\n\t\to = 50\n\t\tvertices = [\n\t\t\t# oberkante\n\t\t\t[ 0, 45, o],[ b, 45, o],[ b, 45, l-o],[ 0, 45, l-o], \n\t\t\t# unterkante\n\t\t\t[ 0,-30, o],[ b,-30, o],[ b,-30, l-o],[ 0,-30, l-o], \n\t\t\t# unterkante innen\n\t\t\t[ 5,-30,o+5],[b-5,-30,o+5],[b-5,-30,l-o-5],[ 5,-30,l-o-5], \n\t\t\t# oberkante innen\n\t\t\t[ 5, 40,o+5],[b-5, 40,o+5],[b-5, 40,l-o-5],[ 5, 40,l-o-5], \n\t\t]\n\t\tfaces = [\n\t\t\t[ 0, 2, 1], [ 0, 3, 2], [12,13,14], [12,14,15],\n\t\t\t[ 0, 1, 5], [ 0, 5, 4], [ 1, 2, 6], [ 1, 6, 5],\n\t\t\t[ 2, 3, 7], [ 2, 7, 6], [ 3, 0, 4], [ 3, 4, 7],\n\t\t\t[ 4, 5, 9], [ 4, 9, 8], [ 5, 6,10], [ 5,10, 9],\n\t\t\t[ 6, 7,11], [ 6,11,10], [ 7, 4, 8], [ 7, 8,11],\n\t\t\t[ 8, 9,13], [ 8,13,12], [ 9,10,14], [ 9,14,13],\n\t\t\t[10,11,15], [10,15,14], [11, 8,12], [11,12,15],\n\t\t]\n\t\tnew THREE.CustomGeometry vertices, faces\n\t\n\t_Belag = (l, w, x = 0) ->\n\t\tb = new THREE.Geometry()\n\t\tb.merge _belagKlammer(1), _m( 60,0,0)\n\t\tb.merge _belagKlammer(1), _m(w-60,0,0)\n\t\tb.merge _belagRahmen(l, w), _m(0,0,0)\n\t\tb.merge _belagKlammer(1), _m( 60,0,l, 'Y', 2)\n\t\tb.merge _belagKlammer(1), _m(w-60,0,l, 'Y', 2)\n\t\tb.applyMatrix _m(55+x, 0, 0)\n\t\tb\n\t\n\t_keilKupplungDiagonale = (d, r = 1)->\n\t\tz = 35\n\t\tvertices = [\n\t\t\t[25, 7, 38], [26,0, 38], [25,-7, 38], \n\t\t\t[25, 7, 11], [26,0, 11], [25,-7, 11], # 6\n\t\t\t[25, 7, -1], [26,0, -1], [25,-7, -1],\n\t\t\t[25, 7,-35], [26,0,-35], [25,-7,-35], # 12\n\t\t\t[65, 12, 24], [65,-12, 24],\n\t\t\t[65, 22, 11], [65,-22, 11], # 16\n\t\t\t[65, 22, -1], [65,-22, -1],\n\t\t\t[65, 12,-24], [65,-12,-24], # 20\n\t\t\t[65, 1*r, 20], [65, 1*r,-20], \n\t\t\t[65, 11*r,-20], [65, 11*r, 20], # 24\n\t\t\t[65+z, 1*r+z*r, 20], [65+z, 1*r+z*r,-20], \n\t\t\t[65+z-5, 6*r+z*r,-20], [65+z-5, 6*r+z*r, 20]\n\t\t]\n\t\tfaces = [\n\t\t\t[ 0, 1,12], [ 1,13,12], [ 1, 2,13], # top\n\t\t\t[ 9,18,10], [10,18,19], [10,19,11], # bottom\n\t\t\t[ 1, 0, 4], [ 4, 0, 3], [ 2, 1, 5], [ 5, 1, 4], # innen\n\t\t\t[ 7, 6,10], [10, 6, 9], [ 8, 7,11], [11, 7,10], # innen\n\t\t\t[ 4, 3,14], [ 4,14,15], [ 5, 4,15], # zwischen\n\t\t\t[ 6, 7,16], [ 7,17,16], [ 7, 8,17], # zwischen\n\t\t\t[14,17,15], [14,16,17], [14,15,17], [14,17,16], \n\t\t\t[ 3, 0,14], [ 0,12,14], [16, 9, 6], [18, 9,16], #links\n\t\t\t[ 2, 5,15], [ 2,15,13], [17, 8,11], [17,11,19],\n\t\t\t[12,13,14], [13,15,14], [16,17,18], [17,19,18], # HINTEN\n\t\t]\n\t\tfacesD = [\n\t\t\t[20,21,25], [20,25,24], [22,23,27], [22,27,26],\n\t\t\t[20,27,23], [20,24,27], [21,22,26], [21,26,25],\n\t\t\t[24,25,26], [24,26,27]\n\t\t]\n\t\tfor fd in facesD\n\t\t\tif r > 0\n\t\t\t\tfaces.push fd\n\t\t\telse\n\t\t\t\tfaces.push [fd[1], fd[0], fd[2]]\n\t\t\n\t\tkkd = new THREE.CustomGeometry vertices, faces\n\t\tkkd.applyMatrix _m(0,0,0, 'Z', .5*r*d)\n\t\tkkd\n\t\n\t_VertikalDiagonale = (w, s = 1, h = 2000) ->\n\t\tvd = new THREE.Geometry()\n\t\tr = new THREE.Geometry()\n\t\ts *= -1\n\t\t\n\t\tbohrAbstand = Math.sqrt(Math.pow(w - 155, 2) + Math.pow(h, 2))\n\t\tdegree = Math.atan2 w-155, h\n\t\t\n\t\tvd.merge _keilKupplungDiagonale(-1, 1*s)\n\t\tvd.merge _keilKupplungDiagonale(-1,-1*s), _m(w, 0, h, 'Z', 2)\n\t\t\n\t\toffset = if s > 0 then 14 else 7\n\t\t\n\t\tr.merge new THREE.BoxGeometry(35,10,60), _m( 0, 0, 10)\n\t\tr.merge _cylinder(16,0,21), _m( 0, offset, 0, 'X', 1)\n\t\tr.merge _barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m( 0, 0, 110, 'X', 2)\n\t\tr.merge _cylinder(\n\t\t\tRohrDurchmesserAussen, RohrDurchmesserInnen, \n\t\t\tbohrAbstand-220\n\t\t), _m( 0, 0, 110)\n\t\tr.merge _barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m( 0, 0, bohrAbstand-110)\n\t\tr.merge new THREE.BoxGeometry(35,10,60), _m( 0, 0, bohrAbstand-10)\n\t\tr.merge _cylinder(16,0,21), _m( 0, offset, bohrAbstand, 'X', 1)\n\t\t\n\t\tvd.merge r, _m(77.5, -50 * s, 0, 'Y', degree / D90)\n\t\tvd\n\t\n\t_keilKupplungRiegel = ->\n\t\tvertices = [\n\t\t\t[25, 7, 38], [26,0, 38], [25,-7, 38], \n\t\t\t[25, 7, 11], [26,0, 11], [25,-7, 11],\n\t\t\t[25, 7, -1], [26,0, -1], [25,-7, -1],\n\t\t\t[25, 7,-35], [26,0,-35], [25,-7,-35], # 12\n\t\t\t[65, 12, 24], [65,-12, 24],\n\t\t\t[65, 22, 11], [65,-22, 11],\n\t\t\t[65, 22, -1], [65,-22, -1],\n\t\t\t[65, 12,-24], [65,-12,-24], # 20\n\t\t\t[77, 0, 24], [77,-17, 17], \n\t\t\t[77,-24, 0], [77,-17,-17], \n\t\t\t[77, 0,-24], [77, 17,-17], \n\t\t\t[77, 24, 0], [77, 17, 17]\n\t\t]\n\t\tfaces = [\n\t\t\t[ 0, 1,12], [ 1,13,12], [ 1, 2,13], # top\n\t\t\t[ 9,18,10], [10,18,19], [10,19,11], # bottom\n\t\t\t[ 1, 0, 4], [ 4, 0, 3], [ 2, 1, 5], [ 5, 1, 4], # innen\n\t\t\t[ 7, 6,10], [10, 6, 9], [ 8, 7,11], [11, 7,10], # innen\n\t\t\t[ 4, 3,14], [ 4,14,15], [ 5, 4,15], # zwischen\n\t\t\t[ 6, 7,16], [ 7,17,16], [ 7, 8,17], # zwischen\n\t\t\t[14,17,15], [14,16,17],\n\t\t\t[ 3, 0,14], [ 0,12,14], [16, 9, 6], [18, 9,16], #links\n\t\t\t[ 2, 5,15], [ 2,15,13], [17, 8,11], [17,11,19],\n\t\t\t[20,12,13], [20,13,21], [21,13,15], [21,15,22],\n\t\t\t[22,15,17], [22,17,23], [23,17,19], [23,19,24],\n\t\t\t[24,19,18], [24,18,25], [25,18,16], [25,16,26],\n\t\t\t[26,16,14], [26,14,27], [27,14,12], [27,12,20]\n\t\t]\n\t\tnew THREE.CustomGeometry vertices, faces\n\t\n\t_haengegeruestVerbinder = ->\n\t\trv = new THREE.BoxGeometry(10,50,550)\n\t\trv.applyMatrix _m(82, 0, 250)\n\t\trv.merge _keilKupplungRiegel(), _m(0, 0, 0)\n\t\trv.merge _keilKupplungRiegel(), _m(0, 0, 500)\n\t\trv.applyMatrix _m(0,0,0, 'X', -1)\n\t\trv\n\t\n\t_Riegel = (l) ->\n\t\tr = _cylinder RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150\n\t\tr.applyMatrix _m(75, 0, 0, 'Y', 1)\n\t\tr.merge _keilKupplungRiegel()\n\t\tr.merge _keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2)\n\t\tr.applyMatrix _m(0,0,0, 'X', -1)\n\t\tr\n\t\n\t_DoppelRiegel = (l) ->\n\t\tr = _cylinder RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150\n\t\tr.applyMatrix _m(75, 0, 0, 'Y', 1)\n\t\tr.merge _keilKupplungRiegel()\n\t\tr.merge _keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2)\n\t\t\n\t\tp = new THREE.CurvePath();\n\t\tp.add(new THREE.LineCurve3((new THREE.Vector3( 0, 0, 0)),(new THREE.Vector3( 200, 100, 0))));\n\t\tp.add(new THREE.LineCurve3((new THREE.Vector3( 200, 100, 0)),(new THREE.Vector3(l-350, 100, 0))));\n\t\tp.add(new THREE.LineCurve3((new THREE.Vector3(l-350, 100, 0)),(new THREE.Vector3(l-150, 0, 0))));\n\t\tr2 = _cylinderPath RohrDurchmesserAussen*.6, RohrDurchmesserInnen*.6, p\n\t\tr2.applyMatrix _m(75, 0, 0, 'X',-1)\n\t\tr.merge r2\n\t\t\n\t\tfor i in [500..l-1] by 500\n\t\t\tf = new THREE.BoxGeometry(100,100,5)\n\t\t\tf.applyMatrix _m(i, 0,-50, 'X', 1)\n\t\t\tr.merge f\n\t\t\n\t\tr.applyMatrix _m(0,0,0, 'X', -1)\n\t\tr\n\t\n\t_teller = ->\n\t\t_cylinder TellerDurchmesser, RohrDurchmesserAussen, TellerHoehe\n\t\n\t_rohrverbinder = ->\n\t\trv = _cylinder 45, 30, 400\n\t\trv.applyMatrix _m(0,0,-200)\n\t\trv\n\t\n\t_VertikalStiel = (l, rv = 1) ->\n\t\tv = new THREE.Geometry()\n\t\tv.merge _rohr(l), _m(0,0,100)\n\t\tfor i in [500..l] by 500\n\t\t\tv.merge _teller(), _m(0,0,i)\n\t\tv.merge _rohrverbinder(), _m(0,0,l) if rv is 1\n\t\tv.applyMatrix _m(0,0,0, 'X', -1)\n\t\tv\n\t\n\tFX = (l,x,y,z,o) ->\n\t\tf = _threadCyl 10*l\n\t\tf.merge new THREE.BoxGeometry(100,100,5)\n\t\tf.merge new THREE.BoxGeometry(120,40,10), _m(0,0,70, 'Z', .5)\n\t\tif parseInt(o) < 0 or (o and o[0] is 'n') or o is '-'\n\t\t\tf.applyMatrix _m(10*x,10*y+175,10*z,'X', 1)\n\t\telse\n\t\t\tf.applyMatrix _m(10*x,10*y-144,10*z,'X', -1)\n\t\tf\n\t\n\tVX = (l,x,y,z,o) ->\n\t\td = 0\n\t\trv = 1\n\t\tif o\n\t\t\tfor s in o.split ','\n\t\t\t\td = 2 if parseInt(s) < 0 or (s and s[0] is 'n') or s is '-' \n\t\t\t\trv = 0 if s[0] is 'o'\n\t\tv = _VertikalStiel 10*l, rv\n\t\tv.applyMatrix _m(10*x, 10*y, 10*z, 'X', d)\n\t\tv\n\t\n\tRX = (l,x,y,z,d) ->\n\t\tr = _Riegel 10*l\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\t\t\t\n\t\tr.applyMatrix _m(10*x, 10*y, 10*z, 'Y', -d)\n\t\tr\n\t\n\tDRX = (l,x,y,z,d) ->\n\t\tr = _DoppelRiegel 10*l\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\t\t\t\n\t\tr.applyMatrix _m(10*x, 10*y, 10*z, 'Y', -d)\n\t\tr\n\t\n\tVDX = (w,h,x,y,z,d,o) ->\n\t\ts = -1\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\ts = if d == 1 or d == 2 then 1 else -1\n\t\ts *= -1 if parseInt(o) < 0 or (o and o[0] is 'n') or o is '-'\n\t\tvd = _VertikalDiagonale 10*w, s, 10*h\n\t\tvd.applyMatrix _m(0,0,0,'X', -1)\n\t\tvd.applyMatrix _m(0,0,0,'Y', -d)\n\t\tvd.applyMatrix _m(10*x, 10*y, 10*z)\n\t\tvd\n\t\n\tBX = (l,x,y,z,d,s) ->\n\t\tbl = new THREE.Geometry()\n\t\ts = s.split '/'\n\t\to = 0\n\t\tw = s[0]\n\t\tif s.length >= 2 and parseInt s[1]\n\t\t\to = parseInt s[1]\n\t\t\n\t\tfor b in w.split(',')\n\t\t\tbl.merge _Belag(10*l, 10*b, o)\n\t\t\to += 10*b + 5\n\t\t\n\t\tswitch d\n\t\t\twhen \"X\" then bl.applyMatrix _m(10*x + 10*l, 10*y, 10*z, 'Y', -1)\n\t\t\twhen \"Y\" then bl.applyMatrix _m(10*x, 10*y, 10*z)\n\t\t\twhen \"-X\" then bl.applyMatrix _m(10*x, 10*y, 10*z, 'Y', 1)\n\t\t\twhen \"-Y\" then bl.applyMatrix _m(10*x, 10*y, 10*z+10*l, 'Y', 2)\n\t\tbl\n\t\n\tHV = (x, h, z, d) ->\n\t\thv = do _haengegeruestVerbinder\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\thv.applyMatrix _m(10*x, 10*h, 10*z, 'Y', -d)\n\t\thv\n\t\n\tAnfSt = (x,h,z) ->\n\t\ta = do _AnfStk\n\t\ta.applyMatrix _m(10*x, 10*h, 10*z)\n\t\ta\n\t\n\tconstructor: ->\n\t\tconsole.log \"EGS_Elements constructed\"\n\t\n\tgetGeometry: (element) ->\n\t\tn = element.get 'element'\n\t\tx = element.get 'x'\n\t\tz = element.get 'y'\n\t\th = element.get 'h'\n\t\td = element.get 'direction'\n\t\ts = element.get 'special'\n#\t\tconsole.log n,x,z,h,d,s\n\t\t\n\t\tswitch n\n\t\t\twhen \"AnfSt\" then AnfSt x, h, z\n\t\t\twhen \"V50\" then VX 50, x, h, z, s\n\t\t\twhen \"V100\" then VX 100, x, h, z, s\n\t\t\twhen \"V150\" then VX 150, x, h, z, s\n\t\t\twhen \"V200\" then VX 200, x, h, z, s\n\t\t\twhen \"V300\" then VX 300, x, h, z, s\n\t\t\twhen \"V400\" then VX 400, x, h, z, s\n\t\t\twhen \"R25\" then RX 25, x, h, z, d\n\t\t\twhen \"R50\" then RX 50, x, h, z, d\n\t\t\twhen \"R100\" then RX 100, x, h, z, d\n\t\t\twhen \"R200\" then RX 200, x, h, z, d\n\t\t\twhen \"R300\" then RX 300, x, h, z, d\n\t\t\twhen \"DR100\" then DRX 100, x, h, z, d\n\t\t\twhen \"DR200\" then DRX 200, x, h, z, d\n\t\t\twhen \"DR300\" then DRX 300, x, h, z, d\n\t\t\twhen \"D100\" then VDX 100, 200, x, h, z, d, s\n\t\t\twhen \"D150\" then VDX 150, 200, x, h, z, d, s\n\t\t\twhen \"D200\" then VDX 200, 200, x, h, z, d, s\n\t\t\twhen \"D300\" then VDX 300, 200, x, h, z, d, s\n\t\t\twhen \"DS200\" then VDX 200, 100, x, h, z, d, s\n\t\t\twhen \"F40\" then FX 40, x, h, z, s\n\t\t\twhen \"F60\" then FX 40, x, h, z, s\n\t\t\twhen \"B100\" then BX 100, x, h, z, d, s\n\t\t\twhen \"B200\" then BX 200, x, h, z, d, s\n\t\t\twhen \"B300\" then BX 300, x, h, z, d, s\n\t\t\twhen \"HV\" then HV x, h, z, d\n\t\t\telse new THREE.Geometry()\n\t\nmodule.exports = EGS_Elements\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/egs/EGS_Elements.coffee\n **/","Backbone = require \"backbone\"\nElementList = require \"collections/ElementList\"\n\nmodule.exports = class extends Backbone.Model\n\tdataTable: null\n\tfetched: false\n\t\n\tfields: \n\t\tshow: \n\t\t\tname: \"Anzeige\"\n\t\tcolor: \n\t\t\tname: \"Farbe\"\n\t\telement: \n\t\t\tname: \"Bauteil\"\n\t\tx: \n\t\t\tname: \"X\"\n\t\ty: \n\t\t\tname: \"Y\"\n\t\th: \n\t\t\tname: \"H\",\n\t\tdirection: \n\t\t\tname: \"Richtung\"\n\t\tspecial: \n\t\t\tname: \"Besonderheit\"\n\t\n\tdetermineColumn: (label) ->\n\t\treturn 'element' if /^\\s?(Element|Bauteil)\\s$/i.test label\n\t\treturn 'direction' if /^\\s?(Richtung)\\s?$/i.test label\n\t\treturn 'special' if /^\\s?(Besonderheit)\\s(.*)?$/i.test label\n\t\treturn 'show' if /^(Anzeige\\s)?(Anzeige)$/i.test label\n\t\treturn 'x' if /^(Position)?\\s?(X)$/i.test label\n\t\treturn 'y' if /^(Position)?\\s?(Y)$/i.test label\n\t\treturn 'h' if /^(Position)?\\s?(H)$/i.test label\n\t\treturn 'color' if /^(Anzeige)?\\s?(Farbe)$/i.test label\n\t\tnull\n\t\n\tidAttribute: \"sheet\"\n\tinitialize: (attributes, options) ->\n\t\t@app = options.collection.app\n#\t\tconsole.log \"init Construction\"\n\t\t@elements = new ElementList [], \n\t\t\tapp: @app\n\t\n\tsetSelected: (cb) ->\n\t\t@collection.setSelected this\n\t\tif not @fetched \n\t\t\t@fetch success: => \n\t\t\t\t@fetched = true\n\t\t\t\tcb this if cb\n\t\telse\n\t\t\tcb this if cb\n\t\n\tparse: (resp) ->\n\t\t@dataTable = do resp.getDataTable\n\t\t\n\t\tcols = {} \n\t\tcolTypes = {}\n\t\tfor c in [0 ... @dataTable.getNumberOfColumns()]\n\t\t\tcv = @determineColumn @dataTable.getColumnLabel c\n\t\t\tif cv\n\t\t\t\tcols[cv] = c \n\t\t\t\tcolTypes[cv] = true\n\t\t\n\t\tfor i,c of @fields\n\t\t\tif not colTypes[i]?\n\t\t\t\tconsole.log \"Spalte '#{c.name}' nicht gefunden!\"\n\t\t\t\treturn\n\t\t\n\t\tdata = []\n\t\tfor r in [0 ... @dataTable.getNumberOfRows()]\n\t\t\td = {}\n\t\t\tfor key,c of cols\n\t\t\t\td[key] = @dataTable.getValue r, c\n\t\t\tdata.push d\n\t\t\n\t\tconsole.log \"Construction: loaded element list: \", data\n\t\telements: new ElementList data, app: @app\n\n\t\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/Construction.coffee\n **/","Backbone = require \"backbone\"\n\nmodule.exports = class extends Backbone.Model\n\tapp: null\n\tgeometry: null\n\tinitialize: (attributes, options) ->\n\t\tsuper attributes, options\n\t\t@app = options.collection.app\n\t\t@geometry = @app.egsElementProvider.getGeometry @ \n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/Element.coffee\n **/","Backbone = require \"backbone\"\nkeyNormalizer = require \"keyNormalizer\"\n\nmodule.exports = class DataSourceModal\n\tmodal: document.getElementById 'dataSourceModal'\n\tinputField: document.getElementById 'dataSourceModal-input'\n\tsaveButton: document.getElementById 'dataSourceModal-save'\n\tcancelButton: document.getElementById 'dataSourceModal-cancel'\n\tresetButton: document.getElementById 'dataSourceModal-reset'\n\terrorBanner: document.getElementById 'dataSourceModal-error'\n\t\n\tconstructor: (@app) ->\n\t\t@saveButton.addEventListener 'click', @save\n\t\t@cancelButton.addEventListener 'click', @cancel\n\t\t@resetButton.addEventListener 'click', @reset\n\t\n\treset: (evt) =>\n\t\t@inputField.value = App.defaultSource\n\t\n\tsave: (evt) =>\n\t\tkeygid = keyNormalizer @inputField.value, true\n\t\tif keygid\n\t\t\t@errorBanner.style.display = 'none'\n\t\t\t@app.navigate keygid.join('/'), trigger:true\n\t\telse\n\t\t\t@errorBanner.style.display = ''\n\t\t\tdo evt.preventDefault\n\t\t\tdo evt.stopPropagation\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/views/DataSourceModal.coffee\n **/","Backbone = require \"backbone\"\nTHREE = require \"THREE\"\nOrbitControls = require('three-orbit-controls')(THREE)\n\nclass EGS_ElementView extends Backbone.View\n\tparent: null\n\tmesh: null\n\tcolor: null\n\tdisplay: null\n\t\n\tparseNum: (text) ->\n\t\treturn [] if not text\n\t\tlist = []\n\t\tt1 = String(text).split ','\n\t\tfor t2 in t1\n\t\t\ttt = t2.split ':'\n\t\t\tptt = tt[0].split '-'\n\t\t\tcolor = if tt.length is 2 then tt[1] else null;\n\t\t\tptt[0] = null if ptt[0] is ''\n\t\t\tptt[1] = ptt[0] if ptt.length is 1\n\t\t\tptt[1] = null if ptt[1] is ''\n\t\t\t\n\t\t\tif ptt[0] >= 0\n\t\t\t\tlist.push [ptt[0], ptt[1], color]\n\t\tlist\n\t\n\tinitialize: (options) ->\n\t\t@parent = options.parent \n\t\t\n\t\tdo @model.geometry.computeBoundingBox\n\t\t\n\t\t@color = @parent.getAndStoreColor @model.get 'color'\n\t\t\n\t\t@mesh = new THREE.Mesh @model.geometry, @color\n\t\t@mesh.visible = false\n\t\t\n\t\t@display = []\n\t\tfor d in @parseNum @model.get 'show'\n\t\t\tfor i in [0,1]\n\t\t\t\tif d[i] isnt null\n\t\t\t\t\td[i] = parseInt d[i]\n\t\t\t\t\t@parent.steps.push d[i]\n\t\t\td[2] = if d[2] is null then @color else @parent.getAndStoreColor d[2] \n\t\t\t@display.push d\n\t\n\tgetMesh: -> @mesh\n\tsetStep: (step) ->\n\t\tshow = null\n\t\tfor i of @display\n\t\t\tif @display[i][0] isnt null && @display[i][1] isnt null \n\t\t\t\tshow = @display[i][2] if step >= @display[i][0] and step <= @display[i][1]\n\t\t\telse if @display[i][0] isnt null\n\t\t\t\tshow = @display[i][2] if step >= @display[i][0]\n\t\t\telse if @display[i][1] isnt null\n\t\t\t\tshow = @display[i][2] if step <= @display[i][1]\n\t\t\n\t\t@mesh.visible = show isnt null\n\t\t@mesh.material = if show then show else @color\n\t\t\nclass Display \n\tcenter: new THREE.Vector3()\n\tbbox: new THREE.Box3()\n\t\n\tstartTime: null\n\tturnRate: 0\n\tturnOffset: 0\n\tcamDistance: 0\n\tcamDistanceOffset: 0\n\tcamHeight: 0\n\tcamHeightOffset: 0\n\t\n\tscene: null\n\trenderer: null\n\tcamera: null\n\tcontrols: null\n\t\n\tanimationRequest: null\n\t\n\t_addRenderer: (domElementID)->\n\t\thasWebGL = false\n\t\ttry\n\t\t\tcanvas = document.createElement 'canvas' \n\t\t\thasWebGL = !! ( window.WebGLRenderingContext && \n\t\t\t\t( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) )\n\t\t\t)\n\t\n\t\tif hasWebGL\n\t\t\t@renderer = new THREE.WebGLRenderer\n\t\t\t\tantialias: true\n\t\telse\n\t\t\t@renderer = new THREE.CanvasRenderer()\n\t\t@renderer.setPixelRatio window.devicePixelRatio\n\t\t@renderer.setSize window.innerWidth, window.innerHeight\n\t\tdocument.getElementById(domElementID).appendChild @renderer.domElement\n\t\n\t_addLights: ->\n\t\themiLight = new THREE.HemisphereLight 0xffffff, 0xffffff, 0.6\n\t\themiLight.color.setHSL 0.6, 1, 0.6\n\t\themiLight.groundColor.setHSL 0.095, 1, 0.75\n\t\themiLight.position.set 0, 500, 0\n\t\t@scene.add hemiLight\n\n\t\tdirLight = new THREE.DirectionalLight 0xffffff, 1\n\t\tdirLight.color.setHSL 0.1, 1, 0.95\n\t\tdirLight.position.set -5000, 10000, -5000\n\t\tdirLight.position.multiplyScalar 50\n\t\t@scene.add dirLight\n\n\t_addCamera: ->\n\t\twidth = window.innerWidth\n\t\theight = window.innerHeight\n\t\t@camera = new THREE.PerspectiveCamera 70, width / height, 1, 200000\n#\t\tcamera = new THREE.OrthographicCamera( width / - .5, width / .5, height / .5, height / - .5, 1, 100000 );\n\n\t_addControls: ->\n\t\t@controls = new OrbitControls @camera, @renderer.domElement\n\t\t@controls.zoomSpeed = .3\n\t\t@controls.rotateSpeed = .3\n\t\n\tonWindowResize: =>\n\t\treturn if not @camera\n\t\t\n\t\tstyle = getComputedStyle document.getElementById(@domElementID), null\n\t\tw = parseInt style.getPropertyValue 'width'\n\t\th = parseInt style.getPropertyValue 'height'\n\t\t\n\t\t@camera.aspect = w / h \n\t\tdo @camera.updateProjectionMatrix\n\t\t\n\t\t@renderer.setSize w, h\n\t\n\t_animationStart: ->\n\t\treturn if not @scene\n\t\tdo @_animationFrame if not @animationRequest\n\t\t\n\t_animationStop: ->\n\t\twindow.cancelAnimationFrame @animationRequest if @animationRequest\n\t\t@animationRequest = null\n\t\t\n\t_animationFrame: ->\n\t\t@animationRequest = window.requestAnimationFrame (=> do @_animationFrame )\n\t\tdo @calcCamPos\n\t\t@renderer.render @scene, @camera\n\t\n\tconstructor: (@domElementID) ->\n\t\t@scene = new THREE.Scene\n\t\t@_addRenderer @domElementID\n\t\tdo @_addLights\n\t\tdo @_addCamera\n\t\tdo @_addControls\n\t\t\n\t\tdo @onWindowResize\n\t\tdo @_animationStart\n\t\t\n\t\n\tresetView: ->\n\t\t@center = do @bbox.center\n\t\tsize = do @bbox.size\n\t\t\n\t\tfovH = @camera.fov / 180 * Math.PI * 80 / 100\n\t\t@camDistance = Math.max.apply Math, [\n\t\t\tsize.y / 2 * Math.tan(fovH) + Math.sqrt size.x * size.x / 4 + size.z * size.z / 4\n\t\t\tsize.y / 2 * Math.tan(fovH) + size.z / 2\n\t\t\tsize.y / 2 * Math.tan(fovH) + size.x / 2\n\t\t\tsize.x / 2 * Math.tan(fovH) / @camera.aspect + size.z / 2\n\t\t\tsize.z / 2 * Math.tan(fovH) / @camera.aspect + size.x / 2\n\t\t]\n\t\t@camHeight = @center.y\n\t\t\n\t\t@controls.target.copy @center\n\t\n\tremoveAll: ->\n\t\t@scene.remove @scene.children[0] while @scene.children.length\n\t\tdo @_addLights\n\t\t@bbox = new THREE.Box3()\n\t\t\n\tadd: (element) ->\n\t\t@scene.add do element.getMesh\n\t\t@bbox.union element.model.geometry.boundingBox\n\t\tdo @resetView\n\t\n\tsetTurnRate: (rate) ->\n\t\tdelta = (do Date.now) - @startTime # 60 000 per Minute\n\t\t@turnOffset = @turnOffset + delta / (60000 / @turnRate)\n\t\t@startTime = do Date.now\n\t\t\n\t\t@controls.enableZoom = rate == 0\n\t\t@controls.enablePan = rate == 0\n\t\t@controls.enableRotate = rate == 0\n\t\t\n\t\t@turnRate = rate\n\t\t@calcCamPos true\n\t\n\tsetHeight: (height, relation) ->\n\t\t@camHeight = switch relation\n\t\t\twhen \"abs\" then 10 * height\n\t\t\twhen \"incr\" then @camHeight + 10 * height\n\t\t\twhen \"rel\" then 2 * @center.y * height\n\t\t\telse @camHeight\n\t\n\tcalcCamPos: (override) ->\n\t\tif override\n\t\t\tturnIndex = @turnOffset\n\t\telse\n\t\t\treturn if @turnRate is 0\n\t\t\tdelta = (do Date.now) - @startTime # 60 000 per Minute\n\t\t\tturnIndex = @turnOffset + delta / (60000 / @turnRate)\n\t\t\n\t\t@camera.position.x = @center.x + Math.sin(2 * Math.PI * turnIndex) * ( @camDistance + @camDistanceOffset )\n\t\t@camera.position.y = @camHeight\n\t\t@camera.position.z = @center.z + Math.cos(2 * Math.PI * turnIndex) * ( @camDistance + @camDistanceOffset )\n\t\t@camera.lookAt @center\n\nclass EGS_View extends Backbone.View\n\telements: []\n\tsteps: []\n\tstepNo: 0\n\t\n\tcolorTable = []\n\t\n\tsetTurnRate: (rate) ->\n\t\t@display.setTurnRate Math.max 0, rate\n\tsetHeight: (height, relation) ->\n\t\t@display.setHeight height, relation\n\tresetView: ->\n\t\tdo @display.resetView\n\t\n\tconstructor: (@app, @domElementID) ->\n\t\t@display = new Display @domElementID\n\t\n\tshowConstruct: (construction) ->\n\t\t@elements = [];\n\t\t@steps = []\n\t\tconstruction.get('elements').each (e) =>\n\t\t\t@elements.push new EGS_ElementView\n\t\t\t\tmodel: e\n\t\t\t\tparent: @\n\t\t\n\t\t@steps = @steps.filter (v,i,x) -> i is x.indexOf v \n\t\t@steps.sort (a,b) -> a-b\n\t\t\n\t\t@app.view.SecondaryNav.setSteps @steps\n\t\t\n\t\tdo @display.removeAll\n\t\tfor e in @elements\n\t\t\t@display.add e\n\t\t\n\t\t@updateConstruct @stepNo\n\t\n\tupdateConstruct: (step) ->\n\t\t@stepNo = step\n\t\tfor e in @elements\n\t\t\te.setStep parseInt @steps[@stepNo]\n\t\tdo @render\n\t\t\n\t_hexToRGB = (hex) ->\n\t\tr = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec hex\n\t\trs = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec hex\n\t\treturn (parseInt(r[1], 16) << 16) + (parseInt(r[2], 16) << 8) + parseInt(r[3], 16) if r\n\t\treturn ((parseInt(rs[1], 16)*17) << 16) + ((parseInt(rs[2], 16)*17) << 8) + (parseInt(rs[3], 16)*17) if rs\n\t\treturn 0x888888\n\t\n\tgetAndStoreColor: (val) ->\n\t\tif not colorTable[val]?\n\t\t\tcolorTable[val] = new THREE.MeshPhongMaterial\n\t\t\t\tcolor: _hexToRGB val\n\t\t\t\temissive: 0x000000\n\t\t\t\tspecular: 0x000000\n\t\t\t\tshininess: 30\n\t\tcolorTable[val]\n\t\n\n\n\nmodule.exports = EGS_View\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/views/EGS.coffee\n **/","Backbone = require \"backbone\"\n\nmodule.exports = Backbone.View.extend\n\tel: document.getElementById 'primaryNav'\n\ttemplate: require 'templates/PrimaryNav'\n\tactiveConstructionList: null\n\t\n\tinitialize: (@dataSourceList) -> \n\t\t@listenTo @dataSourceList, 'select', ->\n\t\t\t@stopListening @activeConstructionList if @activeConstructionList\n\t\t\t@activeConstructionList = null\n\t\t\t@render 'loading', 'unset'\n\t\t\n\t\t@listenTo @dataSourceList, \"sync\", ->\n\t\t\t@activeConstructionList = @dataSourceList.selected.get 'constructions'\n\t\t\t@listenTo @activeConstructionList, 'select', -> @render 'loaded', 'loading'\n\t\t\t@listenTo @activeConstructionList, 'sync', -> @render 'loaded', 'loaded'\n\t\t\t@render 'loaded', 'unset'\n\t\t\n\t\t@render 'unset', 'unset'\n\t\t\n\t\n\trender: (dataSourceState = 0, constructionState = 0) ->\n#\t\tconsole.log \"PrimNavRender: #{dataSourceState} #{constructionState}\"\n\t\ttpl = {}\n\t\tif dataSourceState is 'loaded'\n\t\t\ttpl.item = []\n\t\t\tconstructionList = @dataSourceList.selected.get 'constructions' \n\t\t\tselected = null\n\t\t\tconstructionList.each (e) ->\n\t\t\t\tselected = e.get('name') if e == constructionList.selected\n\t\t\t\ttpl.item.push\n\t\t\t\t\tsheet: e.get('sheet')\n\t\t\t\t\tname: e.get('name')\n\t\t\t\n\t\t\tif constructionState isnt \"unset\"\n\t\t\t\ttpl.auswahl = \"#{selected}\"\n\t\t\telse\n\t\t\t\ttpl.auswahl = \"#{tpl.item.length} Konstruktionen zur Auswahl\"\n\t\t\n\t\tif dataSourceState is 'loading' or constructionState is 'loading'\n\t\t\ttpl.loading = true\n\t\t\n\t\t@el.innerHTML = @template tpl\n\t\t\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/views/PrimaryNav.coffee\n **/","Backbone = require \"backbone\"\n\nmodule.exports = Backbone.View.extend\n\tel: document.getElementById 'secondaryNav'\n\ttemplate: require 'templates/SecondaryNav'\n\t\n\tsteps: []\n\tstep: 0\n\tcounter: 0\n\tstepper: 5\n\trotRate: 2\n\t\n\tevents: \n\t\t\"click .step-rel\": \"stepRel\"\n\t\t\"click .step-abs\": \"stepAbs\"\n\t\t\"click .step-auto\": \"stepAuto\"\n\t\t\"click .rot-incr\": \"rotationIncr\"\n\t\t\"click .rot-setp\": \"rotationSetp\"\n\t\t\"click .view-reset\": \"viewReset\"\n\t\t\"click .height-incr\": \"heightIncr\"\n\t\t\"click .height-setabs\": \"heightSetAbs\"\n\t\t\"click .height-setrel\": \"heightSetRel\"\n\n\theightIncr: (e) ->\n\t\t@app.view.EGS.setHeight( parseInt(e.target.dataset.incr) , 'incr') if @app.view.EGS \n\t\tdo @update\n\theightSetAbs: (e) ->\n\t\t@app.view.EGS.setHeight( parseInt(e.target.dataset.setabs) , 'abs') if @app.view.EGS \n\t\tdo @update\n\theightSetRel: (e) ->\n\t\t@app.view.EGS.setHeight( parseFloat(e.target.dataset.setrel) , 'rel') if @app.view.EGS \n\t\tdo @update\n\t\n\tstepRel: (e) ->\n\t\t@incrStep e.target.dataset.step\n\tstepAbs: (e) ->\n\t\t@setStep e.target.dataset.step\n\tstepAuto: (e) ->\n\t\t@stepper = parseInt e.target.dataset.val\n\t\tdo @render\n\trotationIncr: (e) ->\n\t\t@rotRate += parseFloat e.target.dataset.incr\n\t\t@app.view.EGS.setTurnRate @rotRate if @app.view.EGS \n\t\tdo @update\n\trotationSetp: (e) ->\n\t\t@rotRate = parseFloat e.target.dataset.setp\n\t\t@app.view.EGS.setTurnRate @rotRate if @app.view.EGS \n\t\tdo @update\n\t\n\tviewReset: (e) ->\n\t\t@rotRate = 2\n\t\t@app.view.EGS.setTurnRate @rotRate if @app.view.EGS\n\t\tdo @app.view.EGS.resetView if @app.view.EGS\n\t\tdo @update\n\t\t\n\t\n\tstartup: ->\n\t\t@setStep 0\n\t\tsetInterval (=> do @timeTrigger), 1000\n\t\t@app.view.EGS.updateConstruct @step \n\t\t@app.view.EGS.setTurnRate @rotRate\n\t\n\tsetSteps: (steps) ->\n\t\t@steps = steps\n\t\t@step = 0\n\t\tdo @render\n\t\n\tincrStep: (dir) ->\n\t\tdir = parseInt(dir)\n\t\treturn @setStep @step + @steps.length + dir if @step + dir < 0\n\t\treturn @setStep @step - @steps.length + dir if @step + dir >= @steps.length\n\t\t@setStep @step + dir\n\t\n\tsetStep: (step) ->\n\t\t@step = parseInt(step)\n\t\tconsole.log \"Aufbauschritt: \" + @steps[@step] + \" (index: \" + @step + \")\"\n\t\t@app.view.EGS.updateConstruct @step if @app.view.EGS \n\t\tdo @update\n\t\n\ttimeTrigger: ->\n\t\t@incrStep 1 if @stepper and ++@counter %% @stepper is 0\n\t\n\tinitialize: (@app) -> \n\t\tdo @render\n\t\t\n\tupdate: ->\n\t\t$('#stepNo', @$el).text @steps[@step]\n\t\t$('.steps li', @$el).removeClass 'active'\n\t\t$('.step-' + @step, @$el).addClass 'active'\n\t\t# $('#rotMode', @$el).text if @rotRate > 0 then @rotRate + ' U/min' else \"Manuell\"\n\t\t$('.rots li', @$el).removeClass 'active'\n\t\t$('.rot-' + @rotRate, @$el).addClass 'active'\n\t\t\n\trender: ->\n\t\tsteps = []\n\t\tfor i of @steps\n\t\t\tsteps.push \n\t\t\t\ti: i\n\t\t\t\tname: \"Schritt \" + @steps[i]\n\t\t\t\n\t\ttpl = \n\t\t\tsteps: steps\n\t\t\tstep: @step\n\t\t\tstepName: @steps[@step]\n\t\t\tauto: @stepper\n\t\t\trotMode: if @rotRate > 0 then @rotRate + ' U/min' else \"Manuell\"\n\t\t\trate: @rotRate\n\t\t@el.innerHTML = @template tpl\n\t\t\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/views/SecondaryNav.coffee\n **/","var Handlebars = require(\"/Users/robbie/dev/thw-egs/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : {};\n\n return \"\t
  • \\n\t\tKonstruktion: \\n\t
  • \\n\t
  • \\n\t\t \"\n + container.escapeExpression(((helper = (helper = helpers.auswahl || (depth0 != null ? depth0.auswahl : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"auswahl\",\"hash\":{},\"data\":data}) : helper)))\n + \" \\n\t\t
      \\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.item : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t
    \\n\t
  • \\n\"\n + ((stack1 = helpers[\"if\"].call(alias1,(depth0 != null ? depth0.loading : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t
  • \"\n + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"name\",\"hash\":{},\"data\":data}) : helper)))\n + \"
  • \\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"\t
  • \\n\t\t
    \\n\t\t
    \\n\t\t
    \\n\t
  • \\n\t
  • \\n\t\twird geladen...\\n\t
  • \\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.loading : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data})) != null ? stack1 : \"\");\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"\t
  • \\n\t\t
    \\n\t\t
    \\n\t\t
    \\n\t
  • \\n\t
  • \\n\t\tKonstuktionen werden geladen...\\n\t
  • \\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"\t
  • \\n\t\tKeine Datenquelle ausgewählt!\\n\t
  • \\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1;\n\n return \"
      \\n\"\n + ((stack1 = helpers[\"if\"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.item : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data})) != null ? stack1 : \"\")\n + \"
    \\n
    \\n\t\\n
    \\n\";\n},\"useData\":true});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/templates/PrimaryNav.hbs\n ** module id = 27\n ** module chunks = 1\n **/","var Handlebars = require(\"/Users/robbie/dev/thw-egs/node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" active\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"active\";\n},\"7\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression;\n\n return \"\t\t\t\t\t\t
  • \"\n + alias2(alias1((depth0 != null ? depth0.name : depth0), depth0))\n + \"
  • \\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n var stack1, alias1=depth0 != null ? depth0 : {}, alias2=container.lambda, alias3=container.escapeExpression;\n\n return \"
      \\n\t
    • \\n\t\tAufbauschritte:\\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t
        \\n\"\n + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.steps : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data})) != null ? stack1 : \"\")\n + \"\t\t\t\t
      \\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t
    • \\n\t
    • \\n\t\tAnsicht:\\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t\t \\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t\t \\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t
      \\n\t
    • \\n
    \\n\";\n},\"useData\":true,\"useDepths\":true});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/templates/SecondaryNav.hbs\n ** module id = 28\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars.runtime.js\n ** module id = 29\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/decorators.js\n ** module id = 30\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXFCLFVBQVU7O3FCQUVoQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/decorators/inline.js\n ** module id = 31\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7eUNBQXVDLGdDQUFnQzs7OzsyQkFDOUMsZ0JBQWdCOzs7O29DQUNQLDBCQUEwQjs7Ozt5QkFDckMsY0FBYzs7OzswQkFDYixlQUFlOzs7OzZCQUNaLGtCQUFrQjs7OzsyQkFDcEIsZ0JBQWdCOzs7O0FBRWxDLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO0FBQy9DLHlDQUEyQixRQUFRLENBQUMsQ0FBQztBQUNyQywyQkFBYSxRQUFRLENBQUMsQ0FBQztBQUN2QixvQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFDaEMseUJBQVcsUUFBUSxDQUFDLENBQUM7QUFDckIsMEJBQVksUUFBUSxDQUFDLENBQUM7QUFDdEIsNkJBQWUsUUFBUSxDQUFDLENBQUM7QUFDekIsMkJBQWEsUUFBUSxDQUFDLENBQUM7Q0FDeEIiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVyRWFjaCBmcm9tICcuL2hlbHBlcnMvZWFjaCc7XG5pbXBvcnQgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJJZiBmcm9tICcuL2hlbHBlcnMvaWYnO1xuaW1wb3J0IHJlZ2lzdGVyTG9nIGZyb20gJy4vaGVscGVycy9sb2cnO1xuaW1wb3J0IHJlZ2lzdGVyTG9va3VwIGZyb20gJy4vaGVscGVycy9sb29rdXAnO1xuaW1wb3J0IHJlZ2lzdGVyV2l0aCBmcm9tICcuL2hlbHBlcnMvd2l0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJFYWNoKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJJZihpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb29rdXAoaW5zdGFuY2UpO1xuICByZWdpc3RlcldpdGgoaW5zdGFuY2UpO1xufVxuIl19\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers.js\n ** module id = 32\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBc0QsVUFBVTs7cUJBRWpELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGVBQU8sR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztPQUN4Qjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGNyZWF0ZUZyYW1lLCBpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHtkYXRhOiBkYXRhfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js\n ** module id = 33\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else {\n var priorKey = undefined;\n\n for (var key in context) {\n if (context.hasOwnProperty(key)) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n }\n }\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQUErRSxVQUFVOzt5QkFDbkUsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixZQUFNLDJCQUFjLDZCQUE2QixDQUFDLENBQUM7S0FDcEQ7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDekIsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksWUFBQTtRQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixRQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixpQkFBVyxHQUFHLHlCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pGOztBQUVELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsVUFBSSxHQUFHLG1CQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxhQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN6QyxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN6QixZQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7O0FBRW5CLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO09BQ0Y7O0FBRUQsU0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFlBQUksRUFBRSxJQUFJO0FBQ1YsbUJBQVcsRUFBRSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0UsQ0FBQyxDQUFDO0tBQ0o7O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNO0FBQ0wsWUFBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixhQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtBQUN2QixjQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0IsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0w7U0FDRjtBQUNELFlBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix1QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/each.js\n ** module id = 34\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFBYyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/helper-missing.js\n ** module id = 35\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBa0MsVUFBVTs7cUJBRTdCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLGtCQUFXLFdBQVcsQ0FBQyxFQUFFO0FBQUUsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQUU7Ozs7O0FBS3RFLFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztHQUN2SCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/if.js\n ** module id = 36\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVMsSUFBSSxDQUFDLENBQUM7R0FDeEIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi4gYXJncyk7XG4gIH0pO1xufVxuIl19\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/log.js\n ** module id = 37\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field) {\n return obj && obj[field];\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3JELFdBQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUMxQixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJsb29rdXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9va3VwJywgZnVuY3Rpb24ob2JqLCBmaWVsZCkge1xuICAgIHJldHVybiBvYmogJiYgb2JqW2ZpZWxkXTtcbiAgfSk7XG59XG4iXX0=\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/lookup.js\n ** module id = 38\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUErRSxVQUFVOztxQkFFMUUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLENBQUMsZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNyQixVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFlBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGOztBQUVELGFBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFXLEVBQUUsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO0tBQ0osTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/helpers/with.js\n ** module id = 39\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n if (!console[method]) {\n // eslint-disable-line no-console\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFzQixTQUFTOztBQUUvQixJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDL0UsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUNwQixjQUFNLEdBQUcsS0FBSyxDQUFDO09BQ2hCOzt3Q0FQbUIsT0FBTztBQUFQLGVBQU87OztBQVEzQixhQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO0dBQ0Y7Q0FDRixDQUFDOztxQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/logger.js\n ** module id = 40\n ** module chunks = 1\n **/","/* global window */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOztBQUVsQyxNQUFJLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRWxDLFlBQVUsQ0FBQyxVQUFVLEdBQUcsWUFBVztBQUNqQyxRQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFVBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQy9CO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/no-conflict.js\n ** module id = 41\n ** module chunks = 1\n **/","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision !== currentRevision) {\n if (compilerRevision < currentRevision) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as psuedo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n var result = env.VM.invokePartial.call(this, partial, context, options);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, options);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name) {\n if (!(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj);\n }\n return obj[name];\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n if (depths[i] && depths[i][name] != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n merge: function merge(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context !== options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n container.helpers = container.merge(options.helpers, env.helpers);\n\n if (templateSpec.usePartial) {\n container.partials = container.merge(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = container.merge(options.decorators, env.decorators);\n }\n } else {\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context !== depths[0]) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n options.data = _base.createFrame(options.data);\n partialBlock = options.data['partial-block'] = options.fn;\n\n if (partialBlock.partials) {\n options.partials = Utils.extend({}, options.partials, partialBlock.partials);\n }\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBQzhCLFFBQVE7O0FBRWxFLFNBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUN2RCxlQUFlLDBCQUFvQixDQUFDOztBQUUxQyxNQUFJLGdCQUFnQixLQUFLLGVBQWUsRUFBRTtBQUN4QyxRQUFJLGdCQUFnQixHQUFHLGVBQWUsRUFBRTtBQUN0QyxVQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1VBQ25ELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVELFlBQU0sMkJBQWMseUZBQXlGLEdBQ3ZHLHFEQUFxRCxHQUFHLGVBQWUsR0FBRyxtREFBbUQsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNoSyxNQUFNOztBQUVMLFlBQU0sMkJBQWMsd0ZBQXdGLEdBQ3RHLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNuRjtHQUNGO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcs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U0FBUyxJQUFJLEdBQUc7QUFBRSxTQUFPLEVBQUUsQ0FBQztDQUFFOztBQUVyQyxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQy9CLE1BQUksQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBLEFBQUMsRUFBRTtBQUM5QixRQUFJLEdBQUcsSUFBSSxHQUFHLGtCQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztHQUNyQjtBQUNELFNBQU8sSUFBSSxDQUFDO0NBQ2I7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUN6RSxNQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUU7QUFDaEIsUUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2YsUUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTLCBjcmVhdGVGcmFtZSB9IGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JldmlzaW9uKGNvbXBpbGVySW5mbykge1xuICBjb25zdCBjb21waWxlclJldmlzaW9uID0gY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSB8fCAxLFxuICAgICAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7XG4gICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBjdXJyZW50UmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2NvbXBpbGVyUmV2aXNpb25dO1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVySW5mb1sxXSArICcpLicpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHN1ZWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUpIHtcbiAgICAgIGlmICghKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGVwdGhzW2ldICYmIGRlcHRoc1tpXVtuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyO1xuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbih2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIChwYXJhbSAhPT0gY29tbW9uKSkge1xuICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG5cbiAgICBub29wOiBlbnYuVk0ubm9vcCxcbiAgICBjb21waWxlckluZm86IHRlbXBsYXRlU3BlYy5jb21waWxlclxuICB9O1xuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgZGF0YSA9IG9wdGlvbnMuZGF0YTtcblxuICAgIHJldC5fc2V0dXAob3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwgJiYgdGVtcGxhdGVTcGVjLnVzZURhdGEpIHtcbiAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0LCBkYXRhKTtcbiAgICB9XG4gICAgbGV0IGRlcHRocyxcbiAgICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9IGNvbnRleHQgIT09IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gJycgKyB0ZW1wbGF0ZVNwZWMubWFpbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIH1cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuaGVscGVycywgZW52LmhlbHBlcnMpO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMucGFydGlhbHMsIGVudi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5kZWNvcmF0b3JzLCBlbnYuZGVjb3JhdG9ycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgIH1cbiAgfTtcblxuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgJiYgIWJsb2NrUGFyYW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgYmxvY2sgcGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzICYmICFkZXB0aHMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoZGVwdGhzICYmIGNvbnRleHQgIT09IGRlcHRoc1swXSkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oY29udGFpbmVyLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICAgIGN1cnJlbnREZXB0aHMpO1xuICB9XG5cbiAgcHJvZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpO1xuXG4gIHByb2cucHJvZ3JhbSA9IGk7XG4gIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgcHJvZy5ibG9ja1BhcmFtcyA9IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTtcbiAgfVxuICByZXR1cm4gcGFydGlhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAocGFydGlhbEJsb2NrLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBwYXJ0aWFsQmxvY2sucGFydGlhbHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7XG4gICAgcGFydGlhbCA9IHBhcnRpYWxCbG9jaztcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgZm91bmQnKTtcbiAgfSBlbHNlIGlmIChwYXJ0aWFsIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gcGFydGlhbChjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHsgcmV0dXJuICcnOyB9XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IocHJvZywgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGhzICYmIGRlcHRoc1swXSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvZztcbn1cbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/runtime.js\n ** module id = 42\n ** module chunks = 1\n **/","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/handlebars/dist/cjs/handlebars/safe-string.js\n ** module id = 43\n ** module chunks = 1\n **/","/**\n * @author qiao / https://github.com/qiao\n * @fileoverview This is a convex hull generator using the incremental method. \n * The complexity is O(n^2) where n is the number of vertices.\n * O(nlogn) algorithms do exist, but they are much more complicated.\n *\n * Benchmark: \n *\n * Platform: CPU: P7350 @2.00GHz Engine: V8\n *\n * Num Vertices\tTime(ms)\n *\n * 10 1\n * 20 3\n * 30 19\n * 40 48\n * 50 107\n */\n\nTHREE.ConvexGeometry = function( vertices ) {\n\n\tTHREE.Geometry.call( this );\n\n\tvar faces = [ [ 0, 1, 2 ], [ 0, 2, 1 ] ]; \n\n\tfor ( var i = 3; i < vertices.length; i++ ) {\n\n\t\taddPoint( i );\n\n\t}\n\n\n\tfunction addPoint( vertexId ) {\n\n\t\tvar vertex = vertices[ vertexId ].clone();\n\n\t\tvar mag = vertex.length();\n\t\tvertex.x += mag * randomOffset();\n\t\tvertex.y += mag * randomOffset();\n\t\tvertex.z += mag * randomOffset();\n\n\t\tvar hole = [];\n\n\t\tfor ( var f = 0; f < faces.length; ) {\n\n\t\t\tvar face = faces[ f ];\n\n\t\t\t// for each face, if the vertex can see it,\n\t\t\t// then we try to add the face's edges into the hole.\n\t\t\tif ( visible( face, vertex ) ) {\n\n\t\t\t\tfor ( var e = 0; e < 3; e++ ) {\n\n\t\t\t\t\tvar edge = [ face[ e ], face[ ( e + 1 ) % 3 ] ];\n\t\t\t\t\tvar boundary = true;\n\n\t\t\t\t\t// remove duplicated edges.\n\t\t\t\t\tfor ( var h = 0; h < hole.length; h++ ) {\n\n\t\t\t\t\t\tif ( equalEdge( hole[ h ], edge ) ) {\n\n\t\t\t\t\t\t\thole[ h ] = hole[ hole.length - 1 ];\n\t\t\t\t\t\t\thole.pop();\n\t\t\t\t\t\t\tboundary = false;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( boundary ) {\n\n\t\t\t\t\t\thole.push( edge );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// remove faces[ f ]\n\t\t\t\tfaces[ f ] = faces[ faces.length - 1 ];\n\t\t\t\tfaces.pop();\n\n\t\t\t} else { // not visible\n\n\t\t\t\tf++;\n\n\t\t\t}\n\t\t}\n\n\t\t// construct the new faces formed by the edges of the hole and the vertex\n\t\tfor ( var h = 0; h < hole.length; h++ ) {\n\n\t\t\tfaces.push( [ \n\t\t\t\thole[ h ][ 0 ],\n\t\t\t\thole[ h ][ 1 ],\n\t\t\t\tvertexId\n\t\t\t] );\n\n\t\t}\n\t}\n\n\t/**\n\t * Whether the face is visible from the vertex\n\t */\n\tfunction visible( face, vertex ) {\n\n\t\tvar va = vertices[ face[ 0 ] ];\n\t\tvar vb = vertices[ face[ 1 ] ];\n\t\tvar vc = vertices[ face[ 2 ] ];\n\n\t\tvar n = normal( va, vb, vc );\n\n\t\t// distance from face to origin\n\t\tvar dist = n.dot( va );\n\n\t\treturn n.dot( vertex ) >= dist; \n\n\t}\n\n\t/**\n\t * Face normal\n\t */\n\tfunction normal( va, vb, vc ) {\n\n\t\tvar cb = new THREE.Vector3();\n\t\tvar ab = new THREE.Vector3();\n\n\t\tcb.subVectors( vc, vb );\n\t\tab.subVectors( va, vb );\n\t\tcb.cross( ab );\n\n\t\tcb.normalize();\n\n\t\treturn cb;\n\n\t}\n\n\t/**\n\t * Detect whether two edges are equal.\n\t * Note that when constructing the convex hull, two same edges can only\n\t * be of the negative direction.\n\t */\n\tfunction equalEdge( ea, eb ) {\n\n\t\treturn ea[ 0 ] === eb[ 1 ] && ea[ 1 ] === eb[ 0 ]; \n\n\t}\n\n\t/**\n\t * Create a random offset between -1e-6 and 1e-6.\n\t */\n\tfunction randomOffset() {\n\n\t\treturn ( Math.random() - 0.5 ) * 2 * 1e-6;\n\n\t}\n\n\n\t/**\n\t * XXX: Not sure if this is the correct approach. Need someone to review.\n\t */\n\tfunction vertexUv( vertex ) {\n\n\t\tvar mag = vertex.length();\n\t\treturn new THREE.Vector2( vertex.x / mag, vertex.y / mag );\n\n\t}\n\n\t// Push vertices into `this.vertices`, skipping those inside the hull\n\tvar id = 0;\n\tvar newId = new Array( vertices.length ); // map from old vertex id to new id\n\n\tfor ( var i = 0; i < faces.length; i++ ) {\n\n\t\t var face = faces[ i ];\n\n\t\t for ( var j = 0; j < 3; j++ ) {\n\n\t\t\t\tif ( newId[ face[ j ] ] === undefined ) {\n\n\t\t\t\t\t\tnewId[ face[ j ] ] = id++;\n\t\t\t\t\t\tthis.vertices.push( vertices[ face[ j ] ] );\n\n\t\t\t\t}\n\n\t\t\t\tface[ j ] = newId[ face[ j ] ];\n\n\t\t }\n\n\t}\n\n\t// Convert faces into instances of THREE.Face3\n\tfor ( var i = 0; i < faces.length; i++ ) {\n\n\t\tthis.faces.push( new THREE.Face3( \n\t\t\t\tfaces[ i ][ 0 ],\n\t\t\t\tfaces[ i ][ 1 ],\n\t\t\t\tfaces[ i ][ 2 ]\n\t\t) );\n\n\t}\n\n\t// Compute UVs\n\tfor ( var i = 0; i < this.faces.length; i++ ) {\n\n\t\tvar face = this.faces[ i ];\n\n\t\tthis.faceVertexUvs[ 0 ].push( [\n\t\t\tvertexUv( this.vertices[ face.a ] ),\n\t\t\tvertexUv( this.vertices[ face.b ] ),\n\t\t\tvertexUv( this.vertices[ face.c ])\n\t\t] );\n\n\t}\n\n\n//\tthis.computeCentroids();\n\tthis.computeFaceNormals();\n\tthis.computeVertexNormals();\n\n};\n\nTHREE.ConvexGeometry.prototype = Object.create( THREE.Geometry.prototype );\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/_helpers/ConvexGeometry.js\n ** module id = 52\n ** module chunks = 1\n **/","module.exports = google;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"google\"\n ** module id = 53\n ** module chunks = 1\n **/","module.exports = window;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"window\"\n ** module id = 54\n ** module chunks = 1\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/app.coffee","webpack:///./~/backbone/backbone.js","webpack:///./~/underscore/underscore.js","webpack:///external \"window\"","webpack:///./src/views/EGS.coffee","webpack:///./src/models/DataSource.coffee","webpack:///./src/collections/ConstructionList.coffee","webpack:///./src/models/Construction.coffee","webpack:///./src/collections/ElementList.coffee","webpack:///./src/models/Element.coffee","webpack:///./src/_helpers/keyNormalizer.coffee","webpack:///./src/collections/DataSourceList.coffee","webpack:///./src/egs/EGS_Elements.coffee","webpack:///./src/_helpers/ConvexGeometry.js","webpack:///./src/views/PrimaryNav.coffee","webpack:///./src/templates/PrimaryNav.hbs","webpack:///./~/handlebars/runtime.js","webpack:///./~/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./~/handlebars/dist/cjs/handlebars/base.js","webpack:///./~/handlebars/dist/cjs/handlebars/utils.js","webpack:///./~/handlebars/dist/cjs/handlebars/exception.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./~/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./~/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./~/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./~/handlebars/dist/cjs/handlebars/logger.js","webpack:///./~/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack:///./~/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack:///./~/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./~/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./~/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack:///./~/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./src/views/SecondaryNav.coffee","webpack:///./src/templates/SecondaryNav.hbs","webpack:///./src/_helpers/handlebars/cmp.js","webpack:///./src/views/DataSourceModal.coffee","webpack:///external \"google\""],"names":[],"mappings":"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AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,IAAG;AACH;AACA,UAAS,uBAAuB,EAAE;AAClC;;AAEA;AACA,IAAG;AACH,qCAAoC;AACpC;;AAEA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA,yCAAwC,mBAAmB,EAAE;AAC7D;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA,iCAAgC,mBAAmB;AACnD;AACA;AACA,MAAK;AACL;AACA,8CAA6C,kBAAkB;AAC/D;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;AACA;AACA,MAAK;;AAEL;AACA,+DAA8D;AAC9D;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAkE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAqB,gFAAgF;AACrG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;;AAEA;AACA,WAAU,kBAAkB;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA8B,YAAY;AAC1C,uCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA,+BAA8B,YAAY;AAC1C,uCAAsC;AACtC;AACA;;AAEA,kDAAiD,mBAAmB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,YAAY;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAqE;AACrE,0EAAyE;AACzE,8EAA6E;AAC7E,kFAAiF;AACjF,8EAA6E;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA,2CAA0C,WAAW;AACrD;AACA;AACA;AACA;AACA,QAAO;AACP,oBAAmB;AACnB;;AAEA,+BAA8B;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gDAA+C,YAAY,YAAY;AACvE,MAAK;;AAEL;AACA;AACA;AACA;AACA,yCAAwC,YAAY,YAAY;AAChE,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,2BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,2CAA0C,WAAW;AACrD;AACA;AACA;AACA;AACA,QAAO;AACP,oBAAmB;AACnB;;AAEA,2BAA0B,4BAA4B;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;;AAEA,wCAAuC,WAAW;AAClD,uDAAsD;;AAEtD;AACA;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,+BAA8B,aAAa,YAAY,eAAe;AACtE,MAAK;;AAEL;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA,+DAA8D,uBAAuB;AACrF;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,8CAA6C,aAAa;AAC1D;;AAEA;AACA,qBAAoB;AACpB,qBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC,gBAAe,YAAY;AAC3B,gBAAe,iBAAiB;AAChC;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA,wCAAuC,8BAA8B,EAAE;AACvE,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,yCAAwC,aAAa;AACrD,MAAK;;AAEL;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,4BAA2B,aAAa;;AAExC;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,wBAAwB;AAC7C;AACA;AACA;AACA;AACA,2CAA0C,aAAa;AACvD;AACA;AACA,MAAK;;AAEL;AACA;AACA,wCAAuC,gBAAgB;AACvD,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,wCAAuC,MAAM;AAC7C,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,2BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,sBAAqB,mBAAmB;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;AACA;;AAEA,aAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,UAAS,6BAA6B;AACtC;AACA;AACA;AACA;AACA,gDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;AACA,yCAAwC,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA,qEAAoE,MAAM;AAC1E;AACA;AACA;AACA,uDAAsD,4BAA4B;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,uBAAsB;AACtB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO,IAAI;AACX;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAuC;AACvC;AACA;AACA,MAAK;;AAEL;AACA,mBAAkB;;AAElB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,mBAAmB;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAwC,UAAU;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT,0CAAyC,cAAc;AACvD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,8BAA6B,iCAAiC;AAC9D,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAmD;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wEAAuE;;AAEvE;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,0BAAyB,sCAAsC;AAC/D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;;AC/iED;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,oBAAoB,gBAAgB;AAC1E,IAAG;AACH,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAqB,eAAe;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,OAAO;AAC3C;AACA,gCAA+B,kBAAkB,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;AACf,eAAc;AACd,eAAc;AACd,iBAAgB;AAChB,iBAAgB;AAChB,iBAAgB;AAChB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP,sBAAqB;AACrB;;AAEA;AACA;AACA,MAAK;AACL,kBAAiB;;AAEjB;AACA,mDAAkD,EAAE,iBAAiB;;AAErE;AACA,yBAAwB,8BAA8B;AACtD,4BAA2B;;AAE3B;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mDAAkD,iBAAiB;;AAEnE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO,eAAe;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,YAAY;AAClD;AACA;AACA,MAAK;AACL;AACA,yCAAwC,YAAY;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,WAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAkD;AAClD,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,yCAAwC;AACxC,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,+CAA8C,YAAY;AAC1D;AACA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8CAA6C,YAAY;AACzD;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAqB,cAAc;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,EAAC;AACD;;;;;;;;;ACr+DA,yB;;;;;;ACAA;GAAA;;;;AAAA,YAAW,oBAAQ,EAAR;;AACX,SAAQ,oBAAQ,EAAR;;AACR,iBAAgB,oBAAQ,EAAR,EAAgC,KAAhC;;AAEV;;;;;;;6BACL,SAAQ;;6BACR,OAAM;;6BACN,QAAO;;6BACP,UAAS;;6BAET,WAAU,SAAC,IAAD;AACT;KAAA,IAAa,CAAI,IAAjB;AAAA,cAAO,GAAP;;KACA,OAAO;KACP,KAAK,OAAO,IAAP,CAAY,CAAC,KAAb,CAAmB,GAAnB;AACL;;OACC,KAAK,EAAE,CAAC,KAAH,CAAS,GAAT;OACL,MAAM,EAAG,GAAE,CAAC,KAAN,CAAY,GAAZ;OACN,QAAW,EAAE,CAAC,MAA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CA;AACA;AACA;AACA,cAAa;AACb,aAAY;AACZ,aAAY;AACZ,eAAc;AACd,eAAc;AACd,eAAc;AACd,eAAc;AACd;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA2C,cAAc;;;;;;;AC3HzD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA,4CAA2C,cAAc;;;;;;;AC/DzD;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C,cAAc;;;;;;;ACvDzD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,oBAAmB;AACnB;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;ACtCzD;;AAEA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA,qCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,uCAAsC,UAAU;AAChD;AACA;AACA;AACA,qCAAoC,OAAO;AAC3C;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;;ACvGzD;;AAEA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA,iCAAgC,KAAK;AACrC;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;ACxBzD;;AAEA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;AC7CzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,0BAA0B;AAC7C;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;ACzBzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;ACfzD;;AAEA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;AC1CzD;;AAEA;AACA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA;;AAEA;AACA;AACA;AACA,4CAA2C,cAAc;;;;;;;ACfzD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA,4CAA2C,cAAc;;;;;;;AC5BzD;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,4FAA2F,aAAa;AACxG;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;;AAEA;AACA;AACA,4CAA2C,cAAc;;;;;;;AC9CzD;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wCAAuC,6BAA6B,YAAY,EAAE,OAAO,iBAAiB,mBAAmB,uBAAuB,4EAA4E,EAAE,EAAE,yBAAyB,eAAe,EAAE;;AAE9Q;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,4CAA2C,cAAc;;;;;;;ACxEzD;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,UAAU;AACrB,cAAa;AACb;;AAEA;AACA,qEAAoE,aAAa;AACjF;AACA;;AAEA;AACA;AACA,4CAA2C,cAAc;;;;;;;ACrBzD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA2C,cAAc;;;;;;;ACdzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,uCAAuC,kBAAkB;;AAE/F;;AAEA,wCAAuC,6BAA6B,YAAY,EAAE,OAAO,iBAAiB,mBAAmB,uBAAuB,4EAA4E,EAAE,EAAE,yBAAyB,eAAe,EAAE;;AAE9Q;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA,0CAAyC;AACzC;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAyC,OAAO;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,8BAA6B;AAC7B;;AAEA;AACA,MAAK;AACL;AACA,gCAA+B;;AAE/B;AACA;AACA;;AAEA;AACA,2EAA0E;;AAE1E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,0CAAyC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,iEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA0E;;AAE1E;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA8E;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,0BAAyB,iCAAiC;AAC1D,IAAG;AACH;AACA,4CAA2C,cA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","file":"js/app.js","sourcesContent":["Backbone = require \"backbone\"\n_ = require \"underscore\"\nwindow = require \"window\"\nEGS = require \"views/EGS\"\n\nBackbone.sync = (method, model, options) ->\n\tkey = model.id.split '/'\n\tconsole.log \"sync called with key: \", key\n\turl = 'https://docs.google.com/spreadsheets/d/' + key[key.length-2] + '/gviz/tq?gid=' + key[key.length-1]\n\n\tif method is 'read'\n\t\t(new google.visualization.Query url).send (resp) =>\n\t\t\tif do resp.isError\n\t\t\t\toptions.error(resp)\n\t\t\telse\n\t\t\t\toptions.success(resp)\n\nDataSourceModel = require \"models/DataSource\"\nDataSourceListCollection = require \"collections/DataSourceList\"\nEGS_Elements = require 'egs/EGS_Elements'\n\nApp = class MainApp extends Backbone.Router\n\tview: {}\n\tegsElementProvider: null\n\tdataSourceList: null\n\tactiveSource: null\n\tactiveConstruct: null\n\troutes:\n\t\t\"\": \"default\"\n\t\t\":skey\": \"loadSource\"\n\t\t\":skey/:sgid(/)\": \"loadSource\"\n\t\t\":skey/:sgid/:ckey/:cgid\": \"loadConstruct\"\n\n\tdefault: ->\n\t\t@setActiveDataSource.call @\n\n\tloadSource: (skey, sgid = 0) ->\n\t\tconsole.log \"Routed to loadSource '#{skey}'/'#{sgid}'\"\n\t\t@setActiveDataSource.call @, skey + \"/\" + sgid\n\n\tloadConstruct: (skey, sgid, ckey, cgid) ->\n\t\tconsole.log \"Routed to loadConstruct '#{skey}'/'#{sgid}'/'#{ckey}'/'#{cgid}'\"\n\t\t@setActiveDataSource.call @, skey + \"/\" + sgid, (ds) =>\n\t\t\t@setActiveConstruction.call @, skey + \"/\" + sgid + \"/\" + ckey + \"/\" + cgid, (c) =>\n\t\t\t\t@view.EGS.showConstruct c\n\n\tsetActiveDataSource: (source, cb = null) ->\n\t\tconsole.log \"setActiveDataSource\", source\n\t\tif source\n\t\t\tsource = source.split '/'\n\t\t\tsource = source[0] + '/' + source[1]\n\t\t\tif not @dataSourceList.get(source)\n\t\t\t\t@dataSourceList.add [{source: source}]\n\t\t\t@activeSource = @dataSourceList.get(source).setSelected cb\n\t\telse if @dataSourceList.length\n\t\t\t@activeSource = @dataSourceList.at(0).setSelected cb\n\n\tsetActiveConstruction: (construct, cb = null) ->\n\t\tsource = @dataSourceList.selected\n\t\treturn if source is null\n\t\tconsole.log \"setActiveConstruction\", construct\n\n\t\tif not source.get('constructions').get(construct)\n\t\t\talert \"ausgewählte Konstruktion nicht in Datenquelle definiert!\"\n\t\t@activeConstruct = source.get('constructions').get(construct).setSelected cb\n\n\tinitialize: (data) ->\n\t\tconsole.log \"App Init\"\n\t\t@dataSourceList = new DataSourceListCollection [{source: data.defaultSource}],\n\t\t\tapp: @\n\n\t\t@egsElementProvider = new EGS_Elements();\n\t\tPrimaryNavView = require \"views/PrimaryNav\"\n\t\t@view.PrimaryNav = new PrimaryNavView @dataSourceList\n\t\tSecondaryNavView = require \"views/SecondaryNav\"\n\t\t@view.SecondaryNav = new SecondaryNavView @\n\t\tDataSourceModal = require \"views/DataSourceModal\"\n\t\t@view.DataSource = new DataSourceModal @\n\t\t@view.EGS = new EGS @, 'display'\n\n\t\tfor i,v of @view\n\t\t\tif v.startup?\n\t\t\t\tdo v.startup\n\n\tstart: ->\n\t\tconsole.log \"App start\"\n\t\tdo Backbone.history.start\n\ngoogle = require \"google\"\n\n# Theudebart:\n# Load Google Charts API\n# Load Frozen Version 44 (February 23, 2016) as this was the latest version from the last commit.\ngoogle.charts.load '44', {packages: ['corechart']}\n\ngoogle.setOnLoadCallback (e)->\n\tbody = document.getElementsByTagName('body')[0]\n\treturn if window.App ## singleton behaviour\n\twindow.App = new App\n\t\tdefaultSource: body.getAttribute 'data-defaultSource'\n\tdo window.App.start\n\n# Theudebart:\n# Bugfix\n# Loading the Google Chart Library has changed. See https://developers.google.com/chart/interactive/docs/basic_load_libs#updateloader\n# This results in an error. See Issue 13: https://github.com/rwolke/thw-egs/issues/13\n# The code below is deprecated and should be removed in later releases.\n# The code below is replaced by google.charts.load and moved further up (needs to be called before google.setOnLoadCallback)\n###\ngoogle.load 'visualization', '1',\n\tpackages: ['table']\n###\n\n\n\n// WEBPACK FOOTER //\n// ./src/app.coffee","// Backbone.js 1.4.0\n\n// (c) 2010-2019 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.4.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n create: 'POST',\n update: 'PUT',\n patch: 'PATCH',\n delete: 'DELETE',\n read: 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backbone/backbone.js\n// module id = 54\n// module chunks = 0","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.12.0\n // https://underscorejs.org\n // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.12.0';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n }\n\n _.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath(path) {\n return isArray(path) ? path : [path];\n }\n _.toPath = toPath;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath$1(path) {\n return _.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath$1(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has$1(obj, path) {\n path = toPath$1(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath$1(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath$1(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath$1(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten$1(array, depth) {\n return flatten(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has$1,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten$1,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _$1 = mixin(allExports);\n // Legacy Node.js API.\n _$1._ = _$1;\n\n return _$1;\n\n})));\n//# sourceMappingURL=underscore.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/underscore/underscore.js\n// module id = 55\n// module chunks = 0","module.exports = window;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"window\"\n// module id = 57\n// module chunks = 0","Backbone = require \"backbone\"\nTHREE = require \"THREE\"\nOrbitControls = require('three-orbit-controls')(THREE)\n\nclass EGS_ElementView extends Backbone.View\n\tparent: null\n\tmesh: null\n\tcolor: null\n\tdisplay: null\n\t\n\tparseNum: (text) ->\n\t\treturn [] if not text\n\t\tlist = []\n\t\tt1 = String(text).split ','\n\t\tfor t2 in t1\n\t\t\ttt = t2.split ':'\n\t\t\tptt = tt[0].split '-'\n\t\t\tcolor = if tt.length is 2 then tt[1] else null;\n\t\t\tptt[0] = null if ptt[0] is ''\n\t\t\tptt[1] = ptt[0] if ptt.length is 1\n\t\t\tptt[1] = null if ptt[1] is ''\n\t\t\t\n\t\t\tif ptt[0] >= 0\n\t\t\t\tlist.push [ptt[0], ptt[1], color]\n\t\tlist\n\t\n\tinitialize: (options) ->\n\t\t@parent = options.parent \n\t\t\n\t\tdo @model.geometry.computeBoundingBox\n\t\t\n\t\t@color = @parent.getAndStoreColor @model.get 'color'\n\t\t\n\t\t@mesh = new THREE.Mesh @model.geometry, @color\n\t\t@mesh.visible = false\n\t\t\n\t\t@display = []\n\t\tfor d in @parseNum @model.get 'show'\n\t\t\tfor i in [0,1]\n\t\t\t\tif d[i] isnt null\n\t\t\t\t\td[i] = parseInt d[i]\n\t\t\t\t\t@parent.steps.push d[i]\n\t\t\td[2] = if d[2] is null then @color else @parent.getAndStoreColor d[2] \n\t\t\t@display.push d\n\t\n\tgetMesh: -> @mesh\n\tsetStep: (step) ->\n\t\tshow = null\n\t\tfor i of @display\n\t\t\tif @display[i][0] isnt null && @display[i][1] isnt null \n\t\t\t\tshow = @display[i][2] if step >= @display[i][0] and step <= @display[i][1]\n\t\t\telse if @display[i][0] isnt null\n\t\t\t\tshow = @display[i][2] if step >= @display[i][0]\n\t\t\telse if @display[i][1] isnt null\n\t\t\t\tshow = @display[i][2] if step <= @display[i][1]\n\t\t\n\t\t@mesh.visible = show isnt null\n\t\t@mesh.material = if show then show else @color\n\t\t\nclass Display \n\tcenter: new THREE.Vector3()\n\tbbox: new THREE.Box3()\n\t\n\tstartTime: null\n\tturnRate: 0\n\tturnOffset: 0\n\tcamDistance: 0\n\tcamDistanceOffset: 0\n\tcamHeight: 0\n\tcamHeightOffset: 0\n\t\n\tscene: null\n\trenderer: null\n\tcamera: null\n\tcontrols: null\n\t\n\tanimationRequest: null\n\t\n\t_addRenderer: (domElementID)->\n\t\thasWebGL = false\n\t\ttry\n\t\t\tcanvas = document.createElement 'canvas' \n\t\t\thasWebGL = !! ( window.WebGLRenderingContext && \n\t\t\t\t( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) )\n\t\t\t)\n\t\n\t\tif hasWebGL\n\t\t\t@renderer = new THREE.WebGLRenderer\n\t\t\t\tantialias: true\n\t\telse\n\t\t\t@renderer = new THREE.CanvasRenderer()\n\t\t@renderer.setPixelRatio window.devicePixelRatio\n\t\t@renderer.setSize window.innerWidth, window.innerHeight\n\t\tdocument.getElementById(domElementID).appendChild @renderer.domElement\n\t\n\t_addLights: ->\n\t\themiLight = new THREE.HemisphereLight 0xffffff, 0xffffff, 0.6\n\t\themiLight.color.setHSL 0.6, 1, 0.6\n\t\themiLight.groundColor.setHSL 0.095, 1, 0.75\n\t\themiLight.position.set 0, 500, 0\n\t\t@scene.add hemiLight\n\n\t\tdirLight = new THREE.DirectionalLight 0xffffff, 1\n\t\tdirLight.color.setHSL 0.1, 1, 0.95\n\t\tdirLight.position.set -5000, 10000, -5000\n\t\tdirLight.position.multiplyScalar 50\n\t\t@scene.add dirLight\n\n\t_addCamera: ->\n\t\twidth = window.innerWidth\n\t\theight = window.innerHeight\n\t\t@camera = new THREE.PerspectiveCamera 70, width / height, 1, 200000\n#\t\tcamera = new THREE.OrthographicCamera( width / - .5, width / .5, height / .5, height / - .5, 1, 100000 );\n\n\t_addControls: ->\n\t\t@controls = new OrbitControls @camera, @renderer.domElement\n\t\t@controls.zoomSpeed = .3\n\t\t@controls.rotateSpeed = .3\n\t\n\tonWindowResize: =>\n\t\treturn if not @camera\n\t\t\n\t\tstyle = getComputedStyle document.getElementById(@domElementID), null\n\t\tw = parseInt style.getPropertyValue 'width'\n\t\th = parseInt style.getPropertyValue 'height'\n\t\t\n\t\t@camera.aspect = w / h \n\t\tdo @camera.updateProjectionMatrix\n\t\t\n\t\t@renderer.setSize w, h\n\t\n\t_animationStart: ->\n\t\treturn if not @scene\n\t\tdo @_animationFrame if not @animationRequest\n\t\t\n\t_animationStop: ->\n\t\twindow.cancelAnimationFrame @animationRequest if @animationRequest\n\t\t@animationRequest = null\n\t\t\n\t_animationFrame: ->\n\t\t@animationRequest = window.requestAnimationFrame (=> do @_animationFrame )\n\t\tdo @calcCamPos\n\t\t@renderer.render @scene, @camera\n\t\n\tconstructor: (@domElementID) ->\n\t\t@scene = new THREE.Scene\n\t\t@_addRenderer @domElementID\n\t\tdo @_addLights\n\t\tdo @_addCamera\n\t\tdo @_addControls\n\t\t\n\t\tdo @onWindowResize\n\t\tdo @_animationStart\n\t\t\n\t\n\tresetView: ->\n\t\t@center = do @bbox.center\n\t\tsize = do @bbox.size\n\t\t\n\t\tfovH = @camera.fov / 180 * Math.PI * 80 / 100\n\t\t@camDistance = Math.max.apply Math, [\n\t\t\tsize.y / 2 * Math.tan(fovH) + Math.sqrt size.x * size.x / 4 + size.z * size.z / 4\n\t\t\tsize.y / 2 * Math.tan(fovH) + size.z / 2\n\t\t\tsize.y / 2 * Math.tan(fovH) + size.x / 2\n\t\t\tsize.x / 2 * Math.tan(fovH) / @camera.aspect + size.z / 2\n\t\t\tsize.z / 2 * Math.tan(fovH) / @camera.aspect + size.x / 2\n\t\t]\n\t\t@camHeight = @center.y\n\t\t\n\t\t@controls.target.copy @center\n\t\n\tremoveAll: ->\n\t\t@scene.remove @scene.children[0] while @scene.children.length\n\t\tdo @_addLights\n\t\t@bbox = new THREE.Box3()\n\t\t\n\tadd: (element) ->\n\t\t@scene.add do element.getMesh\n\t\t@bbox.union element.model.geometry.boundingBox\n\t\tdo @resetView\n\t\n\tsetTurnRate: (rate) ->\n\t\tdelta = (do Date.now) - @startTime # 60 000 per Minute\n\t\t@turnOffset = @turnOffset + delta / (60000 / @turnRate)\n\t\t@startTime = do Date.now\n\t\t\n\t\t@controls.enableZoom = rate == 0\n\t\t@controls.enablePan = rate == 0\n\t\t@controls.enableRotate = rate == 0\n\t\t\n\t\t@turnRate = rate\n\t\t@calcCamPos true\n\t\n\tsetHeight: (height, relation) ->\n\t\t@camHeight = switch relation\n\t\t\twhen \"abs\" then 10 * height\n\t\t\twhen \"incr\" then @camHeight + 10 * height\n\t\t\twhen \"rel\" then 2 * @center.y * height\n\t\t\telse @camHeight\n\t\n\tcalcCamPos: (override) ->\n\t\tif override\n\t\t\tturnIndex = @turnOffset\n\t\telse\n\t\t\treturn if @turnRate is 0\n\t\t\tdelta = (do Date.now) - @startTime # 60 000 per Minute\n\t\t\tturnIndex = @turnOffset + delta / (60000 / @turnRate)\n\t\t\n\t\t@camera.position.x = @center.x + Math.sin(2 * Math.PI * turnIndex) * ( @camDistance + @camDistanceOffset )\n\t\t@camera.position.y = @camHeight\n\t\t@camera.position.z = @center.z + Math.cos(2 * Math.PI * turnIndex) * ( @camDistance + @camDistanceOffset )\n\t\t@camera.lookAt @center\n\nclass EGS_View extends Backbone.View\n\telements: []\n\tsteps: []\n\tstepNo: 0\n\t\n\tcolorTable = []\n\t\n\tsetTurnRate: (rate) ->\n\t\t@display.setTurnRate Math.max 0, rate\n\tsetHeight: (height, relation) ->\n\t\t@display.setHeight height, relation\n\tresetView: ->\n\t\tdo @display.resetView\n\t\n\tconstructor: (@app, @domElementID) ->\n\t\t@display = new Display @domElementID\n\t\n\tshowConstruct: (construction) ->\n\t\t@elements = [];\n\t\t@steps = []\n\t\tconstruction.get('elements').each (e) =>\n\t\t\t@elements.push new EGS_ElementView\n\t\t\t\tmodel: e\n\t\t\t\tparent: @\n\t\t\n\t\t@steps = @steps.filter (v,i,x) -> i is x.indexOf v \n\t\t@steps.sort (a,b) -> a-b\n\t\t\n\t\t@app.view.SecondaryNav.setSteps @steps\n\t\t\n\t\tdo @display.removeAll\n\t\tfor e in @elements\n\t\t\t@display.add e\n\t\t\n\t\t@updateConstruct @stepNo\n\t\n\tupdateConstruct: (step) ->\n\t\t@stepNo = step\n\t\tfor e in @elements\n\t\t\te.setStep parseInt @steps[@stepNo]\n\t\tdo @render\n\t\t\n\t_hexToRGB = (hex) ->\n\t\tr = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec hex\n\t\trs = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec hex\n\t\treturn (parseInt(r[1], 16) << 16) + (parseInt(r[2], 16) << 8) + parseInt(r[3], 16) if r\n\t\treturn ((parseInt(rs[1], 16)*17) << 16) + ((parseInt(rs[2], 16)*17) << 8) + (parseInt(rs[3], 16)*17) if rs\n\t\treturn 0x888888\n\t\n\tgetAndStoreColor: (val) ->\n\t\tif not colorTable[val]?\n\t\t\tcolorTable[val] = new THREE.MeshPhongMaterial\n\t\t\t\tcolor: _hexToRGB val\n\t\t\t\temissive: 0x000000\n\t\t\t\tspecular: 0x000000\n\t\t\t\tshininess: 30\n\t\tcolorTable[val]\n\t\n\n\n\nmodule.exports = EGS_View\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/EGS.coffee","Backbone = require \"backbone\"\nConstructionList = require \"collections/ConstructionList\"\nkeyNormalizer = require \"keyNormalizer\"\n\nmodule.exports = class DataSource extends Backbone.Model\n\tapp: null\n\tfetched: false\n\tdataTable: null\n\tcolumns: \n\t\tsheet: \"Blatt-Link (gid)\"\n\t\tname: \"Konstruktion\"\n\t\tdesc: \"Beschreibung\"\n\t\n\tidAttribute: \"source\"\n\tinitialize: (attributes, options) ->\n\t\t@app = options.collection.app\n\t\t@set 'constructions', new ConstructionList [], \n\t\t\tapp: @app\n\t\n\tsetSelected: (cb) ->\n\t\t@collection.setSelected this\n\t\tif not @fetched \n\t\t\t@fetch success: => \n\t\t\t\t@fetched = true\n\t\t\t\tcb this if cb\n\t\telse\n\t\t\tcb this if cb\n\n\tset: (attr, opts) ->\n\t\tif attr.source\n\t\t\tattr.source = keyNormalizer(attr.source).join('/') \n\t\tBackbone.Model.prototype.set.call this, attr, opts\n\t\n\tparse: (resp) ->\n\t\t@dataTable = do resp.getDataTable\n\t\t\n\t\tfirstDataRow = if @dataTable.getColumnLabel(0).length then 0 else 1\n\t\tisConstructTable = firstDataRow is 0\n\t\tfor k of @columns\n\t\t\tif @columns[k] is @dataTable.getColumnLabel(0)\n\t\t\t\tisConstructTable = false\n\t\t\n\t\tif isConstructTable\n\t\t\treturn constructions: new ConstructionList [{name: \"Konstruktion\", desc: \"\", sheet: @id}]\n\t\tdata = []\n\t\tfor r in [firstDataRow ... @dataTable.getNumberOfRows()]\n\t\t\td = {}\n\t\t\tfor k of @columns\n\t\t\t\timporter = (v) -> v\n\t\t\t\tif k is \"sheet\"\n\t\t\t\t\timporter = (v) => [@id, keyNormalizer(v, false, @id).join '/'].join '/'\n\t\t\t\t\n\t\t\t\tfor c in [0 ... @dataTable.getNumberOfColumns()]\n\t\t\t\t\tif (firstDataRow and @dataTable.getValue(0, c) is @columns[k]) or @dataTable.getColumnLabel(c) is @columns[k]\n\t\t\t\t\t\td[k] = importer @dataTable.getValue r, c\n\t\t\t\tif not d[k]\n\t\t\t\t\talert \"Übersichtstabelle: Spalte '#{@columns[k]}' wurde nicht in der Tabelle gefunden!\"\n\t\t\t\t\treturn\n\t\t\tdata.push d\n\t\t\n\t\tconsole.log \"DataSource: loaded construction list: \", data\n\t\tconstructions: new ConstructionList data, \n\t\t\tapp: @app\n\t\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/DataSource.coffee","Backbone = require \"backbone\"\nConstruction = require \"models/Construction\"\n\nmodule.exports = class ConstructionList extends Backbone.Collection\n\tapp: null\n\tmodel: Construction\n\tselected: null\n\tsetSelected: (ds) ->\n\t\tconsole.log \"CL select: \", ds, @selected\n\t\treturn if ds is @selected \n\t\t@trigger \"unselect\", @selected if @selected\n\t\t@selected = ds\n\t\tconsole.log \"CL triggered select\"\n\t\t@trigger \"select\", @selected\n\t\t@trigger \"sync\" if @selected.fetched\n\t\t\n\t\n\tinitialize: (models, options)->\n\t\t@app = options.app\n#\t\tconsole.log \"init ConstructionList\"\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/ConstructionList.coffee","Backbone = require \"backbone\"\nElementList = require \"collections/ElementList\"\n\nmodule.exports = class extends Backbone.Model\n\tdataTable: null\n\tfetched: false\n\t\n\tfields: \n\t\tshow: \n\t\t\tname: \"Anzeige\"\n\t\tcolor: \n\t\t\tname: \"Farbe\"\n\t\telement: \n\t\t\tname: \"Bauteil\"\n\t\tx: \n\t\t\tname: \"X\"\n\t\ty: \n\t\t\tname: \"Y\"\n\t\th: \n\t\t\tname: \"H\",\n\t\tdirection: \n\t\t\tname: \"Richtung\"\n\t\tspecial: \n\t\t\tname: \"Besonderheit\"\n\t\n\tdetermineColumn: (label) ->\n\t\treturn 'element' if /^\\s?(Element|Bauteil)\\s$/i.test label\n\t\treturn 'direction' if /^\\s?(Richtung)\\s?$/i.test label\n\t\treturn 'special' if /^\\s?(Besonderheit)\\s(.*)?$/i.test label\n\t\treturn 'show' if /^(Anzeige\\s)?(Anzeige)$/i.test label\n\t\treturn 'x' if /^(Position)?\\s?(X)$/i.test label\n\t\treturn 'y' if /^(Position)?\\s?(Y)$/i.test label\n\t\treturn 'h' if /^(Position)?\\s?(H)$/i.test label\n\t\treturn 'color' if /^(Anzeige)?\\s?(Farbe)$/i.test label\n\t\tnull\n\t\n\tidAttribute: \"sheet\"\n\tinitialize: (attributes, options) ->\n\t\t@app = options.collection.app\n#\t\tconsole.log \"init Construction\"\n\t\t@elements = new ElementList [], \n\t\t\tapp: @app\n\t\n\tsetSelected: (cb) ->\n\t\t@collection.setSelected this\n\t\tif not @fetched \n\t\t\t@fetch success: => \n\t\t\t\t@fetched = true\n\t\t\t\tcb this if cb\n\t\telse\n\t\t\tcb this if cb\n\t\n\tparse: (resp) ->\n\t\t@dataTable = do resp.getDataTable\n\t\t\n\t\tcols = {} \n\t\tcolTypes = {}\n\t\tfor c in [0 ... @dataTable.getNumberOfColumns()]\n\t\t\tcv = @determineColumn @dataTable.getColumnLabel c\n\t\t\tif cv\n\t\t\t\tcols[cv] = c \n\t\t\t\tcolTypes[cv] = true\n\t\t\n\t\tfor i,c of @fields\n\t\t\tif not colTypes[i]?\n\t\t\t\tconsole.log \"Spalte '#{c.name}' nicht gefunden!\"\n\t\t\t\treturn\n\t\t\n\t\tdata = []\n\t\tfor r in [0 ... @dataTable.getNumberOfRows()]\n\t\t\td = {}\n\t\t\tfor key,c of cols\n\t\t\t\td[key] = @dataTable.getValue r, c\n\t\t\tdata.push d\n\t\t\n\t\tconsole.log \"Construction: loaded element list: \", data\n\t\telements: new ElementList data, app: @app\n\n\t\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/Construction.coffee","Backbone = require \"backbone\"\nConstructionElement = require \"models/Element\"\n\nmodule.exports = class extends Backbone.Collection\n\tmodel: ConstructionElement\n\tinitialize: (models, options)->\n\t\t@app = options.app\n#\t\tconsole.log \"init ConstructionElements\"\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/ElementList.coffee","Backbone = require \"backbone\"\n\nmodule.exports = class extends Backbone.Model\n\tapp: null\n\tgeometry: null\n\tinitialize: (attributes, options) ->\n\t\tsuper attributes, options\n\t\t@app = options.collection.app\n\t\t@geometry = @app.egsElementProvider.getGeometry @ \n\n\n\n\n// WEBPACK FOOTER //\n// ./src/models/Element.coffee","module.exports = (someKey, silent=false, parent = null) ->\n\t# it is a google table link\n\treg = new RegExp 'spreadsheets\\/d\\/([^\\/]+)[^#]*(?:#.*gid=([0-9]+).*)?'\n\tmatch = reg.exec someKey\n\tif match\n\t\tgid = match[2] if match[2]\n\t\treturn [match[1], gid]\n\t\n\t# it is just the gid\n\treg = new RegExp '([0-9]+)'\n\tmatch = reg.exec someKey\n\tif match and parent\n\t\tparent = parent.split '/'\n\t\tgid = match[1] if match[1]\n\t\treturn [parent[0], gid]\n\t\n\t# it is a short specification\n\treg = new RegExp '([^\\/]+)(?:\\/([0-9]+))?'\n\tmatch = reg.exec someKey\n\tif match\n\t\tgid = match[2] if match[2]\n\t\treturn [match[1], gid]\n\t\n\tif silent\n\t\treturn false\n\t\n\talert \"Ungültige Datenquelle: In '#{someKey}' konnte nicht der Tabellen-Key gefunden werden!\"\n\treturn [\"\", 0]\n\n\n\n// WEBPACK FOOTER //\n// ./src/_helpers/keyNormalizer.coffee","Backbone = require \"backbone\"\nDataSource = require \"models/DataSource\"\n\nmodule.exports = class DataSourceList extends Backbone.Collection\n\tapp: null\n\tmodel: DataSource\n\tselected: null\n\tsetSelected: (ds) ->\n\t\treturn if ds is @selected \n\t\t@trigger \"unselect\", @selected if @selected\n\t\t@selected = ds\n\t\t@trigger \"select\", @selected\n\t\t@trigger \"sync\" if @selected.fetched\n\t\n\tinitialize: (models, options)->\n\t\t@app = options.app\n\t\tconsole.log \"init DataSourceList\", @app\n\n\n\n// WEBPACK FOOTER //\n// ./src/collections/DataSourceList.coffee","THREE = require \"THREE\"\nrequire \"ConvexGeometry\"\n\nclass THREE.ThreadCurve extends THREE.Curve\n\tconstructor: (@height, @pitch, @radius)->\n\t\tsuper()\n\t\n\tgetPoint: (t) ->\n\t\tt = t * @height / @pitch\n\t\tnew THREE.Vector3(\n\t\t\t@radius * Math.cos(2 * Math.PI * (t - Math.floor(t))),\n\t\t\t@radius * Math.sin(2 * Math.PI * (t - Math.floor(t))),\n\t\t\tt * @pitch\n\t\t)\n\nclass THREE.CustomGeometry extends THREE.Geometry\n\tcalcUVs: ->\n\t\tdo @computeBoundingBox\n\t\t\n\t\tmax = @boundingBox.max\n\t\tmin = @boundingBox.min\n\t\t\n\t\toffset = new THREE.Vector2 0 - min.x, 0 - min.y\n\t\trange = new THREE.Vector2 max.x - min.x, max.y - min.y\n\t\t\n\t\t@faceVertexUvs[0] = [];\n\t\tfaces = @faces;\n\t\t\n\t\tfor i in [0...@faces.length]\n\t\t\t\n\t\t\tv1 = @vertices[@faces[i].a]\n\t\t\tv2 = @vertices[@faces[i].b]\n\t\t\tv3 = @vertices[@faces[i].c]\n\t\t\t\n\t\t\t@faceVertexUvs[0].push([\n\t\t\t\tnew THREE.Vector2( ( v1.x + offset.x ) / range.x , ( v1.y + offset.y ) / range.y ),\n\t\t\t\tnew THREE.Vector2( ( v2.x + offset.x ) / range.x , ( v2.y + offset.y ) / range.y ),\n\t\t\t\tnew THREE.Vector2( ( v3.x + offset.x ) / range.x , ( v3.y + offset.y ) / range.y )\n\t\t\t]);\n\t\t\n\t\t@uvsNeedUpdate = true;\n\t\n\tconstructor: (vertices, faces) ->\n\t\tsuper()\n\t\tfor v in vertices\n\t\t\t@vertices.push new THREE.Vector3 v[0], v[1], v[2]\n\t\tfor f in faces\n\t\t\t@faces.push new THREE.Face3 f[0], f[1], f[2]\n\t\tdo @computeBoundingSphere\n\t\tdo @computeFaceNormals\n\t\tdo @computeVertexNormals\n\t\tdo @calcUVs\n\nclass EGS_Elements\n\tDETAIL = 8\n\tD90 = .5 * Math.PI\n\tD180 = Math.PI\n\tD360 = 2 * Math.PI\n\tX = new THREE.Vector3 1, 0, 0\n\tY = new THREE.Vector3 0, 1, 0\n\tZ = new THREE.Vector3 0, 0, 1\n\t\n\tTellerDurchmesser = 123.6\n\tRohrDurchmesserAussen = 48.3\n\tRohrDurchmesserInnen = 45.1\n\tTellerHoehe = 9\n\t\t\n\t_m = (x,y,z,A,n) ->\n\t\tm = (new THREE.Matrix4()).makeTranslation(x,y,z)\n\t\tm.multiply (new THREE.Matrix4()).makeRotationX(n * D90) if A == 'X'\n\t\tm.multiply (new THREE.Matrix4()).makeRotationY(n * D90) if A == 'Y'\n\t\tm.multiply (new THREE.Matrix4()).makeRotationZ(n * D90) if A == 'Z'\n\t\tm\n\t\n\t_barToCircle = (x,y,l,r) ->\n\t\tcircle = new THREE.CircleGeometry r, DETAIL\n\t\tvert = circle.vertices\n\t\tvert.push new THREE.Vector3( x / 2, y / 2, l)\n\t\tvert.push new THREE.Vector3(-x / 2, y / 2, l)\n\t\tvert.push new THREE.Vector3(-x / 2,-y / 2, l)\n\t\tvert.push new THREE.Vector3( x / 2,-y / 2, l)\n\t\tnew THREE.ConvexGeometry vert\n\t\n\t_cylinder = (o,i,h) ->\n\t\tshape = new THREE.Shape()\n\t\tshape.absarc 0, 0, o / 2, 0, D360, true\n\t\tif i\n\t\t\thole = new THREE.Path()\n\t\t\thole.absarc 0, 0, i / 2, 0, D360, true\n\t\t\tshape.holes.push hole\n\t\tshape.extrude\n\t\t\tamount: h\n\t\t\tsteps: 1\n\t\t\tbevelEnabled: false\n\t\t\tcurveSegments: DETAIL\n\t_cylinderPath = (o,i,p) ->\n\t\tshape = new THREE.Shape()\n\t\tshape.absarc 0, 0, o / 2, 0, D360, true\n\t\tif i\n\t\t\thole = new THREE.Path()\n\t\t\thole.absarc 0, 0, i / 2, 0, D360, true\n\t\t\tshape.holes.push hole\n\t\tshape.extrude\n\t\t\tsteps: 10\n\t\t\textrudePath: p\n\t\n\t_threadCyl = (h) ->\n\t\tif DETAIL >= 16\n\t\t\to = 13\n\t\t\ti = 8\n\t\telse\n\t\t\to = 18\n\t\t\ti = 15\n\t\t\n\t\tshape = new THREE.Shape()\n\t\tshape.absarc 0, 0, o, 0, D360, true\n\t\tif i\n\t\t\thole = new THREE.Path()\n\t\t\thole.absarc 0, 0, i, 0, D360, true\n\t\t\tshape.holes.push hole\n\t\tcyl = shape.extrude\n\t\t\tamount: h\n\t\t\tsteps: 1\n\t\t\tbevelEnabled: false\n\t\t\tcurveSegments: DETAIL\n\t\t\n\t\tif DETAIL >= 16\n\t\t\th -= 10\n\t\t\tthread = new THREE.TubeGeometry(\n\t\t\t\tnew THREE.ThreadCurve(h, 10, 13),\n\t\t\t\tDETAIL * h / 10,\n\t\t\t\t4\n\t\t\t\t)\n\t\t\tcyl.merge thread, _m(0,0,5)\n\t\tcyl\n\t\n\t_rohr = (length) ->\n\t\t_cylinder RohrDurchmesserAussen, RohrDurchmesserInnen, length\n\t\t\n\t_AnfStk = ->\n\t\ta = new THREE.Geometry()\n\t\ta.merge _rohr(165), _m(0,0,-65)\n\t\ta.merge _teller()\n\t\ta.merge _cylinder(55,49,170), _m(0,0,95)\n\t\ta.applyMatrix _m(0,0,0, 'X', -1)\n\t\ta\n\t\n\t_belagKlammer = (x) ->\n\t\tshape = new THREE.Shape()\n\t\tz = 30\n\t\td1 = 25\n\t\td2 = 33\n\t\tshape.moveTo( 0, 0)\n\t\tshape.lineTo( 30, 0)\n\t\tshape.arc(25, 0, d1, 0, Math.PI)\n\t\tshape.lineTo(17+d2+d2,0)\n\t\tshape.arc(-33, 0, d2, Math.PI*.7, 0)\n\t\tshape.lineTo( 30, 35)\n\t\tshape.lineTo( 0, 35)\n\t\tshape.lineTo( 0, 0)\n\t\tbk = shape.extrude\n\t\t\tamount: 40\n\t\t\tsteps: 1\n\t\t\tbevelEnabled: false\n\t\t\tcurveSegments: DETAIL\n\t\tbk.applyMatrix _m(x, 0, 55, 'Y', 1)\n\t\tbk\n\t\n\t_belagRahmen = (l, b) ->\n\t\to = 50\n\t\tvertices = [\n\t\t\t# oberkante\n\t\t\t[ 0, 45, o],[ b, 45, o],[ b, 45, l-o],[ 0, 45, l-o], \n\t\t\t# unterkante\n\t\t\t[ 0,-30, o],[ b,-30, o],[ b,-30, l-o],[ 0,-30, l-o], \n\t\t\t# unterkante innen\n\t\t\t[ 5,-30,o+5],[b-5,-30,o+5],[b-5,-30,l-o-5],[ 5,-30,l-o-5], \n\t\t\t# oberkante innen\n\t\t\t[ 5, 40,o+5],[b-5, 40,o+5],[b-5, 40,l-o-5],[ 5, 40,l-o-5], \n\t\t]\n\t\tfaces = [\n\t\t\t[ 0, 2, 1], [ 0, 3, 2], [12,13,14], [12,14,15],\n\t\t\t[ 0, 1, 5], [ 0, 5, 4], [ 1, 2, 6], [ 1, 6, 5],\n\t\t\t[ 2, 3, 7], [ 2, 7, 6], [ 3, 0, 4], [ 3, 4, 7],\n\t\t\t[ 4, 5, 9], [ 4, 9, 8], [ 5, 6,10], [ 5,10, 9],\n\t\t\t[ 6, 7,11], [ 6,11,10], [ 7, 4, 8], [ 7, 8,11],\n\t\t\t[ 8, 9,13], [ 8,13,12], [ 9,10,14], [ 9,14,13],\n\t\t\t[10,11,15], [10,15,14], [11, 8,12], [11,12,15],\n\t\t]\n\t\tnew THREE.CustomGeometry vertices, faces\n\t\n\t_Belag = (l, w, x = 0) ->\n\t\tb = new THREE.Geometry()\n\t\tb.merge _belagKlammer(1), _m( 60,0,0)\n\t\tb.merge _belagKlammer(1), _m(w-60,0,0)\n\t\tb.merge _belagRahmen(l, w), _m(0,0,0)\n\t\tb.merge _belagKlammer(1), _m( 60,0,l, 'Y', 2)\n\t\tb.merge _belagKlammer(1), _m(w-60,0,l, 'Y', 2)\n\t\tb.applyMatrix _m(55+x, 0, 0)\n\t\tb\n\t\n\t_keilKupplungDiagonale = (d, r = 1)->\n\t\tz = 35\n\t\tvertices = [\n\t\t\t[25, 7, 38], [26,0, 38], [25,-7, 38], \n\t\t\t[25, 7, 11], [26,0, 11], [25,-7, 11], # 6\n\t\t\t[25, 7, -1], [26,0, -1], [25,-7, -1],\n\t\t\t[25, 7,-35], [26,0,-35], [25,-7,-35], # 12\n\t\t\t[65, 12, 24], [65,-12, 24],\n\t\t\t[65, 22, 11], [65,-22, 11], # 16\n\t\t\t[65, 22, -1], [65,-22, -1],\n\t\t\t[65, 12,-24], [65,-12,-24], # 20\n\t\t\t[65, 1*r, 20], [65, 1*r,-20], \n\t\t\t[65, 11*r,-20], [65, 11*r, 20], # 24\n\t\t\t[65+z, 1*r+z*r, 20], [65+z, 1*r+z*r,-20], \n\t\t\t[65+z-5, 6*r+z*r,-20], [65+z-5, 6*r+z*r, 20]\n\t\t]\n\t\tfaces = [\n\t\t\t[ 0, 1,12], [ 1,13,12], [ 1, 2,13], # top\n\t\t\t[ 9,18,10], [10,18,19], [10,19,11], # bottom\n\t\t\t[ 1, 0, 4], [ 4, 0, 3], [ 2, 1, 5], [ 5, 1, 4], # innen\n\t\t\t[ 7, 6,10], [10, 6, 9], [ 8, 7,11], [11, 7,10], # innen\n\t\t\t[ 4, 3,14], [ 4,14,15], [ 5, 4,15], # zwischen\n\t\t\t[ 6, 7,16], [ 7,17,16], [ 7, 8,17], # zwischen\n\t\t\t[14,17,15], [14,16,17], [14,15,17], [14,17,16], \n\t\t\t[ 3, 0,14], [ 0,12,14], [16, 9, 6], [18, 9,16], #links\n\t\t\t[ 2, 5,15], [ 2,15,13], [17, 8,11], [17,11,19],\n\t\t\t[12,13,14], [13,15,14], [16,17,18], [17,19,18], # HINTEN\n\t\t]\n\t\tfacesD = [\n\t\t\t[20,21,25], [20,25,24], [22,23,27], [22,27,26],\n\t\t\t[20,27,23], [20,24,27], [21,22,26], [21,26,25],\n\t\t\t[24,25,26], [24,26,27]\n\t\t]\n\t\tfor fd in facesD\n\t\t\tif r > 0\n\t\t\t\tfaces.push fd\n\t\t\telse\n\t\t\t\tfaces.push [fd[1], fd[0], fd[2]]\n\t\t\n\t\tkkd = new THREE.CustomGeometry vertices, faces\n\t\tkkd.applyMatrix _m(0,0,0, 'Z', .5*r*d)\n\t\tkkd\n\t\n\t_VertikalDiagonale = (w, s = 1, h = 2000) ->\n\t\tvd = new THREE.Geometry()\n\t\tr = new THREE.Geometry()\n\t\ts *= -1\n\t\t\n\t\tbohrAbstand = Math.sqrt(Math.pow(w - 155, 2) + Math.pow(h, 2))\n\t\tdegree = Math.atan2 w-155, h\n\t\t\n\t\tvd.merge _keilKupplungDiagonale(-1, 1*s)\n\t\tvd.merge _keilKupplungDiagonale(-1,-1*s), _m(w, 0, h, 'Z', 2)\n\t\t\n\t\toffset = if s > 0 then 14 else 7\n\t\t\n\t\tr.merge new THREE.BoxGeometry(35,10,60), _m( 0, 0, 10)\n\t\tr.merge _cylinder(16,0,21), _m( 0, offset, 0, 'X', 1)\n\t\tr.merge _barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m( 0, 0, 110, 'X', 2)\n\t\tr.merge _cylinder(\n\t\t\tRohrDurchmesserAussen, RohrDurchmesserInnen, \n\t\t\tbohrAbstand-220\n\t\t), _m( 0, 0, 110)\n\t\tr.merge _barToCircle(35, 10, 70, RohrDurchmesserAussen / 2), _m( 0, 0, bohrAbstand-110)\n\t\tr.merge new THREE.BoxGeometry(35,10,60), _m( 0, 0, bohrAbstand-10)\n\t\tr.merge _cylinder(16,0,21), _m( 0, offset, bohrAbstand, 'X', 1)\n\t\t\n\t\tvd.merge r, _m(77.5, -50 * s, 0, 'Y', degree / D90)\n\t\tvd\n\t\n\t_keilKupplungRiegel = ->\n\t\tvertices = [\n\t\t\t[25, 7, 38], [26,0, 38], [25,-7, 38], \n\t\t\t[25, 7, 11], [26,0, 11], [25,-7, 11],\n\t\t\t[25, 7, -1], [26,0, -1], [25,-7, -1],\n\t\t\t[25, 7,-35], [26,0,-35], [25,-7,-35], # 12\n\t\t\t[65, 12, 24], [65,-12, 24],\n\t\t\t[65, 22, 11], [65,-22, 11],\n\t\t\t[65, 22, -1], [65,-22, -1],\n\t\t\t[65, 12,-24], [65,-12,-24], # 20\n\t\t\t[77, 0, 24], [77,-17, 17], \n\t\t\t[77,-24, 0], [77,-17,-17], \n\t\t\t[77, 0,-24], [77, 17,-17], \n\t\t\t[77, 24, 0], [77, 17, 17]\n\t\t]\n\t\tfaces = [\n\t\t\t[ 0, 1,12], [ 1,13,12], [ 1, 2,13], # top\n\t\t\t[ 9,18,10], [10,18,19], [10,19,11], # bottom\n\t\t\t[ 1, 0, 4], [ 4, 0, 3], [ 2, 1, 5], [ 5, 1, 4], # innen\n\t\t\t[ 7, 6,10], [10, 6, 9], [ 8, 7,11], [11, 7,10], # innen\n\t\t\t[ 4, 3,14], [ 4,14,15], [ 5, 4,15], # zwischen\n\t\t\t[ 6, 7,16], [ 7,17,16], [ 7, 8,17], # zwischen\n\t\t\t[14,17,15], [14,16,17],\n\t\t\t[ 3, 0,14], [ 0,12,14], [16, 9, 6], [18, 9,16], #links\n\t\t\t[ 2, 5,15], [ 2,15,13], [17, 8,11], [17,11,19],\n\t\t\t[20,12,13], [20,13,21], [21,13,15], [21,15,22],\n\t\t\t[22,15,17], [22,17,23], [23,17,19], [23,19,24],\n\t\t\t[24,19,18], [24,18,25], [25,18,16], [25,16,26],\n\t\t\t[26,16,14], [26,14,27], [27,14,12], [27,12,20]\n\t\t]\n\t\tnew THREE.CustomGeometry vertices, faces\n\t\n\t_haengegeruestVerbinder = ->\n\t\trv = new THREE.BoxGeometry(10,50,550)\n\t\trv.applyMatrix _m(82, 0, 250)\n\t\trv.merge _keilKupplungRiegel(), _m(0, 0, 0)\n\t\trv.merge _keilKupplungRiegel(), _m(0, 0, 500)\n\t\trv.applyMatrix _m(0,0,0, 'X', -1)\n\t\trv\n\t\n\t_Riegel = (l) ->\n\t\tr = _cylinder RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150\n\t\tr.applyMatrix _m(75, 0, 0, 'Y', 1)\n\t\tr.merge _keilKupplungRiegel()\n\t\tr.merge _keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2)\n\t\tr.applyMatrix _m(0,0,0, 'X', -1)\n\t\tr\n\t\n\t_DoppelRiegel = (l) ->\n\t\tr = _cylinder RohrDurchmesserAussen, RohrDurchmesserInnen, l - 150\n\t\tr.applyMatrix _m(75, 0, 0, 'Y', 1)\n\t\tr.merge _keilKupplungRiegel()\n\t\tr.merge _keilKupplungRiegel(), _m(l, 0, 0, 'Z', 2)\n\t\t\n\t\tp = new THREE.CurvePath();\n\t\tp.add(new THREE.LineCurve3((new THREE.Vector3( 0, 0, 0)),(new THREE.Vector3( 200, 100, 0))));\n\t\tp.add(new THREE.LineCurve3((new THREE.Vector3( 200, 100, 0)),(new THREE.Vector3(l-350, 100, 0))));\n\t\tp.add(new THREE.LineCurve3((new THREE.Vector3(l-350, 100, 0)),(new THREE.Vector3(l-150, 0, 0))));\n\t\tr2 = _cylinderPath RohrDurchmesserAussen*.6, RohrDurchmesserInnen*.6, p\n\t\tr2.applyMatrix _m(75, 0, 0, 'X',-1)\n\t\tr.merge r2\n\t\t\n\t\tfor i in [500..l-1] by 500\n\t\t\tf = new THREE.BoxGeometry(100,100,5)\n\t\t\tf.applyMatrix _m(i, 0,-50, 'X', 1)\n\t\t\tr.merge f\n\t\t\n\t\tr.applyMatrix _m(0,0,0, 'X', -1)\n\t\tr\n\t\n\t_teller = ->\n\t\t_cylinder TellerDurchmesser, RohrDurchmesserAussen, TellerHoehe\n\t\n\t_rohrverbinder = ->\n\t\trv = _cylinder 45, 30, 400\n\t\trv.applyMatrix _m(0,0,-200)\n\t\trv\n\t\n\t_VertikalStiel = (l, rv = 1) ->\n\t\tv = new THREE.Geometry()\n\t\tv.merge _rohr(l), _m(0,0,100)\n\t\tfor i in [500..l] by 500\n\t\t\tv.merge _teller(), _m(0,0,i)\n\t\tv.merge _rohrverbinder(), _m(0,0,l) if rv is 1\n\t\tv.applyMatrix _m(0,0,0, 'X', -1)\n\t\tv\n\t\n\tFX = (l,x,y,z,o) ->\n\t\tf = _threadCyl 10*l\n\t\tf.merge new THREE.BoxGeometry(100,100,5)\n\t\tf.merge new THREE.BoxGeometry(120,40,10), _m(0,0,70, 'Z', .5)\n\t\tif parseInt(o) < 0 or (o and o[0] is 'n') or o is '-'\n\t\t\tf.applyMatrix _m(10*x,10*y+175,10*z,'X', 1)\n\t\telse\n\t\t\tf.applyMatrix _m(10*x,10*y-144,10*z,'X', -1)\n\t\tf\n\t\n\tVX = (l,x,y,z,o) ->\n\t\td = 0\n\t\trv = 1\n\t\tif o\n\t\t\tfor s in o.split ','\n\t\t\t\td = 2 if parseInt(s) < 0 or (s and s[0] is 'n') or s is '-' \n\t\t\t\trv = 0 if s[0] is 'o'\n\t\tv = _VertikalStiel 10*l, rv\n\t\tv.applyMatrix _m(10*x, 10*y, 10*z, 'X', d)\n\t\tv\n\t\n\tRX = (l,x,y,z,d) ->\n\t\tr = _Riegel 10*l\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\t\t\t\n\t\tr.applyMatrix _m(10*x, 10*y, 10*z, 'Y', -d)\n\t\tr\n\t\n\tDRX = (l,x,y,z,d) ->\n\t\tr = _DoppelRiegel 10*l\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\t\t\t\n\t\tr.applyMatrix _m(10*x, 10*y, 10*z, 'Y', -d)\n\t\tr\n\t\n\tVDX = (w,h,x,y,z,d,o) ->\n\t\ts = -1\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\ts = if d == 1 or d == 2 then 1 else -1\n\t\ts *= -1 if parseInt(o) < 0 or (o and o[0] is 'n') or o is '-'\n\t\tvd = _VertikalDiagonale 10*w, s, 10*h\n\t\tvd.applyMatrix _m(0,0,0,'X', -1)\n\t\tvd.applyMatrix _m(0,0,0,'Y', -d)\n\t\tvd.applyMatrix _m(10*x, 10*y, 10*z)\n\t\tvd\n\t\n\tBX = (l,x,y,z,d,s) ->\n\t\tbl = new THREE.Geometry()\n\t\ts = s.split '/'\n\t\to = 0\n\t\tw = s[0]\n\t\tif s.length >= 2 and parseInt s[1]\n\t\t\to = parseInt s[1]\n\t\t\n\t\tfor b in w.split(',')\n\t\t\tbl.merge _Belag(10*l, 10*b, o)\n\t\t\to += 10*b + 5\n\t\t\n\t\tswitch d\n\t\t\twhen \"X\" then bl.applyMatrix _m(10*x + 10*l, 10*y, 10*z, 'Y', -1)\n\t\t\twhen \"Y\" then bl.applyMatrix _m(10*x, 10*y, 10*z)\n\t\t\twhen \"-X\" then bl.applyMatrix _m(10*x, 10*y, 10*z, 'Y', 1)\n\t\t\twhen \"-Y\" then bl.applyMatrix _m(10*x, 10*y, 10*z+10*l, 'Y', 2)\n\t\tbl\n\t\n\tHV = (x, h, z, d) ->\n\t\thv = do _haengegeruestVerbinder\n\t\tswitch d\n\t\t\twhen \"X\" then d = 0\n\t\t\twhen \"Y\" then d = 1\n\t\t\twhen \"-X\" then d = 2\n\t\t\twhen \"-Y\" then d = 3\n\t\t\telse return\n\t\thv.applyMatrix _m(10*x, 10*h, 10*z, 'Y', -d)\n\t\thv\n\t\n\tAnfSt = (x,h,z) ->\n\t\ta = do _AnfStk\n\t\ta.applyMatrix _m(10*x, 10*h, 10*z)\n\t\ta\n\t\n\tconstructor: ->\n\t\tconsole.log \"EGS_Elements constructed\"\n\t\n\tgetGeometry: (element) ->\n\t\tn = element.get 'element'\n\t\tx = element.get 'x'\n\t\tz = element.get 'y'\n\t\th = element.get 'h'\n\t\td = element.get 'direction'\n\t\ts = element.get 'special'\n#\t\tconsole.log n,x,z,h,d,s\n\t\t\n\t\tswitch n\n\t\t\twhen \"AnfSt\" then AnfSt x, h, z\n\t\t\twhen \"V50\" then VX 50, x, h, z, s\n\t\t\twhen \"V100\" then VX 100, x, h, z, s\n\t\t\twhen \"V150\" then VX 150, x, h, z, s\n\t\t\twhen \"V200\" then VX 200, x, h, z, s\n\t\t\twhen \"V300\" then VX 300, x, h, z, s\n\t\t\twhen \"V400\" then VX 400, x, h, z, s\n\t\t\twhen \"R25\" then RX 25, x, h, z, d\n\t\t\twhen \"R50\" then RX 50, x, h, z, d\n\t\t\twhen \"R100\" then RX 100, x, h, z, d\n\t\t\twhen \"R200\" then RX 200, x, h, z, d\n\t\t\twhen \"R300\" then RX 300, x, h, z, d\n\t\t\twhen \"DR100\" then DRX 100, x, h, z, d\n\t\t\twhen \"DR200\" then DRX 200, x, h, z, d\n\t\t\twhen \"DR300\" then DRX 300, x, h, z, d\n\t\t\twhen \"D100\" then VDX 100, 200, x, h, z, d, s\n\t\t\twhen \"D150\" then VDX 150, 200, x, h, z, d, s\n\t\t\twhen \"D200\" then VDX 200, 200, x, h, z, d, s\n\t\t\twhen \"D300\" then VDX 300, 200, x, h, z, d, s\n\t\t\twhen \"DS200\" then VDX 200, 100, x, h, z, d, s\n\t\t\twhen \"F40\" then FX 40, x, h, z, s\n\t\t\twhen \"F60\" then FX 40, x, h, z, s\n\t\t\twhen \"B100\" then BX 100, x, h, z, d, s\n\t\t\twhen \"B200\" then BX 200, x, h, z, d, s\n\t\t\twhen \"B300\" then BX 300, x, h, z, d, s\n\t\t\twhen \"HV\" then HV x, h, z, d\n\t\t\telse new THREE.Geometry()\n\t\nmodule.exports = EGS_Elements\n\n\n\n// WEBPACK FOOTER //\n// ./src/egs/EGS_Elements.coffee","/**\n * @author qiao / https://github.com/qiao\n * @fileoverview This is a convex hull generator using the incremental method. \n * The complexity is O(n^2) where n is the number of vertices.\n * O(nlogn) algorithms do exist, but they are much more complicated.\n *\n * Benchmark: \n *\n * Platform: CPU: P7350 @2.00GHz Engine: V8\n *\n * Num Vertices\tTime(ms)\n *\n * 10 1\n * 20 3\n * 30 19\n * 40 48\n * 50 107\n */\n\nTHREE.ConvexGeometry = function( vertices ) {\n\n\tTHREE.Geometry.call( this );\n\n\tvar faces = [ [ 0, 1, 2 ], [ 0, 2, 1 ] ]; \n\n\tfor ( var i = 3; i < vertices.length; i++ ) {\n\n\t\taddPoint( i );\n\n\t}\n\n\n\tfunction addPoint( vertexId ) {\n\n\t\tvar vertex = vertices[ vertexId ].clone();\n\n\t\tvar mag = vertex.length();\n\t\tvertex.x += mag * randomOffset();\n\t\tvertex.y += mag * randomOffset();\n\t\tvertex.z += mag * randomOffset();\n\n\t\tvar hole = [];\n\n\t\tfor ( var f = 0; f < faces.length; ) {\n\n\t\t\tvar face = faces[ f ];\n\n\t\t\t// for each face, if the vertex can see it,\n\t\t\t// then we try to add the face's edges into the hole.\n\t\t\tif ( visible( face, vertex ) ) {\n\n\t\t\t\tfor ( var e = 0; e < 3; e++ ) {\n\n\t\t\t\t\tvar edge = [ face[ e ], face[ ( e + 1 ) % 3 ] ];\n\t\t\t\t\tvar boundary = true;\n\n\t\t\t\t\t// remove duplicated edges.\n\t\t\t\t\tfor ( var h = 0; h < hole.length; h++ ) {\n\n\t\t\t\t\t\tif ( equalEdge( hole[ h ], edge ) ) {\n\n\t\t\t\t\t\t\thole[ h ] = hole[ hole.length - 1 ];\n\t\t\t\t\t\t\thole.pop();\n\t\t\t\t\t\t\tboundary = false;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( boundary ) {\n\n\t\t\t\t\t\thole.push( edge );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// remove faces[ f ]\n\t\t\t\tfaces[ f ] = faces[ faces.length - 1 ];\n\t\t\t\tfaces.pop();\n\n\t\t\t} else { // not visible\n\n\t\t\t\tf++;\n\n\t\t\t}\n\t\t}\n\n\t\t// construct the new faces formed by the edges of the hole and the vertex\n\t\tfor ( var h = 0; h < hole.length; h++ ) {\n\n\t\t\tfaces.push( [ \n\t\t\t\thole[ h ][ 0 ],\n\t\t\t\thole[ h ][ 1 ],\n\t\t\t\tvertexId\n\t\t\t] );\n\n\t\t}\n\t}\n\n\t/**\n\t * Whether the face is visible from the vertex\n\t */\n\tfunction visible( face, vertex ) {\n\n\t\tvar va = vertices[ face[ 0 ] ];\n\t\tvar vb = vertices[ face[ 1 ] ];\n\t\tvar vc = vertices[ face[ 2 ] ];\n\n\t\tvar n = normal( va, vb, vc );\n\n\t\t// distance from face to origin\n\t\tvar dist = n.dot( va );\n\n\t\treturn n.dot( vertex ) >= dist; \n\n\t}\n\n\t/**\n\t * Face normal\n\t */\n\tfunction normal( va, vb, vc ) {\n\n\t\tvar cb = new THREE.Vector3();\n\t\tvar ab = new THREE.Vector3();\n\n\t\tcb.subVectors( vc, vb );\n\t\tab.subVectors( va, vb );\n\t\tcb.cross( ab );\n\n\t\tcb.normalize();\n\n\t\treturn cb;\n\n\t}\n\n\t/**\n\t * Detect whether two edges are equal.\n\t * Note that when constructing the convex hull, two same edges can only\n\t * be of the negative direction.\n\t */\n\tfunction equalEdge( ea, eb ) {\n\n\t\treturn ea[ 0 ] === eb[ 1 ] && ea[ 1 ] === eb[ 0 ]; \n\n\t}\n\n\t/**\n\t * Create a random offset between -1e-6 and 1e-6.\n\t */\n\tfunction randomOffset() {\n\n\t\treturn ( Math.random() - 0.5 ) * 2 * 1e-6;\n\n\t}\n\n\n\t/**\n\t * XXX: Not sure if this is the correct approach. Need someone to review.\n\t */\n\tfunction vertexUv( vertex ) {\n\n\t\tvar mag = vertex.length();\n\t\treturn new THREE.Vector2( vertex.x / mag, vertex.y / mag );\n\n\t}\n\n\t// Push vertices into `this.vertices`, skipping those inside the hull\n\tvar id = 0;\n\tvar newId = new Array( vertices.length ); // map from old vertex id to new id\n\n\tfor ( var i = 0; i < faces.length; i++ ) {\n\n\t\t var face = faces[ i ];\n\n\t\t for ( var j = 0; j < 3; j++ ) {\n\n\t\t\t\tif ( newId[ face[ j ] ] === undefined ) {\n\n\t\t\t\t\t\tnewId[ face[ j ] ] = id++;\n\t\t\t\t\t\tthis.vertices.push( vertices[ face[ j ] ] );\n\n\t\t\t\t}\n\n\t\t\t\tface[ j ] = newId[ face[ j ] ];\n\n\t\t }\n\n\t}\n\n\t// Convert faces into instances of THREE.Face3\n\tfor ( var i = 0; i < faces.length; i++ ) {\n\n\t\tthis.faces.push( new THREE.Face3( \n\t\t\t\tfaces[ i ][ 0 ],\n\t\t\t\tfaces[ i ][ 1 ],\n\t\t\t\tfaces[ i ][ 2 ]\n\t\t) );\n\n\t}\n\n\t// Compute UVs\n\tfor ( var i = 0; i < this.faces.length; i++ ) {\n\n\t\tvar face = this.faces[ i ];\n\n\t\tthis.faceVertexUvs[ 0 ].push( [\n\t\t\tvertexUv( this.vertices[ face.a ] ),\n\t\t\tvertexUv( this.vertices[ face.b ] ),\n\t\t\tvertexUv( this.vertices[ face.c ])\n\t\t] );\n\n\t}\n\n\n//\tthis.computeCentroids();\n\tthis.computeFaceNormals();\n\tthis.computeVertexNormals();\n\n};\n\nTHREE.ConvexGeometry.prototype = Object.create( THREE.Geometry.prototype );\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/_helpers/ConvexGeometry.js\n// module id = 69\n// module chunks = 0","Backbone = require \"backbone\"\n\nmodule.exports = Backbone.View.extend\n\tel: document.getElementById 'primaryNav'\n\ttemplate: require 'templates/PrimaryNav'\n\tactiveConstructionList: null\n\t\n\tinitialize: (@dataSourceList) -> \n\t\t@listenTo @dataSourceList, 'select', ->\n\t\t\t@stopListening @activeConstructionList if @activeConstructionList\n\t\t\t@activeConstructionList = null\n\t\t\t@render 'loading', 'unset'\n\t\t\n\t\t@listenTo @dataSourceList, \"sync\", ->\n\t\t\t@activeConstructionList = @dataSourceList.selected.get 'constructions'\n\t\t\t@listenTo @activeConstructionList, 'select', -> @render 'loaded', 'loading'\n\t\t\t@listenTo @activeConstructionList, 'sync', -> @render 'loaded', 'loaded'\n\t\t\t@render 'loaded', 'unset'\n\t\t\n\t\t@render 'unset', 'unset'\n\t\t\n\t\n\trender: (dataSourceState = 0, constructionState = 0) ->\n#\t\tconsole.log \"PrimNavRender: #{dataSourceState} #{constructionState}\"\n\t\ttpl = {}\n\t\tif dataSourceState is 'loaded'\n\t\t\ttpl.item = []\n\t\t\tconstructionList = @dataSourceList.selected.get 'constructions' \n\t\t\tselected = null\n\t\t\tconstructionList.each (e) ->\n\t\t\t\tselected = e.get('name') if e == constructionList.selected\n\t\t\t\ttpl.item.push\n\t\t\t\t\tsheet: e.get('sheet')\n\t\t\t\t\tname: e.get('name')\n\t\t\t\n\t\t\tif constructionState isnt \"unset\"\n\t\t\t\ttpl.auswahl = \"#{selected}\"\n\t\t\telse\n\t\t\t\ttpl.auswahl = \"#{tpl.item.length} Konstruktionen zur Auswahl\"\n\t\t\n\t\tif dataSourceState is 'loading' or constructionState is 'loading'\n\t\t\ttpl.loading = true\n\t\t\n\t\t@el.innerHTML = @template tpl\n\t\t\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/PrimaryNav.coffee","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t
  • \\n\t\tKonstruktion: \\n\t
  • \\n\t
  • \\n\t\t \"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"auswahl\") || (depth0 != null ? lookupProperty(depth0,\"auswahl\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"auswahl\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":119},\"end\":{\"line\":7,\"column\":132}}}) : helper)))\n + \" \\n\t\t
      \\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"item\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":3},\"end\":{\"line\":11,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t
    \\n\t
  • \\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"loading\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":1},\"end\":{\"line\":23,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t
  • \"\n + alias4(((helper = (helper = lookupProperty(helpers,\"name\") || (depth0 != null ? lookupProperty(depth0,\"name\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"name\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":30},\"end\":{\"line\":10,\"column\":40}}}) : helper)))\n + \"
  • \\n\";\n},\"4\":function(container,depth0,helpers,partials,data) {\n return \"\t
  • \\n\t\t
    \\n\t\t
    \\n\t\t
    \\n\t
  • \\n\t
  • \\n\t\twird geladen...\\n\t
  • \\n\";\n},\"6\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"loading\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":25,\"column\":1},\"end\":{\"line\":38,\"column\":8}}})) != null ? stack1 : \"\");\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"\t
  • \\n\t\t
    \\n\t\t
    \\n\t\t
    \\n\t
  • \\n\t
  • \\n\t\tKonstuktionen werden geladen...\\n\t
  • \\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"\t
  • \\n\t\tKeine Datenquelle ausgewählt!\\n\t
  • \\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
      \\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"item\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":39,\"column\":8}}})) != null ? stack1 : \"\")\n + \"
    \\n
    \\n\t\\n
    \\n\";\n},\"useData\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/PrimaryNav.hbs\n// module id = 71\n// module chunks = 0","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/runtime.js\n// module id = 72\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars.runtime.js\n// module id = 73\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.6';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy42JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/base.js\n// module id = 74\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/utils.js\n// module id = 75\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/exception.js\n// module id = 76\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers.js\n// module id = 77\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js\n// module id = 78\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n var newContext = [];\n var iterator = context[global.Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/each.js\n// module id = 79\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/helper-missing.js\n// module id = 80\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/if.js\n// module id = 81\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/log.js\n// module id = 82\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/lookup.js\n// module id = 83\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/helpers/with.js\n// module id = 84\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/decorators.js\n// module id = 85\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/decorators/inline.js\n// module id = 86\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/logger.js\n// module id = 87\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar logger = _interopRequireWildcard(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/internal/proto-access.js\n// module id = 88\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js\n// module id = 89\n// module chunks = 0","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/safe-string.js\n// module id = 90\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return obj[name];\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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LE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBZCxjQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsRCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7XG4gIENPTVBJTEVSX1JFVklTSU9OLFxuICBjcmVhdGVGcmFtZSxcbiAgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OLFxuICBSRVZJU0lPTl9DSEFOR0VTXG59IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBtb3ZlSGVscGVyVG9Ib29rcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB3cmFwSGVscGVyIH0gZnJvbSAnLi9pbnRlcm5hbC93cmFwSGVscGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCxcbiAgcmVzdWx0SXNBbGxvd2VkXG59IGZyb20gJy4vaW50ZXJuYWwvcHJvdG8tYWNjZXNzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSAoY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSkgfHwgMSxcbiAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoXG4gICAgY29tcGlsZXJSZXZpc2lvbiA+PSBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gJiZcbiAgICBjb21waWxlclJldmlzaW9uIDw9IENPTVBJTEVSX1JFVklTSU9OXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb21waWxlclJldmlzaW9uIDwgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBydW50aW1lVmVyc2lvbnMgK1xuICAgICAgICAnKSBvciBkb3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlclZlcnNpb25zICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICtcbiAgICAgICAgY29tcGlsZXJJbmZvWzFdICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0ZW1wbGF0ZSBvYmplY3Q6ICcgKyB0eXBlb2YgdGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIHRlbXBsYXRlU3BlYy5tYWluLmRlY29yYXRvciA9IHRlbXBsYXRlU3BlYy5tYWluX2Q7XG5cbiAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9jYWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3dcbiAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRoZXNlIGFzIHBzZXVkby1zdXBwb3J0ZWQgQVBJcy5cbiAgZW52LlZNLmNoZWNrUmV2aXNpb24odGVtcGxhdGVTcGVjLmNvbXBpbGVyKTtcblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgcHJlY29tcGlsZWQgdGVtcGxhdGVzIHdpdGggY29tcGlsZXItdmVyc2lvbiA3ICg8NC4zLjApXG4gIGNvbnN0IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9XG4gICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyICYmIHRlbXBsYXRlU3BlYy5jb21waWxlclswXSA9PT0gNztcblxuICBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsV3JhcHBlcihwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgICAgY29udGV4dCA9IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTtcbiAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGxldCBleHRlbmRlZE9wdGlvbnMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGhvb2tzOiB0aGlzLmhvb2tzLFxuICAgICAgcHJvdG9BY2Nlc3NDb250cm9sOiB0aGlzLnByb3RvQWNjZXNzQ29udHJvbFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgcGFydGlhbCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBleHRlbmRlZE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIGV4dGVuZGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1RoZSBwYXJ0aWFsICcgK1xuICAgICAgICAgIG9wdGlvbnMubmFtZSArXG4gICAgICAgICAgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICBsZXQgY29udGFpbmVyID0ge1xuICAgIHN0cmljdDogZnVuY3Rpb24ob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaiwge1xuICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGVwdGhzW2ldICYmIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShkZXB0aHNbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZUlmTmVlZGVkOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID1cbiAgICAgICAgICBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdXG4gICAgICAgICAgICA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpXG4gICAgICAgICAgICA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dCAvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnJyArXG4gICAgICAgIHRlbXBsYXRlU3BlYy5tYWluKFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLFxuICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyhcbiAgICAgIHRlbXBsYXRlU3BlYy5tYWluLFxuICAgICAgbWFpbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMuZGVwdGhzIHx8IFtdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgbGV0IG1lcmdlZEhlbHBlcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5oZWxwZXJzLCBvcHRpb25zLmhlbHBlcnMpO1xuICAgICAgd3JhcEhlbHBlcnNUb1Bhc3NMb29rdXBQcm9wZXJ0eShtZXJnZWRIZWxwZXJzLCBjb250YWluZXIpO1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBtZXJnZWRIZWxwZXJzO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgLy8gVXNlIG1lcmdlSWZOZWVkZWQgaGVyZSB0byBwcmV2ZW50IGNvbXBpbGluZyBnbG9iYWwgcGFydGlhbHMgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlSWZOZWVkZWQoXG4gICAgICAgICAgb3B0aW9ucy5wYXJ0aWFscyxcbiAgICAgICAgICBlbnYucGFydGlhbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZChcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBlbnYuZGVjb3JhdG9ycyxcbiAgICAgICAgICBvcHRpb25zLmRlY29yYXRvcnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmhvb2tzID0ge307XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKG9wdGlvbnMpO1xuXG4gICAgICBsZXQga2VlcEhlbHBlckluSGVscGVycyA9XG4gICAgICAgIG9wdGlvbnMuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZyB8fFxuICAgICAgICB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjc7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdoZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdibG9ja0hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IG9wdGlvbnMucHJvdG9BY2Nlc3NDb250cm9sOyAvLyBpbnRlcm5hbCBvcHRpb25cbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgICAgY29udGFpbmVyLmhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGksXG4gICAgICB0ZW1wbGF0ZVNwZWNbaV0sXG4gICAgICBkYXRhLFxuICAgICAgMCxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKFxuICBjb250YWluZXIsXG4gIGksXG4gIGZuLFxuICBkYXRhLFxuICBkZWNsYXJlZEJsb2NrUGFyYW1zLFxuICBibG9ja1BhcmFtcyxcbiAgZGVwdGhzXG4pIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoXG4gICAgICBkZXB0aHMgJiZcbiAgICAgIGNvbnRleHQgIT0gZGVwdGhzWzBdICYmXG4gICAgICAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpXG4gICAgKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICBjdXJyZW50RGVwdGhzXG4gICAgKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY3VycmVudGx5IHBhcnQgb2YgdGhlIG9mZmljaWFsIEFQSSwgdGhlcmVmb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgLy8gVXNlIHRoZSBjdXJyZW50IGNsb3N1cmUgY29udGV4dCB0byBzYXZlIHRoZSBwYXJ0aWFsLWJsb2NrIGlmIHRoaXMgcGFydGlhbFxuICBjb25zdCBjdXJyZW50UGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAvLyBXcmFwcGVyIGZ1bmN0aW9uIHRvIGdldCBhY2Nlc3MgdG8gY3VycmVudFBhcnRpYWxCbG9jayBmcm9tIHRoZSBjbG9zdXJlXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoXG4gICAgICBjb250ZXh0LFxuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgKSB7XG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4gZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSA/IGNyZWF0ZUZyYW1lKGRhdGEpIDoge307XG4gICAgZGF0YS5yb290ID0gY29udGV4dDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykge1xuICBpZiAoZm4uZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb3BzID0ge307XG4gICAgcHJvZyA9IGZuLmRlY29yYXRvcihcbiAgICAgIHByb2csXG4gICAgICBwcm9wcyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRlcHRocyAmJiBkZXB0aHNbMF0sXG4gICAgICBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICBkZXB0aHNcbiAgICApO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goaGVscGVyTmFtZSA9PiB7XG4gICAgbGV0IGhlbHBlciA9IG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpIHtcbiAgY29uc3QgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiB3cmFwSGVscGVyKGhlbHBlciwgb3B0aW9ucyA9PiB7XG4gICAgcmV0dXJuIFV0aWxzLmV4dGVuZCh7IGxvb2t1cFByb3BlcnR5IH0sIG9wdGlvbnMpO1xuICB9KTtcbn1cbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/runtime.js\n// module id = 91\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/internal/wrapHelper.js\n// module id = 92\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/handlebars/dist/cjs/handlebars/no-conflict.js\n// module id = 93\n// module chunks = 0","Backbone = require \"backbone\"\n\nmodule.exports = Backbone.View.extend\n\tel: document.getElementById 'secondaryNav'\n\ttemplate: require 'templates/SecondaryNav'\n\t\n\tsteps: []\n\tstep: 0\n\tcounter: 0\n\tstepper: 5\n\trotRate: 2\n\t\n\tevents: \n\t\t\"click .step-rel\": \"stepRel\"\n\t\t\"click .step-abs\": \"stepAbs\"\n\t\t\"click .step-auto\": \"stepAuto\"\n\t\t\"click .rot-incr\": \"rotationIncr\"\n\t\t\"click .rot-setp\": \"rotationSetp\"\n\t\t\"click .view-reset\": \"viewReset\"\n\t\t\"click .height-incr\": \"heightIncr\"\n\t\t\"click .height-setabs\": \"heightSetAbs\"\n\t\t\"click .height-setrel\": \"heightSetRel\"\n\n\theightIncr: (e) ->\n\t\t@app.view.EGS.setHeight( parseInt(e.target.dataset.incr) , 'incr') if @app.view.EGS \n\t\tdo @update\n\theightSetAbs: (e) ->\n\t\t@app.view.EGS.setHeight( parseInt(e.target.dataset.setabs) , 'abs') if @app.view.EGS \n\t\tdo @update\n\theightSetRel: (e) ->\n\t\t@app.view.EGS.setHeight( parseFloat(e.target.dataset.setrel) , 'rel') if @app.view.EGS \n\t\tdo @update\n\t\n\tstepRel: (e) ->\n\t\t@incrStep e.target.dataset.step\n\tstepAbs: (e) ->\n\t\t@setStep e.target.dataset.step\n\tstepAuto: (e) ->\n\t\t@stepper = parseInt e.target.dataset.val\n\t\tdo @render\n\trotationIncr: (e) ->\n\t\t@rotRate += parseFloat e.target.dataset.incr\n\t\t@app.view.EGS.setTurnRate @rotRate if @app.view.EGS \n\t\tdo @update\n\trotationSetp: (e) ->\n\t\t@rotRate = parseFloat e.target.dataset.setp\n\t\t@app.view.EGS.setTurnRate @rotRate if @app.view.EGS \n\t\tdo @update\n\t\n\tviewReset: (e) ->\n\t\t@rotRate = 2\n\t\t@app.view.EGS.setTurnRate @rotRate if @app.view.EGS\n\t\tdo @app.view.EGS.resetView if @app.view.EGS\n\t\tdo @update\n\t\t\n\t\n\tstartup: ->\n\t\t@setStep 0\n\t\tsetInterval (=> do @timeTrigger), 1000\n\t\t@app.view.EGS.updateConstruct @step \n\t\t@app.view.EGS.setTurnRate @rotRate\n\t\n\tsetSteps: (steps) ->\n\t\t@steps = steps\n\t\t@step = 0\n\t\tdo @render\n\t\n\tincrStep: (dir) ->\n\t\tdir = parseInt(dir)\n\t\treturn @setStep @step + @steps.length + dir if @step + dir < 0\n\t\treturn @setStep @step - @steps.length + dir if @step + dir >= @steps.length\n\t\t@setStep @step + dir\n\t\n\tsetStep: (step) ->\n\t\t@step = parseInt(step)\n\t\tconsole.log \"Aufbauschritt: \" + @steps[@step] + \" (index: \" + @step + \")\"\n\t\t@app.view.EGS.updateConstruct @step if @app.view.EGS \n\t\tdo @update\n\t\n\ttimeTrigger: ->\n\t\t@incrStep 1 if @stepper and ++@counter %% @stepper is 0\n\t\n\tinitialize: (@app) -> \n\t\tdo @render\n\t\t\n\tupdate: ->\n\t\t$('#stepNo', @$el).text @steps[@step]\n\t\t$('.steps li', @$el).removeClass 'active'\n\t\t$('.step-' + @step, @$el).addClass 'active'\n\t\t# $('#rotMode', @$el).text if @rotRate > 0 then @rotRate + ' U/min' else \"Manuell\"\n\t\t$('.rots li', @$el).removeClass 'active'\n\t\t$('.rot-' + @rotRate, @$el).addClass 'active'\n\t\t\n\trender: ->\n\t\tsteps = []\n\t\tfor i of @steps\n\t\t\tsteps.push \n\t\t\t\ti: i\n\t\t\t\tname: \"Schritt \" + @steps[i]\n\t\t\t\n\t\ttpl = \n\t\t\tsteps: steps\n\t\t\tstep: @step\n\t\t\tstepName: @steps[@step]\n\t\t\tauto: @stepper\n\t\t\trotMode: if @rotRate > 0 then @rotRate + ' U/min' else \"Manuell\"\n\t\t\trate: @rotRate\n\t\t@el.innerHTML = @template tpl\n\t\t\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/SecondaryNav.coffee","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n return \"\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" active\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"active\";\n},\"7\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t\t\t\t
  • \"\n + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0))\n + \"
  • \\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
      \\n\t
    • \\n\t\tAufbauschritte:\\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t
        \\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"steps\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(7, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":25,\"column\":5},\"end\":{\"line\":27,\"column\":14}}})) != null ? stack1 : \"\")\n + \"\t\t\t\t
      \\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t
    • \\n\t
    • \\n\t\tAnsicht:\\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t\t \\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t\t
      \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
      \\n\t\t\t\\n\t\t
      \\n\t\t \\n\t
    • \\n\t
    • \\n\t\t
      \\n\t\t\t\\n\t\t
      \\n\t
    • \\n
    \\n\";\n},\"useData\":true,\"useDepths\":true});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/SecondaryNav.hbs\n// module id = 95\n// module chunks = 0","module.exports = function(lvalue, rvalue, options) {\n\tif (arguments.length < 3)\n\t\tthrow new Error(\"Handlebars Helper equal needs 2 parameters\");\n\tif( lvalue != rvalue )\n\t\treturn options.inverse(this);\n\treturn options.fn(this);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/_helpers/handlebars/cmp.js\n// module id = 96\n// module chunks = 0","Backbone = require \"backbone\"\nkeyNormalizer = require \"keyNormalizer\"\n\nmodule.exports = class DataSourceModal\n\tmodal: document.getElementById 'dataSourceModal'\n\tinputField: document.getElementById 'dataSourceModal-input'\n\tsaveButton: document.getElementById 'dataSourceModal-save'\n\tcancelButton: document.getElementById 'dataSourceModal-cancel'\n\tresetButton: document.getElementById 'dataSourceModal-reset'\n\terrorBanner: document.getElementById 'dataSourceModal-error'\n\t\n\tconstructor: (@app) ->\n\t\t@saveButton.addEventListener 'click', @save\n\t\t@cancelButton.addEventListener 'click', @cancel\n\t\t@resetButton.addEventListener 'click', @reset\n\t\n\treset: (evt) =>\n\t\t@inputField.value = App.defaultSource\n\t\n\tsave: (evt) =>\n\t\tkeygid = keyNormalizer @inputField.value, true\n\t\tif keygid\n\t\t\t@errorBanner.style.display = 'none'\n\t\t\t@app.navigate keygid.join('/'), trigger:true\n\t\telse\n\t\t\t@errorBanner.style.display = ''\n\t\t\tdo evt.preventDefault\n\t\t\tdo evt.stopPropagation\n\n\n\n// WEBPACK FOOTER //\n// ./src/views/DataSourceModal.coffee","module.exports = google;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"google\"\n// module id = 98\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/js/lib.js b/js/lib.js index fca7b37..d4bca19 100644 --- a/js/lib.js +++ b/js/lib.js @@ -1,5 +1,119 @@ -!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r=window.webpackJsonp;window.webpackJsonp=function(o,a){for(var s,l,c=0,u=[];c0&&t-1 in e}function s(e,t,r){if(ce.isFunction(t))return ce.grep(e,function(e,n){return!!t.call(e,n,e)!==r});if(t.nodeType)return ce.grep(e,function(e){return e===t!==r});if("string"==typeof t){if(ye.test(t))return ce.filter(t,e,r);t=ce.filter(t,e)}return ce.grep(e,function(e){return ne.call(t,e)>-1!==r})}function l(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function c(e){var t={};return ce.each(e.match(Ee)||[],function(e,r){t[r]=!0}),t}function u(){J.removeEventListener("DOMContentLoaded",u),r.removeEventListener("load",u),ce.ready()}function h(){this.expando=ce.expando+h.uid++}function d(e,t,r){var n;if(void 0===r&&1===e.nodeType)if(n="data-"+t.replace(ke,"-$&").toLowerCase(),r=e.getAttribute(n),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:Pe.test(r)?ce.parseJSON(r):r}catch(i){}Re.set(e,t,r)}else r=void 0;return r}function p(e,t,r,n){var i,o=1,a=20,s=n?function(){return n.cur()}:function(){return ce.css(e,t,"")},l=s(),c=r&&r[3]||(ce.cssNumber[t]?"":"px"),u=(ce.cssNumber[t]||"px"!==c&&+l)&&Ie.exec(ce.css(e,t));if(u&&u[3]!==c){c=c||u[3],r=r||[],u=+l||1;do o=o||".5",u/=o,ce.style(e,t,u+c);while(o!==(o=s()/l)&&1!==o&&--a)}return r&&(u=+u||+l||0,i=r[1]?u+(r[1]+1)*r[2]:+r[2],n&&(n.unit=c,n.start=u,n.end=i)),i}function f(e,t){var r="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&ce.nodeName(e,t)?ce.merge([e],r):r}function m(e,t){for(var r=0,n=e.length;n>r;r++)Ce.set(e[r],"globalEval",!t||Ce.get(t[r],"globalEval"))}function g(e,t,r,n,i){for(var o,a,s,l,c,u,h=t.createDocumentFragment(),d=[],p=0,g=e.length;g>p;p++)if(o=e[p],o||0===o)if("object"===ce.type(o))ce.merge(d,o.nodeType?[o]:o);else if(ze.test(o)){for(a=a||h.appendChild(t.createElement("div")),s=(Oe.exec(o)||["",""])[1].toLowerCase(),l=Ve[s]||Ve._default,a.innerHTML=l[1]+ce.htmlPrefilter(o)+l[2],u=l[0];u--;)a=a.lastChild;ce.merge(d,a.childNodes),a=h.firstChild,a.textContent=""}else d.push(t.createTextNode(o));for(h.textContent="",p=0;o=d[p++];)if(n&&ce.inArray(o,n)>-1)i&&i.push(o);else if(c=ce.contains(o.ownerDocument,o),a=f(h.appendChild(o),"script"),c&&m(a),r)for(u=0;o=a[u++];)Fe.test(o.type||"")&&r.push(o);return h}function v(){return!0}function b(){return!1}function y(){try{return J.activeElement}catch(e){}}function x(e,t,r,n,i,o){var a,s;if("object"==typeof t){"string"!=typeof r&&(n=n||r,r=void 0);for(s in t)x(e,s,r,n,t[s],o);return e}if(null==n&&null==i?(i=r,n=r=void 0):null==i&&("string"==typeof r?(i=n,n=void 0):(i=n,n=r,r=void 0)),i===!1)i=b;else if(!i)return e;return 1===o&&(a=i,i=function(e){return ce().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,n,r)})}function w(e,t){return ce.nodeName(e,"table")&&ce.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function M(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function _(e){var t=Ye.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function S(e,t){var r,n,i,o,a,s,l,c;if(1===t.nodeType){if(Ce.hasData(e)&&(o=Ce.access(e),a=Ce.set(t,o),c=o.events)){delete a.handle,a.events={};for(i in c)for(r=0,n=c[i].length;n>r;r++)ce.event.add(t,i,c[i][r])}Re.hasData(e)&&(s=Re.access(e),l=ce.extend({},s),Re.set(t,l))}}function E(e,t){var r=t.nodeName.toLowerCase();"input"===r&&Ue.test(e.type)?t.checked=e.checked:"input"!==r&&"textarea"!==r||(t.defaultValue=e.defaultValue)}function T(e,t,r,n){t=te.apply([],t);var i,o,a,s,l,c,u=0,h=e.length,d=h-1,p=t[0],m=ce.isFunction(p);if(m||h>1&&"string"==typeof p&&!se.checkClone&&qe.test(p))return e.each(function(i){var o=e.eq(i);m&&(t[0]=p.call(this,i,o.html())),T(o,t,r,n)});if(h&&(i=g(t,e[0].ownerDocument,!1,e,n),o=i.firstChild,1===i.childNodes.length&&(i=o),o||n)){for(a=ce.map(f(i,"script"),M),s=a.length;h>u;u++)l=i,u!==d&&(l=ce.clone(l,!0,!0),s&&ce.merge(a,f(l,"script"))),r.call(e[u],l,u);if(s)for(c=a[a.length-1].ownerDocument,ce.map(a,_),u=0;s>u;u++)l=a[u],Fe.test(l.type||"")&&!Ce.access(l,"globalEval")&&ce.contains(c,l)&&(l.src?ce._evalUrl&&ce._evalUrl(l.src):ce.globalEval(l.textContent.replace($e,"")))}return e}function A(e,t,r){for(var n,i=t?ce.filter(t,e):e,o=0;null!=(n=i[o]);o++)r||1!==n.nodeType||ce.cleanData(f(n)),n.parentNode&&(r&&ce.contains(n.ownerDocument,n)&&m(f(n,"script")),n.parentNode.removeChild(n));return e}function L(e,t){var r=ce(t.createElement(e)).appendTo(t.body),n=ce.css(r[0],"display");return r.detach(),n}function C(e){var t=J,r=Ke[e];return r||(r=L(e,t),"none"!==r&&r||(Ze=(Ze||ce("