Roasted Bean Deploy commited on
Commit
0c6ac49
·
0 Parent(s):

🚀 Deploy The Roasted Bean — editorial cafe site with admin dashboard

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .dockerignore +6 -0
  2. Dockerfile +15 -0
  3. README.md +14 -0
  4. data/.credentials.json +1 -0
  5. data/menu.json +192 -0
  6. node_modules/.bin/mime +1 -0
  7. node_modules/.bin/uuid +1 -0
  8. node_modules/.package-lock.json +894 -0
  9. node_modules/accepts/HISTORY.md +243 -0
  10. node_modules/accepts/LICENSE +23 -0
  11. node_modules/accepts/README.md +140 -0
  12. node_modules/accepts/index.js +238 -0
  13. node_modules/accepts/package.json +47 -0
  14. node_modules/array-flatten/LICENSE +21 -0
  15. node_modules/array-flatten/README.md +43 -0
  16. node_modules/array-flatten/array-flatten.js +64 -0
  17. node_modules/array-flatten/package.json +39 -0
  18. node_modules/bcryptjs/.npmignore +6 -0
  19. node_modules/bcryptjs/.travis.yml +18 -0
  20. node_modules/bcryptjs/.vscode/settings.json +3 -0
  21. node_modules/bcryptjs/LICENSE +50 -0
  22. node_modules/bcryptjs/README.md +251 -0
  23. node_modules/bcryptjs/bin/bcrypt +25 -0
  24. node_modules/bcryptjs/bower.json +22 -0
  25. node_modules/bcryptjs/dist/README.md +15 -0
  26. node_modules/bcryptjs/dist/bcrypt.js +1379 -0
  27. node_modules/bcryptjs/dist/bcrypt.min.js +48 -0
  28. node_modules/bcryptjs/dist/bcrypt.min.js.gz +0 -0
  29. node_modules/bcryptjs/dist/bcrypt.min.map +8 -0
  30. node_modules/bcryptjs/externs/bcrypt.js +91 -0
  31. node_modules/bcryptjs/externs/minimal-env.js +98 -0
  32. node_modules/bcryptjs/index.js +29 -0
  33. node_modules/bcryptjs/package.json +47 -0
  34. node_modules/bcryptjs/scripts/build.js +37 -0
  35. node_modules/bcryptjs/src/bcrypt.js +327 -0
  36. node_modules/bcryptjs/src/bcrypt/impl.js +669 -0
  37. node_modules/bcryptjs/src/bcrypt/prng/README.md +5 -0
  38. node_modules/bcryptjs/src/bcrypt/prng/accum.js +133 -0
  39. node_modules/bcryptjs/src/bcrypt/prng/isaac.js +140 -0
  40. node_modules/bcryptjs/src/bcrypt/util.js +33 -0
  41. node_modules/bcryptjs/src/bcrypt/util/base64.js +115 -0
  42. node_modules/bcryptjs/src/bower.json +22 -0
  43. node_modules/bcryptjs/src/wrap.js +50 -0
  44. node_modules/bcryptjs/tests/quickbrown.txt +150 -0
  45. node_modules/bcryptjs/tests/suite.js +197 -0
  46. node_modules/body-parser/HISTORY.md +686 -0
  47. node_modules/body-parser/LICENSE +23 -0
  48. node_modules/body-parser/README.md +476 -0
  49. node_modules/body-parser/index.js +156 -0
  50. node_modules/body-parser/lib/read.js +205 -0
.dockerignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ node_modules
2
+ .git
3
+ *.log
4
+ .DS_Store
5
+ /tmp
6
+ /data/.credentials.json
Dockerfile ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:20-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Install dependencies
6
+ COPY package.json package-lock.json* ./
7
+ RUN npm install --production
8
+
9
+ # Copy source
10
+ COPY . .
11
+
12
+ # HF Spaces serve on $PORT (default 7860)
13
+ EXPOSE 7860
14
+
15
+ CMD ["node", "server.js"]
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: The Roasted Bean
3
+ emoji: ☕
4
+ colorFrom: green
5
+ colorTo: gray
6
+ sdk: docker
7
+ pinned: false
8
+ ---
9
+
10
+ # The Roasted Bean ☕
11
+
12
+ A specialty coffee roaster's website with editorial design and admin dashboard.
13
+
14
+ **Admin panel:** `/admin` — manage menu items, categories, and cafe info.
data/.credentials.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"passwordHash":"$2a$10$w0/9KEhEWGPruYjo8Ljz1.lSJAWCCaCjM/lRycSBR49.9yBmb8HnO"}
data/menu.json ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "items": [
3
+ {
4
+ "id": "a1b2c3d4-0001",
5
+ "name": "Cappuccino",
6
+ "description": "Rich espresso topped with velvety steamed milk foam. A timeless Italian favorite.",
7
+ "price": 4.5,
8
+ "category": "coffee",
9
+ "image": "https://images.unsplash.com/photo-1572442388796-11668a67e53d?w=160&h=160&fit=crop&auto=format",
10
+ "available": true,
11
+ "featured": true
12
+ },
13
+ {
14
+ "id": "a1b2c3d4-0002",
15
+ "name": "Vanilla Latte",
16
+ "description": "Smooth espresso with steamed milk and house-made vanilla syrup.",
17
+ "price": 5,
18
+ "category": "coffee",
19
+ "image": "https://images.unsplash.com/photo-1461023058943-07fcbe16d735?w=160&h=160&fit=crop&auto=format",
20
+ "available": true,
21
+ "featured": false
22
+ },
23
+ {
24
+ "id": "a1b2c3d4-0003",
25
+ "name": "Cold Brew",
26
+ "description": "Slow-steeped for 18 hours — smooth, bold, and naturally sweet. Served over ice.",
27
+ "price": 4.75,
28
+ "category": "coffee",
29
+ "image": "https://images.unsplash.com/photo-1517701550927-30cf4ba1dba5?w=160&h=160&fit=crop&auto=format",
30
+ "available": true,
31
+ "featured": true
32
+ },
33
+ {
34
+ "id": "a1b2c3d4-0004",
35
+ "name": "Caramel Macchiato",
36
+ "description": "Layered espresso and milk with a buttery caramel drizzle.",
37
+ "price": 5.5,
38
+ "category": "coffee",
39
+ "image": "https://images.unsplash.com/photo-1485808191679-5f86510681a2?w=160&h=160&fit=crop&auto=format",
40
+ "available": true,
41
+ "featured": false
42
+ },
43
+ {
44
+ "id": "a1b2c3d4-0005",
45
+ "name": "Mocha",
46
+ "description": "Decadent chocolate meets bold espresso, crowned with whipped cream.",
47
+ "price": 5.25,
48
+ "category": "coffee",
49
+ "image": "https://images.unsplash.com/photo-1578314675249-a6910f80cc4e?w=160&h=160&fit=crop&auto=format",
50
+ "available": true,
51
+ "featured": false
52
+ },
53
+ {
54
+ "id": "a1b2c3d4-0006",
55
+ "name": "Matcha Latte",
56
+ "description": "Ceremonial-grade Japanese matcha whisked with steamed oat milk.",
57
+ "price": 5.5,
58
+ "category": "tea",
59
+ "image": "https://images.unsplash.com/photo-1536256263959-770b48d82b0a?w=160&h=160&fit=crop&auto=format",
60
+ "available": true,
61
+ "featured": true
62
+ },
63
+ {
64
+ "id": "a1b2c3d4-0007",
65
+ "name": "Earl Grey",
66
+ "description": "Fragrant black tea with bergamot. Served in a pot with a lemon twist.",
67
+ "price": 3.75,
68
+ "category": "tea",
69
+ "image": "https://images.unsplash.com/photo-1594631252845-29fc4cc8cde9?w=160&h=160&fit=crop&auto=format",
70
+ "available": true,
71
+ "featured": false
72
+ },
73
+ {
74
+ "id": "a1b2c3d4-0008",
75
+ "name": "Chamomile Honey",
76
+ "description": "Soothing chamomile blossoms with a drizzle of local wildflower honey.",
77
+ "price": 3.5,
78
+ "category": "tea",
79
+ "image": "https://images.unsplash.com/photo-1576092768241-dec231879fc3?w=160&h=160&fit=crop&auto=format",
80
+ "available": true,
81
+ "featured": false
82
+ },
83
+ {
84
+ "id": "a1b2c3d4-0009",
85
+ "name": "Butter Croissant",
86
+ "description": "Flaky, golden, and impossibly buttery. Baked fresh every morning.",
87
+ "price": 3.75,
88
+ "category": "pastries",
89
+ "image": "https://images.unsplash.com/photo-1623334044303-241021148842?w=160&h=160&fit=crop&auto=format",
90
+ "available": true,
91
+ "featured": true
92
+ },
93
+ {
94
+ "id": "a1b2c3d4-0010",
95
+ "name": "Blueberry Muffin",
96
+ "description": "Tender crumb studded with wild blueberries and a streusel top.",
97
+ "price": 4.25,
98
+ "category": "pastries",
99
+ "image": "https://images.unsplash.com/photo-1607958996333-41aef7caefaa?w=160&h=160&fit=crop&auto=format",
100
+ "available": true,
101
+ "featured": false
102
+ },
103
+ {
104
+ "id": "a1b2c3d4-0011",
105
+ "name": "Cinnamon Roll",
106
+ "description": "Soft, gooey, and generously swirled with cinnamon-brown sugar. Topped with cream cheese frosting.",
107
+ "price": 5,
108
+ "category": "pastries",
109
+ "image": "https://images.unsplash.com/photo-1509365465985-25d11c17e812?w=160&h=160&fit=crop&auto=format",
110
+ "available": true,
111
+ "featured": true
112
+ },
113
+ {
114
+ "id": "a1b2c3d4-0012",
115
+ "name": "Avocado Toast",
116
+ "description": "Sourdough topped with smashed avocado, cherry tomatoes, feta, and chili flakes.",
117
+ "price": 9.5,
118
+ "category": "food",
119
+ "image": "https://images.unsplash.com/photo-1541519227354-08fa5d50c44d?w=160&h=160&fit=crop&auto=format",
120
+ "available": true,
121
+ "featured": false
122
+ },
123
+ {
124
+ "id": "a1b2c3d4-0013",
125
+ "name": "Caprese Panini",
126
+ "description": "Fresh mozzarella, tomato, and basil pressed on ciabatta with balsamic glaze.",
127
+ "price": 10.5,
128
+ "category": "food",
129
+ "image": "https://images.unsplash.com/photo-1509722747041-616f39b57569?w=160&h=160&fit=crop&auto=format",
130
+ "available": true,
131
+ "featured": false
132
+ },
133
+ {
134
+ "id": "a1b2c3d4-0014",
135
+ "name": "Açaí Bowl",
136
+ "description": "Blended açaí with granola, banana, strawberries, coconut, and a drizzle of honey.",
137
+ "price": 11,
138
+ "category": "food",
139
+ "image": "https://images.unsplash.com/photo-1590301157890-4810ed352733?w=160&h=160&fit=crop&auto=format",
140
+ "available": true,
141
+ "featured": false
142
+ }
143
+ ],
144
+ "categories": [
145
+ {
146
+ "id": "all",
147
+ "name": "All",
148
+ "icon": "/img/icons/default.svg"
149
+ },
150
+ {
151
+ "id": "coffee",
152
+ "name": "Coffee",
153
+ "icon": "/img/icons/coffee.svg"
154
+ },
155
+ {
156
+ "id": "tea",
157
+ "name": "Tea",
158
+ "icon": "/img/icons/tea.svg"
159
+ },
160
+ {
161
+ "id": "pastries",
162
+ "name": "Pastries",
163
+ "icon": "/img/icons/pastry.svg"
164
+ },
165
+ {
166
+ "id": "food",
167
+ "name": "Food",
168
+ "icon": "/img/icons/food.svg"
169
+ }
170
+ ],
171
+ "info": {
172
+ "name": "The Roasted Bean",
173
+ "tagline": "Crafted with care, served with warmth",
174
+ "address": "127 Barista Lane, Portland, OR 97201",
175
+ "phone": "(503) 555-0192",
176
+ "hours": [
177
+ {
178
+ "days": "Mon–Fri",
179
+ "time": "7:00 AM – 7:00 PM"
180
+ },
181
+ {
182
+ "days": "Saturday",
183
+ "time": "8:00 AM – 8:00 PM"
184
+ },
185
+ {
186
+ "days": "Sunday",
187
+ "time": "8:00 AM – 5:00 PM"
188
+ }
189
+ ],
190
+ "email": "hello@theroastedbean.com"
191
+ }
192
+ }
node_modules/.bin/mime ADDED
@@ -0,0 +1 @@
 
 
1
+ ../mime/cli.js
node_modules/.bin/uuid ADDED
@@ -0,0 +1 @@
 
 
1
+ ../uuid/dist/bin/uuid
node_modules/.package-lock.json ADDED
@@ -0,0 +1,894 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "cafe-website",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "node_modules/accepts": {
8
+ "version": "1.3.8",
9
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
10
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
11
+ "license": "MIT",
12
+ "dependencies": {
13
+ "mime-types": "~2.1.34",
14
+ "negotiator": "0.6.3"
15
+ },
16
+ "engines": {
17
+ "node": ">= 0.6"
18
+ }
19
+ },
20
+ "node_modules/array-flatten": {
21
+ "version": "1.1.1",
22
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
23
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
24
+ "license": "MIT"
25
+ },
26
+ "node_modules/bcryptjs": {
27
+ "version": "2.4.3",
28
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
29
+ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
30
+ "license": "MIT"
31
+ },
32
+ "node_modules/body-parser": {
33
+ "version": "1.20.5",
34
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
35
+ "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
36
+ "license": "MIT",
37
+ "dependencies": {
38
+ "bytes": "~3.1.2",
39
+ "content-type": "~1.0.5",
40
+ "debug": "2.6.9",
41
+ "depd": "2.0.0",
42
+ "destroy": "~1.2.0",
43
+ "http-errors": "~2.0.1",
44
+ "iconv-lite": "~0.4.24",
45
+ "on-finished": "~2.4.1",
46
+ "qs": "~6.15.1",
47
+ "raw-body": "~2.5.3",
48
+ "type-is": "~1.6.18",
49
+ "unpipe": "~1.0.0"
50
+ },
51
+ "engines": {
52
+ "node": ">= 0.8",
53
+ "npm": "1.2.8000 || >= 1.4.16"
54
+ }
55
+ },
56
+ "node_modules/bytes": {
57
+ "version": "3.1.2",
58
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
59
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
60
+ "license": "MIT",
61
+ "engines": {
62
+ "node": ">= 0.8"
63
+ }
64
+ },
65
+ "node_modules/call-bind-apply-helpers": {
66
+ "version": "1.0.2",
67
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
68
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
69
+ "license": "MIT",
70
+ "dependencies": {
71
+ "es-errors": "^1.3.0",
72
+ "function-bind": "^1.1.2"
73
+ },
74
+ "engines": {
75
+ "node": ">= 0.4"
76
+ }
77
+ },
78
+ "node_modules/call-bound": {
79
+ "version": "1.0.4",
80
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
81
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
82
+ "license": "MIT",
83
+ "dependencies": {
84
+ "call-bind-apply-helpers": "^1.0.2",
85
+ "get-intrinsic": "^1.3.0"
86
+ },
87
+ "engines": {
88
+ "node": ">= 0.4"
89
+ },
90
+ "funding": {
91
+ "url": "https://github.com/sponsors/ljharb"
92
+ }
93
+ },
94
+ "node_modules/content-disposition": {
95
+ "version": "0.5.4",
96
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
97
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
98
+ "license": "MIT",
99
+ "dependencies": {
100
+ "safe-buffer": "5.2.1"
101
+ },
102
+ "engines": {
103
+ "node": ">= 0.6"
104
+ }
105
+ },
106
+ "node_modules/content-type": {
107
+ "version": "1.0.5",
108
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
109
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
110
+ "license": "MIT",
111
+ "engines": {
112
+ "node": ">= 0.6"
113
+ }
114
+ },
115
+ "node_modules/cookie": {
116
+ "version": "0.7.2",
117
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
118
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
119
+ "license": "MIT",
120
+ "engines": {
121
+ "node": ">= 0.6"
122
+ }
123
+ },
124
+ "node_modules/cookie-signature": {
125
+ "version": "1.0.7",
126
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
127
+ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
128
+ "license": "MIT"
129
+ },
130
+ "node_modules/debug": {
131
+ "version": "2.6.9",
132
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
133
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
134
+ "license": "MIT",
135
+ "dependencies": {
136
+ "ms": "2.0.0"
137
+ }
138
+ },
139
+ "node_modules/depd": {
140
+ "version": "2.0.0",
141
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
142
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
143
+ "license": "MIT",
144
+ "engines": {
145
+ "node": ">= 0.8"
146
+ }
147
+ },
148
+ "node_modules/destroy": {
149
+ "version": "1.2.0",
150
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
151
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
152
+ "license": "MIT",
153
+ "engines": {
154
+ "node": ">= 0.8",
155
+ "npm": "1.2.8000 || >= 1.4.16"
156
+ }
157
+ },
158
+ "node_modules/dunder-proto": {
159
+ "version": "1.0.1",
160
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
161
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
162
+ "license": "MIT",
163
+ "dependencies": {
164
+ "call-bind-apply-helpers": "^1.0.1",
165
+ "es-errors": "^1.3.0",
166
+ "gopd": "^1.2.0"
167
+ },
168
+ "engines": {
169
+ "node": ">= 0.4"
170
+ }
171
+ },
172
+ "node_modules/ee-first": {
173
+ "version": "1.1.1",
174
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
175
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
176
+ "license": "MIT"
177
+ },
178
+ "node_modules/encodeurl": {
179
+ "version": "2.0.0",
180
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
181
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
182
+ "license": "MIT",
183
+ "engines": {
184
+ "node": ">= 0.8"
185
+ }
186
+ },
187
+ "node_modules/es-define-property": {
188
+ "version": "1.0.1",
189
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
190
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
191
+ "license": "MIT",
192
+ "engines": {
193
+ "node": ">= 0.4"
194
+ }
195
+ },
196
+ "node_modules/es-errors": {
197
+ "version": "1.3.0",
198
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
199
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
200
+ "license": "MIT",
201
+ "engines": {
202
+ "node": ">= 0.4"
203
+ }
204
+ },
205
+ "node_modules/es-object-atoms": {
206
+ "version": "1.1.2",
207
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
208
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
209
+ "license": "MIT",
210
+ "dependencies": {
211
+ "es-errors": "^1.3.0"
212
+ },
213
+ "engines": {
214
+ "node": ">= 0.4"
215
+ }
216
+ },
217
+ "node_modules/escape-html": {
218
+ "version": "1.0.3",
219
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
220
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
221
+ "license": "MIT"
222
+ },
223
+ "node_modules/etag": {
224
+ "version": "1.8.1",
225
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
226
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
227
+ "license": "MIT",
228
+ "engines": {
229
+ "node": ">= 0.6"
230
+ }
231
+ },
232
+ "node_modules/express": {
233
+ "version": "4.22.2",
234
+ "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz",
235
+ "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==",
236
+ "license": "MIT",
237
+ "dependencies": {
238
+ "accepts": "~1.3.8",
239
+ "array-flatten": "1.1.1",
240
+ "body-parser": "~1.20.5",
241
+ "content-disposition": "~0.5.4",
242
+ "content-type": "~1.0.4",
243
+ "cookie": "~0.7.1",
244
+ "cookie-signature": "~1.0.6",
245
+ "debug": "2.6.9",
246
+ "depd": "2.0.0",
247
+ "encodeurl": "~2.0.0",
248
+ "escape-html": "~1.0.3",
249
+ "etag": "~1.8.1",
250
+ "finalhandler": "~1.3.1",
251
+ "fresh": "~0.5.2",
252
+ "http-errors": "~2.0.0",
253
+ "merge-descriptors": "1.0.3",
254
+ "methods": "~1.1.2",
255
+ "on-finished": "~2.4.1",
256
+ "parseurl": "~1.3.3",
257
+ "path-to-regexp": "~0.1.12",
258
+ "proxy-addr": "~2.0.7",
259
+ "qs": "~6.15.1",
260
+ "range-parser": "~1.2.1",
261
+ "safe-buffer": "5.2.1",
262
+ "send": "~0.19.0",
263
+ "serve-static": "~1.16.2",
264
+ "setprototypeof": "1.2.0",
265
+ "statuses": "~2.0.1",
266
+ "type-is": "~1.6.18",
267
+ "utils-merge": "1.0.1",
268
+ "vary": "~1.1.2"
269
+ },
270
+ "engines": {
271
+ "node": ">= 0.10.0"
272
+ },
273
+ "funding": {
274
+ "type": "opencollective",
275
+ "url": "https://opencollective.com/express"
276
+ }
277
+ },
278
+ "node_modules/express-session": {
279
+ "version": "1.19.0",
280
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.19.0.tgz",
281
+ "integrity": "sha512-0csaMkGq+vaiZTmSMMGkfdCOabYv192VbytFypcvI0MANrp+4i/7yEkJ0sbAEhycQjntaKGzYfjfXQyVb7BHMA==",
282
+ "license": "MIT",
283
+ "dependencies": {
284
+ "cookie": "~0.7.2",
285
+ "cookie-signature": "~1.0.7",
286
+ "debug": "~2.6.9",
287
+ "depd": "~2.0.0",
288
+ "on-headers": "~1.1.0",
289
+ "parseurl": "~1.3.3",
290
+ "safe-buffer": "~5.2.1",
291
+ "uid-safe": "~2.1.5"
292
+ },
293
+ "engines": {
294
+ "node": ">= 0.8.0"
295
+ },
296
+ "funding": {
297
+ "type": "opencollective",
298
+ "url": "https://opencollective.com/express"
299
+ }
300
+ },
301
+ "node_modules/finalhandler": {
302
+ "version": "1.3.2",
303
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
304
+ "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
305
+ "license": "MIT",
306
+ "dependencies": {
307
+ "debug": "2.6.9",
308
+ "encodeurl": "~2.0.0",
309
+ "escape-html": "~1.0.3",
310
+ "on-finished": "~2.4.1",
311
+ "parseurl": "~1.3.3",
312
+ "statuses": "~2.0.2",
313
+ "unpipe": "~1.0.0"
314
+ },
315
+ "engines": {
316
+ "node": ">= 0.8"
317
+ }
318
+ },
319
+ "node_modules/forwarded": {
320
+ "version": "0.2.0",
321
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
322
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
323
+ "license": "MIT",
324
+ "engines": {
325
+ "node": ">= 0.6"
326
+ }
327
+ },
328
+ "node_modules/fresh": {
329
+ "version": "0.5.2",
330
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
331
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
332
+ "license": "MIT",
333
+ "engines": {
334
+ "node": ">= 0.6"
335
+ }
336
+ },
337
+ "node_modules/function-bind": {
338
+ "version": "1.1.2",
339
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
340
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
341
+ "license": "MIT",
342
+ "funding": {
343
+ "url": "https://github.com/sponsors/ljharb"
344
+ }
345
+ },
346
+ "node_modules/get-intrinsic": {
347
+ "version": "1.3.0",
348
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
349
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
350
+ "license": "MIT",
351
+ "dependencies": {
352
+ "call-bind-apply-helpers": "^1.0.2",
353
+ "es-define-property": "^1.0.1",
354
+ "es-errors": "^1.3.0",
355
+ "es-object-atoms": "^1.1.1",
356
+ "function-bind": "^1.1.2",
357
+ "get-proto": "^1.0.1",
358
+ "gopd": "^1.2.0",
359
+ "has-symbols": "^1.1.0",
360
+ "hasown": "^2.0.2",
361
+ "math-intrinsics": "^1.1.0"
362
+ },
363
+ "engines": {
364
+ "node": ">= 0.4"
365
+ },
366
+ "funding": {
367
+ "url": "https://github.com/sponsors/ljharb"
368
+ }
369
+ },
370
+ "node_modules/get-proto": {
371
+ "version": "1.0.1",
372
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
373
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
374
+ "license": "MIT",
375
+ "dependencies": {
376
+ "dunder-proto": "^1.0.1",
377
+ "es-object-atoms": "^1.0.0"
378
+ },
379
+ "engines": {
380
+ "node": ">= 0.4"
381
+ }
382
+ },
383
+ "node_modules/gopd": {
384
+ "version": "1.2.0",
385
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
386
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
387
+ "license": "MIT",
388
+ "engines": {
389
+ "node": ">= 0.4"
390
+ },
391
+ "funding": {
392
+ "url": "https://github.com/sponsors/ljharb"
393
+ }
394
+ },
395
+ "node_modules/has-symbols": {
396
+ "version": "1.1.0",
397
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
398
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
399
+ "license": "MIT",
400
+ "engines": {
401
+ "node": ">= 0.4"
402
+ },
403
+ "funding": {
404
+ "url": "https://github.com/sponsors/ljharb"
405
+ }
406
+ },
407
+ "node_modules/hasown": {
408
+ "version": "2.0.4",
409
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
410
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
411
+ "license": "MIT",
412
+ "dependencies": {
413
+ "function-bind": "^1.1.2"
414
+ },
415
+ "engines": {
416
+ "node": ">= 0.4"
417
+ }
418
+ },
419
+ "node_modules/http-errors": {
420
+ "version": "2.0.1",
421
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
422
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
423
+ "license": "MIT",
424
+ "dependencies": {
425
+ "depd": "~2.0.0",
426
+ "inherits": "~2.0.4",
427
+ "setprototypeof": "~1.2.0",
428
+ "statuses": "~2.0.2",
429
+ "toidentifier": "~1.0.1"
430
+ },
431
+ "engines": {
432
+ "node": ">= 0.8"
433
+ },
434
+ "funding": {
435
+ "type": "opencollective",
436
+ "url": "https://opencollective.com/express"
437
+ }
438
+ },
439
+ "node_modules/iconv-lite": {
440
+ "version": "0.4.24",
441
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
442
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
443
+ "license": "MIT",
444
+ "dependencies": {
445
+ "safer-buffer": ">= 2.1.2 < 3"
446
+ },
447
+ "engines": {
448
+ "node": ">=0.10.0"
449
+ }
450
+ },
451
+ "node_modules/inherits": {
452
+ "version": "2.0.4",
453
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
454
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
455
+ "license": "ISC"
456
+ },
457
+ "node_modules/ipaddr.js": {
458
+ "version": "1.9.1",
459
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
460
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
461
+ "license": "MIT",
462
+ "engines": {
463
+ "node": ">= 0.10"
464
+ }
465
+ },
466
+ "node_modules/math-intrinsics": {
467
+ "version": "1.1.0",
468
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
469
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
470
+ "license": "MIT",
471
+ "engines": {
472
+ "node": ">= 0.4"
473
+ }
474
+ },
475
+ "node_modules/media-typer": {
476
+ "version": "0.3.0",
477
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
478
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
479
+ "license": "MIT",
480
+ "engines": {
481
+ "node": ">= 0.6"
482
+ }
483
+ },
484
+ "node_modules/merge-descriptors": {
485
+ "version": "1.0.3",
486
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
487
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
488
+ "license": "MIT",
489
+ "funding": {
490
+ "url": "https://github.com/sponsors/sindresorhus"
491
+ }
492
+ },
493
+ "node_modules/methods": {
494
+ "version": "1.1.2",
495
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
496
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
497
+ "license": "MIT",
498
+ "engines": {
499
+ "node": ">= 0.6"
500
+ }
501
+ },
502
+ "node_modules/mime": {
503
+ "version": "1.6.0",
504
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
505
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
506
+ "license": "MIT",
507
+ "bin": {
508
+ "mime": "cli.js"
509
+ },
510
+ "engines": {
511
+ "node": ">=4"
512
+ }
513
+ },
514
+ "node_modules/mime-db": {
515
+ "version": "1.52.0",
516
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
517
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
518
+ "license": "MIT",
519
+ "engines": {
520
+ "node": ">= 0.6"
521
+ }
522
+ },
523
+ "node_modules/mime-types": {
524
+ "version": "2.1.35",
525
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
526
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
527
+ "license": "MIT",
528
+ "dependencies": {
529
+ "mime-db": "1.52.0"
530
+ },
531
+ "engines": {
532
+ "node": ">= 0.6"
533
+ }
534
+ },
535
+ "node_modules/ms": {
536
+ "version": "2.0.0",
537
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
538
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
539
+ "license": "MIT"
540
+ },
541
+ "node_modules/negotiator": {
542
+ "version": "0.6.3",
543
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
544
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
545
+ "license": "MIT",
546
+ "engines": {
547
+ "node": ">= 0.6"
548
+ }
549
+ },
550
+ "node_modules/object-inspect": {
551
+ "version": "1.13.4",
552
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
553
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
554
+ "license": "MIT",
555
+ "engines": {
556
+ "node": ">= 0.4"
557
+ },
558
+ "funding": {
559
+ "url": "https://github.com/sponsors/ljharb"
560
+ }
561
+ },
562
+ "node_modules/on-finished": {
563
+ "version": "2.4.1",
564
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
565
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
566
+ "license": "MIT",
567
+ "dependencies": {
568
+ "ee-first": "1.1.1"
569
+ },
570
+ "engines": {
571
+ "node": ">= 0.8"
572
+ }
573
+ },
574
+ "node_modules/on-headers": {
575
+ "version": "1.1.0",
576
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
577
+ "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
578
+ "license": "MIT",
579
+ "engines": {
580
+ "node": ">= 0.8"
581
+ }
582
+ },
583
+ "node_modules/parseurl": {
584
+ "version": "1.3.3",
585
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
586
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
587
+ "license": "MIT",
588
+ "engines": {
589
+ "node": ">= 0.8"
590
+ }
591
+ },
592
+ "node_modules/path-to-regexp": {
593
+ "version": "0.1.13",
594
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
595
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
596
+ "license": "MIT"
597
+ },
598
+ "node_modules/proxy-addr": {
599
+ "version": "2.0.7",
600
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
601
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
602
+ "license": "MIT",
603
+ "dependencies": {
604
+ "forwarded": "0.2.0",
605
+ "ipaddr.js": "1.9.1"
606
+ },
607
+ "engines": {
608
+ "node": ">= 0.10"
609
+ }
610
+ },
611
+ "node_modules/qs": {
612
+ "version": "6.15.3",
613
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
614
+ "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
615
+ "license": "BSD-3-Clause",
616
+ "dependencies": {
617
+ "es-define-property": "^1.0.1",
618
+ "side-channel": "^1.1.1"
619
+ },
620
+ "engines": {
621
+ "node": ">=0.6"
622
+ },
623
+ "funding": {
624
+ "url": "https://github.com/sponsors/ljharb"
625
+ }
626
+ },
627
+ "node_modules/random-bytes": {
628
+ "version": "1.0.0",
629
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
630
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
631
+ "license": "MIT",
632
+ "engines": {
633
+ "node": ">= 0.8"
634
+ }
635
+ },
636
+ "node_modules/range-parser": {
637
+ "version": "1.2.1",
638
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
639
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
640
+ "license": "MIT",
641
+ "engines": {
642
+ "node": ">= 0.6"
643
+ }
644
+ },
645
+ "node_modules/raw-body": {
646
+ "version": "2.5.3",
647
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
648
+ "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
649
+ "license": "MIT",
650
+ "dependencies": {
651
+ "bytes": "~3.1.2",
652
+ "http-errors": "~2.0.1",
653
+ "iconv-lite": "~0.4.24",
654
+ "unpipe": "~1.0.0"
655
+ },
656
+ "engines": {
657
+ "node": ">= 0.8"
658
+ }
659
+ },
660
+ "node_modules/safe-buffer": {
661
+ "version": "5.2.1",
662
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
663
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
664
+ "funding": [
665
+ {
666
+ "type": "github",
667
+ "url": "https://github.com/sponsors/feross"
668
+ },
669
+ {
670
+ "type": "patreon",
671
+ "url": "https://www.patreon.com/feross"
672
+ },
673
+ {
674
+ "type": "consulting",
675
+ "url": "https://feross.org/support"
676
+ }
677
+ ],
678
+ "license": "MIT"
679
+ },
680
+ "node_modules/safer-buffer": {
681
+ "version": "2.1.2",
682
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
683
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
684
+ "license": "MIT"
685
+ },
686
+ "node_modules/send": {
687
+ "version": "0.19.2",
688
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
689
+ "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
690
+ "license": "MIT",
691
+ "dependencies": {
692
+ "debug": "2.6.9",
693
+ "depd": "2.0.0",
694
+ "destroy": "1.2.0",
695
+ "encodeurl": "~2.0.0",
696
+ "escape-html": "~1.0.3",
697
+ "etag": "~1.8.1",
698
+ "fresh": "~0.5.2",
699
+ "http-errors": "~2.0.1",
700
+ "mime": "1.6.0",
701
+ "ms": "2.1.3",
702
+ "on-finished": "~2.4.1",
703
+ "range-parser": "~1.2.1",
704
+ "statuses": "~2.0.2"
705
+ },
706
+ "engines": {
707
+ "node": ">= 0.8.0"
708
+ }
709
+ },
710
+ "node_modules/send/node_modules/ms": {
711
+ "version": "2.1.3",
712
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
713
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
714
+ "license": "MIT"
715
+ },
716
+ "node_modules/serve-static": {
717
+ "version": "1.16.3",
718
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
719
+ "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
720
+ "license": "MIT",
721
+ "dependencies": {
722
+ "encodeurl": "~2.0.0",
723
+ "escape-html": "~1.0.3",
724
+ "parseurl": "~1.3.3",
725
+ "send": "~0.19.1"
726
+ },
727
+ "engines": {
728
+ "node": ">= 0.8.0"
729
+ }
730
+ },
731
+ "node_modules/setprototypeof": {
732
+ "version": "1.2.0",
733
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
734
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
735
+ "license": "ISC"
736
+ },
737
+ "node_modules/side-channel": {
738
+ "version": "1.1.1",
739
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
740
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
741
+ "license": "MIT",
742
+ "dependencies": {
743
+ "es-errors": "^1.3.0",
744
+ "object-inspect": "^1.13.4",
745
+ "side-channel-list": "^1.0.1",
746
+ "side-channel-map": "^1.0.1",
747
+ "side-channel-weakmap": "^1.0.2"
748
+ },
749
+ "engines": {
750
+ "node": ">= 0.4"
751
+ },
752
+ "funding": {
753
+ "url": "https://github.com/sponsors/ljharb"
754
+ }
755
+ },
756
+ "node_modules/side-channel-list": {
757
+ "version": "1.0.1",
758
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
759
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
760
+ "license": "MIT",
761
+ "dependencies": {
762
+ "es-errors": "^1.3.0",
763
+ "object-inspect": "^1.13.4"
764
+ },
765
+ "engines": {
766
+ "node": ">= 0.4"
767
+ },
768
+ "funding": {
769
+ "url": "https://github.com/sponsors/ljharb"
770
+ }
771
+ },
772
+ "node_modules/side-channel-map": {
773
+ "version": "1.0.1",
774
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
775
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
776
+ "license": "MIT",
777
+ "dependencies": {
778
+ "call-bound": "^1.0.2",
779
+ "es-errors": "^1.3.0",
780
+ "get-intrinsic": "^1.2.5",
781
+ "object-inspect": "^1.13.3"
782
+ },
783
+ "engines": {
784
+ "node": ">= 0.4"
785
+ },
786
+ "funding": {
787
+ "url": "https://github.com/sponsors/ljharb"
788
+ }
789
+ },
790
+ "node_modules/side-channel-weakmap": {
791
+ "version": "1.0.2",
792
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
793
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
794
+ "license": "MIT",
795
+ "dependencies": {
796
+ "call-bound": "^1.0.2",
797
+ "es-errors": "^1.3.0",
798
+ "get-intrinsic": "^1.2.5",
799
+ "object-inspect": "^1.13.3",
800
+ "side-channel-map": "^1.0.1"
801
+ },
802
+ "engines": {
803
+ "node": ">= 0.4"
804
+ },
805
+ "funding": {
806
+ "url": "https://github.com/sponsors/ljharb"
807
+ }
808
+ },
809
+ "node_modules/statuses": {
810
+ "version": "2.0.2",
811
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
812
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
813
+ "license": "MIT",
814
+ "engines": {
815
+ "node": ">= 0.8"
816
+ }
817
+ },
818
+ "node_modules/toidentifier": {
819
+ "version": "1.0.1",
820
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
821
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
822
+ "license": "MIT",
823
+ "engines": {
824
+ "node": ">=0.6"
825
+ }
826
+ },
827
+ "node_modules/type-is": {
828
+ "version": "1.6.18",
829
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
830
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
831
+ "license": "MIT",
832
+ "dependencies": {
833
+ "media-typer": "0.3.0",
834
+ "mime-types": "~2.1.24"
835
+ },
836
+ "engines": {
837
+ "node": ">= 0.6"
838
+ }
839
+ },
840
+ "node_modules/uid-safe": {
841
+ "version": "2.1.5",
842
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
843
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
844
+ "license": "MIT",
845
+ "dependencies": {
846
+ "random-bytes": "~1.0.0"
847
+ },
848
+ "engines": {
849
+ "node": ">= 0.8"
850
+ }
851
+ },
852
+ "node_modules/unpipe": {
853
+ "version": "1.0.0",
854
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
855
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
856
+ "license": "MIT",
857
+ "engines": {
858
+ "node": ">= 0.8"
859
+ }
860
+ },
861
+ "node_modules/utils-merge": {
862
+ "version": "1.0.1",
863
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
864
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
865
+ "license": "MIT",
866
+ "engines": {
867
+ "node": ">= 0.4.0"
868
+ }
869
+ },
870
+ "node_modules/uuid": {
871
+ "version": "9.0.1",
872
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
873
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
874
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
875
+ "funding": [
876
+ "https://github.com/sponsors/broofa",
877
+ "https://github.com/sponsors/ctavan"
878
+ ],
879
+ "license": "MIT",
880
+ "bin": {
881
+ "uuid": "dist/bin/uuid"
882
+ }
883
+ },
884
+ "node_modules/vary": {
885
+ "version": "1.1.2",
886
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
887
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
888
+ "license": "MIT",
889
+ "engines": {
890
+ "node": ">= 0.8"
891
+ }
892
+ }
893
+ }
894
+ }
node_modules/accepts/HISTORY.md ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1.3.8 / 2022-02-02
2
+ ==================
3
+
4
+ * deps: mime-types@~2.1.34
5
+ - deps: mime-db@~1.51.0
6
+ * deps: negotiator@0.6.3
7
+
8
+ 1.3.7 / 2019-04-29
9
+ ==================
10
+
11
+ * deps: negotiator@0.6.2
12
+ - Fix sorting charset, encoding, and language with extra parameters
13
+
14
+ 1.3.6 / 2019-04-28
15
+ ==================
16
+
17
+ * deps: mime-types@~2.1.24
18
+ - deps: mime-db@~1.40.0
19
+
20
+ 1.3.5 / 2018-02-28
21
+ ==================
22
+
23
+ * deps: mime-types@~2.1.18
24
+ - deps: mime-db@~1.33.0
25
+
26
+ 1.3.4 / 2017-08-22
27
+ ==================
28
+
29
+ * deps: mime-types@~2.1.16
30
+ - deps: mime-db@~1.29.0
31
+
32
+ 1.3.3 / 2016-05-02
33
+ ==================
34
+
35
+ * deps: mime-types@~2.1.11
36
+ - deps: mime-db@~1.23.0
37
+ * deps: negotiator@0.6.1
38
+ - perf: improve `Accept` parsing speed
39
+ - perf: improve `Accept-Charset` parsing speed
40
+ - perf: improve `Accept-Encoding` parsing speed
41
+ - perf: improve `Accept-Language` parsing speed
42
+
43
+ 1.3.2 / 2016-03-08
44
+ ==================
45
+
46
+ * deps: mime-types@~2.1.10
47
+ - Fix extension of `application/dash+xml`
48
+ - Update primary extension for `audio/mp4`
49
+ - deps: mime-db@~1.22.0
50
+
51
+ 1.3.1 / 2016-01-19
52
+ ==================
53
+
54
+ * deps: mime-types@~2.1.9
55
+ - deps: mime-db@~1.21.0
56
+
57
+ 1.3.0 / 2015-09-29
58
+ ==================
59
+
60
+ * deps: mime-types@~2.1.7
61
+ - deps: mime-db@~1.19.0
62
+ * deps: negotiator@0.6.0
63
+ - Fix including type extensions in parameters in `Accept` parsing
64
+ - Fix parsing `Accept` parameters with quoted equals
65
+ - Fix parsing `Accept` parameters with quoted semicolons
66
+ - Lazy-load modules from main entry point
67
+ - perf: delay type concatenation until needed
68
+ - perf: enable strict mode
69
+ - perf: hoist regular expressions
70
+ - perf: remove closures getting spec properties
71
+ - perf: remove a closure from media type parsing
72
+ - perf: remove property delete from media type parsing
73
+
74
+ 1.2.13 / 2015-09-06
75
+ ===================
76
+
77
+ * deps: mime-types@~2.1.6
78
+ - deps: mime-db@~1.18.0
79
+
80
+ 1.2.12 / 2015-07-30
81
+ ===================
82
+
83
+ * deps: mime-types@~2.1.4
84
+ - deps: mime-db@~1.16.0
85
+
86
+ 1.2.11 / 2015-07-16
87
+ ===================
88
+
89
+ * deps: mime-types@~2.1.3
90
+ - deps: mime-db@~1.15.0
91
+
92
+ 1.2.10 / 2015-07-01
93
+ ===================
94
+
95
+ * deps: mime-types@~2.1.2
96
+ - deps: mime-db@~1.14.0
97
+
98
+ 1.2.9 / 2015-06-08
99
+ ==================
100
+
101
+ * deps: mime-types@~2.1.1
102
+ - perf: fix deopt during mapping
103
+
104
+ 1.2.8 / 2015-06-07
105
+ ==================
106
+
107
+ * deps: mime-types@~2.1.0
108
+ - deps: mime-db@~1.13.0
109
+ * perf: avoid argument reassignment & argument slice
110
+ * perf: avoid negotiator recursive construction
111
+ * perf: enable strict mode
112
+ * perf: remove unnecessary bitwise operator
113
+
114
+ 1.2.7 / 2015-05-10
115
+ ==================
116
+
117
+ * deps: negotiator@0.5.3
118
+ - Fix media type parameter matching to be case-insensitive
119
+
120
+ 1.2.6 / 2015-05-07
121
+ ==================
122
+
123
+ * deps: mime-types@~2.0.11
124
+ - deps: mime-db@~1.9.1
125
+ * deps: negotiator@0.5.2
126
+ - Fix comparing media types with quoted values
127
+ - Fix splitting media types with quoted commas
128
+
129
+ 1.2.5 / 2015-03-13
130
+ ==================
131
+
132
+ * deps: mime-types@~2.0.10
133
+ - deps: mime-db@~1.8.0
134
+
135
+ 1.2.4 / 2015-02-14
136
+ ==================
137
+
138
+ * Support Node.js 0.6
139
+ * deps: mime-types@~2.0.9
140
+ - deps: mime-db@~1.7.0
141
+ * deps: negotiator@0.5.1
142
+ - Fix preference sorting to be stable for long acceptable lists
143
+
144
+ 1.2.3 / 2015-01-31
145
+ ==================
146
+
147
+ * deps: mime-types@~2.0.8
148
+ - deps: mime-db@~1.6.0
149
+
150
+ 1.2.2 / 2014-12-30
151
+ ==================
152
+
153
+ * deps: mime-types@~2.0.7
154
+ - deps: mime-db@~1.5.0
155
+
156
+ 1.2.1 / 2014-12-30
157
+ ==================
158
+
159
+ * deps: mime-types@~2.0.5
160
+ - deps: mime-db@~1.3.1
161
+
162
+ 1.2.0 / 2014-12-19
163
+ ==================
164
+
165
+ * deps: negotiator@0.5.0
166
+ - Fix list return order when large accepted list
167
+ - Fix missing identity encoding when q=0 exists
168
+ - Remove dynamic building of Negotiator class
169
+
170
+ 1.1.4 / 2014-12-10
171
+ ==================
172
+
173
+ * deps: mime-types@~2.0.4
174
+ - deps: mime-db@~1.3.0
175
+
176
+ 1.1.3 / 2014-11-09
177
+ ==================
178
+
179
+ * deps: mime-types@~2.0.3
180
+ - deps: mime-db@~1.2.0
181
+
182
+ 1.1.2 / 2014-10-14
183
+ ==================
184
+
185
+ * deps: negotiator@0.4.9
186
+ - Fix error when media type has invalid parameter
187
+
188
+ 1.1.1 / 2014-09-28
189
+ ==================
190
+
191
+ * deps: mime-types@~2.0.2
192
+ - deps: mime-db@~1.1.0
193
+ * deps: negotiator@0.4.8
194
+ - Fix all negotiations to be case-insensitive
195
+ - Stable sort preferences of same quality according to client order
196
+
197
+ 1.1.0 / 2014-09-02
198
+ ==================
199
+
200
+ * update `mime-types`
201
+
202
+ 1.0.7 / 2014-07-04
203
+ ==================
204
+
205
+ * Fix wrong type returned from `type` when match after unknown extension
206
+
207
+ 1.0.6 / 2014-06-24
208
+ ==================
209
+
210
+ * deps: negotiator@0.4.7
211
+
212
+ 1.0.5 / 2014-06-20
213
+ ==================
214
+
215
+ * fix crash when unknown extension given
216
+
217
+ 1.0.4 / 2014-06-19
218
+ ==================
219
+
220
+ * use `mime-types`
221
+
222
+ 1.0.3 / 2014-06-11
223
+ ==================
224
+
225
+ * deps: negotiator@0.4.6
226
+ - Order by specificity when quality is the same
227
+
228
+ 1.0.2 / 2014-05-29
229
+ ==================
230
+
231
+ * Fix interpretation when header not in request
232
+ * deps: pin negotiator@0.4.5
233
+
234
+ 1.0.1 / 2014-01-18
235
+ ==================
236
+
237
+ * Identity encoding isn't always acceptable
238
+ * deps: negotiator@~0.4.0
239
+
240
+ 1.0.0 / 2013-12-27
241
+ ==================
242
+
243
+ * Genesis
node_modules/accepts/LICENSE ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
4
+ Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ 'Software'), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
node_modules/accepts/README.md ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # accepts
2
+
3
+ [![NPM Version][npm-version-image]][npm-url]
4
+ [![NPM Downloads][npm-downloads-image]][npm-url]
5
+ [![Node.js Version][node-version-image]][node-version-url]
6
+ [![Build Status][github-actions-ci-image]][github-actions-ci-url]
7
+ [![Test Coverage][coveralls-image]][coveralls-url]
8
+
9
+ Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
10
+ Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
11
+
12
+ In addition to negotiator, it allows:
13
+
14
+ - Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
15
+ as well as `('text/html', 'application/json')`.
16
+ - Allows type shorthands such as `json`.
17
+ - Returns `false` when no types match
18
+ - Treats non-existent headers as `*`
19
+
20
+ ## Installation
21
+
22
+ This is a [Node.js](https://nodejs.org/en/) module available through the
23
+ [npm registry](https://www.npmjs.com/). Installation is done using the
24
+ [`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
25
+
26
+ ```sh
27
+ $ npm install accepts
28
+ ```
29
+
30
+ ## API
31
+
32
+ ```js
33
+ var accepts = require('accepts')
34
+ ```
35
+
36
+ ### accepts(req)
37
+
38
+ Create a new `Accepts` object for the given `req`.
39
+
40
+ #### .charset(charsets)
41
+
42
+ Return the first accepted charset. If nothing in `charsets` is accepted,
43
+ then `false` is returned.
44
+
45
+ #### .charsets()
46
+
47
+ Return the charsets that the request accepts, in the order of the client's
48
+ preference (most preferred first).
49
+
50
+ #### .encoding(encodings)
51
+
52
+ Return the first accepted encoding. If nothing in `encodings` is accepted,
53
+ then `false` is returned.
54
+
55
+ #### .encodings()
56
+
57
+ Return the encodings that the request accepts, in the order of the client's
58
+ preference (most preferred first).
59
+
60
+ #### .language(languages)
61
+
62
+ Return the first accepted language. If nothing in `languages` is accepted,
63
+ then `false` is returned.
64
+
65
+ #### .languages()
66
+
67
+ Return the languages that the request accepts, in the order of the client's
68
+ preference (most preferred first).
69
+
70
+ #### .type(types)
71
+
72
+ Return the first accepted type (and it is returned as the same text as what
73
+ appears in the `types` array). If nothing in `types` is accepted, then `false`
74
+ is returned.
75
+
76
+ The `types` array can contain full MIME types or file extensions. Any value
77
+ that is not a full MIME types is passed to `require('mime-types').lookup`.
78
+
79
+ #### .types()
80
+
81
+ Return the types that the request accepts, in the order of the client's
82
+ preference (most preferred first).
83
+
84
+ ## Examples
85
+
86
+ ### Simple type negotiation
87
+
88
+ This simple example shows how to use `accepts` to return a different typed
89
+ respond body based on what the client wants to accept. The server lists it's
90
+ preferences in order and will get back the best match between the client and
91
+ server.
92
+
93
+ ```js
94
+ var accepts = require('accepts')
95
+ var http = require('http')
96
+
97
+ function app (req, res) {
98
+ var accept = accepts(req)
99
+
100
+ // the order of this list is significant; should be server preferred order
101
+ switch (accept.type(['json', 'html'])) {
102
+ case 'json':
103
+ res.setHeader('Content-Type', 'application/json')
104
+ res.write('{"hello":"world!"}')
105
+ break
106
+ case 'html':
107
+ res.setHeader('Content-Type', 'text/html')
108
+ res.write('<b>hello, world!</b>')
109
+ break
110
+ default:
111
+ // the fallback is text/plain, so no need to specify it above
112
+ res.setHeader('Content-Type', 'text/plain')
113
+ res.write('hello, world!')
114
+ break
115
+ }
116
+
117
+ res.end()
118
+ }
119
+
120
+ http.createServer(app).listen(3000)
121
+ ```
122
+
123
+ You can test this out with the cURL program:
124
+ ```sh
125
+ curl -I -H'Accept: text/html' http://localhost:3000/
126
+ ```
127
+
128
+ ## License
129
+
130
+ [MIT](LICENSE)
131
+
132
+ [coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
133
+ [coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
134
+ [github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
135
+ [github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
136
+ [node-version-image]: https://badgen.net/npm/node/accepts
137
+ [node-version-url]: https://nodejs.org/en/download
138
+ [npm-downloads-image]: https://badgen.net/npm/dm/accepts
139
+ [npm-url]: https://npmjs.org/package/accepts
140
+ [npm-version-image]: https://badgen.net/npm/v/accepts
node_modules/accepts/index.js ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * accepts
3
+ * Copyright(c) 2014 Jonathan Ong
4
+ * Copyright(c) 2015 Douglas Christopher Wilson
5
+ * MIT Licensed
6
+ */
7
+
8
+ 'use strict'
9
+
10
+ /**
11
+ * Module dependencies.
12
+ * @private
13
+ */
14
+
15
+ var Negotiator = require('negotiator')
16
+ var mime = require('mime-types')
17
+
18
+ /**
19
+ * Module exports.
20
+ * @public
21
+ */
22
+
23
+ module.exports = Accepts
24
+
25
+ /**
26
+ * Create a new Accepts object for the given req.
27
+ *
28
+ * @param {object} req
29
+ * @public
30
+ */
31
+
32
+ function Accepts (req) {
33
+ if (!(this instanceof Accepts)) {
34
+ return new Accepts(req)
35
+ }
36
+
37
+ this.headers = req.headers
38
+ this.negotiator = new Negotiator(req)
39
+ }
40
+
41
+ /**
42
+ * Check if the given `type(s)` is acceptable, returning
43
+ * the best match when true, otherwise `undefined`, in which
44
+ * case you should respond with 406 "Not Acceptable".
45
+ *
46
+ * The `type` value may be a single mime type string
47
+ * such as "application/json", the extension name
48
+ * such as "json" or an array `["json", "html", "text/plain"]`. When a list
49
+ * or array is given the _best_ match, if any is returned.
50
+ *
51
+ * Examples:
52
+ *
53
+ * // Accept: text/html
54
+ * this.types('html');
55
+ * // => "html"
56
+ *
57
+ * // Accept: text/*, application/json
58
+ * this.types('html');
59
+ * // => "html"
60
+ * this.types('text/html');
61
+ * // => "text/html"
62
+ * this.types('json', 'text');
63
+ * // => "json"
64
+ * this.types('application/json');
65
+ * // => "application/json"
66
+ *
67
+ * // Accept: text/*, application/json
68
+ * this.types('image/png');
69
+ * this.types('png');
70
+ * // => undefined
71
+ *
72
+ * // Accept: text/*;q=.5, application/json
73
+ * this.types(['html', 'json']);
74
+ * this.types('html', 'json');
75
+ * // => "json"
76
+ *
77
+ * @param {String|Array} types...
78
+ * @return {String|Array|Boolean}
79
+ * @public
80
+ */
81
+
82
+ Accepts.prototype.type =
83
+ Accepts.prototype.types = function (types_) {
84
+ var types = types_
85
+
86
+ // support flattened arguments
87
+ if (types && !Array.isArray(types)) {
88
+ types = new Array(arguments.length)
89
+ for (var i = 0; i < types.length; i++) {
90
+ types[i] = arguments[i]
91
+ }
92
+ }
93
+
94
+ // no types, return all requested types
95
+ if (!types || types.length === 0) {
96
+ return this.negotiator.mediaTypes()
97
+ }
98
+
99
+ // no accept header, return first given type
100
+ if (!this.headers.accept) {
101
+ return types[0]
102
+ }
103
+
104
+ var mimes = types.map(extToMime)
105
+ var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
106
+ var first = accepts[0]
107
+
108
+ return first
109
+ ? types[mimes.indexOf(first)]
110
+ : false
111
+ }
112
+
113
+ /**
114
+ * Return accepted encodings or best fit based on `encodings`.
115
+ *
116
+ * Given `Accept-Encoding: gzip, deflate`
117
+ * an array sorted by quality is returned:
118
+ *
119
+ * ['gzip', 'deflate']
120
+ *
121
+ * @param {String|Array} encodings...
122
+ * @return {String|Array}
123
+ * @public
124
+ */
125
+
126
+ Accepts.prototype.encoding =
127
+ Accepts.prototype.encodings = function (encodings_) {
128
+ var encodings = encodings_
129
+
130
+ // support flattened arguments
131
+ if (encodings && !Array.isArray(encodings)) {
132
+ encodings = new Array(arguments.length)
133
+ for (var i = 0; i < encodings.length; i++) {
134
+ encodings[i] = arguments[i]
135
+ }
136
+ }
137
+
138
+ // no encodings, return all requested encodings
139
+ if (!encodings || encodings.length === 0) {
140
+ return this.negotiator.encodings()
141
+ }
142
+
143
+ return this.negotiator.encodings(encodings)[0] || false
144
+ }
145
+
146
+ /**
147
+ * Return accepted charsets or best fit based on `charsets`.
148
+ *
149
+ * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
150
+ * an array sorted by quality is returned:
151
+ *
152
+ * ['utf-8', 'utf-7', 'iso-8859-1']
153
+ *
154
+ * @param {String|Array} charsets...
155
+ * @return {String|Array}
156
+ * @public
157
+ */
158
+
159
+ Accepts.prototype.charset =
160
+ Accepts.prototype.charsets = function (charsets_) {
161
+ var charsets = charsets_
162
+
163
+ // support flattened arguments
164
+ if (charsets && !Array.isArray(charsets)) {
165
+ charsets = new Array(arguments.length)
166
+ for (var i = 0; i < charsets.length; i++) {
167
+ charsets[i] = arguments[i]
168
+ }
169
+ }
170
+
171
+ // no charsets, return all requested charsets
172
+ if (!charsets || charsets.length === 0) {
173
+ return this.negotiator.charsets()
174
+ }
175
+
176
+ return this.negotiator.charsets(charsets)[0] || false
177
+ }
178
+
179
+ /**
180
+ * Return accepted languages or best fit based on `langs`.
181
+ *
182
+ * Given `Accept-Language: en;q=0.8, es, pt`
183
+ * an array sorted by quality is returned:
184
+ *
185
+ * ['es', 'pt', 'en']
186
+ *
187
+ * @param {String|Array} langs...
188
+ * @return {Array|String}
189
+ * @public
190
+ */
191
+
192
+ Accepts.prototype.lang =
193
+ Accepts.prototype.langs =
194
+ Accepts.prototype.language =
195
+ Accepts.prototype.languages = function (languages_) {
196
+ var languages = languages_
197
+
198
+ // support flattened arguments
199
+ if (languages && !Array.isArray(languages)) {
200
+ languages = new Array(arguments.length)
201
+ for (var i = 0; i < languages.length; i++) {
202
+ languages[i] = arguments[i]
203
+ }
204
+ }
205
+
206
+ // no languages, return all requested languages
207
+ if (!languages || languages.length === 0) {
208
+ return this.negotiator.languages()
209
+ }
210
+
211
+ return this.negotiator.languages(languages)[0] || false
212
+ }
213
+
214
+ /**
215
+ * Convert extnames to mime.
216
+ *
217
+ * @param {String} type
218
+ * @return {String}
219
+ * @private
220
+ */
221
+
222
+ function extToMime (type) {
223
+ return type.indexOf('/') === -1
224
+ ? mime.lookup(type)
225
+ : type
226
+ }
227
+
228
+ /**
229
+ * Check if mime is valid.
230
+ *
231
+ * @param {String} type
232
+ * @return {String}
233
+ * @private
234
+ */
235
+
236
+ function validMime (type) {
237
+ return typeof type === 'string'
238
+ }
node_modules/accepts/package.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "accepts",
3
+ "description": "Higher-level content negotiation",
4
+ "version": "1.3.8",
5
+ "contributors": [
6
+ "Douglas Christopher Wilson <doug@somethingdoug.com>",
7
+ "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
8
+ ],
9
+ "license": "MIT",
10
+ "repository": "jshttp/accepts",
11
+ "dependencies": {
12
+ "mime-types": "~2.1.34",
13
+ "negotiator": "0.6.3"
14
+ },
15
+ "devDependencies": {
16
+ "deep-equal": "1.0.1",
17
+ "eslint": "7.32.0",
18
+ "eslint-config-standard": "14.1.1",
19
+ "eslint-plugin-import": "2.25.4",
20
+ "eslint-plugin-markdown": "2.2.1",
21
+ "eslint-plugin-node": "11.1.0",
22
+ "eslint-plugin-promise": "4.3.1",
23
+ "eslint-plugin-standard": "4.1.0",
24
+ "mocha": "9.2.0",
25
+ "nyc": "15.1.0"
26
+ },
27
+ "files": [
28
+ "LICENSE",
29
+ "HISTORY.md",
30
+ "index.js"
31
+ ],
32
+ "engines": {
33
+ "node": ">= 0.6"
34
+ },
35
+ "scripts": {
36
+ "lint": "eslint .",
37
+ "test": "mocha --reporter spec --check-leaks --bail test/",
38
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
39
+ "test-cov": "nyc --reporter=html --reporter=text npm test"
40
+ },
41
+ "keywords": [
42
+ "content",
43
+ "negotiation",
44
+ "accept",
45
+ "accepts"
46
+ ]
47
+ }
node_modules/array-flatten/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
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
13
+ all 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
21
+ THE SOFTWARE.
node_modules/array-flatten/README.md ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Array Flatten
2
+
3
+ [![NPM version][npm-image]][npm-url]
4
+ [![NPM downloads][downloads-image]][downloads-url]
5
+ [![Build status][travis-image]][travis-url]
6
+ [![Test coverage][coveralls-image]][coveralls-url]
7
+
8
+ > Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
9
+
10
+ ## Installation
11
+
12
+ ```
13
+ npm install array-flatten --save
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ ```javascript
19
+ var flatten = require('array-flatten')
20
+
21
+ flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
22
+ //=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
23
+
24
+ flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
25
+ //=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
26
+
27
+ (function () {
28
+ flatten(arguments) //=> [1, 2, 3]
29
+ })(1, [2, 3])
30
+ ```
31
+
32
+ ## License
33
+
34
+ MIT
35
+
36
+ [npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
37
+ [npm-url]: https://npmjs.org/package/array-flatten
38
+ [downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
39
+ [downloads-url]: https://npmjs.org/package/array-flatten
40
+ [travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
41
+ [travis-url]: https://travis-ci.org/blakeembrey/array-flatten
42
+ [coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
43
+ [coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master
node_modules/array-flatten/array-flatten.js ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use strict'
2
+
3
+ /**
4
+ * Expose `arrayFlatten`.
5
+ */
6
+ module.exports = arrayFlatten
7
+
8
+ /**
9
+ * Recursive flatten function with depth.
10
+ *
11
+ * @param {Array} array
12
+ * @param {Array} result
13
+ * @param {Number} depth
14
+ * @return {Array}
15
+ */
16
+ function flattenWithDepth (array, result, depth) {
17
+ for (var i = 0; i < array.length; i++) {
18
+ var value = array[i]
19
+
20
+ if (depth > 0 && Array.isArray(value)) {
21
+ flattenWithDepth(value, result, depth - 1)
22
+ } else {
23
+ result.push(value)
24
+ }
25
+ }
26
+
27
+ return result
28
+ }
29
+
30
+ /**
31
+ * Recursive flatten function. Omitting depth is slightly faster.
32
+ *
33
+ * @param {Array} array
34
+ * @param {Array} result
35
+ * @return {Array}
36
+ */
37
+ function flattenForever (array, result) {
38
+ for (var i = 0; i < array.length; i++) {
39
+ var value = array[i]
40
+
41
+ if (Array.isArray(value)) {
42
+ flattenForever(value, result)
43
+ } else {
44
+ result.push(value)
45
+ }
46
+ }
47
+
48
+ return result
49
+ }
50
+
51
+ /**
52
+ * Flatten an array, with the ability to define a depth.
53
+ *
54
+ * @param {Array} array
55
+ * @param {Number} depth
56
+ * @return {Array}
57
+ */
58
+ function arrayFlatten (array, depth) {
59
+ if (depth == null) {
60
+ return flattenForever(array, [])
61
+ }
62
+
63
+ return flattenWithDepth(array, [], depth)
64
+ }
node_modules/array-flatten/package.json ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "array-flatten",
3
+ "version": "1.1.1",
4
+ "description": "Flatten an array of nested arrays into a single flat array",
5
+ "main": "array-flatten.js",
6
+ "files": [
7
+ "array-flatten.js",
8
+ "LICENSE"
9
+ ],
10
+ "scripts": {
11
+ "test": "istanbul cover _mocha -- -R spec"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git://github.com/blakeembrey/array-flatten.git"
16
+ },
17
+ "keywords": [
18
+ "array",
19
+ "flatten",
20
+ "arguments",
21
+ "depth"
22
+ ],
23
+ "author": {
24
+ "name": "Blake Embrey",
25
+ "email": "hello@blakeembrey.com",
26
+ "url": "http://blakeembrey.me"
27
+ },
28
+ "license": "MIT",
29
+ "bugs": {
30
+ "url": "https://github.com/blakeembrey/array-flatten/issues"
31
+ },
32
+ "homepage": "https://github.com/blakeembrey/array-flatten",
33
+ "devDependencies": {
34
+ "istanbul": "^0.3.13",
35
+ "mocha": "^2.2.4",
36
+ "pre-commit": "^1.0.7",
37
+ "standard": "^3.7.3"
38
+ }
39
+ }
node_modules/bcryptjs/.npmignore ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ node_modules/
2
+ npm-debug.log
3
+ debug.log
4
+ doco/
5
+ tests/bench.js
6
+ *.png
node_modules/bcryptjs/.travis.yml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: node_js
2
+
3
+ node_js:
4
+ - 0.10
5
+ - 0.12
6
+ - 4
7
+ - 6
8
+
9
+ before_script: npm -g install testjs
10
+
11
+ env:
12
+ - CXX=g++-4.8
13
+ addons:
14
+ apt:
15
+ sources:
16
+ - ubuntu-toolchain-r-test
17
+ packages:
18
+ - g++-4.8
node_modules/bcryptjs/.vscode/settings.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "vsicons.presets.angular": false
3
+ }
node_modules/bcryptjs/LICENSE ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ bcrypt.js
2
+ ---------
3
+ Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
4
+ Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
5
+ Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
6
+
7
+ Redistribution and use in source and binary forms, with or without
8
+ modification, are permitted provided that the following conditions
9
+ are met:
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+ 2. Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+ 3. The name of the author may not be used to endorse or promote products
16
+ derived from this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+
29
+ isaac.js
30
+ --------
31
+ Copyright (c) 2012 Yves-Marie K. Rinquin
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining
34
+ a copy of this software and associated documentation files (the
35
+ "Software"), to deal in the Software without restriction, including
36
+ without limitation the rights to use, copy, modify, merge, publish,
37
+ distribute, sublicense, and/or sell copies of the Software, and to
38
+ permit persons to whom the Software is furnished to do so, subject to
39
+ the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be
42
+ included in all copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
45
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
47
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
48
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
49
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
50
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
node_modules/bcryptjs/README.md ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ bcrypt.js
2
+ =========
3
+ Optimized bcrypt in JavaScript with zero dependencies. Compatible to the C++ [bcrypt](https://npmjs.org/package/bcrypt)
4
+ binding on node.js and also working in the browser.
5
+
6
+ <a href="https://travis-ci.org/dcodeIO/bcrypt.js"><img alt="build static" src="https://travis-ci.org/dcodeIO/bcrypt.js.svg?branch=master" /></a> <a href="https://npmjs.org/package/bcryptjs"><img src="https://img.shields.io/npm/v/bcryptjs.svg" alt=""></a> <a href="https://npmjs.org/package/bcryptjs"><img src="https://img.shields.io/npm/dm/bcryptjs.svg" alt=""></a> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=dcode%40dcode.io&item_name=Open%20Source%20Software%20Donation&item_number=dcodeIO%2Fbcrypt.js"><img alt="donate ❤" src="https://img.shields.io/badge/donate-❤-ff2244.svg"></a>
7
+
8
+
9
+ Security considerations
10
+ -----------------------
11
+ Besides incorporating a salt to protect against rainbow table attacks, bcrypt is an adaptive function: over time, the
12
+ iteration count can be increased to make it slower, so it remains resistant to brute-force search attacks even with
13
+ increasing computation power. ([see](http://en.wikipedia.org/wiki/Bcrypt))
14
+
15
+ While bcrypt.js is compatible to the C++ bcrypt binding, it is written in pure JavaScript and thus slower ([about 30%](https://github.com/dcodeIO/bcrypt.js/wiki/Benchmark)), effectively reducing the number of iterations that can be
16
+ processed in an equal time span.
17
+
18
+ The maximum input length is 72 bytes (note that UTF8 encoded characters use up to 4 bytes) and the length of generated
19
+ hashes is 60 characters.
20
+
21
+ Usage
22
+ -----
23
+ The library is compatible with CommonJS and AMD loaders and is exposed globally as `dcodeIO.bcrypt` if neither is
24
+ available.
25
+
26
+ ### node.js
27
+
28
+ On node.js, the inbuilt [crypto module](http://nodejs.org/api/crypto.html)'s randomBytes interface is used to obtain
29
+ secure random numbers.
30
+
31
+ `npm install bcryptjs`
32
+
33
+ ```js
34
+ var bcrypt = require('bcryptjs');
35
+ ...
36
+ ```
37
+
38
+ ### Browser
39
+
40
+ In the browser, bcrypt.js relies on [Web Crypto API](http://www.w3.org/TR/WebCryptoAPI)'s getRandomValues
41
+ interface to obtain secure random numbers. If no cryptographically secure source of randomness is available, you may
42
+ specify one through [bcrypt.setRandomFallback](https://github.com/dcodeIO/bcrypt.js#setrandomfallbackrandom).
43
+
44
+ ```js
45
+ var bcrypt = dcodeIO.bcrypt;
46
+ ...
47
+ ```
48
+
49
+ or
50
+
51
+ ```js
52
+ require.config({
53
+ paths: { "bcrypt": "/path/to/bcrypt.js" }
54
+ });
55
+ require(["bcrypt"], function(bcrypt) {
56
+ ...
57
+ });
58
+ ```
59
+
60
+ Usage - Sync
61
+ ------------
62
+ To hash a password:
63
+
64
+ ```javascript
65
+ var bcrypt = require('bcryptjs');
66
+ var salt = bcrypt.genSaltSync(10);
67
+ var hash = bcrypt.hashSync("B4c0/\/", salt);
68
+ // Store hash in your password DB.
69
+ ```
70
+
71
+ To check a password:
72
+
73
+ ```javascript
74
+ // Load hash from your password DB.
75
+ bcrypt.compareSync("B4c0/\/", hash); // true
76
+ bcrypt.compareSync("not_bacon", hash); // false
77
+ ```
78
+
79
+ Auto-gen a salt and hash:
80
+
81
+ ```javascript
82
+ var hash = bcrypt.hashSync('bacon', 8);
83
+ ```
84
+
85
+ Usage - Async
86
+ -------------
87
+ To hash a password:
88
+
89
+ ```javascript
90
+ var bcrypt = require('bcryptjs');
91
+ bcrypt.genSalt(10, function(err, salt) {
92
+ bcrypt.hash("B4c0/\/", salt, function(err, hash) {
93
+ // Store hash in your password DB.
94
+ });
95
+ });
96
+ ```
97
+
98
+ To check a password:
99
+
100
+ ```javascript
101
+ // Load hash from your password DB.
102
+ bcrypt.compare("B4c0/\/", hash, function(err, res) {
103
+ // res === true
104
+ });
105
+ bcrypt.compare("not_bacon", hash, function(err, res) {
106
+ // res === false
107
+ });
108
+
109
+ // As of bcryptjs 2.4.0, compare returns a promise if callback is omitted:
110
+ bcrypt.compare("B4c0/\/", hash).then((res) => {
111
+ // res === true
112
+ });
113
+ ```
114
+
115
+ Auto-gen a salt and hash:
116
+
117
+ ```javascript
118
+ bcrypt.hash('bacon', 8, function(err, hash) {
119
+ });
120
+ ```
121
+
122
+ **Note:** Under the hood, asynchronisation splits a crypto operation into small chunks. After the completion of a chunk, the execution of the next chunk is placed on the back of [JS event loop queue](https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop), thus efficiently sharing the computational resources with the other operations in the queue.
123
+
124
+ API
125
+ ---
126
+ ### setRandomFallback(random)
127
+
128
+ Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
129
+ API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it is
130
+ seeded properly!
131
+
132
+ | Parameter | Type | Description
133
+ |-----------------|-----------------|---------------
134
+ | random | *function(number):!Array.&lt;number&gt;* | Function taking the number of bytes to generate as its sole argument, returning the corresponding array of cryptographically secure random byte values.
135
+ | **@see** | | http://nodejs.org/api/crypto.html
136
+ | **@see** | | http://www.w3.org/TR/WebCryptoAPI/
137
+
138
+ **Hint:** You might use [isaac.js](https://github.com/rubycon/isaac.js) as a CSPRNG but you still have to make sure to
139
+ seed it properly.
140
+
141
+ ### genSaltSync(rounds=, seed_length=)
142
+
143
+ Synchronously generates a salt.
144
+
145
+ | Parameter | Type | Description
146
+ |-----------------|-----------------|---------------
147
+ | rounds | *number* | Number of rounds to use, defaults to 10 if omitted
148
+ | seed_length | *number* | Not supported.
149
+ | **@returns** | *string* | Resulting salt
150
+ | **@throws** | *Error* | If a random fallback is required but not set
151
+
152
+ ### genSalt(rounds=, seed_length=, callback)
153
+
154
+ Asynchronously generates a salt.
155
+
156
+ | Parameter | Type | Description
157
+ |-----------------|-----------------|---------------
158
+ | rounds | *number &#124; function(Error, string=)* | Number of rounds to use, defaults to 10 if omitted
159
+ | seed_length | *number &#124; function(Error, string=)* | Not supported.
160
+ | callback | *function(Error, string=)* | Callback receiving the error, if any, and the resulting salt
161
+ | **@returns** | *Promise* | If `callback` has been omitted
162
+ | **@throws** | *Error* | If `callback` is present but not a function
163
+
164
+ ### hashSync(s, salt=)
165
+
166
+ Synchronously generates a hash for the given string.
167
+
168
+ | Parameter | Type | Description
169
+ |-----------------|-----------------|---------------
170
+ | s | *string* | String to hash
171
+ | salt | *number &#124; string* | Salt length to generate or salt to use, default to 10
172
+ | **@returns** | *string* | Resulting hash
173
+
174
+ ### hash(s, salt, callback, progressCallback=)
175
+
176
+ Asynchronously generates a hash for the given string.
177
+
178
+ | Parameter | Type | Description
179
+ |-----------------|-----------------|---------------
180
+ | s | *string* | String to hash
181
+ | salt | *number &#124; string* | Salt length to generate or salt to use
182
+ | callback | *function(Error, string=)* | Callback receiving the error, if any, and the resulting hash
183
+ | progressCallback | *function(number)* | Callback successively called with the percentage of rounds completed (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
184
+ | **@returns** | *Promise* | If `callback` has been omitted
185
+ | **@throws** | *Error* | If `callback` is present but not a function
186
+
187
+ ### compareSync(s, hash)
188
+
189
+ Synchronously tests a string against a hash.
190
+
191
+ | Parameter | Type | Description
192
+ |-----------------|-----------------|---------------
193
+ | s | *string* | String to compare
194
+ | hash | *string* | Hash to test against
195
+ | **@returns** | *boolean* | true if matching, otherwise false
196
+ | **@throws** | *Error* | If an argument is illegal
197
+
198
+ ### compare(s, hash, callback, progressCallback=)
199
+
200
+ Asynchronously compares the given data against the given hash.
201
+
202
+ | Parameter | Type | Description
203
+ |-----------------|-----------------|---------------
204
+ | s | *string* | Data to compare
205
+ | hash | *string* | Data to be compared to
206
+ | callback | *function(Error, boolean)* | Callback receiving the error, if any, otherwise the result
207
+ | progressCallback | *function(number)* | Callback successively called with the percentage of rounds completed (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
208
+ | **@returns** | *Promise* | If `callback` has been omitted
209
+ | **@throws** | *Error* | If `callback` is present but not a function
210
+
211
+ ### getRounds(hash)
212
+
213
+ Gets the number of rounds used to encrypt the specified hash.
214
+
215
+ | Parameter | Type | Description
216
+ |-----------------|-----------------|---------------
217
+ | hash | *string* | Hash to extract the used number of rounds from
218
+ | **@returns** | *number* | Number of rounds used
219
+ | **@throws** | *Error* | If `hash` is not a string
220
+
221
+ ### getSalt(hash)
222
+
223
+ Gets the salt portion from a hash. Does not validate the hash.
224
+
225
+ | Parameter | Type | Description
226
+ |-----------------|-----------------|---------------
227
+ | hash | *string* | Hash to extract the salt from
228
+ | **@returns** | *string* | Extracted salt part
229
+ | **@throws** | *Error* | If `hash` is not a string or otherwise invalid
230
+
231
+
232
+ Command line
233
+ ------------
234
+ `Usage: bcrypt <input> [salt]`
235
+
236
+ If the input has spaces inside, simply surround it with quotes.
237
+
238
+ Downloads
239
+ ---------
240
+ * [Distributions](https://github.com/dcodeIO/bcrypt.js/tree/master/dist)
241
+ * [ZIP-Archive](https://github.com/dcodeIO/bcrypt.js/archive/master.zip)
242
+ * [Tarball](https://github.com/dcodeIO/bcrypt.js/tarball/master)
243
+
244
+ Credits
245
+ -------
246
+ Based on work started by Shane Girish at [bcrypt-nodejs](https://github.com/shaneGirish/bcrypt-nodejs) (MIT-licensed),
247
+ which is itself based on [javascript-bcrypt](http://code.google.com/p/javascript-bcrypt/) (New BSD-licensed).
248
+
249
+ License
250
+ -------
251
+ New-BSD / MIT ([see](https://github.com/dcodeIO/bcrypt.js/blob/master/LICENSE))
node_modules/bcryptjs/bin/bcrypt ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env node
2
+
3
+ var path = require("path"),
4
+ bcrypt = require(path.join(__dirname, '..', 'index.js')),
5
+ pkg = require(path.join(__dirname, '..', 'package.json'));
6
+
7
+ if (process.argv.length < 3) {
8
+ process.stderr.write([ // No dependencies, so we do it from hand.
9
+ "",
10
+ " |_ _ _ _ |_",
11
+ " |_)(_| \\/|_)|_ v"+pkg['version']+" (c) "+pkg['author'],
12
+ " / | "
13
+ ].join('\n')+'\n\n'+" Usage: "+path.basename(process.argv[1])+" <input> [rounds|salt]\n");
14
+ process.exit(1);
15
+ } else {
16
+ var salt;
17
+ if (process.argv.length > 3) {
18
+ salt = process.argv[3];
19
+ var rounds = parseInt(salt, 10);
20
+ if (rounds == salt)
21
+ salt = bcrypt.genSaltSync(rounds);
22
+ } else
23
+ salt = bcrypt.genSaltSync();
24
+ process.stdout.write(bcrypt.hashSync(process.argv[2], salt)+"\n");
25
+ }
node_modules/bcryptjs/bower.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "bcryptjs",
3
+ "description": "Optimized bcrypt in plain JavaScript with zero dependencies.",
4
+ "version": "2.4.3",
5
+ "main": "dist/bcrypt.min.js",
6
+ "license": "New-BSD",
7
+ "homepage": "http://dcode.io/",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git://github.com/dcodeIO/bcrypt.js.git"
11
+ },
12
+ "keywords": ["bcrypt", "password", "auth", "authentication", "encryption", "crypt", "crypto"],
13
+ "dependencies": {},
14
+ "devDependencies": {},
15
+ "ignore": [
16
+ "**/.*",
17
+ "node_modules",
18
+ "bower_components",
19
+ "test",
20
+ "tests"
21
+ ]
22
+ }
node_modules/bcryptjs/dist/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Distributions
2
+ =============
3
+ bcrypt.js is available as the following distributions:
4
+
5
+ * **[bcrypt.js](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.js)**
6
+ contains the commented source code.
7
+
8
+ * **[bcrypt.min.js](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.min.js)**
9
+ has been compiled with Closure Compiler using advanced optimizations.
10
+
11
+ * **[bcrypt.min.map](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.min.map)**
12
+ contains the source map generated by Closure Compiler.
13
+
14
+ * **[bcrypt.min.js.gz](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.min.js.gz)**
15
+ has also been gzipped using `-9`.
node_modules/bcryptjs/dist/bcrypt.js ADDED
@@ -0,0 +1,1379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
3
+ Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
4
+ Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions
8
+ are met:
9
+ 1. Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+ 2. Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the distribution.
14
+ 3. The name of the author may not be used to endorse or promote products
15
+ derived from this software without specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ /**
30
+ * @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
31
+ * Released under the Apache License, Version 2.0
32
+ * see: https://github.com/dcodeIO/bcrypt.js for details
33
+ */
34
+ (function(global, factory) {
35
+
36
+ /* AMD */ if (typeof define === 'function' && define["amd"])
37
+ define([], factory);
38
+ /* CommonJS */ else if (typeof require === 'function' && typeof module === "object" && module && module["exports"])
39
+ module["exports"] = factory();
40
+ /* Global */ else
41
+ (global["dcodeIO"] = global["dcodeIO"] || {})["bcrypt"] = factory();
42
+
43
+ }(this, function() {
44
+ "use strict";
45
+
46
+ /**
47
+ * bcrypt namespace.
48
+ * @type {Object.<string,*>}
49
+ */
50
+ var bcrypt = {};
51
+
52
+ /**
53
+ * The random implementation to use as a fallback.
54
+ * @type {?function(number):!Array.<number>}
55
+ * @inner
56
+ */
57
+ var randomFallback = null;
58
+
59
+ /**
60
+ * Generates cryptographically secure random bytes.
61
+ * @function
62
+ * @param {number} len Bytes length
63
+ * @returns {!Array.<number>} Random bytes
64
+ * @throws {Error} If no random implementation is available
65
+ * @inner
66
+ */
67
+ function random(len) {
68
+ /* node */ if (typeof module !== 'undefined' && module && module['exports'])
69
+ try {
70
+ return require("crypto")['randomBytes'](len);
71
+ } catch (e) {}
72
+ /* WCA */ try {
73
+ var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));
74
+ return Array.prototype.slice.call(a);
75
+ } catch (e) {}
76
+ /* fallback */ if (!randomFallback)
77
+ throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
78
+ return randomFallback(len);
79
+ }
80
+
81
+ // Test if any secure randomness source is available
82
+ var randomAvailable = false;
83
+ try {
84
+ random(1);
85
+ randomAvailable = true;
86
+ } catch (e) {}
87
+
88
+ // Default fallback, if any
89
+ randomFallback = null;
90
+ /**
91
+ * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
92
+ * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it
93
+ * is seeded properly!
94
+ * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its
95
+ * sole argument, returning the corresponding array of cryptographically secure random byte values.
96
+ * @see http://nodejs.org/api/crypto.html
97
+ * @see http://www.w3.org/TR/WebCryptoAPI/
98
+ */
99
+ bcrypt.setRandomFallback = function(random) {
100
+ randomFallback = random;
101
+ };
102
+
103
+ /**
104
+ * Synchronously generates a salt.
105
+ * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted
106
+ * @param {number=} seed_length Not supported.
107
+ * @returns {string} Resulting salt
108
+ * @throws {Error} If a random fallback is required but not set
109
+ * @expose
110
+ */
111
+ bcrypt.genSaltSync = function(rounds, seed_length) {
112
+ rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;
113
+ if (typeof rounds !== 'number')
114
+ throw Error("Illegal arguments: "+(typeof rounds)+", "+(typeof seed_length));
115
+ if (rounds < 4)
116
+ rounds = 4;
117
+ else if (rounds > 31)
118
+ rounds = 31;
119
+ var salt = [];
120
+ salt.push("$2a$");
121
+ if (rounds < 10)
122
+ salt.push("0");
123
+ salt.push(rounds.toString());
124
+ salt.push('$');
125
+ salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw
126
+ return salt.join('');
127
+ };
128
+
129
+ /**
130
+ * Asynchronously generates a salt.
131
+ * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted
132
+ * @param {(number|function(Error, string=))=} seed_length Not supported.
133
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt
134
+ * @returns {!Promise} If `callback` has been omitted
135
+ * @throws {Error} If `callback` is present but not a function
136
+ * @expose
137
+ */
138
+ bcrypt.genSalt = function(rounds, seed_length, callback) {
139
+ if (typeof seed_length === 'function')
140
+ callback = seed_length,
141
+ seed_length = undefined; // Not supported.
142
+ if (typeof rounds === 'function')
143
+ callback = rounds,
144
+ rounds = undefined;
145
+ if (typeof rounds === 'undefined')
146
+ rounds = GENSALT_DEFAULT_LOG2_ROUNDS;
147
+ else if (typeof rounds !== 'number')
148
+ throw Error("illegal arguments: "+(typeof rounds));
149
+
150
+ function _async(callback) {
151
+ nextTick(function() { // Pretty thin, but salting is fast enough
152
+ try {
153
+ callback(null, bcrypt.genSaltSync(rounds));
154
+ } catch (err) {
155
+ callback(err);
156
+ }
157
+ });
158
+ }
159
+
160
+ if (callback) {
161
+ if (typeof callback !== 'function')
162
+ throw Error("Illegal callback: "+typeof(callback));
163
+ _async(callback);
164
+ } else
165
+ return new Promise(function(resolve, reject) {
166
+ _async(function(err, res) {
167
+ if (err) {
168
+ reject(err);
169
+ return;
170
+ }
171
+ resolve(res);
172
+ });
173
+ });
174
+ };
175
+
176
+ /**
177
+ * Synchronously generates a hash for the given string.
178
+ * @param {string} s String to hash
179
+ * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10
180
+ * @returns {string} Resulting hash
181
+ * @expose
182
+ */
183
+ bcrypt.hashSync = function(s, salt) {
184
+ if (typeof salt === 'undefined')
185
+ salt = GENSALT_DEFAULT_LOG2_ROUNDS;
186
+ if (typeof salt === 'number')
187
+ salt = bcrypt.genSaltSync(salt);
188
+ if (typeof s !== 'string' || typeof salt !== 'string')
189
+ throw Error("Illegal arguments: "+(typeof s)+', '+(typeof salt));
190
+ return _hash(s, salt);
191
+ };
192
+
193
+ /**
194
+ * Asynchronously generates a hash for the given string.
195
+ * @param {string} s String to hash
196
+ * @param {number|string} salt Salt length to generate or salt to use
197
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash
198
+ * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
199
+ * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
200
+ * @returns {!Promise} If `callback` has been omitted
201
+ * @throws {Error} If `callback` is present but not a function
202
+ * @expose
203
+ */
204
+ bcrypt.hash = function(s, salt, callback, progressCallback) {
205
+
206
+ function _async(callback) {
207
+ if (typeof s === 'string' && typeof salt === 'number')
208
+ bcrypt.genSalt(salt, function(err, salt) {
209
+ _hash(s, salt, callback, progressCallback);
210
+ });
211
+ else if (typeof s === 'string' && typeof salt === 'string')
212
+ _hash(s, salt, callback, progressCallback);
213
+ else
214
+ nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof salt))));
215
+ }
216
+
217
+ if (callback) {
218
+ if (typeof callback !== 'function')
219
+ throw Error("Illegal callback: "+typeof(callback));
220
+ _async(callback);
221
+ } else
222
+ return new Promise(function(resolve, reject) {
223
+ _async(function(err, res) {
224
+ if (err) {
225
+ reject(err);
226
+ return;
227
+ }
228
+ resolve(res);
229
+ });
230
+ });
231
+ };
232
+
233
+ /**
234
+ * Compares two strings of the same length in constant time.
235
+ * @param {string} known Must be of the correct length
236
+ * @param {string} unknown Must be the same length as `known`
237
+ * @returns {boolean}
238
+ * @inner
239
+ */
240
+ function safeStringCompare(known, unknown) {
241
+ var right = 0,
242
+ wrong = 0;
243
+ for (var i=0, k=known.length; i<k; ++i) {
244
+ if (known.charCodeAt(i) === unknown.charCodeAt(i))
245
+ ++right;
246
+ else
247
+ ++wrong;
248
+ }
249
+ // Prevent removal of unused variables (never true, actually)
250
+ if (right < 0)
251
+ return false;
252
+ return wrong === 0;
253
+ }
254
+
255
+ /**
256
+ * Synchronously tests a string against a hash.
257
+ * @param {string} s String to compare
258
+ * @param {string} hash Hash to test against
259
+ * @returns {boolean} true if matching, otherwise false
260
+ * @throws {Error} If an argument is illegal
261
+ * @expose
262
+ */
263
+ bcrypt.compareSync = function(s, hash) {
264
+ if (typeof s !== "string" || typeof hash !== "string")
265
+ throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash));
266
+ if (hash.length !== 60)
267
+ return false;
268
+ return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);
269
+ };
270
+
271
+ /**
272
+ * Asynchronously compares the given data against the given hash.
273
+ * @param {string} s Data to compare
274
+ * @param {string} hash Data to be compared to
275
+ * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result
276
+ * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
277
+ * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
278
+ * @returns {!Promise} If `callback` has been omitted
279
+ * @throws {Error} If `callback` is present but not a function
280
+ * @expose
281
+ */
282
+ bcrypt.compare = function(s, hash, callback, progressCallback) {
283
+
284
+ function _async(callback) {
285
+ if (typeof s !== "string" || typeof hash !== "string") {
286
+ nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof hash))));
287
+ return;
288
+ }
289
+ if (hash.length !== 60) {
290
+ nextTick(callback.bind(this, null, false));
291
+ return;
292
+ }
293
+ bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {
294
+ if (err)
295
+ callback(err);
296
+ else
297
+ callback(null, safeStringCompare(comp, hash));
298
+ }, progressCallback);
299
+ }
300
+
301
+ if (callback) {
302
+ if (typeof callback !== 'function')
303
+ throw Error("Illegal callback: "+typeof(callback));
304
+ _async(callback);
305
+ } else
306
+ return new Promise(function(resolve, reject) {
307
+ _async(function(err, res) {
308
+ if (err) {
309
+ reject(err);
310
+ return;
311
+ }
312
+ resolve(res);
313
+ });
314
+ });
315
+ };
316
+
317
+ /**
318
+ * Gets the number of rounds used to encrypt the specified hash.
319
+ * @param {string} hash Hash to extract the used number of rounds from
320
+ * @returns {number} Number of rounds used
321
+ * @throws {Error} If `hash` is not a string
322
+ * @expose
323
+ */
324
+ bcrypt.getRounds = function(hash) {
325
+ if (typeof hash !== "string")
326
+ throw Error("Illegal arguments: "+(typeof hash));
327
+ return parseInt(hash.split("$")[2], 10);
328
+ };
329
+
330
+ /**
331
+ * Gets the salt portion from a hash. Does not validate the hash.
332
+ * @param {string} hash Hash to extract the salt from
333
+ * @returns {string} Extracted salt part
334
+ * @throws {Error} If `hash` is not a string or otherwise invalid
335
+ * @expose
336
+ */
337
+ bcrypt.getSalt = function(hash) {
338
+ if (typeof hash !== 'string')
339
+ throw Error("Illegal arguments: "+(typeof hash));
340
+ if (hash.length !== 60)
341
+ throw Error("Illegal hash length: "+hash.length+" != 60");
342
+ return hash.substring(0, 29);
343
+ };
344
+
345
+ /**
346
+ * Continues with the callback on the next tick.
347
+ * @function
348
+ * @param {function(...[*])} callback Callback to execute
349
+ * @inner
350
+ */
351
+ var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'
352
+ ? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)
353
+ : setTimeout;
354
+
355
+ /**
356
+ * Converts a JavaScript string to UTF8 bytes.
357
+ * @param {string} str String
358
+ * @returns {!Array.<number>} UTF8 bytes
359
+ * @inner
360
+ */
361
+ function stringToBytes(str) {
362
+ var out = [],
363
+ i = 0;
364
+ utfx.encodeUTF16toUTF8(function() {
365
+ if (i >= str.length) return null;
366
+ return str.charCodeAt(i++);
367
+ }, function(b) {
368
+ out.push(b);
369
+ });
370
+ return out;
371
+ }
372
+
373
+ // A base64 implementation for the bcrypt algorithm. This is partly non-standard.
374
+
375
+ /**
376
+ * bcrypt's own non-standard base64 dictionary.
377
+ * @type {!Array.<string>}
378
+ * @const
379
+ * @inner
380
+ **/
381
+ var BASE64_CODE = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split('');
382
+
383
+ /**
384
+ * @type {!Array.<number>}
385
+ * @const
386
+ * @inner
387
+ **/
388
+ var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
389
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
390
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
391
+ 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,
392
+ -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
393
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,
394
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
395
+ 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];
396
+
397
+ /**
398
+ * @type {!function(...number):string}
399
+ * @inner
400
+ */
401
+ var stringFromCharCode = String.fromCharCode;
402
+
403
+ /**
404
+ * Encodes a byte array to base64 with up to len bytes of input.
405
+ * @param {!Array.<number>} b Byte array
406
+ * @param {number} len Maximum input length
407
+ * @returns {string}
408
+ * @inner
409
+ */
410
+ function base64_encode(b, len) {
411
+ var off = 0,
412
+ rs = [],
413
+ c1, c2;
414
+ if (len <= 0 || len > b.length)
415
+ throw Error("Illegal len: "+len);
416
+ while (off < len) {
417
+ c1 = b[off++] & 0xff;
418
+ rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);
419
+ c1 = (c1 & 0x03) << 4;
420
+ if (off >= len) {
421
+ rs.push(BASE64_CODE[c1 & 0x3f]);
422
+ break;
423
+ }
424
+ c2 = b[off++] & 0xff;
425
+ c1 |= (c2 >> 4) & 0x0f;
426
+ rs.push(BASE64_CODE[c1 & 0x3f]);
427
+ c1 = (c2 & 0x0f) << 2;
428
+ if (off >= len) {
429
+ rs.push(BASE64_CODE[c1 & 0x3f]);
430
+ break;
431
+ }
432
+ c2 = b[off++] & 0xff;
433
+ c1 |= (c2 >> 6) & 0x03;
434
+ rs.push(BASE64_CODE[c1 & 0x3f]);
435
+ rs.push(BASE64_CODE[c2 & 0x3f]);
436
+ }
437
+ return rs.join('');
438
+ }
439
+
440
+ /**
441
+ * Decodes a base64 encoded string to up to len bytes of output.
442
+ * @param {string} s String to decode
443
+ * @param {number} len Maximum output length
444
+ * @returns {!Array.<number>}
445
+ * @inner
446
+ */
447
+ function base64_decode(s, len) {
448
+ var off = 0,
449
+ slen = s.length,
450
+ olen = 0,
451
+ rs = [],
452
+ c1, c2, c3, c4, o, code;
453
+ if (len <= 0)
454
+ throw Error("Illegal len: "+len);
455
+ while (off < slen - 1 && olen < len) {
456
+ code = s.charCodeAt(off++);
457
+ c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
458
+ code = s.charCodeAt(off++);
459
+ c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
460
+ if (c1 == -1 || c2 == -1)
461
+ break;
462
+ o = (c1 << 2) >>> 0;
463
+ o |= (c2 & 0x30) >> 4;
464
+ rs.push(stringFromCharCode(o));
465
+ if (++olen >= len || off >= slen)
466
+ break;
467
+ code = s.charCodeAt(off++);
468
+ c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
469
+ if (c3 == -1)
470
+ break;
471
+ o = ((c2 & 0x0f) << 4) >>> 0;
472
+ o |= (c3 & 0x3c) >> 2;
473
+ rs.push(stringFromCharCode(o));
474
+ if (++olen >= len || off >= slen)
475
+ break;
476
+ code = s.charCodeAt(off++);
477
+ c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
478
+ o = ((c3 & 0x03) << 6) >>> 0;
479
+ o |= c4;
480
+ rs.push(stringFromCharCode(o));
481
+ ++olen;
482
+ }
483
+ var res = [];
484
+ for (off = 0; off<olen; off++)
485
+ res.push(rs[off].charCodeAt(0));
486
+ return res;
487
+ }
488
+
489
+ /**
490
+ * utfx-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>
491
+ * Released under the Apache License, Version 2.0
492
+ * see: https://github.com/dcodeIO/utfx for details
493
+ */
494
+ var utfx = function() {
495
+ "use strict";
496
+
497
+ /**
498
+ * utfx namespace.
499
+ * @inner
500
+ * @type {!Object.<string,*>}
501
+ */
502
+ var utfx = {};
503
+
504
+ /**
505
+ * Maximum valid code point.
506
+ * @type {number}
507
+ * @const
508
+ */
509
+ utfx.MAX_CODEPOINT = 0x10FFFF;
510
+
511
+ /**
512
+ * Encodes UTF8 code points to UTF8 bytes.
513
+ * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
514
+ * respectively `null` if there are no more code points left or a single numeric code point.
515
+ * @param {!function(number)} dst Bytes destination as a function successively called with the next byte
516
+ */
517
+ utfx.encodeUTF8 = function(src, dst) {
518
+ var cp = null;
519
+ if (typeof src === 'number')
520
+ cp = src,
521
+ src = function() { return null; };
522
+ while (cp !== null || (cp = src()) !== null) {
523
+ if (cp < 0x80)
524
+ dst(cp&0x7F);
525
+ else if (cp < 0x800)
526
+ dst(((cp>>6)&0x1F)|0xC0),
527
+ dst((cp&0x3F)|0x80);
528
+ else if (cp < 0x10000)
529
+ dst(((cp>>12)&0x0F)|0xE0),
530
+ dst(((cp>>6)&0x3F)|0x80),
531
+ dst((cp&0x3F)|0x80);
532
+ else
533
+ dst(((cp>>18)&0x07)|0xF0),
534
+ dst(((cp>>12)&0x3F)|0x80),
535
+ dst(((cp>>6)&0x3F)|0x80),
536
+ dst((cp&0x3F)|0x80);
537
+ cp = null;
538
+ }
539
+ };
540
+
541
+ /**
542
+ * Decodes UTF8 bytes to UTF8 code points.
543
+ * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
544
+ * are no more bytes left.
545
+ * @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.
546
+ * @throws {RangeError} If a starting byte is invalid in UTF8
547
+ * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the
548
+ * remaining bytes.
549
+ */
550
+ utfx.decodeUTF8 = function(src, dst) {
551
+ var a, b, c, d, fail = function(b) {
552
+ b = b.slice(0, b.indexOf(null));
553
+ var err = Error(b.toString());
554
+ err.name = "TruncatedError";
555
+ err['bytes'] = b;
556
+ throw err;
557
+ };
558
+ while ((a = src()) !== null) {
559
+ if ((a&0x80) === 0)
560
+ dst(a);
561
+ else if ((a&0xE0) === 0xC0)
562
+ ((b = src()) === null) && fail([a, b]),
563
+ dst(((a&0x1F)<<6) | (b&0x3F));
564
+ else if ((a&0xF0) === 0xE0)
565
+ ((b=src()) === null || (c=src()) === null) && fail([a, b, c]),
566
+ dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));
567
+ else if ((a&0xF8) === 0xF0)
568
+ ((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),
569
+ dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));
570
+ else throw RangeError("Illegal starting byte: "+a);
571
+ }
572
+ };
573
+
574
+ /**
575
+ * Converts UTF16 characters to UTF8 code points.
576
+ * @param {!function():number|null} src Characters source as a function returning the next char code respectively
577
+ * `null` if there are no more characters left.
578
+ * @param {!function(number)} dst Code points destination as a function successively called with each converted code
579
+ * point.
580
+ */
581
+ utfx.UTF16toUTF8 = function(src, dst) {
582
+ var c1, c2 = null;
583
+ while (true) {
584
+ if ((c1 = c2 !== null ? c2 : src()) === null)
585
+ break;
586
+ if (c1 >= 0xD800 && c1 <= 0xDFFF) {
587
+ if ((c2 = src()) !== null) {
588
+ if (c2 >= 0xDC00 && c2 <= 0xDFFF) {
589
+ dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);
590
+ c2 = null; continue;
591
+ }
592
+ }
593
+ }
594
+ dst(c1);
595
+ }
596
+ if (c2 !== null) dst(c2);
597
+ };
598
+
599
+ /**
600
+ * Converts UTF8 code points to UTF16 characters.
601
+ * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
602
+ * respectively `null` if there are no more code points left or a single numeric code point.
603
+ * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.
604
+ * @throws {RangeError} If a code point is out of range
605
+ */
606
+ utfx.UTF8toUTF16 = function(src, dst) {
607
+ var cp = null;
608
+ if (typeof src === 'number')
609
+ cp = src, src = function() { return null; };
610
+ while (cp !== null || (cp = src()) !== null) {
611
+ if (cp <= 0xFFFF)
612
+ dst(cp);
613
+ else
614
+ cp -= 0x10000,
615
+ dst((cp>>10)+0xD800),
616
+ dst((cp%0x400)+0xDC00);
617
+ cp = null;
618
+ }
619
+ };
620
+
621
+ /**
622
+ * Converts and encodes UTF16 characters to UTF8 bytes.
623
+ * @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`
624
+ * if there are no more characters left.
625
+ * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.
626
+ */
627
+ utfx.encodeUTF16toUTF8 = function(src, dst) {
628
+ utfx.UTF16toUTF8(src, function(cp) {
629
+ utfx.encodeUTF8(cp, dst);
630
+ });
631
+ };
632
+
633
+ /**
634
+ * Decodes and converts UTF8 bytes to UTF16 characters.
635
+ * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
636
+ * are no more bytes left.
637
+ * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.
638
+ * @throws {RangeError} If a starting byte is invalid in UTF8
639
+ * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.
640
+ */
641
+ utfx.decodeUTF8toUTF16 = function(src, dst) {
642
+ utfx.decodeUTF8(src, function(cp) {
643
+ utfx.UTF8toUTF16(cp, dst);
644
+ });
645
+ };
646
+
647
+ /**
648
+ * Calculates the byte length of an UTF8 code point.
649
+ * @param {number} cp UTF8 code point
650
+ * @returns {number} Byte length
651
+ */
652
+ utfx.calculateCodePoint = function(cp) {
653
+ return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;
654
+ };
655
+
656
+ /**
657
+ * Calculates the number of UTF8 bytes required to store UTF8 code points.
658
+ * @param {(!function():number|null)} src Code points source as a function returning the next code point respectively
659
+ * `null` if there are no more code points left.
660
+ * @returns {number} The number of UTF8 bytes required
661
+ */
662
+ utfx.calculateUTF8 = function(src) {
663
+ var cp, l=0;
664
+ while ((cp = src()) !== null)
665
+ l += utfx.calculateCodePoint(cp);
666
+ return l;
667
+ };
668
+
669
+ /**
670
+ * Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.
671
+ * @param {(!function():number|null)} src Characters source as a function returning the next char code respectively
672
+ * `null` if there are no more characters left.
673
+ * @returns {!Array.<number>} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.
674
+ */
675
+ utfx.calculateUTF16asUTF8 = function(src) {
676
+ var n=0, l=0;
677
+ utfx.UTF16toUTF8(src, function(cp) {
678
+ ++n; l += utfx.calculateCodePoint(cp);
679
+ });
680
+ return [n,l];
681
+ };
682
+
683
+ return utfx;
684
+ }();
685
+
686
+ Date.now = Date.now || function() { return +new Date; };
687
+
688
+ /**
689
+ * @type {number}
690
+ * @const
691
+ * @inner
692
+ */
693
+ var BCRYPT_SALT_LEN = 16;
694
+
695
+ /**
696
+ * @type {number}
697
+ * @const
698
+ * @inner
699
+ */
700
+ var GENSALT_DEFAULT_LOG2_ROUNDS = 10;
701
+
702
+ /**
703
+ * @type {number}
704
+ * @const
705
+ * @inner
706
+ */
707
+ var BLOWFISH_NUM_ROUNDS = 16;
708
+
709
+ /**
710
+ * @type {number}
711
+ * @const
712
+ * @inner
713
+ */
714
+ var MAX_EXECUTION_TIME = 100;
715
+
716
+ /**
717
+ * @type {Array.<number>}
718
+ * @const
719
+ * @inner
720
+ */
721
+ var P_ORIG = [
722
+ 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,
723
+ 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,
724
+ 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,
725
+ 0xb5470917, 0x9216d5d9, 0x8979fb1b
726
+ ];
727
+
728
+ /**
729
+ * @type {Array.<number>}
730
+ * @const
731
+ * @inner
732
+ */
733
+ var S_ORIG = [
734
+ 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,
735
+ 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,
736
+ 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,
737
+ 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
738
+ 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,
739
+ 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
740
+ 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,
741
+ 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
742
+ 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,
743
+ 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,
744
+ 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,
745
+ 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
746
+ 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,
747
+ 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,
748
+ 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,
749
+ 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
750
+ 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,
751
+ 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
752
+ 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,
753
+ 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
754
+ 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,
755
+ 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,
756
+ 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,
757
+ 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
758
+ 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,
759
+ 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,
760
+ 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,
761
+ 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
762
+ 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,
763
+ 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
764
+ 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,
765
+ 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
766
+ 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,
767
+ 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,
768
+ 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,
769
+ 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
770
+ 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,
771
+ 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,
772
+ 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,
773
+ 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
774
+ 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,
775
+ 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
776
+ 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,
777
+ 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
778
+ 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,
779
+ 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,
780
+ 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,
781
+ 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
782
+ 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,
783
+ 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,
784
+ 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,
785
+ 0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
786
+ 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,
787
+ 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,
788
+ 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,
789
+ 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
790
+ 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,
791
+ 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,
792
+ 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,
793
+ 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
794
+ 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,
795
+ 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
796
+ 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,
797
+ 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
798
+ 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,
799
+ 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,
800
+ 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,
801
+ 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
802
+ 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,
803
+ 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,
804
+ 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,
805
+ 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
806
+ 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,
807
+ 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
808
+ 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,
809
+ 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
810
+ 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,
811
+ 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,
812
+ 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,
813
+ 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
814
+ 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,
815
+ 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,
816
+ 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,
817
+ 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
818
+ 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,
819
+ 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
820
+ 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,
821
+ 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
822
+ 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,
823
+ 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,
824
+ 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,
825
+ 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
826
+ 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,
827
+ 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,
828
+ 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,
829
+ 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
830
+ 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,
831
+ 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
832
+ 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,
833
+ 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
834
+ 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,
835
+ 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,
836
+ 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,
837
+ 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
838
+ 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,
839
+ 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
840
+ 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,
841
+ 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
842
+ 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,
843
+ 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,
844
+ 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,
845
+ 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
846
+ 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,
847
+ 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,
848
+ 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,
849
+ 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
850
+ 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,
851
+ 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
852
+ 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,
853
+ 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
854
+ 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,
855
+ 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,
856
+ 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,
857
+ 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
858
+ 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,
859
+ 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,
860
+ 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,
861
+ 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
862
+ 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,
863
+ 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
864
+ 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,
865
+ 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
866
+ 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,
867
+ 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,
868
+ 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,
869
+ 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
870
+ 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,
871
+ 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,
872
+ 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,
873
+ 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
874
+ 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,
875
+ 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
876
+ 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,
877
+ 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
878
+ 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,
879
+ 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,
880
+ 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,
881
+ 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
882
+ 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,
883
+ 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,
884
+ 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,
885
+ 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
886
+ 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,
887
+ 0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,
888
+ 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,
889
+ 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
890
+ 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,
891
+ 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,
892
+ 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,
893
+ 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
894
+ 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,
895
+ 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
896
+ 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,
897
+ 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
898
+ 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,
899
+ 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,
900
+ 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,
901
+ 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
902
+ 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,
903
+ 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,
904
+ 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,
905
+ 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
906
+ 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,
907
+ 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
908
+ 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,
909
+ 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
910
+ 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,
911
+ 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,
912
+ 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,
913
+ 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
914
+ 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,
915
+ 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,
916
+ 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,
917
+ 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
918
+ 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,
919
+ 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
920
+ 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,
921
+ 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
922
+ 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,
923
+ 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,
924
+ 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,
925
+ 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
926
+ 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,
927
+ 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,
928
+ 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,
929
+ 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
930
+ 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,
931
+ 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
932
+ 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,
933
+ 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
934
+ 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,
935
+ 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,
936
+ 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,
937
+ 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
938
+ 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
939
+ ];
940
+
941
+ /**
942
+ * @type {Array.<number>}
943
+ * @const
944
+ * @inner
945
+ */
946
+ var C_ORIG = [
947
+ 0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,
948
+ 0x6f756274
949
+ ];
950
+
951
+ /**
952
+ * @param {Array.<number>} lr
953
+ * @param {number} off
954
+ * @param {Array.<number>} P
955
+ * @param {Array.<number>} S
956
+ * @returns {Array.<number>}
957
+ * @inner
958
+ */
959
+ function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
960
+ var n,
961
+ l = lr[off],
962
+ r = lr[off + 1];
963
+
964
+ l ^= P[0];
965
+
966
+ /*
967
+ for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
968
+ // Feistel substitution on left word
969
+ n = S[l >>> 24],
970
+ n += S[0x100 | ((l >> 16) & 0xff)],
971
+ n ^= S[0x200 | ((l >> 8) & 0xff)],
972
+ n += S[0x300 | (l & 0xff)],
973
+ r ^= n ^ P[++i],
974
+ // Feistel substitution on right word
975
+ n = S[r >>> 24],
976
+ n += S[0x100 | ((r >> 16) & 0xff)],
977
+ n ^= S[0x200 | ((r >> 8) & 0xff)],
978
+ n += S[0x300 | (r & 0xff)],
979
+ l ^= n ^ P[++i];
980
+ */
981
+
982
+ //The following is an unrolled version of the above loop.
983
+ //Iteration 0
984
+ n = S[l >>> 24];
985
+ n += S[0x100 | ((l >> 16) & 0xff)];
986
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
987
+ n += S[0x300 | (l & 0xff)];
988
+ r ^= n ^ P[1];
989
+ n = S[r >>> 24];
990
+ n += S[0x100 | ((r >> 16) & 0xff)];
991
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
992
+ n += S[0x300 | (r & 0xff)];
993
+ l ^= n ^ P[2];
994
+ //Iteration 1
995
+ n = S[l >>> 24];
996
+ n += S[0x100 | ((l >> 16) & 0xff)];
997
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
998
+ n += S[0x300 | (l & 0xff)];
999
+ r ^= n ^ P[3];
1000
+ n = S[r >>> 24];
1001
+ n += S[0x100 | ((r >> 16) & 0xff)];
1002
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1003
+ n += S[0x300 | (r & 0xff)];
1004
+ l ^= n ^ P[4];
1005
+ //Iteration 2
1006
+ n = S[l >>> 24];
1007
+ n += S[0x100 | ((l >> 16) & 0xff)];
1008
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
1009
+ n += S[0x300 | (l & 0xff)];
1010
+ r ^= n ^ P[5];
1011
+ n = S[r >>> 24];
1012
+ n += S[0x100 | ((r >> 16) & 0xff)];
1013
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1014
+ n += S[0x300 | (r & 0xff)];
1015
+ l ^= n ^ P[6];
1016
+ //Iteration 3
1017
+ n = S[l >>> 24];
1018
+ n += S[0x100 | ((l >> 16) & 0xff)];
1019
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
1020
+ n += S[0x300 | (l & 0xff)];
1021
+ r ^= n ^ P[7];
1022
+ n = S[r >>> 24];
1023
+ n += S[0x100 | ((r >> 16) & 0xff)];
1024
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1025
+ n += S[0x300 | (r & 0xff)];
1026
+ l ^= n ^ P[8];
1027
+ //Iteration 4
1028
+ n = S[l >>> 24];
1029
+ n += S[0x100 | ((l >> 16) & 0xff)];
1030
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
1031
+ n += S[0x300 | (l & 0xff)];
1032
+ r ^= n ^ P[9];
1033
+ n = S[r >>> 24];
1034
+ n += S[0x100 | ((r >> 16) & 0xff)];
1035
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1036
+ n += S[0x300 | (r & 0xff)];
1037
+ l ^= n ^ P[10];
1038
+ //Iteration 5
1039
+ n = S[l >>> 24];
1040
+ n += S[0x100 | ((l >> 16) & 0xff)];
1041
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
1042
+ n += S[0x300 | (l & 0xff)];
1043
+ r ^= n ^ P[11];
1044
+ n = S[r >>> 24];
1045
+ n += S[0x100 | ((r >> 16) & 0xff)];
1046
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1047
+ n += S[0x300 | (r & 0xff)];
1048
+ l ^= n ^ P[12];
1049
+ //Iteration 6
1050
+ n = S[l >>> 24];
1051
+ n += S[0x100 | ((l >> 16) & 0xff)];
1052
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
1053
+ n += S[0x300 | (l & 0xff)];
1054
+ r ^= n ^ P[13];
1055
+ n = S[r >>> 24];
1056
+ n += S[0x100 | ((r >> 16) & 0xff)];
1057
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1058
+ n += S[0x300 | (r & 0xff)];
1059
+ l ^= n ^ P[14];
1060
+ //Iteration 7
1061
+ n = S[l >>> 24];
1062
+ n += S[0x100 | ((l >> 16) & 0xff)];
1063
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
1064
+ n += S[0x300 | (l & 0xff)];
1065
+ r ^= n ^ P[15];
1066
+ n = S[r >>> 24];
1067
+ n += S[0x100 | ((r >> 16) & 0xff)];
1068
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
1069
+ n += S[0x300 | (r & 0xff)];
1070
+ l ^= n ^ P[16];
1071
+
1072
+ lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];
1073
+ lr[off + 1] = l;
1074
+ return lr;
1075
+ }
1076
+
1077
+ /**
1078
+ * @param {Array.<number>} data
1079
+ * @param {number} offp
1080
+ * @returns {{key: number, offp: number}}
1081
+ * @inner
1082
+ */
1083
+ function _streamtoword(data, offp) {
1084
+ for (var i = 0, word = 0; i < 4; ++i)
1085
+ word = (word << 8) | (data[offp] & 0xff),
1086
+ offp = (offp + 1) % data.length;
1087
+ return { key: word, offp: offp };
1088
+ }
1089
+
1090
+ /**
1091
+ * @param {Array.<number>} key
1092
+ * @param {Array.<number>} P
1093
+ * @param {Array.<number>} S
1094
+ * @inner
1095
+ */
1096
+ function _key(key, P, S) {
1097
+ var offset = 0,
1098
+ lr = [0, 0],
1099
+ plen = P.length,
1100
+ slen = S.length,
1101
+ sw;
1102
+ for (var i = 0; i < plen; i++)
1103
+ sw = _streamtoword(key, offset),
1104
+ offset = sw.offp,
1105
+ P[i] = P[i] ^ sw.key;
1106
+ for (i = 0; i < plen; i += 2)
1107
+ lr = _encipher(lr, 0, P, S),
1108
+ P[i] = lr[0],
1109
+ P[i + 1] = lr[1];
1110
+ for (i = 0; i < slen; i += 2)
1111
+ lr = _encipher(lr, 0, P, S),
1112
+ S[i] = lr[0],
1113
+ S[i + 1] = lr[1];
1114
+ }
1115
+
1116
+ /**
1117
+ * Expensive key schedule Blowfish.
1118
+ * @param {Array.<number>} data
1119
+ * @param {Array.<number>} key
1120
+ * @param {Array.<number>} P
1121
+ * @param {Array.<number>} S
1122
+ * @inner
1123
+ */
1124
+ function _ekskey(data, key, P, S) {
1125
+ var offp = 0,
1126
+ lr = [0, 0],
1127
+ plen = P.length,
1128
+ slen = S.length,
1129
+ sw;
1130
+ for (var i = 0; i < plen; i++)
1131
+ sw = _streamtoword(key, offp),
1132
+ offp = sw.offp,
1133
+ P[i] = P[i] ^ sw.key;
1134
+ offp = 0;
1135
+ for (i = 0; i < plen; i += 2)
1136
+ sw = _streamtoword(data, offp),
1137
+ offp = sw.offp,
1138
+ lr[0] ^= sw.key,
1139
+ sw = _streamtoword(data, offp),
1140
+ offp = sw.offp,
1141
+ lr[1] ^= sw.key,
1142
+ lr = _encipher(lr, 0, P, S),
1143
+ P[i] = lr[0],
1144
+ P[i + 1] = lr[1];
1145
+ for (i = 0; i < slen; i += 2)
1146
+ sw = _streamtoword(data, offp),
1147
+ offp = sw.offp,
1148
+ lr[0] ^= sw.key,
1149
+ sw = _streamtoword(data, offp),
1150
+ offp = sw.offp,
1151
+ lr[1] ^= sw.key,
1152
+ lr = _encipher(lr, 0, P, S),
1153
+ S[i] = lr[0],
1154
+ S[i + 1] = lr[1];
1155
+ }
1156
+
1157
+ /**
1158
+ * Internaly crypts a string.
1159
+ * @param {Array.<number>} b Bytes to crypt
1160
+ * @param {Array.<number>} salt Salt bytes to use
1161
+ * @param {number} rounds Number of rounds
1162
+ * @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If
1163
+ * omitted, the operation will be performed synchronously.
1164
+ * @param {function(number)=} progressCallback Callback called with the current progress
1165
+ * @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`
1166
+ * @inner
1167
+ */
1168
+ function _crypt(b, salt, rounds, callback, progressCallback) {
1169
+ var cdata = C_ORIG.slice(),
1170
+ clen = cdata.length,
1171
+ err;
1172
+
1173
+ // Validate
1174
+ if (rounds < 4 || rounds > 31) {
1175
+ err = Error("Illegal number of rounds (4-31): "+rounds);
1176
+ if (callback) {
1177
+ nextTick(callback.bind(this, err));
1178
+ return;
1179
+ } else
1180
+ throw err;
1181
+ }
1182
+ if (salt.length !== BCRYPT_SALT_LEN) {
1183
+ err =Error("Illegal salt length: "+salt.length+" != "+BCRYPT_SALT_LEN);
1184
+ if (callback) {
1185
+ nextTick(callback.bind(this, err));
1186
+ return;
1187
+ } else
1188
+ throw err;
1189
+ }
1190
+ rounds = (1 << rounds) >>> 0;
1191
+
1192
+ var P, S, i = 0, j;
1193
+
1194
+ //Use typed arrays when available - huge speedup!
1195
+ if (Int32Array) {
1196
+ P = new Int32Array(P_ORIG);
1197
+ S = new Int32Array(S_ORIG);
1198
+ } else {
1199
+ P = P_ORIG.slice();
1200
+ S = S_ORIG.slice();
1201
+ }
1202
+
1203
+ _ekskey(salt, b, P, S);
1204
+
1205
+ /**
1206
+ * Calcualtes the next round.
1207
+ * @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`
1208
+ * @inner
1209
+ */
1210
+ function next() {
1211
+ if (progressCallback)
1212
+ progressCallback(i / rounds);
1213
+ if (i < rounds) {
1214
+ var start = Date.now();
1215
+ for (; i < rounds;) {
1216
+ i = i + 1;
1217
+ _key(b, P, S);
1218
+ _key(salt, P, S);
1219
+ if (Date.now() - start > MAX_EXECUTION_TIME)
1220
+ break;
1221
+ }
1222
+ } else {
1223
+ for (i = 0; i < 64; i++)
1224
+ for (j = 0; j < (clen >> 1); j++)
1225
+ _encipher(cdata, j << 1, P, S);
1226
+ var ret = [];
1227
+ for (i = 0; i < clen; i++)
1228
+ ret.push(((cdata[i] >> 24) & 0xff) >>> 0),
1229
+ ret.push(((cdata[i] >> 16) & 0xff) >>> 0),
1230
+ ret.push(((cdata[i] >> 8) & 0xff) >>> 0),
1231
+ ret.push((cdata[i] & 0xff) >>> 0);
1232
+ if (callback) {
1233
+ callback(null, ret);
1234
+ return;
1235
+ } else
1236
+ return ret;
1237
+ }
1238
+ if (callback)
1239
+ nextTick(next);
1240
+ }
1241
+
1242
+ // Async
1243
+ if (typeof callback !== 'undefined') {
1244
+ next();
1245
+
1246
+ // Sync
1247
+ } else {
1248
+ var res;
1249
+ while (true)
1250
+ if (typeof(res = next()) !== 'undefined')
1251
+ return res || [];
1252
+ }
1253
+ }
1254
+
1255
+ /**
1256
+ * Internally hashes a string.
1257
+ * @param {string} s String to hash
1258
+ * @param {?string} salt Salt to use, actually never null
1259
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,
1260
+ * hashing is perormed synchronously.
1261
+ * @param {function(number)=} progressCallback Callback called with the current progress
1262
+ * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`
1263
+ * @inner
1264
+ */
1265
+ function _hash(s, salt, callback, progressCallback) {
1266
+ var err;
1267
+ if (typeof s !== 'string' || typeof salt !== 'string') {
1268
+ err = Error("Invalid string / salt: Not a string");
1269
+ if (callback) {
1270
+ nextTick(callback.bind(this, err));
1271
+ return;
1272
+ }
1273
+ else
1274
+ throw err;
1275
+ }
1276
+
1277
+ // Validate the salt
1278
+ var minor, offset;
1279
+ if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {
1280
+ err = Error("Invalid salt version: "+salt.substring(0,2));
1281
+ if (callback) {
1282
+ nextTick(callback.bind(this, err));
1283
+ return;
1284
+ }
1285
+ else
1286
+ throw err;
1287
+ }
1288
+ if (salt.charAt(2) === '$')
1289
+ minor = String.fromCharCode(0),
1290
+ offset = 3;
1291
+ else {
1292
+ minor = salt.charAt(2);
1293
+ if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {
1294
+ err = Error("Invalid salt revision: "+salt.substring(2,4));
1295
+ if (callback) {
1296
+ nextTick(callback.bind(this, err));
1297
+ return;
1298
+ } else
1299
+ throw err;
1300
+ }
1301
+ offset = 4;
1302
+ }
1303
+
1304
+ // Extract number of rounds
1305
+ if (salt.charAt(offset + 2) > '$') {
1306
+ err = Error("Missing salt rounds");
1307
+ if (callback) {
1308
+ nextTick(callback.bind(this, err));
1309
+ return;
1310
+ } else
1311
+ throw err;
1312
+ }
1313
+ var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,
1314
+ r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),
1315
+ rounds = r1 + r2,
1316
+ real_salt = salt.substring(offset + 3, offset + 25);
1317
+ s += minor >= 'a' ? "\x00" : "";
1318
+
1319
+ var passwordb = stringToBytes(s),
1320
+ saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);
1321
+
1322
+ /**
1323
+ * Finishes hashing.
1324
+ * @param {Array.<number>} bytes Byte array
1325
+ * @returns {string}
1326
+ * @inner
1327
+ */
1328
+ function finish(bytes) {
1329
+ var res = [];
1330
+ res.push("$2");
1331
+ if (minor >= 'a')
1332
+ res.push(minor);
1333
+ res.push("$");
1334
+ if (rounds < 10)
1335
+ res.push("0");
1336
+ res.push(rounds.toString());
1337
+ res.push("$");
1338
+ res.push(base64_encode(saltb, saltb.length));
1339
+ res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));
1340
+ return res.join('');
1341
+ }
1342
+
1343
+ // Sync
1344
+ if (typeof callback == 'undefined')
1345
+ return finish(_crypt(passwordb, saltb, rounds));
1346
+
1347
+ // Async
1348
+ else {
1349
+ _crypt(passwordb, saltb, rounds, function(err, bytes) {
1350
+ if (err)
1351
+ callback(err, null);
1352
+ else
1353
+ callback(null, finish(bytes));
1354
+ }, progressCallback);
1355
+ }
1356
+ }
1357
+
1358
+ /**
1359
+ * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.
1360
+ * @function
1361
+ * @param {!Array.<number>} b Byte array
1362
+ * @param {number} len Maximum input length
1363
+ * @returns {string}
1364
+ * @expose
1365
+ */
1366
+ bcrypt.encodeBase64 = base64_encode;
1367
+
1368
+ /**
1369
+ * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.
1370
+ * @function
1371
+ * @param {string} s String to decode
1372
+ * @param {number} len Maximum output length
1373
+ * @returns {!Array.<number>}
1374
+ * @expose
1375
+ */
1376
+ bcrypt.decodeBase64 = base64_decode;
1377
+
1378
+ return bcrypt;
1379
+ }));
node_modules/bcryptjs/dist/bcrypt.min.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
3
+ Released under the Apache License, Version 2.0
4
+ see: https://github.com/dcodeIO/bcrypt.js for details
5
+ */
6
+ (function(u,r){"function"===typeof define&&define.amd?define([],r):"function"===typeof require&&"object"===typeof module&&module&&module.exports?module.exports=r():(u.dcodeIO=u.dcodeIO||{}).bcrypt=r()})(this,function(){function u(e){if("undefined"!==typeof module&&module&&module.exports)try{return require("crypto").randomBytes(e)}catch(d){}try{var c;(self.crypto||self.msCrypto).getRandomValues(c=new Uint32Array(e));return Array.prototype.slice.call(c)}catch(b){}if(!w)throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
7
+ return w(e)}function r(e,d){for(var c=0,b=0,a=0,f=e.length;a<f;++a)e.charCodeAt(a)===d.charCodeAt(a)?++c:++b;return 0>c?!1:0===b}function H(e){var d=[],c=0;I.encodeUTF16toUTF8(function(){return c>=e.length?null:e.charCodeAt(c++)},function(b){d.push(b)});return d}function x(e,d){var c=0,b=[],a,f;if(0>=d||d>e.length)throw Error("Illegal len: "+d);for(;c<d;){a=e[c++]&255;b.push(s[a>>2&63]);a=(a&3)<<4;if(c>=d){b.push(s[a&63]);break}f=e[c++]&255;a|=f>>4&15;b.push(s[a&63]);a=(f&15)<<2;if(c>=d){b.push(s[a&
8
+ 63]);break}f=e[c++]&255;a|=f>>6&3;b.push(s[a&63]);b.push(s[f&63])}return b.join("")}function B(e,d){var c=0,b=e.length,a=0,f=[],g,m,h;if(0>=d)throw Error("Illegal len: "+d);for(;c<b-1&&a<d;){h=e.charCodeAt(c++);g=h<q.length?q[h]:-1;h=e.charCodeAt(c++);m=h<q.length?q[h]:-1;if(-1==g||-1==m)break;h=g<<2>>>0;h|=(m&48)>>4;f.push(z(h));if(++a>=d||c>=b)break;h=e.charCodeAt(c++);g=h<q.length?q[h]:-1;if(-1==g)break;h=(m&15)<<4>>>0;h|=(g&60)>>2;f.push(z(h));if(++a>=d||c>=b)break;h=e.charCodeAt(c++);m=h<q.length?
9
+ q[h]:-1;h=(g&3)<<6>>>0;h|=m;f.push(z(h));++a}b=[];for(c=0;c<a;c++)b.push(f[c].charCodeAt(0));return b}function v(e,d,c,b){var a,f=e[d],g=e[d+1],f=f^c[0];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[1];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[2];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[3];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[4];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|
10
+ f>>8&255];a+=b[768|f&255];g=g^a^c[5];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[6];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[7];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[8];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[9];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[10];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^
11
+ c[11];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[12];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[13];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[14];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[15];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[16];e[d]=g^c[17];e[d+1]=f;return e}function t(e,d){for(var c=0,b=0;4>c;++c)b=b<<8|e[d]&255,d=(d+1)%e.length;
12
+ return{key:b,offp:d}}function C(e,d,c){for(var b=0,a=[0,0],f=d.length,g=c.length,m,h=0;h<f;h++)m=t(e,b),b=m.offp,d[h]^=m.key;for(h=0;h<f;h+=2)a=v(a,0,d,c),d[h]=a[0],d[h+1]=a[1];for(h=0;h<g;h+=2)a=v(a,0,d,c),c[h]=a[0],c[h+1]=a[1]}function J(e,d,c,b){for(var a=0,f=[0,0],g=c.length,m=b.length,h,l=0;l<g;l++)h=t(d,a),a=h.offp,c[l]^=h.key;for(l=a=0;l<g;l+=2)h=t(e,a),a=h.offp,f[0]^=h.key,h=t(e,a),a=h.offp,f[1]^=h.key,f=v(f,0,c,b),c[l]=f[0],c[l+1]=f[1];for(l=0;l<m;l+=2)h=t(e,a),a=h.offp,f[0]^=h.key,h=t(e,
13
+ a),a=h.offp,f[1]^=h.key,f=v(f,0,c,b),b[l]=f[0],b[l+1]=f[1]}function D(e,d,c,b,a){function f(){a&&a(n/c);if(n<c)for(var h=Date.now();n<c&&!(n+=1,C(e,l,k),C(d,l,k),100<Date.now()-h););else{for(n=0;64>n;n++)for(y=0;y<m>>1;y++)v(g,y<<1,l,k);h=[];for(n=0;n<m;n++)h.push((g[n]>>24&255)>>>0),h.push((g[n]>>16&255)>>>0),h.push((g[n]>>8&255)>>>0),h.push((g[n]&255)>>>0);if(b){b(null,h);return}return h}b&&p(f)}var g=E.slice(),m=g.length,h;if(4>c||31<c){h=Error("Illegal number of rounds (4-31): "+c);if(b){p(b.bind(this,
14
+ h));return}throw h;}if(16!==d.length){h=Error("Illegal salt length: "+d.length+" != 16");if(b){p(b.bind(this,h));return}throw h;}c=1<<c>>>0;var l,k,n=0,y;Int32Array?(l=new Int32Array(F),k=new Int32Array(G)):(l=F.slice(),k=G.slice());J(d,e,l,k);if("undefined"!==typeof b)f();else for(;;)if("undefined"!==typeof(h=f()))return h||[]}function A(e,d,c,b){function a(a){var b=[];b.push("$2");"a"<=f&&b.push(f);b.push("$");10>l&&b.push("0");b.push(l.toString());b.push("$");b.push(x(k,k.length));b.push(x(a,4*
15
+ E.length-1));return b.join("")}if("string"!==typeof e||"string"!==typeof d){b=Error("Invalid string / salt: Not a string");if(c){p(c.bind(this,b));return}throw b;}var f,g;if("$"!==d.charAt(0)||"2"!==d.charAt(1)){b=Error("Invalid salt version: "+d.substring(0,2));if(c){p(c.bind(this,b));return}throw b;}if("$"===d.charAt(2))f=String.fromCharCode(0),g=3;else{f=d.charAt(2);if("a"!==f&&"b"!==f&&"y"!==f||"$"!==d.charAt(3)){b=Error("Invalid salt revision: "+d.substring(2,4));if(c){p(c.bind(this,b));return}throw b;
16
+ }g=4}if("$"<d.charAt(g+2)){b=Error("Missing salt rounds");if(c){p(c.bind(this,b));return}throw b;}var m=10*parseInt(d.substring(g,g+1),10),h=parseInt(d.substring(g+1,g+2),10),l=m+h;d=d.substring(g+3,g+25);e=H(e+("a"<=f?"\x00":""));var k=B(d,16);if("undefined"==typeof c)return a(D(e,k,l));D(e,k,l,function(b,d){b?c(b,null):c(null,a(d))},b)}var k={},w=null;try{u(1)}catch(K){}w=null;k.setRandomFallback=function(e){w=e};k.genSaltSync=function(e,d){e=e||10;if("number"!==typeof e)throw Error("Illegal arguments: "+
17
+ typeof e+", "+typeof d);4>e?e=4:31<e&&(e=31);var c=[];c.push("$2a$");10>e&&c.push("0");c.push(e.toString());c.push("$");c.push(x(u(16),16));return c.join("")};k.genSalt=function(e,d,c){function b(a){p(function(){try{a(null,k.genSaltSync(e))}catch(b){a(b)}})}"function"===typeof d&&(c=d,d=void 0);"function"===typeof e&&(c=e,e=void 0);if("undefined"===typeof e)e=10;else if("number"!==typeof e)throw Error("illegal arguments: "+typeof e);if(c){if("function"!==typeof c)throw Error("Illegal callback: "+
18
+ typeof c);b(c)}else return new Promise(function(a,c){b(function(b,d){b?c(b):a(d)})})};k.hashSync=function(e,d){"undefined"===typeof d&&(d=10);"number"===typeof d&&(d=k.genSaltSync(d));if("string"!==typeof e||"string"!==typeof d)throw Error("Illegal arguments: "+typeof e+", "+typeof d);return A(e,d)};k.hash=function(e,d,c,b){function a(a){"string"===typeof e&&"number"===typeof d?k.genSalt(d,function(c,d){A(e,d,a,b)}):"string"===typeof e&&"string"===typeof d?A(e,d,a,b):p(a.bind(this,Error("Illegal arguments: "+
19
+ typeof e+", "+typeof d)))}if(c){if("function"!==typeof c)throw Error("Illegal callback: "+typeof c);a(c)}else return new Promise(function(b,c){a(function(a,d){a?c(a):b(d)})})};k.compareSync=function(e,d){if("string"!==typeof e||"string"!==typeof d)throw Error("Illegal arguments: "+typeof e+", "+typeof d);return 60!==d.length?!1:r(k.hashSync(e,d.substr(0,d.length-31)),d)};k.compare=function(e,d,c,b){function a(a){"string"!==typeof e||"string"!==typeof d?p(a.bind(this,Error("Illegal arguments: "+typeof e+
20
+ ", "+typeof d))):60!==d.length?p(a.bind(this,null,!1)):k.hash(e,d.substr(0,29),function(b,c){b?a(b):a(null,r(c,d))},b)}if(c){if("function"!==typeof c)throw Error("Illegal callback: "+typeof c);a(c)}else return new Promise(function(b,c){a(function(a,d){a?c(a):b(d)})})};k.getRounds=function(e){if("string"!==typeof e)throw Error("Illegal arguments: "+typeof e);return parseInt(e.split("$")[2],10)};k.getSalt=function(e){if("string"!==typeof e)throw Error("Illegal arguments: "+typeof e);if(60!==e.length)throw Error("Illegal hash length: "+
21
+ e.length+" != 60");return e.substring(0,29)};var p="undefined"!==typeof process&&process&&"function"===typeof process.nextTick?"function"===typeof setImmediate?setImmediate:process.nextTick:setTimeout,s="./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),q=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,54,55,56,57,58,59,60,61,62,63,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,10,11,12,
22
+ 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,-1,-1,-1,-1,-1,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,-1,-1,-1,-1,-1],z=String.fromCharCode,I=function(){var e={MAX_CODEPOINT:1114111,encodeUTF8:function(d,c){var b=null;"number"===typeof d&&(b=d,d=function(){return null});for(;null!==b||null!==(b=d());)128>b?c(b&127):(2048>b?c(b>>6&31|192):(65536>b?c(b>>12&15|224):(c(b>>18&7|240),c(b>>12&63|128)),c(b>>6&63|128)),c(b&63|128)),b=null},decodeUTF8:function(d,c){for(var b,
23
+ a,f,e,k=function(a){a=a.slice(0,a.indexOf(null));var b=Error(a.toString());b.name="TruncatedError";b.bytes=a;throw b;};null!==(b=d());)if(0===(b&128))c(b);else if(192===(b&224))null===(a=d())&&k([b,a]),c((b&31)<<6|a&63);else if(224===(b&240))null!==(a=d())&&null!==(f=d())||k([b,a,f]),c((b&15)<<12|(a&63)<<6|f&63);else if(240===(b&248))null!==(a=d())&&null!==(f=d())&&null!==(e=d())||k([b,a,f,e]),c((b&7)<<18|(a&63)<<12|(f&63)<<6|e&63);else throw RangeError("Illegal starting byte: "+b);},UTF16toUTF8:function(d,
24
+ c){for(var b,a=null;null!==(b=null!==a?a:d());)55296<=b&&57343>=b&&null!==(a=d())&&56320<=a&&57343>=a?(c(1024*(b-55296)+a-56320+65536),a=null):c(b);null!==a&&c(a)},UTF8toUTF16:function(d,c){var b=null;"number"===typeof d&&(b=d,d=function(){return null});for(;null!==b||null!==(b=d());)65535>=b?c(b):(b-=65536,c((b>>10)+55296),c(b%1024+56320)),b=null},encodeUTF16toUTF8:function(d,c){e.UTF16toUTF8(d,function(b){e.encodeUTF8(b,c)})},decodeUTF8toUTF16:function(d,c){e.decodeUTF8(d,function(b){e.UTF8toUTF16(b,
25
+ c)})},calculateCodePoint:function(d){return 128>d?1:2048>d?2:65536>d?3:4},calculateUTF8:function(d){for(var c,b=0;null!==(c=d());)b+=e.calculateCodePoint(c);return b},calculateUTF16asUTF8:function(d){var c=0,b=0;e.UTF16toUTF8(d,function(a){++c;b+=e.calculateCodePoint(a)});return[c,b]}};return e}();Date.now=Date.now||function(){return+new Date};var F=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,
26
+ 3041331479,2450970073,2306472731],G=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,
27
+ 289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,
28
+ 1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,
29
+ 442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,
30
+ 3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,
31
+ 48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946,1266315497,3048417604,3681880366,3289982499,290971E4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,
32
+ 1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,
33
+ 613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,
34
+ 2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,
35
+ 1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,
36
+ 4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055,3913112168,
37
+ 2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,
38
+ 499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,
39
+ 3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,
40
+ 309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,
41
+ 1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,
42
+ 2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504,976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,
43
+ 2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,
44
+ 3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,
45
+ 3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409E3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,
46
+ 3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,
47
+ 1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],E=[1332899944,1700884034,1701343084,1684370003,1668446532,
48
+ 1869963892];k.encodeBase64=x;k.decodeBase64=B;return k});
node_modules/bcryptjs/dist/bcrypt.min.js.gz ADDED
Binary file (9.44 kB). View file
 
