make8bitart.com

Merge pull request #1 from jennschiffer/glitch

🍪🥎 Updated with Glitch

authored by

santa claus and committed by
GitHub
f22765b4 8069e103

+8336 -2
+1
.gitignore
··· 1 + build
+15
.glitch-assets
··· 1 + {"name":"make8bitart-2020-01-04.tgz","date":"2020-01-04T20:47:22.526Z","url":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fmake8bitart-2020-01-04.tgz","type":"application/x-gzip","size":530360,"thumbnail":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fthumbnails%2Fmake8bitart-2020-01-04.tgz","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"fbsnTgkhjoCaPzEG"} 2 + {"name":"bobross-palette.csv","date":"2020-05-04T00:25:15.914Z","url":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fbobross-palette.csv","type":"text/csv","size":166,"thumbnail":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fthumbnails%2Fbobross-palette.csv","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"ixuX6C1I3KDlwUKD"} 3 + {"name":"example.csv","date":"2020-05-04T00:25:23.747Z","url":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fexample.csv","type":"text/csv","size":846,"thumbnail":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fthumbnails%2Fexample.csv","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"JX7v7PhBdroYDUKz"} 4 + {"name":"brighton.png","date":"2021-09-28T18:53:15.485Z","url":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fbrighton.png","type":"image/png","size":5658,"imageWidth":333,"imageHeight":333,"thumbnail":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fthumbnails%2Fbrighton.png","thumbnailWidth":330,"thumbnailHeight":330,"uuid":"Y2tywtw9Blo0wJkb"} 5 + {"uuid":"Y2tywtw9Blo0wJkb","deleted":true} 6 + {"name":"brighton.png","date":"2021-09-28T18:53:52.213Z","url":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fbrighton.png","type":"image/png","size":2537,"imageWidth":128,"imageHeight":128,"thumbnail":"https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fbrighton.png","thumbnailWidth":128,"thumbnailHeight":128,"uuid":"VmOnaHmRkNbwwRUw"} 7 + {"name":"make8bitart-800.png","date":"2023-05-25T19:49:11.130Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart-800.png","type":"image/png","size":7701,"imageWidth":800,"imageHeight":800,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/thumbnails%2Fmake8bitart-800.png","thumbnailWidth":330,"thumbnailHeight":330,"uuid":"FAZee4HoiQfuRDmi"} 8 + {"name":"make8bitart130.png","date":"2023-05-25T19:50:02.268Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart130.png","type":"image/png","size":2130,"imageWidth":130,"imageHeight":130,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart130.png","thumbnailWidth":130,"thumbnailHeight":130,"uuid":"nEcxugJcp7mY8Yyj"} 9 + {"name":"make8bitart-180.png","date":"2023-05-25T19:50:35.396Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart-180.png","type":"image/png","size":3236,"imageWidth":180,"imageHeight":180,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart-180.png","thumbnailWidth":180,"thumbnailHeight":180,"uuid":"atKIwu1CkzTtrZrb"} 10 + {"uuid":"nEcxugJcp7mY8Yyj","deleted":true} 11 + {"name":"small-icons.zip","date":"2023-05-25T20:41:46.772Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/small-icons.zip","type":"application/zip","size":21772,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/thumbnails%2Fsmall-icons.zip","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"jmdmsr30JjcJpk2B"} 12 + {"name":"icons.zip","date":"2023-05-25T20:50:07.715Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/icons.zip","type":"application/zip","size":8329,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/thumbnails%2Ficons.zip","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"gwCla6vKRempP0ry"} 13 + {"uuid":"jmdmsr30JjcJpk2B","deleted":true} 14 + {"name":"draggydivs-icons.zip","date":"2023-05-25T20:51:56.378Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/draggydivs-icons.zip","type":"application/zip","size":1639,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/thumbnails%2Fdraggydivs-icons.zip","thumbnailWidth":210,"thumbnailHeight":210,"uuid":"BIAoOHUPJ5L5Lx7V"} 15 + {"name":"favicon.png","date":"2025-02-09T01:35:44.179Z","url":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/favicon.png","type":"image/png","size":152,"imageWidth":16,"imageHeight":16,"thumbnail":"https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/favicon.png","thumbnailWidth":16,"thumbnailHeight":16,"uuid":"Gjeg6YmmNs6I5EQL"}
+71
Gruntfile.js
··· 1 + module.exports = function (grunt) { 2 + grunt.initConfig({ 3 + pkg: grunt.file.readJSON("package.json"), 4 + 5 + jshint: { 6 + all: ["Gruntfile.js", "service-worker.js", "js/app/*"], 7 + options: { 8 + reporterOutput: "", 9 + }, 10 + }, 11 + 12 + concat: { 13 + css: { 14 + src: ["src/css/libs/*.css", "src/css/app/*.css"], 15 + dest: "build/make8bitart.css", 16 + } 17 + }, 18 + 19 + uglify: { 20 + build: { 21 + src: [ 22 + "src/js/libs/jquery-3.2.1.min.js", 23 + "src/js/libs/draggybits.js", 24 + "src/js/libs/keymaster.js", 25 + "src/js/app/make8bitart.js", 26 + ], 27 + dest: "build/app.min.js", 28 + }, 29 + }, 30 + 31 + cssmin: { 32 + minify: { 33 + expand: true, 34 + cwd: "src/css", 35 + src: ["*.css", "!*.min.css"], 36 + dest: "build", 37 + ext: ".min.css", 38 + }, 39 + }, 40 + 41 + copy: { 42 + assets: { 43 + cwd: "src/assets", 44 + src: "**/*", 45 + dest: "build/assets", 46 + expand: true, 47 + }, 48 + files: { 49 + expand: true, 50 + cwd: "src", 51 + src: "*", 52 + dest: "build/", 53 + filter: "isFile", 54 + }, 55 + }, 56 + }); 57 + 58 + grunt.loadNpmTasks("grunt-contrib-concat"); 59 + grunt.loadNpmTasks("grunt-contrib-uglify"); 60 + grunt.loadNpmTasks("grunt-contrib-cssmin"); 61 + grunt.loadNpmTasks("grunt-contrib-jshint"); 62 + grunt.loadNpmTasks("grunt-contrib-copy"); 63 + 64 + grunt.registerTask("default", [ 65 + "concat", 66 + "uglify", 67 + "cssmin", 68 + "jshint", 69 + "copy", 70 + ]); 71 + };
+21
LICENSE.md
··· 1 + MIT License 2 + 3 + Copyright (c) 2018 Jenn Schiffer ✨ 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy 6 + of this software and associated documentation files (the "Software"), to deal 7 + in the Software without restriction, including without limitation the rights 8 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 + copies of the Software, and to permit persons to whom the Software is 10 + furnished to do so, subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 + SOFTWARE.
+48 -2
README.md
··· 1 - # make8bitart2 2 - the second version of this repo 1 + # make8bitart! 2 + 3 + [make8bitart.com](http://make8bitart.com) is a web-based pixel art application that's super fun and free and open source! 4 + 5 + ## install 6 + 7 + You can run this on the Web at [make8bitart.com](https://make8bitart.com) or locally on your own machine by downloading [this compressed export from gliltch](https://cdn.glitch.com/2bc3df24-5bca-426a-9445-f1f6dbdd528e%2Fmake8bitart-2020-01-04.tgz?v=1578170842526), unzipping it and then directing your browser to the `index.html` of the project `build` folder. 8 + 9 + ## contribute 10 + 11 + You can [remix this project on Glitch](https://glitch.com/edit/#!/make8bitart) and then send me a link to your changed app and I can review and merge. 12 + 13 + If you have downloaded the project to work on it locally, run `npm install` and then `npm run build` to build. Grunt is used to concatenate and minify the js and css files into the build folder. 14 + 15 + ## dependencies 16 + 17 + make8bitart.com uses jQuery and a jQuery plugin I wrote: [draggybits](https://github.com/jennschiffer/draggybits). The local dev dependencies are Express and Grunt, along with the various Grunt plugins. 18 + 19 + ## misc notes 20 + 21 + Yes I know this isn't technically 8-bit, but you'll get over it!! 22 + 23 + This project has a v chill development cycle, so I'm poppin' in features as I come up with them or as folks request them. Expect changes here often, and do not be shocked to find gross code. If you have suggestions, I'm totally open to hear them and learn if you're not a nerf dart about it! 24 + 25 + ## made with ♥♥♥ by jenn schiffer 26 + 27 + I designed, built, and created all of the graphics for this passion project. The dinosaur art in the source was found through a variety of geocities websites. 28 + 29 + If you have feature requests, you can find my contact info on [jennschifer.com](https://jennschiffer.com) 30 + 31 + Huge shouts out to everyone who has contributed to this wild project: 32 + 33 + * [tessa thornton](https://github.com/tessalt) 34 + * [tim branyen](http://tbranyen.com/) 35 + * [vlad filippov](http://vf.io/) 36 + * [mike taylor](https://miketaylr.com/) 37 + * [brian brennan](https://twitter.com/brianloveswords) 38 + * [zach leatherman](https://zachleat.com/) 39 + * [tyler benziger](http://tybenz.github.io/) 40 + * [samir zahran](http://samiare.net/) 41 + * [phillip calvin](https://philcalvin.com/) 42 + * [monica dinculescu](https://twitter.com/notwaldorf) 43 + * [greg smith](http://incompl.com/) 44 + * [dominick guzzo](http://www.twitter.com/dominickguzzo) 45 + * [andrew lawson](https://github.com/adlawson) 46 + * [noelle leigh](https://glitch.com/@noelleleigh) 47 + 48 + xoxo j$ • [jennschiffer.com](http://jennschiffer.com)
+3413
package-lock.json
··· 1 + { 2 + "name": "make8bitart.com", 3 + "version": "2.0.0", 4 + "lockfileVersion": 2, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "make8bitart.com", 9 + "version": "2.0.0", 10 + "dependencies": { 11 + "express": "^4.18.2", 12 + "grunt": "^1.6.1", 13 + "grunt-contrib-concat": "^2.1.0", 14 + "grunt-contrib-copy": "^1.0.0", 15 + "grunt-contrib-cssmin": "^5.0.0", 16 + "grunt-contrib-jshint": "^3.2.0", 17 + "grunt-contrib-uglify": "^5.2.2" 18 + }, 19 + "engines": { 20 + "node": "16" 21 + } 22 + }, 23 + "node_modules/abbrev": { 24 + "version": "1.1.1", 25 + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 26 + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 27 + }, 28 + "node_modules/accepts": { 29 + "version": "1.3.8", 30 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 31 + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 32 + "dependencies": { 33 + "mime-types": "~2.1.34", 34 + "negotiator": "0.6.3" 35 + }, 36 + "engines": { 37 + "node": ">= 0.6" 38 + } 39 + }, 40 + "node_modules/ansi-regex": { 41 + "version": "2.1.1", 42 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 43 + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", 44 + "engines": { 45 + "node": ">=0.10.0" 46 + } 47 + }, 48 + "node_modules/ansi-styles": { 49 + "version": "4.3.0", 50 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 51 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 52 + "dependencies": { 53 + "color-convert": "^2.0.1" 54 + }, 55 + "engines": { 56 + "node": ">=8" 57 + }, 58 + "funding": { 59 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 60 + } 61 + }, 62 + "node_modules/argparse": { 63 + "version": "1.0.10", 64 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 65 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 66 + "dependencies": { 67 + "sprintf-js": "~1.0.2" 68 + } 69 + }, 70 + "node_modules/array-each": { 71 + "version": "1.0.1", 72 + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", 73 + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", 74 + "engines": { 75 + "node": ">=0.10.0" 76 + } 77 + }, 78 + "node_modules/array-slice": { 79 + "version": "1.1.0", 80 + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", 81 + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", 82 + "engines": { 83 + "node": ">=0.10.0" 84 + } 85 + }, 86 + "node_modules/async": { 87 + "version": "3.2.4", 88 + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 89 + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 90 + }, 91 + "node_modules/balanced-match": { 92 + "version": "1.0.2", 93 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 94 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 95 + }, 96 + "node_modules/body-parser": { 97 + "version": "1.20.1", 98 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 99 + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 100 + "dependencies": { 101 + "bytes": "3.1.2", 102 + "content-type": "~1.0.4", 103 + "debug": "2.6.9", 104 + "depd": "2.0.0", 105 + "destroy": "1.2.0", 106 + "http-errors": "2.0.0", 107 + "iconv-lite": "0.4.24", 108 + "on-finished": "2.4.1", 109 + "qs": "6.11.0", 110 + "raw-body": "2.5.1", 111 + "type-is": "~1.6.18", 112 + "unpipe": "1.0.0" 113 + }, 114 + "engines": { 115 + "node": ">= 0.8", 116 + "npm": "1.2.8000 || >= 1.4.16" 117 + } 118 + }, 119 + "node_modules/brace-expansion": { 120 + "version": "1.1.11", 121 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 122 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 123 + "dependencies": { 124 + "balanced-match": "^1.0.0", 125 + "concat-map": "0.0.1" 126 + } 127 + }, 128 + "node_modules/braces": { 129 + "version": "3.0.2", 130 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 131 + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 132 + "dependencies": { 133 + "fill-range": "^7.0.1" 134 + }, 135 + "engines": { 136 + "node": ">=8" 137 + } 138 + }, 139 + "node_modules/bytes": { 140 + "version": "3.1.2", 141 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 142 + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 143 + "engines": { 144 + "node": ">= 0.8" 145 + } 146 + }, 147 + "node_modules/call-bind": { 148 + "version": "1.0.2", 149 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 150 + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 151 + "dependencies": { 152 + "function-bind": "^1.1.1", 153 + "get-intrinsic": "^1.0.2" 154 + }, 155 + "funding": { 156 + "url": "https://github.com/sponsors/ljharb" 157 + } 158 + }, 159 + "node_modules/chalk": { 160 + "version": "4.1.2", 161 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 162 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 163 + "dependencies": { 164 + "ansi-styles": "^4.1.0", 165 + "supports-color": "^7.1.0" 166 + }, 167 + "engines": { 168 + "node": ">=10" 169 + }, 170 + "funding": { 171 + "url": "https://github.com/chalk/chalk?sponsor=1" 172 + } 173 + }, 174 + "node_modules/clean-css": { 175 + "version": "5.3.2", 176 + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", 177 + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", 178 + "dependencies": { 179 + "source-map": "~0.6.0" 180 + }, 181 + "engines": { 182 + "node": ">= 10.0" 183 + } 184 + }, 185 + "node_modules/cli": { 186 + "version": "1.0.1", 187 + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 188 + "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", 189 + "dependencies": { 190 + "exit": "0.1.2", 191 + "glob": "^7.1.1" 192 + }, 193 + "engines": { 194 + "node": ">=0.2.5" 195 + } 196 + }, 197 + "node_modules/color-convert": { 198 + "version": "2.0.1", 199 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 200 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 201 + "dependencies": { 202 + "color-name": "~1.1.4" 203 + }, 204 + "engines": { 205 + "node": ">=7.0.0" 206 + } 207 + }, 208 + "node_modules/color-name": { 209 + "version": "1.1.4", 210 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 211 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 212 + }, 213 + "node_modules/colors": { 214 + "version": "1.1.2", 215 + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 216 + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", 217 + "engines": { 218 + "node": ">=0.1.90" 219 + } 220 + }, 221 + "node_modules/concat-map": { 222 + "version": "0.0.1", 223 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 224 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 225 + }, 226 + "node_modules/console-browserify": { 227 + "version": "1.1.0", 228 + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 229 + "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", 230 + "dependencies": { 231 + "date-now": "^0.1.4" 232 + } 233 + }, 234 + "node_modules/content-disposition": { 235 + "version": "0.5.4", 236 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 237 + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 238 + "dependencies": { 239 + "safe-buffer": "5.2.1" 240 + }, 241 + "engines": { 242 + "node": ">= 0.6" 243 + } 244 + }, 245 + "node_modules/content-type": { 246 + "version": "1.0.4", 247 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 248 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 249 + "engines": { 250 + "node": ">= 0.6" 251 + } 252 + }, 253 + "node_modules/cookie": { 254 + "version": "0.5.0", 255 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 256 + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 257 + "engines": { 258 + "node": ">= 0.6" 259 + } 260 + }, 261 + "node_modules/core-util-is": { 262 + "version": "1.0.3", 263 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 264 + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 265 + }, 266 + "node_modules/date-now": { 267 + "version": "0.1.4", 268 + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 269 + "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==" 270 + }, 271 + "node_modules/dateformat": { 272 + "version": "4.6.3", 273 + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", 274 + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", 275 + "engines": { 276 + "node": "*" 277 + } 278 + }, 279 + "node_modules/debug": { 280 + "version": "2.6.9", 281 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 282 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 283 + "dependencies": { 284 + "ms": "2.0.0" 285 + } 286 + }, 287 + "node_modules/depd": { 288 + "version": "2.0.0", 289 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 290 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 291 + "engines": { 292 + "node": ">= 0.8" 293 + } 294 + }, 295 + "node_modules/destroy": { 296 + "version": "1.2.0", 297 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 298 + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 299 + "engines": { 300 + "node": ">= 0.8", 301 + "npm": "1.2.8000 || >= 1.4.16" 302 + } 303 + }, 304 + "node_modules/detect-file": { 305 + "version": "1.0.0", 306 + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", 307 + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", 308 + "engines": { 309 + "node": ">=0.10.0" 310 + } 311 + }, 312 + "node_modules/dom-serializer": { 313 + "version": "0.2.2", 314 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", 315 + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", 316 + "dependencies": { 317 + "domelementtype": "^2.0.1", 318 + "entities": "^2.0.0" 319 + } 320 + }, 321 + "node_modules/dom-serializer/node_modules/domelementtype": { 322 + "version": "2.3.0", 323 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 324 + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 325 + "funding": [ 326 + { 327 + "type": "github", 328 + "url": "https://github.com/sponsors/fb55" 329 + } 330 + ] 331 + }, 332 + "node_modules/dom-serializer/node_modules/entities": { 333 + "version": "2.2.0", 334 + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 335 + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 336 + "funding": { 337 + "url": "https://github.com/fb55/entities?sponsor=1" 338 + } 339 + }, 340 + "node_modules/domelementtype": { 341 + "version": "1.3.1", 342 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 343 + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 344 + }, 345 + "node_modules/domhandler": { 346 + "version": "2.3.0", 347 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 348 + "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", 349 + "dependencies": { 350 + "domelementtype": "1" 351 + } 352 + }, 353 + "node_modules/domutils": { 354 + "version": "1.5.1", 355 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 356 + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", 357 + "dependencies": { 358 + "dom-serializer": "0", 359 + "domelementtype": "1" 360 + } 361 + }, 362 + "node_modules/duplexer": { 363 + "version": "0.1.2", 364 + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", 365 + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" 366 + }, 367 + "node_modules/ee-first": { 368 + "version": "1.1.1", 369 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 370 + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 371 + }, 372 + "node_modules/encodeurl": { 373 + "version": "1.0.2", 374 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 375 + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 376 + "engines": { 377 + "node": ">= 0.8" 378 + } 379 + }, 380 + "node_modules/entities": { 381 + "version": "1.0.0", 382 + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 383 + "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==" 384 + }, 385 + "node_modules/escape-html": { 386 + "version": "1.0.3", 387 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 388 + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 389 + }, 390 + "node_modules/escape-string-regexp": { 391 + "version": "1.0.5", 392 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 393 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 394 + "engines": { 395 + "node": ">=0.8.0" 396 + } 397 + }, 398 + "node_modules/esprima": { 399 + "version": "4.0.1", 400 + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 401 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 402 + "bin": { 403 + "esparse": "bin/esparse.js", 404 + "esvalidate": "bin/esvalidate.js" 405 + }, 406 + "engines": { 407 + "node": ">=4" 408 + } 409 + }, 410 + "node_modules/etag": { 411 + "version": "1.8.1", 412 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 413 + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 414 + "engines": { 415 + "node": ">= 0.6" 416 + } 417 + }, 418 + "node_modules/exit": { 419 + "version": "0.1.2", 420 + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 421 + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", 422 + "engines": { 423 + "node": ">= 0.8.0" 424 + } 425 + }, 426 + "node_modules/expand-tilde": { 427 + "version": "2.0.2", 428 + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", 429 + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", 430 + "dependencies": { 431 + "homedir-polyfill": "^1.0.1" 432 + }, 433 + "engines": { 434 + "node": ">=0.10.0" 435 + } 436 + }, 437 + "node_modules/express": { 438 + "version": "4.18.2", 439 + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 440 + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 441 + "dependencies": { 442 + "accepts": "~1.3.8", 443 + "array-flatten": "1.1.1", 444 + "body-parser": "1.20.1", 445 + "content-disposition": "0.5.4", 446 + "content-type": "~1.0.4", 447 + "cookie": "0.5.0", 448 + "cookie-signature": "1.0.6", 449 + "debug": "2.6.9", 450 + "depd": "2.0.0", 451 + "encodeurl": "~1.0.2", 452 + "escape-html": "~1.0.3", 453 + "etag": "~1.8.1", 454 + "finalhandler": "1.2.0", 455 + "fresh": "0.5.2", 456 + "http-errors": "2.0.0", 457 + "merge-descriptors": "1.0.1", 458 + "methods": "~1.1.2", 459 + "on-finished": "2.4.1", 460 + "parseurl": "~1.3.3", 461 + "path-to-regexp": "0.1.7", 462 + "proxy-addr": "~2.0.7", 463 + "qs": "6.11.0", 464 + "range-parser": "~1.2.1", 465 + "safe-buffer": "5.2.1", 466 + "send": "0.18.0", 467 + "serve-static": "1.15.0", 468 + "setprototypeof": "1.2.0", 469 + "statuses": "2.0.1", 470 + "type-is": "~1.6.18", 471 + "utils-merge": "1.0.1", 472 + "vary": "~1.1.2" 473 + }, 474 + "engines": { 475 + "node": ">= 0.10.0" 476 + } 477 + }, 478 + "node_modules/express/node_modules/array-flatten": { 479 + "version": "1.1.1", 480 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 481 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 482 + }, 483 + "node_modules/express/node_modules/cookie-signature": { 484 + "version": "1.0.6", 485 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 486 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 487 + }, 488 + "node_modules/express/node_modules/merge-descriptors": { 489 + "version": "1.0.1", 490 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 491 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 492 + }, 493 + "node_modules/express/node_modules/methods": { 494 + "version": "1.1.2", 495 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 496 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 497 + "engines": { 498 + "node": ">= 0.6" 499 + } 500 + }, 501 + "node_modules/express/node_modules/path-to-regexp": { 502 + "version": "0.1.7", 503 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 504 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 505 + }, 506 + "node_modules/express/node_modules/utils-merge": { 507 + "version": "1.0.1", 508 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 509 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 510 + "engines": { 511 + "node": ">= 0.4.0" 512 + } 513 + }, 514 + "node_modules/express/node_modules/vary": { 515 + "version": "1.1.2", 516 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 517 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", 518 + "engines": { 519 + "node": ">= 0.8" 520 + } 521 + }, 522 + "node_modules/extend": { 523 + "version": "3.0.2", 524 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 525 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 526 + }, 527 + "node_modules/figures": { 528 + "version": "3.2.0", 529 + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 530 + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 531 + "dependencies": { 532 + "escape-string-regexp": "^1.0.5" 533 + }, 534 + "engines": { 535 + "node": ">=8" 536 + }, 537 + "funding": { 538 + "url": "https://github.com/sponsors/sindresorhus" 539 + } 540 + }, 541 + "node_modules/file-sync-cmp": { 542 + "version": "0.1.1", 543 + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", 544 + "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==" 545 + }, 546 + "node_modules/fill-range": { 547 + "version": "7.0.1", 548 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 549 + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 550 + "dependencies": { 551 + "to-regex-range": "^5.0.1" 552 + }, 553 + "engines": { 554 + "node": ">=8" 555 + } 556 + }, 557 + "node_modules/finalhandler": { 558 + "version": "1.2.0", 559 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 560 + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 561 + "dependencies": { 562 + "debug": "2.6.9", 563 + "encodeurl": "~1.0.2", 564 + "escape-html": "~1.0.3", 565 + "on-finished": "2.4.1", 566 + "parseurl": "~1.3.3", 567 + "statuses": "2.0.1", 568 + "unpipe": "~1.0.0" 569 + }, 570 + "engines": { 571 + "node": ">= 0.8" 572 + } 573 + }, 574 + "node_modules/findup-sync": { 575 + "version": "5.0.0", 576 + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", 577 + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", 578 + "dependencies": { 579 + "detect-file": "^1.0.0", 580 + "is-glob": "^4.0.3", 581 + "micromatch": "^4.0.4", 582 + "resolve-dir": "^1.0.1" 583 + }, 584 + "engines": { 585 + "node": ">= 10.13.0" 586 + } 587 + }, 588 + "node_modules/fined": { 589 + "version": "1.2.0", 590 + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", 591 + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", 592 + "dependencies": { 593 + "expand-tilde": "^2.0.2", 594 + "is-plain-object": "^2.0.3", 595 + "object.defaults": "^1.1.0", 596 + "object.pick": "^1.2.0", 597 + "parse-filepath": "^1.0.1" 598 + }, 599 + "engines": { 600 + "node": ">= 0.10" 601 + } 602 + }, 603 + "node_modules/flagged-respawn": { 604 + "version": "1.0.1", 605 + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", 606 + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", 607 + "engines": { 608 + "node": ">= 0.10" 609 + } 610 + }, 611 + "node_modules/for-in": { 612 + "version": "1.0.2", 613 + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 614 + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", 615 + "engines": { 616 + "node": ">=0.10.0" 617 + } 618 + }, 619 + "node_modules/for-own": { 620 + "version": "1.0.0", 621 + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", 622 + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", 623 + "dependencies": { 624 + "for-in": "^1.0.1" 625 + }, 626 + "engines": { 627 + "node": ">=0.10.0" 628 + } 629 + }, 630 + "node_modules/forwarded": { 631 + "version": "0.2.0", 632 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 633 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 634 + "engines": { 635 + "node": ">= 0.6" 636 + } 637 + }, 638 + "node_modules/fresh": { 639 + "version": "0.5.2", 640 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 641 + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 642 + "engines": { 643 + "node": ">= 0.6" 644 + } 645 + }, 646 + "node_modules/fs.realpath": { 647 + "version": "1.0.0", 648 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 649 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 650 + }, 651 + "node_modules/function-bind": { 652 + "version": "1.1.1", 653 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 654 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 655 + }, 656 + "node_modules/get-intrinsic": { 657 + "version": "1.1.3", 658 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 659 + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 660 + "dependencies": { 661 + "function-bind": "^1.1.1", 662 + "has": "^1.0.3", 663 + "has-symbols": "^1.0.3" 664 + }, 665 + "funding": { 666 + "url": "https://github.com/sponsors/ljharb" 667 + } 668 + }, 669 + "node_modules/getobject": { 670 + "version": "1.0.2", 671 + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", 672 + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", 673 + "engines": { 674 + "node": ">=10" 675 + } 676 + }, 677 + "node_modules/glob": { 678 + "version": "7.1.7", 679 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 680 + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 681 + "dependencies": { 682 + "fs.realpath": "^1.0.0", 683 + "inflight": "^1.0.4", 684 + "inherits": "2", 685 + "minimatch": "^3.0.4", 686 + "once": "^1.3.0", 687 + "path-is-absolute": "^1.0.0" 688 + }, 689 + "engines": { 690 + "node": "*" 691 + }, 692 + "funding": { 693 + "url": "https://github.com/sponsors/isaacs" 694 + } 695 + }, 696 + "node_modules/global-modules": { 697 + "version": "1.0.0", 698 + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", 699 + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", 700 + "dependencies": { 701 + "global-prefix": "^1.0.1", 702 + "is-windows": "^1.0.1", 703 + "resolve-dir": "^1.0.0" 704 + }, 705 + "engines": { 706 + "node": ">=0.10.0" 707 + } 708 + }, 709 + "node_modules/global-prefix": { 710 + "version": "1.0.2", 711 + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", 712 + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", 713 + "dependencies": { 714 + "expand-tilde": "^2.0.2", 715 + "homedir-polyfill": "^1.0.1", 716 + "ini": "^1.3.4", 717 + "is-windows": "^1.0.1", 718 + "which": "^1.2.14" 719 + }, 720 + "engines": { 721 + "node": ">=0.10.0" 722 + } 723 + }, 724 + "node_modules/global-prefix/node_modules/which": { 725 + "version": "1.3.1", 726 + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 727 + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 728 + "dependencies": { 729 + "isexe": "^2.0.0" 730 + }, 731 + "bin": { 732 + "which": "bin/which" 733 + } 734 + }, 735 + "node_modules/grunt": { 736 + "version": "1.6.1", 737 + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", 738 + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", 739 + "dependencies": { 740 + "dateformat": "~4.6.2", 741 + "eventemitter2": "~0.4.13", 742 + "exit": "~0.1.2", 743 + "findup-sync": "~5.0.0", 744 + "glob": "~7.1.6", 745 + "grunt-cli": "~1.4.3", 746 + "grunt-known-options": "~2.0.0", 747 + "grunt-legacy-log": "~3.0.0", 748 + "grunt-legacy-util": "~2.0.1", 749 + "iconv-lite": "~0.6.3", 750 + "js-yaml": "~3.14.0", 751 + "minimatch": "~3.0.4", 752 + "nopt": "~3.0.6" 753 + }, 754 + "bin": { 755 + "grunt": "bin/grunt" 756 + }, 757 + "engines": { 758 + "node": ">=16" 759 + } 760 + }, 761 + "node_modules/grunt-cli": { 762 + "version": "1.4.3", 763 + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", 764 + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", 765 + "dependencies": { 766 + "grunt-known-options": "~2.0.0", 767 + "interpret": "~1.1.0", 768 + "liftup": "~3.0.1", 769 + "nopt": "~4.0.1", 770 + "v8flags": "~3.2.0" 771 + }, 772 + "bin": { 773 + "grunt": "bin/grunt" 774 + }, 775 + "engines": { 776 + "node": ">=10" 777 + } 778 + }, 779 + "node_modules/grunt-cli/node_modules/nopt": { 780 + "version": "4.0.3", 781 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 782 + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 783 + "dependencies": { 784 + "abbrev": "1", 785 + "osenv": "^0.1.4" 786 + }, 787 + "bin": { 788 + "nopt": "bin/nopt.js" 789 + } 790 + }, 791 + "node_modules/grunt-contrib-concat": { 792 + "version": "2.1.0", 793 + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", 794 + "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", 795 + "dependencies": { 796 + "chalk": "^4.1.2", 797 + "source-map": "^0.5.3" 798 + }, 799 + "engines": { 800 + "node": ">=0.12.0" 801 + }, 802 + "peerDependencies": { 803 + "grunt": ">=1.4.1" 804 + } 805 + }, 806 + "node_modules/grunt-contrib-concat/node_modules/source-map": { 807 + "version": "0.5.7", 808 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 809 + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 810 + "engines": { 811 + "node": ">=0.10.0" 812 + } 813 + }, 814 + "node_modules/grunt-contrib-copy": { 815 + "version": "1.0.0", 816 + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", 817 + "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", 818 + "dependencies": { 819 + "chalk": "^1.1.1", 820 + "file-sync-cmp": "^0.1.0" 821 + }, 822 + "engines": { 823 + "node": ">=0.10.0" 824 + } 825 + }, 826 + "node_modules/grunt-contrib-copy/node_modules/ansi-styles": { 827 + "version": "2.2.1", 828 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 829 + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", 830 + "engines": { 831 + "node": ">=0.10.0" 832 + } 833 + }, 834 + "node_modules/grunt-contrib-copy/node_modules/chalk": { 835 + "version": "1.1.3", 836 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 837 + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", 838 + "dependencies": { 839 + "ansi-styles": "^2.2.1", 840 + "escape-string-regexp": "^1.0.2", 841 + "has-ansi": "^2.0.0", 842 + "strip-ansi": "^3.0.0", 843 + "supports-color": "^2.0.0" 844 + }, 845 + "engines": { 846 + "node": ">=0.10.0" 847 + } 848 + }, 849 + "node_modules/grunt-contrib-copy/node_modules/supports-color": { 850 + "version": "2.0.0", 851 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 852 + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", 853 + "engines": { 854 + "node": ">=0.8.0" 855 + } 856 + }, 857 + "node_modules/grunt-contrib-cssmin": { 858 + "version": "5.0.0", 859 + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-5.0.0.tgz", 860 + "integrity": "sha512-SNp4H4+85mm2xaHYi83FBHuOXylpi5vcwgtNoYCZBbkgeXQXoeTAKa59VODRb0woTDBvxouP91Ff5PzCkikg6g==", 861 + "dependencies": { 862 + "chalk": "^4.1.2", 863 + "clean-css": "^5.3.2", 864 + "maxmin": "^3.0.0" 865 + }, 866 + "engines": { 867 + "node": ">=14.0" 868 + } 869 + }, 870 + "node_modules/grunt-contrib-jshint": { 871 + "version": "3.2.0", 872 + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz", 873 + "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==", 874 + "dependencies": { 875 + "chalk": "~4.1.2", 876 + "hooker": "^0.2.3", 877 + "jshint": "~2.13.4" 878 + }, 879 + "engines": { 880 + "node": ">=10" 881 + } 882 + }, 883 + "node_modules/grunt-contrib-uglify": { 884 + "version": "5.2.2", 885 + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.2.2.tgz", 886 + "integrity": "sha512-ITxiWxrjjP+RZu/aJ5GLvdele+sxlznh+6fK9Qckio5ma8f7Iv8woZjRkGfafvpuygxNefOJNc+hfjjBayRn2Q==", 887 + "dependencies": { 888 + "chalk": "^4.1.2", 889 + "maxmin": "^3.0.0", 890 + "uglify-js": "^3.16.1", 891 + "uri-path": "^1.0.0" 892 + }, 893 + "engines": { 894 + "node": ">=12" 895 + } 896 + }, 897 + "node_modules/grunt-contrib-uglify/node_modules/uri-path": { 898 + "version": "1.0.0", 899 + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", 900 + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", 901 + "engines": { 902 + "node": ">= 0.10" 903 + } 904 + }, 905 + "node_modules/grunt-known-options": { 906 + "version": "2.0.0", 907 + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", 908 + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", 909 + "engines": { 910 + "node": ">=0.10.0" 911 + } 912 + }, 913 + "node_modules/grunt-legacy-log": { 914 + "version": "3.0.0", 915 + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", 916 + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", 917 + "dependencies": { 918 + "colors": "~1.1.2", 919 + "grunt-legacy-log-utils": "~2.1.0", 920 + "hooker": "~0.2.3", 921 + "lodash": "~4.17.19" 922 + }, 923 + "engines": { 924 + "node": ">= 0.10.0" 925 + } 926 + }, 927 + "node_modules/grunt-legacy-log-utils": { 928 + "version": "2.1.0", 929 + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", 930 + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", 931 + "dependencies": { 932 + "chalk": "~4.1.0", 933 + "lodash": "~4.17.19" 934 + }, 935 + "engines": { 936 + "node": ">=10" 937 + } 938 + }, 939 + "node_modules/grunt-legacy-util": { 940 + "version": "2.0.1", 941 + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", 942 + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", 943 + "dependencies": { 944 + "async": "~3.2.0", 945 + "exit": "~0.1.2", 946 + "getobject": "~1.0.0", 947 + "hooker": "~0.2.3", 948 + "lodash": "~4.17.21", 949 + "underscore.string": "~3.3.5", 950 + "which": "~2.0.2" 951 + }, 952 + "engines": { 953 + "node": ">=10" 954 + } 955 + }, 956 + "node_modules/grunt/node_modules/eventemitter2": { 957 + "version": "0.4.14", 958 + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", 959 + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" 960 + }, 961 + "node_modules/grunt/node_modules/iconv-lite": { 962 + "version": "0.6.3", 963 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 964 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 965 + "dependencies": { 966 + "safer-buffer": ">= 2.1.2 < 3.0.0" 967 + }, 968 + "engines": { 969 + "node": ">=0.10.0" 970 + } 971 + }, 972 + "node_modules/gzip-size": { 973 + "version": "5.1.1", 974 + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", 975 + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", 976 + "dependencies": { 977 + "duplexer": "^0.1.1", 978 + "pify": "^4.0.1" 979 + }, 980 + "engines": { 981 + "node": ">=6" 982 + } 983 + }, 984 + "node_modules/has": { 985 + "version": "1.0.3", 986 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 987 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 988 + "dependencies": { 989 + "function-bind": "^1.1.1" 990 + }, 991 + "engines": { 992 + "node": ">= 0.4.0" 993 + } 994 + }, 995 + "node_modules/has-ansi": { 996 + "version": "2.0.0", 997 + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 998 + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", 999 + "dependencies": { 1000 + "ansi-regex": "^2.0.0" 1001 + }, 1002 + "engines": { 1003 + "node": ">=0.10.0" 1004 + } 1005 + }, 1006 + "node_modules/has-flag": { 1007 + "version": "4.0.0", 1008 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1009 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1010 + "engines": { 1011 + "node": ">=8" 1012 + } 1013 + }, 1014 + "node_modules/has-symbols": { 1015 + "version": "1.0.3", 1016 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1017 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1018 + "engines": { 1019 + "node": ">= 0.4" 1020 + }, 1021 + "funding": { 1022 + "url": "https://github.com/sponsors/ljharb" 1023 + } 1024 + }, 1025 + "node_modules/homedir-polyfill": { 1026 + "version": "1.0.3", 1027 + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", 1028 + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", 1029 + "dependencies": { 1030 + "parse-passwd": "^1.0.0" 1031 + }, 1032 + "engines": { 1033 + "node": ">=0.10.0" 1034 + } 1035 + }, 1036 + "node_modules/hooker": { 1037 + "version": "0.2.3", 1038 + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 1039 + "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", 1040 + "engines": { 1041 + "node": "*" 1042 + } 1043 + }, 1044 + "node_modules/htmlparser2": { 1045 + "version": "3.8.3", 1046 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 1047 + "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", 1048 + "dependencies": { 1049 + "domelementtype": "1", 1050 + "domhandler": "2.3", 1051 + "domutils": "1.5", 1052 + "entities": "1.0", 1053 + "readable-stream": "1.1" 1054 + } 1055 + }, 1056 + "node_modules/http-errors": { 1057 + "version": "2.0.0", 1058 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1059 + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1060 + "dependencies": { 1061 + "depd": "2.0.0", 1062 + "inherits": "2.0.4", 1063 + "setprototypeof": "1.2.0", 1064 + "statuses": "2.0.1", 1065 + "toidentifier": "1.0.1" 1066 + }, 1067 + "engines": { 1068 + "node": ">= 0.8" 1069 + } 1070 + }, 1071 + "node_modules/iconv-lite": { 1072 + "version": "0.4.24", 1073 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1074 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1075 + "dependencies": { 1076 + "safer-buffer": ">= 2.1.2 < 3" 1077 + }, 1078 + "engines": { 1079 + "node": ">=0.10.0" 1080 + } 1081 + }, 1082 + "node_modules/inflight": { 1083 + "version": "1.0.6", 1084 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1085 + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1086 + "dependencies": { 1087 + "once": "^1.3.0", 1088 + "wrappy": "1" 1089 + } 1090 + }, 1091 + "node_modules/inherits": { 1092 + "version": "2.0.4", 1093 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1094 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1095 + }, 1096 + "node_modules/ini": { 1097 + "version": "1.3.8", 1098 + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1099 + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 1100 + }, 1101 + "node_modules/interpret": { 1102 + "version": "1.1.0", 1103 + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", 1104 + "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==" 1105 + }, 1106 + "node_modules/ipaddr.js": { 1107 + "version": "1.9.1", 1108 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1109 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1110 + "engines": { 1111 + "node": ">= 0.10" 1112 + } 1113 + }, 1114 + "node_modules/is-absolute": { 1115 + "version": "1.0.0", 1116 + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", 1117 + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", 1118 + "dependencies": { 1119 + "is-relative": "^1.0.0", 1120 + "is-windows": "^1.0.1" 1121 + }, 1122 + "engines": { 1123 + "node": ">=0.10.0" 1124 + } 1125 + }, 1126 + "node_modules/is-core-module": { 1127 + "version": "2.11.0", 1128 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1129 + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1130 + "dependencies": { 1131 + "has": "^1.0.3" 1132 + }, 1133 + "funding": { 1134 + "url": "https://github.com/sponsors/ljharb" 1135 + } 1136 + }, 1137 + "node_modules/is-extglob": { 1138 + "version": "2.1.1", 1139 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1140 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1141 + "engines": { 1142 + "node": ">=0.10.0" 1143 + } 1144 + }, 1145 + "node_modules/is-glob": { 1146 + "version": "4.0.3", 1147 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1148 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1149 + "dependencies": { 1150 + "is-extglob": "^2.1.1" 1151 + }, 1152 + "engines": { 1153 + "node": ">=0.10.0" 1154 + } 1155 + }, 1156 + "node_modules/is-number": { 1157 + "version": "7.0.0", 1158 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1159 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1160 + "engines": { 1161 + "node": ">=0.12.0" 1162 + } 1163 + }, 1164 + "node_modules/is-plain-object": { 1165 + "version": "2.0.4", 1166 + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1167 + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1168 + "dependencies": { 1169 + "isobject": "^3.0.1" 1170 + }, 1171 + "engines": { 1172 + "node": ">=0.10.0" 1173 + } 1174 + }, 1175 + "node_modules/is-relative": { 1176 + "version": "1.0.0", 1177 + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", 1178 + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", 1179 + "dependencies": { 1180 + "is-unc-path": "^1.0.0" 1181 + }, 1182 + "engines": { 1183 + "node": ">=0.10.0" 1184 + } 1185 + }, 1186 + "node_modules/is-unc-path": { 1187 + "version": "1.0.0", 1188 + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", 1189 + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", 1190 + "dependencies": { 1191 + "unc-path-regex": "^0.1.2" 1192 + }, 1193 + "engines": { 1194 + "node": ">=0.10.0" 1195 + } 1196 + }, 1197 + "node_modules/is-windows": { 1198 + "version": "1.0.2", 1199 + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1200 + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 1201 + "engines": { 1202 + "node": ">=0.10.0" 1203 + } 1204 + }, 1205 + "node_modules/isarray": { 1206 + "version": "0.0.1", 1207 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1208 + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" 1209 + }, 1210 + "node_modules/isexe": { 1211 + "version": "2.0.0", 1212 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1213 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 1214 + }, 1215 + "node_modules/isobject": { 1216 + "version": "3.0.1", 1217 + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1218 + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 1219 + "engines": { 1220 + "node": ">=0.10.0" 1221 + } 1222 + }, 1223 + "node_modules/js-yaml": { 1224 + "version": "3.14.1", 1225 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1226 + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1227 + "dependencies": { 1228 + "argparse": "^1.0.7", 1229 + "esprima": "^4.0.0" 1230 + }, 1231 + "bin": { 1232 + "js-yaml": "bin/js-yaml.js" 1233 + } 1234 + }, 1235 + "node_modules/jshint": { 1236 + "version": "2.13.6", 1237 + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", 1238 + "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", 1239 + "dependencies": { 1240 + "cli": "~1.0.0", 1241 + "console-browserify": "1.1.x", 1242 + "exit": "0.1.x", 1243 + "htmlparser2": "3.8.x", 1244 + "lodash": "~4.17.21", 1245 + "minimatch": "~3.0.2", 1246 + "strip-json-comments": "1.0.x" 1247 + }, 1248 + "bin": { 1249 + "jshint": "bin/jshint" 1250 + } 1251 + }, 1252 + "node_modules/kind-of": { 1253 + "version": "6.0.3", 1254 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1255 + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1256 + "engines": { 1257 + "node": ">=0.10.0" 1258 + } 1259 + }, 1260 + "node_modules/liftup": { 1261 + "version": "3.0.1", 1262 + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", 1263 + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", 1264 + "dependencies": { 1265 + "extend": "^3.0.2", 1266 + "findup-sync": "^4.0.0", 1267 + "fined": "^1.2.0", 1268 + "flagged-respawn": "^1.0.1", 1269 + "is-plain-object": "^2.0.4", 1270 + "object.map": "^1.0.1", 1271 + "rechoir": "^0.7.0", 1272 + "resolve": "^1.19.0" 1273 + }, 1274 + "engines": { 1275 + "node": ">=10" 1276 + } 1277 + }, 1278 + "node_modules/liftup/node_modules/findup-sync": { 1279 + "version": "4.0.0", 1280 + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", 1281 + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", 1282 + "dependencies": { 1283 + "detect-file": "^1.0.0", 1284 + "is-glob": "^4.0.0", 1285 + "micromatch": "^4.0.2", 1286 + "resolve-dir": "^1.0.1" 1287 + }, 1288 + "engines": { 1289 + "node": ">= 8" 1290 + } 1291 + }, 1292 + "node_modules/lodash": { 1293 + "version": "4.17.21", 1294 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1295 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1296 + }, 1297 + "node_modules/make-iterator": { 1298 + "version": "1.0.1", 1299 + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", 1300 + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", 1301 + "dependencies": { 1302 + "kind-of": "^6.0.2" 1303 + }, 1304 + "engines": { 1305 + "node": ">=0.10.0" 1306 + } 1307 + }, 1308 + "node_modules/map-cache": { 1309 + "version": "0.2.2", 1310 + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1311 + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", 1312 + "engines": { 1313 + "node": ">=0.10.0" 1314 + } 1315 + }, 1316 + "node_modules/maxmin": { 1317 + "version": "3.0.0", 1318 + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", 1319 + "integrity": "sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==", 1320 + "dependencies": { 1321 + "chalk": "^4.1.0", 1322 + "figures": "^3.2.0", 1323 + "gzip-size": "^5.1.1", 1324 + "pretty-bytes": "^5.3.0" 1325 + }, 1326 + "engines": { 1327 + "node": ">=10" 1328 + }, 1329 + "funding": { 1330 + "url": "https://github.com/sponsors/sindresorhus" 1331 + } 1332 + }, 1333 + "node_modules/media-typer": { 1334 + "version": "0.3.0", 1335 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1336 + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1337 + "engines": { 1338 + "node": ">= 0.6" 1339 + } 1340 + }, 1341 + "node_modules/micromatch": { 1342 + "version": "4.0.5", 1343 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1344 + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1345 + "dependencies": { 1346 + "braces": "^3.0.2", 1347 + "picomatch": "^2.3.1" 1348 + }, 1349 + "engines": { 1350 + "node": ">=8.6" 1351 + } 1352 + }, 1353 + "node_modules/mime": { 1354 + "version": "1.6.0", 1355 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1356 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1357 + "bin": { 1358 + "mime": "cli.js" 1359 + }, 1360 + "engines": { 1361 + "node": ">=4" 1362 + } 1363 + }, 1364 + "node_modules/mime-db": { 1365 + "version": "1.52.0", 1366 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1367 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1368 + "engines": { 1369 + "node": ">= 0.6" 1370 + } 1371 + }, 1372 + "node_modules/mime-types": { 1373 + "version": "2.1.35", 1374 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1375 + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1376 + "dependencies": { 1377 + "mime-db": "1.52.0" 1378 + }, 1379 + "engines": { 1380 + "node": ">= 0.6" 1381 + } 1382 + }, 1383 + "node_modules/minimatch": { 1384 + "version": "3.0.8", 1385 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", 1386 + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", 1387 + "dependencies": { 1388 + "brace-expansion": "^1.1.7" 1389 + }, 1390 + "engines": { 1391 + "node": "*" 1392 + } 1393 + }, 1394 + "node_modules/ms": { 1395 + "version": "2.0.0", 1396 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1397 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1398 + }, 1399 + "node_modules/negotiator": { 1400 + "version": "0.6.3", 1401 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1402 + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1403 + "engines": { 1404 + "node": ">= 0.6" 1405 + } 1406 + }, 1407 + "node_modules/nopt": { 1408 + "version": "3.0.6", 1409 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1410 + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", 1411 + "dependencies": { 1412 + "abbrev": "1" 1413 + }, 1414 + "bin": { 1415 + "nopt": "bin/nopt.js" 1416 + } 1417 + }, 1418 + "node_modules/object-inspect": { 1419 + "version": "1.12.2", 1420 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1421 + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 1422 + "funding": { 1423 + "url": "https://github.com/sponsors/ljharb" 1424 + } 1425 + }, 1426 + "node_modules/object.defaults": { 1427 + "version": "1.1.0", 1428 + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", 1429 + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", 1430 + "dependencies": { 1431 + "array-each": "^1.0.1", 1432 + "array-slice": "^1.0.0", 1433 + "for-own": "^1.0.0", 1434 + "isobject": "^3.0.0" 1435 + }, 1436 + "engines": { 1437 + "node": ">=0.10.0" 1438 + } 1439 + }, 1440 + "node_modules/object.map": { 1441 + "version": "1.0.1", 1442 + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", 1443 + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", 1444 + "dependencies": { 1445 + "for-own": "^1.0.0", 1446 + "make-iterator": "^1.0.0" 1447 + }, 1448 + "engines": { 1449 + "node": ">=0.10.0" 1450 + } 1451 + }, 1452 + "node_modules/object.pick": { 1453 + "version": "1.3.0", 1454 + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 1455 + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", 1456 + "dependencies": { 1457 + "isobject": "^3.0.1" 1458 + }, 1459 + "engines": { 1460 + "node": ">=0.10.0" 1461 + } 1462 + }, 1463 + "node_modules/on-finished": { 1464 + "version": "2.4.1", 1465 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1466 + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1467 + "dependencies": { 1468 + "ee-first": "1.1.1" 1469 + }, 1470 + "engines": { 1471 + "node": ">= 0.8" 1472 + } 1473 + }, 1474 + "node_modules/once": { 1475 + "version": "1.4.0", 1476 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1477 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1478 + "dependencies": { 1479 + "wrappy": "1" 1480 + } 1481 + }, 1482 + "node_modules/os-homedir": { 1483 + "version": "1.0.2", 1484 + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1485 + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", 1486 + "engines": { 1487 + "node": ">=0.10.0" 1488 + } 1489 + }, 1490 + "node_modules/os-tmpdir": { 1491 + "version": "1.0.2", 1492 + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1493 + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 1494 + "engines": { 1495 + "node": ">=0.10.0" 1496 + } 1497 + }, 1498 + "node_modules/osenv": { 1499 + "version": "0.1.5", 1500 + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 1501 + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 1502 + "dependencies": { 1503 + "os-homedir": "^1.0.0", 1504 + "os-tmpdir": "^1.0.0" 1505 + } 1506 + }, 1507 + "node_modules/parse-filepath": { 1508 + "version": "1.0.2", 1509 + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", 1510 + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", 1511 + "dependencies": { 1512 + "is-absolute": "^1.0.0", 1513 + "map-cache": "^0.2.0", 1514 + "path-root": "^0.1.1" 1515 + }, 1516 + "engines": { 1517 + "node": ">=0.8" 1518 + } 1519 + }, 1520 + "node_modules/parse-passwd": { 1521 + "version": "1.0.0", 1522 + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 1523 + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", 1524 + "engines": { 1525 + "node": ">=0.10.0" 1526 + } 1527 + }, 1528 + "node_modules/parseurl": { 1529 + "version": "1.3.3", 1530 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1531 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1532 + "engines": { 1533 + "node": ">= 0.8" 1534 + } 1535 + }, 1536 + "node_modules/path-is-absolute": { 1537 + "version": "1.0.1", 1538 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1539 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1540 + "engines": { 1541 + "node": ">=0.10.0" 1542 + } 1543 + }, 1544 + "node_modules/path-parse": { 1545 + "version": "1.0.7", 1546 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1547 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1548 + }, 1549 + "node_modules/path-root": { 1550 + "version": "0.1.1", 1551 + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", 1552 + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", 1553 + "dependencies": { 1554 + "path-root-regex": "^0.1.0" 1555 + }, 1556 + "engines": { 1557 + "node": ">=0.10.0" 1558 + } 1559 + }, 1560 + "node_modules/path-root-regex": { 1561 + "version": "0.1.2", 1562 + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", 1563 + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", 1564 + "engines": { 1565 + "node": ">=0.10.0" 1566 + } 1567 + }, 1568 + "node_modules/picomatch": { 1569 + "version": "2.3.1", 1570 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1571 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1572 + "engines": { 1573 + "node": ">=8.6" 1574 + }, 1575 + "funding": { 1576 + "url": "https://github.com/sponsors/jonschlinkert" 1577 + } 1578 + }, 1579 + "node_modules/pify": { 1580 + "version": "4.0.1", 1581 + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 1582 + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 1583 + "engines": { 1584 + "node": ">=6" 1585 + } 1586 + }, 1587 + "node_modules/pretty-bytes": { 1588 + "version": "5.6.0", 1589 + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", 1590 + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", 1591 + "engines": { 1592 + "node": ">=6" 1593 + }, 1594 + "funding": { 1595 + "url": "https://github.com/sponsors/sindresorhus" 1596 + } 1597 + }, 1598 + "node_modules/proxy-addr": { 1599 + "version": "2.0.7", 1600 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1601 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1602 + "dependencies": { 1603 + "forwarded": "0.2.0", 1604 + "ipaddr.js": "1.9.1" 1605 + }, 1606 + "engines": { 1607 + "node": ">= 0.10" 1608 + } 1609 + }, 1610 + "node_modules/qs": { 1611 + "version": "6.11.0", 1612 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1613 + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1614 + "dependencies": { 1615 + "side-channel": "^1.0.4" 1616 + }, 1617 + "engines": { 1618 + "node": ">=0.6" 1619 + }, 1620 + "funding": { 1621 + "url": "https://github.com/sponsors/ljharb" 1622 + } 1623 + }, 1624 + "node_modules/range-parser": { 1625 + "version": "1.2.1", 1626 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1627 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1628 + "engines": { 1629 + "node": ">= 0.6" 1630 + } 1631 + }, 1632 + "node_modules/raw-body": { 1633 + "version": "2.5.1", 1634 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1635 + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1636 + "dependencies": { 1637 + "bytes": "3.1.2", 1638 + "http-errors": "2.0.0", 1639 + "iconv-lite": "0.4.24", 1640 + "unpipe": "1.0.0" 1641 + }, 1642 + "engines": { 1643 + "node": ">= 0.8" 1644 + } 1645 + }, 1646 + "node_modules/readable-stream": { 1647 + "version": "1.1.14", 1648 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1649 + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", 1650 + "dependencies": { 1651 + "core-util-is": "~1.0.0", 1652 + "inherits": "~2.0.1", 1653 + "isarray": "0.0.1", 1654 + "string_decoder": "~0.10.x" 1655 + } 1656 + }, 1657 + "node_modules/rechoir": { 1658 + "version": "0.7.1", 1659 + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", 1660 + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", 1661 + "dependencies": { 1662 + "resolve": "^1.9.0" 1663 + }, 1664 + "engines": { 1665 + "node": ">= 0.10" 1666 + } 1667 + }, 1668 + "node_modules/resolve": { 1669 + "version": "1.22.1", 1670 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1671 + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1672 + "dependencies": { 1673 + "is-core-module": "^2.9.0", 1674 + "path-parse": "^1.0.7", 1675 + "supports-preserve-symlinks-flag": "^1.0.0" 1676 + }, 1677 + "bin": { 1678 + "resolve": "bin/resolve" 1679 + }, 1680 + "funding": { 1681 + "url": "https://github.com/sponsors/ljharb" 1682 + } 1683 + }, 1684 + "node_modules/resolve-dir": { 1685 + "version": "1.0.1", 1686 + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", 1687 + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", 1688 + "dependencies": { 1689 + "expand-tilde": "^2.0.0", 1690 + "global-modules": "^1.0.0" 1691 + }, 1692 + "engines": { 1693 + "node": ">=0.10.0" 1694 + } 1695 + }, 1696 + "node_modules/safe-buffer": { 1697 + "version": "5.2.1", 1698 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1699 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1700 + "funding": [ 1701 + { 1702 + "type": "github", 1703 + "url": "https://github.com/sponsors/feross" 1704 + }, 1705 + { 1706 + "type": "patreon", 1707 + "url": "https://www.patreon.com/feross" 1708 + }, 1709 + { 1710 + "type": "consulting", 1711 + "url": "https://feross.org/support" 1712 + } 1713 + ] 1714 + }, 1715 + "node_modules/safer-buffer": { 1716 + "version": "2.1.2", 1717 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1718 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1719 + }, 1720 + "node_modules/send": { 1721 + "version": "0.18.0", 1722 + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1723 + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1724 + "dependencies": { 1725 + "debug": "2.6.9", 1726 + "depd": "2.0.0", 1727 + "destroy": "1.2.0", 1728 + "encodeurl": "~1.0.2", 1729 + "escape-html": "~1.0.3", 1730 + "etag": "~1.8.1", 1731 + "fresh": "0.5.2", 1732 + "http-errors": "2.0.0", 1733 + "mime": "1.6.0", 1734 + "ms": "2.1.3", 1735 + "on-finished": "2.4.1", 1736 + "range-parser": "~1.2.1", 1737 + "statuses": "2.0.1" 1738 + }, 1739 + "engines": { 1740 + "node": ">= 0.8.0" 1741 + } 1742 + }, 1743 + "node_modules/send/node_modules/ms": { 1744 + "version": "2.1.3", 1745 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1746 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1747 + }, 1748 + "node_modules/serve-static": { 1749 + "version": "1.15.0", 1750 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1751 + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1752 + "dependencies": { 1753 + "encodeurl": "~1.0.2", 1754 + "escape-html": "~1.0.3", 1755 + "parseurl": "~1.3.3", 1756 + "send": "0.18.0" 1757 + }, 1758 + "engines": { 1759 + "node": ">= 0.8.0" 1760 + } 1761 + }, 1762 + "node_modules/setprototypeof": { 1763 + "version": "1.2.0", 1764 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1765 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1766 + }, 1767 + "node_modules/side-channel": { 1768 + "version": "1.0.4", 1769 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1770 + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1771 + "dependencies": { 1772 + "call-bind": "^1.0.0", 1773 + "get-intrinsic": "^1.0.2", 1774 + "object-inspect": "^1.9.0" 1775 + }, 1776 + "funding": { 1777 + "url": "https://github.com/sponsors/ljharb" 1778 + } 1779 + }, 1780 + "node_modules/source-map": { 1781 + "version": "0.6.1", 1782 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1783 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1784 + "engines": { 1785 + "node": ">=0.10.0" 1786 + } 1787 + }, 1788 + "node_modules/sprintf-js": { 1789 + "version": "1.0.3", 1790 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1791 + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" 1792 + }, 1793 + "node_modules/statuses": { 1794 + "version": "2.0.1", 1795 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1796 + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1797 + "engines": { 1798 + "node": ">= 0.8" 1799 + } 1800 + }, 1801 + "node_modules/string_decoder": { 1802 + "version": "0.10.31", 1803 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1804 + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" 1805 + }, 1806 + "node_modules/strip-ansi": { 1807 + "version": "3.0.1", 1808 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1809 + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 1810 + "dependencies": { 1811 + "ansi-regex": "^2.0.0" 1812 + }, 1813 + "engines": { 1814 + "node": ">=0.10.0" 1815 + } 1816 + }, 1817 + "node_modules/strip-json-comments": { 1818 + "version": "1.0.4", 1819 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 1820 + "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", 1821 + "bin": { 1822 + "strip-json-comments": "cli.js" 1823 + }, 1824 + "engines": { 1825 + "node": ">=0.8.0" 1826 + } 1827 + }, 1828 + "node_modules/supports-color": { 1829 + "version": "7.2.0", 1830 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1831 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1832 + "dependencies": { 1833 + "has-flag": "^4.0.0" 1834 + }, 1835 + "engines": { 1836 + "node": ">=8" 1837 + } 1838 + }, 1839 + "node_modules/supports-preserve-symlinks-flag": { 1840 + "version": "1.0.0", 1841 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1842 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1843 + "engines": { 1844 + "node": ">= 0.4" 1845 + }, 1846 + "funding": { 1847 + "url": "https://github.com/sponsors/ljharb" 1848 + } 1849 + }, 1850 + "node_modules/to-regex-range": { 1851 + "version": "5.0.1", 1852 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1853 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1854 + "dependencies": { 1855 + "is-number": "^7.0.0" 1856 + }, 1857 + "engines": { 1858 + "node": ">=8.0" 1859 + } 1860 + }, 1861 + "node_modules/toidentifier": { 1862 + "version": "1.0.1", 1863 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1864 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1865 + "engines": { 1866 + "node": ">=0.6" 1867 + } 1868 + }, 1869 + "node_modules/type-is": { 1870 + "version": "1.6.18", 1871 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1872 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1873 + "dependencies": { 1874 + "media-typer": "0.3.0", 1875 + "mime-types": "~2.1.24" 1876 + }, 1877 + "engines": { 1878 + "node": ">= 0.6" 1879 + } 1880 + }, 1881 + "node_modules/uglify-js": { 1882 + "version": "3.17.4", 1883 + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", 1884 + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", 1885 + "bin": { 1886 + "uglifyjs": "bin/uglifyjs" 1887 + }, 1888 + "engines": { 1889 + "node": ">=0.8.0" 1890 + } 1891 + }, 1892 + "node_modules/unc-path-regex": { 1893 + "version": "0.1.2", 1894 + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 1895 + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", 1896 + "engines": { 1897 + "node": ">=0.10.0" 1898 + } 1899 + }, 1900 + "node_modules/underscore.string": { 1901 + "version": "3.3.6", 1902 + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", 1903 + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", 1904 + "dependencies": { 1905 + "sprintf-js": "^1.1.1", 1906 + "util-deprecate": "^1.0.2" 1907 + }, 1908 + "engines": { 1909 + "node": "*" 1910 + } 1911 + }, 1912 + "node_modules/underscore.string/node_modules/sprintf-js": { 1913 + "version": "1.1.2", 1914 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 1915 + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" 1916 + }, 1917 + "node_modules/unpipe": { 1918 + "version": "1.0.0", 1919 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1920 + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1921 + "engines": { 1922 + "node": ">= 0.8" 1923 + } 1924 + }, 1925 + "node_modules/util-deprecate": { 1926 + "version": "1.0.2", 1927 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1928 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1929 + }, 1930 + "node_modules/v8flags": { 1931 + "version": "3.2.0", 1932 + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", 1933 + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", 1934 + "dependencies": { 1935 + "homedir-polyfill": "^1.0.1" 1936 + }, 1937 + "engines": { 1938 + "node": ">= 0.10" 1939 + } 1940 + }, 1941 + "node_modules/which": { 1942 + "version": "2.0.2", 1943 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1944 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1945 + "dependencies": { 1946 + "isexe": "^2.0.0" 1947 + }, 1948 + "bin": { 1949 + "node-which": "bin/node-which" 1950 + }, 1951 + "engines": { 1952 + "node": ">= 8" 1953 + } 1954 + }, 1955 + "node_modules/wrappy": { 1956 + "version": "1.0.2", 1957 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1958 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1959 + } 1960 + }, 1961 + "dependencies": { 1962 + "abbrev": { 1963 + "version": "1.1.1", 1964 + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 1965 + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 1966 + }, 1967 + "accepts": { 1968 + "version": "1.3.8", 1969 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1970 + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1971 + "requires": { 1972 + "mime-types": "~2.1.34", 1973 + "negotiator": "0.6.3" 1974 + } 1975 + }, 1976 + "ansi-regex": { 1977 + "version": "2.1.1", 1978 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1979 + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" 1980 + }, 1981 + "ansi-styles": { 1982 + "version": "4.3.0", 1983 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1984 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1985 + "requires": { 1986 + "color-convert": "^2.0.1" 1987 + } 1988 + }, 1989 + "argparse": { 1990 + "version": "1.0.10", 1991 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1992 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1993 + "requires": { 1994 + "sprintf-js": "~1.0.2" 1995 + } 1996 + }, 1997 + "array-each": { 1998 + "version": "1.0.1", 1999 + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", 2000 + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" 2001 + }, 2002 + "array-slice": { 2003 + "version": "1.1.0", 2004 + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", 2005 + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" 2006 + }, 2007 + "async": { 2008 + "version": "3.2.4", 2009 + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 2010 + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 2011 + }, 2012 + "balanced-match": { 2013 + "version": "1.0.2", 2014 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2015 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 2016 + }, 2017 + "body-parser": { 2018 + "version": "1.20.1", 2019 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 2020 + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 2021 + "requires": { 2022 + "bytes": "3.1.2", 2023 + "content-type": "~1.0.4", 2024 + "debug": "2.6.9", 2025 + "depd": "2.0.0", 2026 + "destroy": "1.2.0", 2027 + "http-errors": "2.0.0", 2028 + "iconv-lite": "0.4.24", 2029 + "on-finished": "2.4.1", 2030 + "qs": "6.11.0", 2031 + "raw-body": "2.5.1", 2032 + "type-is": "~1.6.18", 2033 + "unpipe": "1.0.0" 2034 + } 2035 + }, 2036 + "brace-expansion": { 2037 + "version": "1.1.11", 2038 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2039 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2040 + "requires": { 2041 + "balanced-match": "^1.0.0", 2042 + "concat-map": "0.0.1" 2043 + } 2044 + }, 2045 + "braces": { 2046 + "version": "3.0.2", 2047 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2048 + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2049 + "requires": { 2050 + "fill-range": "^7.0.1" 2051 + } 2052 + }, 2053 + "bytes": { 2054 + "version": "3.1.2", 2055 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 2056 + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 2057 + }, 2058 + "call-bind": { 2059 + "version": "1.0.2", 2060 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 2061 + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 2062 + "requires": { 2063 + "function-bind": "^1.1.1", 2064 + "get-intrinsic": "^1.0.2" 2065 + } 2066 + }, 2067 + "chalk": { 2068 + "version": "4.1.2", 2069 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2070 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2071 + "requires": { 2072 + "ansi-styles": "^4.1.0", 2073 + "supports-color": "^7.1.0" 2074 + } 2075 + }, 2076 + "clean-css": { 2077 + "version": "5.3.2", 2078 + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", 2079 + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", 2080 + "requires": { 2081 + "source-map": "~0.6.0" 2082 + } 2083 + }, 2084 + "cli": { 2085 + "version": "1.0.1", 2086 + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 2087 + "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", 2088 + "requires": { 2089 + "exit": "0.1.2", 2090 + "glob": "^7.1.1" 2091 + } 2092 + }, 2093 + "color-convert": { 2094 + "version": "2.0.1", 2095 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2096 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2097 + "requires": { 2098 + "color-name": "~1.1.4" 2099 + } 2100 + }, 2101 + "color-name": { 2102 + "version": "1.1.4", 2103 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2104 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2105 + }, 2106 + "colors": { 2107 + "version": "1.1.2", 2108 + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 2109 + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==" 2110 + }, 2111 + "concat-map": { 2112 + "version": "0.0.1", 2113 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2114 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 2115 + }, 2116 + "console-browserify": { 2117 + "version": "1.1.0", 2118 + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 2119 + "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", 2120 + "requires": { 2121 + "date-now": "^0.1.4" 2122 + } 2123 + }, 2124 + "content-disposition": { 2125 + "version": "0.5.4", 2126 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 2127 + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 2128 + "requires": { 2129 + "safe-buffer": "5.2.1" 2130 + } 2131 + }, 2132 + "content-type": { 2133 + "version": "1.0.4", 2134 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 2135 + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 2136 + }, 2137 + "cookie": { 2138 + "version": "0.5.0", 2139 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 2140 + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 2141 + }, 2142 + "core-util-is": { 2143 + "version": "1.0.3", 2144 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 2145 + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 2146 + }, 2147 + "date-now": { 2148 + "version": "0.1.4", 2149 + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 2150 + "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==" 2151 + }, 2152 + "dateformat": { 2153 + "version": "4.6.3", 2154 + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", 2155 + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" 2156 + }, 2157 + "debug": { 2158 + "version": "2.6.9", 2159 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2160 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2161 + "requires": { 2162 + "ms": "2.0.0" 2163 + } 2164 + }, 2165 + "depd": { 2166 + "version": "2.0.0", 2167 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 2168 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 2169 + }, 2170 + "destroy": { 2171 + "version": "1.2.0", 2172 + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 2173 + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 2174 + }, 2175 + "detect-file": { 2176 + "version": "1.0.0", 2177 + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", 2178 + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" 2179 + }, 2180 + "dom-serializer": { 2181 + "version": "0.2.2", 2182 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", 2183 + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", 2184 + "requires": { 2185 + "domelementtype": "^2.0.1", 2186 + "entities": "^2.0.0" 2187 + }, 2188 + "dependencies": { 2189 + "domelementtype": { 2190 + "version": "2.3.0", 2191 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 2192 + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" 2193 + }, 2194 + "entities": { 2195 + "version": "2.2.0", 2196 + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 2197 + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" 2198 + } 2199 + } 2200 + }, 2201 + "domelementtype": { 2202 + "version": "1.3.1", 2203 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 2204 + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 2205 + }, 2206 + "domhandler": { 2207 + "version": "2.3.0", 2208 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 2209 + "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", 2210 + "requires": { 2211 + "domelementtype": "1" 2212 + } 2213 + }, 2214 + "domutils": { 2215 + "version": "1.5.1", 2216 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 2217 + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", 2218 + "requires": { 2219 + "dom-serializer": "0", 2220 + "domelementtype": "1" 2221 + } 2222 + }, 2223 + "duplexer": { 2224 + "version": "0.1.2", 2225 + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", 2226 + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" 2227 + }, 2228 + "ee-first": { 2229 + "version": "1.1.1", 2230 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 2231 + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 2232 + }, 2233 + "encodeurl": { 2234 + "version": "1.0.2", 2235 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2236 + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 2237 + }, 2238 + "entities": { 2239 + "version": "1.0.0", 2240 + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 2241 + "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==" 2242 + }, 2243 + "escape-html": { 2244 + "version": "1.0.3", 2245 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2246 + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 2247 + }, 2248 + "escape-string-regexp": { 2249 + "version": "1.0.5", 2250 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2251 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" 2252 + }, 2253 + "esprima": { 2254 + "version": "4.0.1", 2255 + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 2256 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 2257 + }, 2258 + "etag": { 2259 + "version": "1.8.1", 2260 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 2261 + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 2262 + }, 2263 + "exit": { 2264 + "version": "0.1.2", 2265 + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 2266 + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" 2267 + }, 2268 + "expand-tilde": { 2269 + "version": "2.0.2", 2270 + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", 2271 + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", 2272 + "requires": { 2273 + "homedir-polyfill": "^1.0.1" 2274 + } 2275 + }, 2276 + "express": { 2277 + "version": "4.18.2", 2278 + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 2279 + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 2280 + "requires": { 2281 + "accepts": "~1.3.8", 2282 + "array-flatten": "1.1.1", 2283 + "body-parser": "1.20.1", 2284 + "content-disposition": "0.5.4", 2285 + "content-type": "~1.0.4", 2286 + "cookie": "0.5.0", 2287 + "cookie-signature": "1.0.6", 2288 + "debug": "2.6.9", 2289 + "depd": "2.0.0", 2290 + "encodeurl": "~1.0.2", 2291 + "escape-html": "~1.0.3", 2292 + "etag": "~1.8.1", 2293 + "finalhandler": "1.2.0", 2294 + "fresh": "0.5.2", 2295 + "http-errors": "2.0.0", 2296 + "merge-descriptors": "1.0.1", 2297 + "methods": "~1.1.2", 2298 + "on-finished": "2.4.1", 2299 + "parseurl": "~1.3.3", 2300 + "path-to-regexp": "0.1.7", 2301 + "proxy-addr": "~2.0.7", 2302 + "qs": "6.11.0", 2303 + "range-parser": "~1.2.1", 2304 + "safe-buffer": "5.2.1", 2305 + "send": "0.18.0", 2306 + "serve-static": "1.15.0", 2307 + "setprototypeof": "1.2.0", 2308 + "statuses": "2.0.1", 2309 + "type-is": "~1.6.18", 2310 + "utils-merge": "1.0.1", 2311 + "vary": "~1.1.2" 2312 + }, 2313 + "dependencies": { 2314 + "array-flatten": { 2315 + "version": "1.1.1", 2316 + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 2317 + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 2318 + }, 2319 + "cookie-signature": { 2320 + "version": "1.0.6", 2321 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2322 + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 2323 + }, 2324 + "merge-descriptors": { 2325 + "version": "1.0.1", 2326 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2327 + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 2328 + }, 2329 + "methods": { 2330 + "version": "1.1.2", 2331 + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2332 + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 2333 + }, 2334 + "path-to-regexp": { 2335 + "version": "0.1.7", 2336 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2337 + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 2338 + }, 2339 + "utils-merge": { 2340 + "version": "1.0.1", 2341 + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2342 + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2343 + }, 2344 + "vary": { 2345 + "version": "1.1.2", 2346 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2347 + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2348 + } 2349 + } 2350 + }, 2351 + "extend": { 2352 + "version": "3.0.2", 2353 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 2354 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 2355 + }, 2356 + "figures": { 2357 + "version": "3.2.0", 2358 + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 2359 + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 2360 + "requires": { 2361 + "escape-string-regexp": "^1.0.5" 2362 + } 2363 + }, 2364 + "file-sync-cmp": { 2365 + "version": "0.1.1", 2366 + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", 2367 + "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==" 2368 + }, 2369 + "fill-range": { 2370 + "version": "7.0.1", 2371 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2372 + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2373 + "requires": { 2374 + "to-regex-range": "^5.0.1" 2375 + } 2376 + }, 2377 + "finalhandler": { 2378 + "version": "1.2.0", 2379 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 2380 + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 2381 + "requires": { 2382 + "debug": "2.6.9", 2383 + "encodeurl": "~1.0.2", 2384 + "escape-html": "~1.0.3", 2385 + "on-finished": "2.4.1", 2386 + "parseurl": "~1.3.3", 2387 + "statuses": "2.0.1", 2388 + "unpipe": "~1.0.0" 2389 + } 2390 + }, 2391 + "findup-sync": { 2392 + "version": "5.0.0", 2393 + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", 2394 + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", 2395 + "requires": { 2396 + "detect-file": "^1.0.0", 2397 + "is-glob": "^4.0.3", 2398 + "micromatch": "^4.0.4", 2399 + "resolve-dir": "^1.0.1" 2400 + } 2401 + }, 2402 + "fined": { 2403 + "version": "1.2.0", 2404 + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", 2405 + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", 2406 + "requires": { 2407 + "expand-tilde": "^2.0.2", 2408 + "is-plain-object": "^2.0.3", 2409 + "object.defaults": "^1.1.0", 2410 + "object.pick": "^1.2.0", 2411 + "parse-filepath": "^1.0.1" 2412 + } 2413 + }, 2414 + "flagged-respawn": { 2415 + "version": "1.0.1", 2416 + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", 2417 + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" 2418 + }, 2419 + "for-in": { 2420 + "version": "1.0.2", 2421 + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 2422 + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" 2423 + }, 2424 + "for-own": { 2425 + "version": "1.0.0", 2426 + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", 2427 + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", 2428 + "requires": { 2429 + "for-in": "^1.0.1" 2430 + } 2431 + }, 2432 + "forwarded": { 2433 + "version": "0.2.0", 2434 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2435 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 2436 + }, 2437 + "fresh": { 2438 + "version": "0.5.2", 2439 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2440 + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 2441 + }, 2442 + "fs.realpath": { 2443 + "version": "1.0.0", 2444 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2445 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 2446 + }, 2447 + "function-bind": { 2448 + "version": "1.1.1", 2449 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2450 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 2451 + }, 2452 + "get-intrinsic": { 2453 + "version": "1.1.3", 2454 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 2455 + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 2456 + "requires": { 2457 + "function-bind": "^1.1.1", 2458 + "has": "^1.0.3", 2459 + "has-symbols": "^1.0.3" 2460 + } 2461 + }, 2462 + "getobject": { 2463 + "version": "1.0.2", 2464 + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", 2465 + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==" 2466 + }, 2467 + "glob": { 2468 + "version": "7.1.7", 2469 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 2470 + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 2471 + "requires": { 2472 + "fs.realpath": "^1.0.0", 2473 + "inflight": "^1.0.4", 2474 + "inherits": "2", 2475 + "minimatch": "^3.0.4", 2476 + "once": "^1.3.0", 2477 + "path-is-absolute": "^1.0.0" 2478 + } 2479 + }, 2480 + "global-modules": { 2481 + "version": "1.0.0", 2482 + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", 2483 + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", 2484 + "requires": { 2485 + "global-prefix": "^1.0.1", 2486 + "is-windows": "^1.0.1", 2487 + "resolve-dir": "^1.0.0" 2488 + } 2489 + }, 2490 + "global-prefix": { 2491 + "version": "1.0.2", 2492 + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", 2493 + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", 2494 + "requires": { 2495 + "expand-tilde": "^2.0.2", 2496 + "homedir-polyfill": "^1.0.1", 2497 + "ini": "^1.3.4", 2498 + "is-windows": "^1.0.1", 2499 + "which": "^1.2.14" 2500 + }, 2501 + "dependencies": { 2502 + "which": { 2503 + "version": "1.3.1", 2504 + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2505 + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2506 + "requires": { 2507 + "isexe": "^2.0.0" 2508 + } 2509 + } 2510 + } 2511 + }, 2512 + "grunt": { 2513 + "version": "1.6.1", 2514 + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", 2515 + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", 2516 + "requires": { 2517 + "dateformat": "~4.6.2", 2518 + "eventemitter2": "~0.4.13", 2519 + "exit": "~0.1.2", 2520 + "findup-sync": "~5.0.0", 2521 + "glob": "~7.1.6", 2522 + "grunt-cli": "~1.4.3", 2523 + "grunt-known-options": "~2.0.0", 2524 + "grunt-legacy-log": "~3.0.0", 2525 + "grunt-legacy-util": "~2.0.1", 2526 + "iconv-lite": "~0.6.3", 2527 + "js-yaml": "~3.14.0", 2528 + "minimatch": "~3.0.4", 2529 + "nopt": "~3.0.6" 2530 + }, 2531 + "dependencies": { 2532 + "eventemitter2": { 2533 + "version": "0.4.14", 2534 + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", 2535 + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" 2536 + }, 2537 + "iconv-lite": { 2538 + "version": "0.6.3", 2539 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 2540 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 2541 + "requires": { 2542 + "safer-buffer": ">= 2.1.2 < 3.0.0" 2543 + } 2544 + } 2545 + } 2546 + }, 2547 + "grunt-cli": { 2548 + "version": "1.4.3", 2549 + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", 2550 + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", 2551 + "requires": { 2552 + "grunt-known-options": "~2.0.0", 2553 + "interpret": "~1.1.0", 2554 + "liftup": "~3.0.1", 2555 + "nopt": "~4.0.1", 2556 + "v8flags": "~3.2.0" 2557 + }, 2558 + "dependencies": { 2559 + "nopt": { 2560 + "version": "4.0.3", 2561 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 2562 + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 2563 + "requires": { 2564 + "abbrev": "1", 2565 + "osenv": "^0.1.4" 2566 + } 2567 + } 2568 + } 2569 + }, 2570 + "grunt-contrib-concat": { 2571 + "version": "2.1.0", 2572 + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", 2573 + "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", 2574 + "requires": { 2575 + "chalk": "^4.1.2", 2576 + "source-map": "^0.5.3" 2577 + }, 2578 + "dependencies": { 2579 + "source-map": { 2580 + "version": "0.5.7", 2581 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2582 + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 2583 + } 2584 + } 2585 + }, 2586 + "grunt-contrib-copy": { 2587 + "version": "1.0.0", 2588 + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", 2589 + "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", 2590 + "requires": { 2591 + "chalk": "^1.1.1", 2592 + "file-sync-cmp": "^0.1.0" 2593 + }, 2594 + "dependencies": { 2595 + "ansi-styles": { 2596 + "version": "2.2.1", 2597 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 2598 + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" 2599 + }, 2600 + "chalk": { 2601 + "version": "1.1.3", 2602 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 2603 + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", 2604 + "requires": { 2605 + "ansi-styles": "^2.2.1", 2606 + "escape-string-regexp": "^1.0.2", 2607 + "has-ansi": "^2.0.0", 2608 + "strip-ansi": "^3.0.0", 2609 + "supports-color": "^2.0.0" 2610 + } 2611 + }, 2612 + "supports-color": { 2613 + "version": "2.0.0", 2614 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2615 + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" 2616 + } 2617 + } 2618 + }, 2619 + "grunt-contrib-cssmin": { 2620 + "version": "5.0.0", 2621 + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-5.0.0.tgz", 2622 + "integrity": "sha512-SNp4H4+85mm2xaHYi83FBHuOXylpi5vcwgtNoYCZBbkgeXQXoeTAKa59VODRb0woTDBvxouP91Ff5PzCkikg6g==", 2623 + "requires": { 2624 + "chalk": "^4.1.2", 2625 + "clean-css": "^5.3.2", 2626 + "maxmin": "^3.0.0" 2627 + } 2628 + }, 2629 + "grunt-contrib-jshint": { 2630 + "version": "3.2.0", 2631 + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz", 2632 + "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==", 2633 + "requires": { 2634 + "chalk": "~4.1.2", 2635 + "hooker": "^0.2.3", 2636 + "jshint": "~2.13.4" 2637 + } 2638 + }, 2639 + "grunt-contrib-uglify": { 2640 + "version": "5.2.2", 2641 + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.2.2.tgz", 2642 + "integrity": "sha512-ITxiWxrjjP+RZu/aJ5GLvdele+sxlznh+6fK9Qckio5ma8f7Iv8woZjRkGfafvpuygxNefOJNc+hfjjBayRn2Q==", 2643 + "requires": { 2644 + "chalk": "^4.1.2", 2645 + "maxmin": "^3.0.0", 2646 + "uglify-js": "^3.16.1", 2647 + "uri-path": "^1.0.0" 2648 + }, 2649 + "dependencies": { 2650 + "uri-path": { 2651 + "version": "1.0.0", 2652 + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", 2653 + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=" 2654 + } 2655 + } 2656 + }, 2657 + "grunt-known-options": { 2658 + "version": "2.0.0", 2659 + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", 2660 + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==" 2661 + }, 2662 + "grunt-legacy-log": { 2663 + "version": "3.0.0", 2664 + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", 2665 + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", 2666 + "requires": { 2667 + "colors": "~1.1.2", 2668 + "grunt-legacy-log-utils": "~2.1.0", 2669 + "hooker": "~0.2.3", 2670 + "lodash": "~4.17.19" 2671 + } 2672 + }, 2673 + "grunt-legacy-log-utils": { 2674 + "version": "2.1.0", 2675 + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", 2676 + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", 2677 + "requires": { 2678 + "chalk": "~4.1.0", 2679 + "lodash": "~4.17.19" 2680 + } 2681 + }, 2682 + "grunt-legacy-util": { 2683 + "version": "2.0.1", 2684 + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", 2685 + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", 2686 + "requires": { 2687 + "async": "~3.2.0", 2688 + "exit": "~0.1.2", 2689 + "getobject": "~1.0.0", 2690 + "hooker": "~0.2.3", 2691 + "lodash": "~4.17.21", 2692 + "underscore.string": "~3.3.5", 2693 + "which": "~2.0.2" 2694 + } 2695 + }, 2696 + "gzip-size": { 2697 + "version": "5.1.1", 2698 + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", 2699 + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", 2700 + "requires": { 2701 + "duplexer": "^0.1.1", 2702 + "pify": "^4.0.1" 2703 + } 2704 + }, 2705 + "has": { 2706 + "version": "1.0.3", 2707 + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2708 + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2709 + "requires": { 2710 + "function-bind": "^1.1.1" 2711 + } 2712 + }, 2713 + "has-ansi": { 2714 + "version": "2.0.0", 2715 + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2716 + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", 2717 + "requires": { 2718 + "ansi-regex": "^2.0.0" 2719 + } 2720 + }, 2721 + "has-flag": { 2722 + "version": "4.0.0", 2723 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2724 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 2725 + }, 2726 + "has-symbols": { 2727 + "version": "1.0.3", 2728 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2729 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 2730 + }, 2731 + "homedir-polyfill": { 2732 + "version": "1.0.3", 2733 + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", 2734 + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", 2735 + "requires": { 2736 + "parse-passwd": "^1.0.0" 2737 + } 2738 + }, 2739 + "hooker": { 2740 + "version": "0.2.3", 2741 + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 2742 + "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==" 2743 + }, 2744 + "htmlparser2": { 2745 + "version": "3.8.3", 2746 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 2747 + "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", 2748 + "requires": { 2749 + "domelementtype": "1", 2750 + "domhandler": "2.3", 2751 + "domutils": "1.5", 2752 + "entities": "1.0", 2753 + "readable-stream": "1.1" 2754 + } 2755 + }, 2756 + "http-errors": { 2757 + "version": "2.0.0", 2758 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2759 + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2760 + "requires": { 2761 + "depd": "2.0.0", 2762 + "inherits": "2.0.4", 2763 + "setprototypeof": "1.2.0", 2764 + "statuses": "2.0.1", 2765 + "toidentifier": "1.0.1" 2766 + } 2767 + }, 2768 + "iconv-lite": { 2769 + "version": "0.4.24", 2770 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2771 + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2772 + "requires": { 2773 + "safer-buffer": ">= 2.1.2 < 3" 2774 + } 2775 + }, 2776 + "inflight": { 2777 + "version": "1.0.6", 2778 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2779 + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2780 + "requires": { 2781 + "once": "^1.3.0", 2782 + "wrappy": "1" 2783 + } 2784 + }, 2785 + "inherits": { 2786 + "version": "2.0.4", 2787 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2788 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2789 + }, 2790 + "ini": { 2791 + "version": "1.3.8", 2792 + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 2793 + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 2794 + }, 2795 + "interpret": { 2796 + "version": "1.1.0", 2797 + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", 2798 + "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==" 2799 + }, 2800 + "ipaddr.js": { 2801 + "version": "1.9.1", 2802 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2803 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 2804 + }, 2805 + "is-absolute": { 2806 + "version": "1.0.0", 2807 + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", 2808 + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", 2809 + "requires": { 2810 + "is-relative": "^1.0.0", 2811 + "is-windows": "^1.0.1" 2812 + } 2813 + }, 2814 + "is-core-module": { 2815 + "version": "2.11.0", 2816 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 2817 + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 2818 + "requires": { 2819 + "has": "^1.0.3" 2820 + } 2821 + }, 2822 + "is-extglob": { 2823 + "version": "2.1.1", 2824 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2825 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 2826 + }, 2827 + "is-glob": { 2828 + "version": "4.0.3", 2829 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2830 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2831 + "requires": { 2832 + "is-extglob": "^2.1.1" 2833 + } 2834 + }, 2835 + "is-number": { 2836 + "version": "7.0.0", 2837 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2838 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 2839 + }, 2840 + "is-plain-object": { 2841 + "version": "2.0.4", 2842 + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2843 + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2844 + "requires": { 2845 + "isobject": "^3.0.1" 2846 + } 2847 + }, 2848 + "is-relative": { 2849 + "version": "1.0.0", 2850 + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", 2851 + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", 2852 + "requires": { 2853 + "is-unc-path": "^1.0.0" 2854 + } 2855 + }, 2856 + "is-unc-path": { 2857 + "version": "1.0.0", 2858 + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", 2859 + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", 2860 + "requires": { 2861 + "unc-path-regex": "^0.1.2" 2862 + } 2863 + }, 2864 + "is-windows": { 2865 + "version": "1.0.2", 2866 + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 2867 + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" 2868 + }, 2869 + "isarray": { 2870 + "version": "0.0.1", 2871 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2872 + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" 2873 + }, 2874 + "isexe": { 2875 + "version": "2.0.0", 2876 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2877 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 2878 + }, 2879 + "isobject": { 2880 + "version": "3.0.1", 2881 + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2882 + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" 2883 + }, 2884 + "js-yaml": { 2885 + "version": "3.14.1", 2886 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 2887 + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 2888 + "requires": { 2889 + "argparse": "^1.0.7", 2890 + "esprima": "^4.0.0" 2891 + } 2892 + }, 2893 + "jshint": { 2894 + "version": "2.13.6", 2895 + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", 2896 + "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", 2897 + "requires": { 2898 + "cli": "~1.0.0", 2899 + "console-browserify": "1.1.x", 2900 + "exit": "0.1.x", 2901 + "htmlparser2": "3.8.x", 2902 + "lodash": "~4.17.21", 2903 + "minimatch": "~3.0.2", 2904 + "strip-json-comments": "1.0.x" 2905 + } 2906 + }, 2907 + "kind-of": { 2908 + "version": "6.0.3", 2909 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 2910 + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" 2911 + }, 2912 + "liftup": { 2913 + "version": "3.0.1", 2914 + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", 2915 + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", 2916 + "requires": { 2917 + "extend": "^3.0.2", 2918 + "findup-sync": "^4.0.0", 2919 + "fined": "^1.2.0", 2920 + "flagged-respawn": "^1.0.1", 2921 + "is-plain-object": "^2.0.4", 2922 + "object.map": "^1.0.1", 2923 + "rechoir": "^0.7.0", 2924 + "resolve": "^1.19.0" 2925 + }, 2926 + "dependencies": { 2927 + "findup-sync": { 2928 + "version": "4.0.0", 2929 + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", 2930 + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", 2931 + "requires": { 2932 + "detect-file": "^1.0.0", 2933 + "is-glob": "^4.0.0", 2934 + "micromatch": "^4.0.2", 2935 + "resolve-dir": "^1.0.1" 2936 + } 2937 + } 2938 + } 2939 + }, 2940 + "lodash": { 2941 + "version": "4.17.21", 2942 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2943 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 2944 + }, 2945 + "make-iterator": { 2946 + "version": "1.0.1", 2947 + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", 2948 + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", 2949 + "requires": { 2950 + "kind-of": "^6.0.2" 2951 + } 2952 + }, 2953 + "map-cache": { 2954 + "version": "0.2.2", 2955 + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 2956 + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" 2957 + }, 2958 + "maxmin": { 2959 + "version": "3.0.0", 2960 + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", 2961 + "integrity": "sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==", 2962 + "requires": { 2963 + "chalk": "^4.1.0", 2964 + "figures": "^3.2.0", 2965 + "gzip-size": "^5.1.1", 2966 + "pretty-bytes": "^5.3.0" 2967 + } 2968 + }, 2969 + "media-typer": { 2970 + "version": "0.3.0", 2971 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2972 + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 2973 + }, 2974 + "micromatch": { 2975 + "version": "4.0.5", 2976 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2977 + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2978 + "requires": { 2979 + "braces": "^3.0.2", 2980 + "picomatch": "^2.3.1" 2981 + } 2982 + }, 2983 + "mime": { 2984 + "version": "1.6.0", 2985 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2986 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 2987 + }, 2988 + "mime-db": { 2989 + "version": "1.52.0", 2990 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2991 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 2992 + }, 2993 + "mime-types": { 2994 + "version": "2.1.35", 2995 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2996 + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2997 + "requires": { 2998 + "mime-db": "1.52.0" 2999 + } 3000 + }, 3001 + "minimatch": { 3002 + "version": "3.0.8", 3003 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", 3004 + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", 3005 + "requires": { 3006 + "brace-expansion": "^1.1.7" 3007 + } 3008 + }, 3009 + "ms": { 3010 + "version": "2.0.0", 3011 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 3012 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 3013 + }, 3014 + "negotiator": { 3015 + "version": "0.6.3", 3016 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 3017 + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 3018 + }, 3019 + "nopt": { 3020 + "version": "3.0.6", 3021 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 3022 + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", 3023 + "requires": { 3024 + "abbrev": "1" 3025 + } 3026 + }, 3027 + "object-inspect": { 3028 + "version": "1.12.2", 3029 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 3030 + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 3031 + }, 3032 + "object.defaults": { 3033 + "version": "1.1.0", 3034 + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", 3035 + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", 3036 + "requires": { 3037 + "array-each": "^1.0.1", 3038 + "array-slice": "^1.0.0", 3039 + "for-own": "^1.0.0", 3040 + "isobject": "^3.0.0" 3041 + } 3042 + }, 3043 + "object.map": { 3044 + "version": "1.0.1", 3045 + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", 3046 + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", 3047 + "requires": { 3048 + "for-own": "^1.0.0", 3049 + "make-iterator": "^1.0.0" 3050 + } 3051 + }, 3052 + "object.pick": { 3053 + "version": "1.3.0", 3054 + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 3055 + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", 3056 + "requires": { 3057 + "isobject": "^3.0.1" 3058 + } 3059 + }, 3060 + "on-finished": { 3061 + "version": "2.4.1", 3062 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 3063 + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 3064 + "requires": { 3065 + "ee-first": "1.1.1" 3066 + } 3067 + }, 3068 + "once": { 3069 + "version": "1.4.0", 3070 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3071 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3072 + "requires": { 3073 + "wrappy": "1" 3074 + } 3075 + }, 3076 + "os-homedir": { 3077 + "version": "1.0.2", 3078 + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 3079 + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" 3080 + }, 3081 + "os-tmpdir": { 3082 + "version": "1.0.2", 3083 + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 3084 + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" 3085 + }, 3086 + "osenv": { 3087 + "version": "0.1.5", 3088 + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 3089 + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 3090 + "requires": { 3091 + "os-homedir": "^1.0.0", 3092 + "os-tmpdir": "^1.0.0" 3093 + } 3094 + }, 3095 + "parse-filepath": { 3096 + "version": "1.0.2", 3097 + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", 3098 + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", 3099 + "requires": { 3100 + "is-absolute": "^1.0.0", 3101 + "map-cache": "^0.2.0", 3102 + "path-root": "^0.1.1" 3103 + } 3104 + }, 3105 + "parse-passwd": { 3106 + "version": "1.0.0", 3107 + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 3108 + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" 3109 + }, 3110 + "parseurl": { 3111 + "version": "1.3.3", 3112 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 3113 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 3114 + }, 3115 + "path-is-absolute": { 3116 + "version": "1.0.1", 3117 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3118 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" 3119 + }, 3120 + "path-parse": { 3121 + "version": "1.0.7", 3122 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3123 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 3124 + }, 3125 + "path-root": { 3126 + "version": "0.1.1", 3127 + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", 3128 + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", 3129 + "requires": { 3130 + "path-root-regex": "^0.1.0" 3131 + } 3132 + }, 3133 + "path-root-regex": { 3134 + "version": "0.1.2", 3135 + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", 3136 + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" 3137 + }, 3138 + "picomatch": { 3139 + "version": "2.3.1", 3140 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3141 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 3142 + }, 3143 + "pify": { 3144 + "version": "4.0.1", 3145 + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 3146 + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" 3147 + }, 3148 + "pretty-bytes": { 3149 + "version": "5.6.0", 3150 + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", 3151 + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" 3152 + }, 3153 + "proxy-addr": { 3154 + "version": "2.0.7", 3155 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 3156 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 3157 + "requires": { 3158 + "forwarded": "0.2.0", 3159 + "ipaddr.js": "1.9.1" 3160 + } 3161 + }, 3162 + "qs": { 3163 + "version": "6.11.0", 3164 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 3165 + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 3166 + "requires": { 3167 + "side-channel": "^1.0.4" 3168 + } 3169 + }, 3170 + "range-parser": { 3171 + "version": "1.2.1", 3172 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 3173 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 3174 + }, 3175 + "raw-body": { 3176 + "version": "2.5.1", 3177 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 3178 + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 3179 + "requires": { 3180 + "bytes": "3.1.2", 3181 + "http-errors": "2.0.0", 3182 + "iconv-lite": "0.4.24", 3183 + "unpipe": "1.0.0" 3184 + } 3185 + }, 3186 + "readable-stream": { 3187 + "version": "1.1.14", 3188 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 3189 + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", 3190 + "requires": { 3191 + "core-util-is": "~1.0.0", 3192 + "inherits": "~2.0.1", 3193 + "isarray": "0.0.1", 3194 + "string_decoder": "~0.10.x" 3195 + } 3196 + }, 3197 + "rechoir": { 3198 + "version": "0.7.1", 3199 + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", 3200 + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", 3201 + "requires": { 3202 + "resolve": "^1.9.0" 3203 + } 3204 + }, 3205 + "resolve": { 3206 + "version": "1.22.1", 3207 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 3208 + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 3209 + "requires": { 3210 + "is-core-module": "^2.9.0", 3211 + "path-parse": "^1.0.7", 3212 + "supports-preserve-symlinks-flag": "^1.0.0" 3213 + } 3214 + }, 3215 + "resolve-dir": { 3216 + "version": "1.0.1", 3217 + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", 3218 + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", 3219 + "requires": { 3220 + "expand-tilde": "^2.0.0", 3221 + "global-modules": "^1.0.0" 3222 + } 3223 + }, 3224 + "safe-buffer": { 3225 + "version": "5.2.1", 3226 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3227 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 3228 + }, 3229 + "safer-buffer": { 3230 + "version": "2.1.2", 3231 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3232 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3233 + }, 3234 + "send": { 3235 + "version": "0.18.0", 3236 + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 3237 + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 3238 + "requires": { 3239 + "debug": "2.6.9", 3240 + "depd": "2.0.0", 3241 + "destroy": "1.2.0", 3242 + "encodeurl": "~1.0.2", 3243 + "escape-html": "~1.0.3", 3244 + "etag": "~1.8.1", 3245 + "fresh": "0.5.2", 3246 + "http-errors": "2.0.0", 3247 + "mime": "1.6.0", 3248 + "ms": "2.1.3", 3249 + "on-finished": "2.4.1", 3250 + "range-parser": "~1.2.1", 3251 + "statuses": "2.0.1" 3252 + }, 3253 + "dependencies": { 3254 + "ms": { 3255 + "version": "2.1.3", 3256 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3257 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 3258 + } 3259 + } 3260 + }, 3261 + "serve-static": { 3262 + "version": "1.15.0", 3263 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 3264 + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 3265 + "requires": { 3266 + "encodeurl": "~1.0.2", 3267 + "escape-html": "~1.0.3", 3268 + "parseurl": "~1.3.3", 3269 + "send": "0.18.0" 3270 + } 3271 + }, 3272 + "setprototypeof": { 3273 + "version": "1.2.0", 3274 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3275 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 3276 + }, 3277 + "side-channel": { 3278 + "version": "1.0.4", 3279 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3280 + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3281 + "requires": { 3282 + "call-bind": "^1.0.0", 3283 + "get-intrinsic": "^1.0.2", 3284 + "object-inspect": "^1.9.0" 3285 + } 3286 + }, 3287 + "source-map": { 3288 + "version": "0.6.1", 3289 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3290 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 3291 + }, 3292 + "sprintf-js": { 3293 + "version": "1.0.3", 3294 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3295 + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" 3296 + }, 3297 + "statuses": { 3298 + "version": "2.0.1", 3299 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3300 + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 3301 + }, 3302 + "string_decoder": { 3303 + "version": "0.10.31", 3304 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 3305 + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" 3306 + }, 3307 + "strip-ansi": { 3308 + "version": "3.0.1", 3309 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3310 + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 3311 + "requires": { 3312 + "ansi-regex": "^2.0.0" 3313 + } 3314 + }, 3315 + "strip-json-comments": { 3316 + "version": "1.0.4", 3317 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 3318 + "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==" 3319 + }, 3320 + "supports-color": { 3321 + "version": "7.2.0", 3322 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3323 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3324 + "requires": { 3325 + "has-flag": "^4.0.0" 3326 + } 3327 + }, 3328 + "supports-preserve-symlinks-flag": { 3329 + "version": "1.0.0", 3330 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3331 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" 3332 + }, 3333 + "to-regex-range": { 3334 + "version": "5.0.1", 3335 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3336 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3337 + "requires": { 3338 + "is-number": "^7.0.0" 3339 + } 3340 + }, 3341 + "toidentifier": { 3342 + "version": "1.0.1", 3343 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3344 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 3345 + }, 3346 + "type-is": { 3347 + "version": "1.6.18", 3348 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 3349 + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 3350 + "requires": { 3351 + "media-typer": "0.3.0", 3352 + "mime-types": "~2.1.24" 3353 + } 3354 + }, 3355 + "uglify-js": { 3356 + "version": "3.17.4", 3357 + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", 3358 + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" 3359 + }, 3360 + "unc-path-regex": { 3361 + "version": "0.1.2", 3362 + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 3363 + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==" 3364 + }, 3365 + "underscore.string": { 3366 + "version": "3.3.6", 3367 + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", 3368 + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", 3369 + "requires": { 3370 + "sprintf-js": "^1.1.1", 3371 + "util-deprecate": "^1.0.2" 3372 + }, 3373 + "dependencies": { 3374 + "sprintf-js": { 3375 + "version": "1.1.2", 3376 + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 3377 + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" 3378 + } 3379 + } 3380 + }, 3381 + "unpipe": { 3382 + "version": "1.0.0", 3383 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3384 + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 3385 + }, 3386 + "util-deprecate": { 3387 + "version": "1.0.2", 3388 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3389 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 3390 + }, 3391 + "v8flags": { 3392 + "version": "3.2.0", 3393 + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", 3394 + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", 3395 + "requires": { 3396 + "homedir-polyfill": "^1.0.1" 3397 + } 3398 + }, 3399 + "which": { 3400 + "version": "2.0.2", 3401 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3402 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3403 + "requires": { 3404 + "isexe": "^2.0.0" 3405 + } 3406 + }, 3407 + "wrappy": { 3408 + "version": "1.0.2", 3409 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3410 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 3411 + } 3412 + } 3413 + }
+25
package.json
··· 1 + { 2 + "name": "make8bitart.com", 3 + "version": "2.0.0", 4 + "description": "a fun free in-browser pixel art tool for you!", 5 + "main": "server.js", 6 + "scripts": { 7 + "build": "grunt", 8 + "start": "node server.js" 9 + }, 10 + "dependencies": { 11 + "express": "^4.18.2", 12 + "grunt": "^1.6.1", 13 + "grunt-contrib-concat": "^2.1.0", 14 + "grunt-contrib-cssmin": "^5.0.0", 15 + "grunt-contrib-jshint": "^3.2.0", 16 + "grunt-contrib-uglify": "^5.2.2", 17 + "grunt-contrib-copy": "^1.0.0" 18 + }, 19 + "engines": { 20 + "node": "16" 21 + }, 22 + "glitch": { 23 + "projectType": "generated_static" 24 + } 25 + }
+26
server.js
··· 1 + // server.js 2 + // where your node app starts 3 + 4 + // init project 5 + var express = require('express'); 6 + var app = express(); 7 + 8 + // we've started you off with Express, 9 + // but feel free to use whatever libs or frameworks you'd like through `package.json`. 10 + 11 + // http://expressjs.com/en/starter/static-files.html 12 + app.use(express.static('build')) 13 + 14 + // http://expressjs.com/en/starter/basic-routing.html 15 + app.get("/", function (request, response) { 16 + response.sendFile(__dirname + '/index.html'); 17 + }); 18 + 19 + app.get("/service-worker.js", function (request, response) { 20 + response.sendFile(__dirname + '/service-worker.js'); 21 + }); 22 + 23 + // listen for requests :) 24 + var listener = app.listen(process.env.PORT, function () { 25 + console.log('Your app is listening on port ' + listener.address().port); 26 + });
+1402
shrinkwrap.yaml
··· 1 + dependencies: 2 + express: 4.18.2 3 + grunt: 1.5.3 4 + grunt-contrib-concat: 2.1.0 5 + grunt-contrib-cssmin: 4.0.0 6 + grunt-contrib-jshint: 3.2.0 7 + grunt-contrib-uglify: 5.2.2 8 + packages: 9 + /abbrev/1.1.1: 10 + dev: false 11 + resolution: 12 + integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 13 + /accepts/1.3.8: 14 + dependencies: 15 + mime-types: 2.1.35 16 + negotiator: 0.6.3 17 + dev: false 18 + engines: 19 + node: '>= 0.6' 20 + resolution: 21 + integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 22 + /ansi-styles/4.3.0: 23 + dependencies: 24 + color-convert: 2.0.1 25 + dev: false 26 + engines: 27 + node: '>=8' 28 + resolution: 29 + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 30 + /argparse/1.0.10: 31 + dependencies: 32 + sprintf-js: 1.0.3 33 + dev: false 34 + resolution: 35 + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 36 + /array-each/1.0.1: 37 + dev: false 38 + engines: 39 + node: '>=0.10.0' 40 + resolution: 41 + integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== 42 + /array-flatten/1.1.1: 43 + dev: false 44 + resolution: 45 + integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 46 + /array-slice/1.1.0: 47 + dev: false 48 + engines: 49 + node: '>=0.10.0' 50 + resolution: 51 + integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== 52 + /async/3.2.4: 53 + dev: false 54 + resolution: 55 + integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== 56 + /balanced-match/1.0.2: 57 + dev: false 58 + resolution: 59 + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 60 + /body-parser/1.20.1: 61 + dependencies: 62 + bytes: 3.1.2 63 + content-type: 1.0.4 64 + debug: 2.6.9 65 + depd: 2.0.0 66 + destroy: 1.2.0 67 + http-errors: 2.0.0 68 + iconv-lite: 0.4.24 69 + on-finished: 2.4.1 70 + qs: 6.11.0 71 + raw-body: 2.5.1 72 + type-is: 1.6.18 73 + unpipe: 1.0.0 74 + dev: false 75 + engines: 76 + node: '>= 0.8' 77 + npm: 1.2.8000 || >= 1.4.16 78 + resolution: 79 + integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== 80 + /brace-expansion/1.1.11: 81 + dependencies: 82 + balanced-match: 1.0.2 83 + concat-map: 0.0.1 84 + dev: false 85 + resolution: 86 + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 87 + /braces/3.0.2: 88 + dependencies: 89 + fill-range: 7.0.1 90 + dev: false 91 + engines: 92 + node: '>=8' 93 + resolution: 94 + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 95 + /bytes/3.1.2: 96 + dev: false 97 + engines: 98 + node: '>= 0.8' 99 + resolution: 100 + integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 101 + /call-bind/1.0.2: 102 + dependencies: 103 + function-bind: 1.1.1 104 + get-intrinsic: 1.1.3 105 + dev: false 106 + resolution: 107 + integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 108 + /chalk/4.1.2: 109 + dependencies: 110 + ansi-styles: 4.3.0 111 + supports-color: 7.2.0 112 + dev: false 113 + engines: 114 + node: '>=10' 115 + resolution: 116 + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 117 + /clean-css/5.3.1: 118 + dependencies: 119 + source-map: 0.6.1 120 + dev: false 121 + engines: 122 + node: '>= 10.0' 123 + resolution: 124 + integrity: sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== 125 + /cli/1.0.1: 126 + dependencies: 127 + exit: 0.1.2 128 + glob: 7.2.3 129 + dev: false 130 + engines: 131 + node: '>=0.2.5' 132 + resolution: 133 + integrity: sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg== 134 + /color-convert/2.0.1: 135 + dependencies: 136 + color-name: 1.1.4 137 + dev: false 138 + engines: 139 + node: '>=7.0.0' 140 + resolution: 141 + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 142 + /color-name/1.1.4: 143 + dev: false 144 + resolution: 145 + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 146 + /colors/1.1.2: 147 + dev: false 148 + engines: 149 + node: '>=0.1.90' 150 + resolution: 151 + integrity: sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== 152 + /concat-map/0.0.1: 153 + dev: false 154 + resolution: 155 + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 156 + /console-browserify/1.1.0: 157 + dependencies: 158 + date-now: 0.1.4 159 + dev: false 160 + resolution: 161 + integrity: sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg== 162 + /content-disposition/0.5.4: 163 + dependencies: 164 + safe-buffer: 5.2.1 165 + dev: false 166 + engines: 167 + node: '>= 0.6' 168 + resolution: 169 + integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 170 + /content-type/1.0.4: 171 + dev: false 172 + engines: 173 + node: '>= 0.6' 174 + resolution: 175 + integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 176 + /cookie-signature/1.0.6: 177 + dev: false 178 + resolution: 179 + integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 180 + /cookie/0.5.0: 181 + dev: false 182 + engines: 183 + node: '>= 0.6' 184 + resolution: 185 + integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 186 + /core-util-is/1.0.3: 187 + dev: false 188 + resolution: 189 + integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 190 + /date-now/0.1.4: 191 + dev: false 192 + resolution: 193 + integrity: sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw== 194 + /dateformat/3.0.3: 195 + dev: false 196 + resolution: 197 + integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== 198 + /debug/2.6.9: 199 + dependencies: 200 + ms: 2.0.0 201 + dev: false 202 + resolution: 203 + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 204 + /depd/2.0.0: 205 + dev: false 206 + engines: 207 + node: '>= 0.8' 208 + resolution: 209 + integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 210 + /destroy/1.2.0: 211 + dev: false 212 + engines: 213 + node: '>= 0.8' 214 + npm: 1.2.8000 || >= 1.4.16 215 + resolution: 216 + integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 217 + /detect-file/1.0.0: 218 + dev: false 219 + engines: 220 + node: '>=0.10.0' 221 + resolution: 222 + integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== 223 + /dom-serializer/0.2.2: 224 + dependencies: 225 + domelementtype: 2.3.0 226 + entities: 2.2.0 227 + dev: false 228 + resolution: 229 + integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 230 + /domelementtype/1.3.1: 231 + dev: false 232 + resolution: 233 + integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 234 + /domelementtype/2.3.0: 235 + dev: false 236 + resolution: 237 + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 238 + /domhandler/2.3.0: 239 + dependencies: 240 + domelementtype: 1.3.1 241 + dev: false 242 + resolution: 243 + integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ== 244 + /domutils/1.5.1: 245 + dependencies: 246 + dom-serializer: 0.2.2 247 + domelementtype: 1.3.1 248 + dev: false 249 + resolution: 250 + integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== 251 + /duplexer/0.1.2: 252 + dev: false 253 + resolution: 254 + integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== 255 + /ee-first/1.1.1: 256 + dev: false 257 + resolution: 258 + integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 259 + /encodeurl/1.0.2: 260 + dev: false 261 + engines: 262 + node: '>= 0.8' 263 + resolution: 264 + integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 265 + /entities/1.0.0: 266 + dev: false 267 + resolution: 268 + integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ== 269 + /entities/2.2.0: 270 + dev: false 271 + resolution: 272 + integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 273 + /escape-html/1.0.3: 274 + dev: false 275 + resolution: 276 + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 277 + /escape-string-regexp/1.0.5: 278 + dev: false 279 + engines: 280 + node: '>=0.8.0' 281 + resolution: 282 + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 283 + /esprima/4.0.1: 284 + dev: false 285 + engines: 286 + node: '>=4' 287 + hasBin: true 288 + resolution: 289 + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 290 + /etag/1.8.1: 291 + dev: false 292 + engines: 293 + node: '>= 0.6' 294 + resolution: 295 + integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 296 + /eventemitter2/0.4.14: 297 + dev: false 298 + resolution: 299 + integrity: sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== 300 + /exit/0.1.2: 301 + dev: false 302 + engines: 303 + node: '>= 0.8.0' 304 + resolution: 305 + integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 306 + /expand-tilde/2.0.2: 307 + dependencies: 308 + homedir-polyfill: 1.0.3 309 + dev: false 310 + engines: 311 + node: '>=0.10.0' 312 + resolution: 313 + integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== 314 + /express/4.18.2: 315 + dependencies: 316 + accepts: 1.3.8 317 + array-flatten: 1.1.1 318 + body-parser: 1.20.1 319 + content-disposition: 0.5.4 320 + content-type: 1.0.4 321 + cookie: 0.5.0 322 + cookie-signature: 1.0.6 323 + debug: 2.6.9 324 + depd: 2.0.0 325 + encodeurl: 1.0.2 326 + escape-html: 1.0.3 327 + etag: 1.8.1 328 + finalhandler: 1.2.0 329 + fresh: 0.5.2 330 + http-errors: 2.0.0 331 + merge-descriptors: 1.0.1 332 + methods: 1.1.2 333 + on-finished: 2.4.1 334 + parseurl: 1.3.3 335 + path-to-regexp: 0.1.7 336 + proxy-addr: 2.0.7 337 + qs: 6.11.0 338 + range-parser: 1.2.1 339 + safe-buffer: 5.2.1 340 + send: 0.18.0 341 + serve-static: 1.15.0 342 + setprototypeof: 1.2.0 343 + statuses: 2.0.1 344 + type-is: 1.6.18 345 + utils-merge: 1.0.1 346 + vary: 1.1.2 347 + dev: false 348 + engines: 349 + node: '>= 0.10.0' 350 + resolution: 351 + integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== 352 + /extend/3.0.2: 353 + dev: false 354 + resolution: 355 + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 356 + /figures/3.2.0: 357 + dependencies: 358 + escape-string-regexp: 1.0.5 359 + dev: false 360 + engines: 361 + node: '>=8' 362 + resolution: 363 + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 364 + /fill-range/7.0.1: 365 + dependencies: 366 + to-regex-range: 5.0.1 367 + dev: false 368 + engines: 369 + node: '>=8' 370 + resolution: 371 + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 372 + /finalhandler/1.2.0: 373 + dependencies: 374 + debug: 2.6.9 375 + encodeurl: 1.0.2 376 + escape-html: 1.0.3 377 + on-finished: 2.4.1 378 + parseurl: 1.3.3 379 + statuses: 2.0.1 380 + unpipe: 1.0.0 381 + dev: false 382 + engines: 383 + node: '>= 0.8' 384 + resolution: 385 + integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 386 + /findup-sync/0.3.0: 387 + dependencies: 388 + glob: 5.0.15 389 + dev: false 390 + engines: 391 + node: '>= 0.6.0' 392 + resolution: 393 + integrity: sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg== 394 + /findup-sync/4.0.0: 395 + dependencies: 396 + detect-file: 1.0.0 397 + is-glob: 4.0.3 398 + micromatch: 4.0.5 399 + resolve-dir: 1.0.1 400 + dev: false 401 + engines: 402 + node: '>= 8' 403 + resolution: 404 + integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== 405 + /fined/1.2.0: 406 + dependencies: 407 + expand-tilde: 2.0.2 408 + is-plain-object: 2.0.4 409 + object.defaults: 1.1.0 410 + object.pick: 1.3.0 411 + parse-filepath: 1.0.2 412 + dev: false 413 + engines: 414 + node: '>= 0.10' 415 + resolution: 416 + integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== 417 + /flagged-respawn/1.0.1: 418 + dev: false 419 + engines: 420 + node: '>= 0.10' 421 + resolution: 422 + integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== 423 + /for-in/1.0.2: 424 + dev: false 425 + engines: 426 + node: '>=0.10.0' 427 + resolution: 428 + integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== 429 + /for-own/1.0.0: 430 + dependencies: 431 + for-in: 1.0.2 432 + dev: false 433 + engines: 434 + node: '>=0.10.0' 435 + resolution: 436 + integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== 437 + /forwarded/0.2.0: 438 + dev: false 439 + engines: 440 + node: '>= 0.6' 441 + resolution: 442 + integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 443 + /fresh/0.5.2: 444 + dev: false 445 + engines: 446 + node: '>= 0.6' 447 + resolution: 448 + integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 449 + /fs.realpath/1.0.0: 450 + dev: false 451 + resolution: 452 + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 453 + /function-bind/1.1.1: 454 + dev: false 455 + resolution: 456 + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 457 + /get-intrinsic/1.1.3: 458 + dependencies: 459 + function-bind: 1.1.1 460 + has: 1.0.3 461 + has-symbols: 1.0.3 462 + dev: false 463 + resolution: 464 + integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 465 + /getobject/1.0.2: 466 + dev: false 467 + engines: 468 + node: '>=10' 469 + resolution: 470 + integrity: sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg== 471 + /glob/5.0.15: 472 + dependencies: 473 + inflight: 1.0.6 474 + inherits: 2.0.4 475 + minimatch: 3.1.2 476 + once: 1.4.0 477 + path-is-absolute: 1.0.1 478 + dev: false 479 + resolution: 480 + integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== 481 + /glob/7.1.7: 482 + dependencies: 483 + fs.realpath: 1.0.0 484 + inflight: 1.0.6 485 + inherits: 2.0.4 486 + minimatch: 3.1.2 487 + once: 1.4.0 488 + path-is-absolute: 1.0.1 489 + dev: false 490 + resolution: 491 + integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 492 + /glob/7.2.3: 493 + dependencies: 494 + fs.realpath: 1.0.0 495 + inflight: 1.0.6 496 + inherits: 2.0.4 497 + minimatch: 3.1.2 498 + once: 1.4.0 499 + path-is-absolute: 1.0.1 500 + dev: false 501 + resolution: 502 + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 503 + /global-modules/1.0.0: 504 + dependencies: 505 + global-prefix: 1.0.2 506 + is-windows: 1.0.2 507 + resolve-dir: 1.0.1 508 + dev: false 509 + engines: 510 + node: '>=0.10.0' 511 + resolution: 512 + integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== 513 + /global-prefix/1.0.2: 514 + dependencies: 515 + expand-tilde: 2.0.2 516 + homedir-polyfill: 1.0.3 517 + ini: 1.3.8 518 + is-windows: 1.0.2 519 + which: 1.3.1 520 + dev: false 521 + engines: 522 + node: '>=0.10.0' 523 + resolution: 524 + integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== 525 + /grunt-cli/1.4.3: 526 + dependencies: 527 + grunt-known-options: 2.0.0 528 + interpret: 1.1.0 529 + liftup: 3.0.1 530 + nopt: 4.0.3 531 + v8flags: 3.2.0 532 + dev: false 533 + engines: 534 + node: '>=10' 535 + hasBin: true 536 + resolution: 537 + integrity: sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ== 538 + /grunt-contrib-concat/2.1.0: 539 + dependencies: 540 + chalk: 4.1.2 541 + source-map: 0.5.7 542 + dev: false 543 + engines: 544 + node: '>=0.12.0' 545 + peerDependencies: 546 + grunt: '>=1.4.1' 547 + resolution: 548 + integrity: sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw== 549 + /grunt-contrib-cssmin/4.0.0: 550 + dependencies: 551 + chalk: 4.1.2 552 + clean-css: 5.3.1 553 + maxmin: 3.0.0 554 + dev: false 555 + engines: 556 + node: '>=10.0' 557 + resolution: 558 + integrity: sha512-jXU+Zlk8Q8XztOGNGpjYlD/BDQ0n95IHKrQKtFR7Gd8hZrzgqiG1Ra7cGYc8h2DD9vkSFGNlweb9Q00rBxOK2w== 559 + /grunt-contrib-jshint/3.2.0: 560 + dependencies: 561 + chalk: 4.1.2 562 + hooker: 0.2.3 563 + jshint: 2.13.6 564 + dev: false 565 + engines: 566 + node: '>=10' 567 + resolution: 568 + integrity: sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ== 569 + /grunt-contrib-uglify/5.2.2: 570 + dependencies: 571 + chalk: 4.1.2 572 + maxmin: 3.0.0 573 + uglify-js: 3.17.4 574 + uri-path: 1.0.0 575 + dev: false 576 + engines: 577 + node: '>=12' 578 + resolution: 579 + integrity: sha512-ITxiWxrjjP+RZu/aJ5GLvdele+sxlznh+6fK9Qckio5ma8f7Iv8woZjRkGfafvpuygxNefOJNc+hfjjBayRn2Q== 580 + /grunt-known-options/2.0.0: 581 + dev: false 582 + engines: 583 + node: '>=0.10.0' 584 + resolution: 585 + integrity: sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA== 586 + /grunt-legacy-log-utils/2.1.0: 587 + dependencies: 588 + chalk: 4.1.2 589 + lodash: 4.17.21 590 + dev: false 591 + engines: 592 + node: '>=10' 593 + resolution: 594 + integrity: sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw== 595 + /grunt-legacy-log/3.0.0: 596 + dependencies: 597 + colors: 1.1.2 598 + grunt-legacy-log-utils: 2.1.0 599 + hooker: 0.2.3 600 + lodash: 4.17.21 601 + dev: false 602 + engines: 603 + node: '>= 0.10.0' 604 + resolution: 605 + integrity: sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA== 606 + /grunt-legacy-util/2.0.1: 607 + dependencies: 608 + async: 3.2.4 609 + exit: 0.1.2 610 + getobject: 1.0.2 611 + hooker: 0.2.3 612 + lodash: 4.17.21 613 + underscore.string: 3.3.6 614 + which: 2.0.2 615 + dev: false 616 + engines: 617 + node: '>=10' 618 + resolution: 619 + integrity: sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w== 620 + /grunt/1.5.3: 621 + dependencies: 622 + dateformat: 3.0.3 623 + eventemitter2: 0.4.14 624 + exit: 0.1.2 625 + findup-sync: 0.3.0 626 + glob: 7.1.7 627 + grunt-cli: 1.4.3 628 + grunt-known-options: 2.0.0 629 + grunt-legacy-log: 3.0.0 630 + grunt-legacy-util: 2.0.1 631 + iconv-lite: 0.4.24 632 + js-yaml: 3.14.1 633 + minimatch: 3.0.8 634 + mkdirp: 1.0.4 635 + nopt: 3.0.6 636 + rimraf: 3.0.2 637 + dev: false 638 + engines: 639 + node: '>=8' 640 + hasBin: true 641 + resolution: 642 + integrity: sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ== 643 + /gzip-size/5.1.1: 644 + dependencies: 645 + duplexer: 0.1.2 646 + pify: 4.0.1 647 + dev: false 648 + engines: 649 + node: '>=6' 650 + resolution: 651 + integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== 652 + /has-flag/4.0.0: 653 + dev: false 654 + engines: 655 + node: '>=8' 656 + resolution: 657 + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 658 + /has-symbols/1.0.3: 659 + dev: false 660 + engines: 661 + node: '>= 0.4' 662 + resolution: 663 + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 664 + /has/1.0.3: 665 + dependencies: 666 + function-bind: 1.1.1 667 + dev: false 668 + engines: 669 + node: '>= 0.4.0' 670 + resolution: 671 + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 672 + /homedir-polyfill/1.0.3: 673 + dependencies: 674 + parse-passwd: 1.0.0 675 + dev: false 676 + engines: 677 + node: '>=0.10.0' 678 + resolution: 679 + integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== 680 + /hooker/0.2.3: 681 + dev: false 682 + resolution: 683 + integrity: sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA== 684 + /htmlparser2/3.8.3: 685 + dependencies: 686 + domelementtype: 1.3.1 687 + domhandler: 2.3.0 688 + domutils: 1.5.1 689 + entities: 1.0.0 690 + readable-stream: 1.1.14 691 + dev: false 692 + resolution: 693 + integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q== 694 + /http-errors/2.0.0: 695 + dependencies: 696 + depd: 2.0.0 697 + inherits: 2.0.4 698 + setprototypeof: 1.2.0 699 + statuses: 2.0.1 700 + toidentifier: 1.0.1 701 + dev: false 702 + engines: 703 + node: '>= 0.8' 704 + resolution: 705 + integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 706 + /iconv-lite/0.4.24: 707 + dependencies: 708 + safer-buffer: 2.1.2 709 + dev: false 710 + engines: 711 + node: '>=0.10.0' 712 + resolution: 713 + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 714 + /inflight/1.0.6: 715 + dependencies: 716 + once: 1.4.0 717 + wrappy: 1.0.2 718 + dev: false 719 + resolution: 720 + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 721 + /inherits/2.0.4: 722 + dev: false 723 + resolution: 724 + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 725 + /ini/1.3.8: 726 + dev: false 727 + resolution: 728 + integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 729 + /interpret/1.1.0: 730 + dev: false 731 + resolution: 732 + integrity: sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA== 733 + /ipaddr.js/1.9.1: 734 + dev: false 735 + engines: 736 + node: '>= 0.10' 737 + resolution: 738 + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 739 + /is-absolute/1.0.0: 740 + dependencies: 741 + is-relative: 1.0.0 742 + is-windows: 1.0.2 743 + dev: false 744 + engines: 745 + node: '>=0.10.0' 746 + resolution: 747 + integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== 748 + /is-core-module/2.11.0: 749 + dependencies: 750 + has: 1.0.3 751 + dev: false 752 + resolution: 753 + integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 754 + /is-extglob/2.1.1: 755 + dev: false 756 + engines: 757 + node: '>=0.10.0' 758 + resolution: 759 + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 760 + /is-glob/4.0.3: 761 + dependencies: 762 + is-extglob: 2.1.1 763 + dev: false 764 + engines: 765 + node: '>=0.10.0' 766 + resolution: 767 + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 768 + /is-number/7.0.0: 769 + dev: false 770 + engines: 771 + node: '>=0.12.0' 772 + resolution: 773 + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 774 + /is-plain-object/2.0.4: 775 + dependencies: 776 + isobject: 3.0.1 777 + dev: false 778 + engines: 779 + node: '>=0.10.0' 780 + resolution: 781 + integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 782 + /is-relative/1.0.0: 783 + dependencies: 784 + is-unc-path: 1.0.0 785 + dev: false 786 + engines: 787 + node: '>=0.10.0' 788 + resolution: 789 + integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== 790 + /is-unc-path/1.0.0: 791 + dependencies: 792 + unc-path-regex: 0.1.2 793 + dev: false 794 + engines: 795 + node: '>=0.10.0' 796 + resolution: 797 + integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== 798 + /is-windows/1.0.2: 799 + dev: false 800 + engines: 801 + node: '>=0.10.0' 802 + resolution: 803 + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 804 + /isarray/0.0.1: 805 + dev: false 806 + resolution: 807 + integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== 808 + /isexe/2.0.0: 809 + dev: false 810 + resolution: 811 + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 812 + /isobject/3.0.1: 813 + dev: false 814 + engines: 815 + node: '>=0.10.0' 816 + resolution: 817 + integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 818 + /js-yaml/3.14.1: 819 + dependencies: 820 + argparse: 1.0.10 821 + esprima: 4.0.1 822 + dev: false 823 + hasBin: true 824 + resolution: 825 + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 826 + /jshint/2.13.6: 827 + dependencies: 828 + cli: 1.0.1 829 + console-browserify: 1.1.0 830 + exit: 0.1.2 831 + htmlparser2: 3.8.3 832 + lodash: 4.17.21 833 + minimatch: 3.0.8 834 + strip-json-comments: 1.0.4 835 + dev: false 836 + hasBin: true 837 + resolution: 838 + integrity: sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ== 839 + /kind-of/6.0.3: 840 + dev: false 841 + engines: 842 + node: '>=0.10.0' 843 + resolution: 844 + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 845 + /liftup/3.0.1: 846 + dependencies: 847 + extend: 3.0.2 848 + findup-sync: 4.0.0 849 + fined: 1.2.0 850 + flagged-respawn: 1.0.1 851 + is-plain-object: 2.0.4 852 + object.map: 1.0.1 853 + rechoir: 0.7.1 854 + resolve: 1.22.1 855 + dev: false 856 + engines: 857 + node: '>=10' 858 + resolution: 859 + integrity: sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw== 860 + /lodash/4.17.21: 861 + dev: false 862 + resolution: 863 + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 864 + /make-iterator/1.0.1: 865 + dependencies: 866 + kind-of: 6.0.3 867 + dev: false 868 + engines: 869 + node: '>=0.10.0' 870 + resolution: 871 + integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== 872 + /map-cache/0.2.2: 873 + dev: false 874 + engines: 875 + node: '>=0.10.0' 876 + resolution: 877 + integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== 878 + /maxmin/3.0.0: 879 + dependencies: 880 + chalk: 4.1.2 881 + figures: 3.2.0 882 + gzip-size: 5.1.1 883 + pretty-bytes: 5.6.0 884 + dev: false 885 + engines: 886 + node: '>=10' 887 + resolution: 888 + integrity: sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g== 889 + /media-typer/0.3.0: 890 + dev: false 891 + engines: 892 + node: '>= 0.6' 893 + resolution: 894 + integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 895 + /merge-descriptors/1.0.1: 896 + dev: false 897 + resolution: 898 + integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 899 + /methods/1.1.2: 900 + dev: false 901 + engines: 902 + node: '>= 0.6' 903 + resolution: 904 + integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 905 + /micromatch/4.0.5: 906 + dependencies: 907 + braces: 3.0.2 908 + picomatch: 2.3.1 909 + dev: false 910 + engines: 911 + node: '>=8.6' 912 + resolution: 913 + integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 914 + /mime-db/1.52.0: 915 + dev: false 916 + engines: 917 + node: '>= 0.6' 918 + resolution: 919 + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 920 + /mime-types/2.1.35: 921 + dependencies: 922 + mime-db: 1.52.0 923 + dev: false 924 + engines: 925 + node: '>= 0.6' 926 + resolution: 927 + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 928 + /mime/1.6.0: 929 + dev: false 930 + engines: 931 + node: '>=4' 932 + hasBin: true 933 + resolution: 934 + integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 935 + /minimatch/3.0.8: 936 + dependencies: 937 + brace-expansion: 1.1.11 938 + dev: false 939 + resolution: 940 + integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== 941 + /minimatch/3.1.2: 942 + dependencies: 943 + brace-expansion: 1.1.11 944 + dev: false 945 + resolution: 946 + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 947 + /mkdirp/1.0.4: 948 + dev: false 949 + engines: 950 + node: '>=10' 951 + hasBin: true 952 + resolution: 953 + integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 954 + /ms/2.0.0: 955 + dev: false 956 + resolution: 957 + integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 958 + /ms/2.1.3: 959 + dev: false 960 + resolution: 961 + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 962 + /negotiator/0.6.3: 963 + dev: false 964 + engines: 965 + node: '>= 0.6' 966 + resolution: 967 + integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 968 + /nopt/3.0.6: 969 + dependencies: 970 + abbrev: 1.1.1 971 + dev: false 972 + hasBin: true 973 + resolution: 974 + integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== 975 + /nopt/4.0.3: 976 + dependencies: 977 + abbrev: 1.1.1 978 + osenv: 0.1.5 979 + dev: false 980 + hasBin: true 981 + resolution: 982 + integrity: sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== 983 + /object-inspect/1.12.2: 984 + dev: false 985 + resolution: 986 + integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 987 + /object.defaults/1.1.0: 988 + dependencies: 989 + array-each: 1.0.1 990 + array-slice: 1.1.0 991 + for-own: 1.0.0 992 + isobject: 3.0.1 993 + dev: false 994 + engines: 995 + node: '>=0.10.0' 996 + resolution: 997 + integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== 998 + /object.map/1.0.1: 999 + dependencies: 1000 + for-own: 1.0.0 1001 + make-iterator: 1.0.1 1002 + dev: false 1003 + engines: 1004 + node: '>=0.10.0' 1005 + resolution: 1006 + integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== 1007 + /object.pick/1.3.0: 1008 + dependencies: 1009 + isobject: 3.0.1 1010 + dev: false 1011 + engines: 1012 + node: '>=0.10.0' 1013 + resolution: 1014 + integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== 1015 + /on-finished/2.4.1: 1016 + dependencies: 1017 + ee-first: 1.1.1 1018 + dev: false 1019 + engines: 1020 + node: '>= 0.8' 1021 + resolution: 1022 + integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1023 + /once/1.4.0: 1024 + dependencies: 1025 + wrappy: 1.0.2 1026 + dev: false 1027 + resolution: 1028 + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1029 + /os-homedir/1.0.2: 1030 + dev: false 1031 + engines: 1032 + node: '>=0.10.0' 1033 + resolution: 1034 + integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== 1035 + /os-tmpdir/1.0.2: 1036 + dev: false 1037 + engines: 1038 + node: '>=0.10.0' 1039 + resolution: 1040 + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== 1041 + /osenv/0.1.5: 1042 + dependencies: 1043 + os-homedir: 1.0.2 1044 + os-tmpdir: 1.0.2 1045 + dev: false 1046 + resolution: 1047 + integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 1048 + /parse-filepath/1.0.2: 1049 + dependencies: 1050 + is-absolute: 1.0.0 1051 + map-cache: 0.2.2 1052 + path-root: 0.1.1 1053 + dev: false 1054 + engines: 1055 + node: '>=0.8' 1056 + resolution: 1057 + integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== 1058 + /parse-passwd/1.0.0: 1059 + dev: false 1060 + engines: 1061 + node: '>=0.10.0' 1062 + resolution: 1063 + integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== 1064 + /parseurl/1.3.3: 1065 + dev: false 1066 + engines: 1067 + node: '>= 0.8' 1068 + resolution: 1069 + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1070 + /path-is-absolute/1.0.1: 1071 + dev: false 1072 + engines: 1073 + node: '>=0.10.0' 1074 + resolution: 1075 + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1076 + /path-parse/1.0.7: 1077 + dev: false 1078 + resolution: 1079 + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1080 + /path-root-regex/0.1.2: 1081 + dev: false 1082 + engines: 1083 + node: '>=0.10.0' 1084 + resolution: 1085 + integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== 1086 + /path-root/0.1.1: 1087 + dependencies: 1088 + path-root-regex: 0.1.2 1089 + dev: false 1090 + engines: 1091 + node: '>=0.10.0' 1092 + resolution: 1093 + integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== 1094 + /path-to-regexp/0.1.7: 1095 + dev: false 1096 + resolution: 1097 + integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 1098 + /picomatch/2.3.1: 1099 + dev: false 1100 + engines: 1101 + node: '>=8.6' 1102 + resolution: 1103 + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1104 + /pify/4.0.1: 1105 + dev: false 1106 + engines: 1107 + node: '>=6' 1108 + resolution: 1109 + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1110 + /pretty-bytes/5.6.0: 1111 + dev: false 1112 + engines: 1113 + node: '>=6' 1114 + resolution: 1115 + integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== 1116 + /proxy-addr/2.0.7: 1117 + dependencies: 1118 + forwarded: 0.2.0 1119 + ipaddr.js: 1.9.1 1120 + dev: false 1121 + engines: 1122 + node: '>= 0.10' 1123 + resolution: 1124 + integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1125 + /qs/6.11.0: 1126 + dependencies: 1127 + side-channel: 1.0.4 1128 + dev: false 1129 + engines: 1130 + node: '>=0.6' 1131 + resolution: 1132 + integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 1133 + /range-parser/1.2.1: 1134 + dev: false 1135 + engines: 1136 + node: '>= 0.6' 1137 + resolution: 1138 + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1139 + /raw-body/2.5.1: 1140 + dependencies: 1141 + bytes: 3.1.2 1142 + http-errors: 2.0.0 1143 + iconv-lite: 0.4.24 1144 + unpipe: 1.0.0 1145 + dev: false 1146 + engines: 1147 + node: '>= 0.8' 1148 + resolution: 1149 + integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 1150 + /readable-stream/1.1.14: 1151 + dependencies: 1152 + core-util-is: 1.0.3 1153 + inherits: 2.0.4 1154 + isarray: 0.0.1 1155 + string_decoder: 0.10.31 1156 + dev: false 1157 + resolution: 1158 + integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== 1159 + /rechoir/0.7.1: 1160 + dependencies: 1161 + resolve: 1.22.1 1162 + dev: false 1163 + engines: 1164 + node: '>= 0.10' 1165 + resolution: 1166 + integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== 1167 + /resolve-dir/1.0.1: 1168 + dependencies: 1169 + expand-tilde: 2.0.2 1170 + global-modules: 1.0.0 1171 + dev: false 1172 + engines: 1173 + node: '>=0.10.0' 1174 + resolution: 1175 + integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== 1176 + /resolve/1.22.1: 1177 + dependencies: 1178 + is-core-module: 2.11.0 1179 + path-parse: 1.0.7 1180 + supports-preserve-symlinks-flag: 1.0.0 1181 + dev: false 1182 + hasBin: true 1183 + resolution: 1184 + integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1185 + /rimraf/3.0.2: 1186 + dependencies: 1187 + glob: 7.2.3 1188 + dev: false 1189 + hasBin: true 1190 + resolution: 1191 + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1192 + /safe-buffer/5.2.1: 1193 + dev: false 1194 + resolution: 1195 + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1196 + /safer-buffer/2.1.2: 1197 + dev: false 1198 + resolution: 1199 + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1200 + /send/0.18.0: 1201 + dependencies: 1202 + debug: 2.6.9 1203 + depd: 2.0.0 1204 + destroy: 1.2.0 1205 + encodeurl: 1.0.2 1206 + escape-html: 1.0.3 1207 + etag: 1.8.1 1208 + fresh: 0.5.2 1209 + http-errors: 2.0.0 1210 + mime: 1.6.0 1211 + ms: 2.1.3 1212 + on-finished: 2.4.1 1213 + range-parser: 1.2.1 1214 + statuses: 2.0.1 1215 + dev: false 1216 + engines: 1217 + node: '>= 0.8.0' 1218 + resolution: 1219 + integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 1220 + /serve-static/1.15.0: 1221 + dependencies: 1222 + encodeurl: 1.0.2 1223 + escape-html: 1.0.3 1224 + parseurl: 1.3.3 1225 + send: 0.18.0 1226 + dev: false 1227 + engines: 1228 + node: '>= 0.8.0' 1229 + resolution: 1230 + integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 1231 + /setprototypeof/1.2.0: 1232 + dev: false 1233 + resolution: 1234 + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1235 + /side-channel/1.0.4: 1236 + dependencies: 1237 + call-bind: 1.0.2 1238 + get-intrinsic: 1.1.3 1239 + object-inspect: 1.12.2 1240 + dev: false 1241 + resolution: 1242 + integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1243 + /source-map/0.5.7: 1244 + dev: false 1245 + engines: 1246 + node: '>=0.10.0' 1247 + resolution: 1248 + integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 1249 + /source-map/0.6.1: 1250 + dev: false 1251 + engines: 1252 + node: '>=0.10.0' 1253 + resolution: 1254 + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1255 + /sprintf-js/1.0.3: 1256 + dev: false 1257 + resolution: 1258 + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 1259 + /sprintf-js/1.1.2: 1260 + dev: false 1261 + resolution: 1262 + integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== 1263 + /statuses/2.0.1: 1264 + dev: false 1265 + engines: 1266 + node: '>= 0.8' 1267 + resolution: 1268 + integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1269 + /string_decoder/0.10.31: 1270 + dev: false 1271 + resolution: 1272 + integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== 1273 + /strip-json-comments/1.0.4: 1274 + dev: false 1275 + engines: 1276 + node: '>=0.8.0' 1277 + hasBin: true 1278 + resolution: 1279 + integrity: sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg== 1280 + /supports-color/7.2.0: 1281 + dependencies: 1282 + has-flag: 4.0.0 1283 + dev: false 1284 + engines: 1285 + node: '>=8' 1286 + resolution: 1287 + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1288 + /supports-preserve-symlinks-flag/1.0.0: 1289 + dev: false 1290 + engines: 1291 + node: '>= 0.4' 1292 + resolution: 1293 + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1294 + /to-regex-range/5.0.1: 1295 + dependencies: 1296 + is-number: 7.0.0 1297 + dev: false 1298 + engines: 1299 + node: '>=8.0' 1300 + resolution: 1301 + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1302 + /toidentifier/1.0.1: 1303 + dev: false 1304 + engines: 1305 + node: '>=0.6' 1306 + resolution: 1307 + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1308 + /type-is/1.6.18: 1309 + dependencies: 1310 + media-typer: 0.3.0 1311 + mime-types: 2.1.35 1312 + dev: false 1313 + engines: 1314 + node: '>= 0.6' 1315 + resolution: 1316 + integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1317 + /uglify-js/3.17.4: 1318 + dev: false 1319 + engines: 1320 + node: '>=0.8.0' 1321 + hasBin: true 1322 + resolution: 1323 + integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== 1324 + /unc-path-regex/0.1.2: 1325 + dev: false 1326 + engines: 1327 + node: '>=0.10.0' 1328 + resolution: 1329 + integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== 1330 + /underscore.string/3.3.6: 1331 + dependencies: 1332 + sprintf-js: 1.1.2 1333 + util-deprecate: 1.0.2 1334 + dev: false 1335 + resolution: 1336 + integrity: sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== 1337 + /unpipe/1.0.0: 1338 + dev: false 1339 + engines: 1340 + node: '>= 0.8' 1341 + resolution: 1342 + integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 1343 + /uri-path/1.0.0: 1344 + dev: false 1345 + engines: 1346 + node: '>= 0.10' 1347 + resolution: 1348 + integrity: sha512-8pMuAn4KacYdGMkFaoQARicp4HSw24/DHOVKWqVRJ8LhhAwPPFpdGvdL9184JVmUwe7vz7Z9n6IqI6t5n2ELdg== 1349 + /util-deprecate/1.0.2: 1350 + dev: false 1351 + resolution: 1352 + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1353 + /utils-merge/1.0.1: 1354 + dev: false 1355 + engines: 1356 + node: '>= 0.4.0' 1357 + resolution: 1358 + integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 1359 + /v8flags/3.2.0: 1360 + dependencies: 1361 + homedir-polyfill: 1.0.3 1362 + dev: false 1363 + engines: 1364 + node: '>= 0.10' 1365 + resolution: 1366 + integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== 1367 + /vary/1.1.2: 1368 + dev: false 1369 + engines: 1370 + node: '>= 0.8' 1371 + resolution: 1372 + integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 1373 + /which/1.3.1: 1374 + dependencies: 1375 + isexe: 2.0.0 1376 + dev: false 1377 + hasBin: true 1378 + resolution: 1379 + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1380 + /which/2.0.2: 1381 + dependencies: 1382 + isexe: 2.0.0 1383 + dev: false 1384 + engines: 1385 + node: '>= 8' 1386 + hasBin: true 1387 + resolution: 1388 + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1389 + /wrappy/1.0.2: 1390 + dev: false 1391 + resolution: 1392 + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1393 + registry: 'https://registry.npmjs.org/' 1394 + shrinkwrapMinorVersion: 9 1395 + shrinkwrapVersion: 3 1396 + specifiers: 1397 + express: ^4.18.2 1398 + grunt: ^1.5.3 1399 + grunt-contrib-concat: ^2.1.0 1400 + grunt-contrib-cssmin: ^4.0.0 1401 + grunt-contrib-jshint: ^3.2.0 1402 + grunt-contrib-uglify: ^5.2.2
src/assets/bg.png

This is a binary file and will not be displayed.

src/assets/brighton.png

This is a binary file and will not be displayed.

src/assets/copy.png

This is a binary file and will not be displayed.

src/assets/cut.png

This is a binary file and will not be displayed.

src/assets/draggybits/dragger.png

This is a binary file and will not be displayed.

src/assets/draggybits/hider.png

This is a binary file and will not be displayed.

src/assets/dropper.png

This is a binary file and will not be displayed.

+48
src/assets/example.csv
··· 1 + white,FFFFFF 2 + light yellow,EAE257 3 + yellow,F3E705 4 + dark yellow,F9D102 5 + dark orange,FDBB16 6 + orange,FD790D 7 + vermillion,EA320C 8 + carmine red,CA1306 9 + carmine red,AB1518 10 + beige,F4B18F 11 + pink,F67A9C 12 + red violet,A081C4 13 + light violet,944A7E 14 + bordeaux red,7F252F 15 + violet,541F6D 16 + blue violet,1D105D 17 + delft blue,3D2729 18 + ice blue,ABBFC0 19 + sky blue,6B9DA8 20 + light blue,3A76A7 21 + mountain blue,6470AC 22 + phthalo blue,495467 23 + cobalt dark,23416F 24 + dark blue,1D396B 25 + cobalt blue,172089 26 + prussian blue,0B2461 27 + pea green,53B1A0 28 + bice green,65DB26 29 + may green,07B518 30 + olive green light,478136 31 + dark olive green,657612 32 + dark grass green,007D67 33 + grass green,1F8023 34 + dark green,0B4432 35 + blue green,075876 36 + gold,D6B96F 37 + gold ochre,FDAE05 38 + dark ochre,D59E5B 39 + indian red,A73A1D 40 + light brown,96543A 41 + brown,604331 42 + dark brown,461D11 43 + brunt umber,534032 44 + grey,7E7579 45 + silver,AFA0A3 46 + steel grey,6B7984 47 + medium grey,786F7B 48 + black,000000
src/assets/fonts/8bit-Art-Sans-subset.ttf

This is a binary file and will not be displayed.

src/assets/fonts/8bit-Art-Sans-subset.woff2

This is a binary file and will not be displayed.

src/assets/fonts/8bit-Art-Sans-subset.zopfli.woff

This is a binary file and will not be displayed.

src/assets/fonts/8bit-Art-Sans.ttf

This is a binary file and will not be displayed.

src/assets/fonts/VT323-Regular-subset.ttf

This is a binary file and will not be displayed.

src/assets/fonts/VT323-Regular-subset.woff2

This is a binary file and will not be displayed.

src/assets/fonts/VT323-Regular-subset.zopfli.woff

This is a binary file and will not be displayed.

src/assets/fonts/VT323-Regular.ttf

This is a binary file and will not be displayed.

src/assets/hsl-palette.png

This is a binary file and will not be displayed.

src/assets/icons/copy.png

This is a binary file and will not be displayed.

src/assets/icons/cut.png

This is a binary file and will not be displayed.

src/assets/icons/dropper.png

This is a binary file and will not be displayed.

src/assets/icons/paint.png

This is a binary file and will not be displayed.

src/assets/icons/paste-disabled.png

This is a binary file and will not be displayed.

src/assets/icons/paste.png

This is a binary file and will not be displayed.

src/assets/icons/pencil.png

This is a binary file and will not be displayed.

src/assets/paint.png

This is a binary file and will not be displayed.

src/assets/paste-disabled.png

This is a binary file and will not be displayed.

src/assets/paste.png

This is a binary file and will not be displayed.

src/assets/pencil.png

This is a binary file and will not be displayed.

+13
src/css/draggybits.css
··· 1 + /** 2 + * draggybits 3 + * by css perverts aka nick & jenn 4 + */ 5 + 6 + .draggy.ui-hidden { display: none;} 7 + 8 + /** controls **/ 9 + .draggy .controls { float: right; } 10 + .draggy .controls button { width: auto; height: auto; padding: 0; margin: 0; background: none; border: none; } 11 + .draggy .controls .ui-dragger { cursor: move; } 12 + .draggy .controls .ui-closer, 13 + .draggy .controls .ui-hider { cursor: pointer; }
+501
src/css/make8bitart.css
··· 1 + /** 2 + * make8bitart css 3 + * @author jenn schiffer 4 + */ 5 + 6 + /* fonts */ 7 + @font-face { 8 + font-family: 'VT323'; 9 + src: url('../assets/fonts/VT323-Regular-subset.woff2') format('woff2'), 10 + url('../assets/fonts/VT323-Regular-subset.zopfli.woff') format('woff'), 11 + url('../assets/fonts/VT323-Regular-subset.ttf') format('truetype'); 12 + font-display: swap; 13 + } 14 + @font-face { 15 + font-family: '8bit Art Sans'; 16 + src: url('../assets/fonts/8bit-Art-Sans-subset.woff2') format('woff2'), 17 + url('../assets/fonts/8bit-Art-Sans-subset.zopfli.woff') format('woff'), 18 + url('../assets/fonts/8bit-Art-Sans-subset.ttf') format('truetype'); 19 + font-display: swap; 20 + } 21 + 22 + body { 23 + background: #fff; 24 + padding: 0; 25 + margin: 0; 26 + font-family: 'VT323', monospace; 27 + font-size: 16px; 28 + color: #000; 29 + } 30 + 31 + a { 32 + color: blue; 33 + } 34 + 35 + h2 { 36 + font-size: 1.5em; 37 + margin: .1em 0; 38 + } 39 + 40 + menu { 41 + padding-left: 0; 42 + } 43 + 44 + /* canvas */ 45 + canvas { 46 + cursor: crosshair; 47 + touch-action: none; 48 + display: block; 49 + image-rendering: optimizeSpeed; 50 + image-rendering: -moz-crisp-edges; 51 + image-rendering: -webkit-optimize-contrast; 52 + image-rendering: -o-crisp-edges; 53 + image-rendering: pixelated; 54 + -ms-interpolation-mode: nearest-neighbor; 55 + } 56 + 57 + /* draggy "plugin" */ 58 + .draggy { 59 + padding: 10px; 60 + box-shadow: 6px 6px 0 #000; 61 + border: 4px solid #000; 62 + background: #eeffff; 63 + -webkit-user-select: none; 64 + -moz-user-select: none; 65 + user-select: none; 66 + overflow: hidden; 67 + } 68 + 69 + 70 + .ui-hider img { 71 + margin: 3px 6px 0 0; 72 + } 73 + 74 + /* tabs */ 75 + .tabs { 76 + list-style: none; 77 + margin: 0; 78 + padding: 0; 79 + } 80 + 81 + .tabs button { 82 + font-family: 'VT323', monospace; 83 + font-size: 1em; 84 + display: inline-block; 85 + padding: .5em 1em; 86 + margin: 0 0 .5em; 87 + border: 1px solid #000; 88 + background-color: #ccc; 89 + box-shadow: 2px 2px 0px #000; 90 + } 91 + 92 + .tabs button.active { 93 + background-color: cyan; 94 + box-shadow: inset 3px 3px 0px #000; 95 + } 96 + 97 + .tabs:hover { 98 + cursor: pointer; 99 + } 100 + 101 + 102 + /* header */ 103 + header { 104 + font-size: 1em; 105 + width: 200px; 106 + } 107 + 108 + header h1 { 109 + font-family: '8bit Art Sans'; 110 + font-size: 2em; 111 + line-height: 1em; 112 + margin: 0; 113 + } 114 + 115 + #minimized-tools-menu { 116 + font-size: 1.2em; 117 + margin-top: 10px; 118 + padding: 0; 119 + } 120 + 121 + #minimized-tools-menu button { 122 + display: inline-block; 123 + padding: 3px 10px; 124 + background: lime; 125 + margin: 3px; 126 + border: none; 127 + font-family: 'VT323', monospace; 128 + font-size: 1em; 129 + } 130 + 131 + #minimized-tools-menu button:hover { 132 + color: green; 133 + cursor: pointer; 134 + } 135 + 136 + #minimized-tools-menu button:after { 137 + content: ' +'; 138 + } 139 + 140 + /* social and credits */ 141 + #what { 142 + width: 200px; 143 + } 144 + 145 + /* canvas tools box */ 146 + #toolbox { 147 + width: 200px; 148 + } 149 + 150 + #toolbox .inner { 151 + margin: 1em 0; 152 + } 153 + 154 + #toolbox ul { 155 + list-style: none; 156 + margin: 0; 157 + padding: 0; 158 + } 159 + 160 + #toolbox ul li { 161 + display: inline-block; 162 + margin: .2em; 163 + } 164 + 165 + .icon-button { 166 + border: 3px dashed transparent; 167 + padding: 0; 168 + margin: 0; 169 + background: 0; 170 + } 171 + 172 + .icon-button img { 173 + padding: .3em; 174 + vertical-align: middle; 175 + } 176 + 177 + .icon-button.current-tool { 178 + border-color: black; 179 + } 180 + 181 + .text-button { 182 + background: #efefef; 183 + border: 2px solid #ccc; 184 + padding: .3em .5em; 185 + margin: .2em; 186 + font-family: monospace; 187 + font-size: .8em; 188 + font-weight: bold; 189 + cursor: pointer; 190 + } 191 + 192 + input[type="submit"] { 193 + margin: .2em 0 .2em 0; 194 + font-size: .8em; 195 + } 196 + 197 + input[type="file"] { 198 + max-width: 100%; 199 + } 200 + 201 + #pixel-size { 202 + width: 75%; 203 + font-size: 1.2em; 204 + font-family: monospace; 205 + padding: 5px 3px 3px; 206 + } 207 + 208 + #pixel-size-slider { 209 + margin: 0; 210 + width: 100%; 211 + } 212 + 213 + #pixel-size-demo { 214 + background: black; 215 + } 216 + 217 + /* save box */ 218 + #filebox { 219 + width: 175px; 220 + } 221 + 222 + #filebox input { 223 + display: block; 224 + } 225 + 226 + #filebox label { 227 + display: block; 228 + margin: 1em .5em; 229 + } 230 + 231 + .instructions { 232 + display: none; 233 + } 234 + 235 + /* color picker/palette box */ 236 + #colorbox { 237 + width: 225px; 238 + } 239 + 240 + .colors, 241 + .colors li { 242 + list-style: none; 243 + margin: 0; 244 + padding: 0; 245 + } 246 + 247 + .colors { 248 + margin: .5em 0; 249 + } 250 + 251 + .button { 252 + display: block; 253 + float: left; 254 + border: 2px solid rgba(255,255,255,.5); 255 + } 256 + 257 + .button.save { 258 + float: none; 259 + width: 75px; 260 + } 261 + 262 + .button:hover { 263 + background: #ddd; 264 + } 265 + 266 + .button.color { 267 + background: #fff; 268 + border: 5px solid transparent; 269 + width: 25px; 270 + height: 25px; 271 + padding: 0; 272 + margin: 3px; 273 + } 274 + 275 + .button.color.cyan { 276 + background: cyan; 277 + } 278 + 279 + .button.color.magenta { 280 + background: magenta; 281 + } 282 + 283 + .button.color.yellow { 284 + background: yellow; 285 + } 286 + 287 + .button.color.black { 288 + background: black; 289 + } 290 + 291 + .button.color.gray { 292 + background: gray; 293 + } 294 + 295 + .button.color.white { 296 + background: white; 297 + border: 2px solid rgba(0,0,0,.25); 298 + } 299 + 300 + .button.color.transparent { 301 + border-color: #ccc; 302 + background: url('../assets/bg.png'); 303 + } 304 + 305 + .button.color.current, 306 + .button.current, 307 + .button.custom.current { 308 + border: 5px solid #333; 309 + } 310 + 311 + .button.brush.current { 312 + margin: 1px 8px 1px 0; 313 + } 314 + 315 + /* color picker */ 316 + #eight-bit-colors { 317 + margin: 0 auto; 318 + background: transparent; 319 + } 320 + #eight-bit-picker { 321 + position: relative; 322 + } 323 + 324 + #eight-bit-picker .color-demo { 325 + background: #000; 326 + width: 100%; 327 + height: 20px; 328 + margin-top: 10px; 329 + } 330 + 331 + #eight-bit-picker p { 332 + font-size: 1.5em; 333 + margin: 0 0 10px; 334 + } 335 + 336 + #hex-color { 337 + width: 48%; 338 + vertical-align: middle; 339 + margin-left: 5px; 340 + font-size: 1.5em; 341 + font-family: monospace; 342 + padding: 5px 3px 3px; 343 + } 344 + 345 + .pound { 346 + vertical-align: middle; 347 + font-size: 2em; 348 + } 349 + 350 + #color-dropper { 351 + padding: 5px; 352 + vertical-align: middle; 353 + } 354 + 355 + /* save and open modal */ 356 + .modal { 357 + text-align: center; 358 + width: 100%; 359 + height: 100%; 360 + background: rgba(0,0,0,.8); 361 + position: absolute; 362 + top: 0; 363 + left: 0; 364 + z-index: 999999; 365 + } 366 + 367 + .inside-modal { 368 + text-align: center; 369 + width: auto; 370 + max-width: 50%; 371 + display: inline-block; 372 + padding: 20px; 373 + margin: 20px; 374 + box-shadow: 5px 5px 0 #000; 375 + border: 1px solid #000; 376 + background: #eeffff; 377 + position: relative; 378 + } 379 + 380 + .inside-modal h2 { 381 + font-size: 2em; 382 + margin: .25em 1em; 383 + } 384 + 385 + .inside-modal .ui-hider { 386 + position: absolute; 387 + top: 10px; 388 + right: 10px; 389 + background: none; 390 + border: 0; 391 + padding: 0; 392 + margin: 0; 393 + } 394 + 395 + .inside-modal .ui-hider img { 396 + padding: 0; 397 + margin: 0; 398 + } 399 + 400 + .inside-modal .ui-hider:hover { 401 + cursor: pointer; 402 + } 403 + 404 + .gallery { 405 + margin: 0; 406 + padding: 0; 407 + } 408 + 409 + .gallery li { 410 + list-style-type: none; 411 + display: inline-block; 412 + margin: 10px; 413 + border: 5px solid #000; 414 + position: relative; 415 + } 416 + 417 + .gallery button { 418 + background: none; 419 + border: 0; 420 + padding: 0; 421 + } 422 + 423 + .gallery li img { 424 + height: 50px; 425 + } 426 + 427 + .gallery button.delete { 428 + position: absolute; 429 + top: -10px; 430 + right: -10px; 431 + } 432 + 433 + .gallery li .delete img { 434 + height: 10px; 435 + padding: 5px; 436 + background-color: #fff; 437 + border: 2px solid #000; 438 + } 439 + 440 + #finished-art { 441 + max-width: 95%; 442 + display: block; 443 + border: 5px solid #000; 444 + margin: 10px auto; 445 + background: url('../assets/bg.png'); 446 + } 447 + 448 + #pxon-modal-container textarea { 449 + width: 100%; 450 + min-width: 500px; 451 + min-height: 200px; 452 + } 453 + 454 + /* mobile */ 455 + @media only screen and ( min-device-width: 320px ) and ( max-device-width: 568px ) { 456 + body { 457 + font-size: 1em; 458 + } 459 + 460 + .ui-dragger { 461 + display: none; 462 + } 463 + 464 + input { 465 + font-size: .6em; 466 + } 467 + 468 + header { 469 + width: 300px; 470 + } 471 + 472 + #toolbox input { 473 + font-size: .8em; 474 + } 475 + 476 + #save-selection { 477 + display: none; 478 + } 479 + 480 + h2 { 481 + margin: .5em 0; 482 + } 483 + } 484 + 485 + /* misc */ 486 + .hidden { 487 + display: none!important; 488 + } 489 + 490 + .clearfix:after { 491 + content: "."; 492 + display: block; 493 + clear: both; 494 + visibility: hidden; 495 + line-height: 0; 496 + height: 0; 497 + } 498 + 499 + * html .clearfix { 500 + height: 1%; 501 + }
+406
src/index.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <meta name="description" content="make8bitart.com is a fun free in-browser pixel art tool for you!"> 7 + <meta property="og:description" content="make8bitart.com is a fun free in-browser pixel art tool for you!" /> 8 + <meta property="og:image" content="https://make8bitart.com/assets/brighton.png" /> 9 + <meta property="og:title" content="make 8-bit art!" /> 10 + <title>make 8-bit art!</title> 11 + <link rel="preload" href="/assets/fonts/8bit-Art-Sans-subset.woff2" as="font" type="font/woff2" crossorigin> 12 + <link rel="preload" href="/assets/fonts/VT323-Regular-subset.woff2" as="font" type="font/woff2" crossorigin> 13 + <link rel="stylesheet" href="draggybits.min.css" /> 14 + <link rel="stylesheet" href="make8bitart.min.css" /> 15 + <link rel="icon" href="/assets/brighton.png" /> 16 + <link rel="manifest" href="/manifest.json"> 17 + <link rel="me" href="https://glitch.com/@jennschiffer" /> 18 + <meta name="theme-color" content="#00ffff"/> 19 + <script src="app.min.js" defer></script> 20 + <script defer data-domain="make8bitart.com" src="https://plausible.io/js/script.js"></script> 21 + </head> 22 + 23 + <!-- 24 + ____ 25 + ___ .-~. /_"-._ 26 + `-._~-. / /_ "~o\ :Y 27 + \ \ / : \~x. ` ') 28 + ] Y / | Y< ~-.__j ------------------------- 29 + / ! _.--~T : l l< /.-~ / \ 30 + / / ____.--~ . ` l /~\ \<|Y -----\ JENN SCHIFFER MADE THIS | 31 + / / .-~~" /| . ',-~\ \L| \ WOWOWOWOWOWOWOWOW / 32 + / / / .^ \ Y~Y \.^>/l_ "--' \________________________/ 33 + / Y .-"( . l__ j_j l_/ /~_.-~ . 34 + Y l / \ ) ~~~." / `/"~ / \.__/l_ 35 + | \ _.-" ~-{__ l : l._Z~-.___.--~ 36 + | ~---~ / ~~"---\_ ' __[> 37 + l . _.^ ___ _>-y~ 38 + \ \ . .-~ .-~ ~>--" / 39 + \ ~---" / ./ _.-' 40 + "-.,_____.,_ _.--~\ _.-~ 41 + ~~ ( _} 42 + `. ~( 43 + ) \ 44 + /,`--'~\--' 45 + --> 46 + 47 + <body id="gravity-and-time-are-social-constructs"> 48 + 49 + <!-- 50 + .--.__ 51 + .~ (@) ~~~---_ 52 + { `-_~,,,,,,) 53 + { (_ ', ---- haha nope 54 + ~ . = _', 55 + ~- '. =-' 56 + ~ : 57 + . _,.-~ (''); 58 + '. .-~ \ \ ; 59 + ':-_ _.--~ \ \; _-=,. 60 + ~-:-.__ _.-~ { '---- _'-=,. 61 + ~-._~--._ __.-~ ~---------=,.` 62 + ~~-._~~-----~~~~~~ .+++~~~~~~~~-__ / 63 + ~-.,____ { - + } _/ 64 + ~~-.______{_ _ -=\ / /_.~ 65 + : ~--~ // / ..- 66 + : / / // / (( 67 + : / / { `-------,. )) 68 + : / ''=--------. }o 69 + .=._________,' ) )) 70 + ) _________ -'' ~~ 71 + / / _ _ 72 + (_.-.'O'-'. HEADER INFO --> 73 + 74 + <header id="header" class="draggy" role="banner"> 75 + <div class="controls"> 76 + <button role="button" class="ui-dragger"> 77 + <img src="assets/draggybits/dragger.png" width="30" height="30" alt="move controls window"> 78 + </button> 79 + </div> 80 + 81 + <h1>make 8-bit art!</h1> 82 + <menu id="minimized-tools-menu" role="navigation"></menu> 83 + </header> 84 + 85 + <!-- 86 + _..--+~/@-~--. 87 + _-=~ ( . ' 88 + _-~ _.--=.\ \'''' --- BOOTY HAD ME LIKE... 89 + _~ _- \ \_\ 90 + = _= '--' 91 + ' = . 92 + : : ____ '=_. ___ 93 + ___ | ; ____ '~--.~. 94 + ; ; _____ } | 95 + ___= \ ___ __ __..-...__ ___/__/__ 96 + : =_ _.-~~ ~~--.__ 97 + _____ \ ~-+-~ ___~=_______ 98 + ~@#~~ == ...______ __ ___ _--~~--_ SOCIAL LINKS 99 + --> 100 + 101 + <section id="what" class="draggy" title="what is this?" data-title="what"> 102 + <div class="controls"> 103 + <button role="button" class="ui-dragger"> 104 + <img src="assets/draggybits/dragger.png" width="30" height="30" alt="move controls window"> 105 + </button> 106 + <button role="button" class="ui-hider"> 107 + <img src="assets/draggybits/hider.png" width="30" height="30" alt="move controls window"> 108 + </button> 109 + </div> 110 + 111 + <h2>what is this?</h2> 112 + 113 + <p>this is an <a href="https://glitch.com/edit/#!/make8bitart" title="link to make8bitart repo on glitch" target="_blank">open source</a> pixel art drawing tool by <a href="https://jennschiffer.com" title="official website of" target="_blank">jenn schiffer</a>, now on <a href="https://glitch.com">glitch.com</a>!</p> 114 + 115 + <p>if you make something cool, i wanna see it – find me on the fediverse <a rel="me" href="https://pixel.kitchen/@jenn">@jenn@pixel.kitchen</a> or email jenn@dotbiz.info!</p> 116 + </section> 117 + 118 + <!-- 119 + . . 120 + / `. .' \ 121 + .---. < > < > .---. 122 + | \ \ - ~ ~ - / / | 123 + ~-..-~ ~-..-~ 124 + \~~~\.' `./~~~/ 125 + \__/ \__/ 126 + / .- . \ 127 + _._ _.- .-~ ~-. / } \/~~~/ 128 + _.-'q }~ / } { ; \__/ 129 + butts --- {'__, / ( / { / `. ,~~| . . 130 + `''''='~~-.__( /_ | /- _ `..-' \\ // 131 + / \ =/ ~~--~~{ ./| ~-. `-..__\\_//_.-' 132 + { \ +\ \ =\ ( ~ - . _ _ _..---~ 133 + | | { } \ \_\ 134 + '---.o___,' .o___, TOOLBOX --> 135 + 136 + <section id="toolbox" class="draggy" title="canvas/brush tools" data-title="tools"> 137 + <div class="controls"> 138 + <button role="button" class="ui-dragger"> 139 + <img src="assets/draggybits/dragger.png" width="30" height="30" alt="move controls window"> 140 + </button> 141 + <button role="button" class="ui-hider"> 142 + <img src="assets/draggybits/hider.png" width="30" height="30" alt="move controls window"> 143 + </button> 144 + </div> 145 + 146 + <div id="instruments" class="inner"> 147 + <h2>instruments</h2> 148 + <menu role="toolbar"> 149 + <button id="pencil" role="button" class="current-tool icon-button"> 150 + <img src="assets/icons/pencil.png" width="45" height="45" alt="draw" /> 151 + </button> 152 + <button id="paint" role="button" class="icon-button"> 153 + <img src="assets/icons/paint.png" width="52" height="45" alt="paint/fill" /> 154 + </button> 155 + </menu> 156 + </div> 157 + 158 + <div id="editing" class="inner"> 159 + <h2>editing</h2> 160 + <menu role="toolbar"> 161 + <button id="cut" role="button" class="icon-button"> 162 + <img src="assets/icons/cut.png" width="27" height="45" alt="cut" /> 163 + </button> 164 + <button id="copy" role="button" class="icon-button"> 165 + <img src="assets/icons/copy.png" width="34" height="45" alt="copy" /> 166 + </button> 167 + <button id="paste" role="button" class="icon-button"> 168 + <img src="assets/icons/paste.png" width="30" height="45" alt="paste" /> 169 + </button> 170 + </menu> 171 + 172 + <ul class="instructions paste"> 173 + <li>click on the canvas where you want the top left corner of your copied clip to be pasted.</li> 174 + </ul> 175 + 176 + <button role="button" class="text-button" id="undo" disabled="disabled">undo</button> 177 + <button role="button" class="text-button" id="redo" disabled="disabled">redo</button> 178 + <button role="button" class="text-button" id="new-canvas">new canvas</button> 179 + </div> 180 + 181 + <div id="size" class="inner"> 182 + <h2>brush size</h2> 183 + <input aria-label="pixel size text input" id="pixel-size" class="pixel-size-input" type="number" min="2" max="100" step="1" value="15" /> 184 + <input aria-label="pixel size slider" id="pixel-size-slider" class="pixel-size-input" type="range" min="2" max="100" step="1" value="15" /> 185 + <div id="pixel-size-demo" class="color-demo"> </div> 186 + </div> 187 + </section> 188 + 189 + <!-- 190 + _..-=~=-._ 191 + _.-~' ~. 192 + __..---~~~~~ ~. 193 + _.-~~ _.._ ~. 194 + _ -~_ / \ ; 195 + ( ` '@) { | : 196 + / | | : 197 + / /} ( ) | | .- --- farting on 198 + / //-=-~-_-_ | | \ ; .' the h8rs 199 + / // | =._-| }/ / / /_.==\ ; _.' * 200 + ( oo //| = ) ~| /.__..-='| \ :' ** 201 + ====||*| / / + ) \ |_.-~`\ : |** 202 + |*| * / / / / \ | ([ ]) /|||( 203 + * |* /_/ / / ( ] `/ \' /|||_ 204 + **(* | (((| /_/ __/_/__ -| |-- _|_|__ 205 + *|\| (((| ----- __|_|__ 206 + _/(h8rs)|__ ''' ----- 207 + _||_|__ FILE BOX --> 208 + 209 + <section id="filebox" class="draggy" title="export/save" data-title="export-save"> 210 + <div class="controls"> 211 + <button role="button" class="ui-dragger"> 212 + <img src="assets/draggybits/dragger.png" alt="move controls window"> 213 + </button> 214 + <button role="button" class="ui-hider"> 215 + <img src="assets/draggybits/hider.png" alt="move controls window"> 216 + </button> 217 + </div> 218 + 219 + <div id="import" class="inner hidden"> 220 + <h2>import art</h2> 221 + 222 + <label for="open-local" class="local" id="open-local-form"> 223 + from local storage: 224 + <button role="button" class="text-button" id="open-local">import local art</button> 225 + </label> 226 + 227 + <label for="import-pxon" class="pxon" id="import-pxon-form"> 228 + import <a href="https://jennmoney.biz/pxon">pxon</a> (WARNING: THIS BREAKS A LOT): 229 + <input type="file" id="import-pxon" name="import-pxon" /> 230 + </label> 231 + </div> 232 + 233 + <div id="export"> 234 + <h2>export art</h2> 235 + 236 + <label for="save-png" class="png" id="save-png-form"> 237 + to png:<br /> 238 + <button role="button" class="text-button" id="save-full">full page</button> 239 + <button role="button" class="text-button" id="save-selection">selection</button> 240 + </label> 241 + 242 + <label for="save-local" class="local" id="save-local-form"> 243 + to local storage:<br /> 244 + <button role="button" class="text-button local" id="save-local">local store</button> 245 + </label> 246 + 247 + <label for="export-pxon" class="pxon hidden" id="export-pxon-form"> 248 + export <a href="https://jennmoney.biz/pxon">pxon</a>:<br /> 249 + <button role="button" class="text-button pxon" id="export-pxon" >export pxon</button> 250 + </label> 251 + </div> 252 + 253 + <ul class="instructions save"> 254 + <li>click and drag to select the area of the canvas you want to save.</li> 255 + </ul> 256 + </section> 257 + 258 + <!-- 259 + <\ _ 260 + \\ _/{ 261 + _ \\ _- -_ 262 + /{ / `\ _- - -_ 263 + _~ = ( @ \ - - -_ 264 + _- - ~-_ \( =\ \ - -_ 265 + _~ - ~_ | 1 :\ \ _-~-_ - -_ 266 + _- - ~ |V: \ \ _-~ ~-_- -_ 267 + _-~ - / | : \ \ ~-_- -_ 268 + _-~ - _.._ { | : _-`` ~- _-_ 269 + _-~ -__..--~ ~-_ { : \:} --- hi h8rs 270 + =~__.--~~ ~-_\ : / 271 + \ : /__ 272 + //`Y'--\\ 273 + <+ \\ 274 + \\ WWW 275 + MMM COLORBOX --> 276 + 277 + <section id="colorbox" class="draggy" title="color tools" data-title="colors"> 278 + <div class="controls"> 279 + <button role="button" class="ui-dragger"> 280 + <img src="assets/draggybits/dragger.png" width="30" height="30" alt="move controls window"> 281 + </button> 282 + <button role="button" class="ui-hider"> 283 + <img src="assets/draggybits/hider.png" width="30" height="30" alt="move controls window"> 284 + </button> 285 + </div> 286 + 287 + <div class="tabs" role="navigation"> 288 + <button role="button" class="pickers active" data-href="#pickers">color pickers</button> 289 + <button role="button" class="palettes" data-href="#custom-palettes">history/custom palettes</button> 290 + </div> 291 + 292 + <div id="pickers"> 293 + <div id="hex-picker"> 294 + <h2>hex value:</h2> 295 + <span class="pound">#</span><input aria-label="hex color input" type="text" id="hex-color" value="000000" autocomplete="off" autocorrect="off" spellcheck="false" /> 296 + 297 + <button role="button" id="color-dropper" class="icon-button"> 298 + <img src="assets/icons/dropper.png" width="45" height="45" alt="color dropper" /> 299 + </button> 300 + </div> 301 + 302 + <ul class="colors clearfix"> 303 + <li><button role="button" class="button color primary cyan" title="cyan" data-color="rgba(0, 255, 255, 1)"> </button></li> 304 + <li><button role="button" class="button color primary magenta" title="magenta" data-color="rgba(255, 0, 255, 1)"> </button></li> 305 + <li><button role="button" class="button color primary yellow" title="yellow" data-color="rgba(255, 255, 0, 1)"> </button></li> 306 + <li><button role="button" class="button color primary black" title="black" data-color="rgba(0, 0, 0, 1)"> </button></li> 307 + <li><button role="button" class="button color primary gray" title="gray" data-color="rgba(128, 128, 128, 1)"> </button></li> 308 + <li><button role="button" class="button color primary white" title="white" data-color="rgba(255, 255, 255, 1)"> </button></li> 309 + <li><button role="button" class="button color transparent" title="erase" data-color="rgba(0, 0, 0, 0)"> </button></li> 310 + </ul> 311 + 312 + <div id="eight-bit-picker"> 313 + <h2 class="eightbit">click to pick:</h2> 314 + <canvas id="eight-bit-colors" width="195" height="195"></canvas> 315 + <div class="color-demo eightbit"></div> 316 + </div> 317 + </div> 318 + 319 + <div id="custom-palettes"> 320 + <div id="color-history" class="inner"> 321 + <h2 class="color-history-label">history:</h2> 322 + <ul class="color-history-list colors clearfix"></ul> 323 + <div id="color-history-tools"> 324 + <button role="button" class="text-button clear">clear history</button> 325 + </div> 326 + </div> 327 + 328 + <div id="color-custom" class="palettes inner"> 329 + <h2 class="color-upload-label">custom palette:</h2> 330 + <ul class="color-custom-list colors clearfix"></ul> 331 + <div id="color-custom-tools"> 332 + <p>Upload file in "name,hex" csv format, like in <a href="assets/example.csv">example.csv</a>!</p> 333 + 334 + <input type="file" name="upload-palette" class="import" /> 335 + <button role="button" class="text-button clear">clear palette</button> 336 + </div> 337 + </div> 338 + </div> 339 + 340 + </section> 341 + 342 + <section id="save-modal-container" class="modal hidden"> 343 + <div id="save-modal" class="inside-modal"> 344 + <div class="controls"> 345 + <button role="button" class="ui-hider"> 346 + <img src="assets/draggybits/hider.png" width="30" height="30" alt="move controls window"> 347 + </button> 348 + </div> 349 + <h2>you saved your art!</h2> 350 + <a href="#" target="_blank" download="art.png"><img id="finished-art" /></a> 351 + 352 + <p>Click or drag your art to your desktop to save!<br /> 353 + <button role="button" class="text-button" id="save-imgur">Or upload to imgur.com!</button> 354 + </p> 355 + <p id="link-imgur"></p> 356 + </div> 357 + </section> 358 + 359 + <section id="open-modal-container" class="modal hidden"> 360 + <div id="open-modal" class="inside-modal"> 361 + <div class="controls"> 362 + <button role="button" class="ui-hider"> 363 + <img src="assets/draggybits/hider.png" width="30" height="30" alt="move controls window"> 364 + </button> 365 + </div> 366 + 367 + <h2>you have some locally saved art!</h2> 368 + <h3>wanna open one? click a thumbnail...</h3> 369 + 370 + <ul class="gallery"> </ul> 371 + </div> 372 + </section> 373 + 374 + <section id="pxon-modal-container" class="modal hidden"> 375 + <div id="open-modal-pxon" class="inside-modal"> 376 + <div class="controls"> 377 + <button role="button" class="ui-hider"> 378 + <img src="assets/draggybits/hider.png" width="30" height="30" alt="move controls window"> 379 + </button> 380 + </div> 381 + 382 + <h2>export pxon!</h2> 383 + <h3><a href="https://jennmoney.biz/pxon/">what is pxon? read my spec!</a></h3> 384 + 385 + <p>the gist of it is that pxon is pixel art represented in JSON. the current session of your drawing should be represented in the textarea below - paste into a .json file or app that supports pxon for good fun!</p> 386 + 387 + <textarea></textarea> 388 + 389 + <p><strong>note: pxon is a draft proposal and a fake idea by me (jenn, creator of make8bitart.com) that's being updated sporadically and sometimes doesn't work. please let me know if it's broken!</strong></p> 390 + </div> 391 + </section> 392 + 393 + <script type="text/javascript"> 394 + if('serviceWorker' in navigator) { 395 + navigator.serviceWorker.register('service-worker.js') 396 + .then(function(reg) { 397 + console.log('service worker registered --- ' + reg.scope + ' :)'); 398 + }).catch(function(err) { 399 + console.log('service worker failed: ' + err); 400 + }); 401 + } 402 + </script> 403 + 404 + 405 + </body> 406 + </html>
+1779
src/js/app/make8bitart.js
··· 1 + /* 2 + * make8bitart.com 3 + * author: jenn schiffer 4 + * turn down for #butts 5 + */ 6 + 7 + (function ($, key, window, document) { 8 + "use strict"; 9 + 10 + var ctx, 11 + pickerPaletteCtx, 12 + savedCanvas, 13 + savedCanvasArray, 14 + clipboard, 15 + rectangleSelection, 16 + historyPointer, 17 + drawPathId, 18 + ctxOverlay, 19 + colorHistory, 20 + resizing; 21 + var undoRedoHistory = []; 22 + var drawHistory = []; 23 + 24 + var classes = { 25 + selectionCanvas: "selectionCanvas", 26 + current: "current", 27 + currentTool: "current-tool", 28 + dropperMode: "dropper-mode", 29 + wait: "wait", 30 + tipText: "tip-text", 31 + color: "color", 32 + transparent: "transparent", 33 + activeTab: "active", 34 + hidden: "hidden", 35 + local: "local", 36 + deleteItem: "delete", 37 + }; 38 + 39 + var DOM = { 40 + $window: $(window), 41 + $body: $("body"), 42 + 43 + $header: $("#header"), 44 + $whatbox: $("#what"), 45 + $toolbox: $("#toolbox"), 46 + $filebox: $("#filebox"), 47 + $colorbox: $("#colorbox"), 48 + $waiting: $("#wait"), 49 + 50 + $tabs: $(".tabs button"), 51 + 52 + $color: $(".color"), 53 + $colorHistoryModule: $("#color-history"), 54 + $colorHistoryPalette: $(".color-history-list"), 55 + $colorCustomPalette: $(".color-custom-list"), 56 + $pickers: $("#pickers"), 57 + $customPalettes: $("#custom-palettes"), 58 + $defaultPalettes: $("#default-palettes"), 59 + $8bitPicker: $("#eight-bit-colors"), 60 + $colorPickerDemo: $(".color-demo"), 61 + $hex: $("#hex-color"), 62 + $dropper: $("#color-dropper"), 63 + 64 + $toolButtons: $(".icon-button"), 65 + 66 + $pencil: $("#pencil"), 67 + $paint: $("#paint"), 68 + 69 + $buttonNewCanvas: $("#new-canvas"), 70 + $buttonSaveLocal: $("#save-local"), 71 + $buttonSaveFull: $("#save-full"), 72 + $buttonSaveSelection: $("#save-selection"), 73 + $buttonSaveImgur: $("#save-imgur"), 74 + $buttonOpenFile: $("#open-file"), 75 + $buttonOpenLocal: $("#open-local"), 76 + 77 + $buttonImportPXON: $("#import-pxon"), 78 + $buttonExportPXON: $("#export-pxon"), 79 + $pxonModalContainer: $("#pxon-modal-container"), 80 + 81 + $pixelSizeInput: $(".pixel-size-input"), 82 + $pixelSizeDemoDiv: $("#pixel-size-demo"), 83 + 84 + $minimizedToolsMenu: $("#minimized-tools-menu"), 85 + $draggydivs: $(".draggy"), 86 + $saveInstruction: $(".instructions.save"), 87 + $pasteInstructions: $(".instructions.paste"), 88 + 89 + $undo: $("#undo"), 90 + $redo: $("#redo"), 91 + 92 + $cut: $("#cut"), 93 + $copy: $("#copy"), 94 + $paste: $("#paste"), 95 + 96 + $modalContainers: $(".modal"), 97 + $modalExit: $(".modal .ui-hider"), 98 + 99 + $saveModalContainer: $("#save-modal-container"), 100 + $saveImg: $("#finished-art"), 101 + $linkImgur: $("#link-imgur"), 102 + 103 + $openLocalModalContainer: $("#open-modal-container"), 104 + $openFile: $("#open-file"), 105 + $openLocalForm: $("#open-local-form"), 106 + $openLocal: $("#open-local"), 107 + $openLocalGallery: $("#open-modal .gallery"), 108 + $openLocalGalleryItems: $("#open-modal .gallery li"), 109 + $colorHistoryTools: { 110 + clearPalette: $("#color-history-tools .clear"), 111 + exportPalette: $("#color-history-tools .export"), 112 + }, 113 + 114 + $colorCustomTools: { 115 + clearPalette: $("#color-custom-tools .clear"), 116 + importPalette: $("#color-custom-tools .import"), 117 + }, 118 + }; 119 + 120 + var mode = { 121 + dropper: false, 122 + drawing: false, 123 + save: false, 124 + paint: false, 125 + trill: true, 126 + }; 127 + 128 + var action = { 129 + draw: "draw", 130 + fill: "fill", 131 + cut: "cut", 132 + paste: "paste", 133 + save: "save", 134 + index: 0, 135 + }; 136 + 137 + var windowCanvas = { 138 + height: DOM.$window.height() - (DOM.$window.height() % 15), 139 + width: Math.max(DOM.$window.width() - (DOM.$window.width() % 15), 250), 140 + background: 'url("assets/bg.png")', 141 + }; 142 + 143 + var copy = { 144 + selectionOff: "turn off selection", 145 + selectionOn: "save selection", 146 + }; 147 + 148 + var pixel = { 149 + color: "rgba(0, 0, 0, 1)", 150 + }; 151 + 152 + var pxon = { 153 + exif: { 154 + software: "http://make8bitart.com", 155 + }, 156 + pxif: { 157 + pixels: [], 158 + }, 159 + }; 160 + 161 + // you should register your own imgur app here https://api.imgur.com/ 162 + var imgur = { 163 + clientId: "11112830fafe58a", 164 + }; 165 + 166 + /*** OUTSIDE LIBRARY STUFF - DRAGGYDIVS ***/ 167 + 168 + var onMinimizeToolsMenuClick = function (e) { 169 + var $this = $(this); 170 + var $elem = $this.data("draggy"); 171 + $elem.draggyBits("restore"); 172 + $this.parent().remove(); 173 + }; 174 + 175 + var onMinimize = function ($elem) { 176 + var $a = $( 177 + '<button role="button" tabindex="0" data-section="#' + 178 + $elem.attr("data-title") + 179 + '">' 180 + ) 181 + .html($elem.attr("title")) 182 + .on("click", onMinimizeToolsMenuClick) 183 + .data("draggy", $elem); 184 + $("<span></span>").append($a).appendTo(DOM.$minimizedToolsMenu); 185 + }; 186 + 187 + DOM.$draggydivs.draggyBits({ onMinimize: onMinimize }); 188 + 189 + // if mouse up is on toolboxes, don't keep drawing 190 + DOM.$draggydivs.mouseup(function () { 191 + DOM.$canvas.off("mousemove"); 192 + }); 193 + 194 + /*** DRAGGY POSITIONS ***/ 195 + 196 + DOM.$header.css({ 197 + left: "20px", 198 + top: "20px", 199 + }); 200 + DOM.$colorbox.css({ 201 + left: "20px", 202 + top: "240px", 203 + }); 204 + DOM.$toolbox.css({ 205 + left: "40px", 206 + top: "260px", 207 + }); 208 + DOM.$filebox.css({ 209 + left: "60px", 210 + top: "280px", 211 + }); 212 + DOM.$whatbox.css({ 213 + left: "80px", 214 + top: "300px", 215 + }); 216 + 217 + 218 + /*** FUNCTIONS WOWOWOW ***/ 219 + 220 + /* canvas & drawing */ 221 + 222 + var generateCanvas = function () { 223 + // drawing 224 + DOM.$canvas = $( 225 + '<canvas id="canvas" width="' + 226 + windowCanvas.width + 227 + '" height="' + 228 + windowCanvas.height + 229 + "\">Your browser doesn't support canvas. Boo-hiss.</canvas>" 230 + ); 231 + DOM.$body.prepend(DOM.$canvas); 232 + ctx = DOM.$canvas[0].getContext("2d", { willReadFrequently: true }); 233 + 234 + // selection save overlay 235 + DOM.$overlay = $( 236 + '<canvas id="overlay" width="' + 237 + windowCanvas.width + 238 + '" height="' + 239 + windowCanvas.height + 240 + '"></canvas>' 241 + ); 242 + DOM.$overlay 243 + .css({ 244 + background: "none", 245 + position: "absolute", 246 + top: 0, 247 + left: 0, 248 + }) 249 + .addClass(classes.hidden); 250 + 251 + DOM.$body.prepend(DOM.$overlay); 252 + ctxOverlay = DOM.$overlay[0].getContext("2d", { willReadFrequently: true }); 253 + ctxOverlay.fillStyle = "rgba(0,0,0,.5)"; 254 + 255 + // restore webstorage data 256 + if (canStorage()) { 257 + drawFromLocalStorage(); 258 + } 259 + }; 260 + 261 + var setCanvasSize = function (width, height) { 262 + // sets canvas width and height 263 + windowCanvas.width = width - (width % pixel.size); 264 + windowCanvas.height = height - (width % pixel.size); 265 + 266 + DOM.$canvas.attr("width", width).attr("height", height); 267 + DOM.$overlay.attr("width", width).attr("height", height); 268 + ctx = DOM.$canvas[0].getContext("2d", { willReadFrequently: true }); 269 + ctxOverlay = DOM.$overlay[0].getContext("2d", { willReadFrequently: true }); 270 + ctxOverlay.fillStyle = "rgba(0,0,0,.5)"; 271 + }; 272 + 273 + var resizeCanvas = function () { 274 + if ( 275 + DOM.$window.width() - (DOM.$window.width() % pixel.size) <= 276 + windowCanvas.width && 277 + DOM.$window.height() - (DOM.$window.height() % pixel.size) <= 278 + windowCanvas.height 279 + ) { 280 + return; 281 + } else { 282 + // if local storage 283 + if (!canStorage() || mode.save) { 284 + return; 285 + } else { 286 + var newWidth = DOM.$window.width() - (DOM.$window.width() % pixel.size); 287 + var newHeight = 288 + DOM.$window.height() - (DOM.$window.height() % pixel.size); 289 + 290 + // save image 291 + saveToLocalStorage(); 292 + 293 + // set canvas size 294 + setCanvasSize(newWidth, newHeight); 295 + 296 + // draw image 297 + drawFromLocalStorage(); 298 + } 299 + } 300 + }; 301 + 302 + var resetCanvas = function (background, sizeToViewport) { 303 + if ( 304 + window.confirm( 305 + "You cannot undo canvas resets. Are you sure you want to erase this entire drawing?" 306 + ) 307 + ) { 308 + ctx.clearRect(0, 0, DOM.$canvas.width(), DOM.$canvas.height()); 309 + 310 + if (sizeToViewport) { 311 + // set the canvas to viewport size if new 312 + setCanvasSize(DOM.$body.prop("clientWidth"), DOM.$window.height()); 313 + } 314 + 315 + if (background && background !== "rgba(0, 0, 0, 0)") { 316 + ctx.fillStyle = background; 317 + ctx.fillRect(0, 0, DOM.$canvas.width(), DOM.$canvas.height()); 318 + } 319 + 320 + // reset history 321 + undoRedoHistory = []; 322 + historyPointer = -1; 323 + DOM.$redo.attr("disabled", "disabled"); 324 + DOM.$undo.attr("disabled", "disabled"); 325 + } 326 + }; 327 + 328 + var initPixel = function (size) { 329 + pixel.size = parseInt(size); 330 + DOM.$pixelSizeDemoDiv.css({ 331 + width: pixel.size, 332 + height: pixel.size, 333 + }); 334 + DOM.$pixelSizeInput.val(pixel.size); 335 + 336 + var img = new Image(); 337 + img.src = generateBackgroundGrid(pixel.size); 338 + img.onload = function updateCanvasBackground() { 339 + DOM.$canvas.css("background", "url(" + img.src + ")"); 340 + }; 341 + }; 342 + 343 + var drawPixel = function (x, y, color, size) { 344 + ctx.beginPath(); 345 + x = Math.ceil(x / size) * size - size; 346 + y = Math.ceil(y / size) * size - size; 347 + ctx.moveTo(x, y); 348 + ctx.fillStyle = color; 349 + ctx.lineHeight = 0; 350 + 351 + if (color === "rgba(0, 0, 0, 0)") { 352 + ctx.clearRect(x, y, size, size); 353 + } else { 354 + ctx.fillRect(x, y, size, size); 355 + } 356 + 357 + return { 358 + x: x, 359 + y: y, 360 + }; 361 + }; 362 + 363 + var drawOnMove = function (e) { 364 + var hoverData = ctx.getImageData(e.pageX, e.pageY, 1, 1).data; 365 + var hoverRGB = getRGBColor(hoverData); 366 + 367 + if (!areColorsEqual(hoverRGB, pixel.color, pixel.size)) { 368 + drawPixel(e.pageX, e.pageY, pixel.color, pixel.size); 369 + pushToHistory( 370 + action.index, 371 + action.draw, 372 + e.pageX, 373 + e.pageY, 374 + hoverRGB, 375 + pixel.color, 376 + pixel.size, 377 + drawPathId, 378 + null, 379 + null 380 + ); 381 + } 382 + }; 383 + 384 + var touchDraw = function (e) { 385 + // for each finger in your fingers 386 + for (var i = 0; i < e.touches.length; i++) { 387 + drawOnMove(e.touches[i]); 388 + } 389 + }; 390 + 391 + var paint = function (x, y, paintColor, initColor) { 392 + // thanks to Will Thimbleby http://will.thimbleby.net/scanline-flood-fill/ 393 + 394 + x = Math.ceil(x / pixel.size) * pixel.size - pixel.size; 395 + y = Math.ceil(y / pixel.size) * pixel.size - pixel.size; 396 + 397 + // xMin, xMax, y, down[true] / up[false], extendLeft, extendRight 398 + var ranges = [[x, x, y, null, true, true]], 399 + w = windowCanvas.width; 400 + 401 + // get data array from ImageData object 402 + var img = ctx.getImageData(0, 0, windowCanvas.width, windowCanvas.height), 403 + imgData = img.data; 404 + if (paintColor[0] === "#") { 405 + paintColor = hexToRgba(paintColor); 406 + } 407 + var paintColorArray = paintColor 408 + .substring(5, paintColor.length - 1) 409 + .split(","); 410 + 411 + // lookup pixel colour from x & y coords 412 + function getColorForCoords(x, y) { 413 + var index = 4 * (x + y * windowCanvas.width); 414 + var indices = [index, index + 1, index + 2, index + 3]; 415 + var values = indices.map(function (i) { 416 + return imgData[i]; 417 + }); 418 + return getRGBColor(values); 419 + } 420 + 421 + // set pixel colour in imgData array 422 + function markPixel(x, y) { 423 + var index = 4 * (x + y * w); 424 + 425 + var alpha = parseInt(paintColorArray[3]) === 0 ? 0 : 255; 426 + 427 + for (var j = index; j < index + pixel.size * 4; j += 4) { 428 + imgData[j] = paintColorArray[0]; 429 + imgData[j + 1] = paintColorArray[1]; 430 + imgData[j + 2] = paintColorArray[2]; 431 + imgData[j + 3] = alpha; 432 + 433 + for (var k = j; k < j + pixel.size * (w * 4); k += w * 4) { 434 + imgData[k] = paintColorArray[0]; 435 + imgData[k + 1] = paintColorArray[1]; 436 + imgData[k + 2] = paintColorArray[2]; 437 + imgData[k + 3] = alpha; 438 + } 439 + } 440 + pushToHistory( 441 + action.index, 442 + action.fill, 443 + x + pixel.size - 1, 444 + y + pixel.size - 1, 445 + initColor, 446 + paintColor, 447 + pixel.size, 448 + null, 449 + null 450 + ); 451 + } 452 + 453 + function addNextLine(newY, isNext, downwards) { 454 + var rMinX = minX; 455 + var inRange = false; 456 + 457 + for (var x = minX; x <= maxX; x += pixel.size) { 458 + // skip testing, if testing previous line within previous range 459 + var empty = 460 + (isNext || x < current[0] || x > current[1]) && 461 + areColorsEqual(getColorForCoords(x, newY), initColor); 462 + if (!inRange && empty) { 463 + rMinX = x; 464 + inRange = true; 465 + } else if (inRange && !empty) { 466 + ranges.push([ 467 + rMinX, 468 + x - pixel.size, 469 + newY, 470 + downwards, 471 + rMinX === minX, 472 + false, 473 + ]); 474 + inRange = false; 475 + } 476 + if (inRange) { 477 + markPixel(x, newY, paintColor, 1); 478 + } 479 + // skip 480 + if (!isNext && x === current[0]) { 481 + x = current[1]; 482 + } 483 + } 484 + if (inRange) { 485 + ranges.push([ 486 + rMinX, 487 + x - pixel.size, 488 + newY, 489 + downwards, 490 + rMinX === minX, 491 + true, 492 + ]); 493 + } 494 + } 495 + 496 + initColor = getColorForCoords(x, y); 497 + 498 + markPixel(x, y, paintColor, 1); 499 + 500 + while (ranges.length) { 501 + var current = ranges.pop(); 502 + var down = current[3] === true; 503 + var up = current[3] === false; 504 + 505 + var minX = current[0]; 506 + y = current[2]; 507 + 508 + if (current[4]) { 509 + while ( 510 + minX > 0 && 511 + areColorsEqual(getColorForCoords(minX - pixel.size, y), initColor) 512 + ) { 513 + minX -= pixel.size; 514 + markPixel(minX, y, paintColor, 1); 515 + } 516 + } 517 + 518 + var maxX = current[1]; 519 + if (current[5]) { 520 + while ( 521 + maxX < windowCanvas.width - pixel.size && 522 + areColorsEqual(getColorForCoords(maxX + pixel.size, y), initColor) 523 + ) { 524 + maxX += pixel.size; 525 + markPixel(maxX, y, paintColor, 1); 526 + } 527 + } 528 + 529 + current[0] -= pixel.size; 530 + current[1] += pixel.size; 531 + 532 + if (y < windowCanvas.height) { 533 + addNextLine(y + pixel.size, !up, true); 534 + } 535 + if (y > 0) { 536 + addNextLine(y - pixel.size, !down, false); 537 + } 538 + } 539 + 540 + // replace entire canvas 541 + ctx.putImageData(img, 0, 0); 542 + }; 543 + 544 + var canStorage = function () { 545 + try { 546 + return "localStorage" in window && window.localStorage !== null; 547 + } catch (e) { 548 + return false; 549 + } 550 + }; 551 + 552 + var drawToCanvas = function (src, x, y, clear) { 553 + if (clear) { 554 + ctx.clearRect(0, 0, DOM.$canvas.width(), DOM.$canvas.height()); 555 + } 556 + 557 + var img = new Image(); 558 + img.onload = function () { 559 + // increase canvas size in case image is bigger 560 + var newWidth = 561 + DOM.$canvas.width() < this.width ? this.width : DOM.$canvas.width(); 562 + var newHeight = 563 + DOM.$canvas.height() < this.height ? this.height : DOM.$canvas.height(); 564 + 565 + setCanvasSize(newWidth, newHeight); 566 + 567 + ctx.drawImage(img, x, y); 568 + }; 569 + img.src = src; 570 + }; 571 + 572 + var drawFromLocalStorage = function () { 573 + var savedCanvas = localStorage.make8bitartSavedCanvas; 574 + if (savedCanvas) { 575 + drawToCanvas(savedCanvas, 0, 0, true); 576 + } 577 + }; 578 + 579 + var pushToHistory = function ( 580 + actionIndex, 581 + actionType, 582 + x, 583 + y, 584 + rgbOriginal, 585 + rgbNew, 586 + pixelSize, 587 + drawPathId, 588 + srcOriginal, 589 + srcNew 590 + ) { 591 + // push to undoRedoHistory, will also become pxon.pxif.pixels 592 + var pixelDrawn = { 593 + index: actionIndex, 594 + action: actionType, 595 + x: x, 596 + y: y, 597 + originalColor: rgbOriginal, 598 + color: rgbNew, 599 + size: pixelSize, 600 + drawPathId: drawPathId, 601 + originalSrc: srcOriginal, 602 + src: srcNew, 603 + }; 604 + undoRedoHistory.push(pixelDrawn); 605 + drawHistory.push(pixelDrawn); 606 + historyPointer++; 607 + DOM.$undo.removeAttr("disabled"); 608 + }; 609 + 610 + var undoRedo = function (pointer, undoFlag) { 611 + var undoRedoColor, nextPointer; 612 + if (undoFlag) { 613 + undoRedoColor = undoRedoHistory[pointer].originalColor; 614 + nextPointer = pointer - 1; 615 + } else { 616 + undoRedoColor = undoRedoHistory[pointer].color; 617 + nextPointer = pointer + 1; 618 + } 619 + 620 + if ( 621 + undoRedoHistory[pointer].action === action.cut || 622 + undoRedoHistory[pointer].action === action.paste 623 + ) { 624 + // for cut and paste, original color is original canvas, color is new canvas lol sorry 625 + if (undoFlag) { 626 + drawToCanvas(undoRedoHistory[pointer].originalSrc, 0, 0, true); 627 + } else { 628 + drawToCanvas(undoRedoHistory[pointer].src, 0, 0, true); 629 + } 630 + return; 631 + } 632 + 633 + if ( 634 + undoRedoHistory[pointer].action === action.fill && 635 + undoRedoHistory[nextPointer] && 636 + undoRedoHistory[pointer].index === undoRedoHistory[nextPointer].index 637 + ) { 638 + if (undoFlag) { 639 + historyPointer--; 640 + } else { 641 + historyPointer++; 642 + } 643 + undoRedo(historyPointer, undoFlag); 644 + } 645 + 646 + drawPixel( 647 + undoRedoHistory[pointer].x, 648 + undoRedoHistory[pointer].y, 649 + undoRedoColor, 650 + undoRedoHistory[pointer].size 651 + ); 652 + 653 + if ( 654 + undoRedoHistory[pointer].drawPathId && 655 + undoRedoHistory[nextPointer] && 656 + undoRedoHistory[nextPointer].drawPathId === 657 + undoRedoHistory[pointer].drawPathId 658 + ) { 659 + if (undoFlag) { 660 + undoRedo(--historyPointer, undoFlag); 661 + } else { 662 + undoRedo(++historyPointer, undoFlag); 663 + } 664 + } 665 + }; 666 + 667 + var resetModes = function () { 668 + if (mode.dropper) { 669 + DOM.$dropper.removeAttr("style"); 670 + DOM.$canvas.removeClass(classes.dropperMode); 671 + mode.dropper = false; 672 + var backgroundIMG; 673 + 674 + if (pixel.color !== "rgba(0, 0, 0, 0)") { 675 + backgroundIMG = "none"; 676 + } 677 + 678 + DOM.$pixelSizeDemoDiv.css("background-image", backgroundIMG); 679 + DOM.$colorPickerDemo.css({ 680 + "background-image": backgroundIMG, 681 + "background-color": pixel.color, 682 + }); 683 + DOM.$hex.val(rgbToHex(pixel.color)); 684 + } else if (mode.save) { 685 + DOM.$buttonSaveSelection.click(); 686 + } else if (mode.copy || mode.cut) { 687 + DOM.$overlay.addClass(classes.hidden); 688 + } else if (mode.paste) { 689 + DOM.$pasteInstructions.addClass(classes.hidden); 690 + } 691 + 692 + for (var prop in mode) { 693 + if (mode.hasOwnProperty(prop)) { 694 + mode[prop] = false; 695 + } 696 + } 697 + 698 + DOM.$toolButtons.removeClass(classes.currentTool); 699 + }; 700 + 701 + var init8bitPicker = function () { 702 + // turns palette into canvas 703 + pickerPaletteCtx = DOM.$8bitPicker[0].getContext("2d", { willReadFrequently: true }); 704 + var img = new Image(); 705 + img.onload = function () { 706 + pickerPaletteCtx.drawImage(img, 0, 0); 707 + }; 708 + // NOTE: original png is assets/customcolors.png. using data uri so it works in different directories 709 + img.src = 710 + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMMAAADDCAYAAAA/f6WqAAAHDElEQVR4nO3T22vVBQDA8bOzm266c7SczWk6tVnZNq3sQqR2IbttszBwSkKM6CWnrLkSKnrIgnIuLwhFId0s2FA3o55MMwIrh3M+dEELuoG3bYplO79bf8M3jm/fh8+f8ElFF0cTIvmXieILWC4eRS6Fw8hwfAEZiS8jo0mIDIcR9zczOhIil0ZjJDcSIfHo/zDyD3QRSZnBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmCGvGeKfBhMiOjPEBIPYSDyE/BodQwajE8jx6E9kMP4HOXYp4n6HTgTIr4PM8GCEhMdz3OBpJDr2A2IGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYIb8ZogO9idEfHI/M/YZ9lfcj3wb9yH7os+R/vgEsj8eRfpHYmzfUMh8zhzpZ/7oC5Bo32Us2Pszs+9LxAxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxmuSIbg420JEQ0wyeWd2KlwB7I/2I5sD99BdkRfI9ujs8i20zG29VCEvPV2gPRvZ07uCJFw299YsHUAid7ajZjBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmCHPGd5oT4joUCdzaSM2FL6A7Ao6kQ3hK0hn3Ic8H/2JdPwWYs/tDZD1L+WQdztCZHADk+u4yLUfQIL2NxAzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjPkOUP7ioSI+lqQ+MIa7EjwJPJmsBpZFT6NrA53IauiU8jKX0JsxXsB8thTzKaWHPJNS4gEK89juSf6kLHH2xEzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjPkN0O48q4E+WgpEo8sww4GDyCd4f3IkvBh5N6wm4l/RBb/GGC3dY0hNy8LkPWLc8iBJQESLBnBxu74gFm0CjGDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMEN+MwRL5yZEtPMmZvhO7IvwdqQ1uBWpj+5EGsKXkYXREHLj8RCb8eIYMnVBgLTcMIb0z2fG5p/nZu1EclX3I2YwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxwRTKcWzAtQV6bjZw/tRDbfa4BWXH2JqT2XD0y71wbcv35w8isr05jk9vOIGW1zCM1p5EP5jBn5/zCVb6OnJlwC2IGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYIb8Zhi4cUpCfN8xHRk4dAO29eg85MGB65CZR+chs46uQWoGPkGqPx3AMmu+R0prmCXV3yKbp3+HHJ1xmJvUyYyvQ8xgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzJDfDD1zsgnR21qJ7P2wBtvYOxO5u2cGUtVTw/QuR6r3bEambNmDlTczxdV7kUWVPUjn1F6kd+r73MRWpKe0FjGDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMEN+M3TNKE+Q5Vlky6YqrHXLNciCrkpkclcVctWW+5CruzYg2Y5urGRpF1I0pRupy3YhrZO6ke7sq1jXuOXI5uJrETOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM+Q3w7OVJQmxdnEZsu6ZSVhTWxapXVuBTFg7mWm7GZnY1oKUr1qHFd/CpDNrkdllbcij5Uxb2TPYupLFTLoKMYMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwQ34zNGYLE6Kprph5aDx2RzMzvXkcUtJYxjTNRUqb70FKljZhhXObkYJxTcjUokZkUTHTXPww1pSuQxoLsogZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMYAYzXJEM9eMLEqJhWpqpK8Jm1hciGShdX4IUNlQi6YZ5TG0DVlDJpIrqkGy6HqkpbEDqCudj9elqJjUeMYMZzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwQ34zZNOphMiMYyoyXDlUBKWobAmTqWAm/g+lGSSdrkCKUkx5KotUpDJcQRmSKShAzGAGM5jBDGYwgxnMYAYzmMEMZjCDGcxgBjOYwQxmMIMZzGAGM5jBDGYwgxnMkNcM/wECh/7lGUVf0gAAAABJRU5ErkJggg=="; 711 + }; 712 + 713 + var initColorHistoryPalette = function () { 714 + if (colorHistory.length === 0) { 715 + return; 716 + } else { 717 + // make all color history values consistently hex without hash 718 + var sanitizedColors = sanitizeColorArray(colorHistory); 719 + 720 + sanitizedColors.forEach(function (color) { 721 + var latestColorButton = $( 722 + '<li><button role="button" class="button color" style="background-color:#' + 723 + color + 724 + '" title="history:#' + 725 + color + 726 + '" data-color="#' + 727 + color + 728 + '" /> </button></li>' 729 + ); 730 + DOM.$colorHistoryPalette.append(latestColorButton); 731 + }); 732 + 733 + // bind click to color buttons 734 + DOM.$color = $("." + classes.color); 735 + DOM.$color.click(bindColorClick); 736 + } 737 + }; 738 + 739 + var generateBackgroundGrid = function (pixelSize) { 740 + var bgCanvas = document.createElement("canvas"), 741 + bgCtx = bgCanvas.getContext("2d", { willReadFrequently: true }), 742 + width = pixelSize * 2, 743 + height = pixelSize * 2; 744 + 745 + bgCanvas.width = width; 746 + bgCanvas.height = height; 747 + 748 + bgCtx.fillStyle = "#fff"; 749 + bgCtx.fillRect(0, 0, width, height); 750 + 751 + bgCtx.fillStyle = "#ccc"; 752 + bgCtx.fillRect(0, 0, pixelSize, pixelSize); 753 + bgCtx.fillRect(pixelSize, pixelSize, pixelSize, pixelSize); 754 + 755 + return bgCanvas.toDataURL(); 756 + }; 757 + 758 + /* saving */ 759 + 760 + var roundToNearestPixel = function (n) { 761 + var canRound = 0 === pixel.size || void 0 !== pixel.size; 762 + return canRound ? Math.round(n / pixel.size) * pixel.size : n; 763 + }; 764 + 765 + var generateSelection = function (e, mode) { 766 + rectangleSelection.endX = roundToNearestPixel(e.pageX); 767 + rectangleSelection.endY = roundToNearestPixel(e.pageY); 768 + 769 + // temporary canvas to save image 770 + DOM.$body.append('<canvas id="' + classes.selectionCanvas + '"></canvas>'); 771 + var $tempCanvas = $("#" + classes.selectionCanvas); 772 + var tempCtx = $tempCanvas[0].getContext("2d"); 773 + 774 + // set dimensions and draw based on selection 775 + var width = Math.abs(rectangleSelection.endX - rectangleSelection.startX); 776 + var height = Math.abs(rectangleSelection.endY - rectangleSelection.startY); 777 + $tempCanvas[0].width = width; 778 + $tempCanvas[0].height = height; 779 + 780 + var startX = Math.min(rectangleSelection.startX, rectangleSelection.endX); 781 + var startY = Math.min(rectangleSelection.startY, rectangleSelection.endY); 782 + 783 + if (width && height) { 784 + tempCtx.drawImage( 785 + DOM.$canvas[0], 786 + startX, 787 + startY, 788 + width, 789 + height, 790 + 0, 791 + 0, 792 + width, 793 + height 794 + ); 795 + var img = $tempCanvas[0].toDataURL("image/png"); 796 + 797 + if (mode === action.save) { 798 + displayFinishedArt(img); 799 + DOM.$buttonSaveSelection.click(); 800 + DOM.$saveModalContainer.removeClass(classes.hidden); 801 + } else { 802 + clipboard = new Image(); 803 + clipboard.src = img; 804 + 805 + if (mode === action.cut) { 806 + var originalImage = DOM.$canvas[0].toDataURL("image/png"); 807 + ctx.clearRect(startX, startY, width, height); 808 + DOM.$cut.click(); 809 + 810 + // add "cut" action to undo/redo array 811 + var newImage = DOM.$canvas[0].toDataURL("image/png"); 812 + action.index++; 813 + drawPathId = Date(); 814 + pushToHistory( 815 + action.index, 816 + action.cut, 817 + 0, 818 + 0, 819 + null, 820 + null, 821 + null, 822 + drawPathId, 823 + originalImage, 824 + newImage 825 + ); 826 + 827 + // save to local storage 828 + saveToLocalStorage(); 829 + } 830 + 831 + if (mode === action.copy) { 832 + // trigger copy click 833 + DOM.$copy.click(); 834 + } 835 + } 836 + } 837 + 838 + // remove tempCanvas 839 + $tempCanvas.remove(); 840 + }; 841 + 842 + var drawSelection = function (e) { 843 + rectangleSelection.w = roundToNearestPixel( 844 + e.pageX - this.offsetLeft - rectangleSelection.startX 845 + ); 846 + rectangleSelection.h = roundToNearestPixel( 847 + e.pageY - this.offsetTop - rectangleSelection.startY 848 + ); 849 + ctxOverlay.clearRect(0, 0, DOM.$overlay.width(), DOM.$overlay.height()); 850 + ctxOverlay.fillStyle = "rgba(0,0,0,.5)"; 851 + ctxOverlay.fillRect(0, 0, DOM.$overlay.width(), DOM.$overlay.height()); 852 + ctxOverlay.clearRect( 853 + rectangleSelection.startX, 854 + rectangleSelection.startY, 855 + rectangleSelection.w, 856 + rectangleSelection.h 857 + ); 858 + }; 859 + 860 + var displayFinishedArt = function (src) { 861 + DOM.$saveImg.attr("src", src); 862 + DOM.$saveImg.parent().attr("href", src); 863 + DOM.$saveModalContainer.removeClass(classes.hidden); 864 + DOM.$saveModalContainer.find(".ui-hider").focus(); 865 + }; 866 + 867 + var renderLocalGallery = function () { 868 + if (savedCanvasArray.length === 0) { 869 + DOM.$openLocalModalContainer.addClass(classes.hidden); 870 + DOM.$openLocalForm.addClass(classes.hidden); 871 + return; 872 + } 873 + 874 + DOM.$openLocalForm.removeClass(classes.hidden); 875 + DOM.$openLocalGalleryItems.remove(); 876 + 877 + for (var i = 0; i < savedCanvasArray.length; i++) { 878 + var $li = $( 879 + '<li data-local="' + 880 + i + 881 + '">' + 882 + '<button role="button" class="thumb"><img src="' + 883 + savedCanvasArray[i] + 884 + '" alt="open thumbnail #' + 885 + i + 886 + '" /></button>' + 887 + '<button role="button" class="delete"><img class="delete" src="assets/draggybits/hider.png" alt="delete thumbnail #' + 888 + i + 889 + '"></button>' + 890 + "</li>" 891 + ); 892 + DOM.$openLocalGallery.append($li); 893 + } 894 + 895 + DOM.$openLocalGalleryItems = DOM.$openLocalGallery.find("li"); 896 + DOM.$openLocalGalleryItemThumbs = DOM.$openLocalGallery.find(".thumb"); 897 + DOM.$openLocalGalleryItemDelete = DOM.$openLocalGallery.find(".delete"); 898 + 899 + DOM.$openLocalGalleryItemThumbs.click(function () { 900 + var img = savedCanvasArray[$(this).parent("li").data("local")]; 901 + drawToCanvas(img, 0, 0, true); 902 + DOM.$openLocalModalContainer.addClass(classes.hidden); 903 + }); 904 + 905 + // delete locally 906 + DOM.$openLocalGalleryItemDelete.click(function () { 907 + if ( 908 + window.confirm( 909 + "Careful! This will permanently delete this thumbnail's art from your browser." 910 + ) 911 + ) { 912 + savedCanvasArray.splice($(this).parent("li").data("local"), 1); 913 + localStorage.make8bitartSavedCanvasArray = 914 + JSON.stringify(savedCanvasArray); 915 + savedCanvasArray = JSON.parse(localStorage.make8bitartSavedCanvasArray); 916 + renderLocalGallery(); 917 + } 918 + }); 919 + }; 920 + 921 + var saveToLocalStorage = function () { 922 + if (canStorage()) { 923 + savedCanvas = DOM.$canvas[0].toDataURL("image/png"); 924 + localStorage.make8bitartSavedCanvas = savedCanvas; 925 + } 926 + }; 927 + 928 + var saveToLocalStorageArray = function () { 929 + if (canStorage()) { 930 + //parsejson 931 + if (localStorage.make8bitartSavedCanvasArray) { 932 + savedCanvasArray = JSON.parse(localStorage.make8bitartSavedCanvasArray); 933 + } else { 934 + savedCanvasArray = []; 935 + } 936 + 937 + //push 938 + savedCanvasArray.push(DOM.$canvas[0].toDataURL("image/png")); 939 + 940 + //stringify 941 + localStorage.make8bitartSavedCanvasArray = 942 + JSON.stringify(savedCanvasArray); 943 + } 944 + }; 945 + 946 + var uploadToImgur = function () { 947 + var imgDataURL = DOM.$saveImg 948 + .attr("src") 949 + .replace(/^data:image\/(png|jpg);base64,/, ""); 950 + $.ajax({ 951 + method: "POST", 952 + url: "https://api.imgur.com/3/image", 953 + headers: { 954 + Authorization: "Client-ID " + imgur.clientId, 955 + }, 956 + dataType: "json", 957 + data: { 958 + image: imgDataURL, 959 + type: "base64", 960 + title: "made on make8bitart.com", 961 + description: "made on make8bitart.com", 962 + }, 963 + success: function (result) { 964 + var directURL = result.data.link; 965 + var shareURL = "https://imgur.com/gallery/" + result.data.id; 966 + var imgurHTML = 967 + '<p>image link: <a target="_blank" href="' + 968 + directURL + 969 + '">' + 970 + directURL + 971 + "</a></p>"; 972 + DOM.$linkImgur.html(imgurHTML); 973 + DOM.$buttonSaveImgur.addClass(classes.hidden); 974 + }, 975 + error: function (result) { 976 + DOM.$linkImgur.text("There was an error saving to Imgur."); 977 + }, 978 + }); 979 + }; 980 + 981 + /* colors */ 982 + 983 + var getRGBColor = function (imageData) { 984 + var opacity = imageData[3] / 255; 985 + return ( 986 + "rgba(" + 987 + imageData[0] + 988 + ", " + 989 + imageData[1] + 990 + ", " + 991 + imageData[2] + 992 + ", " + 993 + opacity + 994 + ")" 995 + ); 996 + }; 997 + 998 + var rgbToHex = function (rgb) { 999 + if (rgb.length === 6) { 1000 + return rgb; 1001 + } else if (rgb.charAt(0) === "#" && rgb.length === 7) { 1002 + return rgb.slice(1, 7); 1003 + } else if (rgb === "transparent") { 1004 + return null; 1005 + } else { 1006 + var startString = rgb.charAt(3) === "a" ? 5 : 4; 1007 + var rgbArray = rgb.substr(startString, rgb.length - 5).split(","); 1008 + var hex = ""; 1009 + for (var i = 0; i <= 2; i++) { 1010 + var hexUnit = parseInt(rgbArray[i], 10).toString(16); 1011 + if (hexUnit.length === 1) { 1012 + hexUnit = "0" + hexUnit; 1013 + } 1014 + hex += hexUnit; 1015 + } 1016 + return hex; 1017 + } 1018 + }; 1019 + 1020 + var hexToRgba = function (hex) { 1021 + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") 1022 + var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; 1023 + hex = hex.replace(shorthandRegex, function (m, r, g, b) { 1024 + return r + r + g + g + b + b; 1025 + }); 1026 + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 1027 + return result 1028 + ? "rgba(" + 1029 + parseInt(result[1], 16) + 1030 + ", " + 1031 + parseInt(result[2], 16) + 1032 + ", " + 1033 + parseInt(result[3], 16) + 1034 + ", 1)" 1035 + : null; 1036 + }; 1037 + 1038 + var sanitizeColorArray = function (colorArray) { 1039 + for (var i = 0; i < colorArray.length; i++) { 1040 + colorArray[i] = rgbToHex(colorArray[i]); 1041 + } 1042 + return colorArray; 1043 + }; 1044 + 1045 + var setDropperColor = function (color) { 1046 + pixel.color = color; 1047 + DOM.$color.removeClass(classes.current); 1048 + DOM.$pixelSizeDemoDiv.css("background-image", "none"); 1049 + DOM.$colorPickerDemo.css("background-image", "none"); 1050 + DOM.$pixelSizeDemoDiv.css("background-color", pixel.color); 1051 + DOM.$colorPickerDemo.css("background-color", pixel.color); 1052 + DOM.$hex.val(rgbToHex(DOM.$colorPickerDemo.css("background-color"))); 1053 + DOM.$draggydivs.css("box-shadow", "5px 5px 0 " + pixel.color); 1054 + }; 1055 + 1056 + var hexColorChosen = function () { 1057 + var newColor = "#" + DOM.$hex.val(); 1058 + $("." + classes.current).removeClass(classes.current); 1059 + DOM.$hex.addClass(classes.current); 1060 + 1061 + pixel.color = newColor; 1062 + DOM.$colorPickerDemo.css("background-color", newColor); 1063 + DOM.$draggydivs.css("box-shadow", "5px 5px 0 " + newColor); 1064 + }; 1065 + 1066 + var areColorsEqual = function (alpha, beta) { 1067 + if ( 1068 + (alpha === "rgba(0, 0, 0, 0)" && 1069 + (beta === "#000000" || beta === "rgba(0, 0, 0, 1)")) || 1070 + ((alpha === "#000000" || alpha === "rgba(0, 0, 0, 1)") && 1071 + beta === "rgba(0, 0, 0, 0)") || 1072 + rgbToHex(alpha) !== rgbToHex(beta) 1073 + ) { 1074 + return false; 1075 + } else { 1076 + return true; 1077 + } 1078 + }; 1079 + 1080 + var updateColorHistoryPalette = function () { 1081 + var hexColor = rgbToHex(pixel.color); 1082 + var colorHistoryPos = colorHistory.indexOf(hexColor); 1083 + if (colorHistoryPos === -1) { 1084 + if (colorHistory.length === 20) { 1085 + colorHistory.pop(); 1086 + DOM.$colorHistoryPalette.find("li").eq(19).remove(); 1087 + } 1088 + } else { 1089 + colorHistory.splice(colorHistoryPos, 1); 1090 + DOM.$colorHistoryPalette.find("li").eq(colorHistoryPos).remove(); 1091 + } 1092 + 1093 + colorHistory.unshift(hexColor); 1094 + 1095 + var latestColorButton = $( 1096 + '<li><button role="button" class="button color" style="background-color:#' + 1097 + hexColor + 1098 + '" title="history:#' + 1099 + hexColor + 1100 + '" data-color="#' + 1101 + hexColor + 1102 + '" /> </button></li>' 1103 + ); 1104 + DOM.$colorHistoryPalette.prepend(latestColorButton); 1105 + latestColorButton.find("a").addClass(classes.current); 1106 + 1107 + // bind click to new colors 1108 + DOM.$color = $("." + classes.color); 1109 + DOM.$color.click(bindColorClick); 1110 + DOM.$colorHistoryModule.removeClass(classes.hidden); 1111 + 1112 + // save to local storage 1113 + if (canStorage()) { 1114 + localStorage.colorHistory = colorHistory; 1115 + } 1116 + }; 1117 + 1118 + /* pxon */ 1119 + 1120 + var getFileData = function (file) { 1121 + if (window.FileReader) { 1122 + var fileReader = new FileReader(); 1123 + fileReader.readAsText(file); 1124 + fileReader.onload = function (data) { 1125 + if (data) { 1126 + pxon = JSON.parse(data.target.result); 1127 + historyPointer = undoRedoHistory.length - 1; 1128 + 1129 + // prefill the export fields 1130 + /*$('.exif.artist').val(pxon.exif.artist); 1131 + $('.exif.imageDescription').val(pxon.exif.imageDescription); 1132 + $('.exif.userComment').val(pxon.exif.userComment); 1133 + $('.exif.copyright').val(pxon.exif.copyright);*/ 1134 + 1135 + // draw image to reset canvas 1136 + resetCanvas(); 1137 + pxon.pxif.pixels.forEach(function (e, i, a) { 1138 + drawPixel(e.x, e.y, e.color, e.size); 1139 + }); 1140 + } 1141 + }; 1142 + fileReader.onerror = function () { 1143 + alert("Unable to read file. Try again."); 1144 + }; 1145 + } else { 1146 + alert( 1147 + "Your browser doesn't support FileReader, which is required for uploading custom palettes." 1148 + ); 1149 + } 1150 + }; 1151 + 1152 + var importPXON = function (e) { 1153 + var file = $(this).prop("files")[0]; 1154 + getFileData(file); 1155 + }; 1156 + 1157 + var exportPXON = function (e) { 1158 + // FUTURE: show modal for form 1159 + /*pxon.exif.artist = $('.exif.artist').val(); 1160 + pxon.exif.imageDescription = $('.exif.imageDescription').val(); 1161 + pxon.exif.userComment = $('.exif.userComment').val(); 1162 + pxon.exif.copyright = $('.exif.copyright').val();*/ 1163 + 1164 + // other exif info 1165 + pxon.exif.software = "make8bitart.com"; 1166 + pxon.exif.dateTime = new Date(); 1167 + pxon.exif.dateTimeOriginal = pxon.exif.dateTimeOriginal 1168 + ? pxon.exif.dateTimeOriginal 1169 + : pxon.exif.dateTime; 1170 + 1171 + // pxif 1172 + pxon.pxif.pixels = drawHistory; 1173 + 1174 + // open pxon modal 1175 + DOM.$pxonModalContainer.removeClass(classes.hidden); 1176 + DOM.$pxonModalContainer.find(".ui-hider").focus(); 1177 + 1178 + var pxonData = JSON.stringify(pxon); 1179 + DOM.$pxonModalContainer.find("textarea").html(pxonData); 1180 + }; 1181 + 1182 + /*** EVENTS ***/ 1183 + 1184 + /* general */ 1185 + 1186 + var onMouseDown = function (e) { 1187 + e.preventDefault(); 1188 + 1189 + if (e.which === 3) { 1190 + return; 1191 + } 1192 + 1193 + var origData = ctx.getImageData(e.pageX, e.pageY, 1, 1).data; 1194 + var origRGB = getRGBColor(origData); 1195 + 1196 + if (mode.dropper) { 1197 + mode.dropper = false; 1198 + setDropperColor(origRGB); 1199 + DOM.$canvas.removeClass(classes.dropperMode); 1200 + DOM.$dropper.removeClass(classes.currentTool).removeAttr("style"); 1201 + } else if (mode.paste) { 1202 + var x = Math.ceil(e.pageX / pixel.size) * pixel.size - pixel.size; 1203 + var y = Math.ceil(e.pageY / pixel.size) * pixel.size - pixel.size; 1204 + 1205 + var originalImage = DOM.$canvas[0].toDataURL("image/png"); 1206 + ctx.drawImage(clipboard, x, y); 1207 + 1208 + // reset history 1209 + undoRedoHistory = undoRedoHistory.slice(0, historyPointer + 1); 1210 + DOM.$redo.attr("disabled", "disabled"); 1211 + 1212 + // add action to undo/redo 1213 + var newImage = DOM.$canvas[0].toDataURL("image/png"); 1214 + action.index++; 1215 + drawPathId = Date(); 1216 + pushToHistory( 1217 + action.index, 1218 + action.paste, 1219 + 0, 1220 + 0, 1221 + null, 1222 + null, 1223 + null, 1224 + drawPathId, 1225 + originalImage, 1226 + newImage 1227 + ); 1228 + 1229 + // save to local storage 1230 + saveToLocalStorage(); 1231 + 1232 + DOM.$paste.click(); 1233 + } else if (!mode.save && !mode.copy && !mode.cut) { 1234 + // reset history 1235 + undoRedoHistory = undoRedoHistory.slice(0, historyPointer + 1); 1236 + DOM.$redo.attr("disabled", "disabled"); 1237 + 1238 + if (mode.paint && !areColorsEqual(origRGB, pixel.color)) { 1239 + action.index++; 1240 + paint(e.pageX, e.pageY, pixel.color, origRGB); 1241 + } else { 1242 + drawPathId = Date.now(); 1243 + 1244 + // draw mode 1245 + mode.drawing = true; 1246 + 1247 + action.index++; 1248 + drawPixel(e.pageX, e.pageY, pixel.color, pixel.size); 1249 + 1250 + if (!areColorsEqual(origRGB, pixel.color)) { 1251 + pushToHistory( 1252 + action.index, 1253 + action.draw, 1254 + e.pageX, 1255 + e.pageY, 1256 + origRGB, 1257 + pixel.color, 1258 + pixel.size, 1259 + drawPathId, 1260 + null, 1261 + null 1262 + ); 1263 + } 1264 + 1265 + DOM.$canvas.on("mousemove", drawOnMove); 1266 + 1267 + // touch 1268 + DOM.$canvas[0].addEventListener("touchmove", touchDraw, { 1269 + passive: true, 1270 + }); 1271 + 1272 + // update color history palette - shows latest 20 colors used 1273 + if (pixel.color !== "rgba(0, 0, 0, 0)") { 1274 + updateColorHistoryPalette(); 1275 + } 1276 + } 1277 + } else { 1278 + // overlay stuff 1279 + rectangleSelection = {}; 1280 + rectangleSelection.startX = roundToNearestPixel( 1281 + e.pageX - this.offsetLeft 1282 + ); 1283 + rectangleSelection.startY = roundToNearestPixel(e.pageY - this.offsetTop); 1284 + DOM.$overlay.on("mousemove", drawSelection); 1285 + 1286 + // touch 1287 + DOM.$overlay[0].addEventListener("touchmove", drawSelection, { 1288 + passive: true, 1289 + }); 1290 + } 1291 + }; 1292 + 1293 + var onMouseUp = function (e) { 1294 + if (mode.paste) { 1295 + return; 1296 + } 1297 + 1298 + if (!mode.save && !mode.copy && !mode.cut) { 1299 + DOM.$canvas.off("mousemove"); 1300 + mode.drawing = false; 1301 + drawPathId = null; 1302 + 1303 + saveToLocalStorage(); 1304 + } else { 1305 + DOM.$overlay.off("mousemove"); 1306 + ctxOverlay.clearRect(0, 0, DOM.$overlay.width(), DOM.$overlay.height()); 1307 + 1308 + if (mode.save) { 1309 + generateSelection(e, "save"); 1310 + } else if (mode.copy) { 1311 + generateSelection(e, "copy"); 1312 + } else if (mode.cut) { 1313 + generateSelection(e, "cut"); 1314 + } 1315 + } 1316 + }; 1317 + 1318 + var onRightClick = function (e) { 1319 + resetModes(); 1320 + var origData = ctx.getImageData(e.pageX, e.pageY, 1, 1).data; 1321 + var origRGB = getRGBColor(origData); 1322 + 1323 + setDropperColor(origRGB); 1324 + 1325 + DOM.$canvas.removeClass(classes.dropperMode); 1326 + DOM.$dropper.removeClass(classes.currentTool).removeAttr("style"); 1327 + 1328 + return false; 1329 + }; 1330 + 1331 + /* tools */ 1332 + 1333 + // draw clicked 1334 + DOM.$pencil.click(function (e) { 1335 + e.preventDefault(); 1336 + resetModes(); 1337 + $(this).addClass(classes.currentTool); 1338 + }); 1339 + 1340 + // paint clicked 1341 + DOM.$paint.click(function (e) { 1342 + e.preventDefault(); 1343 + resetModes(); 1344 + $(this).addClass(classes.currentTool); 1345 + mode.paint = true; 1346 + }); 1347 + 1348 + // pixel size slider changed 1349 + DOM.$pixelSizeInput.change(function () { 1350 + initPixel($(this).val()); 1351 + }); 1352 + 1353 + // reset canvas 1354 + DOM.$buttonNewCanvas.click(function () { 1355 + resetCanvas(pixel.color, true); 1356 + saveToLocalStorage(); 1357 + }); 1358 + 1359 + // ensure elements are enabled before triggering a click event 1360 + var triggerClickForEnabled = function (elem) { 1361 + return function () { 1362 + // no-op if there is nothing to undo 1363 + if (elem.is(":disabled")) { 1364 + return; 1365 + } 1366 + 1367 + // trigger the click 1368 + elem.trigger("click"); 1369 + }; 1370 + }; 1371 + 1372 + // undo 1373 + DOM.$undo.click(function () { 1374 + undoRedo(historyPointer, true); 1375 + historyPointer--; 1376 + 1377 + DOM.$redo.removeAttr("disabled"); 1378 + 1379 + if (historyPointer < 0) { 1380 + DOM.$undo.attr("disabled", "disabled"); 1381 + } 1382 + }); 1383 + 1384 + // redo 1385 + DOM.$redo.click(function () { 1386 + historyPointer++; 1387 + undoRedo(historyPointer, false); 1388 + 1389 + DOM.$undo.removeAttr("disabled"); 1390 + if (historyPointer === undoRedoHistory.length - 1) { 1391 + DOM.$redo.attr("disabled", "disabled"); 1392 + } 1393 + }); 1394 + 1395 + // cut 1396 + DOM.$cut.click(function () { 1397 + resetModes(); 1398 + if (mode.cut) { 1399 + mode.cut = false; 1400 + $(this).removeClass(classes.currentTool); 1401 + DOM.$overlay.addClass(classes.hidden); 1402 + } else { 1403 + mode.cut = true; 1404 + ctxOverlay.fillRect(0, 0, DOM.$overlay.width(), DOM.$overlay.height()); 1405 + $(this).addClass(classes.currentTool); 1406 + DOM.$overlay.removeClass(classes.hidden); 1407 + } 1408 + }); 1409 + 1410 + // copy 1411 + DOM.$copy.click(function () { 1412 + resetModes(); 1413 + if (mode.copy) { 1414 + mode.copy = false; 1415 + $(this).removeClass(classes.currentTool); 1416 + DOM.$overlay.addClass(classes.hidden); 1417 + } else { 1418 + mode.copy = true; 1419 + ctxOverlay.fillRect(0, 0, DOM.$overlay.width(), DOM.$overlay.height()); 1420 + $(this).addClass(classes.currentTool); 1421 + DOM.$overlay.removeClass(classes.hidden); 1422 + } 1423 + }); 1424 + 1425 + // paste 1426 + DOM.$paste.click(function () { 1427 + if (!clipboard) { 1428 + return; 1429 + } 1430 + resetModes(); 1431 + 1432 + if (!mode.paste) { 1433 + mode.paste = true; 1434 + $(this).addClass(classes.currentTool); 1435 + 1436 + // show instructions 1437 + DOM.$pasteInstructions.addClass(classes.hidden); 1438 + } 1439 + }); 1440 + 1441 + // undo alias to ctrl+z, macs aliased to cmd+z 1442 + key("ctrl+z, ⌘+z", triggerClickForEnabled(DOM.$undo)); 1443 + 1444 + // redo alias to ctrl+y and mac aliased cmd+shift+z 1445 + key("ctrl+y, ⌘+shift+z", triggerClickForEnabled(DOM.$redo)); 1446 + 1447 + // close save modal alias to esc 1448 + key("esc", function () { 1449 + DOM.$modalContainers.addClass(classes.hidden); 1450 + }); 1451 + 1452 + // pencil tool (matches photoshop) 1453 + key("B", triggerClickForEnabled(DOM.$pencil)); 1454 + 1455 + // paint bucket tool (matches photoshop) 1456 + key("G", triggerClickForEnabled(DOM.$paint)); 1457 + 1458 + /* colors */ 1459 + 1460 + // color click binding function 1461 + var bindColorClick = function () { 1462 + var $newColor = $(this); 1463 + var newColorLabel = $newColor.attr("data-color"); 1464 + var demoColor; 1465 + 1466 + $("." + classes.current).removeClass(classes.current); 1467 + $newColor.addClass(classes.current); 1468 + pixel.color = newColorLabel; 1469 + 1470 + if (pixel.color !== "rgba(0, 0, 0, 0)") { 1471 + demoColor = pixel.color; 1472 + DOM.$pixelSizeDemoDiv.css("background-image", "none"); 1473 + DOM.$colorPickerDemo.css("background-image", "none"); 1474 + } else { 1475 + DOM.$pixelSizeDemoDiv.css("background-image", windowCanvas.background); 1476 + DOM.$colorPickerDemo.css("background-image", windowCanvas.background); 1477 + DOM.$hex.val(""); 1478 + } 1479 + DOM.$pixelSizeDemoDiv.css("background-color", demoColor); 1480 + DOM.$colorPickerDemo.css("background-color", demoColor); 1481 + DOM.$hex.val(rgbToHex(DOM.$colorPickerDemo.css("background-color"))); 1482 + DOM.$draggydivs.css("box-shadow", "5px 5px 0 " + newColorLabel); 1483 + }; 1484 + 1485 + // choose color 1486 + DOM.$color.click(bindColorClick); 1487 + 1488 + // custom color hover 1489 + DOM.$8bitPicker.mouseover(function (e) { 1490 + $(this).mousemove(mousemovePickerPalette); 1491 + }); 1492 + 1493 + DOM.$8bitPicker.mouseout(function (e) { 1494 + $(this).unbind("mouseover"); 1495 + DOM.$colorPickerDemo.css("background-color", pixel.color); 1496 + DOM.$hex.val(rgbToHex(DOM.$colorPickerDemo.css("background-color"))); 1497 + }); 1498 + 1499 + var mousemovePickerPalette = function (e) { 1500 + var boundingRect = DOM.$8bitPicker.offset(); 1501 + var hoverData = pickerPaletteCtx.getImageData( 1502 + e.pageX - boundingRect.left, 1503 + e.pageY - boundingRect.top, 1504 + 1, 1505 + 1 1506 + ).data; 1507 + var hoverRGB = getRGBColor(hoverData); 1508 + DOM.$pixelSizeDemoDiv.css("background-image", "none"); 1509 + DOM.$colorPickerDemo.css("background-image", "none"); 1510 + DOM.$colorPickerDemo.css("background-color", hoverRGB); 1511 + DOM.$hex.val(rgbToHex(hoverRGB)); 1512 + }; 1513 + 1514 + // custom color chosen 1515 + DOM.$8bitPicker.click(function (e) { 1516 + var boundingRect = DOM.$8bitPicker.offset(); 1517 + var clickData = pickerPaletteCtx.getImageData( 1518 + e.pageX - boundingRect.left, 1519 + e.pageY - boundingRect.top, 1520 + 1, 1521 + 1 1522 + ).data; 1523 + var newColor = getRGBColor(clickData); 1524 + $("." + classes.current).removeClass(classes.current); 1525 + 1526 + pixel.color = newColor; 1527 + DOM.$colorPickerDemo.css("background-color", newColor); 1528 + DOM.$draggydivs.css("box-shadow", "5px 5px 0 " + newColor); 1529 + }); 1530 + 1531 + // hex color input change 1532 + DOM.$hex.keyup(hexColorChosen); 1533 + DOM.$hex.focus(hexColorChosen); 1534 + 1535 + // color dropper clicked 1536 + DOM.$dropper.click(function (e) { 1537 + e.preventDefault(); 1538 + 1539 + if (DOM.$dropper.hasClass(classes.currentTool)) { 1540 + resetModes(); 1541 + } else { 1542 + resetModes(); 1543 + mode.dropper = true; 1544 + DOM.$dropper.addClass(classes.currentTool); 1545 + DOM.$canvas.addClass(classes.dropperMode); 1546 + 1547 + DOM.$canvas.mousemove(function (e) { 1548 + var hoverData = ctx.getImageData(e.pageX, e.pageY, 1, 1).data; 1549 + var hoverRGB = getRGBColor(hoverData); 1550 + DOM.$dropper.css("background-color", hoverRGB); 1551 + 1552 + DOM.$pixelSizeDemoDiv.css("background-image", "none"); 1553 + DOM.$colorPickerDemo.css({ 1554 + "background-image": "none", 1555 + "background-color": hoverRGB, 1556 + }); 1557 + DOM.$hex.val(rgbToHex(hoverRGB)); 1558 + }); 1559 + } 1560 + }); 1561 + 1562 + /* importing and exporting */ 1563 + 1564 + // save locally 1565 + DOM.$buttonSaveLocal.click(function () { 1566 + saveToLocalStorageArray(); 1567 + renderLocalGallery(); 1568 + 1569 + alert( 1570 + 'Your art has been saved locally to your browser. You can see all locally saved art by clicking the "open existing art" button!' 1571 + ); 1572 + }); 1573 + 1574 + // save full canvas 1575 + DOM.$buttonSaveFull.click(function () { 1576 + var savedPNG = DOM.$canvas[0].toDataURL("image/png"); 1577 + displayFinishedArt(savedPNG); 1578 + }); 1579 + 1580 + // save selection of canvas button clicked 1581 + DOM.$buttonSaveSelection.click(function () { 1582 + if (mode.save) { 1583 + mode.save = false; 1584 + DOM.$saveInstruction.slideUp(); 1585 + $(this).val(copy.selectionOn); 1586 + DOM.$overlay.addClass(classes.hidden); 1587 + } else { 1588 + resetModes(); 1589 + mode.save = true; 1590 + DOM.$saveInstruction.slideDown(); 1591 + $(this).val(copy.selectionOff); 1592 + ctxOverlay.fillRect(0, 0, DOM.$overlay.width(), DOM.$overlay.height()); 1593 + DOM.$overlay.removeClass(classes.hidden); 1594 + } 1595 + }); 1596 + 1597 + // open import local modal 1598 + DOM.$buttonOpenLocal.click(function () { 1599 + DOM.$openLocalModalContainer.removeClass(classes.hidden); 1600 + DOM.$openLocalModalContainer.find(".ui-hider").focus(); 1601 + }); 1602 + 1603 + // import pxon 1604 + DOM.$buttonImportPXON.change(importPXON); 1605 + 1606 + // export pxon 1607 + DOM.$buttonExportPXON.click(exportPXON); 1608 + 1609 + // hide save modal container if exit button clicked 1610 + DOM.$modalExit.click(function () { 1611 + DOM.$modalContainers.addClass(classes.hidden); 1612 + DOM.$linkImgur.html(""); 1613 + DOM.$buttonSaveImgur.removeClass(classes.hidden); 1614 + }); 1615 + 1616 + // hide save modal container if clicking outside of modal 1617 + DOM.$modalContainers.click(function (e) { 1618 + var target = $(e.target).context; 1619 + if ( 1620 + target === DOM.$saveModalContainer[0] || 1621 + target === DOM.$openLocalModalContainer[0] 1622 + ) { 1623 + $(this).addClass(classes.hidden); 1624 + } 1625 + }); 1626 + 1627 + // save to imgur 1628 + DOM.$buttonSaveImgur.click(function () { 1629 + uploadToImgur(); 1630 + }); 1631 + 1632 + /* misc */ 1633 + 1634 + // tabs 1635 + DOM.$tabs.click(function (e) { 1636 + var activeTab = $(this); 1637 + var href = activeTab.attr("data-href"); 1638 + activeTab.siblings().removeClass(classes.activeTab); 1639 + activeTab.addClass(classes.activeTab); 1640 + 1641 + var toHide = []; 1642 + activeTab.siblings().each(function () { 1643 + toHide.push($(this).attr("data-href")); 1644 + }); 1645 + 1646 + $(href).removeClass(classes.hidden); 1647 + for (var i = 0; i < toHide.length; i++) { 1648 + $(toHide[i]).addClass(classes.hidden); 1649 + } 1650 + }); 1651 + 1652 + // canvas window size changes, with timeout to prevent lost art D: 1653 + DOM.$window.resize(function () { 1654 + clearTimeout(resizing); 1655 + resizing = setTimeout(resizeCanvas, 100); 1656 + }); 1657 + 1658 + // clear color history, palette and storage 1659 + DOM.$colorHistoryTools.clearPalette.click(function () { 1660 + colorHistory = []; 1661 + DOM.$colorHistoryPalette.find("li").remove(); 1662 + localStorage.colorHistory = []; 1663 + DOM.$colorHistoryModule.addClass(classes.hidden); 1664 + }); 1665 + 1666 + // export color history 1667 + DOM.$colorHistoryTools.exportPalette.click(function () { 1668 + console.log("export coming soon"); 1669 + }); 1670 + 1671 + // clear custom colors palette 1672 + DOM.$colorCustomTools.clearPalette.click(function () { 1673 + DOM.$colorCustomPalette.find("li").remove(); 1674 + }); 1675 + 1676 + // import custom colors palette 1677 + DOM.$colorCustomTools.importPalette.on("change", function (e) { 1678 + // get the file submitted 1679 + var file = $(this).prop("files")[0]; 1680 + 1681 + // helper function to parse csv data 1682 + var parseCSVData = function (data) { 1683 + // since we have csv data, clear the current custom palette 1684 + DOM.$colorCustomPalette.find("li").remove(); 1685 + 1686 + // get csv text and parse 1687 + var csv = data.target.result; 1688 + var rows = csv.split(/\r\n|\n/); 1689 + 1690 + for (var i = 0; i < rows.length; i++) { 1691 + var dataPair = rows[i].split(","); 1692 + 1693 + // create button, set properties, and add to palette 1694 + var $newCustomButton = $("<a>"); 1695 + $newCustomButton.attr({ 1696 + class: "button color", 1697 + style: "background-color:#" + dataPair[1], 1698 + title: dataPair[0], 1699 + "data-color": "#" + dataPair[1], 1700 + }); 1701 + var $newCustomButtonContainer = $("<li>").append($newCustomButton); 1702 + DOM.$colorCustomPalette.append($newCustomButtonContainer); 1703 + } 1704 + 1705 + // set events to make these colors work 1706 + DOM.$color = $("." + classes.color); 1707 + DOM.$color.click(bindColorClick); 1708 + }; 1709 + 1710 + // read the file if browser has the FileReader API 1711 + if (window.FileReader) { 1712 + var fileReader = new FileReader(); 1713 + fileReader.readAsText(file); 1714 + fileReader.onload = parseCSVData; 1715 + fileReader.onerror = function () { 1716 + alert("Unable to read file. Try again."); 1717 + }; 1718 + } else { 1719 + alert( 1720 + "Your browser doesn't support FileReader, which is required for uploading custom palettes." 1721 + ); 1722 + } 1723 + }); 1724 + 1725 + /*** INIT HA HA HA ***/ 1726 + DOM.$customPalettes.addClass(classes.hidden); 1727 + generateCanvas(); 1728 + init8bitPicker(); 1729 + 1730 + // check local storage for color history palette 1731 + if (canStorage() && localStorage.colorHistory) { 1732 + colorHistory = localStorage.colorHistory.split(","); 1733 + } else { 1734 + colorHistory = []; 1735 + DOM.$colorHistoryModule.addClass(classes.hidden); 1736 + } 1737 + 1738 + initColorHistoryPalette(); 1739 + initPixel(15); 1740 + 1741 + // init hide toolboxes 1742 + DOM.$colorbox.draggyBits("minimize"); 1743 + DOM.$toolbox.draggyBits("minimize"); 1744 + DOM.$filebox.draggyBits("minimize"); 1745 + DOM.$whatbox.draggyBits("minimize"); 1746 + 1747 + // only show the following in draggy divs if local storage exists 1748 + if (!canStorage()) { 1749 + $("." + classes.local).addClass(classes.hidden); 1750 + } else { 1751 + if ( 1752 + localStorage.make8bitartSavedCanvasArray && 1753 + localStorage.make8bitartSavedCanvasArray !== "[]" 1754 + ) { 1755 + // draw local storage gallery 1756 + savedCanvasArray = JSON.parse(localStorage.make8bitartSavedCanvasArray); 1757 + renderLocalGallery(); 1758 + 1759 + // open local storage gallery 1760 + DOM.$buttonOpenLocal.trigger("click"); 1761 + } else { 1762 + DOM.$openLocalForm.addClass(classes.hidden); 1763 + } 1764 + } 1765 + 1766 + historyPointer = -1; 1767 + 1768 + DOM.$canvas.mousedown(onMouseDown).mouseup(onMouseUp); 1769 + DOM.$overlay.mousedown(onMouseDown).mouseup(onMouseUp); 1770 + DOM.$canvas.on("contextmenu", onRightClick); 1771 + 1772 + //touch 1773 + DOM.$canvas[0].addEventListener("touchstart", onMouseDown, { passive: true }); 1774 + DOM.$canvas[0].addEventListener("touchend", onMouseUp, { passive: true }); 1775 + DOM.$overlay[0].addEventListener("touchstart", onMouseDown, { 1776 + passive: true, 1777 + }); 1778 + DOM.$overlay[0].addEventListener("touchend", onMouseUp, { passive: true }); 1779 + })(window.jQuery, window.key, window, document);
+180
src/js/libs/draggybits.js
··· 1 + (function($) { 2 + 3 + var pluginName = 'draggyBits'; 4 + var movingClass = 'ui-moving'; 5 + var draggerClass = 'ui-dragger'; 6 + var closerClass = 'ui-closer'; 7 + var minimizeClass = 'ui-hider'; 8 + var hiddenClass = 'ui-hidden'; 9 + 10 + var isMoving = false; 11 + var zIndex = 100; 12 + var pos = { x:0, y:0 }; 13 + var numDraggers = 0; 14 + var tileOffset = { x:20, y:20}; 15 + 16 + var $current; 17 + var $window = $(window); 18 + 19 + var defaults = { 20 + onMinimize : function (e) { return false; }, 21 + onInit : function (e) { return false; }, 22 + onClose : function (e) { return false; }, 23 + onRestore : function (e) { return false; } 24 + }; 25 + 26 + var methods = { 27 + 28 + init : function (opts) { 29 + 30 + return this.each(function() { 31 + 32 + var $this = $(this).addClass(pluginName); 33 + var $dragger = $this.find('.' + draggerClass); 34 + var $closer = $this.find('.' + closerClass).click(onCloseClick); 35 + var $minimizer = $this.find('.' + minimizeClass).click(onMinimizeClick); 36 + 37 + var options = $.extend(defaults, opts); 38 + 39 + var data = { 40 + $this : $this, 41 + $dragger : $dragger, 42 + $closer : $closer, 43 + $minimizer : $minimizer, 44 + onMinimize : options.onMinimize, 45 + onClose : options.onClose, 46 + onInit : options.onInit, 47 + onRestore : options.onRestore 48 + }; 49 + 50 + $this.data(pluginName, data); 51 + 52 + $dragger.attr('aria-grabbed', false); 53 + $dragger.mousedown(onMouseDown); 54 + 55 + numDraggers++; 56 + 57 + var css = { 58 + top : numDraggers * tileOffset.y, 59 + left : 200 + (numDraggers * tileOffset.x), 60 + position : 'absolute' 61 + }; 62 + 63 + $this.css(css); 64 + 65 + options.onInit($this); 66 + }); 67 + }, 68 + 69 + minimize : function () { 70 + var $this = $(this).addClass(hiddenClass); 71 + var data = $this.data(pluginName); 72 + data.onMinimize($this); 73 + }, 74 + 75 + restore : function () { 76 + var $this = $(this).removeClass(hiddenClass).css("z-index", zIndex++).focus(); 77 + var data = $this.data(pluginName); 78 + data.onRestore($this); 79 + }, 80 + 81 + close : function () { 82 + var $this = $(this); 83 + var data = $this.data(pluginName); 84 + data.onClose($this); 85 + $this.remove(); 86 + } 87 + 88 + }; 89 + 90 + 91 + 92 + 93 + /*** MODULE DEFINITION ***/ 94 + 95 + $.fn[pluginName] = function (method) { 96 + if ( methods[method] ) { 97 + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 98 + } else if (typeof method === 'object' || !method) { 99 + return methods.init.apply(this,arguments); 100 + } else { 101 + $.error('Method ' + method + ' does not exist'); 102 + } 103 + }; 104 + 105 + 106 + 107 + 108 + /*** EVENTS HANDLERS ***/ 109 + 110 + var onMove = function (e) { 111 + e.preventDefault(); 112 + var curr = { x: e.pageX, y: e.pageY }; 113 + 114 + var dx = curr.x - pos.x; 115 + var dy = curr.y - pos.y; 116 + 117 + $current.css({top:"+="+dy, left:"+="+dx}); 118 + 119 + pos = curr; 120 + }; 121 + 122 + var onMouseUp = function (e) { 123 + var $this = $(e.target); 124 + 125 + if (!isMoving) { 126 + return; 127 + } 128 + 129 + $this.attr('aria-grabbed', false); 130 + $('.' + movingClass).removeClass(movingClass) 131 + 132 + $window.off('mousemove'); 133 + isMoving = false; 134 + 135 + // touch 136 + window.removeEventListener('touchmove', onMove, {passive:true}); 137 + }; 138 + 139 + var onMouseDown = function (e) { 140 + var $target = $(e.target); 141 + var $this = ( $target.is('button') ) ? $target : $target.parent('button'); 142 + var isDragger = $this.hasClass(draggerClass); 143 + $this.parents('.'+ pluginName).css("z-index", zIndex++); 144 + 145 + if (!isDragger) { 146 + return; 147 + } 148 + 149 + e.preventDefault() 150 + pos = { x: e.pageX, y: e.pageY }; 151 + 152 + $this.attr('aria-grabbed', true); 153 + $current = $this.parents('.'+ pluginName).addClass(movingClass); 154 + $window.on('mousemove', onMove); 155 + 156 + isMoving = true; 157 + 158 + // touch 159 + window.addEventListener('touchmove', onMove, {passive:true}); 160 + }; 161 + 162 + var onCloseClick = function (e) { 163 + var $this = $(this); 164 + var $par = $this.parents('.'+ pluginName); 165 + $par[pluginName]('close'); 166 + }; 167 + 168 + var onMinimizeClick = function (e) { 169 + var $this = $(this); 170 + var $par = $this.parents('.'+ pluginName); 171 + $par[pluginName]('minimize'); 172 + }; 173 + 174 + /*** GLOBAL EVENTS ***/ 175 + $(window).mouseup(onMouseUp); 176 + 177 + // touch 178 + window.addEventListener('touchend', onMouseUp, {passive:true}); 179 + 180 + })( jQuery );
+4
src/js/libs/jquery-3.2.1.min.js
··· 1 + /*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ 2 + !function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), 3 + a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), 4 + null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+296
src/js/libs/keymaster.js
··· 1 + // keymaster.js 2 + // (c) 2011-2013 Thomas Fuchs 3 + // keymaster.js may be freely distributed under the MIT license. 4 + 5 + ;(function(global){ 6 + var k, 7 + _handlers = {}, 8 + _mods = { 16: false, 18: false, 17: false, 91: false }, 9 + _scope = 'all', 10 + // modifier keys 11 + _MODIFIERS = { 12 + '⇧': 16, shift: 16, 13 + '⌥': 18, alt: 18, option: 18, 14 + '⌃': 17, ctrl: 17, control: 17, 15 + '⌘': 91, command: 91 16 + }, 17 + // special keys 18 + _MAP = { 19 + backspace: 8, tab: 9, clear: 12, 20 + enter: 13, 'return': 13, 21 + esc: 27, escape: 27, space: 32, 22 + left: 37, up: 38, 23 + right: 39, down: 40, 24 + del: 46, 'delete': 46, 25 + home: 36, end: 35, 26 + pageup: 33, pagedown: 34, 27 + ',': 188, '.': 190, '/': 191, 28 + '`': 192, '-': 189, '=': 187, 29 + ';': 186, '\'': 222, 30 + '[': 219, ']': 221, '\\': 220 31 + }, 32 + code = function(x){ 33 + return _MAP[x] || x.toUpperCase().charCodeAt(0); 34 + }, 35 + _downKeys = []; 36 + 37 + for(k=1;k<20;k++) _MAP['f'+k] = 111+k; 38 + 39 + // IE doesn't support Array#indexOf, so have a simple replacement 40 + function index(array, item){ 41 + var i = array.length; 42 + while(i--) if(array[i]===item) return i; 43 + return -1; 44 + } 45 + 46 + // for comparing mods before unassignment 47 + function compareArray(a1, a2) { 48 + if (a1.length != a2.length) return false; 49 + for (var i = 0; i < a1.length; i++) { 50 + if (a1[i] !== a2[i]) return false; 51 + } 52 + return true; 53 + } 54 + 55 + var modifierMap = { 56 + 16:'shiftKey', 57 + 18:'altKey', 58 + 17:'ctrlKey', 59 + 91:'metaKey' 60 + }; 61 + function updateModifierKey(event) { 62 + for(k in _mods) _mods[k] = event[modifierMap[k]]; 63 + }; 64 + 65 + // handle keydown event 66 + function dispatch(event) { 67 + var key, handler, k, i, modifiersMatch, scope; 68 + key = event.keyCode; 69 + 70 + if (index(_downKeys, key) == -1) { 71 + _downKeys.push(key); 72 + } 73 + 74 + // if a modifier key, set the key.<modifierkeyname> property to true and return 75 + if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko 76 + if(key in _mods) { 77 + _mods[key] = true; 78 + // 'assignKey' from inside this closure is exported to window.key 79 + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true; 80 + return; 81 + } 82 + updateModifierKey(event); 83 + 84 + // see if we need to ignore the keypress (filter() can can be overridden) 85 + // by default ignore key presses if a select, textarea, or input is focused 86 + if(!assignKey.filter.call(this, event)) return; 87 + 88 + // abort if no potentially matching shortcuts found 89 + if (!(key in _handlers)) return; 90 + 91 + scope = getScope(); 92 + 93 + // for each potential shortcut 94 + for (i = 0; i < _handlers[key].length; i++) { 95 + handler = _handlers[key][i]; 96 + 97 + // see if it's in the current scope 98 + if(handler.scope == scope || handler.scope == 'all'){ 99 + // check if modifiers match if any 100 + modifiersMatch = handler.mods.length > 0; 101 + for(k in _mods) 102 + if((!_mods[k] && index(handler.mods, +k) > -1) || 103 + (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false; 104 + // call the handler and stop the event if neccessary 105 + if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ 106 + if(handler.method(event, handler)===false){ 107 + if(event.preventDefault) event.preventDefault(); 108 + else event.returnValue = false; 109 + if(event.stopPropagation) event.stopPropagation(); 110 + if(event.cancelBubble) event.cancelBubble = true; 111 + } 112 + } 113 + } 114 + } 115 + }; 116 + 117 + // unset modifier keys on keyup 118 + function clearModifier(event){ 119 + var key = event.keyCode, k, 120 + i = index(_downKeys, key); 121 + 122 + // remove key from _downKeys 123 + if (i >= 0) { 124 + _downKeys.splice(i, 1); 125 + } 126 + 127 + if(key == 93 || key == 224) key = 91; 128 + if(key in _mods) { 129 + _mods[key] = false; 130 + for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false; 131 + } 132 + }; 133 + 134 + function resetModifiers() { 135 + for(k in _mods) _mods[k] = false; 136 + for(k in _MODIFIERS) assignKey[k] = false; 137 + }; 138 + 139 + // parse and assign shortcut 140 + function assignKey(key, scope, method){ 141 + var keys, mods; 142 + keys = getKeys(key); 143 + if (method === undefined) { 144 + method = scope; 145 + scope = 'all'; 146 + } 147 + 148 + // for each shortcut 149 + for (var i = 0; i < keys.length; i++) { 150 + // set modifier keys if any 151 + mods = []; 152 + key = keys[i].split('+'); 153 + if (key.length > 1){ 154 + mods = getMods(key); 155 + key = [key[key.length-1]]; 156 + } 157 + // convert to keycode and... 158 + key = key[0] 159 + key = code(key); 160 + // ...store handler 161 + if (!(key in _handlers)) _handlers[key] = []; 162 + _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods }); 163 + } 164 + }; 165 + 166 + // unbind all handlers for given key in current scope 167 + function unbindKey(key, scope) { 168 + var multipleKeys, keys, 169 + mods = [], 170 + i, j, obj; 171 + 172 + multipleKeys = getKeys(key); 173 + 174 + for (j = 0; j < multipleKeys.length; j++) { 175 + keys = multipleKeys[j].split('+'); 176 + 177 + if (keys.length > 1) { 178 + mods = getMods(keys); 179 + key = keys[keys.length - 1]; 180 + } 181 + 182 + key = code(key); 183 + 184 + if (scope === undefined) { 185 + scope = getScope(); 186 + } 187 + if (!_handlers[key]) { 188 + return; 189 + } 190 + for (i in _handlers[key]) { 191 + obj = _handlers[key][i]; 192 + // only clear handlers if correct scope and mods match 193 + if (obj.scope === scope && compareArray(obj.mods, mods)) { 194 + _handlers[key][i] = {}; 195 + } 196 + } 197 + } 198 + }; 199 + 200 + // Returns true if the key with code 'keyCode' is currently down 201 + // Converts strings into key codes. 202 + function isPressed(keyCode) { 203 + if (typeof(keyCode)=='string') { 204 + keyCode = code(keyCode); 205 + } 206 + return index(_downKeys, keyCode) != -1; 207 + } 208 + 209 + function getPressedKeyCodes() { 210 + return _downKeys.slice(0); 211 + } 212 + 213 + function filter(event){ 214 + var tagName = (event.target || event.srcElement).tagName; 215 + // ignore keypressed in any elements that support keyboard data input 216 + return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA'); 217 + } 218 + 219 + // initialize key.<modifier> to false 220 + for(k in _MODIFIERS) assignKey[k] = false; 221 + 222 + // set current scope (default 'all') 223 + function setScope(scope){ _scope = scope || 'all' }; 224 + function getScope(){ return _scope || 'all' }; 225 + 226 + // delete all handlers for a given scope 227 + function deleteScope(scope){ 228 + var key, handlers, i; 229 + 230 + for (key in _handlers) { 231 + handlers = _handlers[key]; 232 + for (i = 0; i < handlers.length; ) { 233 + if (handlers[i].scope === scope) handlers.splice(i, 1); 234 + else i++; 235 + } 236 + } 237 + }; 238 + 239 + // abstract key logic for assign and unassign 240 + function getKeys(key) { 241 + var keys; 242 + key = key.replace(/\s/g, ''); 243 + keys = key.split(','); 244 + if ((keys[keys.length - 1]) == '') { 245 + keys[keys.length - 2] += ','; 246 + } 247 + return keys; 248 + } 249 + 250 + // abstract mods logic for assign and unassign 251 + function getMods(key) { 252 + var mods = key.slice(0, key.length - 1); 253 + for (var mi = 0; mi < mods.length; mi++) 254 + mods[mi] = _MODIFIERS[mods[mi]]; 255 + return mods; 256 + } 257 + 258 + // cross-browser events 259 + function addEvent(object, event, method) { 260 + if (object.addEventListener) 261 + object.addEventListener(event, method, false); 262 + else if(object.attachEvent) 263 + object.attachEvent('on'+event, function(){ method(window.event) }); 264 + }; 265 + 266 + // set the handlers globally on document 267 + addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48 268 + addEvent(document, 'keyup', clearModifier); 269 + 270 + // reset modifiers to false whenever the window is (re)focused. 271 + addEvent(window, 'focus', resetModifiers); 272 + 273 + // store previously defined key 274 + var previousKey = global.key; 275 + 276 + // restore previously defined key and return reference to our key object 277 + function noConflict() { 278 + var k = global.key; 279 + global.key = previousKey; 280 + return k; 281 + } 282 + 283 + // set window.key and window.key.set/get/deleteScope, and the default filter 284 + global.key = assignKey; 285 + global.key.setScope = setScope; 286 + global.key.getScope = getScope; 287 + global.key.deleteScope = deleteScope; 288 + global.key.filter = filter; 289 + global.key.isPressed = isPressed; 290 + global.key.getPressedKeyCodes = getPressedKeyCodes; 291 + global.key.noConflict = noConflict; 292 + global.key.unbind = unbindKey; 293 + 294 + if(typeof module !== 'undefined') module.exports = key; 295 + 296 + })(this);
+23
src/manifest.json
··· 1 + { 2 + "name": "make8bitart", 3 + "short_name": "make8bitart", 4 + "description": "make8bitart.com is a fun free in-browser pixel art tool for you!", 5 + "icons": [ 6 + { 7 + "sizes": "800x800", 8 + "type": "image/png", 9 + "src": "https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart-800.png", 10 + "purpose": "any" 11 + }, 12 + { 13 + "sizes": "180x180", 14 + "type": "image/png", 15 + "src": "https://cdn.glitch.global/2bc3df24-5bca-426a-9445-f1f6dbdd528e/make8bitart-180.png", 16 + "purpose": "maskable" 17 + } 18 + ], 19 + "display": "standalone", 20 + "background_color": "#ffffff", 21 + "theme_color": "#00ffff", 22 + "start_url": "/" 23 + }
+47
src/service-worker.js
··· 1 + /* 2 + * ServiceWorker to make site function as a PWA (Progressive Web App) 3 + * 4 + * Based on https://glitch.com/~pwa by https://glitch.com/@PaulKinlan 5 + */ 6 + 7 + // Specify what we want added to the cache for offline use 8 + self.addEventListener("install", (e) => { 9 + e.waitUntil( 10 + // Give the cache a name 11 + caches.open("make8bitart-pwa").then((cache) => { 12 + // Cache the homepage and stylesheets - add any assets you want to cache! 13 + return cache.addAll([ 14 + "/", 15 + "/index.html", 16 + "/app.min.js", 17 + "/make8bitart.min.css", 18 + "/draggybits.min.css", 19 + "/assets/bg.png", 20 + "/assets/brighton.png", 21 + "/assets/hsl-palette.png", 22 + "/assets/example.csv", 23 + "/assets/draggybits/dragger.png", 24 + "/assets/draggybits/hider.png", 25 + "/assets/icons/copy.png", 26 + "/assets/icons/cut.png", 27 + "/assets/icons/dropper.png", 28 + "/assets/icons/paint.png", 29 + "/assets/icons/paste-disabled.png", 30 + "/assets/icons/paste.png", 31 + "/assets/icons/pencil.png", 32 + "/assets/fonts/8bit-Art-Sans-subset.woff2", 33 + "/assets/fonts/VT323-Regular-subset.woff2", 34 + ]); 35 + }) 36 + ); 37 + }); 38 + 39 + // Network falling back to cache approach - we only cache the home route 40 + // https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker 41 + self.addEventListener("fetch", function (event) { 42 + event.respondWith( 43 + fetch(event.request).catch(function () { 44 + return caches.match(event.request); 45 + }) 46 + ); 47 + });
+17
watch.json
··· 1 + { 2 + "install": { 3 + "include": [ 4 + "^package\\.json$" 5 + ] 6 + }, 7 + "restart": { 8 + "exclude": [ 9 + "^build/" 10 + ], 11 + "include": [ 12 + "\\.js$", 13 + "\\.css" 14 + ] 15 + }, 16 + "throttle": 100 17 + }