node_modules/bcryptjs/dist/bcrypt.min.map ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version":3,
3
+ "file":"",
4
+ "lineCount":48,
5
+ "mappings":"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",
6
+ "sources":["dist/bcrypt.js"],
7
+ "names":["global","factory","define","require","module","random","len","e","a","self","Uint32Array","Array","prototype","slice","call","randomFallback","Error","safeStringCompare","known","unknown","right","wrong","i","k","length","charCodeAt","stringToBytes","str","out","utfx","encodeUTF16toUTF8","b","push","base64_encode","off","rs","c1","c2","BASE64_CODE","join","base64_decode","s","slen","olen","o","code","BASE64_INDEX","stringFromCharCode","c3","c4","res","_encipher","lr","P","S","n","l","r","_streamtoword","data","offp","word","key","_key","offset","plen","sw","_ekskey","_crypt","salt","rounds","callback","progressCallback","next","start","Date","now","MAX_EXECUTION_TIME","j","clen","cdata","ret","nextTick","C_ORIG","err","bind","BCRYPT_SALT_LEN","Int32Array","P_ORIG","S_ORIG","_hash","finish","bytes","minor","toString","saltb","charAt","substring","String","fromCharCode","r1","parseInt","r2","real_salt","passwordb","bcrypt","setRandomFallback","bcrypt.setRandomFallback","genSaltSync","bcrypt.genSaltSync","seed_length","GENSALT_DEFAULT_LOG2_ROUNDS","genSalt","bcrypt.genSalt","_async","undefined","Promise","resolve","reject","hashSync","bcrypt.hashSync","hash","bcrypt.hash","compareSync","bcrypt.compareSync","substr","compare","bcrypt.compare","comp","getRounds","bcrypt.getRounds","split","getSalt","bcrypt.getSalt","process","setImmediate","setTimeout","utfx.encodeUTF8","src","dst","cp","utfx.decodeUTF8","c","d","fail","indexOf","name","RangeError","utfx.UTF16toUTF8","utfx.UTF8toUTF16","utfx.encodeUTF16toUTF8","UTF16toUTF8","encodeUTF8","utfx.decodeUTF8toUTF16","decodeUTF8","UTF8toUTF16","utfx.calculateCodePoint","utfx.calculateUTF8","calculateCodePoint","utfx.calculateUTF16asUTF8","encodeBase64","decodeBase64"]
8
+ }
node_modules/bcryptjs/externs/bcrypt.js ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright 2012 The Closure Compiler Authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * @fileoverview Definitions for bcrypt.js 2.
19
+ * @externs
20
+ * @author Daniel Wirtz <dcode@dcode.io>
21
+ */
22
+
23
+ /**
24
+ * @type {Object.<string,*>}
25
+ */
26
+ var bcrypt = {};
27
+
28
+ /**
29
+ * @param {?function(number):!Array.<number>} random
30
+ */
31
+ bcrypt.setRandomFallback = function(random) {};
32
+
33
+ /**
34
+ * @param {number=} rounds
35
+ * @param {number=} seed_length
36
+ * @returns {string}
37
+ */
38
+ bcrypt.genSaltSync = function(rounds, seed_length) {};
39
+
40
+ /**
41
+ * @param {(number|function(Error, ?string))=} rounds
42
+ * @param {(number|function(Error, ?string))=} seed_length
43
+ * @param {function(Error, string=)=} callback
44
+ */
45
+ bcrypt.genSalt = function(rounds, seed_length, callback) {};
46
+
47
+ /**
48
+ * @param {string} s
49
+ * @param {(number|string)=} salt
50
+ * @returns {?string}
51
+ */
52
+ bcrypt.hashSync = function(s, salt) {};
53
+
54
+ /**
55
+ * @param {string} s
56
+ * @param {number|string} salt
57
+ * @param {function(Error, string=)} callback
58
+ * @expose
59
+ */
60
+ bcrypt.hash = function(s, salt, callback) {};
61
+
62
+ /**
63
+ * @param {string} s
64
+ * @param {string} hash
65
+ * @returns {boolean}
66
+ * @throws {Error}
67
+ */
68
+ bcrypt.compareSync = function(s, hash) {};
69
+
70
+ /**
71
+ * @param {string} s
72
+ * @param {string} hash
73
+ * @param {function(Error, boolean)} callback
74
+ * @throws {Error}
75
+ */
76
+ bcrypt.compare = function(s, hash, callback) {};
77
+
78
+ /**
79
+ * @param {string} hash
80
+ * @returns {number}
81
+ * @throws {Error}
82
+ */
83
+ bcrypt.getRounds = function(hash) {};
84
+
85
+ /**
86
+ * @param {string} hash
87
+ * @returns {string}
88
+ * @throws {Error}
89
+ * @expose
90
+ */
91
+ bcrypt.getSalt = function(hash) {};
node_modules/bcryptjs/externs/minimal-env.js ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @fileoverview Minimal environment for bcrypt.js.
3
+ * @externs
4
+ */
5
+
6
+ /**
7
+ * @param {string} moduleName
8
+ * returns {*}
9
+ */
10
+ function require(moduleName) {}
11
+
12
+ /**
13
+ * @constructor
14
+ * @private
15
+ */
16
+ var Module = function() {};
17
+
18
+ /**
19
+ * @type {*}
20
+ */
21
+ Module.prototype.exports;
22
+
23
+ /**
24
+ * @type {Module}
25
+ */
26
+ var module;
27
+
28
+ /**
29
+ * @type {string}
30
+ */
31
+ var __dirname;
32
+
33
+ /**
34
+ * @type {Object.<string,*>}
35
+ */
36
+ var process = {};
37
+
38
+ /**
39
+ * @param {function()} func
40
+ */
41
+ process.nextTick = function(func) {};
42
+
43
+ /**
44
+ * @param {string} s
45
+ * @constructor
46
+ * @extends Array
47
+ */
48
+ var Buffer = function(s) {};
49
+
50
+ /**
51
+ BEGIN_NODE_INCLUDE
52
+ var crypto = require('crypto');
53
+ END_NODE_INCLUDE
54
+ */
55
+
56
+ /**
57
+ * @type {Object.<string,*>}
58
+ */
59
+ var crypto = {};
60
+
61
+ /**
62
+ * @param {number} n
63
+ * @returns {Array.<number>}
64
+ */
65
+ crypto.randomBytes = function(n) {};
66
+
67
+ /**
68
+ * @type {Object.<string,*>}
69
+ */
70
+ window.crypto = {};
71
+
72
+ /**
73
+ * @param {Uint8Array|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array} array
74
+ */
75
+ window.crypto.getRandomValues = function(array) {};
76
+
77
+ /**
78
+ * @param {string} name
79
+ * @param {function(...[*]):*} constructor
80
+ */
81
+ var define = function(name, constructor) {};
82
+
83
+ /**
84
+ * @type {boolean}
85
+ */
86
+ define.amd;
87
+
88
+ /**
89
+ * @param {...*} var_args
90
+ * @returns {string}
91
+ */
92
+ String.fromCodePoint = function(var_args) {};
93
+
94
+ /**
95
+ * @param {number} offset
96
+ * @returns {number}
97
+ */
98
+ String.prototype.codePointAt = function(offset) {};
node_modules/bcryptjs/index.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
3
+ Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
4
+ Copyright (c) 2013 Daniel Wirtz <dcode@dcode.io>
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions
8
+ are met:
9
+ 1. Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+ 2. Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the distribution.
14
+ 3. The name of the author may not be used to endorse or promote products
15
+ derived from this software without specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ module.exports = require("./dist/bcrypt.js");
node_modules/bcryptjs/package.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "bcryptjs",
3
+ "description": "Optimized bcrypt in plain JavaScript with zero dependencies. Compatible to 'bcrypt'.",
4
+ "version": "2.4.3",
5
+ "author": "Daniel Wirtz <dcode@dcode.io>",
6
+ "contributors": [
7
+ "Shane Girish <shaneGirish@gmail.com> (https://github.com/shaneGirish)",
8
+ "Alex Murray <> (https://github.com/alexmurray)",
9
+ "Nicolas Pelletier <> (https://github.com/NicolasPelletier)",
10
+ "Josh Rogers <> (https://github.com/geekymole)",
11
+ "Noah Isaacson <noah@nisaacson.com> (https://github.com/nisaacson)"
12
+ ],
13
+ "repository": {
14
+ "type": "url",
15
+ "url": "https://github.com/dcodeIO/bcrypt.js.git"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/dcodeIO/bcrypt.js/issues"
19
+ },
20
+ "keywords": [
21
+ "bcrypt",
22
+ "password",
23
+ "auth",
24
+ "authentication",
25
+ "encryption",
26
+ "crypt",
27
+ "crypto"
28
+ ],
29
+ "main": "index.js",
30
+ "browser": "dist/bcrypt.js",
31
+ "dependencies": {},
32
+ "devDependencies": {
33
+ "testjs": "~1",
34
+ "closurecompiler": "~1",
35
+ "metascript": "~0.18",
36
+ "bcrypt": "latest",
37
+ "utfx": "~1"
38
+ },
39
+ "license": "MIT",
40
+ "scripts": {
41
+ "test": "node node_modules/testjs/bin/testjs",
42
+ "build": "node scripts/build.js",
43
+ "compile": "node node_modules/closurecompiler/bin/ccjs dist/bcrypt.js --compilation_level=SIMPLE_OPTIMIZATIONS --create_source_map=dist/bcrypt.min.map > dist/bcrypt.min.js",
44
+ "compress": "gzip -c -9 dist/bcrypt.min.js > dist/bcrypt.min.js.gz",
45
+ "make": "npm run build && npm run compile && npm run compress && npm test"
46
+ }
47
+ }
node_modules/bcryptjs/scripts/build.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var MetaScript = require("metascript"),
2
+ path = require("path"),
3
+ fs = require("fs");
4
+
5
+ var rootDir = path.join(__dirname, ".."),
6
+ srcDir = path.join(rootDir, "src"),
7
+ distDir = path.join(rootDir, "dist"),
8
+ pkg = require(path.join(rootDir, "package.json")),
9
+ filename;
10
+
11
+ var scope = {
12
+ VERSION: pkg.version,
13
+ ISAAC: false
14
+ };
15
+
16
+ // Make standard build
17
+ console.log("Building bcrypt.js with scope", JSON.stringify(scope, null, 2));
18
+ fs.writeFileSync(
19
+ path.join(distDir, "bcrypt.js"),
20
+ MetaScript.transform(fs.readFileSync(filename = path.join(srcDir, "wrap.js")), filename, scope, srcDir)
21
+ );
22
+
23
+ // Make isaac build - see: https://github.com/dcodeIO/bcrypt.js/issues/16
24
+ /* scope.ISAAC = true;
25
+ console.log("Building bcrypt-isaac.js with scope", JSON.stringify(scope, null, 2));
26
+ fs.writeFileSync(
27
+ path.join(distDir, "bcrypt-isaac.js"),
28
+ MetaScript.transform(fs.readFileSync(filename = path.join(srcDir, "bcrypt.js")), filename, scope, srcDir)
29
+ ); */
30
+
31
+ // Update bower.json
32
+ scope = { VERSION: pkg.version };
33
+ console.log("Updating bower.json with scope", JSON.stringify(scope, null, 2));
34
+ fs.writeFileSync(
35
+ path.join(rootDir, "bower.json"),
36
+ MetaScript.transform(fs.readFileSync(filename = path.join(srcDir, "bower.json")), filename, scope, srcDir)
37
+ );
node_modules/bcryptjs/src/bcrypt.js ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * bcrypt namespace.
3
+ * @type {Object.<string,*>}
4
+ */
5
+ var bcrypt = {};
6
+
7
+ /**
8
+ * The random implementation to use as a fallback.
9
+ * @type {?function(number):!Array.<number>}
10
+ * @inner
11
+ */
12
+ var randomFallback = null;
13
+
14
+ /**
15
+ * Generates cryptographically secure random bytes.
16
+ * @function
17
+ * @param {number} len Bytes length
18
+ * @returns {!Array.<number>} Random bytes
19
+ * @throws {Error} If no random implementation is available
20
+ * @inner
21
+ */
22
+ function random(len) {
23
+ /* node */ if (typeof module !== 'undefined' && module && module['exports'])
24
+ try {
25
+ return require("crypto")['randomBytes'](len);
26
+ } catch (e) {}
27
+ /* WCA */ try {
28
+ var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));
29
+ return Array.prototype.slice.call(a);
30
+ } catch (e) {}
31
+ /* fallback */ if (!randomFallback)
32
+ throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
33
+ return randomFallback(len);
34
+ }
35
+
36
+ // Test if any secure randomness source is available
37
+ var randomAvailable = false;
38
+ try {
39
+ random(1);
40
+ randomAvailable = true;
41
+ } catch (e) {}
42
+
43
+ // Default fallback, if any
44
+ randomFallback = /*? if (ISAAC) { */function(len) {
45
+ for (var a=[], i=0; i<len; ++i)
46
+ a[i] = ((0.5 + isaac() * 2.3283064365386963e-10) * 256) | 0;
47
+ return a;
48
+ };/*? } else { */null;/*? }*/
49
+
50
+ /**
51
+ * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
52
+ * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it
53
+ * is seeded properly!
54
+ * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its
55
+ * sole argument, returning the corresponding array of cryptographically secure random byte values.
56
+ * @see http://nodejs.org/api/crypto.html
57
+ * @see http://www.w3.org/TR/WebCryptoAPI/
58
+ */
59
+ bcrypt.setRandomFallback = function(random) {
60
+ randomFallback = random;
61
+ };
62
+
63
+ /**
64
+ * Synchronously generates a salt.
65
+ * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted
66
+ * @param {number=} seed_length Not supported.
67
+ * @returns {string} Resulting salt
68
+ * @throws {Error} If a random fallback is required but not set
69
+ * @expose
70
+ */
71
+ bcrypt.genSaltSync = function(rounds, seed_length) {
72
+ rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;
73
+ if (typeof rounds !== 'number')
74
+ throw Error("Illegal arguments: "+(typeof rounds)+", "+(typeof seed_length));
75
+ if (rounds < 4)
76
+ rounds = 4;
77
+ else if (rounds > 31)
78
+ rounds = 31;
79
+ var salt = [];
80
+ salt.push("$2a$");
81
+ if (rounds < 10)
82
+ salt.push("0");
83
+ salt.push(rounds.toString());
84
+ salt.push('$');
85
+ salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw
86
+ return salt.join('');
87
+ };
88
+
89
+ /**
90
+ * Asynchronously generates a salt.
91
+ * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted
92
+ * @param {(number|function(Error, string=))=} seed_length Not supported.
93
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt
94
+ * @returns {!Promise} If `callback` has been omitted
95
+ * @throws {Error} If `callback` is present but not a function
96
+ * @expose
97
+ */
98
+ bcrypt.genSalt = function(rounds, seed_length, callback) {
99
+ if (typeof seed_length === 'function')
100
+ callback = seed_length,
101
+ seed_length = undefined; // Not supported.
102
+ if (typeof rounds === 'function')
103
+ callback = rounds,
104
+ rounds = undefined;
105
+ if (typeof rounds === 'undefined')
106
+ rounds = GENSALT_DEFAULT_LOG2_ROUNDS;
107
+ else if (typeof rounds !== 'number')
108
+ throw Error("illegal arguments: "+(typeof rounds));
109
+
110
+ function _async(callback) {
111
+ nextTick(function() { // Pretty thin, but salting is fast enough
112
+ try {
113
+ callback(null, bcrypt.genSaltSync(rounds));
114
+ } catch (err) {
115
+ callback(err);
116
+ }
117
+ });
118
+ }
119
+
120
+ if (callback) {
121
+ if (typeof callback !== 'function')
122
+ throw Error("Illegal callback: "+typeof(callback));
123
+ _async(callback);
124
+ } else
125
+ return new Promise(function(resolve, reject) {
126
+ _async(function(err, res) {
127
+ if (err) {
128
+ reject(err);
129
+ return;
130
+ }
131
+ resolve(res);
132
+ });
133
+ });
134
+ };
135
+
136
+ /**
137
+ * Synchronously generates a hash for the given string.
138
+ * @param {string} s String to hash
139
+ * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10
140
+ * @returns {string} Resulting hash
141
+ * @expose
142
+ */
143
+ bcrypt.hashSync = function(s, salt) {
144
+ if (typeof salt === 'undefined')
145
+ salt = GENSALT_DEFAULT_LOG2_ROUNDS;
146
+ if (typeof salt === 'number')
147
+ salt = bcrypt.genSaltSync(salt);
148
+ if (typeof s !== 'string' || typeof salt !== 'string')
149
+ throw Error("Illegal arguments: "+(typeof s)+', '+(typeof salt));
150
+ return _hash(s, salt);
151
+ };
152
+
153
+ /**
154
+ * Asynchronously generates a hash for the given string.
155
+ * @param {string} s String to hash
156
+ * @param {number|string} salt Salt length to generate or salt to use
157
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash
158
+ * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
159
+ * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
160
+ * @returns {!Promise} If `callback` has been omitted
161
+ * @throws {Error} If `callback` is present but not a function
162
+ * @expose
163
+ */
164
+ bcrypt.hash = function(s, salt, callback, progressCallback) {
165
+
166
+ function _async(callback) {
167
+ if (typeof s === 'string' && typeof salt === 'number')
168
+ bcrypt.genSalt(salt, function(err, salt) {
169
+ _hash(s, salt, callback, progressCallback);
170
+ });
171
+ else if (typeof s === 'string' && typeof salt === 'string')
172
+ _hash(s, salt, callback, progressCallback);
173
+ else
174
+ nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof salt))));
175
+ }
176
+
177
+ if (callback) {
178
+ if (typeof callback !== 'function')
179
+ throw Error("Illegal callback: "+typeof(callback));
180
+ _async(callback);
181
+ } else
182
+ return new Promise(function(resolve, reject) {
183
+ _async(function(err, res) {
184
+ if (err) {
185
+ reject(err);
186
+ return;
187
+ }
188
+ resolve(res);
189
+ });
190
+ });
191
+ };
192
+
193
+ /**
194
+ * Compares two strings of the same length in constant time.
195
+ * @param {string} known Must be of the correct length
196
+ * @param {string} unknown Must be the same length as `known`
197
+ * @returns {boolean}
198
+ * @inner
199
+ */
200
+ function safeStringCompare(known, unknown) {
201
+ var right = 0,
202
+ wrong = 0;
203
+ for (var i=0, k=known.length; i<k; ++i) {
204
+ if (known.charCodeAt(i) === unknown.charCodeAt(i))
205
+ ++right;
206
+ else
207
+ ++wrong;
208
+ }
209
+ // Prevent removal of unused variables (never true, actually)
210
+ if (right < 0)
211
+ return false;
212
+ return wrong === 0;
213
+ }
214
+
215
+ /**
216
+ * Synchronously tests a string against a hash.
217
+ * @param {string} s String to compare
218
+ * @param {string} hash Hash to test against
219
+ * @returns {boolean} true if matching, otherwise false
220
+ * @throws {Error} If an argument is illegal
221
+ * @expose
222
+ */
223
+ bcrypt.compareSync = function(s, hash) {
224
+ if (typeof s !== "string" || typeof hash !== "string")
225
+ throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash));
226
+ if (hash.length !== 60)
227
+ return false;
228
+ return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);
229
+ };
230
+
231
+ /**
232
+ * Asynchronously compares the given data against the given hash.
233
+ * @param {string} s Data to compare
234
+ * @param {string} hash Data to be compared to
235
+ * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result
236
+ * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
237
+ * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
238
+ * @returns {!Promise} If `callback` has been omitted
239
+ * @throws {Error} If `callback` is present but not a function
240
+ * @expose
241
+ */
242
+ bcrypt.compare = function(s, hash, callback, progressCallback) {
243
+
244
+ function _async(callback) {
245
+ if (typeof s !== "string" || typeof hash !== "string") {
246
+ nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof hash))));
247
+ return;
248
+ }
249
+ if (hash.length !== 60) {
250
+ nextTick(callback.bind(this, null, false));
251
+ return;
252
+ }
253
+ bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {
254
+ if (err)
255
+ callback(err);
256
+ else
257
+ callback(null, safeStringCompare(comp, hash));
258
+ }, progressCallback);
259
+ }
260
+
261
+ if (callback) {
262
+ if (typeof callback !== 'function')
263
+ throw Error("Illegal callback: "+typeof(callback));
264
+ _async(callback);
265
+ } else
266
+ return new Promise(function(resolve, reject) {
267
+ _async(function(err, res) {
268
+ if (err) {
269
+ reject(err);
270
+ return;
271
+ }
272
+ resolve(res);
273
+ });
274
+ });
275
+ };
276
+
277
+ /**
278
+ * Gets the number of rounds used to encrypt the specified hash.
279
+ * @param {string} hash Hash to extract the used number of rounds from
280
+ * @returns {number} Number of rounds used
281
+ * @throws {Error} If `hash` is not a string
282
+ * @expose
283
+ */
284
+ bcrypt.getRounds = function(hash) {
285
+ if (typeof hash !== "string")
286
+ throw Error("Illegal arguments: "+(typeof hash));
287
+ return parseInt(hash.split("$")[2], 10);
288
+ };
289
+
290
+ /**
291
+ * Gets the salt portion from a hash. Does not validate the hash.
292
+ * @param {string} hash Hash to extract the salt from
293
+ * @returns {string} Extracted salt part
294
+ * @throws {Error} If `hash` is not a string or otherwise invalid
295
+ * @expose
296
+ */
297
+ bcrypt.getSalt = function(hash) {
298
+ if (typeof hash !== 'string')
299
+ throw Error("Illegal arguments: "+(typeof hash));
300
+ if (hash.length !== 60)
301
+ throw Error("Illegal hash length: "+hash.length+" != 60");
302
+ return hash.substring(0, 29);
303
+ };
304
+
305
+ //? include("bcrypt/util.js");
306
+
307
+ //? include("bcrypt/impl.js");
308
+
309
+ /**
310
+ * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.
311
+ * @function
312
+ * @param {!Array.<number>} b Byte array
313
+ * @param {number} len Maximum input length
314
+ * @returns {string}
315
+ * @expose
316
+ */
317
+ bcrypt.encodeBase64 = base64_encode;
318
+
319
+ /**
320
+ * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.
321
+ * @function
322
+ * @param {string} s String to decode
323
+ * @param {number} len Maximum output length
324
+ * @returns {!Array.<number>}
325
+ * @expose
326
+ */
327
+ bcrypt.decodeBase64 = base64_decode;
node_modules/bcryptjs/src/bcrypt/impl.js ADDED
@@ -0,0 +1,669 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @type {number}
3
+ * @const
4
+ * @inner
5
+ */
6
+ var BCRYPT_SALT_LEN = 16;
7
+
8
+ /**
9
+ * @type {number}
10
+ * @const
11
+ * @inner
12
+ */
13
+ var GENSALT_DEFAULT_LOG2_ROUNDS = 10;
14
+
15
+ /**
16
+ * @type {number}
17
+ * @const
18
+ * @inner
19
+ */
20
+ var BLOWFISH_NUM_ROUNDS = 16;
21
+
22
+ /**
23
+ * @type {number}
24
+ * @const
25
+ * @inner
26
+ */
27
+ var MAX_EXECUTION_TIME = 100;
28
+
29
+ /**
30
+ * @type {Array.<number>}
31
+ * @const
32
+ * @inner
33
+ */
34
+ var P_ORIG = [
35
+ 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,
36
+ 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,
37
+ 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,
38
+ 0xb5470917, 0x9216d5d9, 0x8979fb1b
39
+ ];
40
+
41
+ /**
42
+ * @type {Array.<number>}
43
+ * @const
44
+ * @inner
45
+ */
46
+ var S_ORIG = [
47
+ 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,
48
+ 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,
49
+ 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,
50
+ 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
51
+ 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,
52
+ 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
53
+ 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,
54
+ 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
55
+ 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,
56
+ 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,
57
+ 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,
58
+ 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
59
+ 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,
60
+ 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,
61
+ 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,
62
+ 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
63
+ 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,
64
+ 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
65
+ 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,
66
+ 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
67
+ 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,
68
+ 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,
69
+ 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,
70
+ 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
71
+ 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,
72
+ 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,
73
+ 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,
74
+ 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
75
+ 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,
76
+ 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
77
+ 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,
78
+ 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
79
+ 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,
80
+ 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,
81
+ 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,
82
+ 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
83
+ 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,
84
+ 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,
85
+ 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,
86
+ 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
87
+ 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,
88
+ 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
89
+ 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,
90
+ 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
91
+ 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,
92
+ 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,
93
+ 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,
94
+ 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
95
+ 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,
96
+ 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,
97
+ 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,
98
+ 0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
99
+ 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,
100
+ 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,
101
+ 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,
102
+ 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
103
+ 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,
104
+ 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,
105
+ 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,
106
+ 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
107
+ 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,
108
+ 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
109
+ 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,
110
+ 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
111
+ 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,
112
+ 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,
113
+ 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,
114
+ 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
115
+ 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,
116
+ 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,
117
+ 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,
118
+ 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
119
+ 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,
120
+ 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
121
+ 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,
122
+ 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
123
+ 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,
124
+ 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,
125
+ 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,
126
+ 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
127
+ 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,
128
+ 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,
129
+ 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,
130
+ 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
131
+ 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,
132
+ 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
133
+ 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,
134
+ 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
135
+ 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,
136
+ 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,
137
+ 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,
138
+ 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
139
+ 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,
140
+ 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,
141
+ 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,
142
+ 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
143
+ 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,
144
+ 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
145
+ 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,
146
+ 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
147
+ 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,
148
+ 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,
149
+ 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,
150
+ 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
151
+ 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,
152
+ 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
153
+ 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,
154
+ 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
155
+ 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,
156
+ 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,
157
+ 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,
158
+ 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
159
+ 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,
160
+ 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,
161
+ 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,
162
+ 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
163
+ 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,
164
+ 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
165
+ 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,
166
+ 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
167
+ 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,
168
+ 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,
169
+ 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,
170
+ 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
171
+ 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,
172
+ 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,
173
+ 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,
174
+ 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
175
+ 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,
176
+ 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
177
+ 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,
178
+ 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
179
+ 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,
180
+ 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,
181
+ 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,
182
+ 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
183
+ 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,
184
+ 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,
185
+ 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,
186
+ 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
187
+ 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,
188
+ 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
189
+ 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,
190
+ 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
191
+ 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,
192
+ 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,
193
+ 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,
194
+ 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
195
+ 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,
196
+ 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,
197
+ 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,
198
+ 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
199
+ 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,
200
+ 0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,
201
+ 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,
202
+ 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
203
+ 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,
204
+ 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,
205
+ 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,
206
+ 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
207
+ 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,
208
+ 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
209
+ 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,
210
+ 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
211
+ 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,
212
+ 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,
213
+ 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,
214
+ 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
215
+ 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,
216
+ 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,
217
+ 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,
218
+ 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
219
+ 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,
220
+ 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
221
+ 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,
222
+ 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
223
+ 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,
224
+ 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,
225
+ 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,
226
+ 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
227
+ 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,
228
+ 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,
229
+ 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,
230
+ 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
231
+ 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,
232
+ 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
233
+ 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,
234
+ 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
235
+ 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,
236
+ 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,
237
+ 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,
238
+ 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
239
+ 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,
240
+ 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,
241
+ 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,
242
+ 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
243
+ 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,
244
+ 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
245
+ 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,
246
+ 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
247
+ 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,
248
+ 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,
249
+ 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,
250
+ 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
251
+ 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
252
+ ];
253
+
254
+ /**
255
+ * @type {Array.<number>}
256
+ * @const
257
+ * @inner
258
+ */
259
+ var C_ORIG = [
260
+ 0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,
261
+ 0x6f756274
262
+ ];
263
+
264
+ /**
265
+ * @param {Array.<number>} lr
266
+ * @param {number} off
267
+ * @param {Array.<number>} P
268
+ * @param {Array.<number>} S
269
+ * @returns {Array.<number>}
270
+ * @inner
271
+ */
272
+ function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
273
+ var n,
274
+ l = lr[off],
275
+ r = lr[off + 1];
276
+
277
+ l ^= P[0];
278
+
279
+ /*
280
+ for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
281
+ // Feistel substitution on left word
282
+ n = S[l >>> 24],
283
+ n += S[0x100 | ((l >> 16) & 0xff)],
284
+ n ^= S[0x200 | ((l >> 8) & 0xff)],
285
+ n += S[0x300 | (l & 0xff)],
286
+ r ^= n ^ P[++i],
287
+ // Feistel substitution on right word
288
+ n = S[r >>> 24],
289
+ n += S[0x100 | ((r >> 16) & 0xff)],
290
+ n ^= S[0x200 | ((r >> 8) & 0xff)],
291
+ n += S[0x300 | (r & 0xff)],
292
+ l ^= n ^ P[++i];
293
+ */
294
+
295
+ //The following is an unrolled version of the above loop.
296
+ //Iteration 0
297
+ n = S[l >>> 24];
298
+ n += S[0x100 | ((l >> 16) & 0xff)];
299
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
300
+ n += S[0x300 | (l & 0xff)];
301
+ r ^= n ^ P[1];
302
+ n = S[r >>> 24];
303
+ n += S[0x100 | ((r >> 16) & 0xff)];
304
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
305
+ n += S[0x300 | (r & 0xff)];
306
+ l ^= n ^ P[2];
307
+ //Iteration 1
308
+ n = S[l >>> 24];
309
+ n += S[0x100 | ((l >> 16) & 0xff)];
310
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
311
+ n += S[0x300 | (l & 0xff)];
312
+ r ^= n ^ P[3];
313
+ n = S[r >>> 24];
314
+ n += S[0x100 | ((r >> 16) & 0xff)];
315
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
316
+ n += S[0x300 | (r & 0xff)];
317
+ l ^= n ^ P[4];
318
+ //Iteration 2
319
+ n = S[l >>> 24];
320
+ n += S[0x100 | ((l >> 16) & 0xff)];
321
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
322
+ n += S[0x300 | (l & 0xff)];
323
+ r ^= n ^ P[5];
324
+ n = S[r >>> 24];
325
+ n += S[0x100 | ((r >> 16) & 0xff)];
326
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
327
+ n += S[0x300 | (r & 0xff)];
328
+ l ^= n ^ P[6];
329
+ //Iteration 3
330
+ n = S[l >>> 24];
331
+ n += S[0x100 | ((l >> 16) & 0xff)];
332
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
333
+ n += S[0x300 | (l & 0xff)];
334
+ r ^= n ^ P[7];
335
+ n = S[r >>> 24];
336
+ n += S[0x100 | ((r >> 16) & 0xff)];
337
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
338
+ n += S[0x300 | (r & 0xff)];
339
+ l ^= n ^ P[8];
340
+ //Iteration 4
341
+ n = S[l >>> 24];
342
+ n += S[0x100 | ((l >> 16) & 0xff)];
343
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
344
+ n += S[0x300 | (l & 0xff)];
345
+ r ^= n ^ P[9];
346
+ n = S[r >>> 24];
347
+ n += S[0x100 | ((r >> 16) & 0xff)];
348
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
349
+ n += S[0x300 | (r & 0xff)];
350
+ l ^= n ^ P[10];
351
+ //Iteration 5
352
+ n = S[l >>> 24];
353
+ n += S[0x100 | ((l >> 16) & 0xff)];
354
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
355
+ n += S[0x300 | (l & 0xff)];
356
+ r ^= n ^ P[11];
357
+ n = S[r >>> 24];
358
+ n += S[0x100 | ((r >> 16) & 0xff)];
359
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
360
+ n += S[0x300 | (r & 0xff)];
361
+ l ^= n ^ P[12];
362
+ //Iteration 6
363
+ n = S[l >>> 24];
364
+ n += S[0x100 | ((l >> 16) & 0xff)];
365
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
366
+ n += S[0x300 | (l & 0xff)];
367
+ r ^= n ^ P[13];
368
+ n = S[r >>> 24];
369
+ n += S[0x100 | ((r >> 16) & 0xff)];
370
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
371
+ n += S[0x300 | (r & 0xff)];
372
+ l ^= n ^ P[14];
373
+ //Iteration 7
374
+ n = S[l >>> 24];
375
+ n += S[0x100 | ((l >> 16) & 0xff)];
376
+ n ^= S[0x200 | ((l >> 8) & 0xff)];
377
+ n += S[0x300 | (l & 0xff)];
378
+ r ^= n ^ P[15];
379
+ n = S[r >>> 24];
380
+ n += S[0x100 | ((r >> 16) & 0xff)];
381
+ n ^= S[0x200 | ((r >> 8) & 0xff)];
382
+ n += S[0x300 | (r & 0xff)];
383
+ l ^= n ^ P[16];
384
+
385
+ lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];
386
+ lr[off + 1] = l;
387
+ return lr;
388
+ }
389
+
390
+ /**
391
+ * @param {Array.<number>} data
392
+ * @param {number} offp
393
+ * @returns {{key: number, offp: number}}
394
+ * @inner
395
+ */
396
+ function _streamtoword(data, offp) {
397
+ for (var i = 0, word = 0; i < 4; ++i)
398
+ word = (word << 8) | (data[offp] & 0xff),
399
+ offp = (offp + 1) % data.length;
400
+ return { key: word, offp: offp };
401
+ }
402
+
403
+ /**
404
+ * @param {Array.<number>} key
405
+ * @param {Array.<number>} P
406
+ * @param {Array.<number>} S
407
+ * @inner
408
+ */
409
+ function _key(key, P, S) {
410
+ var offset = 0,
411
+ lr = [0, 0],
412
+ plen = P.length,
413
+ slen = S.length,
414
+ sw;
415
+ for (var i = 0; i < plen; i++)
416
+ sw = _streamtoword(key, offset),
417
+ offset = sw.offp,
418
+ P[i] = P[i] ^ sw.key;
419
+ for (i = 0; i < plen; i += 2)
420
+ lr = _encipher(lr, 0, P, S),
421
+ P[i] = lr[0],
422
+ P[i + 1] = lr[1];
423
+ for (i = 0; i < slen; i += 2)
424
+ lr = _encipher(lr, 0, P, S),
425
+ S[i] = lr[0],
426
+ S[i + 1] = lr[1];
427
+ }
428
+
429
+ /**
430
+ * Expensive key schedule Blowfish.
431
+ * @param {Array.<number>} data
432
+ * @param {Array.<number>} key
433
+ * @param {Array.<number>} P
434
+ * @param {Array.<number>} S
435
+ * @inner
436
+ */
437
+ function _ekskey(data, key, P, S) {
438
+ var offp = 0,
439
+ lr = [0, 0],
440
+ plen = P.length,
441
+ slen = S.length,
442
+ sw;
443
+ for (var i = 0; i < plen; i++)
444
+ sw = _streamtoword(key, offp),
445
+ offp = sw.offp,
446
+ P[i] = P[i] ^ sw.key;
447
+ offp = 0;
448
+ for (i = 0; i < plen; i += 2)
449
+ sw = _streamtoword(data, offp),
450
+ offp = sw.offp,
451
+ lr[0] ^= sw.key,
452
+ sw = _streamtoword(data, offp),
453
+ offp = sw.offp,
454
+ lr[1] ^= sw.key,
455
+ lr = _encipher(lr, 0, P, S),
456
+ P[i] = lr[0],
457
+ P[i + 1] = lr[1];
458
+ for (i = 0; i < slen; i += 2)
459
+ sw = _streamtoword(data, offp),
460
+ offp = sw.offp,
461
+ lr[0] ^= sw.key,
462
+ sw = _streamtoword(data, offp),
463
+ offp = sw.offp,
464
+ lr[1] ^= sw.key,
465
+ lr = _encipher(lr, 0, P, S),
466
+ S[i] = lr[0],
467
+ S[i + 1] = lr[1];
468
+ }
469
+
470
+ /**
471
+ * Internaly crypts a string.
472
+ * @param {Array.<number>} b Bytes to crypt
473
+ * @param {Array.<number>} salt Salt bytes to use
474
+ * @param {number} rounds Number of rounds
475
+ * @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If
476
+ * omitted, the operation will be performed synchronously.
477
+ * @param {function(number)=} progressCallback Callback called with the current progress
478
+ * @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`
479
+ * @inner
480
+ */
481
+ function _crypt(b, salt, rounds, callback, progressCallback) {
482
+ var cdata = C_ORIG.slice(),
483
+ clen = cdata.length,
484
+ err;
485
+
486
+ // Validate
487
+ if (rounds < 4 || rounds > 31) {
488
+ err = Error("Illegal number of rounds (4-31): "+rounds);
489
+ if (callback) {
490
+ nextTick(callback.bind(this, err));
491
+ return;
492
+ } else
493
+ throw err;
494
+ }
495
+ if (salt.length !== BCRYPT_SALT_LEN) {
496
+ err =Error("Illegal salt length: "+salt.length+" != "+BCRYPT_SALT_LEN);
497
+ if (callback) {
498
+ nextTick(callback.bind(this, err));
499
+ return;
500
+ } else
501
+ throw err;
502
+ }
503
+ rounds = (1 << rounds) >>> 0;
504
+
505
+ var P, S, i = 0, j;
506
+
507
+ //Use typed arrays when available - huge speedup!
508
+ if (Int32Array) {
509
+ P = new Int32Array(P_ORIG);
510
+ S = new Int32Array(S_ORIG);
511
+ } else {
512
+ P = P_ORIG.slice();
513
+ S = S_ORIG.slice();
514
+ }
515
+
516
+ _ekskey(salt, b, P, S);
517
+
518
+ /**
519
+ * Calcualtes the next round.
520
+ * @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`
521
+ * @inner
522
+ */
523
+ function next() {
524
+ if (progressCallback)
525
+ progressCallback(i / rounds);
526
+ if (i < rounds) {
527
+ var start = Date.now();
528
+ for (; i < rounds;) {
529
+ i = i + 1;
530
+ _key(b, P, S);
531
+ _key(salt, P, S);
532
+ if (Date.now() - start > MAX_EXECUTION_TIME)
533
+ break;
534
+ }
535
+ } else {
536
+ for (i = 0; i < 64; i++)
537
+ for (j = 0; j < (clen >> 1); j++)
538
+ _encipher(cdata, j << 1, P, S);
539
+ var ret = [];
540
+ for (i = 0; i < clen; i++)
541
+ ret.push(((cdata[i] >> 24) & 0xff) >>> 0),
542
+ ret.push(((cdata[i] >> 16) & 0xff) >>> 0),
543
+ ret.push(((cdata[i] >> 8) & 0xff) >>> 0),
544
+ ret.push((cdata[i] & 0xff) >>> 0);
545
+ if (callback) {
546
+ callback(null, ret);
547
+ return;
548
+ } else
549
+ return ret;
550
+ }
551
+ if (callback)
552
+ nextTick(next);
553
+ }
554
+
555
+ // Async
556
+ if (typeof callback !== 'undefined') {
557
+ next();
558
+
559
+ // Sync
560
+ } else {
561
+ var res;
562
+ while (true)
563
+ if (typeof(res = next()) !== 'undefined')
564
+ return res || [];
565
+ }
566
+ }
567
+
568
+ /**
569
+ * Internally hashes a string.
570
+ * @param {string} s String to hash
571
+ * @param {?string} salt Salt to use, actually never null
572
+ * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,
573
+ * hashing is perormed synchronously.
574
+ * @param {function(number)=} progressCallback Callback called with the current progress
575
+ * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`
576
+ * @inner
577
+ */
578
+ function _hash(s, salt, callback, progressCallback) {
579
+ var err;
580
+ if (typeof s !== 'string' || typeof salt !== 'string') {
581
+ err = Error("Invalid string / salt: Not a string");
582
+ if (callback) {
583
+ nextTick(callback.bind(this, err));
584
+ return;
585
+ }
586
+ else
587
+ throw err;
588
+ }
589
+
590
+ // Validate the salt
591
+ var minor, offset;
592
+ if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {
593
+ err = Error("Invalid salt version: "+salt.substring(0,2));
594
+ if (callback) {
595
+ nextTick(callback.bind(this, err));
596
+ return;
597
+ }
598
+ else
599
+ throw err;
600
+ }
601
+ if (salt.charAt(2) === '$')
602
+ minor = String.fromCharCode(0),
603
+ offset = 3;
604
+ else {
605
+ minor = salt.charAt(2);
606
+ if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {
607
+ err = Error("Invalid salt revision: "+salt.substring(2,4));
608
+ if (callback) {
609
+ nextTick(callback.bind(this, err));
610
+ return;
611
+ } else
612
+ throw err;
613
+ }
614
+ offset = 4;
615
+ }
616
+
617
+ // Extract number of rounds
618
+ if (salt.charAt(offset + 2) > '$') {
619
+ err = Error("Missing salt rounds");
620
+ if (callback) {
621
+ nextTick(callback.bind(this, err));
622
+ return;
623
+ } else
624
+ throw err;
625
+ }
626
+ var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,
627
+ r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),
628
+ rounds = r1 + r2,
629
+ real_salt = salt.substring(offset + 3, offset + 25);
630
+ s += minor >= 'a' ? "\x00" : "";
631
+
632
+ var passwordb = stringToBytes(s),
633
+ saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);
634
+
635
+ /**
636
+ * Finishes hashing.
637
+ * @param {Array.<number>} bytes Byte array
638
+ * @returns {string}
639
+ * @inner
640
+ */
641
+ function finish(bytes) {
642
+ var res = [];
643
+ res.push("$2");
644
+ if (minor >= 'a')
645
+ res.push(minor);
646
+ res.push("$");
647
+ if (rounds < 10)
648
+ res.push("0");
649
+ res.push(rounds.toString());
650
+ res.push("$");
651
+ res.push(base64_encode(saltb, saltb.length));
652
+ res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));
653
+ return res.join('');
654
+ }
655
+
656
+ // Sync
657
+ if (typeof callback == 'undefined')
658
+ return finish(_crypt(passwordb, saltb, rounds));
659
+
660
+ // Async
661
+ else {
662
+ _crypt(passwordb, saltb, rounds, function(err, bytes) {
663
+ if (err)
664
+ callback(err, null);
665
+ else
666
+ callback(null, finish(bytes));
667
+ }, progressCallback);
668
+ }
669
+ }
node_modules/bcryptjs/src/bcrypt/prng/README.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Because of [reasonable security doubts](https://github.com/dcodeIO/bcrypt.js/issues/16), these files, which used to be
2
+ a part of bcrypt-isaac.js, are no longer used but are kept here for reference only.
3
+
4
+ What is required instead is a proper way to collect entropy sources (using an intermediate stream cipher) which is then
5
+ used to seed the CSPRNG. Pick one and use `bcrypt.setRandomFallback` instead.
node_modules/bcryptjs/src/bcrypt/prng/accum.js ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* basic entropy accumulator */
2
+ var accum = (function() {
3
+
4
+ var pool, // randomness pool
5
+ time, // start timestamp
6
+ last; // last step timestamp
7
+
8
+ /* initialize with default pool */
9
+ function init() {
10
+ pool = [];
11
+ time = new Date().getTime();
12
+ last = time;
13
+ // use Math.random
14
+ pool.push((Math.random() * 0xffffffff)|0);
15
+ // use current time
16
+ pool.push(time|0);
17
+ }
18
+
19
+ /* perform one step */
20
+ function step() {
21
+ if (!to)
22
+ return;
23
+ if (pool.length >= 255) { // stop at 255 values (1 more is added on fetch)
24
+ stop();
25
+ return;
26
+ }
27
+ var now = new Date().getTime();
28
+ // use actual time difference
29
+ pool.push(now-last);
30
+ // always compute, occasionally use Math.random
31
+ var rnd = (Math.random() * 0xffffffff)|0;
32
+ if (now % 2)
33
+ pool[pool.length-1] += rnd;
34
+ last = now;
35
+ to = setTimeout(step, 100+Math.random()*512); // use hypothetical time difference
36
+ }
37
+
38
+ var to = null;
39
+
40
+ /* starts accumulating */
41
+ function start() {
42
+ if (to) return;
43
+ to = setTimeout(step, 100+Math.random()*512);
44
+ if (console.log)
45
+ console.log("bcrypt-isaac: collecting entropy...");
46
+ // install collectors
47
+ if (typeof window !== 'undefined' && window && window.addEventListener)
48
+ window.addEventListener("load", loadCollector, false),
49
+ window.addEventListener("mousemove", mouseCollector, false),
50
+ window.addEventListener("touchmove", touchCollector, false);
51
+ else if (typeof document !== 'undefined' && document && document.attachEvent)
52
+ document.attachEvent("onload", loadCollector),
53
+ document.attachEvent("onmousemove", mouseCollector);
54
+ }
55
+
56
+ /* stops accumulating */
57
+ function stop() {
58
+ if (!to) return;
59
+ clearTimeout(to); to = null;
60
+ // uninstall collectors
61
+ if (typeof window !== 'undefined' && window && window.removeEventListener)
62
+ window.removeEventListener("load", loadCollector, false),
63
+ window.removeEventListener("mousemove", mouseCollector, false),
64
+ window.removeEventListener("touchmove", touchCollector, false);
65
+ else if (typeof document !== 'undefined' && document && document.detachEvent)
66
+ document.detachEvent("onload", loadCollector),
67
+ document.detachEvent("onmousemove", mouseCollector);
68
+ }
69
+
70
+ /* fetches the randomness pool */
71
+ function fetch() {
72
+ // add overall time difference
73
+ pool.push((new Date().getTime()-time)|0);
74
+ var res = pool;
75
+ init();
76
+ if (console.log)
77
+ console.log("bcrypt-isaac: using "+res.length+"/256 samples of entropy");
78
+ // console.log(res);
79
+ return res;
80
+ }
81
+
82
+ /* adds the current time to the top of the pool */
83
+ function addTime() {
84
+ pool[pool.length-1] += new Date().getTime() - time;
85
+ }
86
+
87
+ /* page load collector */
88
+ function loadCollector() {
89
+ if (!to || pool.length >= 255)
90
+ return;
91
+ pool.push(0);
92
+ addTime();
93
+ }
94
+
95
+ /* mouse events collector */
96
+ function mouseCollector(ev) {
97
+ if (!to || pool.length >= 255)
98
+ return;
99
+ try {
100
+ var x = ev.x || ev.clientX || ev.offsetX || 0,
101
+ y = ev.y || ev.clientY || ev.offsetY || 0;
102
+ if (x != 0 || y != 0)
103
+ pool[pool.length-1] += ((x-mouseCollector.last[0]) ^ (y-mouseCollector.last[1])),
104
+ addTime(),
105
+ mouseCollector.last = [x,y];
106
+ } catch (e) {}
107
+ }
108
+ mouseCollector.last = [0,0];
109
+
110
+ /* touch events collector */
111
+ function touchCollector(ev) {
112
+ if (!to || pool.length >= 255)
113
+ return;
114
+ try {
115
+ var touch = ev.touches[0] || ev.changedTouches[0];
116
+ var x = touch.pageX || touch.clientX || 0,
117
+ y = touch.pageY || touch.clientY || 0;
118
+ if (x != 0 || y != 0)
119
+ pool[pool.length-1] += (x-touchCollector.last[0]) ^ (y-touchCollector.last[1]),
120
+ addTime(),
121
+ touchCollector.last = [x,y];
122
+ } catch (e) {}
123
+ }
124
+ touchCollector.last = [0,0];
125
+
126
+ init();
127
+ return {
128
+ "start": start,
129
+ "stop": stop,
130
+ "fetch": fetch
131
+ }
132
+
133
+ })();
node_modules/bcryptjs/src/bcrypt/prng/isaac.js ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ isaac.js Copyright (c) 2012 Yves-Marie K. Rinquin
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ /* isaac module pattern */
25
+ var isaac = (function(){
26
+
27
+ /* internal states */
28
+ var m = Array(256), // internal memory
29
+ acc = 0, // accumulator
30
+ brs = 0, // last result
31
+ cnt = 0, // counter
32
+ r = Array(256), // result array
33
+ gnt = 0, // generation counter
34
+ isd = false; // initially seeded
35
+
36
+
37
+ /* 32-bit integer safe adder */
38
+ function add(x, y) {
39
+ var lsb = (x & 0xffff) + (y & 0xffff),
40
+ msb = (x >>> 16) + (y >>> 16) + (lsb >>> 16);
41
+ return (msb << 16) | (lsb & 0xffff);
42
+ }
43
+
44
+ /* initialisation */
45
+ function reset() {
46
+ acc = brs = cnt = 0;
47
+ for (var i = 0; i < 256; ++i)
48
+ m[i] = r[i] = 0;
49
+ gnt = 0;
50
+ }
51
+
52
+ /* seeding function */
53
+ function seed(s) {
54
+ var a, b, c, d, e, f, g, h, i;
55
+
56
+ /* seeding the seeds of love */
57
+ a = b = c = d = e = f = g = h = 0x9e3779b9; /* the golden ratio */
58
+
59
+ if (s && typeof(s) === 'number')
60
+ s = [s];
61
+
62
+ if (s instanceof Array) {
63
+ reset();
64
+ for (i = 0; i < s.length; ++i)
65
+ r[i & 0xff] += typeof(s[i]) === 'number' ? s[i] : 0;
66
+ }
67
+
68
+ /* private: seed mixer */
69
+ function seed_mix() {
70
+ a ^= b << 11; d = add(d, a); b = add(b, c);
71
+ b ^= c >>> 2; e = add(e, b); c = add(c, d);
72
+ c ^= d << 8; f = add(f, c); d = add(d, e);
73
+ d ^= e >>> 16; g = add(g, d); e = add(e, f);
74
+ e ^= f << 10; h = add(h, e); f = add(f, g);
75
+ f ^= g >>> 4; a = add(a, f); g = add(g, h);
76
+ g ^= h << 8; b = add(b, g); h = add(h, a);
77
+ h ^= a >>> 9; c = add(c, h); a = add(a, b);
78
+ }
79
+
80
+ for (i = 0; i < 4; i++) /* scramble it */
81
+ seed_mix();
82
+
83
+ for (i = 0; i < 256; i += 8) {
84
+ if (s) /* use all the information in the seed */
85
+ a = add(a, r[i + 0]), b = add(b, r[i + 1]),
86
+ c = add(c, r[i + 2]), d = add(d, r[i + 3]),
87
+ e = add(e, r[i + 4]), f = add(f, r[i + 5]),
88
+ g = add(g, r[i + 6]), h = add(h, r[i + 7]);
89
+ seed_mix();
90
+ /* fill in m[] with messy stuff */
91
+ m[i + 0] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d;
92
+ m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h;
93
+ }
94
+ if (s)
95
+ /* do a second pass to make all of the seed affect all of m[] */
96
+ for (i = 0; i < 256; i += 8)
97
+ a = add(a, m[i + 0]), b = add(b, m[i + 1]),
98
+ c = add(c, m[i + 2]), d = add(d, m[i + 3]),
99
+ e = add(e, m[i + 4]), f = add(f, m[i + 5]),
100
+ g = add(g, m[i + 6]), h = add(h, m[i + 7]),
101
+ seed_mix(),
102
+ /* fill in m[] with messy stuff (again) */
103
+ m[i + 0] = a, m[i + 1] = b, m[i + 2] = c, m[i + 3] = d,
104
+ m[i + 4] = e, m[i + 5] = f, m[i + 6] = g, m[i + 7] = h;
105
+ prng(); /* fill in the first set of results */
106
+ gnt = 256; /* prepare to use the first set of results */;
107
+ }
108
+
109
+ /* isaac generator, n = number of run */
110
+ function prng(n) {
111
+ var i, x, y;
112
+ n = n && typeof(n) === 'number' ? Math.abs(Math.floor(n)) : 1;
113
+ while (n--) {
114
+ cnt = add(cnt, 1);
115
+ brs = add(brs, cnt);
116
+ for(i = 0; i < 256; i++) {
117
+ switch(i & 3) {
118
+ case 0: acc ^= acc << 13; break;
119
+ case 1: acc ^= acc >>> 6; break;
120
+ case 2: acc ^= acc << 2; break;
121
+ case 3: acc ^= acc >>> 16; break;
122
+ }
123
+ acc = add(m[(i + 128) & 0xff], acc); x = m[i];
124
+ m[i] = y = add(m[(x >>> 2) & 0xff], add(acc, brs));
125
+ r[i] = brs = add(m[(y >>> 10) & 0xff], x);
126
+ }
127
+ }
128
+ }
129
+
130
+ /* return a random number between */
131
+ return function() {
132
+ if (!isd) // seed from accumulator
133
+ isd = true,
134
+ accum.stop(),
135
+ seed(accum.fetch());
136
+ if (!gnt--)
137
+ prng(), gnt = 255;
138
+ return r[gnt];
139
+ };
140
+ })();
node_modules/bcryptjs/src/bcrypt/util.js ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Continues with the callback on the next tick.
3
+ * @function
4
+ * @param {function(...[*])} callback Callback to execute
5
+ * @inner
6
+ */
7
+ var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'
8
+ ? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)
9
+ : setTimeout;
10
+
11
+ /**
12
+ * Converts a JavaScript string to UTF8 bytes.
13
+ * @param {string} str String
14
+ * @returns {!Array.<number>} UTF8 bytes
15
+ * @inner
16
+ */
17
+ function stringToBytes(str) {
18
+ var out = [],
19
+ i = 0;
20
+ utfx.encodeUTF16toUTF8(function() {
21
+ if (i >= str.length) return null;
22
+ return str.charCodeAt(i++);
23
+ }, function(b) {
24
+ out.push(b);
25
+ });
26
+ return out;
27
+ }
28
+
29
+ //? include("util/base64.js");
30
+
31
+ //? include("../../node_modules/utfx/dist/utfx-embeddable.js");
32
+
33
+ Date.now = Date.now || function() { return +new Date; };
node_modules/bcryptjs/src/bcrypt/util/base64.js ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // A base64 implementation for the bcrypt algorithm. This is partly non-standard.
2
+
3
+ /**
4
+ * bcrypt's own non-standard base64 dictionary.
5
+ * @type {!Array.<string>}
6
+ * @const
7
+ * @inner
8
+ **/
9
+ var BASE64_CODE = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split('');
10
+
11
+ /**
12
+ * @type {!Array.<number>}
13
+ * @const
14
+ * @inner
15
+ **/
16
+ var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
17
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
18
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
19
+ 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,
20
+ -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
21
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,
22
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
23
+ 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];
24
+
25
+ /**
26
+ * @type {!function(...number):string}
27
+ * @inner
28
+ */
29
+ var stringFromCharCode = String.fromCharCode;
30
+
31
+ /**
32
+ * Encodes a byte array to base64 with up to len bytes of input.
33
+ * @param {!Array.<number>} b Byte array
34
+ * @param {number} len Maximum input length
35
+ * @returns {string}
36
+ * @inner
37
+ */
38
+ function base64_encode(b, len) {
39
+ var off = 0,
40
+ rs = [],
41
+ c1, c2;
42
+ if (len <= 0 || len > b.length)
43
+ throw Error("Illegal len: "+len);
44
+ while (off < len) {
45
+ c1 = b[off++] & 0xff;
46
+ rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);
47
+ c1 = (c1 & 0x03) << 4;
48
+ if (off >= len) {
49
+ rs.push(BASE64_CODE[c1 & 0x3f]);
50
+ break;
51
+ }
52
+ c2 = b[off++] & 0xff;
53
+ c1 |= (c2 >> 4) & 0x0f;
54
+ rs.push(BASE64_CODE[c1 & 0x3f]);
55
+ c1 = (c2 & 0x0f) << 2;
56
+ if (off >= len) {
57
+ rs.push(BASE64_CODE[c1 & 0x3f]);
58
+ break;
59
+ }
60
+ c2 = b[off++] & 0xff;
61
+ c1 |= (c2 >> 6) & 0x03;
62
+ rs.push(BASE64_CODE[c1 & 0x3f]);
63
+ rs.push(BASE64_CODE[c2 & 0x3f]);
64
+ }
65
+ return rs.join('');
66
+ }
67
+
68
+ /**
69
+ * Decodes a base64 encoded string to up to len bytes of output.
70
+ * @param {string} s String to decode
71
+ * @param {number} len Maximum output length
72
+ * @returns {!Array.<number>}
73
+ * @inner
74
+ */
75
+ function base64_decode(s, len) {
76
+ var off = 0,
77
+ slen = s.length,
78
+ olen = 0,
79
+ rs = [],
80
+ c1, c2, c3, c4, o, code;
81
+ if (len <= 0)
82
+ throw Error("Illegal len: "+len);
83
+ while (off < slen - 1 && olen < len) {
84
+ code = s.charCodeAt(off++);
85
+ c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
86
+ code = s.charCodeAt(off++);
87
+ c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
88
+ if (c1 == -1 || c2 == -1)
89
+ break;
90
+ o = (c1 << 2) >>> 0;
91
+ o |= (c2 & 0x30) >> 4;
92
+ rs.push(stringFromCharCode(o));
93
+ if (++olen >= len || off >= slen)
94
+ break;
95
+ code = s.charCodeAt(off++);
96
+ c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
97
+ if (c3 == -1)
98
+ break;
99
+ o = ((c2 & 0x0f) << 4) >>> 0;
100
+ o |= (c3 & 0x3c) >> 2;
101
+ rs.push(stringFromCharCode(o));
102
+ if (++olen >= len || off >= slen)
103
+ break;
104
+ code = s.charCodeAt(off++);
105
+ c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
106
+ o = ((c3 & 0x03) << 6) >>> 0;
107
+ o |= c4;
108
+ rs.push(stringFromCharCode(o));
109
+ ++olen;
110
+ }
111
+ var res = [];
112
+ for (off = 0; off<olen; off++)
113
+ res.push(rs[off].charCodeAt(0));
114
+ return res;
115
+ }
node_modules/bcryptjs/src/bower.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "bcryptjs",
3
+ "description": "Optimized bcrypt in plain JavaScript with zero dependencies.",
4
+ "version": /*?== VERSION */,
5
+ "main": "dist/bcrypt.min.js",
6
+ "license": "New-BSD",
7
+ "homepage": "http://dcode.io/",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git://github.com/dcodeIO/bcrypt.js.git"
11
+ },
12
+ "keywords": ["bcrypt", "password", "auth", "authentication", "encryption", "crypt", "crypto"],
13
+ "dependencies": {},
14
+ "devDependencies": {},
15
+ "ignore": [
16
+ "**/.*",
17
+ "node_modules",
18
+ "bower_components",
19
+ "test",
20
+ "tests"
21
+ ]
22
+ }
node_modules/bcryptjs/src/wrap.js ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //? if (typeof ISAAC === 'undefined') ISAAC = false;
2
+ /*
3
+ Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
4
+ Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
5
+ Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
6
+
7
+ Redistribution and use in source and binary forms, with or without
8
+ modification, are permitted provided that the following conditions
9
+ are met:
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+ 2. Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+ 3. The name of the author may not be used to endorse or promote products
16
+ derived from this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ /**
31
+ * @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
32
+ * Released under the Apache License, Version 2.0
33
+ * see: https://github.com/dcodeIO/bcrypt.js for details
34
+ */
35
+ (function(global, factory) {
36
+
37
+ /* AMD */ if (typeof define === 'function' && define["amd"])
38
+ define([], factory);
39
+ /* CommonJS */ else if (typeof require === 'function' && typeof module === "object" && module && module["exports"])
40
+ module["exports"] = factory();
41
+ /* Global */ else
42
+ (global["dcodeIO"] = global["dcodeIO"] || {})["bcrypt"] = factory();
43
+
44
+ }(this, function() {
45
+ "use strict";
46
+
47
+ //? include("bcrypt.js");
48
+
49
+ return bcrypt;
50
+ }));
node_modules/bcryptjs/tests/quickbrown.txt ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Sentences that contain all letters commonly used in a language
2
+ --------------------------------------------------------------
3
+
4
+ Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -- 2012-04-11
5
+
6
+ This is an example of a plain-text file encoded in UTF-8.
7
+
8
+
9
+ Danish (da)
10
+ ---------
11
+
12
+ Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen
13
+ Wolther spillede på xylofon.
14
+ (= Quiz contestants were eating strawbery with cream while Wolther
15
+ the circus clown played on xylophone.)
16
+
17
+ German (de)
18
+ -----------
19
+
20
+ Falsches Üben von Xylophonmusik quält jeden größeren Zwerg
21
+ (= Wrongful practicing of xylophone music tortures every larger dwarf)
22
+
23
+ Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich
24
+ (= Twelve boxing fighters hunted Eva across the dike of Sylt)
25
+
26
+ Heizölrückstoßabdämpfung
27
+ (= fuel oil recoil absorber)
28
+ (jqvwxy missing, but all non-ASCII letters in one word)
29
+
30
+ Greek (el)
31
+ ----------
32
+
33
+ Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο
34
+ (= No more shall I see acacias or myrtles in the golden clearing)
35
+
36
+ Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία
37
+ (= I uncover the soul-destroying abhorrence)
38
+
39
+ English (en)
40
+ ------------
41
+
42
+ The quick brown fox jumps over the lazy dog
43
+
44
+ Spanish (es)
45
+ ------------
46
+
47
+ El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y
48
+ frío, añoraba a su querido cachorro.
49
+ (Contains every letter and every accent, but not every combination
50
+ of vowel + acute.)
51
+
52
+ French (fr)
53
+ -----------
54
+
55
+ Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à
56
+ côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce
57
+ qui lui permet de penser à la cænogenèse de l'être dont il est question
58
+ dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui,
59
+ pense-t-il, diminue çà et là la qualité de son œuvre.
60
+
61
+ l'île exiguë
62
+ Où l'obèse jury mûr
63
+ Fête l'haï volapük,
64
+ Âne ex aéquo au whist,
65
+ Ôtez ce vœu déçu.
66
+
67
+ Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en
68
+ canoë au delà des îles, près du mälström où brûlent les novæ.
69
+
70
+ Irish Gaelic (ga)
71
+ -----------------
72
+
73
+ D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh
74
+
75
+ Hungarian (hu)
76
+ --------------
77
+
78
+ Árvíztűrő tükörfúrógép
79
+ (= flood-proof mirror-drilling machine, only all non-ASCII letters)
80
+
81
+ Icelandic (is)
82
+ --------------
83
+
84
+ Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa
85
+
86
+ Sævör grét áðan því úlpan var ónýt
87
+ (some ASCII letters missing)
88
+
89
+ Japanese (jp)
90
+ -------------
91
+
92
+ Hiragana: (Iroha)
93
+
94
+ いろはにほへとちりぬるを
95
+ わかよたれそつねならむ
96
+ うゐのおくやまけふこえて
97
+ あさきゆめみしゑひもせす
98
+
99
+ Katakana:
100
+
101
+ イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム
102
+ ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン
103
+
104
+ Hebrew (iw)
105
+ -----------
106
+
107
+ ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה
108
+
109
+ Polish (pl)
110
+ -----------
111
+
112
+ Pchnąć w tę łódź jeża lub ośm skrzyń fig
113
+ (= To push a hedgehog or eight bins of figs in this boat)
114
+
115
+ Russian (ru)
116
+ ------------
117
+
118
+ В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!
119
+ (= Would a citrus live in the bushes of south? Yes, but only a fake one!)
120
+
121
+ Съешь же ещё этих мягких французских булок да выпей чаю
122
+ (= Eat some more of these fresh French loafs and have some tea)
123
+
124
+ Thai (th)
125
+ ---------
126
+
127
+ [--------------------------|------------------------]
128
+ ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน
129
+ จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
130
+ ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย
131
+ ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ
132
+
133
+ [The copyright for the Thai example is owned by The Computer
134
+ Association of Thailand under the Royal Patronage of His Majesty the
135
+ King.]
136
+
137
+ Turkish (tr)
138
+ ------------
139
+
140
+ Pijamalı hasta, yağız şoföre çabucak güvendi.
141
+ (=Patient with pajamas, trusted swarthy driver quickly)
142
+
143
+
144
+ Special thanks to the people from all over the world who contributed
145
+ these sentences since 1999.
146
+
147
+ A much larger collection of such pangrams is now available at
148
+
149
+ http://en.wikipedia.org/wiki/List_of_pangrams
150
+
node_modules/bcryptjs/tests/suite.js ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var path = require("path"),
2
+ fs = require("fs"),
3
+ binding = require("bcrypt"),
4
+ bcrypt = require(path.join(__dirname, '..', 'index.js'))/*,
5
+ isaac = eval(
6
+ fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "accum.js"))+
7
+ fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "isaac.js"))+
8
+ " accum.start();"+
9
+ " isaac"
10
+ )*/;
11
+
12
+ module.exports = {
13
+
14
+ "encodeBase64": function(test) {
15
+ var str = bcrypt.encodeBase64([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10], 16);
16
+ test.strictEqual(str, "..CA.uOD/eaGAOmJB.yMBu");
17
+ test.done();
18
+ },
19
+
20
+ "decodeBase64": function(test) {
21
+ var bytes = bcrypt.decodeBase64("..CA.uOD/eaGAOmJB.yMBv.", 16);
22
+ test.deepEqual(bytes, [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]);
23
+ test.done();
24
+ },
25
+
26
+ "genSaltSync": function(test) {
27
+ var salt = bcrypt.genSaltSync(10);
28
+ test.ok(salt);
29
+ test.ok(typeof salt == 'string');
30
+ test.ok(salt.length > 0);
31
+ test.done();
32
+ },
33
+
34
+ "genSalt": function(test) {
35
+ bcrypt.genSalt(10, function(err, salt) {
36
+ test.ok(salt);
37
+ test.ok(typeof salt == 'string');
38
+ test.ok(salt.length > 0);
39
+ test.done();
40
+ });
41
+ },
42
+
43
+ "hashSync": function(test) {
44
+ test.doesNotThrow(function() {
45
+ bcrypt.hashSync("hello", 10);
46
+ });
47
+ test.notEqual(bcrypt.hashSync("hello", 10), bcrypt.hashSync("hello", 10));
48
+ test.done();
49
+ },
50
+
51
+ "hash": function(test) {
52
+ bcrypt.hash("hello", 10, function(err, hash) {
53
+ test.notOk(err);
54
+ test.ok(hash);
55
+ test.done();
56
+ });
57
+ },
58
+
59
+ "compareSync": function(test) {
60
+ var salt1 = bcrypt.genSaltSync(),
61
+ hash1 = bcrypt.hashSync("hello", salt1); // $2a$
62
+ var salt2 = bcrypt.genSaltSync().replace(/\$2a\$/, "$2y$"),
63
+ hash2 = bcrypt.hashSync("world", salt2);
64
+ var salt3 = bcrypt.genSaltSync().replace(/\$2a\$/, "$2b$"),
65
+ hash3 = bcrypt.hashSync("hello world", salt3);
66
+
67
+ test.strictEqual(hash1.substring(0,4), "$2a$");
68
+ test.ok(bcrypt.compareSync("hello", hash1));
69
+ test.notOk(bcrypt.compareSync("hello", hash2));
70
+ test.notOk(bcrypt.compareSync("hello", hash3));
71
+
72
+ test.strictEqual(hash2.substring(0,4), "$2y$");
73
+ test.ok(bcrypt.compareSync("world", hash2));
74
+ test.notOk(bcrypt.compareSync("world", hash1));
75
+ test.notOk(bcrypt.compareSync("world", hash3));
76
+
77
+ test.strictEqual(hash3.substring(0,4), "$2b$");
78
+ test.ok(bcrypt.compareSync("hello world", hash3));
79
+ test.notOk(bcrypt.compareSync("hello world", hash1));
80
+ test.notOk(bcrypt.compareSync("hello world", hash2));
81
+
82
+ test.done();
83
+ },
84
+
85
+ "compare": function(test) {
86
+ var salt1 = bcrypt.genSaltSync(),
87
+ hash1 = bcrypt.hashSync("hello", salt1); // $2a$
88
+ var salt2 = bcrypt.genSaltSync();
89
+ salt2 = salt2.substring(0,2)+'y'+salt2.substring(3); // $2y$
90
+ var hash2 = bcrypt.hashSync("world", salt2);
91
+ bcrypt.compare("hello", hash1, function(err, same) {
92
+ test.notOk(err);
93
+ test.ok(same);
94
+ bcrypt.compare("hello", hash2, function(err, same) {
95
+ test.notOk(err);
96
+ test.notOk(same);
97
+ bcrypt.compare("world", hash2, function(err, same) {
98
+ test.notOk(err);
99
+ test.ok(same);
100
+ bcrypt.compare("world", hash1, function(err, same) {
101
+ test.notOk(err);
102
+ test.notOk(same);
103
+ test.done();
104
+ });
105
+ });
106
+ });
107
+ });
108
+ },
109
+
110
+ "getSalt": function(test) {
111
+ var hash1 = bcrypt.hashSync("hello", bcrypt.genSaltSync());
112
+ var salt = bcrypt.getSalt(hash1);
113
+ var hash2 = bcrypt.hashSync("hello", salt);
114
+ test.equal(hash1, hash2);
115
+ test.done();
116
+ },
117
+
118
+ "getRounds": function(test) {
119
+ var hash1 = bcrypt.hashSync("hello", bcrypt.genSaltSync());
120
+ test.equal(bcrypt.getRounds(hash1), 10);
121
+ test.done();
122
+ },
123
+
124
+ "progress": function(test) {
125
+ bcrypt.genSalt(12, function(err, salt) {
126
+ test.ok(!err);
127
+ var progress = [];
128
+ bcrypt.hash("hello world", salt, function(err, hash) {
129
+ test.ok(!err);
130
+ test.ok(typeof hash === 'string');
131
+ test.ok(progress.length >= 2);
132
+ test.strictEqual(progress[0], 0);
133
+ test.strictEqual(progress[progress.length-1], 1);
134
+ test.done();
135
+ }, function(n) {
136
+ progress.push(n);
137
+ });
138
+ });
139
+ },
140
+
141
+ "promise": function(test) {
142
+ bcrypt.genSalt(10)
143
+ .then(function(salt) {
144
+ bcrypt.hash("hello", salt)
145
+ .then(function(hash) {
146
+ test.ok(hash);
147
+ bcrypt.compare("hello", hash)
148
+ .then(function(result) {
149
+ test.ok(result);
150
+ bcrypt.genSalt(/* no args */)
151
+ .then(function(salt) {
152
+ test.ok(salt);
153
+ test.done();
154
+ }, function(err) {
155
+ test.fail(err, null, "promise rejected");
156
+ });
157
+ }, function(err) {
158
+ test.fail(err, null, "promise rejected");
159
+ });
160
+ }, function(err) {
161
+ test.fail(err, null, 'promise rejected');
162
+ });
163
+ }, function(err) {
164
+ test.fail(err, null, "promise rejected");
165
+ });
166
+ },
167
+
168
+ "compat": {
169
+ "quickbrown": function(test) {
170
+ var pass = fs.readFileSync(path.join(__dirname, "quickbrown.txt"))+"",
171
+ salt = bcrypt.genSaltSync(),
172
+ hash1 = binding.hashSync(pass, salt),
173
+ hash2 = bcrypt.hashSync(pass, salt);
174
+ test.equal(hash1, hash2);
175
+ test.done();
176
+ },
177
+
178
+ "roundsOOB": function(test) {
179
+ var salt1 = bcrypt.genSaltSync(0), // $10$ like not set
180
+ salt2 = binding.genSaltSync(0);
181
+ test.strictEqual(salt1.substring(0, 7), "$2a$10$");
182
+ test.strictEqual(salt2.substring(0, 7), "$2a$10$");
183
+
184
+ salt1 = bcrypt.genSaltSync(3); // $04$ is lower cap
185
+ salt2 = bcrypt.genSaltSync(3);
186
+ test.strictEqual(salt1.substring(0, 7), "$2a$04$");
187
+ test.strictEqual(salt2.substring(0, 7), "$2a$04$");
188
+
189
+ salt1 = bcrypt.genSaltSync(32); // $31$ is upper cap
190
+ salt2 = bcrypt.genSaltSync(32);
191
+ test.strictEqual(salt1.substring(0, 7), "$2a$31$");
192
+ test.strictEqual(salt2.substring(0, 7), "$2a$31$");
193
+
194
+ test.done();
195
+ }
196
+ }
197
+ };
node_modules/body-parser/HISTORY.md ADDED
@@ -0,0 +1,686 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1.20.5 / 2026-04-24
2
+ ===================
3
+ * refactor(json): simplify strict mode error string construction
4
+ * fix: extended urlencoded parsing of arrays with >100 elements (#716)
5
+ * deps: qs@~6.15.1
6
+
7
+ 1.20.4 / 2025-12-01
8
+ ===================
9
+
10
+ * deps: qs@~6.14.0
11
+ * deps: use tilde notation for dependencies
12
+ * deps: http-errors@~2.0.1
13
+ * deps: raw-body@~2.5.3
14
+
15
+ 1.20.3 / 2024-09-10
16
+ ===================
17
+
18
+ * deps: qs@6.13.0
19
+ * add `depth` option to customize the depth level in the parser
20
+ * IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`)
21
+
22
+ 1.20.2 / 2023-02-21
23
+ ===================
24
+
25
+ * Fix strict json error message on Node.js 19+
26
+ * deps: content-type@~1.0.5
27
+ - perf: skip value escaping when unnecessary
28
+ * deps: raw-body@2.5.2
29
+
30
+ 1.20.1 / 2022-10-06
31
+ ===================
32
+
33
+ * deps: qs@6.11.0
34
+ * perf: remove unnecessary object clone
35
+
36
+ 1.20.0 / 2022-04-02
37
+ ===================
38
+
39
+ * Fix error message for json parse whitespace in `strict`
40
+ * Fix internal error when inflated body exceeds limit
41
+ * Prevent loss of async hooks context
42
+ * Prevent hanging when request already read
43
+ * deps: depd@2.0.0
44
+ - Replace internal `eval` usage with `Function` constructor
45
+ - Use instance methods on `process` to check for listeners
46
+ * deps: http-errors@2.0.0
47
+ - deps: depd@2.0.0
48
+ - deps: statuses@2.0.1
49
+ * deps: on-finished@2.4.1
50
+ * deps: qs@6.10.3
51
+ * deps: raw-body@2.5.1
52
+ - deps: http-errors@2.0.0
53
+
54
+ 1.19.2 / 2022-02-15
55
+ ===================
56
+
57
+ * deps: bytes@3.1.2
58
+ * deps: qs@6.9.7
59
+ * Fix handling of `__proto__` keys
60
+ * deps: raw-body@2.4.3
61
+ - deps: bytes@3.1.2
62
+
63
+ 1.19.1 / 2021-12-10
64
+ ===================
65
+
66
+ * deps: bytes@3.1.1
67
+ * deps: http-errors@1.8.1
68
+ - deps: inherits@2.0.4
69
+ - deps: toidentifier@1.0.1
70
+ - deps: setprototypeof@1.2.0
71
+ * deps: qs@6.9.6
72
+ * deps: raw-body@2.4.2
73
+ - deps: bytes@3.1.1
74
+ - deps: http-errors@1.8.1
75
+ * deps: safe-buffer@5.2.1
76
+ * deps: type-is@~1.6.18
77
+
78
+ 1.19.0 / 2019-04-25
79
+ ===================
80
+
81
+ * deps: bytes@3.1.0
82
+ - Add petabyte (`pb`) support
83
+ * deps: http-errors@1.7.2
84
+ - Set constructor name when possible
85
+ - deps: setprototypeof@1.1.1
86
+ - deps: statuses@'>= 1.5.0 < 2'
87
+ * deps: iconv-lite@0.4.24
88
+ - Added encoding MIK
89
+ * deps: qs@6.7.0
90
+ - Fix parsing array brackets after index
91
+ * deps: raw-body@2.4.0
92
+ - deps: bytes@3.1.0
93
+ - deps: http-errors@1.7.2
94
+ - deps: iconv-lite@0.4.24
95
+ * deps: type-is@~1.6.17
96
+ - deps: mime-types@~2.1.24
97
+ - perf: prevent internal `throw` on invalid type
98
+
99
+ 1.18.3 / 2018-05-14
100
+ ===================
101
+
102
+ * Fix stack trace for strict json parse error
103
+ * deps: depd@~1.1.2
104
+ - perf: remove argument reassignment
105
+ * deps: http-errors@~1.6.3
106
+ - deps: depd@~1.1.2
107
+ - deps: setprototypeof@1.1.0
108
+ - deps: statuses@'>= 1.3.1 < 2'
109
+ * deps: iconv-lite@0.4.23
110
+ - Fix loading encoding with year appended
111
+ - Fix deprecation warnings on Node.js 10+
112
+ * deps: qs@6.5.2
113
+ * deps: raw-body@2.3.3
114
+ - deps: http-errors@1.6.3
115
+ - deps: iconv-lite@0.4.23
116
+ * deps: type-is@~1.6.16
117
+ - deps: mime-types@~2.1.18
118
+
119
+ 1.18.2 / 2017-09-22
120
+ ===================
121
+
122
+ * deps: debug@2.6.9
123
+ * perf: remove argument reassignment
124
+
125
+ 1.18.1 / 2017-09-12
126
+ ===================
127
+
128
+ * deps: content-type@~1.0.4
129
+ - perf: remove argument reassignment
130
+ - perf: skip parameter parsing when no parameters
131
+ * deps: iconv-lite@0.4.19
132
+ - Fix ISO-8859-1 regression
133
+ - Update Windows-1255
134
+ * deps: qs@6.5.1
135
+ - Fix parsing & compacting very deep objects
136
+ * deps: raw-body@2.3.2
137
+ - deps: iconv-lite@0.4.19
138
+
139
+ 1.18.0 / 2017-09-08
140
+ ===================
141
+
142
+ * Fix JSON strict violation error to match native parse error
143
+ * Include the `body` property on verify errors
144
+ * Include the `type` property on all generated errors
145
+ * Use `http-errors` to set status code on errors
146
+ * deps: bytes@3.0.0
147
+ * deps: debug@2.6.8
148
+ * deps: depd@~1.1.1
149
+ - Remove unnecessary `Buffer` loading
150
+ * deps: http-errors@~1.6.2
151
+ - deps: depd@1.1.1
152
+ * deps: iconv-lite@0.4.18
153
+ - Add support for React Native
154
+ - Add a warning if not loaded as utf-8
155
+ - Fix CESU-8 decoding in Node.js 8
156
+ - Improve speed of ISO-8859-1 encoding
157
+ * deps: qs@6.5.0
158
+ * deps: raw-body@2.3.1
159
+ - Use `http-errors` for standard emitted errors
160
+ - deps: bytes@3.0.0
161
+ - deps: iconv-lite@0.4.18
162
+ - perf: skip buffer decoding on overage chunk
163
+ * perf: prevent internal `throw` when missing charset
164
+
165
+ 1.17.2 / 2017-05-17
166
+ ===================
167
+
168
+ * deps: debug@2.6.7
169
+ - Fix `DEBUG_MAX_ARRAY_LENGTH`
170
+ - deps: ms@2.0.0
171
+ * deps: type-is@~1.6.15
172
+ - deps: mime-types@~2.1.15
173
+
174
+ 1.17.1 / 2017-03-06
175
+ ===================
176
+
177
+ * deps: qs@6.4.0
178
+ - Fix regression parsing keys starting with `[`
179
+
180
+ 1.17.0 / 2017-03-01
181
+ ===================
182
+
183
+ * deps: http-errors@~1.6.1
184
+ - Make `message` property enumerable for `HttpError`s
185
+ - deps: setprototypeof@1.0.3
186
+ * deps: qs@6.3.1
187
+ - Fix compacting nested arrays
188
+
189
+ 1.16.1 / 2017-02-10
190
+ ===================
191
+
192
+ * deps: debug@2.6.1
193
+ - Fix deprecation messages in WebStorm and other editors
194
+ - Undeprecate `DEBUG_FD` set to `1` or `2`
195
+
196
+ 1.16.0 / 2017-01-17
197
+ ===================
198
+
199
+ * deps: debug@2.6.0
200
+ - Allow colors in workers
201
+ - Deprecated `DEBUG_FD` environment variable
202
+ - Fix error when running under React Native
203
+ - Use same color for same namespace
204
+ - deps: ms@0.7.2
205
+ * deps: http-errors@~1.5.1
206
+ - deps: inherits@2.0.3
207
+ - deps: setprototypeof@1.0.2
208
+ - deps: statuses@'>= 1.3.1 < 2'
209
+ * deps: iconv-lite@0.4.15
210
+ - Added encoding MS-31J
211
+ - Added encoding MS-932
212
+ - Added encoding MS-936
213
+ - Added encoding MS-949
214
+ - Added encoding MS-950
215
+ - Fix GBK/GB18030 handling of Euro character
216
+ * deps: qs@6.2.1
217
+ - Fix array parsing from skipping empty values
218
+ * deps: raw-body@~2.2.0
219
+ - deps: iconv-lite@0.4.15
220
+ * deps: type-is@~1.6.14
221
+ - deps: mime-types@~2.1.13
222
+
223
+ 1.15.2 / 2016-06-19
224
+ ===================
225
+
226
+ * deps: bytes@2.4.0
227
+ * deps: content-type@~1.0.2
228
+ - perf: enable strict mode
229
+ * deps: http-errors@~1.5.0
230
+ - Use `setprototypeof` module to replace `__proto__` setting
231
+ - deps: statuses@'>= 1.3.0 < 2'
232
+ - perf: enable strict mode
233
+ * deps: qs@6.2.0
234
+ * deps: raw-body@~2.1.7
235
+ - deps: bytes@2.4.0
236
+ - perf: remove double-cleanup on happy path
237
+ * deps: type-is@~1.6.13
238
+ - deps: mime-types@~2.1.11
239
+
240
+ 1.15.1 / 2016-05-05
241
+ ===================
242
+
243
+ * deps: bytes@2.3.0
244
+ - Drop partial bytes on all parsed units
245
+ - Fix parsing byte string that looks like hex
246
+ * deps: raw-body@~2.1.6
247
+ - deps: bytes@2.3.0
248
+ * deps: type-is@~1.6.12
249
+ - deps: mime-types@~2.1.10
250
+
251
+ 1.15.0 / 2016-02-10
252
+ ===================
253
+
254
+ * deps: http-errors@~1.4.0
255
+ - Add `HttpError` export, for `err instanceof createError.HttpError`
256
+ - deps: inherits@2.0.1
257
+ - deps: statuses@'>= 1.2.1 < 2'
258
+ * deps: qs@6.1.0
259
+ * deps: type-is@~1.6.11
260
+ - deps: mime-types@~2.1.9
261
+
262
+ 1.14.2 / 2015-12-16
263
+ ===================
264
+
265
+ * deps: bytes@2.2.0
266
+ * deps: iconv-lite@0.4.13
267
+ * deps: qs@5.2.0
268
+ * deps: raw-body@~2.1.5
269
+ - deps: bytes@2.2.0
270
+ - deps: iconv-lite@0.4.13
271
+ * deps: type-is@~1.6.10
272
+ - deps: mime-types@~2.1.8
273
+
274
+ 1.14.1 / 2015-09-27
275
+ ===================
276
+
277
+ * Fix issue where invalid charset results in 400 when `verify` used
278
+ * deps: iconv-lite@0.4.12
279
+ - Fix CESU-8 decoding in Node.js 4.x
280
+ * deps: raw-body@~2.1.4
281
+ - Fix masking critical errors from `iconv-lite`
282
+ - deps: iconv-lite@0.4.12
283
+ * deps: type-is@~1.6.9
284
+ - deps: mime-types@~2.1.7
285
+
286
+ 1.14.0 / 2015-09-16
287
+ ===================
288
+
289
+ * Fix JSON strict parse error to match syntax errors
290
+ * Provide static `require` analysis in `urlencoded` parser
291
+ * deps: depd@~1.1.0
292
+ - Support web browser loading
293
+ * deps: qs@5.1.0
294
+ * deps: raw-body@~2.1.3
295
+ - Fix sync callback when attaching data listener causes sync read
296
+ * deps: type-is@~1.6.8
297
+ - Fix type error when given invalid type to match against
298
+ - deps: mime-types@~2.1.6
299
+
300
+ 1.13.3 / 2015-07-31
301
+ ===================
302
+
303
+ * deps: type-is@~1.6.6
304
+ - deps: mime-types@~2.1.4
305
+
306
+ 1.13.2 / 2015-07-05
307
+ ===================
308
+
309
+ * deps: iconv-lite@0.4.11
310
+ * deps: qs@4.0.0
311
+ - Fix dropping parameters like `hasOwnProperty`
312
+ - Fix user-visible incompatibilities from 3.1.0
313
+ - Fix various parsing edge cases
314
+ * deps: raw-body@~2.1.2
315
+ - Fix error stack traces to skip `makeError`
316
+ - deps: iconv-lite@0.4.11
317
+ * deps: type-is@~1.6.4
318
+ - deps: mime-types@~2.1.2
319
+ - perf: enable strict mode
320
+ - perf: remove argument reassignment
321
+
322
+ 1.13.1 / 2015-06-16
323
+ ===================
324
+
325
+ * deps: qs@2.4.2
326
+ - Downgraded from 3.1.0 because of user-visible incompatibilities
327
+
328
+ 1.13.0 / 2015-06-14
329
+ ===================
330
+
331
+ * Add `statusCode` property on `Error`s, in addition to `status`
332
+ * Change `type` default to `application/json` for JSON parser
333
+ * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
334
+ * Provide static `require` analysis
335
+ * Use the `http-errors` module to generate errors
336
+ * deps: bytes@2.1.0
337
+ - Slight optimizations
338
+ * deps: iconv-lite@0.4.10
339
+ - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
340
+ - Leading BOM is now removed when decoding
341
+ * deps: on-finished@~2.3.0
342
+ - Add defined behavior for HTTP `CONNECT` requests
343
+ - Add defined behavior for HTTP `Upgrade` requests
344
+ - deps: ee-first@1.1.1
345
+ * deps: qs@3.1.0
346
+ - Fix dropping parameters like `hasOwnProperty`
347
+ - Fix various parsing edge cases
348
+ - Parsed object now has `null` prototype
349
+ * deps: raw-body@~2.1.1
350
+ - Use `unpipe` module for unpiping requests
351
+ - deps: iconv-lite@0.4.10
352
+ * deps: type-is@~1.6.3
353
+ - deps: mime-types@~2.1.1
354
+ - perf: reduce try block size
355
+ - perf: remove bitwise operations
356
+ * perf: enable strict mode
357
+ * perf: remove argument reassignment
358
+ * perf: remove delete call
359
+
360
+ 1.12.4 / 2015-05-10
361
+ ===================
362
+
363
+ * deps: debug@~2.2.0
364
+ * deps: qs@2.4.2
365
+ - Fix allowing parameters like `constructor`
366
+ * deps: on-finished@~2.2.1
367
+ * deps: raw-body@~2.0.1
368
+ - Fix a false-positive when unpiping in Node.js 0.8
369
+ - deps: bytes@2.0.1
370
+ * deps: type-is@~1.6.2
371
+ - deps: mime-types@~2.0.11
372
+
373
+ 1.12.3 / 2015-04-15
374
+ ===================
375
+
376
+ * Slight efficiency improvement when not debugging
377
+ * deps: depd@~1.0.1
378
+ * deps: iconv-lite@0.4.8
379
+ - Add encoding alias UNICODE-1-1-UTF-7
380
+ * deps: raw-body@1.3.4
381
+ - Fix hanging callback if request aborts during read
382
+ - deps: iconv-lite@0.4.8
383
+
384
+ 1.12.2 / 2015-03-16
385
+ ===================
386
+
387
+ * deps: qs@2.4.1
388
+ - Fix error when parameter `hasOwnProperty` is present
389
+
390
+ 1.12.1 / 2015-03-15
391
+ ===================
392
+
393
+ * deps: debug@~2.1.3
394
+ - Fix high intensity foreground color for bold
395
+ - deps: ms@0.7.0
396
+ * deps: type-is@~1.6.1
397
+ - deps: mime-types@~2.0.10
398
+
399
+ 1.12.0 / 2015-02-13
400
+ ===================
401
+
402
+ * add `debug` messages
403
+ * accept a function for the `type` option
404
+ * use `content-type` to parse `Content-Type` headers
405
+ * deps: iconv-lite@0.4.7
406
+ - Gracefully support enumerables on `Object.prototype`
407
+ * deps: raw-body@1.3.3
408
+ - deps: iconv-lite@0.4.7
409
+ * deps: type-is@~1.6.0
410
+ - fix argument reassignment
411
+ - fix false-positives in `hasBody` `Transfer-Encoding` check
412
+ - support wildcard for both type and subtype (`*/*`)
413
+ - deps: mime-types@~2.0.9
414
+
415
+ 1.11.0 / 2015-01-30
416
+ ===================
417
+
418
+ * make internal `extended: true` depth limit infinity
419
+ * deps: type-is@~1.5.6
420
+ - deps: mime-types@~2.0.8
421
+
422
+ 1.10.2 / 2015-01-20
423
+ ===================
424
+
425
+ * deps: iconv-lite@0.4.6
426
+ - Fix rare aliases of single-byte encodings
427
+ * deps: raw-body@1.3.2
428
+ - deps: iconv-lite@0.4.6
429
+
430
+ 1.10.1 / 2015-01-01
431
+ ===================
432
+
433
+ * deps: on-finished@~2.2.0
434
+ * deps: type-is@~1.5.5
435
+ - deps: mime-types@~2.0.7
436
+
437
+ 1.10.0 / 2014-12-02
438
+ ===================
439
+
440
+ * make internal `extended: true` array limit dynamic
441
+
442
+ 1.9.3 / 2014-11-21
443
+ ==================
444
+
445
+ * deps: iconv-lite@0.4.5
446
+ - Fix Windows-31J and X-SJIS encoding support
447
+ * deps: qs@2.3.3
448
+ - Fix `arrayLimit` behavior
449
+ * deps: raw-body@1.3.1
450
+ - deps: iconv-lite@0.4.5
451
+ * deps: type-is@~1.5.3
452
+ - deps: mime-types@~2.0.3
453
+
454
+ 1.9.2 / 2014-10-27
455
+ ==================
456
+
457
+ * deps: qs@2.3.2
458
+ - Fix parsing of mixed objects and values
459
+
460
+ 1.9.1 / 2014-10-22
461
+ ==================
462
+
463
+ * deps: on-finished@~2.1.1
464
+ - Fix handling of pipelined requests
465
+ * deps: qs@2.3.0
466
+ - Fix parsing of mixed implicit and explicit arrays
467
+ * deps: type-is@~1.5.2
468
+ - deps: mime-types@~2.0.2
469
+
470
+ 1.9.0 / 2014-09-24
471
+ ==================
472
+
473
+ * include the charset in "unsupported charset" error message
474
+ * include the encoding in "unsupported content encoding" error message
475
+ * deps: depd@~1.0.0
476
+
477
+ 1.8.4 / 2014-09-23
478
+ ==================
479
+
480
+ * fix content encoding to be case-insensitive
481
+
482
+ 1.8.3 / 2014-09-19
483
+ ==================
484
+
485
+ * deps: qs@2.2.4
486
+ - Fix issue with object keys starting with numbers truncated
487
+
488
+ 1.8.2 / 2014-09-15
489
+ ==================
490
+
491
+ * deps: depd@0.4.5
492
+
493
+ 1.8.1 / 2014-09-07
494
+ ==================
495
+
496
+ * deps: media-typer@0.3.0
497
+ * deps: type-is@~1.5.1
498
+
499
+ 1.8.0 / 2014-09-05
500
+ ==================
501
+
502
+ * make empty-body-handling consistent between chunked requests
503
+ - empty `json` produces `{}`
504
+ - empty `raw` produces `new Buffer(0)`
505
+ - empty `text` produces `''`
506
+ - empty `urlencoded` produces `{}`
507
+ * deps: qs@2.2.3
508
+ - Fix issue where first empty value in array is discarded
509
+ * deps: type-is@~1.5.0
510
+ - fix `hasbody` to be true for `content-length: 0`
511
+
512
+ 1.7.0 / 2014-09-01
513
+ ==================
514
+
515
+ * add `parameterLimit` option to `urlencoded` parser
516
+ * change `urlencoded` extended array limit to 100
517
+ * respond with 413 when over `parameterLimit` in `urlencoded`
518
+
519
+ 1.6.7 / 2014-08-29
520
+ ==================
521
+
522
+ * deps: qs@2.2.2
523
+ - Remove unnecessary cloning
524
+
525
+ 1.6.6 / 2014-08-27
526
+ ==================
527
+
528
+ * deps: qs@2.2.0
529
+ - Array parsing fix
530
+ - Performance improvements
531
+
532
+ 1.6.5 / 2014-08-16
533
+ ==================
534
+
535
+ * deps: on-finished@2.1.0
536
+
537
+ 1.6.4 / 2014-08-14
538
+ ==================
539
+
540
+ * deps: qs@1.2.2
541
+
542
+ 1.6.3 / 2014-08-10
543
+ ==================
544
+
545
+ * deps: qs@1.2.1
546
+
547
+ 1.6.2 / 2014-08-07
548
+ ==================
549
+
550
+ * deps: qs@1.2.0
551
+ - Fix parsing array of objects
552
+
553
+ 1.6.1 / 2014-08-06
554
+ ==================
555
+
556
+ * deps: qs@1.1.0
557
+ - Accept urlencoded square brackets
558
+ - Accept empty values in implicit array notation
559
+
560
+ 1.6.0 / 2014-08-05
561
+ ==================
562
+
563
+ * deps: qs@1.0.2
564
+ - Complete rewrite
565
+ - Limits array length to 20
566
+ - Limits object depth to 5
567
+ - Limits parameters to 1,000
568
+
569
+ 1.5.2 / 2014-07-27
570
+ ==================
571
+
572
+ * deps: depd@0.4.4
573
+ - Work-around v8 generating empty stack traces
574
+
575
+ 1.5.1 / 2014-07-26
576
+ ==================
577
+
578
+ * deps: depd@0.4.3
579
+ - Fix exception when global `Error.stackTraceLimit` is too low
580
+
581
+ 1.5.0 / 2014-07-20
582
+ ==================
583
+
584
+ * deps: depd@0.4.2
585
+ - Add `TRACE_DEPRECATION` environment variable
586
+ - Remove non-standard grey color from color output
587
+ - Support `--no-deprecation` argument
588
+ - Support `--trace-deprecation` argument
589
+ * deps: iconv-lite@0.4.4
590
+ - Added encoding UTF-7
591
+ * deps: raw-body@1.3.0
592
+ - deps: iconv-lite@0.4.4
593
+ - Added encoding UTF-7
594
+ - Fix `Cannot switch to old mode now` error on Node.js 0.10+
595
+ * deps: type-is@~1.3.2
596
+
597
+ 1.4.3 / 2014-06-19
598
+ ==================
599
+
600
+ * deps: type-is@1.3.1
601
+ - fix global variable leak
602
+
603
+ 1.4.2 / 2014-06-19
604
+ ==================
605
+
606
+ * deps: type-is@1.3.0
607
+ - improve type parsing
608
+
609
+ 1.4.1 / 2014-06-19
610
+ ==================
611
+
612
+ * fix urlencoded extended deprecation message
613
+
614
+ 1.4.0 / 2014-06-19
615
+ ==================
616
+
617
+ * add `text` parser
618
+ * add `raw` parser
619
+ * check accepted charset in content-type (accepts utf-8)
620
+ * check accepted encoding in content-encoding (accepts identity)
621
+ * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
622
+ * deprecate `urlencoded()` without provided `extended` option
623
+ * lazy-load urlencoded parsers
624
+ * parsers split into files for reduced mem usage
625
+ * support gzip and deflate bodies
626
+ - set `inflate: false` to turn off
627
+ * deps: raw-body@1.2.2
628
+ - Support all encodings from `iconv-lite`
629
+
630
+ 1.3.1 / 2014-06-11
631
+ ==================
632
+
633
+ * deps: type-is@1.2.1
634
+ - Switch dependency from mime to mime-types@1.0.0
635
+
636
+ 1.3.0 / 2014-05-31
637
+ ==================
638
+
639
+ * add `extended` option to urlencoded parser
640
+
641
+ 1.2.2 / 2014-05-27
642
+ ==================
643
+
644
+ * deps: raw-body@1.1.6
645
+ - assert stream encoding on node.js 0.8
646
+ - assert stream encoding on node.js < 0.10.6
647
+ - deps: bytes@1
648
+
649
+ 1.2.1 / 2014-05-26
650
+ ==================
651
+
652
+ * invoke `next(err)` after request fully read
653
+ - prevents hung responses and socket hang ups
654
+
655
+ 1.2.0 / 2014-05-11
656
+ ==================
657
+
658
+ * add `verify` option
659
+ * deps: type-is@1.2.0
660
+ - support suffix matching
661
+
662
+ 1.1.2 / 2014-05-11
663
+ ==================
664
+
665
+ * improve json parser speed
666
+
667
+ 1.1.1 / 2014-05-11
668
+ ==================
669
+
670
+ * fix repeated limit parsing with every request
671
+
672
+ 1.1.0 / 2014-05-10
673
+ ==================
674
+
675
+ * add `type` option
676
+ * deps: pin for safety and consistency
677
+
678
+ 1.0.2 / 2014-04-14
679
+ ==================
680
+
681
+ * use `type-is` module
682
+
683
+ 1.0.1 / 2014-03-20
684
+ ==================
685
+
686
+ * lower default limits to 100kb
node_modules/body-parser/LICENSE ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
4
+ Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ 'Software'), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
node_modules/body-parser/README.md ADDED
@@ -0,0 +1,476 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # body-parser
2
+
3
+ [![NPM Version][npm-version-image]][npm-url]
4
+ [![NPM Downloads][npm-downloads-image]][npm-url]
5
+ [![Build Status][ci-image]][ci-url]
6
+ [![Test Coverage][coveralls-image]][coveralls-url]
7
+ [![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer]
8
+
9
+ Node.js body parsing middleware.
10
+
11
+ Parse incoming request bodies in a middleware before your handlers, available
12
+ under the `req.body` property.
13
+
14
+ **Note** As `req.body`'s shape is based on user-controlled input, all
15
+ properties and values in this object are untrusted and should be validated
16
+ before trusting. For example, `req.body.foo.toString()` may fail in multiple
17
+ ways, for example the `foo` property may not be there or may not be a string,
18
+ and `toString` may not be a function and instead a string or other user input.
19
+
20
+ [Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
21
+
22
+ _This does not handle multipart bodies_, due to their complex and typically
23
+ large nature. For multipart bodies, you may be interested in the following
24
+ modules:
25
+
26
+ * [busboy](https://www.npmjs.org/package/busboy#readme) and
27
+ [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
28
+ * [multiparty](https://www.npmjs.org/package/multiparty#readme) and
29
+ [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
30
+ * [formidable](https://www.npmjs.org/package/formidable#readme)
31
+ * [multer](https://www.npmjs.org/package/multer#readme)
32
+
33
+ This module provides the following parsers:
34
+
35
+ * [JSON body parser](#bodyparserjsonoptions)
36
+ * [Raw body parser](#bodyparserrawoptions)
37
+ * [Text body parser](#bodyparsertextoptions)
38
+ * [URL-encoded form body parser](#bodyparserurlencodedoptions)
39
+
40
+ Other body parsers you might be interested in:
41
+
42
+ - [body](https://www.npmjs.org/package/body#readme)
43
+ - [co-body](https://www.npmjs.org/package/co-body#readme)
44
+
45
+ ## Installation
46
+
47
+ ```sh
48
+ $ npm install body-parser
49
+ ```
50
+
51
+ ## API
52
+
53
+ ```js
54
+ var bodyParser = require('body-parser')
55
+ ```
56
+
57
+ The `bodyParser` object exposes various factories to create middlewares. All
58
+ middlewares will populate the `req.body` property with the parsed body when
59
+ the `Content-Type` request header matches the `type` option, or an empty
60
+ object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
61
+ or an error occurred.
62
+
63
+ The various errors returned by this module are described in the
64
+ [errors section](#errors).
65
+
66
+ ### bodyParser.json([options])
67
+
68
+ Returns middleware that only parses `json` and only looks at requests where
69
+ the `Content-Type` header matches the `type` option. This parser accepts any
70
+ Unicode encoding of the body and supports automatic inflation of `gzip` and
71
+ `deflate` encodings.
72
+
73
+ A new `body` object containing the parsed data is populated on the `request`
74
+ object after the middleware (i.e. `req.body`).
75
+
76
+ #### Options
77
+
78
+ The `json` function takes an optional `options` object that may contain any of
79
+ the following keys:
80
+
81
+ ##### inflate
82
+
83
+ When set to `true`, then deflated (compressed) bodies will be inflated; when
84
+ `false`, deflated bodies are rejected. Defaults to `true`.
85
+
86
+ ##### limit
87
+
88
+ Controls the maximum request body size. If this is a number, then the value
89
+ specifies the number of bytes; if it is a string, the value is passed to the
90
+ [bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
91
+ to `'100kb'`.
92
+
93
+ ##### reviver
94
+
95
+ The `reviver` option is passed directly to `JSON.parse` as the second
96
+ argument. You can find more information on this argument
97
+ [in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
98
+
99
+ ##### strict
100
+
101
+ When set to `true`, will only accept arrays and objects; when `false` will
102
+ accept anything `JSON.parse` accepts. Defaults to `true`.
103
+
104
+ ##### type
105
+
106
+ The `type` option is used to determine what media type the middleware will
107
+ parse. This option can be a string, array of strings, or a function. If not a
108
+ function, `type` option is passed directly to the
109
+ [type-is](https://www.npmjs.org/package/type-is#readme) library and this can
110
+ be an extension name (like `json`), a mime type (like `application/json`), or
111
+ a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
112
+ option is called as `fn(req)` and the request is parsed if it returns a truthy
113
+ value. Defaults to `application/json`.
114
+
115
+ ##### verify
116
+
117
+ The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
118
+ where `buf` is a `Buffer` of the raw request body and `encoding` is the
119
+ encoding of the request. The parsing can be aborted by throwing an error.
120
+
121
+ ### bodyParser.raw([options])
122
+
123
+ Returns middleware that parses all bodies as a `Buffer` and only looks at
124
+ requests where the `Content-Type` header matches the `type` option. This
125
+ parser supports automatic inflation of `gzip` and `deflate` encodings.
126
+
127
+ A new `body` object containing the parsed data is populated on the `request`
128
+ object after the middleware (i.e. `req.body`). This will be a `Buffer` object
129
+ of the body.
130
+
131
+ #### Options
132
+
133
+ The `raw` function takes an optional `options` object that may contain any of
134
+ the following keys:
135
+
136
+ ##### inflate
137
+
138
+ When set to `true`, then deflated (compressed) bodies will be inflated; when
139
+ `false`, deflated bodies are rejected. Defaults to `true`.
140
+
141
+ ##### limit
142
+
143
+ Controls the maximum request body size. If this is a number, then the value
144
+ specifies the number of bytes; if it is a string, the value is passed to the
145
+ [bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
146
+ to `'100kb'`.
147
+
148
+ ##### type
149
+
150
+ The `type` option is used to determine what media type the middleware will
151
+ parse. This option can be a string, array of strings, or a function.
152
+ If not a function, `type` option is passed directly to the
153
+ [type-is](https://www.npmjs.org/package/type-is#readme) library and this
154
+ can be an extension name (like `bin`), a mime type (like
155
+ `application/octet-stream`), or a mime type with a wildcard (like `*/*` or
156
+ `application/*`). If a function, the `type` option is called as `fn(req)`
157
+ and the request is parsed if it returns a truthy value. Defaults to
158
+ `application/octet-stream`.
159
+
160
+ ##### verify
161
+
162
+ The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
163
+ where `buf` is a `Buffer` of the raw request body and `encoding` is the
164
+ encoding of the request. The parsing can be aborted by throwing an error.
165
+
166
+ ### bodyParser.text([options])
167
+
168
+ Returns middleware that parses all bodies as a string and only looks at
169
+ requests where the `Content-Type` header matches the `type` option. This
170
+ parser supports automatic inflation of `gzip` and `deflate` encodings.
171
+
172
+ A new `body` string containing the parsed data is populated on the `request`
173
+ object after the middleware (i.e. `req.body`). This will be a string of the
174
+ body.
175
+
176
+ #### Options
177
+
178
+ The `text` function takes an optional `options` object that may contain any of
179
+ the following keys:
180
+
181
+ ##### defaultCharset
182
+
183
+ Specify the default character set for the text content if the charset is not
184
+ specified in the `Content-Type` header of the request. Defaults to `utf-8`.
185
+
186
+ ##### inflate
187
+
188
+ When set to `true`, then deflated (compressed) bodies will be inflated; when
189
+ `false`, deflated bodies are rejected. Defaults to `true`.
190
+
191
+ ##### limit
192
+
193
+ Controls the maximum request body size. If this is a number, then the value
194
+ specifies the number of bytes; if it is a string, the value is passed to the
195
+ [bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
196
+ to `'100kb'`.
197
+
198
+ ##### type
199
+
200
+ The `type` option is used to determine what media type the middleware will
201
+ parse. This option can be a string, array of strings, or a function. If not
202
+ a function, `type` option is passed directly to the
203
+ [type-is](https://www.npmjs.org/package/type-is#readme) library and this can
204
+ be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
205
+ type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
206
+ option is called as `fn(req)` and the request is parsed if it returns a
207
+ truthy value. Defaults to `text/plain`.
208
+
209
+ ##### verify
210
+
211
+ The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
212
+ where `buf` is a `Buffer` of the raw request body and `encoding` is the
213
+ encoding of the request. The parsing can be aborted by throwing an error.
214
+
215
+ ### bodyParser.urlencoded([options])
216
+
217
+ Returns middleware that only parses `urlencoded` bodies and only looks at
218
+ requests where the `Content-Type` header matches the `type` option. This
219
+ parser accepts only UTF-8 encoding of the body and supports automatic
220
+ inflation of `gzip` and `deflate` encodings.
221
+
222
+ A new `body` object containing the parsed data is populated on the `request`
223
+ object after the middleware (i.e. `req.body`). This object will contain
224
+ key-value pairs, where the value can be a string or array (when `extended` is
225
+ `false`), or any type (when `extended` is `true`).
226
+
227
+ #### Options
228
+
229
+ The `urlencoded` function takes an optional `options` object that may contain
230
+ any of the following keys:
231
+
232
+ ##### extended
233
+
234
+ The `extended` option allows to choose between parsing the URL-encoded data
235
+ with the `querystring` library (when `false`) or the `qs` library (when
236
+ `true`). The "extended" syntax allows for rich objects and arrays to be
237
+ encoded into the URL-encoded format, allowing for a JSON-like experience
238
+ with URL-encoded. For more information, please
239
+ [see the qs library](https://www.npmjs.org/package/qs#readme).
240
+
241
+ Defaults to `true`, but using the default has been deprecated. Please
242
+ research into the difference between `qs` and `querystring` and choose the
243
+ appropriate setting.
244
+
245
+ ##### inflate
246
+
247
+ When set to `true`, then deflated (compressed) bodies will be inflated; when
248
+ `false`, deflated bodies are rejected. Defaults to `true`.
249
+
250
+ ##### limit
251
+
252
+ Controls the maximum request body size. If this is a number, then the value
253
+ specifies the number of bytes; if it is a string, the value is passed to the
254
+ [bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
255
+ to `'100kb'`.
256
+
257
+ ##### parameterLimit
258
+
259
+ The `parameterLimit` option controls the maximum number of parameters that
260
+ are allowed in the URL-encoded data. If a request contains more parameters
261
+ than this value, a 413 will be returned to the client. Defaults to `1000`.
262
+
263
+ ##### type
264
+
265
+ The `type` option is used to determine what media type the middleware will
266
+ parse. This option can be a string, array of strings, or a function. If not
267
+ a function, `type` option is passed directly to the
268
+ [type-is](https://www.npmjs.org/package/type-is#readme) library and this can
269
+ be an extension name (like `urlencoded`), a mime type (like
270
+ `application/x-www-form-urlencoded`), or a mime type with a wildcard (like
271
+ `*/x-www-form-urlencoded`). If a function, the `type` option is called as
272
+ `fn(req)` and the request is parsed if it returns a truthy value. Defaults
273
+ to `application/x-www-form-urlencoded`.
274
+
275
+ ##### verify
276
+
277
+ The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
278
+ where `buf` is a `Buffer` of the raw request body and `encoding` is the
279
+ encoding of the request. The parsing can be aborted by throwing an error.
280
+
281
+ #### depth
282
+
283
+ The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible.
284
+
285
+ ## Errors
286
+
287
+ The middlewares provided by this module create errors using the
288
+ [`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
289
+ will typically have a `status`/`statusCode` property that contains the suggested
290
+ HTTP response code, an `expose` property to determine if the `message` property
291
+ should be displayed to the client, a `type` property to determine the type of
292
+ error without matching against the `message`, and a `body` property containing
293
+ the read body, if available.
294
+
295
+ The following are the common errors created, though any error can come through
296
+ for various reasons.
297
+
298
+ ### content encoding unsupported
299
+
300
+ This error will occur when the request had a `Content-Encoding` header that
301
+ contained an encoding but the "inflation" option was set to `false`. The
302
+ `status` property is set to `415`, the `type` property is set to
303
+ `'encoding.unsupported'`, and the `charset` property will be set to the
304
+ encoding that is unsupported.
305
+
306
+ ### entity parse failed
307
+
308
+ This error will occur when the request contained an entity that could not be
309
+ parsed by the middleware. The `status` property is set to `400`, the `type`
310
+ property is set to `'entity.parse.failed'`, and the `body` property is set to
311
+ the entity value that failed parsing.
312
+
313
+ ### entity verify failed
314
+
315
+ This error will occur when the request contained an entity that could not be
316
+ failed verification by the defined `verify` option. The `status` property is
317
+ set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
318
+ `body` property is set to the entity value that failed verification.
319
+
320
+ ### request aborted
321
+
322
+ This error will occur when the request is aborted by the client before reading
323
+ the body has finished. The `received` property will be set to the number of
324
+ bytes received before the request was aborted and the `expected` property is
325
+ set to the number of expected bytes. The `status` property is set to `400`
326
+ and `type` property is set to `'request.aborted'`.
327
+
328
+ ### request entity too large
329
+
330
+ This error will occur when the request body's size is larger than the "limit"
331
+ option. The `limit` property will be set to the byte limit and the `length`
332
+ property will be set to the request body's length. The `status` property is
333
+ set to `413` and the `type` property is set to `'entity.too.large'`.
334
+
335
+ ### request size did not match content length
336
+
337
+ This error will occur when the request's length did not match the length from
338
+ the `Content-Length` header. This typically occurs when the request is malformed,
339
+ typically when the `Content-Length` header was calculated based on characters
340
+ instead of bytes. The `status` property is set to `400` and the `type` property
341
+ is set to `'request.size.invalid'`.
342
+
343
+ ### stream encoding should not be set
344
+
345
+ This error will occur when something called the `req.setEncoding` method prior
346
+ to this middleware. This module operates directly on bytes only and you cannot
347
+ call `req.setEncoding` when using this module. The `status` property is set to
348
+ `500` and the `type` property is set to `'stream.encoding.set'`.
349
+
350
+ ### stream is not readable
351
+
352
+ This error will occur when the request is no longer readable when this middleware
353
+ attempts to read it. This typically means something other than a middleware from
354
+ this module read the request body already and the middleware was also configured to
355
+ read the same request. The `status` property is set to `500` and the `type`
356
+ property is set to `'stream.not.readable'`.
357
+
358
+ ### too many parameters
359
+
360
+ This error will occur when the content of the request exceeds the configured
361
+ `parameterLimit` for the `urlencoded` parser. The `status` property is set to
362
+ `413` and the `type` property is set to `'parameters.too.many'`.
363
+
364
+ ### unsupported charset "BOGUS"
365
+
366
+ This error will occur when the request had a charset parameter in the
367
+ `Content-Type` header, but the `iconv-lite` module does not support it OR the
368
+ parser does not support it. The charset is contained in the message as well
369
+ as in the `charset` property. The `status` property is set to `415`, the
370
+ `type` property is set to `'charset.unsupported'`, and the `charset` property
371
+ is set to the charset that is unsupported.
372
+
373
+ ### unsupported content encoding "bogus"
374
+
375
+ This error will occur when the request had a `Content-Encoding` header that
376
+ contained an unsupported encoding. The encoding is contained in the message
377
+ as well as in the `encoding` property. The `status` property is set to `415`,
378
+ the `type` property is set to `'encoding.unsupported'`, and the `encoding`
379
+ property is set to the encoding that is unsupported.
380
+
381
+ ### The input exceeded the depth
382
+
383
+ This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown.
384
+
385
+ ## Examples
386
+
387
+ ### Express/Connect top-level generic
388
+
389
+ This example demonstrates adding a generic JSON and URL-encoded parser as a
390
+ top-level middleware, which will parse the bodies of all incoming requests.
391
+ This is the simplest setup.
392
+
393
+ ```js
394
+ var express = require('express')
395
+ var bodyParser = require('body-parser')
396
+
397
+ var app = express()
398
+
399
+ // parse application/x-www-form-urlencoded
400
+ app.use(bodyParser.urlencoded({ extended: false }))
401
+
402
+ // parse application/json
403
+ app.use(bodyParser.json())
404
+
405
+ app.use(function (req, res) {
406
+ res.setHeader('Content-Type', 'text/plain')
407
+ res.write('you posted:\n')
408
+ res.end(JSON.stringify(req.body, null, 2))
409
+ })
410
+ ```
411
+
412
+ ### Express route-specific
413
+
414
+ This example demonstrates adding body parsers specifically to the routes that
415
+ need them. In general, this is the most recommended way to use body-parser with
416
+ Express.
417
+
418
+ ```js
419
+ var express = require('express')
420
+ var bodyParser = require('body-parser')
421
+
422
+ var app = express()
423
+
424
+ // create application/json parser
425
+ var jsonParser = bodyParser.json()
426
+
427
+ // create application/x-www-form-urlencoded parser
428
+ var urlencodedParser = bodyParser.urlencoded({ extended: false })
429
+
430
+ // POST /login gets urlencoded bodies
431
+ app.post('/login', urlencodedParser, function (req, res) {
432
+ res.send('welcome, ' + req.body.username)
433
+ })
434
+
435
+ // POST /api/users gets JSON bodies
436
+ app.post('/api/users', jsonParser, function (req, res) {
437
+ // create user in req.body
438
+ })
439
+ ```
440
+
441
+ ### Change accepted type for parsers
442
+
443
+ All the parsers accept a `type` option which allows you to change the
444
+ `Content-Type` that the middleware will parse.
445
+
446
+ ```js
447
+ var express = require('express')
448
+ var bodyParser = require('body-parser')
449
+
450
+ var app = express()
451
+
452
+ // parse various different custom JSON types as JSON
453
+ app.use(bodyParser.json({ type: 'application/*+json' }))
454
+
455
+ // parse some custom thing into a Buffer
456
+ app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
457
+
458
+ // parse an HTML body into a string
459
+ app.use(bodyParser.text({ type: 'text/html' }))
460
+ ```
461
+
462
+ ## License
463
+
464
+ [MIT](LICENSE)
465
+
466
+ [ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci
467
+ [ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
468
+ [coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master
469
+ [coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
470
+ [node-version-image]: https://badgen.net/npm/node/body-parser
471
+ [node-version-url]: https://nodejs.org/en/download
472
+ [npm-downloads-image]: https://badgen.net/npm/dm/body-parser
473
+ [npm-url]: https://npmjs.org/package/body-parser
474
+ [npm-version-image]: https://badgen.net/npm/v/body-parser
475
+ [ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge
476
+ [ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser
node_modules/body-parser/index.js ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * body-parser
3
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
4
+ * MIT Licensed
5
+ */
6
+
7
+ 'use strict'
8
+
9
+ /**
10
+ * Module dependencies.
11
+ * @private
12
+ */
13
+
14
+ var deprecate = require('depd')('body-parser')
15
+
16
+ /**
17
+ * Cache of loaded parsers.
18
+ * @private
19
+ */
20
+
21
+ var parsers = Object.create(null)
22
+
23
+ /**
24
+ * @typedef Parsers
25
+ * @type {function}
26
+ * @property {function} json
27
+ * @property {function} raw
28
+ * @property {function} text
29
+ * @property {function} urlencoded
30
+ */
31
+
32
+ /**
33
+ * Module exports.
34
+ * @type {Parsers}
35
+ */
36
+
37
+ exports = module.exports = deprecate.function(bodyParser,
38
+ 'bodyParser: use individual json/urlencoded middlewares')
39
+
40
+ /**
41
+ * JSON parser.
42
+ * @public
43
+ */
44
+
45
+ Object.defineProperty(exports, 'json', {
46
+ configurable: true,
47
+ enumerable: true,
48
+ get: createParserGetter('json')
49
+ })
50
+
51
+ /**
52
+ * Raw parser.
53
+ * @public
54
+ */
55
+
56
+ Object.defineProperty(exports, 'raw', {
57
+ configurable: true,
58
+ enumerable: true,
59
+ get: createParserGetter('raw')
60
+ })
61
+
62
+ /**
63
+ * Text parser.
64
+ * @public
65
+ */
66
+
67
+ Object.defineProperty(exports, 'text', {
68
+ configurable: true,
69
+ enumerable: true,
70
+ get: createParserGetter('text')
71
+ })
72
+
73
+ /**
74
+ * URL-encoded parser.
75
+ * @public
76
+ */
77
+
78
+ Object.defineProperty(exports, 'urlencoded', {
79
+ configurable: true,
80
+ enumerable: true,
81
+ get: createParserGetter('urlencoded')
82
+ })
83
+
84
+ /**
85
+ * Create a middleware to parse json and urlencoded bodies.
86
+ *
87
+ * @param {object} [options]
88
+ * @return {function}
89
+ * @deprecated
90
+ * @public
91
+ */
92
+
93
+ function bodyParser (options) {
94
+ // use default type for parsers
95
+ var opts = Object.create(options || null, {
96
+ type: {
97
+ configurable: true,
98
+ enumerable: true,
99
+ value: undefined,
100
+ writable: true
101
+ }
102
+ })
103
+
104
+ var _urlencoded = exports.urlencoded(opts)
105
+ var _json = exports.json(opts)
106
+
107
+ return function bodyParser (req, res, next) {
108
+ _json(req, res, function (err) {
109
+ if (err) return next(err)
110
+ _urlencoded(req, res, next)
111
+ })
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Create a getter for loading a parser.
117
+ * @private
118
+ */
119
+
120
+ function createParserGetter (name) {
121
+ return function get () {
122
+ return loadParser(name)
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Load a parser module.
128
+ * @private
129
+ */
130
+
131
+ function loadParser (parserName) {
132
+ var parser = parsers[parserName]
133
+
134
+ if (parser !== undefined) {
135
+ return parser
136
+ }
137
+
138
+ // this uses a switch for static require analysis
139
+ switch (parserName) {
140
+ case 'json':
141
+ parser = require('./lib/types/json')
142
+ break
143
+ case 'raw':
144
+ parser = require('./lib/types/raw')
145
+ break
146
+ case 'text':
147
+ parser = require('./lib/types/text')
148
+ break
149
+ case 'urlencoded':
150
+ parser = require('./lib/types/urlencoded')
151
+ break
152
+ }
153
+
154
+ // store to prevent invoking require()
155
+ return (parsers[parserName] = parser)
156
+ }
node_modules/body-parser/lib/read.js ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * body-parser
3
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
4
+ * MIT Licensed
5
+ */
6
+
7
+ 'use strict'
8
+
9
+ /**
10
+ * Module dependencies.
11
+ * @private
12
+ */
13
+
14
+ var createError = require('http-errors')
15
+ var destroy = require('destroy')
16
+ var getBody = require('raw-body')
17
+ var iconv = require('iconv-lite')
18
+ var onFinished = require('on-finished')
19
+ var unpipe = require('unpipe')
20
+ var zlib = require('zlib')
21
+
22
+ /**
23
+ * Module exports.
24
+ */
25
+
26
+ module.exports = read
27
+
28
+ /**
29
+ * Read a request into a buffer and parse.
30
+ *
31
+ * @param {object} req
32
+ * @param {object} res
33
+ * @param {function} next
34
+ * @param {function} parse
35
+ * @param {function} debug
36
+ * @param {object} options
37
+ * @private
38
+ */
39
+
40
+ function read (req, res, next, parse, debug, options) {
41
+ var length
42
+ var opts = options
43
+ var stream
44
+
45
+ // flag as parsed
46
+ req._body = true
47
+
48
+ // read options
49
+ var encoding = opts.encoding !== null
50
+ ? opts.encoding
51
+ : null
52
+ var verify = opts.verify
53
+
54
+ try {
55
+ // get the content stream
56
+ stream = contentstream(req, debug, opts.inflate)
57
+ length = stream.length
58
+ stream.length = undefined
59
+ } catch (err) {
60
+ return next(err)
61
+ }
62
+
63
+ // set raw-body options
64
+ opts.length = length
65
+ opts.encoding = verify
66
+ ? null
67
+ : encoding
68
+
69
+ // assert charset is supported
70
+ if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
71
+ return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
72
+ charset: encoding.toLowerCase(),
73
+ type: 'charset.unsupported'
74
+ }))
75
+ }
76
+
77
+ // read body
78
+ debug('read body')
79
+ getBody(stream, opts, function (error, body) {
80
+ if (error) {
81
+ var _error
82
+
83
+ if (error.type === 'encoding.unsupported') {
84
+ // echo back charset
85
+ _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
86
+ charset: encoding.toLowerCase(),
87
+ type: 'charset.unsupported'
88
+ })
89
+ } else {
90
+ // set status code on error
91
+ _error = createError(400, error)
92
+ }
93
+
94
+ // unpipe from stream and destroy
95
+ if (stream !== req) {
96
+ unpipe(req)
97
+ destroy(stream, true)
98
+ }
99
+
100
+ // read off entire request
101
+ dump(req, function onfinished () {
102
+ next(createError(400, _error))
103
+ })
104
+ return
105
+ }
106
+
107
+ // verify
108
+ if (verify) {
109
+ try {
110
+ debug('verify body')
111
+ verify(req, res, body, encoding)
112
+ } catch (err) {
113
+ next(createError(403, err, {
114
+ body: body,
115
+ type: err.type || 'entity.verify.failed'
116
+ }))
117
+ return
118
+ }
119
+ }
120
+
121
+ // parse
122
+ var str = body
123
+ try {
124
+ debug('parse body')
125
+ str = typeof body !== 'string' && encoding !== null
126
+ ? iconv.decode(body, encoding)
127
+ : body
128
+ req.body = parse(str)
129
+ } catch (err) {
130
+ next(createError(400, err, {
131
+ body: str,
132
+ type: err.type || 'entity.parse.failed'
133
+ }))
134
+ return
135
+ }
136
+
137
+ next()
138
+ })
139
+ }
140
+
141
+ /**
142
+ * Get the content stream of the request.
143
+ *
144
+ * @param {object} req
145
+ * @param {function} debug
146
+ * @param {boolean} [inflate=true]
147
+ * @return {object}
148
+ * @api private
149
+ */
150
+
151
+ function contentstream (req, debug, inflate) {
152
+ var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
153
+ var length = req.headers['content-length']
154
+ var stream
155
+
156
+ debug('content-encoding "%s"', encoding)
157
+
158
+ if (inflate === false && encoding !== 'identity') {
159
+ throw createError(415, 'content encoding unsupported', {
160
+ encoding: encoding,
161
+ type: 'encoding.unsupported'
162
+ })
163
+ }
164
+
165
+ switch (encoding) {
166
+ case 'deflate':
167
+ stream = zlib.createInflate()
168
+ debug('inflate body')
169
+ req.pipe(stream)
170
+ break
171
+ case 'gzip':
172
+ stream = zlib.createGunzip()
173
+ debug('gunzip body')
174
+ req.pipe(stream)
175
+ break
176
+ case 'identity':
177
+ stream = req
178
+ stream.length = length
179
+ break
180
+ default:
181
+ throw createError(415, 'unsupported content encoding "' + encoding + '"', {
182
+ encoding: encoding,
183
+ type: 'encoding.unsupported'
184
+ })
185
+ }
186
+
187
+ return stream
188
+ }
189
+
190
+ /**
191
+ * Dump the contents of a request.
192
+ *
193
+ * @param {object} req
194
+ * @param {function} callback
195
+ * @api private
196
+ */
197
+
198
+ function dump (req, callback) {
199
+ if (onFinished.isFinished(req)) {
200
+ callback(null)
201
+ } else {
202
+ onFinished(req, callback)
203
+ req.resume()
204
+ }
205
+ }