From 060bbb30ad759b311e35dee3d304739e8f6227f7 Mon Sep 17 00:00:00 2001
From: Mathilda Imadojiemu
Date: Fri, 30 Sep 2022 10:06:40 +0100
Subject: [PATCH 1/4] Initial commit
---
README.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 README.md
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8a7db83
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# microsoft-shecluded
\ No newline at end of file
From f42559070f4ffa99c04c5af7cfb416337b3a4d29 Mon Sep 17 00:00:00 2001
From: Mathilda Imadojiemu
Date: Fri, 30 Sep 2022 10:14:27 +0100
Subject: [PATCH 2/4] Added API routes
---
.../Data/BookReturnRecordDetails.sql | 407 +
StartUpChallenge/Data/BookReturnRecords.sql | 272 +
StartUpChallenge/Data/Books.sql | 1009 ++
.../Data/BorrowersRecordDetails.sql | 807 ++
StartUpChallenge/Data/BorrowersRecords.sql | 506 +
StartUpChallenge/Data/LibraryStaff.sql | 10 +
StartUpChallenge/Data/Members.sql | 36 +
StartUpChallenge/startUpChallengeScript.sql | Bin 0 -> 13328 bytes
.../startUpChallengeScriptMySQL.sql | 147 +
config.js | 11 +
controllers/books.js | 133 +
helper.js | 15 +
helper/errorHandler.js | 14 +
index.js | 28 +
node_modules/.bin/mime | 12 +
node_modules/.bin/mime.cmd | 17 +
node_modules/.bin/mime.ps1 | 28 +
node_modules/.bin/nodemon | 12 +
node_modules/.bin/nodemon.cmd | 17 +
node_modules/.bin/nodemon.ps1 | 28 +
node_modules/.bin/nodetouch | 12 +
node_modules/.bin/nodetouch.cmd | 17 +
node_modules/.bin/nodetouch.ps1 | 28 +
node_modules/.bin/nopt | 12 +
node_modules/.bin/nopt.cmd | 17 +
node_modules/.bin/nopt.ps1 | 28 +
node_modules/.bin/semver | 12 +
node_modules/.bin/semver.cmd | 17 +
node_modules/.bin/semver.ps1 | 28 +
node_modules/.package-lock.json | 1198 +++
node_modules/abbrev/LICENSE | 46 +
node_modules/abbrev/README.md | 23 +
node_modules/abbrev/abbrev.js | 61 +
node_modules/abbrev/package.json | 21 +
node_modules/accepts/HISTORY.md | 243 +
node_modules/accepts/LICENSE | 23 +
node_modules/accepts/README.md | 140 +
node_modules/accepts/index.js | 238 +
node_modules/accepts/package.json | 47 +
node_modules/anymatch/LICENSE | 15 +
node_modules/anymatch/README.md | 87 +
node_modules/anymatch/index.d.ts | 19 +
node_modules/anymatch/index.js | 104 +
node_modules/anymatch/package.json | 48 +
node_modules/array-flatten/LICENSE | 21 +
node_modules/array-flatten/README.md | 43 +
node_modules/array-flatten/array-flatten.js | 64 +
node_modules/array-flatten/package.json | 39 +
node_modules/asynckit/LICENSE | 21 +
node_modules/asynckit/README.md | 233 +
node_modules/asynckit/bench.js | 76 +
node_modules/asynckit/index.js | 6 +
node_modules/asynckit/lib/abort.js | 29 +
node_modules/asynckit/lib/async.js | 34 +
node_modules/asynckit/lib/defer.js | 26 +
node_modules/asynckit/lib/iterate.js | 75 +
.../asynckit/lib/readable_asynckit.js | 91 +
.../asynckit/lib/readable_parallel.js | 25 +
node_modules/asynckit/lib/readable_serial.js | 25 +
.../asynckit/lib/readable_serial_ordered.js | 29 +
node_modules/asynckit/lib/state.js | 37 +
node_modules/asynckit/lib/streamify.js | 141 +
node_modules/asynckit/lib/terminator.js | 29 +
node_modules/asynckit/package.json | 63 +
node_modules/asynckit/parallel.js | 43 +
node_modules/asynckit/serial.js | 17 +
node_modules/asynckit/serialOrdered.js | 75 +
node_modules/asynckit/stream.js | 21 +
node_modules/axios/CHANGELOG.md | 943 ++
node_modules/axios/LICENSE | 19 +
node_modules/axios/README.md | 991 ++
node_modules/axios/SECURITY.md | 5 +
node_modules/axios/UPGRADE_GUIDE.md | 168 +
node_modules/axios/dist/axios.js | 2595 +++++
node_modules/axios/dist/axios.map | 1 +
node_modules/axios/dist/axios.min.js | 3 +
node_modules/axios/dist/axios.min.map | 1 +
node_modules/axios/index.d.ts | 254 +
node_modules/axios/index.js | 1 +
node_modules/axios/lib/adapters/README.md | 37 +
node_modules/axios/lib/adapters/http.js | 424 +
node_modules/axios/lib/adapters/xhr.js | 222 +
node_modules/axios/lib/axios.js | 64 +
node_modules/axios/lib/cancel/CancelToken.js | 119 +
.../axios/lib/cancel/CanceledError.js | 22 +
node_modules/axios/lib/cancel/isCancel.js | 5 +
node_modules/axios/lib/core/Axios.js | 160 +
node_modules/axios/lib/core/AxiosError.js | 86 +
.../axios/lib/core/InterceptorManager.js | 54 +
node_modules/axios/lib/core/README.md | 8 +
node_modules/axios/lib/core/buildFullPath.js | 20 +
.../axios/lib/core/dispatchRequest.js | 87 +
node_modules/axios/lib/core/mergeConfig.js | 100 +
node_modules/axios/lib/core/settle.js | 25 +
node_modules/axios/lib/core/transformData.js | 22 +
.../axios/lib/defaults/env/FormData.js | 2 +
node_modules/axios/lib/defaults/index.js | 146 +
.../axios/lib/defaults/transitional.js | 7 +
node_modules/axios/lib/env/README.md | 3 +
node_modules/axios/lib/env/data.js | 3 +
node_modules/axios/lib/helpers/README.md | 7 +
node_modules/axios/lib/helpers/bind.js | 11 +
node_modules/axios/lib/helpers/buildURL.js | 70 +
node_modules/axios/lib/helpers/combineURLs.js | 14 +
node_modules/axios/lib/helpers/cookies.js | 53 +
.../axios/lib/helpers/deprecatedMethod.js | 24 +
.../axios/lib/helpers/isAbsoluteURL.js | 14 +
.../axios/lib/helpers/isAxiosError.js | 13 +
.../axios/lib/helpers/isURLSameOrigin.js | 68 +
.../axios/lib/helpers/normalizeHeaderName.js | 12 +
node_modules/axios/lib/helpers/null.js | 2 +
.../axios/lib/helpers/parseHeaders.js | 53 +
.../axios/lib/helpers/parseProtocol.js | 6 +
node_modules/axios/lib/helpers/spread.js | 27 +
node_modules/axios/lib/helpers/toFormData.js | 72 +
node_modules/axios/lib/helpers/validator.js | 86 +
node_modules/axios/lib/utils.js | 470 +
node_modules/axios/package.json | 87 +
node_modules/axios/tsconfig.json | 14 +
node_modules/axios/tslint.json | 6 +
.../balanced-match/.github/FUNDING.yml | 2 +
node_modules/balanced-match/LICENSE.md | 21 +
node_modules/balanced-match/README.md | 97 +
node_modules/balanced-match/index.js | 62 +
node_modules/balanced-match/package.json | 48 +
.../binary-extensions/binary-extensions.json | 260 +
.../binary-extensions.json.d.ts | 3 +
node_modules/binary-extensions/index.d.ts | 14 +
node_modules/binary-extensions/index.js | 1 +
node_modules/binary-extensions/license | 9 +
node_modules/binary-extensions/package.json | 38 +
node_modules/binary-extensions/readme.md | 41 +
node_modules/body-parser/HISTORY.md | 651 ++
node_modules/body-parser/LICENSE | 23 +
node_modules/body-parser/README.md | 464 +
node_modules/body-parser/SECURITY.md | 25 +
node_modules/body-parser/index.js | 157 +
node_modules/body-parser/lib/read.js | 205 +
node_modules/body-parser/lib/types/json.js | 236 +
node_modules/body-parser/lib/types/raw.js | 101 +
node_modules/body-parser/lib/types/text.js | 121 +
.../body-parser/lib/types/urlencoded.js | 284 +
node_modules/body-parser/package.json | 56 +
node_modules/brace-expansion/LICENSE | 21 +
node_modules/brace-expansion/README.md | 129 +
node_modules/brace-expansion/index.js | 201 +
node_modules/brace-expansion/package.json | 47 +
node_modules/braces/CHANGELOG.md | 184 +
node_modules/braces/LICENSE | 21 +
node_modules/braces/README.md | 593 ++
node_modules/braces/index.js | 170 +
node_modules/braces/lib/compile.js | 57 +
node_modules/braces/lib/constants.js | 57 +
node_modules/braces/lib/expand.js | 113 +
node_modules/braces/lib/parse.js | 333 +
node_modules/braces/lib/stringify.js | 32 +
node_modules/braces/lib/utils.js | 112 +
node_modules/braces/package.json | 77 +
node_modules/bytes/History.md | 97 +
node_modules/bytes/LICENSE | 23 +
node_modules/bytes/Readme.md | 152 +
node_modules/bytes/index.js | 170 +
node_modules/bytes/package.json | 42 +
node_modules/call-bind/.eslintignore | 1 +
node_modules/call-bind/.eslintrc | 17 +
node_modules/call-bind/.github/FUNDING.yml | 12 +
node_modules/call-bind/.nycrc | 13 +
node_modules/call-bind/CHANGELOG.md | 42 +
node_modules/call-bind/LICENSE | 21 +
node_modules/call-bind/README.md | 2 +
node_modules/call-bind/callBound.js | 15 +
node_modules/call-bind/index.js | 47 +
node_modules/call-bind/package.json | 80 +
node_modules/call-bind/test/callBound.js | 55 +
node_modules/call-bind/test/index.js | 66 +
node_modules/chokidar/LICENSE | 21 +
node_modules/chokidar/README.md | 308 +
node_modules/chokidar/index.js | 973 ++
node_modules/chokidar/lib/constants.js | 65 +
node_modules/chokidar/lib/fsevents-handler.js | 524 +
node_modules/chokidar/lib/nodefs-handler.js | 654 ++
node_modules/chokidar/package.json | 85 +
node_modules/chokidar/types/index.d.ts | 188 +
node_modules/combined-stream/License | 19 +
node_modules/combined-stream/Readme.md | 138 +
.../combined-stream/lib/combined_stream.js | 208 +
node_modules/combined-stream/package.json | 25 +
node_modules/combined-stream/yarn.lock | 17 +
node_modules/concat-map/.travis.yml | 4 +
node_modules/concat-map/LICENSE | 18 +
node_modules/concat-map/README.markdown | 62 +
node_modules/concat-map/example/map.js | 6 +
node_modules/concat-map/index.js | 13 +
node_modules/concat-map/package.json | 43 +
node_modules/concat-map/test/map.js | 39 +
node_modules/content-disposition/HISTORY.md | 60 +
node_modules/content-disposition/LICENSE | 22 +
node_modules/content-disposition/README.md | 142 +
node_modules/content-disposition/index.js | 458 +
node_modules/content-disposition/package.json | 44 +
node_modules/content-type/HISTORY.md | 24 +
node_modules/content-type/LICENSE | 22 +
node_modules/content-type/README.md | 92 +
node_modules/content-type/index.js | 222 +
node_modules/content-type/package.json | 40 +
node_modules/cookie-signature/.npmignore | 4 +
node_modules/cookie-signature/History.md | 38 +
node_modules/cookie-signature/Readme.md | 42 +
node_modules/cookie-signature/index.js | 51 +
node_modules/cookie-signature/package.json | 18 +
node_modules/cookie/HISTORY.md | 142 +
node_modules/cookie/LICENSE | 24 +
node_modules/cookie/README.md | 302 +
node_modules/cookie/SECURITY.md | 25 +
node_modules/cookie/index.js | 270 +
node_modules/cookie/package.json | 44 +
node_modules/data-uri-to-buffer/README.md | 88 +
.../data-uri-to-buffer/dist/index.d.ts | 15 +
node_modules/data-uri-to-buffer/dist/index.js | 53 +
.../data-uri-to-buffer/dist/index.js.map | 1 +
.../data-uri-to-buffer/dist/src/index.d.ts | 15 +
.../data-uri-to-buffer/dist/src/index.js | 53 +
.../data-uri-to-buffer/dist/src/index.js.map | 1 +
.../data-uri-to-buffer/dist/test/test.d.ts | 4 +
.../data-uri-to-buffer/dist/test/test.js | 144 +
.../data-uri-to-buffer/dist/test/test.js.map | 1 +
node_modules/data-uri-to-buffer/package.json | 62 +
node_modules/data-uri-to-buffer/src/index.ts | 68 +
node_modules/debug/.coveralls.yml | 1 +
node_modules/debug/.eslintrc | 11 +
node_modules/debug/.npmignore | 9 +
node_modules/debug/.travis.yml | 14 +
node_modules/debug/CHANGELOG.md | 362 +
node_modules/debug/LICENSE | 19 +
node_modules/debug/Makefile | 50 +
node_modules/debug/README.md | 312 +
node_modules/debug/component.json | 19 +
node_modules/debug/karma.conf.js | 70 +
node_modules/debug/node.js | 1 +
node_modules/debug/package.json | 49 +
node_modules/debug/src/browser.js | 185 +
node_modules/debug/src/debug.js | 202 +
node_modules/debug/src/index.js | 10 +
node_modules/debug/src/inspector-log.js | 15 +
node_modules/debug/src/node.js | 248 +
node_modules/delayed-stream/.npmignore | 1 +
node_modules/delayed-stream/License | 19 +
node_modules/delayed-stream/Makefile | 7 +
node_modules/delayed-stream/Readme.md | 141 +
.../delayed-stream/lib/delayed_stream.js | 107 +
node_modules/delayed-stream/package.json | 27 +
node_modules/denque/CHANGELOG.md | 29 +
node_modules/denque/LICENSE | 201 +
node_modules/denque/README.md | 77 +
node_modules/denque/index.d.ts | 47 +
node_modules/denque/index.js | 481 +
node_modules/denque/package.json | 58 +
node_modules/depd/History.md | 103 +
node_modules/depd/LICENSE | 22 +
node_modules/depd/Readme.md | 280 +
node_modules/depd/index.js | 538 ++
node_modules/depd/lib/browser/index.js | 77 +
node_modules/depd/package.json | 45 +
node_modules/destroy/LICENSE | 23 +
node_modules/destroy/README.md | 63 +
node_modules/destroy/index.js | 209 +
node_modules/destroy/package.json | 48 +
node_modules/ee-first/LICENSE | 22 +
node_modules/ee-first/README.md | 80 +
node_modules/ee-first/index.js | 95 +
node_modules/ee-first/package.json | 29 +
node_modules/encodeurl/HISTORY.md | 14 +
node_modules/encodeurl/LICENSE | 22 +
node_modules/encodeurl/README.md | 128 +
node_modules/encodeurl/index.js | 60 +
node_modules/encodeurl/package.json | 40 +
node_modules/escape-html/LICENSE | 24 +
node_modules/escape-html/Readme.md | 43 +
node_modules/escape-html/index.js | 78 +
node_modules/escape-html/package.json | 24 +
node_modules/etag/HISTORY.md | 83 +
node_modules/etag/LICENSE | 22 +
node_modules/etag/README.md | 159 +
node_modules/etag/index.js | 131 +
node_modules/etag/package.json | 47 +
node_modules/express/History.md | 3579 +++++++
node_modules/express/LICENSE | 24 +
node_modules/express/Readme.md | 166 +
node_modules/express/index.js | 11 +
node_modules/express/lib/application.js | 661 ++
node_modules/express/lib/express.js | 116 +
node_modules/express/lib/middleware/init.js | 43 +
node_modules/express/lib/middleware/query.js | 47 +
node_modules/express/lib/request.js | 525 +
node_modules/express/lib/response.js | 1169 +++
node_modules/express/lib/router/index.js | 673 ++
node_modules/express/lib/router/layer.js | 181 +
node_modules/express/lib/router/route.js | 225 +
node_modules/express/lib/utils.js | 304 +
node_modules/express/lib/view.js | 182 +
node_modules/express/package.json | 99 +
node_modules/fetch-blob/LICENSE | 21 +
node_modules/fetch-blob/README.md | 106 +
node_modules/fetch-blob/file.d.ts | 2 +
node_modules/fetch-blob/file.js | 49 +
node_modules/fetch-blob/from.d.ts | 26 +
node_modules/fetch-blob/from.js | 100 +
node_modules/fetch-blob/index.d.ts | 3 +
node_modules/fetch-blob/index.js | 250 +
node_modules/fetch-blob/package.json | 56 +
node_modules/fetch-blob/streams.cjs | 51 +
node_modules/fill-range/LICENSE | 21 +
node_modules/fill-range/README.md | 237 +
node_modules/fill-range/index.js | 249 +
node_modules/fill-range/package.json | 69 +
node_modules/finalhandler/HISTORY.md | 195 +
node_modules/finalhandler/LICENSE | 22 +
node_modules/finalhandler/README.md | 147 +
node_modules/finalhandler/SECURITY.md | 25 +
node_modules/finalhandler/index.js | 336 +
node_modules/finalhandler/package.json | 46 +
node_modules/follow-redirects/LICENSE | 18 +
node_modules/follow-redirects/README.md | 155 +
node_modules/follow-redirects/debug.js | 15 +
node_modules/follow-redirects/http.js | 1 +
node_modules/follow-redirects/https.js | 1 +
node_modules/follow-redirects/index.js | 621 ++
node_modules/follow-redirects/package.json | 59 +
node_modules/form-data/License | 19 +
node_modules/form-data/README.md.bak | 358 +
node_modules/form-data/Readme.md | 358 +
node_modules/form-data/index.d.ts | 62 +
node_modules/form-data/lib/browser.js | 2 +
node_modules/form-data/lib/form_data.js | 501 +
node_modules/form-data/lib/populate.js | 10 +
node_modules/form-data/package.json | 68 +
node_modules/formdata-polyfill/FormData.js | 441 +
node_modules/formdata-polyfill/LICENSE | 21 +
node_modules/formdata-polyfill/README.md | 145 +
node_modules/formdata-polyfill/esm.min.d.ts | 5 +
node_modules/formdata-polyfill/esm.min.js | 40 +
.../formdata-polyfill/formdata-to-blob.js | 39 +
.../formdata-polyfill/formdata.min.js | 21 +
node_modules/formdata-polyfill/package.json | 50 +
node_modules/forwarded/HISTORY.md | 21 +
node_modules/forwarded/LICENSE | 22 +
node_modules/forwarded/README.md | 57 +
node_modules/forwarded/index.js | 90 +
node_modules/forwarded/package.json | 45 +
node_modules/fresh/HISTORY.md | 70 +
node_modules/fresh/LICENSE | 23 +
node_modules/fresh/README.md | 119 +
node_modules/fresh/index.js | 137 +
node_modules/fresh/package.json | 46 +
node_modules/function-bind/.editorconfig | 20 +
node_modules/function-bind/.eslintrc | 15 +
node_modules/function-bind/.jscs.json | 176 +
node_modules/function-bind/.npmignore | 22 +
node_modules/function-bind/.travis.yml | 168 +
node_modules/function-bind/LICENSE | 20 +
node_modules/function-bind/README.md | 48 +
node_modules/function-bind/implementation.js | 52 +
node_modules/function-bind/index.js | 5 +
node_modules/function-bind/package.json | 63 +
node_modules/function-bind/test/.eslintrc | 9 +
node_modules/function-bind/test/index.js | 252 +
node_modules/generate-function/.travis.yml | 3 +
node_modules/generate-function/LICENSE | 21 +
node_modules/generate-function/README.md | 89 +
node_modules/generate-function/example.js | 27 +
node_modules/generate-function/index.js | 181 +
node_modules/generate-function/package.json | 32 +
node_modules/generate-function/test.js | 49 +
node_modules/get-intrinsic/.eslintrc | 37 +
.../get-intrinsic/.github/FUNDING.yml | 12 +
node_modules/get-intrinsic/.nycrc | 9 +
node_modules/get-intrinsic/CHANGELOG.md | 98 +
node_modules/get-intrinsic/LICENSE | 21 +
node_modules/get-intrinsic/README.md | 71 +
node_modules/get-intrinsic/index.js | 334 +
node_modules/get-intrinsic/package.json | 91 +
.../get-intrinsic/test/GetIntrinsic.js | 274 +
node_modules/glob-parent/CHANGELOG.md | 110 +
node_modules/glob-parent/LICENSE | 15 +
node_modules/glob-parent/README.md | 137 +
node_modules/glob-parent/index.js | 42 +
node_modules/glob-parent/package.json | 48 +
node_modules/has-flag/index.js | 8 +
node_modules/has-flag/license | 9 +
node_modules/has-flag/package.json | 44 +
node_modules/has-flag/readme.md | 70 +
node_modules/has-symbols/.eslintrc | 11 +
node_modules/has-symbols/.github/FUNDING.yml | 12 +
node_modules/has-symbols/.nycrc | 9 +
node_modules/has-symbols/CHANGELOG.md | 75 +
node_modules/has-symbols/LICENSE | 21 +
node_modules/has-symbols/README.md | 46 +
node_modules/has-symbols/index.js | 13 +
node_modules/has-symbols/package.json | 101 +
node_modules/has-symbols/shams.js | 42 +
node_modules/has-symbols/test/index.js | 22 +
.../has-symbols/test/shams/core-js.js | 28 +
.../test/shams/get-own-property-symbols.js | 28 +
node_modules/has-symbols/test/tests.js | 56 +
node_modules/has/LICENSE-MIT | 22 +
node_modules/has/README.md | 18 +
node_modules/has/package.json | 48 +
node_modules/has/src/index.js | 5 +
node_modules/has/test/index.js | 10 +
node_modules/http-errors/HISTORY.md | 180 +
node_modules/http-errors/LICENSE | 23 +
node_modules/http-errors/README.md | 169 +
node_modules/http-errors/index.js | 289 +
node_modules/http-errors/package.json | 50 +
node_modules/iconv-lite/Changelog.md | 162 +
node_modules/iconv-lite/LICENSE | 21 +
node_modules/iconv-lite/README.md | 156 +
.../iconv-lite/encodings/dbcs-codec.js | 555 ++
.../iconv-lite/encodings/dbcs-data.js | 176 +
node_modules/iconv-lite/encodings/index.js | 22 +
node_modules/iconv-lite/encodings/internal.js | 188 +
.../iconv-lite/encodings/sbcs-codec.js | 72 +
.../encodings/sbcs-data-generated.js | 451 +
.../iconv-lite/encodings/sbcs-data.js | 174 +
.../encodings/tables/big5-added.json | 122 +
.../iconv-lite/encodings/tables/cp936.json | 264 +
.../iconv-lite/encodings/tables/cp949.json | 273 +
.../iconv-lite/encodings/tables/cp950.json | 177 +
.../iconv-lite/encodings/tables/eucjp.json | 182 +
.../encodings/tables/gb18030-ranges.json | 1 +
.../encodings/tables/gbk-added.json | 55 +
.../iconv-lite/encodings/tables/shiftjis.json | 125 +
node_modules/iconv-lite/encodings/utf16.js | 177 +
node_modules/iconv-lite/encodings/utf7.js | 290 +
node_modules/iconv-lite/lib/bom-handling.js | 52 +
node_modules/iconv-lite/lib/extend-node.js | 217 +
node_modules/iconv-lite/lib/index.d.ts | 24 +
node_modules/iconv-lite/lib/index.js | 153 +
node_modules/iconv-lite/lib/streams.js | 121 +
node_modules/iconv-lite/package.json | 46 +
node_modules/ignore-by-default/LICENSE | 14 +
node_modules/ignore-by-default/README.md | 26 +
node_modules/ignore-by-default/index.js | 12 +
node_modules/ignore-by-default/package.json | 34 +
node_modules/inherits/LICENSE | 16 +
node_modules/inherits/README.md | 42 +
node_modules/inherits/inherits.js | 9 +
node_modules/inherits/inherits_browser.js | 27 +
node_modules/inherits/package.json | 29 +
node_modules/ipaddr.js/LICENSE | 19 +
node_modules/ipaddr.js/README.md | 233 +
node_modules/ipaddr.js/ipaddr.min.js | 1 +
node_modules/ipaddr.js/lib/ipaddr.js | 673 ++
node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 +
node_modules/ipaddr.js/package.json | 35 +
node_modules/is-binary-path/index.d.ts | 17 +
node_modules/is-binary-path/index.js | 7 +
node_modules/is-binary-path/license | 9 +
node_modules/is-binary-path/package.json | 40 +
node_modules/is-binary-path/readme.md | 34 +
node_modules/is-extglob/LICENSE | 21 +
node_modules/is-extglob/README.md | 107 +
node_modules/is-extglob/index.js | 20 +
node_modules/is-extglob/package.json | 69 +
node_modules/is-glob/LICENSE | 21 +
node_modules/is-glob/README.md | 206 +
node_modules/is-glob/index.js | 150 +
node_modules/is-glob/package.json | 81 +
node_modules/is-number/LICENSE | 21 +
node_modules/is-number/README.md | 187 +
node_modules/is-number/index.js | 18 +
node_modules/is-number/package.json | 82 +
node_modules/is-property/.npmignore | 17 +
node_modules/is-property/LICENSE | 22 +
node_modules/is-property/README.md | 28 +
node_modules/is-property/is-property.js | 5 +
node_modules/is-property/package.json | 36 +
node_modules/long/LICENSE | 202 +
node_modules/long/README.md | 246 +
node_modules/long/dist/long.js | 2 +
node_modules/long/dist/long.js.map | 1 +
node_modules/long/index.js | 1 +
node_modules/long/package.json | 34 +
node_modules/long/src/long.js | 1323 +++
node_modules/lru-cache/LICENSE | 15 +
node_modules/lru-cache/README.md | 166 +
node_modules/lru-cache/index.js | 334 +
node_modules/lru-cache/package.json | 34 +
node_modules/media-typer/HISTORY.md | 22 +
node_modules/media-typer/LICENSE | 22 +
node_modules/media-typer/README.md | 81 +
node_modules/media-typer/index.js | 270 +
node_modules/media-typer/package.json | 26 +
node_modules/merge-descriptors/HISTORY.md | 21 +
node_modules/merge-descriptors/LICENSE | 23 +
node_modules/merge-descriptors/README.md | 48 +
node_modules/merge-descriptors/index.js | 60 +
node_modules/merge-descriptors/package.json | 32 +
node_modules/methods/HISTORY.md | 29 +
node_modules/methods/LICENSE | 24 +
node_modules/methods/README.md | 51 +
node_modules/methods/index.js | 69 +
node_modules/methods/package.json | 36 +
node_modules/mime-db/HISTORY.md | 507 +
node_modules/mime-db/LICENSE | 23 +
node_modules/mime-db/README.md | 100 +
node_modules/mime-db/db.json | 8519 +++++++++++++++++
node_modules/mime-db/index.js | 12 +
node_modules/mime-db/package.json | 60 +
node_modules/mime-types/HISTORY.md | 397 +
node_modules/mime-types/LICENSE | 23 +
node_modules/mime-types/README.md | 113 +
node_modules/mime-types/index.js | 188 +
node_modules/mime-types/package.json | 44 +
node_modules/mime/.npmignore | 0
node_modules/mime/CHANGELOG.md | 164 +
node_modules/mime/LICENSE | 21 +
node_modules/mime/README.md | 90 +
node_modules/mime/cli.js | 8 +
node_modules/mime/mime.js | 108 +
node_modules/mime/package.json | 44 +
node_modules/mime/src/build.js | 53 +
node_modules/mime/src/test.js | 60 +
node_modules/mime/types.json | 1 +
node_modules/minimatch/LICENSE | 15 +
node_modules/minimatch/README.md | 230 +
node_modules/minimatch/minimatch.js | 947 ++
node_modules/minimatch/package.json | 33 +
node_modules/ms/index.js | 152 +
node_modules/ms/license.md | 21 +
node_modules/ms/package.json | 37 +
node_modules/ms/readme.md | 51 +
node_modules/mysql2/License | 19 +
node_modules/mysql2/README.md | 281 +
node_modules/mysql2/index.d.ts | 189 +
node_modules/mysql2/index.js | 81 +
node_modules/mysql2/lib/auth_41.js | 113 +
.../lib/auth_plugins/caching_sha2_password.js | 103 +
.../lib/auth_plugins/caching_sha2_password.md | 18 +
node_modules/mysql2/lib/auth_plugins/index.js | 0
.../lib/auth_plugins/mysql_native_password.js | 32 +
.../lib/auth_plugins/sha256_password.js | 60 +
.../mysql2/lib/commands/auth_switch.js | 106 +
.../mysql2/lib/commands/binlog_dump.js | 109 +
.../mysql2/lib/commands/change_user.js | 47 +
.../mysql2/lib/commands/client_handshake.js | 200 +
.../mysql2/lib/commands/close_statement.js | 18 +
node_modules/mysql2/lib/commands/command.js | 55 +
node_modules/mysql2/lib/commands/execute.js | 107 +
node_modules/mysql2/lib/commands/index.js | 27 +
node_modules/mysql2/lib/commands/ping.js | 36 +
node_modules/mysql2/lib/commands/prepare.js | 130 +
node_modules/mysql2/lib/commands/query.js | 321 +
node_modules/mysql2/lib/commands/quit.js | 29 +
.../mysql2/lib/commands/register_slave.js | 27 +
.../mysql2/lib/commands/server_handshake.js | 162 +
.../mysql2/lib/compressed_protocol.js | 127 +
node_modules/mysql2/lib/connection.js | 936 ++
node_modules/mysql2/lib/connection_config.js | 256 +
.../mysql2/lib/constants/charset_encodings.js | 313 +
node_modules/mysql2/lib/constants/charsets.js | 289 +
node_modules/mysql2/lib/constants/client.js | 31 +
node_modules/mysql2/lib/constants/commands.js | 36 +
node_modules/mysql2/lib/constants/cursor.js | 8 +
.../mysql2/lib/constants/encoding_charset.js | 49 +
node_modules/mysql2/lib/constants/errors.js | 2094 ++++
.../mysql2/lib/constants/field_flags.js | 20 +
.../mysql2/lib/constants/server_status.js | 44 +
.../mysql2/lib/constants/session_track.js | 11 +
.../mysql2/lib/constants/ssl_profiles.js | 1109 +++
node_modules/mysql2/lib/constants/types.js | 32 +
node_modules/mysql2/lib/helpers.js | 63 +
node_modules/mysql2/lib/packet_parser.js | 195 +
.../mysql2/lib/packets/auth_switch_request.js | 38 +
.../packets/auth_switch_request_more_data.js | 33 +
.../lib/packets/auth_switch_response.js | 30 +
node_modules/mysql2/lib/packets/binary_row.js | 48 +
.../mysql2/lib/packets/binlog_dump.js | 33 +
.../lib/packets/binlog_query_statusvars.js | 115 +
.../mysql2/lib/packets/change_user.js | 97 +
.../mysql2/lib/packets/close_statement.js | 21 +
.../mysql2/lib/packets/column_definition.js | 140 +
node_modules/mysql2/lib/packets/execute.js | 150 +
node_modules/mysql2/lib/packets/handshake.js | 112 +
.../mysql2/lib/packets/handshake_response.js | 145 +
node_modules/mysql2/lib/packets/index.js | 146 +
node_modules/mysql2/lib/packets/packet.js | 919 ++
.../mysql2/lib/packets/prepare_statement.js | 27 +
.../lib/packets/prepared_statement_header.js | 16 +
node_modules/mysql2/lib/packets/query.js | 27 +
.../mysql2/lib/packets/register_slave.js | 46 +
.../mysql2/lib/packets/resultset_header.js | 110 +
.../mysql2/lib/packets/ssl_request.js | 25 +
node_modules/mysql2/lib/packets/text_row.js | 47 +
.../mysql2/lib/parsers/binary_parser.js | 186 +
.../mysql2/lib/parsers/parser_cache.js | 53 +
node_modules/mysql2/lib/parsers/string.js | 29 +
.../mysql2/lib/parsers/text_parser.js | 202 +
node_modules/mysql2/lib/pool.js | 212 +
node_modules/mysql2/lib/pool_cluster.js | 283 +
node_modules/mysql2/lib/pool_config.js | 24 +
node_modules/mysql2/lib/pool_connection.js | 65 +
node_modules/mysql2/lib/results_stream.js | 38 +
node_modules/mysql2/lib/server.js | 37 +
.../iconv-lite/.github/dependabot.yml | 11 +
.../iconv-lite/.idea/codeStyles/Project.xml | 47 +
.../.idea/codeStyles/codeStyleConfig.xml | 5 +
.../iconv-lite/.idea/iconv-lite.iml | 12 +
.../inspectionProfiles/Project_Default.xml | 6 +
.../node_modules/iconv-lite/.idea/modules.xml | 8 +
.../node_modules/iconv-lite/.idea/vcs.xml | 6 +
.../node_modules/iconv-lite/Changelog.md | 212 +
.../mysql2/node_modules/iconv-lite/LICENSE | 21 +
.../mysql2/node_modules/iconv-lite/README.md | 130 +
.../iconv-lite/encodings/dbcs-codec.js | 597 ++
.../iconv-lite/encodings/dbcs-data.js | 188 +
.../iconv-lite/encodings/index.js | 23 +
.../iconv-lite/encodings/internal.js | 198 +
.../iconv-lite/encodings/sbcs-codec.js | 72 +
.../encodings/sbcs-data-generated.js | 451 +
.../iconv-lite/encodings/sbcs-data.js | 179 +
.../encodings/tables/big5-added.json | 122 +
.../iconv-lite/encodings/tables/cp936.json | 264 +
.../iconv-lite/encodings/tables/cp949.json | 273 +
.../iconv-lite/encodings/tables/cp950.json | 177 +
.../iconv-lite/encodings/tables/eucjp.json | 182 +
.../encodings/tables/gb18030-ranges.json | 1 +
.../encodings/tables/gbk-added.json | 56 +
.../iconv-lite/encodings/tables/shiftjis.json | 125 +
.../iconv-lite/encodings/utf16.js | 197 +
.../iconv-lite/encodings/utf32.js | 319 +
.../node_modules/iconv-lite/encodings/utf7.js | 290 +
.../iconv-lite/lib/bom-handling.js | 52 +
.../node_modules/iconv-lite/lib/index.d.ts | 41 +
.../node_modules/iconv-lite/lib/index.js | 180 +
.../node_modules/iconv-lite/lib/streams.js | 109 +
.../node_modules/iconv-lite/package.json | 44 +
node_modules/mysql2/package.json | 86 +
node_modules/mysql2/promise.d.ts | 138 +
node_modules/mysql2/promise.js | 551 ++
node_modules/mysql2/typings/mysql/LICENSE.txt | 15 +
node_modules/mysql2/typings/mysql/index.d.ts | 36 +
node_modules/mysql2/typings/mysql/info.txt | 1 +
.../mysql2/typings/mysql/lib/Connection.d.ts | 246 +
.../mysql2/typings/mysql/lib/Pool.d.ts | 65 +
.../mysql2/typings/mysql/lib/PoolCluster.d.ts | 56 +
.../typings/mysql/lib/PoolConnection.d.ts | 8 +
.../mysql/lib/protocol/packets/Field.d.ts | 16 +
.../lib/protocol/packets/FieldPacket.d.ts | 22 +
.../mysql/lib/protocol/packets/OkPacket.d.ts | 16 +
.../lib/protocol/packets/ResultSetHeader.d.ts | 15 +
.../lib/protocol/packets/RowDataPacket.d.ts | 10 +
.../mysql/lib/protocol/packets/index.d.ts | 14 +
.../mysql/lib/protocol/sequences/Query.d.ts | 138 +
.../lib/protocol/sequences/Sequence.d.ts | 5 +
node_modules/named-placeholders/Changelog.md | 6 +
node_modules/named-placeholders/LICENSE | 21 +
node_modules/named-placeholders/README.md | 29 +
node_modules/named-placeholders/index.js | 181 +
.../node_modules/lru-cache/LICENSE | 15 +
.../node_modules/lru-cache/README.md | 158 +
.../node_modules/lru-cache/index.js | 468 +
.../node_modules/lru-cache/package.json | 36 +
.../node_modules/yallist/LICENSE | 15 +
.../node_modules/yallist/README.md | 204 +
.../node_modules/yallist/iterator.js | 7 +
.../node_modules/yallist/package.json | 29 +
.../node_modules/yallist/yallist.js | 370 +
node_modules/named-placeholders/package.json | 32 +
node_modules/negotiator/HISTORY.md | 108 +
node_modules/negotiator/LICENSE | 24 +
node_modules/negotiator/README.md | 203 +
node_modules/negotiator/index.js | 82 +
node_modules/negotiator/lib/charset.js | 169 +
node_modules/negotiator/lib/encoding.js | 184 +
node_modules/negotiator/lib/language.js | 179 +
node_modules/negotiator/lib/mediaType.js | 294 +
node_modules/negotiator/package.json | 42 +
.../.history/README_20210527203617.md | 2 +
.../.history/README_20210527212714.md | 41 +
.../.history/README_20210527213345.md | 36 +
.../.history/README_20210527213411.md | 36 +
.../.history/README_20210527213803.md | 36 +
.../.history/README_20210527214323.md | 38 +
.../.history/README_20210527214408.md | 38 +
.../.history/index_20210527203842.js | 0
.../.history/index_20210527203947.js | 8 +
.../.history/index_20210527204259.js | 9 +
.../.history/index_20210527204418.js | 9 +
.../.history/index_20210527204756.js | 11 +
.../.history/index_20210527204833.js | 11 +
.../.history/index_20210527211208.js | 15 +
.../.history/index_20210527211248.js | 15 +
.../.history/index_20210527212722.js | 23 +
.../.history/index_20210527212731.js | 23 +
.../.history/index_20210527212746.js | 15 +
.../.history/index_20210527212900.js | 16 +
.../.history/index_20210527213022.js | 16 +
.../.history/index_20210527213822.js | 16 +
.../.history/index_20210527213843.js | 17 +
.../.history/index_20210527213852.js | 17 +
.../.history/index_20210527213910.js | 16 +
.../.history/index_20210527214034.js | 16 +
.../.history/index_20210527214643.js | 41 +
.../.history/index_20210527214654.js | 41 +
.../.history/index_20210527214700.js | 16 +
.../.history/package_20210527203733.json | 19 +
.../.history/package_20210527203825.json | 16 +
.../.history/package_20210527204621.json | 19 +
.../.history/package_20210527204913.json | 25 +
.../.history/package_20210527204925.json | 25 +
.../.history/package_20210527205145.json | 29 +
.../.history/package_20210527205156.json | 29 +
.../.history/test_20210527205603.js | 0
.../.history/test_20210527205957.js | 3 +
.../.history/test_20210527210021.js | 3 +
node_modules/node-domexception/LICENSE | 21 +
node_modules/node-domexception/README.md | 46 +
node_modules/node-domexception/index.js | 16 +
node_modules/node-domexception/package.json | 29 +
node_modules/node-fetch/@types/index.d.ts | 218 +
node_modules/node-fetch/LICENSE.md | 22 +
node_modules/node-fetch/README.md | 871 ++
node_modules/node-fetch/package.json | 131 +
node_modules/node-fetch/src/body.js | 397 +
.../node-fetch/src/errors/abort-error.js | 10 +
node_modules/node-fetch/src/errors/base.js | 17 +
.../node-fetch/src/errors/fetch-error.js | 26 +
node_modules/node-fetch/src/headers.js | 267 +
node_modules/node-fetch/src/index.js | 417 +
node_modules/node-fetch/src/request.js | 317 +
node_modules/node-fetch/src/response.js | 141 +
.../node-fetch/src/utils/get-search.js | 9 +
.../node-fetch/src/utils/is-redirect.js | 11 +
node_modules/node-fetch/src/utils/is.js | 87 +
.../node-fetch/src/utils/multipart-parser.js | 432 +
node_modules/node-fetch/src/utils/referrer.js | 340 +
node_modules/nodemon/LICENSE | 21 +
node_modules/nodemon/README.md | 423 +
node_modules/nodemon/bin/nodemon.js | 16 +
node_modules/nodemon/bin/vwindows-kill.exe | Bin 0 -> 80384 bytes
node_modules/nodemon/bin/windows-kill.exe | Bin 0 -> 1289728 bytes
node_modules/nodemon/doc/cli/authors.txt | 8 +
node_modules/nodemon/doc/cli/config.txt | 44 +
node_modules/nodemon/doc/cli/help.txt | 29 +
node_modules/nodemon/doc/cli/logo.txt | 20 +
node_modules/nodemon/doc/cli/options.txt | 36 +
node_modules/nodemon/doc/cli/topics.txt | 8 +
node_modules/nodemon/doc/cli/usage.txt | 3 +
node_modules/nodemon/doc/cli/whoami.txt | 9 +
node_modules/nodemon/lib/cli/index.js | 49 +
node_modules/nodemon/lib/cli/parse.js | 230 +
node_modules/nodemon/lib/config/command.js | 43 +
node_modules/nodemon/lib/config/defaults.js | 28 +
node_modules/nodemon/lib/config/exec.js | 225 +
node_modules/nodemon/lib/config/index.js | 93 +
node_modules/nodemon/lib/config/load.js | 256 +
node_modules/nodemon/lib/help/index.js | 27 +
node_modules/nodemon/lib/index.js | 1 +
node_modules/nodemon/lib/monitor/index.js | 4 +
node_modules/nodemon/lib/monitor/match.js | 276 +
node_modules/nodemon/lib/monitor/run.js | 541 ++
node_modules/nodemon/lib/monitor/signals.js | 34 +
node_modules/nodemon/lib/monitor/watch.js | 239 +
node_modules/nodemon/lib/nodemon.js | 311 +
node_modules/nodemon/lib/rules/add.js | 89 +
node_modules/nodemon/lib/rules/index.js | 53 +
node_modules/nodemon/lib/rules/parse.js | 43 +
node_modules/nodemon/lib/spawn.js | 73 +
node_modules/nodemon/lib/utils/bus.js | 44 +
node_modules/nodemon/lib/utils/clone.js | 40 +
node_modules/nodemon/lib/utils/colour.js | 26 +
node_modules/nodemon/lib/utils/index.js | 102 +
node_modules/nodemon/lib/utils/log.js | 82 +
node_modules/nodemon/lib/utils/merge.js | 47 +
node_modules/nodemon/lib/version.js | 100 +
.../nodemon/node_modules/debug/CHANGELOG.md | 395 +
.../nodemon/node_modules/debug/LICENSE | 19 +
.../nodemon/node_modules/debug/README.md | 437 +
.../nodemon/node_modules/debug/node.js | 1 +
.../nodemon/node_modules/debug/package.json | 51 +
.../nodemon/node_modules/debug/src/browser.js | 180 +
.../nodemon/node_modules/debug/src/common.js | 249 +
.../nodemon/node_modules/debug/src/index.js | 12 +
.../nodemon/node_modules/debug/src/node.js | 177 +
node_modules/nodemon/node_modules/ms/index.js | 162 +
.../nodemon/node_modules/ms/license.md | 21 +
.../nodemon/node_modules/ms/package.json | 38 +
.../nodemon/node_modules/ms/readme.md | 59 +
node_modules/nodemon/package.json | 74 +
node_modules/nopt/.npmignore | 0
node_modules/nopt/LICENSE | 23 +
node_modules/nopt/README.md | 208 +
node_modules/nopt/bin/nopt.js | 44 +
node_modules/nopt/examples/my-program.js | 30 +
node_modules/nopt/lib/nopt.js | 552 ++
node_modules/nopt/package.json | 12 +
node_modules/normalize-path/LICENSE | 21 +
node_modules/normalize-path/README.md | 127 +
node_modules/normalize-path/index.js | 35 +
node_modules/normalize-path/package.json | 77 +
node_modules/object-inspect/.eslintrc | 53 +
.../object-inspect/.github/FUNDING.yml | 12 +
node_modules/object-inspect/.nycrc | 13 +
node_modules/object-inspect/CHANGELOG.md | 360 +
node_modules/object-inspect/LICENSE | 21 +
node_modules/object-inspect/example/all.js | 23 +
.../object-inspect/example/circular.js | 6 +
node_modules/object-inspect/example/fn.js | 5 +
.../object-inspect/example/inspect.js | 10 +
node_modules/object-inspect/index.js | 512 +
.../object-inspect/package-support.json | 20 +
node_modules/object-inspect/package.json | 94 +
node_modules/object-inspect/readme.markdown | 86 +
node_modules/object-inspect/test-core-js.js | 26 +
node_modules/object-inspect/test/bigint.js | 58 +
.../object-inspect/test/browser/dom.js | 15 +
node_modules/object-inspect/test/circular.js | 16 +
node_modules/object-inspect/test/deep.js | 12 +
node_modules/object-inspect/test/element.js | 53 +
node_modules/object-inspect/test/err.js | 48 +
node_modules/object-inspect/test/fakes.js | 29 +
node_modules/object-inspect/test/fn.js | 76 +
node_modules/object-inspect/test/has.js | 15 +
node_modules/object-inspect/test/holes.js | 15 +
.../object-inspect/test/indent-option.js | 271 +
node_modules/object-inspect/test/inspect.js | 139 +
node_modules/object-inspect/test/lowbyte.js | 12 +
node_modules/object-inspect/test/number.js | 58 +
.../object-inspect/test/quoteStyle.js | 17 +
.../object-inspect/test/toStringTag.js | 40 +
node_modules/object-inspect/test/undef.js | 12 +
node_modules/object-inspect/test/values.js | 211 +
node_modules/object-inspect/util.inspect.js | 1 +
node_modules/on-finished/HISTORY.md | 98 +
node_modules/on-finished/LICENSE | 23 +
node_modules/on-finished/README.md | 162 +
node_modules/on-finished/index.js | 234 +
node_modules/on-finished/package.json | 39 +
node_modules/parseurl/HISTORY.md | 58 +
node_modules/parseurl/LICENSE | 24 +
node_modules/parseurl/README.md | 133 +
node_modules/parseurl/index.js | 158 +
node_modules/parseurl/package.json | 40 +
node_modules/path-to-regexp/History.md | 36 +
node_modules/path-to-regexp/LICENSE | 21 +
node_modules/path-to-regexp/Readme.md | 35 +
node_modules/path-to-regexp/index.js | 129 +
node_modules/path-to-regexp/package.json | 30 +
node_modules/picomatch/CHANGELOG.md | 136 +
node_modules/picomatch/LICENSE | 21 +
node_modules/picomatch/README.md | 708 ++
node_modules/picomatch/index.js | 3 +
node_modules/picomatch/lib/constants.js | 179 +
node_modules/picomatch/lib/parse.js | 1091 +++
node_modules/picomatch/lib/picomatch.js | 342 +
node_modules/picomatch/lib/scan.js | 391 +
node_modules/picomatch/lib/utils.js | 64 +
node_modules/picomatch/package.json | 81 +
node_modules/proxy-addr/HISTORY.md | 161 +
node_modules/proxy-addr/LICENSE | 22 +
node_modules/proxy-addr/README.md | 139 +
node_modules/proxy-addr/index.js | 327 +
node_modules/proxy-addr/package.json | 47 +
node_modules/pseudomap/LICENSE | 15 +
node_modules/pseudomap/README.md | 60 +
node_modules/pseudomap/map.js | 9 +
node_modules/pseudomap/package.json | 25 +
node_modules/pseudomap/pseudomap.js | 113 +
node_modules/pseudomap/test/basic.js | 86 +
node_modules/pstree.remy/.travis.yml | 8 +
node_modules/pstree.remy/LICENSE | 7 +
node_modules/pstree.remy/README.md | 26 +
node_modules/pstree.remy/lib/index.js | 37 +
node_modules/pstree.remy/lib/tree.js | 37 +
node_modules/pstree.remy/lib/utils.js | 53 +
node_modules/pstree.remy/package.json | 33 +
.../pstree.remy/tests/fixtures/index.js | 13 +
node_modules/pstree.remy/tests/fixtures/out1 | 10 +
node_modules/pstree.remy/tests/fixtures/out2 | 29 +
node_modules/pstree.remy/tests/index.test.js | 51 +
node_modules/qs/.editorconfig | 40 +
node_modules/qs/.eslintrc | 38 +
node_modules/qs/.github/FUNDING.yml | 12 +
node_modules/qs/.nycrc | 13 +
node_modules/qs/CHANGELOG.md | 388 +
node_modules/qs/LICENSE.md | 29 +
node_modules/qs/README.md | 623 ++
node_modules/qs/dist/qs.js | 2044 ++++
node_modules/qs/lib/formats.js | 23 +
node_modules/qs/lib/index.js | 11 +
node_modules/qs/lib/parse.js | 263 +
node_modules/qs/lib/stringify.js | 317 +
node_modules/qs/lib/utils.js | 252 +
node_modules/qs/package.json | 73 +
node_modules/qs/test/parse.js | 841 ++
node_modules/qs/test/stringify.js | 865 ++
node_modules/qs/test/utils.js | 136 +
node_modules/range-parser/HISTORY.md | 56 +
node_modules/range-parser/LICENSE | 23 +
node_modules/range-parser/README.md | 84 +
node_modules/range-parser/index.js | 162 +
node_modules/range-parser/package.json | 44 +
node_modules/raw-body/HISTORY.md | 303 +
node_modules/raw-body/LICENSE | 22 +
node_modules/raw-body/README.md | 223 +
node_modules/raw-body/SECURITY.md | 24 +
node_modules/raw-body/index.d.ts | 87 +
node_modules/raw-body/index.js | 329 +
node_modules/raw-body/package.json | 49 +
node_modules/readdirp/LICENSE | 21 +
node_modules/readdirp/README.md | 122 +
node_modules/readdirp/index.d.ts | 43 +
node_modules/readdirp/index.js | 287 +
node_modules/readdirp/package.json | 122 +
node_modules/safe-buffer/LICENSE | 21 +
node_modules/safe-buffer/README.md | 584 ++
node_modules/safe-buffer/index.d.ts | 187 +
node_modules/safe-buffer/index.js | 65 +
node_modules/safe-buffer/package.json | 51 +
node_modules/safer-buffer/LICENSE | 21 +
node_modules/safer-buffer/Porting-Buffer.md | 268 +
node_modules/safer-buffer/Readme.md | 156 +
node_modules/safer-buffer/dangerous.js | 58 +
node_modules/safer-buffer/package.json | 34 +
node_modules/safer-buffer/safer.js | 77 +
node_modules/safer-buffer/tests.js | 406 +
node_modules/semver/CHANGELOG.md | 39 +
node_modules/semver/LICENSE | 15 +
node_modules/semver/README.md | 412 +
node_modules/semver/bin/semver | 160 +
node_modules/semver/package.json | 28 +
node_modules/semver/range.bnf | 16 +
node_modules/semver/semver.js | 1483 +++
node_modules/send/HISTORY.md | 521 +
node_modules/send/LICENSE | 23 +
node_modules/send/README.md | 327 +
node_modules/send/SECURITY.md | 24 +
node_modules/send/index.js | 1143 +++
node_modules/send/node_modules/ms/index.js | 162 +
node_modules/send/node_modules/ms/license.md | 21 +
.../send/node_modules/ms/package.json | 38 +
node_modules/send/node_modules/ms/readme.md | 59 +
node_modules/send/package.json | 62 +
node_modules/seq-queue/.jshintrc | 19 +
node_modules/seq-queue/.npmignore | 3 +
node_modules/seq-queue/AUTHORS | 1 +
node_modules/seq-queue/LICENSE | 22 +
node_modules/seq-queue/Makefile | 9 +
node_modules/seq-queue/README.md | 75 +
node_modules/seq-queue/index.js | 1 +
node_modules/seq-queue/lib/.npmignore | 0
node_modules/seq-queue/lib/seq-queue.js | 199 +
node_modules/seq-queue/package.json | 17 +
node_modules/seq-queue/test/seq-queue-test.js | 307 +
node_modules/serve-static/HISTORY.md | 471 +
node_modules/serve-static/LICENSE | 25 +
node_modules/serve-static/README.md | 257 +
node_modules/serve-static/index.js | 210 +
node_modules/serve-static/package.json | 42 +
node_modules/setprototypeof/LICENSE | 13 +
node_modules/setprototypeof/README.md | 31 +
node_modules/setprototypeof/index.d.ts | 2 +
node_modules/setprototypeof/index.js | 17 +
node_modules/setprototypeof/package.json | 38 +
node_modules/setprototypeof/test/index.js | 24 +
node_modules/side-channel/.eslintignore | 1 +
node_modules/side-channel/.eslintrc | 11 +
node_modules/side-channel/.github/FUNDING.yml | 12 +
node_modules/side-channel/.nycrc | 13 +
node_modules/side-channel/CHANGELOG.md | 65 +
node_modules/side-channel/LICENSE | 21 +
node_modules/side-channel/README.md | 2 +
node_modules/side-channel/index.js | 124 +
node_modules/side-channel/package.json | 67 +
node_modules/side-channel/test/index.js | 78 +
node_modules/simple-update-notifier/LICENSE | 21 +
node_modules/simple-update-notifier/README.md | 67 +
.../simple-update-notifier/build/index.d.ts | 12 +
.../simple-update-notifier/build/index.js | 202 +
.../node_modules/.bin/semver | 12 +
.../node_modules/.bin/semver.cmd | 17 +
.../node_modules/.bin/semver.ps1 | 28 +
.../node_modules/semver/CHANGELOG.md | 74 +
.../node_modules/semver/LICENSE | 15 +
.../node_modules/semver/README.md | 499 +
.../node_modules/semver/bin/semver.js | 173 +
.../node_modules/semver/classes/comparator.js | 139 +
.../node_modules/semver/classes/index.js | 5 +
.../node_modules/semver/classes/range.js | 448 +
.../node_modules/semver/classes/semver.js | 290 +
.../node_modules/semver/functions/clean.js | 6 +
.../node_modules/semver/functions/cmp.js | 48 +
.../node_modules/semver/functions/coerce.js | 51 +
.../semver/functions/compare-build.js | 7 +
.../semver/functions/compare-loose.js | 3 +
.../node_modules/semver/functions/compare.js | 5 +
.../node_modules/semver/functions/diff.js | 25 +
.../node_modules/semver/functions/eq.js | 3 +
.../node_modules/semver/functions/gt.js | 3 +
.../node_modules/semver/functions/gte.js | 3 +
.../node_modules/semver/functions/inc.js | 15 +
.../node_modules/semver/functions/lt.js | 3 +
.../node_modules/semver/functions/lte.js | 3 +
.../node_modules/semver/functions/major.js | 3 +
.../node_modules/semver/functions/minor.js | 3 +
.../node_modules/semver/functions/neq.js | 3 +
.../node_modules/semver/functions/parse.js | 37 +
.../node_modules/semver/functions/patch.js | 3 +
.../semver/functions/prerelease.js | 6 +
.../node_modules/semver/functions/rcompare.js | 3 +
.../node_modules/semver/functions/rsort.js | 3 +
.../semver/functions/satisfies.js | 10 +
.../node_modules/semver/functions/sort.js | 3 +
.../node_modules/semver/functions/valid.js | 6 +
.../node_modules/semver/index.js | 64 +
.../node_modules/semver/internal/constants.js | 17 +
.../node_modules/semver/internal/debug.js | 9 +
.../semver/internal/identifiers.js | 23 +
.../node_modules/semver/internal/re.js | 179 +
.../node_modules/semver/package.json | 34 +
.../node_modules/semver/range.bnf | 16 +
.../node_modules/semver/ranges/gtr.js | 4 +
.../node_modules/semver/ranges/intersects.js | 7 +
.../node_modules/semver/ranges/ltr.js | 4 +
.../semver/ranges/max-satisfying.js | 25 +
.../semver/ranges/min-satisfying.js | 24 +
.../node_modules/semver/ranges/min-version.js | 57 +
.../node_modules/semver/ranges/outside.js | 80 +
.../semver/ranges/to-comparators.js | 8 +
.../node_modules/semver/ranges/valid.js | 11 +
.../simple-update-notifier/package.json | 97 +
.../src/borderedText.ts | 12 +
.../simple-update-notifier/src/cache.spec.ts | 12 +
.../simple-update-notifier/src/cache.ts | 41 +
.../src/getDistVersion.spec.ts | 35 +
.../src/getDistVersion.ts | 29 +
.../src/hasNewVersion.spec.ts | 82 +
.../src/hasNewVersion.ts | 30 +
.../simple-update-notifier/src/index.spec.ts | 27 +
.../simple-update-notifier/src/index.ts | 28 +
.../simple-update-notifier/src/isNpmOrYarn.ts | 12 +
.../simple-update-notifier/src/types.ts | 7 +
node_modules/sqlstring/HISTORY.md | 53 +
node_modules/sqlstring/LICENSE | 19 +
node_modules/sqlstring/README.md | 205 +
node_modules/sqlstring/index.js | 1 +
node_modules/sqlstring/lib/SqlString.js | 237 +
node_modules/sqlstring/package.json | 47 +
node_modules/statuses/HISTORY.md | 82 +
node_modules/statuses/LICENSE | 23 +
node_modules/statuses/README.md | 136 +
node_modules/statuses/codes.json | 65 +
node_modules/statuses/index.js | 146 +
node_modules/statuses/package.json | 49 +
node_modules/supports-color/browser.js | 5 +
node_modules/supports-color/index.js | 131 +
node_modules/supports-color/license | 9 +
node_modules/supports-color/package.json | 53 +
node_modules/supports-color/readme.md | 66 +
node_modules/to-regex-range/LICENSE | 21 +
node_modules/to-regex-range/README.md | 305 +
node_modules/to-regex-range/index.js | 288 +
node_modules/to-regex-range/package.json | 88 +
node_modules/toidentifier/HISTORY.md | 9 +
node_modules/toidentifier/LICENSE | 21 +
node_modules/toidentifier/README.md | 61 +
node_modules/toidentifier/index.js | 32 +
node_modules/toidentifier/package.json | 38 +
node_modules/touch/LICENSE | 15 +
node_modules/touch/README.md | 52 +
node_modules/touch/bin/nodetouch.js | 112 +
node_modules/touch/index.js | 224 +
node_modules/touch/package.json | 28 +
node_modules/type-is/HISTORY.md | 259 +
node_modules/type-is/LICENSE | 23 +
node_modules/type-is/README.md | 170 +
node_modules/type-is/index.js | 266 +
node_modules/type-is/package.json | 45 +
.../undefsafe/.github/workflows/release.yml | 25 +
node_modules/undefsafe/.jscsrc | 13 +
node_modules/undefsafe/.jshintrc | 16 +
node_modules/undefsafe/.travis.yml | 18 +
node_modules/undefsafe/LICENSE | 22 +
node_modules/undefsafe/README.md | 63 +
node_modules/undefsafe/example.js | 14 +
node_modules/undefsafe/lib/undefsafe.js | 125 +
node_modules/undefsafe/package.json | 34 +
node_modules/unpipe/HISTORY.md | 4 +
node_modules/unpipe/LICENSE | 22 +
node_modules/unpipe/README.md | 43 +
node_modules/unpipe/index.js | 69 +
node_modules/unpipe/package.json | 27 +
node_modules/utils-merge/.npmignore | 9 +
node_modules/utils-merge/LICENSE | 20 +
node_modules/utils-merge/README.md | 34 +
node_modules/utils-merge/index.js | 23 +
node_modules/utils-merge/package.json | 40 +
node_modules/vary/HISTORY.md | 39 +
node_modules/vary/LICENSE | 22 +
node_modules/vary/README.md | 101 +
node_modules/vary/index.js | 149 +
node_modules/vary/package.json | 43 +
node_modules/web-streams-polyfill/LICENSE | 22 +
node_modules/web-streams-polyfill/README.md | 114 +
.../dist/polyfill.es2018.js | 4241 ++++++++
.../dist/polyfill.es2018.js.map | 1 +
.../dist/polyfill.es2018.min.js | 2 +
.../dist/polyfill.es2018.min.js.map | 1 +
.../dist/polyfill.es2018.mjs | 4219 ++++++++
.../dist/polyfill.es2018.mjs.map | 1 +
.../web-streams-polyfill/dist/polyfill.es6.js | 4252 ++++++++
.../dist/polyfill.es6.js.map | 1 +
.../dist/polyfill.es6.min.js | 2 +
.../dist/polyfill.es6.min.js.map | 1 +
.../dist/polyfill.es6.mjs | 4230 ++++++++
.../dist/polyfill.es6.mjs.map | 1 +
.../web-streams-polyfill/dist/polyfill.js | 4382 +++++++++
.../web-streams-polyfill/dist/polyfill.js.map | 1 +
.../web-streams-polyfill/dist/polyfill.min.js | 2 +
.../dist/polyfill.min.js.map | 1 +
.../web-streams-polyfill/dist/polyfill.mjs | 4360 +++++++++
.../dist/polyfill.mjs.map | 1 +
.../dist/ponyfill.es2018.js | 4213 ++++++++
.../dist/ponyfill.es2018.js.map | 1 +
.../dist/ponyfill.es2018.mjs | 4191 ++++++++
.../dist/ponyfill.es2018.mjs.map | 1 +
.../web-streams-polyfill/dist/ponyfill.es6.js | 4224 ++++++++
.../dist/ponyfill.es6.js.map | 1 +
.../dist/ponyfill.es6.mjs | 4202 ++++++++
.../dist/ponyfill.es6.mjs.map | 1 +
.../web-streams-polyfill/dist/ponyfill.js | 4354 +++++++++
.../web-streams-polyfill/dist/ponyfill.js.map | 1 +
.../web-streams-polyfill/dist/ponyfill.mjs | 4332 +++++++++
.../dist/ponyfill.mjs.map | 1 +
.../dist/types/polyfill.d.ts | 771 ++
.../dist/types/ts3.6/polyfill.d.ts | 771 ++
.../dist/types/tsdoc-metadata.json | 11 +
.../web-streams-polyfill/es2018/package.json | 7 +
.../web-streams-polyfill/es6/package.json | 7 +
.../web-streams-polyfill/package.json | 76 +
.../ponyfill/es2018/package.json | 6 +
.../ponyfill/es6/package.json | 6 +
.../ponyfill/package.json | 6 +
node_modules/yallist/LICENSE | 15 +
node_modules/yallist/README.md | 204 +
node_modules/yallist/iterator.js | 8 +
node_modules/yallist/package.json | 29 +
node_modules/yallist/yallist.js | 426 +
package-lock.json | 2109 ++++
package.json | 29 +
routes/books.js | 17 +
routes/index.js | 7 +
services/db.js | 13 +
services/requestService.js | 22 +
1155 files changed, 191120 insertions(+)
create mode 100644 StartUpChallenge/Data/BookReturnRecordDetails.sql
create mode 100644 StartUpChallenge/Data/BookReturnRecords.sql
create mode 100644 StartUpChallenge/Data/Books.sql
create mode 100644 StartUpChallenge/Data/BorrowersRecordDetails.sql
create mode 100644 StartUpChallenge/Data/BorrowersRecords.sql
create mode 100644 StartUpChallenge/Data/LibraryStaff.sql
create mode 100644 StartUpChallenge/Data/Members.sql
create mode 100644 StartUpChallenge/startUpChallengeScript.sql
create mode 100644 StartUpChallenge/startUpChallengeScriptMySQL.sql
create mode 100644 config.js
create mode 100644 controllers/books.js
create mode 100644 helper.js
create mode 100644 helper/errorHandler.js
create mode 100644 index.js
create mode 100644 node_modules/.bin/mime
create mode 100644 node_modules/.bin/mime.cmd
create mode 100644 node_modules/.bin/mime.ps1
create mode 100644 node_modules/.bin/nodemon
create mode 100644 node_modules/.bin/nodemon.cmd
create mode 100644 node_modules/.bin/nodemon.ps1
create mode 100644 node_modules/.bin/nodetouch
create mode 100644 node_modules/.bin/nodetouch.cmd
create mode 100644 node_modules/.bin/nodetouch.ps1
create mode 100644 node_modules/.bin/nopt
create mode 100644 node_modules/.bin/nopt.cmd
create mode 100644 node_modules/.bin/nopt.ps1
create mode 100644 node_modules/.bin/semver
create mode 100644 node_modules/.bin/semver.cmd
create mode 100644 node_modules/.bin/semver.ps1
create mode 100644 node_modules/.package-lock.json
create mode 100644 node_modules/abbrev/LICENSE
create mode 100644 node_modules/abbrev/README.md
create mode 100644 node_modules/abbrev/abbrev.js
create mode 100644 node_modules/abbrev/package.json
create mode 100644 node_modules/accepts/HISTORY.md
create mode 100644 node_modules/accepts/LICENSE
create mode 100644 node_modules/accepts/README.md
create mode 100644 node_modules/accepts/index.js
create mode 100644 node_modules/accepts/package.json
create mode 100644 node_modules/anymatch/LICENSE
create mode 100644 node_modules/anymatch/README.md
create mode 100644 node_modules/anymatch/index.d.ts
create mode 100644 node_modules/anymatch/index.js
create mode 100644 node_modules/anymatch/package.json
create mode 100644 node_modules/array-flatten/LICENSE
create mode 100644 node_modules/array-flatten/README.md
create mode 100644 node_modules/array-flatten/array-flatten.js
create mode 100644 node_modules/array-flatten/package.json
create mode 100644 node_modules/asynckit/LICENSE
create mode 100644 node_modules/asynckit/README.md
create mode 100644 node_modules/asynckit/bench.js
create mode 100644 node_modules/asynckit/index.js
create mode 100644 node_modules/asynckit/lib/abort.js
create mode 100644 node_modules/asynckit/lib/async.js
create mode 100644 node_modules/asynckit/lib/defer.js
create mode 100644 node_modules/asynckit/lib/iterate.js
create mode 100644 node_modules/asynckit/lib/readable_asynckit.js
create mode 100644 node_modules/asynckit/lib/readable_parallel.js
create mode 100644 node_modules/asynckit/lib/readable_serial.js
create mode 100644 node_modules/asynckit/lib/readable_serial_ordered.js
create mode 100644 node_modules/asynckit/lib/state.js
create mode 100644 node_modules/asynckit/lib/streamify.js
create mode 100644 node_modules/asynckit/lib/terminator.js
create mode 100644 node_modules/asynckit/package.json
create mode 100644 node_modules/asynckit/parallel.js
create mode 100644 node_modules/asynckit/serial.js
create mode 100644 node_modules/asynckit/serialOrdered.js
create mode 100644 node_modules/asynckit/stream.js
create mode 100644 node_modules/axios/CHANGELOG.md
create mode 100644 node_modules/axios/LICENSE
create mode 100644 node_modules/axios/README.md
create mode 100644 node_modules/axios/SECURITY.md
create mode 100644 node_modules/axios/UPGRADE_GUIDE.md
create mode 100644 node_modules/axios/dist/axios.js
create mode 100644 node_modules/axios/dist/axios.map
create mode 100644 node_modules/axios/dist/axios.min.js
create mode 100644 node_modules/axios/dist/axios.min.map
create mode 100644 node_modules/axios/index.d.ts
create mode 100644 node_modules/axios/index.js
create mode 100644 node_modules/axios/lib/adapters/README.md
create mode 100644 node_modules/axios/lib/adapters/http.js
create mode 100644 node_modules/axios/lib/adapters/xhr.js
create mode 100644 node_modules/axios/lib/axios.js
create mode 100644 node_modules/axios/lib/cancel/CancelToken.js
create mode 100644 node_modules/axios/lib/cancel/CanceledError.js
create mode 100644 node_modules/axios/lib/cancel/isCancel.js
create mode 100644 node_modules/axios/lib/core/Axios.js
create mode 100644 node_modules/axios/lib/core/AxiosError.js
create mode 100644 node_modules/axios/lib/core/InterceptorManager.js
create mode 100644 node_modules/axios/lib/core/README.md
create mode 100644 node_modules/axios/lib/core/buildFullPath.js
create mode 100644 node_modules/axios/lib/core/dispatchRequest.js
create mode 100644 node_modules/axios/lib/core/mergeConfig.js
create mode 100644 node_modules/axios/lib/core/settle.js
create mode 100644 node_modules/axios/lib/core/transformData.js
create mode 100644 node_modules/axios/lib/defaults/env/FormData.js
create mode 100644 node_modules/axios/lib/defaults/index.js
create mode 100644 node_modules/axios/lib/defaults/transitional.js
create mode 100644 node_modules/axios/lib/env/README.md
create mode 100644 node_modules/axios/lib/env/data.js
create mode 100644 node_modules/axios/lib/helpers/README.md
create mode 100644 node_modules/axios/lib/helpers/bind.js
create mode 100644 node_modules/axios/lib/helpers/buildURL.js
create mode 100644 node_modules/axios/lib/helpers/combineURLs.js
create mode 100644 node_modules/axios/lib/helpers/cookies.js
create mode 100644 node_modules/axios/lib/helpers/deprecatedMethod.js
create mode 100644 node_modules/axios/lib/helpers/isAbsoluteURL.js
create mode 100644 node_modules/axios/lib/helpers/isAxiosError.js
create mode 100644 node_modules/axios/lib/helpers/isURLSameOrigin.js
create mode 100644 node_modules/axios/lib/helpers/normalizeHeaderName.js
create mode 100644 node_modules/axios/lib/helpers/null.js
create mode 100644 node_modules/axios/lib/helpers/parseHeaders.js
create mode 100644 node_modules/axios/lib/helpers/parseProtocol.js
create mode 100644 node_modules/axios/lib/helpers/spread.js
create mode 100644 node_modules/axios/lib/helpers/toFormData.js
create mode 100644 node_modules/axios/lib/helpers/validator.js
create mode 100644 node_modules/axios/lib/utils.js
create mode 100644 node_modules/axios/package.json
create mode 100644 node_modules/axios/tsconfig.json
create mode 100644 node_modules/axios/tslint.json
create mode 100644 node_modules/balanced-match/.github/FUNDING.yml
create mode 100644 node_modules/balanced-match/LICENSE.md
create mode 100644 node_modules/balanced-match/README.md
create mode 100644 node_modules/balanced-match/index.js
create mode 100644 node_modules/balanced-match/package.json
create mode 100644 node_modules/binary-extensions/binary-extensions.json
create mode 100644 node_modules/binary-extensions/binary-extensions.json.d.ts
create mode 100644 node_modules/binary-extensions/index.d.ts
create mode 100644 node_modules/binary-extensions/index.js
create mode 100644 node_modules/binary-extensions/license
create mode 100644 node_modules/binary-extensions/package.json
create mode 100644 node_modules/binary-extensions/readme.md
create mode 100644 node_modules/body-parser/HISTORY.md
create mode 100644 node_modules/body-parser/LICENSE
create mode 100644 node_modules/body-parser/README.md
create mode 100644 node_modules/body-parser/SECURITY.md
create mode 100644 node_modules/body-parser/index.js
create mode 100644 node_modules/body-parser/lib/read.js
create mode 100644 node_modules/body-parser/lib/types/json.js
create mode 100644 node_modules/body-parser/lib/types/raw.js
create mode 100644 node_modules/body-parser/lib/types/text.js
create mode 100644 node_modules/body-parser/lib/types/urlencoded.js
create mode 100644 node_modules/body-parser/package.json
create mode 100644 node_modules/brace-expansion/LICENSE
create mode 100644 node_modules/brace-expansion/README.md
create mode 100644 node_modules/brace-expansion/index.js
create mode 100644 node_modules/brace-expansion/package.json
create mode 100644 node_modules/braces/CHANGELOG.md
create mode 100644 node_modules/braces/LICENSE
create mode 100644 node_modules/braces/README.md
create mode 100644 node_modules/braces/index.js
create mode 100644 node_modules/braces/lib/compile.js
create mode 100644 node_modules/braces/lib/constants.js
create mode 100644 node_modules/braces/lib/expand.js
create mode 100644 node_modules/braces/lib/parse.js
create mode 100644 node_modules/braces/lib/stringify.js
create mode 100644 node_modules/braces/lib/utils.js
create mode 100644 node_modules/braces/package.json
create mode 100644 node_modules/bytes/History.md
create mode 100644 node_modules/bytes/LICENSE
create mode 100644 node_modules/bytes/Readme.md
create mode 100644 node_modules/bytes/index.js
create mode 100644 node_modules/bytes/package.json
create mode 100644 node_modules/call-bind/.eslintignore
create mode 100644 node_modules/call-bind/.eslintrc
create mode 100644 node_modules/call-bind/.github/FUNDING.yml
create mode 100644 node_modules/call-bind/.nycrc
create mode 100644 node_modules/call-bind/CHANGELOG.md
create mode 100644 node_modules/call-bind/LICENSE
create mode 100644 node_modules/call-bind/README.md
create mode 100644 node_modules/call-bind/callBound.js
create mode 100644 node_modules/call-bind/index.js
create mode 100644 node_modules/call-bind/package.json
create mode 100644 node_modules/call-bind/test/callBound.js
create mode 100644 node_modules/call-bind/test/index.js
create mode 100644 node_modules/chokidar/LICENSE
create mode 100644 node_modules/chokidar/README.md
create mode 100644 node_modules/chokidar/index.js
create mode 100644 node_modules/chokidar/lib/constants.js
create mode 100644 node_modules/chokidar/lib/fsevents-handler.js
create mode 100644 node_modules/chokidar/lib/nodefs-handler.js
create mode 100644 node_modules/chokidar/package.json
create mode 100644 node_modules/chokidar/types/index.d.ts
create mode 100644 node_modules/combined-stream/License
create mode 100644 node_modules/combined-stream/Readme.md
create mode 100644 node_modules/combined-stream/lib/combined_stream.js
create mode 100644 node_modules/combined-stream/package.json
create mode 100644 node_modules/combined-stream/yarn.lock
create mode 100644 node_modules/concat-map/.travis.yml
create mode 100644 node_modules/concat-map/LICENSE
create mode 100644 node_modules/concat-map/README.markdown
create mode 100644 node_modules/concat-map/example/map.js
create mode 100644 node_modules/concat-map/index.js
create mode 100644 node_modules/concat-map/package.json
create mode 100644 node_modules/concat-map/test/map.js
create mode 100644 node_modules/content-disposition/HISTORY.md
create mode 100644 node_modules/content-disposition/LICENSE
create mode 100644 node_modules/content-disposition/README.md
create mode 100644 node_modules/content-disposition/index.js
create mode 100644 node_modules/content-disposition/package.json
create mode 100644 node_modules/content-type/HISTORY.md
create mode 100644 node_modules/content-type/LICENSE
create mode 100644 node_modules/content-type/README.md
create mode 100644 node_modules/content-type/index.js
create mode 100644 node_modules/content-type/package.json
create mode 100644 node_modules/cookie-signature/.npmignore
create mode 100644 node_modules/cookie-signature/History.md
create mode 100644 node_modules/cookie-signature/Readme.md
create mode 100644 node_modules/cookie-signature/index.js
create mode 100644 node_modules/cookie-signature/package.json
create mode 100644 node_modules/cookie/HISTORY.md
create mode 100644 node_modules/cookie/LICENSE
create mode 100644 node_modules/cookie/README.md
create mode 100644 node_modules/cookie/SECURITY.md
create mode 100644 node_modules/cookie/index.js
create mode 100644 node_modules/cookie/package.json
create mode 100644 node_modules/data-uri-to-buffer/README.md
create mode 100644 node_modules/data-uri-to-buffer/dist/index.d.ts
create mode 100644 node_modules/data-uri-to-buffer/dist/index.js
create mode 100644 node_modules/data-uri-to-buffer/dist/index.js.map
create mode 100644 node_modules/data-uri-to-buffer/dist/src/index.d.ts
create mode 100644 node_modules/data-uri-to-buffer/dist/src/index.js
create mode 100644 node_modules/data-uri-to-buffer/dist/src/index.js.map
create mode 100644 node_modules/data-uri-to-buffer/dist/test/test.d.ts
create mode 100644 node_modules/data-uri-to-buffer/dist/test/test.js
create mode 100644 node_modules/data-uri-to-buffer/dist/test/test.js.map
create mode 100644 node_modules/data-uri-to-buffer/package.json
create mode 100644 node_modules/data-uri-to-buffer/src/index.ts
create mode 100644 node_modules/debug/.coveralls.yml
create mode 100644 node_modules/debug/.eslintrc
create mode 100644 node_modules/debug/.npmignore
create mode 100644 node_modules/debug/.travis.yml
create mode 100644 node_modules/debug/CHANGELOG.md
create mode 100644 node_modules/debug/LICENSE
create mode 100644 node_modules/debug/Makefile
create mode 100644 node_modules/debug/README.md
create mode 100644 node_modules/debug/component.json
create mode 100644 node_modules/debug/karma.conf.js
create mode 100644 node_modules/debug/node.js
create mode 100644 node_modules/debug/package.json
create mode 100644 node_modules/debug/src/browser.js
create mode 100644 node_modules/debug/src/debug.js
create mode 100644 node_modules/debug/src/index.js
create mode 100644 node_modules/debug/src/inspector-log.js
create mode 100644 node_modules/debug/src/node.js
create mode 100644 node_modules/delayed-stream/.npmignore
create mode 100644 node_modules/delayed-stream/License
create mode 100644 node_modules/delayed-stream/Makefile
create mode 100644 node_modules/delayed-stream/Readme.md
create mode 100644 node_modules/delayed-stream/lib/delayed_stream.js
create mode 100644 node_modules/delayed-stream/package.json
create mode 100644 node_modules/denque/CHANGELOG.md
create mode 100644 node_modules/denque/LICENSE
create mode 100644 node_modules/denque/README.md
create mode 100644 node_modules/denque/index.d.ts
create mode 100644 node_modules/denque/index.js
create mode 100644 node_modules/denque/package.json
create mode 100644 node_modules/depd/History.md
create mode 100644 node_modules/depd/LICENSE
create mode 100644 node_modules/depd/Readme.md
create mode 100644 node_modules/depd/index.js
create mode 100644 node_modules/depd/lib/browser/index.js
create mode 100644 node_modules/depd/package.json
create mode 100644 node_modules/destroy/LICENSE
create mode 100644 node_modules/destroy/README.md
create mode 100644 node_modules/destroy/index.js
create mode 100644 node_modules/destroy/package.json
create mode 100644 node_modules/ee-first/LICENSE
create mode 100644 node_modules/ee-first/README.md
create mode 100644 node_modules/ee-first/index.js
create mode 100644 node_modules/ee-first/package.json
create mode 100644 node_modules/encodeurl/HISTORY.md
create mode 100644 node_modules/encodeurl/LICENSE
create mode 100644 node_modules/encodeurl/README.md
create mode 100644 node_modules/encodeurl/index.js
create mode 100644 node_modules/encodeurl/package.json
create mode 100644 node_modules/escape-html/LICENSE
create mode 100644 node_modules/escape-html/Readme.md
create mode 100644 node_modules/escape-html/index.js
create mode 100644 node_modules/escape-html/package.json
create mode 100644 node_modules/etag/HISTORY.md
create mode 100644 node_modules/etag/LICENSE
create mode 100644 node_modules/etag/README.md
create mode 100644 node_modules/etag/index.js
create mode 100644 node_modules/etag/package.json
create mode 100644 node_modules/express/History.md
create mode 100644 node_modules/express/LICENSE
create mode 100644 node_modules/express/Readme.md
create mode 100644 node_modules/express/index.js
create mode 100644 node_modules/express/lib/application.js
create mode 100644 node_modules/express/lib/express.js
create mode 100644 node_modules/express/lib/middleware/init.js
create mode 100644 node_modules/express/lib/middleware/query.js
create mode 100644 node_modules/express/lib/request.js
create mode 100644 node_modules/express/lib/response.js
create mode 100644 node_modules/express/lib/router/index.js
create mode 100644 node_modules/express/lib/router/layer.js
create mode 100644 node_modules/express/lib/router/route.js
create mode 100644 node_modules/express/lib/utils.js
create mode 100644 node_modules/express/lib/view.js
create mode 100644 node_modules/express/package.json
create mode 100644 node_modules/fetch-blob/LICENSE
create mode 100644 node_modules/fetch-blob/README.md
create mode 100644 node_modules/fetch-blob/file.d.ts
create mode 100644 node_modules/fetch-blob/file.js
create mode 100644 node_modules/fetch-blob/from.d.ts
create mode 100644 node_modules/fetch-blob/from.js
create mode 100644 node_modules/fetch-blob/index.d.ts
create mode 100644 node_modules/fetch-blob/index.js
create mode 100644 node_modules/fetch-blob/package.json
create mode 100644 node_modules/fetch-blob/streams.cjs
create mode 100644 node_modules/fill-range/LICENSE
create mode 100644 node_modules/fill-range/README.md
create mode 100644 node_modules/fill-range/index.js
create mode 100644 node_modules/fill-range/package.json
create mode 100644 node_modules/finalhandler/HISTORY.md
create mode 100644 node_modules/finalhandler/LICENSE
create mode 100644 node_modules/finalhandler/README.md
create mode 100644 node_modules/finalhandler/SECURITY.md
create mode 100644 node_modules/finalhandler/index.js
create mode 100644 node_modules/finalhandler/package.json
create mode 100644 node_modules/follow-redirects/LICENSE
create mode 100644 node_modules/follow-redirects/README.md
create mode 100644 node_modules/follow-redirects/debug.js
create mode 100644 node_modules/follow-redirects/http.js
create mode 100644 node_modules/follow-redirects/https.js
create mode 100644 node_modules/follow-redirects/index.js
create mode 100644 node_modules/follow-redirects/package.json
create mode 100644 node_modules/form-data/License
create mode 100644 node_modules/form-data/README.md.bak
create mode 100644 node_modules/form-data/Readme.md
create mode 100644 node_modules/form-data/index.d.ts
create mode 100644 node_modules/form-data/lib/browser.js
create mode 100644 node_modules/form-data/lib/form_data.js
create mode 100644 node_modules/form-data/lib/populate.js
create mode 100644 node_modules/form-data/package.json
create mode 100644 node_modules/formdata-polyfill/FormData.js
create mode 100644 node_modules/formdata-polyfill/LICENSE
create mode 100644 node_modules/formdata-polyfill/README.md
create mode 100644 node_modules/formdata-polyfill/esm.min.d.ts
create mode 100644 node_modules/formdata-polyfill/esm.min.js
create mode 100644 node_modules/formdata-polyfill/formdata-to-blob.js
create mode 100644 node_modules/formdata-polyfill/formdata.min.js
create mode 100644 node_modules/formdata-polyfill/package.json
create mode 100644 node_modules/forwarded/HISTORY.md
create mode 100644 node_modules/forwarded/LICENSE
create mode 100644 node_modules/forwarded/README.md
create mode 100644 node_modules/forwarded/index.js
create mode 100644 node_modules/forwarded/package.json
create mode 100644 node_modules/fresh/HISTORY.md
create mode 100644 node_modules/fresh/LICENSE
create mode 100644 node_modules/fresh/README.md
create mode 100644 node_modules/fresh/index.js
create mode 100644 node_modules/fresh/package.json
create mode 100644 node_modules/function-bind/.editorconfig
create mode 100644 node_modules/function-bind/.eslintrc
create mode 100644 node_modules/function-bind/.jscs.json
create mode 100644 node_modules/function-bind/.npmignore
create mode 100644 node_modules/function-bind/.travis.yml
create mode 100644 node_modules/function-bind/LICENSE
create mode 100644 node_modules/function-bind/README.md
create mode 100644 node_modules/function-bind/implementation.js
create mode 100644 node_modules/function-bind/index.js
create mode 100644 node_modules/function-bind/package.json
create mode 100644 node_modules/function-bind/test/.eslintrc
create mode 100644 node_modules/function-bind/test/index.js
create mode 100644 node_modules/generate-function/.travis.yml
create mode 100644 node_modules/generate-function/LICENSE
create mode 100644 node_modules/generate-function/README.md
create mode 100644 node_modules/generate-function/example.js
create mode 100644 node_modules/generate-function/index.js
create mode 100644 node_modules/generate-function/package.json
create mode 100644 node_modules/generate-function/test.js
create mode 100644 node_modules/get-intrinsic/.eslintrc
create mode 100644 node_modules/get-intrinsic/.github/FUNDING.yml
create mode 100644 node_modules/get-intrinsic/.nycrc
create mode 100644 node_modules/get-intrinsic/CHANGELOG.md
create mode 100644 node_modules/get-intrinsic/LICENSE
create mode 100644 node_modules/get-intrinsic/README.md
create mode 100644 node_modules/get-intrinsic/index.js
create mode 100644 node_modules/get-intrinsic/package.json
create mode 100644 node_modules/get-intrinsic/test/GetIntrinsic.js
create mode 100644 node_modules/glob-parent/CHANGELOG.md
create mode 100644 node_modules/glob-parent/LICENSE
create mode 100644 node_modules/glob-parent/README.md
create mode 100644 node_modules/glob-parent/index.js
create mode 100644 node_modules/glob-parent/package.json
create mode 100644 node_modules/has-flag/index.js
create mode 100644 node_modules/has-flag/license
create mode 100644 node_modules/has-flag/package.json
create mode 100644 node_modules/has-flag/readme.md
create mode 100644 node_modules/has-symbols/.eslintrc
create mode 100644 node_modules/has-symbols/.github/FUNDING.yml
create mode 100644 node_modules/has-symbols/.nycrc
create mode 100644 node_modules/has-symbols/CHANGELOG.md
create mode 100644 node_modules/has-symbols/LICENSE
create mode 100644 node_modules/has-symbols/README.md
create mode 100644 node_modules/has-symbols/index.js
create mode 100644 node_modules/has-symbols/package.json
create mode 100644 node_modules/has-symbols/shams.js
create mode 100644 node_modules/has-symbols/test/index.js
create mode 100644 node_modules/has-symbols/test/shams/core-js.js
create mode 100644 node_modules/has-symbols/test/shams/get-own-property-symbols.js
create mode 100644 node_modules/has-symbols/test/tests.js
create mode 100644 node_modules/has/LICENSE-MIT
create mode 100644 node_modules/has/README.md
create mode 100644 node_modules/has/package.json
create mode 100644 node_modules/has/src/index.js
create mode 100644 node_modules/has/test/index.js
create mode 100644 node_modules/http-errors/HISTORY.md
create mode 100644 node_modules/http-errors/LICENSE
create mode 100644 node_modules/http-errors/README.md
create mode 100644 node_modules/http-errors/index.js
create mode 100644 node_modules/http-errors/package.json
create mode 100644 node_modules/iconv-lite/Changelog.md
create mode 100644 node_modules/iconv-lite/LICENSE
create mode 100644 node_modules/iconv-lite/README.md
create mode 100644 node_modules/iconv-lite/encodings/dbcs-codec.js
create mode 100644 node_modules/iconv-lite/encodings/dbcs-data.js
create mode 100644 node_modules/iconv-lite/encodings/index.js
create mode 100644 node_modules/iconv-lite/encodings/internal.js
create mode 100644 node_modules/iconv-lite/encodings/sbcs-codec.js
create mode 100644 node_modules/iconv-lite/encodings/sbcs-data-generated.js
create mode 100644 node_modules/iconv-lite/encodings/sbcs-data.js
create mode 100644 node_modules/iconv-lite/encodings/tables/big5-added.json
create mode 100644 node_modules/iconv-lite/encodings/tables/cp936.json
create mode 100644 node_modules/iconv-lite/encodings/tables/cp949.json
create mode 100644 node_modules/iconv-lite/encodings/tables/cp950.json
create mode 100644 node_modules/iconv-lite/encodings/tables/eucjp.json
create mode 100644 node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
create mode 100644 node_modules/iconv-lite/encodings/tables/gbk-added.json
create mode 100644 node_modules/iconv-lite/encodings/tables/shiftjis.json
create mode 100644 node_modules/iconv-lite/encodings/utf16.js
create mode 100644 node_modules/iconv-lite/encodings/utf7.js
create mode 100644 node_modules/iconv-lite/lib/bom-handling.js
create mode 100644 node_modules/iconv-lite/lib/extend-node.js
create mode 100644 node_modules/iconv-lite/lib/index.d.ts
create mode 100644 node_modules/iconv-lite/lib/index.js
create mode 100644 node_modules/iconv-lite/lib/streams.js
create mode 100644 node_modules/iconv-lite/package.json
create mode 100644 node_modules/ignore-by-default/LICENSE
create mode 100644 node_modules/ignore-by-default/README.md
create mode 100644 node_modules/ignore-by-default/index.js
create mode 100644 node_modules/ignore-by-default/package.json
create mode 100644 node_modules/inherits/LICENSE
create mode 100644 node_modules/inherits/README.md
create mode 100644 node_modules/inherits/inherits.js
create mode 100644 node_modules/inherits/inherits_browser.js
create mode 100644 node_modules/inherits/package.json
create mode 100644 node_modules/ipaddr.js/LICENSE
create mode 100644 node_modules/ipaddr.js/README.md
create mode 100644 node_modules/ipaddr.js/ipaddr.min.js
create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js
create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js.d.ts
create mode 100644 node_modules/ipaddr.js/package.json
create mode 100644 node_modules/is-binary-path/index.d.ts
create mode 100644 node_modules/is-binary-path/index.js
create mode 100644 node_modules/is-binary-path/license
create mode 100644 node_modules/is-binary-path/package.json
create mode 100644 node_modules/is-binary-path/readme.md
create mode 100644 node_modules/is-extglob/LICENSE
create mode 100644 node_modules/is-extglob/README.md
create mode 100644 node_modules/is-extglob/index.js
create mode 100644 node_modules/is-extglob/package.json
create mode 100644 node_modules/is-glob/LICENSE
create mode 100644 node_modules/is-glob/README.md
create mode 100644 node_modules/is-glob/index.js
create mode 100644 node_modules/is-glob/package.json
create mode 100644 node_modules/is-number/LICENSE
create mode 100644 node_modules/is-number/README.md
create mode 100644 node_modules/is-number/index.js
create mode 100644 node_modules/is-number/package.json
create mode 100644 node_modules/is-property/.npmignore
create mode 100644 node_modules/is-property/LICENSE
create mode 100644 node_modules/is-property/README.md
create mode 100644 node_modules/is-property/is-property.js
create mode 100644 node_modules/is-property/package.json
create mode 100644 node_modules/long/LICENSE
create mode 100644 node_modules/long/README.md
create mode 100644 node_modules/long/dist/long.js
create mode 100644 node_modules/long/dist/long.js.map
create mode 100644 node_modules/long/index.js
create mode 100644 node_modules/long/package.json
create mode 100644 node_modules/long/src/long.js
create mode 100644 node_modules/lru-cache/LICENSE
create mode 100644 node_modules/lru-cache/README.md
create mode 100644 node_modules/lru-cache/index.js
create mode 100644 node_modules/lru-cache/package.json
create mode 100644 node_modules/media-typer/HISTORY.md
create mode 100644 node_modules/media-typer/LICENSE
create mode 100644 node_modules/media-typer/README.md
create mode 100644 node_modules/media-typer/index.js
create mode 100644 node_modules/media-typer/package.json
create mode 100644 node_modules/merge-descriptors/HISTORY.md
create mode 100644 node_modules/merge-descriptors/LICENSE
create mode 100644 node_modules/merge-descriptors/README.md
create mode 100644 node_modules/merge-descriptors/index.js
create mode 100644 node_modules/merge-descriptors/package.json
create mode 100644 node_modules/methods/HISTORY.md
create mode 100644 node_modules/methods/LICENSE
create mode 100644 node_modules/methods/README.md
create mode 100644 node_modules/methods/index.js
create mode 100644 node_modules/methods/package.json
create mode 100644 node_modules/mime-db/HISTORY.md
create mode 100644 node_modules/mime-db/LICENSE
create mode 100644 node_modules/mime-db/README.md
create mode 100644 node_modules/mime-db/db.json
create mode 100644 node_modules/mime-db/index.js
create mode 100644 node_modules/mime-db/package.json
create mode 100644 node_modules/mime-types/HISTORY.md
create mode 100644 node_modules/mime-types/LICENSE
create mode 100644 node_modules/mime-types/README.md
create mode 100644 node_modules/mime-types/index.js
create mode 100644 node_modules/mime-types/package.json
create mode 100644 node_modules/mime/.npmignore
create mode 100644 node_modules/mime/CHANGELOG.md
create mode 100644 node_modules/mime/LICENSE
create mode 100644 node_modules/mime/README.md
create mode 100644 node_modules/mime/cli.js
create mode 100644 node_modules/mime/mime.js
create mode 100644 node_modules/mime/package.json
create mode 100644 node_modules/mime/src/build.js
create mode 100644 node_modules/mime/src/test.js
create mode 100644 node_modules/mime/types.json
create mode 100644 node_modules/minimatch/LICENSE
create mode 100644 node_modules/minimatch/README.md
create mode 100644 node_modules/minimatch/minimatch.js
create mode 100644 node_modules/minimatch/package.json
create mode 100644 node_modules/ms/index.js
create mode 100644 node_modules/ms/license.md
create mode 100644 node_modules/ms/package.json
create mode 100644 node_modules/ms/readme.md
create mode 100644 node_modules/mysql2/License
create mode 100644 node_modules/mysql2/README.md
create mode 100644 node_modules/mysql2/index.d.ts
create mode 100644 node_modules/mysql2/index.js
create mode 100644 node_modules/mysql2/lib/auth_41.js
create mode 100644 node_modules/mysql2/lib/auth_plugins/caching_sha2_password.js
create mode 100644 node_modules/mysql2/lib/auth_plugins/caching_sha2_password.md
create mode 100644 node_modules/mysql2/lib/auth_plugins/index.js
create mode 100644 node_modules/mysql2/lib/auth_plugins/mysql_native_password.js
create mode 100644 node_modules/mysql2/lib/auth_plugins/sha256_password.js
create mode 100644 node_modules/mysql2/lib/commands/auth_switch.js
create mode 100644 node_modules/mysql2/lib/commands/binlog_dump.js
create mode 100644 node_modules/mysql2/lib/commands/change_user.js
create mode 100644 node_modules/mysql2/lib/commands/client_handshake.js
create mode 100644 node_modules/mysql2/lib/commands/close_statement.js
create mode 100644 node_modules/mysql2/lib/commands/command.js
create mode 100644 node_modules/mysql2/lib/commands/execute.js
create mode 100644 node_modules/mysql2/lib/commands/index.js
create mode 100644 node_modules/mysql2/lib/commands/ping.js
create mode 100644 node_modules/mysql2/lib/commands/prepare.js
create mode 100644 node_modules/mysql2/lib/commands/query.js
create mode 100644 node_modules/mysql2/lib/commands/quit.js
create mode 100644 node_modules/mysql2/lib/commands/register_slave.js
create mode 100644 node_modules/mysql2/lib/commands/server_handshake.js
create mode 100644 node_modules/mysql2/lib/compressed_protocol.js
create mode 100644 node_modules/mysql2/lib/connection.js
create mode 100644 node_modules/mysql2/lib/connection_config.js
create mode 100644 node_modules/mysql2/lib/constants/charset_encodings.js
create mode 100644 node_modules/mysql2/lib/constants/charsets.js
create mode 100644 node_modules/mysql2/lib/constants/client.js
create mode 100644 node_modules/mysql2/lib/constants/commands.js
create mode 100644 node_modules/mysql2/lib/constants/cursor.js
create mode 100644 node_modules/mysql2/lib/constants/encoding_charset.js
create mode 100644 node_modules/mysql2/lib/constants/errors.js
create mode 100644 node_modules/mysql2/lib/constants/field_flags.js
create mode 100644 node_modules/mysql2/lib/constants/server_status.js
create mode 100644 node_modules/mysql2/lib/constants/session_track.js
create mode 100644 node_modules/mysql2/lib/constants/ssl_profiles.js
create mode 100644 node_modules/mysql2/lib/constants/types.js
create mode 100644 node_modules/mysql2/lib/helpers.js
create mode 100644 node_modules/mysql2/lib/packet_parser.js
create mode 100644 node_modules/mysql2/lib/packets/auth_switch_request.js
create mode 100644 node_modules/mysql2/lib/packets/auth_switch_request_more_data.js
create mode 100644 node_modules/mysql2/lib/packets/auth_switch_response.js
create mode 100644 node_modules/mysql2/lib/packets/binary_row.js
create mode 100644 node_modules/mysql2/lib/packets/binlog_dump.js
create mode 100644 node_modules/mysql2/lib/packets/binlog_query_statusvars.js
create mode 100644 node_modules/mysql2/lib/packets/change_user.js
create mode 100644 node_modules/mysql2/lib/packets/close_statement.js
create mode 100644 node_modules/mysql2/lib/packets/column_definition.js
create mode 100644 node_modules/mysql2/lib/packets/execute.js
create mode 100644 node_modules/mysql2/lib/packets/handshake.js
create mode 100644 node_modules/mysql2/lib/packets/handshake_response.js
create mode 100644 node_modules/mysql2/lib/packets/index.js
create mode 100644 node_modules/mysql2/lib/packets/packet.js
create mode 100644 node_modules/mysql2/lib/packets/prepare_statement.js
create mode 100644 node_modules/mysql2/lib/packets/prepared_statement_header.js
create mode 100644 node_modules/mysql2/lib/packets/query.js
create mode 100644 node_modules/mysql2/lib/packets/register_slave.js
create mode 100644 node_modules/mysql2/lib/packets/resultset_header.js
create mode 100644 node_modules/mysql2/lib/packets/ssl_request.js
create mode 100644 node_modules/mysql2/lib/packets/text_row.js
create mode 100644 node_modules/mysql2/lib/parsers/binary_parser.js
create mode 100644 node_modules/mysql2/lib/parsers/parser_cache.js
create mode 100644 node_modules/mysql2/lib/parsers/string.js
create mode 100644 node_modules/mysql2/lib/parsers/text_parser.js
create mode 100644 node_modules/mysql2/lib/pool.js
create mode 100644 node_modules/mysql2/lib/pool_cluster.js
create mode 100644 node_modules/mysql2/lib/pool_config.js
create mode 100644 node_modules/mysql2/lib/pool_connection.js
create mode 100644 node_modules/mysql2/lib/results_stream.js
create mode 100644 node_modules/mysql2/lib/server.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.github/dependabot.yml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.idea/codeStyles/Project.xml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.idea/codeStyles/codeStyleConfig.xml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.idea/iconv-lite.iml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.idea/inspectionProfiles/Project_Default.xml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.idea/modules.xml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/.idea/vcs.xml
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/Changelog.md
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/LICENSE
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/README.md
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/dbcs-codec.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/dbcs-data.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/index.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/internal.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/sbcs-codec.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/sbcs-data-generated.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/sbcs-data.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/big5-added.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/cp936.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/cp949.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/cp950.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/eucjp.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/gbk-added.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/tables/shiftjis.json
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/utf16.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/utf32.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/encodings/utf7.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/lib/bom-handling.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/lib/index.d.ts
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/lib/index.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/lib/streams.js
create mode 100644 node_modules/mysql2/node_modules/iconv-lite/package.json
create mode 100644 node_modules/mysql2/package.json
create mode 100644 node_modules/mysql2/promise.d.ts
create mode 100644 node_modules/mysql2/promise.js
create mode 100644 node_modules/mysql2/typings/mysql/LICENSE.txt
create mode 100644 node_modules/mysql2/typings/mysql/index.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/info.txt
create mode 100644 node_modules/mysql2/typings/mysql/lib/Connection.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/Pool.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/PoolCluster.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/PoolConnection.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/packets/index.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts
create mode 100644 node_modules/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts
create mode 100644 node_modules/named-placeholders/Changelog.md
create mode 100644 node_modules/named-placeholders/LICENSE
create mode 100644 node_modules/named-placeholders/README.md
create mode 100644 node_modules/named-placeholders/index.js
create mode 100644 node_modules/named-placeholders/node_modules/lru-cache/LICENSE
create mode 100644 node_modules/named-placeholders/node_modules/lru-cache/README.md
create mode 100644 node_modules/named-placeholders/node_modules/lru-cache/index.js
create mode 100644 node_modules/named-placeholders/node_modules/lru-cache/package.json
create mode 100644 node_modules/named-placeholders/node_modules/yallist/LICENSE
create mode 100644 node_modules/named-placeholders/node_modules/yallist/README.md
create mode 100644 node_modules/named-placeholders/node_modules/yallist/iterator.js
create mode 100644 node_modules/named-placeholders/node_modules/yallist/package.json
create mode 100644 node_modules/named-placeholders/node_modules/yallist/yallist.js
create mode 100644 node_modules/named-placeholders/package.json
create mode 100644 node_modules/negotiator/HISTORY.md
create mode 100644 node_modules/negotiator/LICENSE
create mode 100644 node_modules/negotiator/README.md
create mode 100644 node_modules/negotiator/index.js
create mode 100644 node_modules/negotiator/lib/charset.js
create mode 100644 node_modules/negotiator/lib/encoding.js
create mode 100644 node_modules/negotiator/lib/language.js
create mode 100644 node_modules/negotiator/lib/mediaType.js
create mode 100644 node_modules/negotiator/package.json
create mode 100644 node_modules/node-domexception/.history/README_20210527203617.md
create mode 100644 node_modules/node-domexception/.history/README_20210527212714.md
create mode 100644 node_modules/node-domexception/.history/README_20210527213345.md
create mode 100644 node_modules/node-domexception/.history/README_20210527213411.md
create mode 100644 node_modules/node-domexception/.history/README_20210527213803.md
create mode 100644 node_modules/node-domexception/.history/README_20210527214323.md
create mode 100644 node_modules/node-domexception/.history/README_20210527214408.md
create mode 100644 node_modules/node-domexception/.history/index_20210527203842.js
create mode 100644 node_modules/node-domexception/.history/index_20210527203947.js
create mode 100644 node_modules/node-domexception/.history/index_20210527204259.js
create mode 100644 node_modules/node-domexception/.history/index_20210527204418.js
create mode 100644 node_modules/node-domexception/.history/index_20210527204756.js
create mode 100644 node_modules/node-domexception/.history/index_20210527204833.js
create mode 100644 node_modules/node-domexception/.history/index_20210527211208.js
create mode 100644 node_modules/node-domexception/.history/index_20210527211248.js
create mode 100644 node_modules/node-domexception/.history/index_20210527212722.js
create mode 100644 node_modules/node-domexception/.history/index_20210527212731.js
create mode 100644 node_modules/node-domexception/.history/index_20210527212746.js
create mode 100644 node_modules/node-domexception/.history/index_20210527212900.js
create mode 100644 node_modules/node-domexception/.history/index_20210527213022.js
create mode 100644 node_modules/node-domexception/.history/index_20210527213822.js
create mode 100644 node_modules/node-domexception/.history/index_20210527213843.js
create mode 100644 node_modules/node-domexception/.history/index_20210527213852.js
create mode 100644 node_modules/node-domexception/.history/index_20210527213910.js
create mode 100644 node_modules/node-domexception/.history/index_20210527214034.js
create mode 100644 node_modules/node-domexception/.history/index_20210527214643.js
create mode 100644 node_modules/node-domexception/.history/index_20210527214654.js
create mode 100644 node_modules/node-domexception/.history/index_20210527214700.js
create mode 100644 node_modules/node-domexception/.history/package_20210527203733.json
create mode 100644 node_modules/node-domexception/.history/package_20210527203825.json
create mode 100644 node_modules/node-domexception/.history/package_20210527204621.json
create mode 100644 node_modules/node-domexception/.history/package_20210527204913.json
create mode 100644 node_modules/node-domexception/.history/package_20210527204925.json
create mode 100644 node_modules/node-domexception/.history/package_20210527205145.json
create mode 100644 node_modules/node-domexception/.history/package_20210527205156.json
create mode 100644 node_modules/node-domexception/.history/test_20210527205603.js
create mode 100644 node_modules/node-domexception/.history/test_20210527205957.js
create mode 100644 node_modules/node-domexception/.history/test_20210527210021.js
create mode 100644 node_modules/node-domexception/LICENSE
create mode 100644 node_modules/node-domexception/README.md
create mode 100644 node_modules/node-domexception/index.js
create mode 100644 node_modules/node-domexception/package.json
create mode 100644 node_modules/node-fetch/@types/index.d.ts
create mode 100644 node_modules/node-fetch/LICENSE.md
create mode 100644 node_modules/node-fetch/README.md
create mode 100644 node_modules/node-fetch/package.json
create mode 100644 node_modules/node-fetch/src/body.js
create mode 100644 node_modules/node-fetch/src/errors/abort-error.js
create mode 100644 node_modules/node-fetch/src/errors/base.js
create mode 100644 node_modules/node-fetch/src/errors/fetch-error.js
create mode 100644 node_modules/node-fetch/src/headers.js
create mode 100644 node_modules/node-fetch/src/index.js
create mode 100644 node_modules/node-fetch/src/request.js
create mode 100644 node_modules/node-fetch/src/response.js
create mode 100644 node_modules/node-fetch/src/utils/get-search.js
create mode 100644 node_modules/node-fetch/src/utils/is-redirect.js
create mode 100644 node_modules/node-fetch/src/utils/is.js
create mode 100644 node_modules/node-fetch/src/utils/multipart-parser.js
create mode 100644 node_modules/node-fetch/src/utils/referrer.js
create mode 100644 node_modules/nodemon/LICENSE
create mode 100644 node_modules/nodemon/README.md
create mode 100644 node_modules/nodemon/bin/nodemon.js
create mode 100644 node_modules/nodemon/bin/vwindows-kill.exe
create mode 100644 node_modules/nodemon/bin/windows-kill.exe
create mode 100644 node_modules/nodemon/doc/cli/authors.txt
create mode 100644 node_modules/nodemon/doc/cli/config.txt
create mode 100644 node_modules/nodemon/doc/cli/help.txt
create mode 100644 node_modules/nodemon/doc/cli/logo.txt
create mode 100644 node_modules/nodemon/doc/cli/options.txt
create mode 100644 node_modules/nodemon/doc/cli/topics.txt
create mode 100644 node_modules/nodemon/doc/cli/usage.txt
create mode 100644 node_modules/nodemon/doc/cli/whoami.txt
create mode 100644 node_modules/nodemon/lib/cli/index.js
create mode 100644 node_modules/nodemon/lib/cli/parse.js
create mode 100644 node_modules/nodemon/lib/config/command.js
create mode 100644 node_modules/nodemon/lib/config/defaults.js
create mode 100644 node_modules/nodemon/lib/config/exec.js
create mode 100644 node_modules/nodemon/lib/config/index.js
create mode 100644 node_modules/nodemon/lib/config/load.js
create mode 100644 node_modules/nodemon/lib/help/index.js
create mode 100644 node_modules/nodemon/lib/index.js
create mode 100644 node_modules/nodemon/lib/monitor/index.js
create mode 100644 node_modules/nodemon/lib/monitor/match.js
create mode 100644 node_modules/nodemon/lib/monitor/run.js
create mode 100644 node_modules/nodemon/lib/monitor/signals.js
create mode 100644 node_modules/nodemon/lib/monitor/watch.js
create mode 100644 node_modules/nodemon/lib/nodemon.js
create mode 100644 node_modules/nodemon/lib/rules/add.js
create mode 100644 node_modules/nodemon/lib/rules/index.js
create mode 100644 node_modules/nodemon/lib/rules/parse.js
create mode 100644 node_modules/nodemon/lib/spawn.js
create mode 100644 node_modules/nodemon/lib/utils/bus.js
create mode 100644 node_modules/nodemon/lib/utils/clone.js
create mode 100644 node_modules/nodemon/lib/utils/colour.js
create mode 100644 node_modules/nodemon/lib/utils/index.js
create mode 100644 node_modules/nodemon/lib/utils/log.js
create mode 100644 node_modules/nodemon/lib/utils/merge.js
create mode 100644 node_modules/nodemon/lib/version.js
create mode 100644 node_modules/nodemon/node_modules/debug/CHANGELOG.md
create mode 100644 node_modules/nodemon/node_modules/debug/LICENSE
create mode 100644 node_modules/nodemon/node_modules/debug/README.md
create mode 100644 node_modules/nodemon/node_modules/debug/node.js
create mode 100644 node_modules/nodemon/node_modules/debug/package.json
create mode 100644 node_modules/nodemon/node_modules/debug/src/browser.js
create mode 100644 node_modules/nodemon/node_modules/debug/src/common.js
create mode 100644 node_modules/nodemon/node_modules/debug/src/index.js
create mode 100644 node_modules/nodemon/node_modules/debug/src/node.js
create mode 100644 node_modules/nodemon/node_modules/ms/index.js
create mode 100644 node_modules/nodemon/node_modules/ms/license.md
create mode 100644 node_modules/nodemon/node_modules/ms/package.json
create mode 100644 node_modules/nodemon/node_modules/ms/readme.md
create mode 100644 node_modules/nodemon/package.json
create mode 100644 node_modules/nopt/.npmignore
create mode 100644 node_modules/nopt/LICENSE
create mode 100644 node_modules/nopt/README.md
create mode 100644 node_modules/nopt/bin/nopt.js
create mode 100644 node_modules/nopt/examples/my-program.js
create mode 100644 node_modules/nopt/lib/nopt.js
create mode 100644 node_modules/nopt/package.json
create mode 100644 node_modules/normalize-path/LICENSE
create mode 100644 node_modules/normalize-path/README.md
create mode 100644 node_modules/normalize-path/index.js
create mode 100644 node_modules/normalize-path/package.json
create mode 100644 node_modules/object-inspect/.eslintrc
create mode 100644 node_modules/object-inspect/.github/FUNDING.yml
create mode 100644 node_modules/object-inspect/.nycrc
create mode 100644 node_modules/object-inspect/CHANGELOG.md
create mode 100644 node_modules/object-inspect/LICENSE
create mode 100644 node_modules/object-inspect/example/all.js
create mode 100644 node_modules/object-inspect/example/circular.js
create mode 100644 node_modules/object-inspect/example/fn.js
create mode 100644 node_modules/object-inspect/example/inspect.js
create mode 100644 node_modules/object-inspect/index.js
create mode 100644 node_modules/object-inspect/package-support.json
create mode 100644 node_modules/object-inspect/package.json
create mode 100644 node_modules/object-inspect/readme.markdown
create mode 100644 node_modules/object-inspect/test-core-js.js
create mode 100644 node_modules/object-inspect/test/bigint.js
create mode 100644 node_modules/object-inspect/test/browser/dom.js
create mode 100644 node_modules/object-inspect/test/circular.js
create mode 100644 node_modules/object-inspect/test/deep.js
create mode 100644 node_modules/object-inspect/test/element.js
create mode 100644 node_modules/object-inspect/test/err.js
create mode 100644 node_modules/object-inspect/test/fakes.js
create mode 100644 node_modules/object-inspect/test/fn.js
create mode 100644 node_modules/object-inspect/test/has.js
create mode 100644 node_modules/object-inspect/test/holes.js
create mode 100644 node_modules/object-inspect/test/indent-option.js
create mode 100644 node_modules/object-inspect/test/inspect.js
create mode 100644 node_modules/object-inspect/test/lowbyte.js
create mode 100644 node_modules/object-inspect/test/number.js
create mode 100644 node_modules/object-inspect/test/quoteStyle.js
create mode 100644 node_modules/object-inspect/test/toStringTag.js
create mode 100644 node_modules/object-inspect/test/undef.js
create mode 100644 node_modules/object-inspect/test/values.js
create mode 100644 node_modules/object-inspect/util.inspect.js
create mode 100644 node_modules/on-finished/HISTORY.md
create mode 100644 node_modules/on-finished/LICENSE
create mode 100644 node_modules/on-finished/README.md
create mode 100644 node_modules/on-finished/index.js
create mode 100644 node_modules/on-finished/package.json
create mode 100644 node_modules/parseurl/HISTORY.md
create mode 100644 node_modules/parseurl/LICENSE
create mode 100644 node_modules/parseurl/README.md
create mode 100644 node_modules/parseurl/index.js
create mode 100644 node_modules/parseurl/package.json
create mode 100644 node_modules/path-to-regexp/History.md
create mode 100644 node_modules/path-to-regexp/LICENSE
create mode 100644 node_modules/path-to-regexp/Readme.md
create mode 100644 node_modules/path-to-regexp/index.js
create mode 100644 node_modules/path-to-regexp/package.json
create mode 100644 node_modules/picomatch/CHANGELOG.md
create mode 100644 node_modules/picomatch/LICENSE
create mode 100644 node_modules/picomatch/README.md
create mode 100644 node_modules/picomatch/index.js
create mode 100644 node_modules/picomatch/lib/constants.js
create mode 100644 node_modules/picomatch/lib/parse.js
create mode 100644 node_modules/picomatch/lib/picomatch.js
create mode 100644 node_modules/picomatch/lib/scan.js
create mode 100644 node_modules/picomatch/lib/utils.js
create mode 100644 node_modules/picomatch/package.json
create mode 100644 node_modules/proxy-addr/HISTORY.md
create mode 100644 node_modules/proxy-addr/LICENSE
create mode 100644 node_modules/proxy-addr/README.md
create mode 100644 node_modules/proxy-addr/index.js
create mode 100644 node_modules/proxy-addr/package.json
create mode 100644 node_modules/pseudomap/LICENSE
create mode 100644 node_modules/pseudomap/README.md
create mode 100644 node_modules/pseudomap/map.js
create mode 100644 node_modules/pseudomap/package.json
create mode 100644 node_modules/pseudomap/pseudomap.js
create mode 100644 node_modules/pseudomap/test/basic.js
create mode 100644 node_modules/pstree.remy/.travis.yml
create mode 100644 node_modules/pstree.remy/LICENSE
create mode 100644 node_modules/pstree.remy/README.md
create mode 100644 node_modules/pstree.remy/lib/index.js
create mode 100644 node_modules/pstree.remy/lib/tree.js
create mode 100644 node_modules/pstree.remy/lib/utils.js
create mode 100644 node_modules/pstree.remy/package.json
create mode 100644 node_modules/pstree.remy/tests/fixtures/index.js
create mode 100644 node_modules/pstree.remy/tests/fixtures/out1
create mode 100644 node_modules/pstree.remy/tests/fixtures/out2
create mode 100644 node_modules/pstree.remy/tests/index.test.js
create mode 100644 node_modules/qs/.editorconfig
create mode 100644 node_modules/qs/.eslintrc
create mode 100644 node_modules/qs/.github/FUNDING.yml
create mode 100644 node_modules/qs/.nycrc
create mode 100644 node_modules/qs/CHANGELOG.md
create mode 100644 node_modules/qs/LICENSE.md
create mode 100644 node_modules/qs/README.md
create mode 100644 node_modules/qs/dist/qs.js
create mode 100644 node_modules/qs/lib/formats.js
create mode 100644 node_modules/qs/lib/index.js
create mode 100644 node_modules/qs/lib/parse.js
create mode 100644 node_modules/qs/lib/stringify.js
create mode 100644 node_modules/qs/lib/utils.js
create mode 100644 node_modules/qs/package.json
create mode 100644 node_modules/qs/test/parse.js
create mode 100644 node_modules/qs/test/stringify.js
create mode 100644 node_modules/qs/test/utils.js
create mode 100644 node_modules/range-parser/HISTORY.md
create mode 100644 node_modules/range-parser/LICENSE
create mode 100644 node_modules/range-parser/README.md
create mode 100644 node_modules/range-parser/index.js
create mode 100644 node_modules/range-parser/package.json
create mode 100644 node_modules/raw-body/HISTORY.md
create mode 100644 node_modules/raw-body/LICENSE
create mode 100644 node_modules/raw-body/README.md
create mode 100644 node_modules/raw-body/SECURITY.md
create mode 100644 node_modules/raw-body/index.d.ts
create mode 100644 node_modules/raw-body/index.js
create mode 100644 node_modules/raw-body/package.json
create mode 100644 node_modules/readdirp/LICENSE
create mode 100644 node_modules/readdirp/README.md
create mode 100644 node_modules/readdirp/index.d.ts
create mode 100644 node_modules/readdirp/index.js
create mode 100644 node_modules/readdirp/package.json
create mode 100644 node_modules/safe-buffer/LICENSE
create mode 100644 node_modules/safe-buffer/README.md
create mode 100644 node_modules/safe-buffer/index.d.ts
create mode 100644 node_modules/safe-buffer/index.js
create mode 100644 node_modules/safe-buffer/package.json
create mode 100644 node_modules/safer-buffer/LICENSE
create mode 100644 node_modules/safer-buffer/Porting-Buffer.md
create mode 100644 node_modules/safer-buffer/Readme.md
create mode 100644 node_modules/safer-buffer/dangerous.js
create mode 100644 node_modules/safer-buffer/package.json
create mode 100644 node_modules/safer-buffer/safer.js
create mode 100644 node_modules/safer-buffer/tests.js
create mode 100644 node_modules/semver/CHANGELOG.md
create mode 100644 node_modules/semver/LICENSE
create mode 100644 node_modules/semver/README.md
create mode 100644 node_modules/semver/bin/semver
create mode 100644 node_modules/semver/package.json
create mode 100644 node_modules/semver/range.bnf
create mode 100644 node_modules/semver/semver.js
create mode 100644 node_modules/send/HISTORY.md
create mode 100644 node_modules/send/LICENSE
create mode 100644 node_modules/send/README.md
create mode 100644 node_modules/send/SECURITY.md
create mode 100644 node_modules/send/index.js
create mode 100644 node_modules/send/node_modules/ms/index.js
create mode 100644 node_modules/send/node_modules/ms/license.md
create mode 100644 node_modules/send/node_modules/ms/package.json
create mode 100644 node_modules/send/node_modules/ms/readme.md
create mode 100644 node_modules/send/package.json
create mode 100644 node_modules/seq-queue/.jshintrc
create mode 100644 node_modules/seq-queue/.npmignore
create mode 100644 node_modules/seq-queue/AUTHORS
create mode 100644 node_modules/seq-queue/LICENSE
create mode 100644 node_modules/seq-queue/Makefile
create mode 100644 node_modules/seq-queue/README.md
create mode 100644 node_modules/seq-queue/index.js
create mode 100644 node_modules/seq-queue/lib/.npmignore
create mode 100644 node_modules/seq-queue/lib/seq-queue.js
create mode 100644 node_modules/seq-queue/package.json
create mode 100644 node_modules/seq-queue/test/seq-queue-test.js
create mode 100644 node_modules/serve-static/HISTORY.md
create mode 100644 node_modules/serve-static/LICENSE
create mode 100644 node_modules/serve-static/README.md
create mode 100644 node_modules/serve-static/index.js
create mode 100644 node_modules/serve-static/package.json
create mode 100644 node_modules/setprototypeof/LICENSE
create mode 100644 node_modules/setprototypeof/README.md
create mode 100644 node_modules/setprototypeof/index.d.ts
create mode 100644 node_modules/setprototypeof/index.js
create mode 100644 node_modules/setprototypeof/package.json
create mode 100644 node_modules/setprototypeof/test/index.js
create mode 100644 node_modules/side-channel/.eslintignore
create mode 100644 node_modules/side-channel/.eslintrc
create mode 100644 node_modules/side-channel/.github/FUNDING.yml
create mode 100644 node_modules/side-channel/.nycrc
create mode 100644 node_modules/side-channel/CHANGELOG.md
create mode 100644 node_modules/side-channel/LICENSE
create mode 100644 node_modules/side-channel/README.md
create mode 100644 node_modules/side-channel/index.js
create mode 100644 node_modules/side-channel/package.json
create mode 100644 node_modules/side-channel/test/index.js
create mode 100644 node_modules/simple-update-notifier/LICENSE
create mode 100644 node_modules/simple-update-notifier/README.md
create mode 100644 node_modules/simple-update-notifier/build/index.d.ts
create mode 100644 node_modules/simple-update-notifier/build/index.js
create mode 100644 node_modules/simple-update-notifier/node_modules/.bin/semver
create mode 100644 node_modules/simple-update-notifier/node_modules/.bin/semver.cmd
create mode 100644 node_modules/simple-update-notifier/node_modules/.bin/semver.ps1
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/CHANGELOG.md
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/LICENSE
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/README.md
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/bin/semver.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/classes/comparator.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/classes/index.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/classes/range.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/classes/semver.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/clean.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/cmp.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/coerce.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/compare-build.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/compare-loose.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/compare.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/diff.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/eq.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/gt.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/gte.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/inc.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/lt.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/lte.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/major.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/minor.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/neq.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/parse.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/patch.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/prerelease.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/rcompare.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/rsort.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/satisfies.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/sort.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/functions/valid.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/index.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/internal/constants.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/internal/debug.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/internal/identifiers.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/internal/re.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/package.json
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/range.bnf
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/gtr.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/intersects.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/ltr.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/max-satisfying.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/min-satisfying.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/min-version.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/outside.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/to-comparators.js
create mode 100644 node_modules/simple-update-notifier/node_modules/semver/ranges/valid.js
create mode 100644 node_modules/simple-update-notifier/package.json
create mode 100644 node_modules/simple-update-notifier/src/borderedText.ts
create mode 100644 node_modules/simple-update-notifier/src/cache.spec.ts
create mode 100644 node_modules/simple-update-notifier/src/cache.ts
create mode 100644 node_modules/simple-update-notifier/src/getDistVersion.spec.ts
create mode 100644 node_modules/simple-update-notifier/src/getDistVersion.ts
create mode 100644 node_modules/simple-update-notifier/src/hasNewVersion.spec.ts
create mode 100644 node_modules/simple-update-notifier/src/hasNewVersion.ts
create mode 100644 node_modules/simple-update-notifier/src/index.spec.ts
create mode 100644 node_modules/simple-update-notifier/src/index.ts
create mode 100644 node_modules/simple-update-notifier/src/isNpmOrYarn.ts
create mode 100644 node_modules/simple-update-notifier/src/types.ts
create mode 100644 node_modules/sqlstring/HISTORY.md
create mode 100644 node_modules/sqlstring/LICENSE
create mode 100644 node_modules/sqlstring/README.md
create mode 100644 node_modules/sqlstring/index.js
create mode 100644 node_modules/sqlstring/lib/SqlString.js
create mode 100644 node_modules/sqlstring/package.json
create mode 100644 node_modules/statuses/HISTORY.md
create mode 100644 node_modules/statuses/LICENSE
create mode 100644 node_modules/statuses/README.md
create mode 100644 node_modules/statuses/codes.json
create mode 100644 node_modules/statuses/index.js
create mode 100644 node_modules/statuses/package.json
create mode 100644 node_modules/supports-color/browser.js
create mode 100644 node_modules/supports-color/index.js
create mode 100644 node_modules/supports-color/license
create mode 100644 node_modules/supports-color/package.json
create mode 100644 node_modules/supports-color/readme.md
create mode 100644 node_modules/to-regex-range/LICENSE
create mode 100644 node_modules/to-regex-range/README.md
create mode 100644 node_modules/to-regex-range/index.js
create mode 100644 node_modules/to-regex-range/package.json
create mode 100644 node_modules/toidentifier/HISTORY.md
create mode 100644 node_modules/toidentifier/LICENSE
create mode 100644 node_modules/toidentifier/README.md
create mode 100644 node_modules/toidentifier/index.js
create mode 100644 node_modules/toidentifier/package.json
create mode 100644 node_modules/touch/LICENSE
create mode 100644 node_modules/touch/README.md
create mode 100644 node_modules/touch/bin/nodetouch.js
create mode 100644 node_modules/touch/index.js
create mode 100644 node_modules/touch/package.json
create mode 100644 node_modules/type-is/HISTORY.md
create mode 100644 node_modules/type-is/LICENSE
create mode 100644 node_modules/type-is/README.md
create mode 100644 node_modules/type-is/index.js
create mode 100644 node_modules/type-is/package.json
create mode 100644 node_modules/undefsafe/.github/workflows/release.yml
create mode 100644 node_modules/undefsafe/.jscsrc
create mode 100644 node_modules/undefsafe/.jshintrc
create mode 100644 node_modules/undefsafe/.travis.yml
create mode 100644 node_modules/undefsafe/LICENSE
create mode 100644 node_modules/undefsafe/README.md
create mode 100644 node_modules/undefsafe/example.js
create mode 100644 node_modules/undefsafe/lib/undefsafe.js
create mode 100644 node_modules/undefsafe/package.json
create mode 100644 node_modules/unpipe/HISTORY.md
create mode 100644 node_modules/unpipe/LICENSE
create mode 100644 node_modules/unpipe/README.md
create mode 100644 node_modules/unpipe/index.js
create mode 100644 node_modules/unpipe/package.json
create mode 100644 node_modules/utils-merge/.npmignore
create mode 100644 node_modules/utils-merge/LICENSE
create mode 100644 node_modules/utils-merge/README.md
create mode 100644 node_modules/utils-merge/index.js
create mode 100644 node_modules/utils-merge/package.json
create mode 100644 node_modules/vary/HISTORY.md
create mode 100644 node_modules/vary/LICENSE
create mode 100644 node_modules/vary/README.md
create mode 100644 node_modules/vary/index.js
create mode 100644 node_modules/vary/package.json
create mode 100644 node_modules/web-streams-polyfill/LICENSE
create mode 100644 node_modules/web-streams-polyfill/README.md
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es2018.js
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es6.js
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es6.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es6.min.js
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es6.mjs
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.js
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.min.js
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.min.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.mjs
create mode 100644 node_modules/web-streams-polyfill/dist/polyfill.mjs.map
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es2018.js
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es6.js
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.js
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.js.map
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.mjs
create mode 100644 node_modules/web-streams-polyfill/dist/ponyfill.mjs.map
create mode 100644 node_modules/web-streams-polyfill/dist/types/polyfill.d.ts
create mode 100644 node_modules/web-streams-polyfill/dist/types/ts3.6/polyfill.d.ts
create mode 100644 node_modules/web-streams-polyfill/dist/types/tsdoc-metadata.json
create mode 100644 node_modules/web-streams-polyfill/es2018/package.json
create mode 100644 node_modules/web-streams-polyfill/es6/package.json
create mode 100644 node_modules/web-streams-polyfill/package.json
create mode 100644 node_modules/web-streams-polyfill/ponyfill/es2018/package.json
create mode 100644 node_modules/web-streams-polyfill/ponyfill/es6/package.json
create mode 100644 node_modules/web-streams-polyfill/ponyfill/package.json
create mode 100644 node_modules/yallist/LICENSE
create mode 100644 node_modules/yallist/README.md
create mode 100644 node_modules/yallist/iterator.js
create mode 100644 node_modules/yallist/package.json
create mode 100644 node_modules/yallist/yallist.js
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 routes/books.js
create mode 100644 routes/index.js
create mode 100644 services/db.js
create mode 100644 services/requestService.js
diff --git a/StartUpChallenge/Data/BookReturnRecordDetails.sql b/StartUpChallenge/Data/BookReturnRecordDetails.sql
new file mode 100644
index 0000000..7f1d9d4
--- /dev/null
+++ b/StartUpChallenge/Data/BookReturnRecordDetails.sql
@@ -0,0 +1,407 @@
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (1, 197, 727, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (2, 221, 818, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (3, 208, 769, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (4, 151, 559, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (5, 56, 207, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (6, 151, 4, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (7, 245, 907, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (8, 120, 443, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (9, 264, 978, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (10, 74, 274, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (11, 79, 292, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (12, 127, 468, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (13, 171, 633, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (14, 127, 470, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (15, 266, 983, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (16, 9, 31, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (17, 233, 863, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (18, 269, 996, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (19, 183, 678, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (20, 85, 315, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (21, 221, 817, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (22, 229, 849, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (23, 268, 992, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (24, 9, 33, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (25, 189, 700, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (26, 143, 527, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (27, 253, 935, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (28, 186, 688, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (29, 148, 547, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (30, 22, 82, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (31, 51, 188, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (32, 123, 454, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (33, 81, 298, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (34, 267, 989, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (35, 174, 643, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (36, 207, 763, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (37, 9, 16, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (38, 103, 382, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (39, 93, 344, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (40, 259, 958, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (41, 137, 506, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (42, 194, 716, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (43, 33, 119, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (44, 74, 10, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (45, 245, 908, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (46, 215, 795, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (47, 92, 338, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (48, 124, 458, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (49, 40, 147, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (50, 60, 222, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (51, 111, 411, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (52, 195, 719, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (53, 168, 620, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (54, 132, 488, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (55, 53, 195, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (56, 238, 879, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (57, 223, 826, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (58, 199, 736, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (59, 232, 859, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (60, 184, 680, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (61, 169, 625, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (62, 59, 219, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (63, 242, 896, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (64, 243, 897, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (65, 24, 87, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (66, 227, 839, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (67, 46, 171, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (68, 174, 645, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (69, 224, 827, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (70, 60, 220, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (71, 270, 1000, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (72, 130, 482, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (73, 177, 653, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (74, 195, 720, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (75, 219, 810, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (76, 28, 101, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (77, 197, 730, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (78, 194, 52, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (79, 34, 126, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (80, 245, 906, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (81, 52, 190, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (82, 129, 477, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (83, 147, 541, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (84, 88, 326, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (85, 182, 672, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (86, 127, 469, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (87, 226, 834, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (88, 219, 75, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (89, 215, 794, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (90, 207, 765, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (91, 254, 938, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (92, 80, 295, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (93, 142, 523, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (94, 180, 664, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (95, 90, 333, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (96, 78, 287, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (97, 222, 821, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (98, 61, 223, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (99, 51, 187, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (100, 19, 69, 3);
+
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (101, 169, 61, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (102, 188, 694, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (103, 171, 631, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (104, 251, 928, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (105, 60, 50, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (106, 251, 929, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (107, 18, 67, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (108, 244, 901, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (109, 184, 679, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (110, 26, 94, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (111, 41, 150, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (112, 29, 107, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (113, 165, 610, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (114, 258, 954, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (115, 133, 491, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (116, 40, 149, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (117, 183, 19, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (118, 154, 570, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (119, 61, 226, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (120, 167, 619, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (121, 2, 6, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (122, 98, 361, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (123, 230, 851, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (124, 17, 63, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (125, 77, 282, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (126, 191, 705, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (127, 259, 959, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (128, 267, 34, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (129, 105, 388, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (130, 142, 93, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (131, 76, 281, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (132, 137, 507, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (133, 144, 532, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (134, 16, 58, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (135, 76, 131, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (136, 134, 497, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (137, 229, 847, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (138, 166, 614, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (139, 29, 105, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (140, 201, 743, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (141, 109, 402, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (142, 253, 934, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (143, 36, 131, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (144, 189, 25, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (145, 167, 616, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (146, 225, 831, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (147, 185, 686, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (148, 154, 118, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (149, 47, 173, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (150, 50, 185, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (151, 165, 113, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (152, 68, 251, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (153, 270, 998, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (154, 154, 569, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (155, 18, 64, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (156, 72, 264, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (157, 228, 843, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (158, 154, 154, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (159, 175, 646, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (160, 140, 517, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (161, 262, 971, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (162, 21, 78, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (163, 139, 513, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (164, 43, 156, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (165, 220, 814, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (166, 174, 35, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (167, 156, 576, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (168, 150, 553, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (169, 182, 673, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (170, 269, 995, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (171, 82, 302, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (172, 18, 65, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (173, 126, 466, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (174, 131, 484, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (175, 59, 217, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (176, 20, 72, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (177, 63, 231, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (178, 41, 151, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (179, 121, 447, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (180, 122, 452, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (181, 6, 20, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (182, 105, 389, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (183, 221, 21, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (184, 55, 203, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (185, 247, 914, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (186, 8, 30, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (187, 138, 510, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (188, 260, 963, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (189, 269, 994, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (190, 5, 17, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (191, 177, 654, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (192, 76, 279, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (193, 262, 968, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (194, 159, 588, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (195, 209, 773, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (196, 88, 325, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (197, 114, 421, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (198, 264, 975, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (199, 240, 886, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (200, 263, 973, 1);
+
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (201, 69, 256, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (202, 36, 133, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (203, 243, 898, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (204, 49, 179, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (205, 239, 883, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (206, 148, 545, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (207, 212, 786, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (208, 139, 515, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (209, 96, 353, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (210, 268, 23, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (211, 10, 34, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (212, 187, 692, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (213, 33, 122, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (214, 53, 55, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (215, 135, 136, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (216, 157, 582, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (217, 71, 262, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (218, 84, 311, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (219, 66, 243, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (220, 212, 785, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (221, 36, 134, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (222, 166, 613, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (223, 152, 560, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (224, 178, 656, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (225, 93, 342, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (226, 7, 24, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (227, 27, 98, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (228, 238, 878, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (229, 192, 711, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (230, 241, 893, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (231, 176, 652, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (232, 69, 201, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (233, 72, 265, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (234, 128, 475, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (235, 53, 196, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (236, 240, 888, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (237, 133, 492, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (238, 173, 638, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (239, 87, 320, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (240, 100, 369, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (241, 67, 245, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (242, 269, 18, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (243, 165, 611, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (244, 1, 2, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (245, 266, 984, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (246, 260, 962, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (247, 43, 158, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (248, 209, 195, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (249, 25, 92, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (250, 52, 191, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (251, 17, 124, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (252, 30, 111, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (253, 198, 733, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (254, 28, 102, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (255, 227, 840, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (256, 174, 166, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (257, 155, 573, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (258, 66, 242, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (259, 227, 838, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (260, 233, 860, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (261, 121, 448, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (262, 245, 45, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (263, 217, 804, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (264, 125, 461, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (265, 92, 341, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (266, 211, 779, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (267, 116, 427, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (268, 175, 648, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (269, 270, 71, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (270, 165, 609, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (271, 25, 90, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (272, 169, 624, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (273, 268, 991, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (274, 236, 874, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (275, 146, 540, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (276, 38, 138, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (277, 1, 244, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (278, 151, 558, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (279, 182, 169, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (280, 103, 380, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (281, 234, 867, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (282, 88, 84, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (283, 213, 787, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (284, 141, 520, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (285, 225, 830, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (286, 147, 542, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (287, 142, 130, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (288, 44, 163, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (289, 172, 635, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (290, 150, 554, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (291, 85, 20, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (292, 68, 250, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (293, 217, 801, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (294, 125, 264, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (295, 249, 922, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (296, 92, 47, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (297, 52, 193, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (298, 41, 178, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (299, 179, 662, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (300, 56, 206, 3);
+
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (301, 145, 535, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (302, 138, 187, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (303, 209, 774, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (304, 131, 483, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (305, 28, 254, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (306, 119, 439, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (307, 33, 120, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (308, 233, 260, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (309, 152, 563, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (310, 190, 703, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (311, 173, 641, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (312, 5, 16, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (313, 154, 148, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (314, 124, 48, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (315, 269, 189, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (316, 34, 123, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (317, 33, 121, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (318, 77, 284, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (319, 171, 103, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (320, 216, 800, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (321, 70, 232, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (322, 72, 156, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (323, 4, 13, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (324, 121, 446, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (325, 80, 92, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (326, 227, 255, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (327, 223, 824, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (328, 144, 531, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (329, 257, 952, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (330, 55, 184, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (331, 256, 946, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (332, 230, 852, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (333, 242, 64, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (334, 127, 467, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (335, 228, 845, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (336, 97, 357, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (337, 149, 552, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (338, 83, 305, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (339, 114, 419, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (340, 106, 391, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (341, 114, 422, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (342, 179, 663, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (343, 163, 601, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (344, 252, 932, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (345, 247, 913, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (346, 81, 300, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (347, 184, 681, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (348, 93, 343, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (349, 127, 334, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (350, 216, 320, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (351, 59, 175, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (352, 246, 910, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (353, 141, 284, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (354, 233, 17, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (355, 257, 950, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (356, 74, 271, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (357, 135, 215, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (358, 89, 328, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (359, 51, 189, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (360, 71, 217, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (361, 167, 145, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (362, 160, 589, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (363, 246, 909, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (364, 98, 122, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (365, 205, 757, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (366, 214, 789, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (367, 33, 307, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (368, 28, 103, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (369, 166, 138, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (370, 173, 238, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (371, 155, 571, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (372, 221, 183, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (373, 234, 865, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (374, 65, 240, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (375, 102, 378, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (376, 161, 593, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (377, 180, 94, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (378, 22, 81, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (379, 144, 534, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (380, 269, 242, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (381, 43, 160, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (382, 130, 481, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (383, 18, 155, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (384, 42, 153, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (385, 267, 986, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (386, 10, 37, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (387, 90, 95, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (388, 10, 35, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (389, 140, 518, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (390, 155, 574, 1);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (391, 232, 308, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (392, 61, 225, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (393, 32, 117, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (394, 43, 247, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (395, 210, 776, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (396, 225, 833, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (397, 204, 755, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (398, 65, 241, 3);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (399, 48, 176, 2);
+INSERT BookReturnRecordDetails (detail_ID, return_ID, book_ID, detail_numberofcopies) VALUES (400, 34, 124, 1);
+
+
+
+
diff --git a/StartUpChallenge/Data/BookReturnRecords.sql b/StartUpChallenge/Data/BookReturnRecords.sql
new file mode 100644
index 0000000..9223b10
--- /dev/null
+++ b/StartUpChallenge/Data/BookReturnRecords.sql
@@ -0,0 +1,272 @@
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (1, 364, CAST(N'2022-07-29T22:45:21.660' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (2, 409, CAST(N'2021-11-12T03:58:00.830' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (3, 385, CAST(N'2022-10-15T00:32:24.590' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (4, 280, CAST(N'2022-09-18T05:49:15.700' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (5, 104, CAST(N'2022-07-14T01:04:03.100' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (6, 280, CAST(N'2022-09-18T05:49:15.700' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (7, 454, CAST(N'2021-10-01T11:38:04.490' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (8, 222, CAST(N'2020-12-28T14:26:31.200' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (9, 489, CAST(N'2020-11-02T09:40:24.340' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (10, 137, CAST(N'2022-07-19T16:44:34.690' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (11, 146, CAST(N'2020-07-13T06:48:23.750' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (12, 234, CAST(N'2021-06-09T23:12:56.700' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (13, 317, CAST(N'2022-11-14T09:39:59.720' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (14, 235, CAST(N'2020-10-02T07:16:07.250' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (15, 492, CAST(N'2020-06-16T20:20:33.150' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (16, 16, CAST(N'2022-11-10T23:10:09.090' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (17, 432, CAST(N'2021-02-19T17:01:53.830' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (18, 498, CAST(N'2021-07-09T03:46:42.790' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (19, 339, CAST(N'2020-10-19T22:45:02.250' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (20, 158, CAST(N'2022-06-01T12:55:41.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (21, 409, CAST(N'2021-11-12T03:58:00.830' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (22, 425, CAST(N'2021-08-28T09:23:47.640' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (23, 496, CAST(N'2021-03-04T04:36:17.250' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (24, 17, CAST(N'2022-10-12T01:08:27.730' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (25, 350, CAST(N'2022-06-19T22:47:12.330' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (26, 264, CAST(N'2020-01-26T02:39:21.130' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (27, 468, CAST(N'2020-06-18T02:00:46.100' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (28, 344, CAST(N'2020-02-19T00:55:13.890' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (29, 274, CAST(N'2022-06-19T16:35:57.500' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (30, 41, CAST(N'2020-11-28T10:29:25.990' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (31, 94, CAST(N'2022-11-21T00:27:04.730' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (32, 227, CAST(N'2022-05-08T11:57:43.490' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (33, 149, CAST(N'2021-07-24T18:47:45.840' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (34, 495, CAST(N'2022-06-09T14:53:12.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (35, 322, CAST(N'2022-09-12T11:05:12.980' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (36, 382, CAST(N'2021-11-15T13:28:09.150' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (37, 16, CAST(N'2022-09-30T21:02:31.340' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (38, 191, CAST(N'2021-12-02T17:02:38.500' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (39, 172, CAST(N'2020-02-22T02:56:21.780' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (40, 479, CAST(N'2020-12-25T04:41:48.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (41, 253, CAST(N'2021-08-09T14:28:11.740' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (42, 358, CAST(N'2022-06-16T03:02:14.760' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (43, 60, CAST(N'2022-10-10T08:05:06.180' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (44, 137, CAST(N'2022-07-19T16:44:34.690' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (45, 454, CAST(N'2022-07-21T01:49:26.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (46, 398, CAST(N'2022-08-08T19:44:25.870' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (47, 169, CAST(N'2022-05-24T08:54:02.990' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (48, 229, CAST(N'2021-03-26T19:50:17.700' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (49, 74, CAST(N'2020-10-21T18:43:46.940' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (50, 111, CAST(N'2021-08-16T20:05:13.120' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (51, 206, CAST(N'2022-12-13T15:51:10.410' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (52, 360, CAST(N'2022-10-27T15:18:01.320' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (53, 310, CAST(N'2022-11-07T17:16:02.410' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (54, 244, CAST(N'2021-07-14T09:34:21.140' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (55, 98, CAST(N'2021-07-22T02:48:30.320' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (56, 440, CAST(N'2021-04-28T18:42:47.550' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (57, 413, CAST(N'2021-06-02T19:02:56.220' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (58, 368, CAST(N'2021-05-27T16:23:19.780' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (59, 430, CAST(N'2022-09-01T04:40:25.720' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (60, 340, CAST(N'2020-11-28T14:05:02.910' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (61, 313, CAST(N'2021-07-23T16:05:43.550' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (62, 110, CAST(N'2020-08-14T11:00:56.480' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (63, 448, CAST(N'2021-09-02T10:53:28.670' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (64, 449, CAST(N'2021-08-04T06:19:37.290' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (65, 44, CAST(N'2020-06-08T07:06:21.110' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (66, 420, CAST(N'2021-02-16T03:12:03.730' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (67, 86, CAST(N'2020-12-15T22:40:50.570' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (68, 323, CAST(N'2021-07-16T04:07:28.190' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (69, 414, CAST(N'2021-06-08T02:16:03.180' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (70, 110, CAST(N'2023-01-12T20:10:06.530' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (71, 500, CAST(N'2022-11-29T00:38:03.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (72, 241, CAST(N'2021-05-11T11:53:57.810' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (73, 327, CAST(N'2020-03-14T10:14:13.500' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (74, 360, CAST(N'2022-10-27T15:18:01.320' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (75, 405, CAST(N'2021-04-11T01:36:09.710' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (76, 51, CAST(N'2021-12-04T01:55:47.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (77, 365, CAST(N'2020-04-30T10:05:05.660' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (78, 360, CAST(N'2022-10-27T15:18:01.320' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (79, 63, CAST(N'2020-05-06T09:52:39.950' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (80, 453, CAST(N'2021-06-07T21:41:43.110' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (81, 95, CAST(N'2022-07-08T10:32:32.280' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (82, 239, CAST(N'2020-11-25T10:52:49.450' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (83, 271, CAST(N'2022-12-20T08:59:14.510' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (84, 163, CAST(N'2022-10-10T17:13:34.860' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (85, 336, CAST(N'2020-03-11T13:56:01.710' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (86, 235, CAST(N'2022-06-23T13:46:06.800' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (87, 417, CAST(N'2021-03-07T22:34:22.750' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (88, 405, CAST(N'2020-08-25T19:15:04.220' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (89, 397, CAST(N'2021-02-11T22:02:24.830' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (90, 383, CAST(N'2020-01-24T15:06:55.380' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (91, 469, CAST(N'2022-04-05T14:42:39.990' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (92, 148, CAST(N'2022-01-08T05:54:47.430' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (93, 262, CAST(N'2022-04-19T07:29:28.920' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (94, 332, CAST(N'2020-02-23T22:19:13.620' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (95, 167, CAST(N'2021-03-12T02:01:57.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (96, 144, CAST(N'2022-06-28T11:25:33.410' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (97, 411, CAST(N'2022-12-26T09:21:04.860' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (98, 112, CAST(N'2020-08-05T17:23:47.490' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (99, 94, CAST(N'2022-03-11T07:20:41.130' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (100, 35, CAST(N'2022-10-24T20:00:28.280' AS DateTime));
+
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (101, 313, CAST(N'2022-03-07T11:10:58.640' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (102, 347, CAST(N'2020-12-25T02:08:31.800' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (103, 316, CAST(N'2022-07-17T20:40:02.580' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (104, 464, CAST(N'2021-05-13T06:48:57.440' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (105, 111, CAST(N'2021-08-16T20:05:13.120' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (106, 465, CAST(N'2020-11-26T16:10:17.750' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (107, 34, CAST(N'2020-03-18T00:26:44.420' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (108, 451, CAST(N'2021-01-12T20:27:46.610' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (109, 340, CAST(N'2020-11-28T14:05:02.910' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (110, 47, CAST(N'2020-10-02T14:36:34.600' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (111, 75, CAST(N'2020-07-26T08:54:24.000' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (112, 54, CAST(N'2021-05-21T09:23:12.430' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (113, 305, CAST(N'2022-07-28T10:03:41.940' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (114, 477, CAST(N'2020-08-09T23:02:01.330' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (115, 246, CAST(N'2022-11-28T17:56:40.520' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (116, 75, CAST(N'2020-07-26T08:54:24.000' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (117, 339, CAST(N'2020-07-18T06:50:44.050' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (118, 285, CAST(N'2020-05-05T16:02:57.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (119, 113, CAST(N'2022-12-06T00:20:39.630' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (120, 310, CAST(N'2022-11-07T17:16:02.410' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (121, 3, CAST(N'2022-10-18T04:13:47.520' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (122, 181, CAST(N'2021-05-10T22:51:04.220' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (123, 426, CAST(N'2020-08-01T13:26:28.390' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (124, 32, CAST(N'2020-07-05T21:22:34.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (125, 141, CAST(N'2020-09-28T02:05:22.570' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (126, 353, CAST(N'2021-04-09T21:34:30.600' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (127, 480, CAST(N'2022-03-25T12:42:45.720' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (128, 495, CAST(N'2022-06-09T14:53:12.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (129, 194, CAST(N'2022-06-08T07:08:29.200' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (130, 262, CAST(N'2022-04-19T07:29:28.920' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (131, 141, CAST(N'2020-09-28T02:05:22.570' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (132, 254, CAST(N'2020-12-31T23:14:28.230' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (133, 266, CAST(N'2020-04-15T18:28:16.930' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (134, 29, CAST(N'2022-04-08T13:19:30.510' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (135, 141, CAST(N'2020-09-28T02:05:22.570' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (136, 249, CAST(N'2022-08-10T15:29:37.430' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (137, 424, CAST(N'2022-09-14T21:39:02.970' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (138, 307, CAST(N'2020-08-25T05:19:27.990' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (139, 53, CAST(N'2021-10-31T20:08:36.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (140, 372, CAST(N'2021-04-07T15:19:48.600' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (141, 201, CAST(N'2020-03-12T09:34:28.540' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (142, 467, CAST(N'2021-02-04T18:39:16.670' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (143, 66, CAST(N'2023-01-05T17:34:01.740' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (144, 350, CAST(N'2022-06-19T22:47:12.330' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (145, 308, CAST(N'2022-03-05T21:52:14.250' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (146, 416, CAST(N'2021-06-09T01:25:02.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (147, 343, CAST(N'2022-02-21T18:29:47.520' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (148, 285, CAST(N'2021-01-30T00:52:54.760' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (149, 87, CAST(N'2021-09-18T01:13:58.500' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (150, 93, CAST(N'2022-06-19T04:03:58.230' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (151, 305, CAST(N'2020-04-15T06:03:00.460' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (152, 126, CAST(N'2023-01-04T17:26:46.970' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (153, 499, CAST(N'2022-07-19T11:23:12.570' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (154, 285, CAST(N'2021-01-30T00:52:54.760' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (155, 32, CAST(N'2020-07-05T21:22:34.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (156, 132, CAST(N'2021-12-03T14:21:12.760' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (157, 422, CAST(N'2021-04-15T02:06:19.230' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (158, 285, CAST(N'2021-09-01T05:15:07.610' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (159, 323, CAST(N'2021-07-16T04:07:28.190' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (160, 259, CAST(N'2020-05-05T06:12:21.920' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (161, 486, CAST(N'2020-02-15T05:21:21.420' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (162, 39, CAST(N'2020-02-27T12:31:44.540' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (163, 257, CAST(N'2022-02-17T19:27:37.320' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (164, 78, CAST(N'2021-11-04T06:52:57.680' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (165, 407, CAST(N'2022-12-18T01:08:48.190' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (166, 322, CAST(N'2022-10-23T07:16:07.220' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (167, 288, CAST(N'2021-05-13T15:17:28.010' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (168, 277, CAST(N'2020-09-27T12:26:13.080' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (169, 337, CAST(N'2020-09-22T17:07:54.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (170, 498, CAST(N'2020-04-20T02:27:03.090' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (171, 151, CAST(N'2020-05-01T21:55:33.800' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (172, 33, CAST(N'2021-11-05T14:59:41.770' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (173, 233, CAST(N'2022-04-30T14:31:56.250' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (174, 242, CAST(N'2020-09-12T00:54:15.310' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (175, 109, CAST(N'2021-03-14T20:15:57.580' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (176, 36, CAST(N'2021-04-03T00:22:31.990' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (177, 116, CAST(N'2020-05-21T13:30:24.670' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (178, 76, CAST(N'2022-11-06T09:51:11.480' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (179, 224, CAST(N'2022-12-17T18:44:48.150' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (180, 226, CAST(N'2020-09-28T16:56:56.650' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (181, 10, CAST(N'2022-06-30T21:33:01.160' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (182, 195, CAST(N'2022-04-27T20:31:41.130' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (183, 409, CAST(N'2021-11-12T03:58:00.830' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (184, 102, CAST(N'2020-07-11T08:45:24.950' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (185, 457, CAST(N'2022-11-18T13:52:35.170' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (186, 15, CAST(N'2020-07-15T16:15:43.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (187, 255, CAST(N'2020-11-10T22:39:02.840' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (188, 482, CAST(N'2022-08-07T15:16:48.080' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (189, 497, CAST(N'2022-07-08T08:14:03.890' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (190, 9, CAST(N'2020-04-25T01:46:07.820' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (191, 327, CAST(N'2022-12-20T19:54:39.760' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (192, 140, CAST(N'2020-03-21T19:32:03.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (193, 484, CAST(N'2020-11-09T10:24:34.490' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (194, 294, CAST(N'2020-04-25T03:33:28.480' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (195, 387, CAST(N'2022-04-13T15:30:45.510' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (196, 163, CAST(N'2022-02-09T00:47:37.830' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (197, 211, CAST(N'2020-09-21T05:34:39.420' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (198, 488, CAST(N'2022-12-04T00:44:01.580' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (199, 443, CAST(N'2020-09-19T03:04:17.890' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (200, 487, CAST(N'2020-02-16T02:09:47.870' AS DateTime));
+
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (201, 128, CAST(N'2022-01-23T23:48:29.240' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (202, 67, CAST(N'2022-11-17T18:30:09.050' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (203, 449, CAST(N'2022-03-30T12:05:11.790' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (204, 90, CAST(N'2020-10-27T06:45:32.070' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (205, 442, CAST(N'2022-02-28T05:37:38.370' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (206, 273, CAST(N'2020-06-24T08:10:42.840' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (207, 393, CAST(N'2020-01-26T13:09:31.840' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (208, 258, CAST(N'2022-09-27T02:15:56.290' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (209, 177, CAST(N'2021-01-02T17:31:13.550' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (210, 496, CAST(N'2021-10-20T20:17:31.260' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (211, 17, CAST(N'2022-10-12T01:08:27.730' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (212, 346, CAST(N'2021-06-14T05:44:45.780' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (213, 61, CAST(N'2021-09-14T03:37:37.390' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (214, 98, CAST(N'2021-07-22T02:48:30.320' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (215, 249, CAST(N'2022-04-20T11:41:27.400' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (216, 291, CAST(N'2020-10-20T20:57:36.690' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (217, 131, CAST(N'2021-08-10T22:19:46.900' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (218, 156, CAST(N'2020-03-29T20:33:37.200' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (219, 122, CAST(N'2022-12-16T07:04:36.170' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (220, 393, CAST(N'2020-01-26T13:09:31.840' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (221, 67, CAST(N'2020-01-28T16:53:56.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (222, 307, CAST(N'2020-08-25T05:19:27.990' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (223, 280, CAST(N'2022-09-18T05:49:15.700' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (224, 328, CAST(N'2022-06-23T15:38:09.860' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (225, 171, CAST(N'2020-11-15T20:45:49.980' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (226, 12, CAST(N'2021-11-19T07:53:38.130' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (227, 49, CAST(N'2021-10-25T16:57:15.070' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (228, 439, CAST(N'2020-06-27T03:06:26.030' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (229, 356, CAST(N'2020-08-26T22:07:24.560' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (230, 447, CAST(N'2021-07-17T01:12:50.160' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (231, 326, CAST(N'2021-12-31T13:05:38.550' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (232, 128, CAST(N'2022-01-23T23:48:29.240' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (233, 133, CAST(N'2022-06-26T07:52:33.840' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (234, 238, CAST(N'2022-01-24T13:01:58.770' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (235, 98, CAST(N'2022-04-23T16:17:31.620' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (236, 444, CAST(N'2021-03-01T10:35:39.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (237, 246, CAST(N'2021-09-20T11:14:43.940' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (238, 319, CAST(N'2022-01-09T01:46:26.380' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (239, 160, CAST(N'2021-06-28T18:18:06.020' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (240, 185, CAST(N'2022-06-27T15:11:52.230' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (241, 123, CAST(N'2022-10-23T15:32:43.440' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (242, 498, CAST(N'2021-07-09T03:46:42.790' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (243, 306, CAST(N'2020-03-17T10:47:51.850' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (244, 1, CAST(N'2020-06-24T15:05:20.860' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (245, 492, CAST(N'2022-01-10T22:08:55.550' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (246, 481, CAST(N'2022-01-29T12:13:38.240' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (247, 79, CAST(N'2022-11-24T15:29:57.750' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (248, 387, CAST(N'2022-08-24T14:00:43.400' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (249, 46, CAST(N'2021-08-25T23:04:25.490' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (250, 96, CAST(N'2021-04-02T15:14:36.270' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (251, 32, CAST(N'2020-07-05T21:22:34.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (252, 56, CAST(N'2022-01-11T13:14:56.200' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (253, 367, CAST(N'2020-10-17T09:08:37.960' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (254, 51, CAST(N'2021-12-04T01:55:47.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (255, 420, CAST(N'2020-03-13T07:59:21.880' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (256, 322, CAST(N'2022-10-23T07:16:07.220' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (257, 287, CAST(N'2021-11-25T20:38:10.750' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (258, 121, CAST(N'2021-05-03T16:20:03.230' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (259, 419, CAST(N'2021-03-16T22:02:42.750' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (260, 430, CAST(N'2022-09-01T04:40:25.720' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (261, 224, CAST(N'2022-07-02T09:05:48.280' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (262, 454, CAST(N'2021-10-01T11:38:04.490' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (263, 402, CAST(N'2022-02-22T06:06:42.510' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (264, 231, CAST(N'2022-10-11T09:55:20.140' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (265, 171, CAST(N'2022-03-21T04:14:34.050' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (266, 390, CAST(N'2021-09-16T02:18:19.350' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (267, 214, CAST(N'2022-11-19T13:22:20.790' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (268, 324, CAST(N'2021-01-08T11:03:15.110' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (269, 500, CAST(N'2022-11-29T00:38:03.470' AS DateTime));
+INSERT BookReturnRecords (return_ID, borrowers_ID, return_datereturned) VALUES (270, 305, CAST(N'2020-04-15T06:03:00.460' AS DateTime));
diff --git a/StartUpChallenge/Data/Books.sql b/StartUpChallenge/Data/Books.sql
new file mode 100644
index 0000000..bb76940
--- /dev/null
+++ b/StartUpChallenge/Data/Books.sql
@@ -0,0 +1,1009 @@
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (1, N'Mr', N'BO4R1FWL7LXWZXA', N'MEB7XVEPKBPLIMX0M7GC1MJPPBI2VDP1ETNZ4KI1JLD9Z4LIAO37BV6ZUMIMDCU7MN6PZYV1OFSF89QKQZR69IPJMN4I2WO7Q5NBYVJCT2IW2QQKWYVDK', N'W3JNSBWUY2HA1BJF88UGASWTC64COQYGF5OSTR', 67, CAST(15968.94 AS Decimal(18, 2)), N'S660FNE729UCLFFP3B0V0AX39RZ53URNI7TAU9S4NVTDIHNWT5W35OAH82QOO847I6UEL4UTIW74GKLR32CXXNIUWB1SI4FERMUCN9BPB2L8G50OHYKLW69VNZH932AEGTDUP94URMMU19EQACAKKUIKCZONS1L9R7SMS6Z8UQU9KETELQYQRQTMBSIPKG2Q1C3UHRY4D1PTZ80X6A212UH1D5BZN9NEO387BYWTRUDP10M2SK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (2, N'Mr', N'Z637SG6M1GVS20FNDGL5', N'Y4XN3BTDYRQLP3MEMUGED6ZTHVWJM40AM27IEAS7JF4R6G1NYI', N'TT5HSVGLMFTKXJ2G47QBM7K5731UVMQMH41N4A3XVKIWV61XDOKL2FGM8Z9PTMQZO62SHECT3SG2ONA024H625J1OFE41E38UI7O38FYCRHAZEXLP8MP5JXJN04208SPO775GMXTO', 52, CAST(10484.15 AS Decimal(18, 2)), N'AE0O6V1HBGZH3EB5W0SL7D8A8HRZDJ872QDZNF1C9HKDSCABPUQ2ZYCW5QGP323S8RED1BHHYGBQSVHV6G9IS573DGUXYC87DS50YWAEC94JNM3A8KIMSLZ2KAZKHKIL74C0PGW96V6J1OGRCJPDUMFSS2GNXPW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (3, N'Dr.', N'EYA909Q3SKF6KNH4NWVIIPLJ4J7', N'1X6AR5457FARUQFZMV40B18VX28N0T8L4SZDGSGD94LS8O90QGFSUH00PADOXH5D6OM1R2JUEQQ6GFM8S7WJEGRMSZN5ESGSZ7MK1', N'UBN929HTESRE3ALO124CY4YSLS6R53BT0MPMWEYUL6T0XA3XJSKUOCKQCUNA2POBGXDHLZR', 198, CAST(10297.75 AS Decimal(18, 2)), N'QIBI93KRO8GWEG1VT78XU4RLOK7N09CGYDSICYI8ZXPL5IDB1KUQHZXMRQTPVXRFWZX0OIJVO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (4, N'Mr', N'AIJB55L7SYR6GI9VGMHCYIPJQNYPCQ5H1LT9130F29B', N'8NXLD3RTJ9N4VPKLZQX08SEEFMAY68T26KY8MT2NUYFDH9XQ7E8VN10G9J5RTSMBGLYBQBY6N969D0W5PJRS0XF5KIZ3NBU1C3XVBMZVF17DVQ28M0', N'4ARSAYUBO97DIH5O1Z91QORVIHJ0WMBK0XPEKSFD0CLTHBTYSPFMQ', 190, CAST(19428.88 AS Decimal(18, 2)), N'YXE5G66W');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (5, N'Miss', N'5O1ZFP2H1V6RTZ', N'91UAI6SQ8CVICE4X930T2KVDYP1ATFQGM8L0ISEPJVRIJIVZRSS5L6ZP6GCT5IXSLEW4S3FBA7SCTFU1J1MLVG9WT1GLJ0YZX5MR6NCCG9WSWTNWY4ZV50JFUWAE02S99TFNS3UWOA4', N'WFIV9SEUE2XNCKRQ39JV1D2YE6OL776PUA0AWPIMZ', 27, CAST(11597.11 AS Decimal(18, 2)), N'GEMZZG5RM4TD16AP5LCNI1Y1I008LANIZBB0A0XKIRWRVLWR3FAKU83EGKGYGX5CGBDQUAF4NR5R476W4846Z3OR8WJPJZ4KMKAK85WTZ5W22CA8EKU7TYCDNMIYQQKONL4KWLOYC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (6, N'Mrs.', N'I7VV2S95VOZUDL29P7ZE1', N'JG00EJNF12TWM6WACYCDHMI2EZ4U927UVXWEV90GFC860I1L7JJQYQ3XXXME', N'YJVTY862L62UOIDJH34SM6V7T2JHTERWWUFI3K8FE4M0NZLIXD7FI6JRON0WPO86F5YT2UFXVPDIKUKUG1KG7BEPBOUGKBQQWFLH1RF2XAKTS17T26FN4RZ3R8IE0', 168, CAST(11354.62 AS Decimal(18, 2)), N'7T6LOWMAAZ4XQN7WXLNX29L8FH7PCSWVVIRI71XMCGFLJQUHDZO2BE8X8X66PWYH3918VOPVN1LMTZOONPCC4TJGATA9URWGHXH9OMLOASE9TM499HJZJMD9PLY1EF1W444VHE013O2BEANNP00C8XWVK7K2NJAURI5OH9RUHHWVK2VFXACDFOO779B9UXDJD7KW4Y6F96VQ11BHC45D7WF2TXG7XH0J4CHCIZAZ3W38TY66YTXP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (7, N'Mr', N'Y9NONG6E2G1II87E9WVJ', N'S6YVY0OAIF3XVY4EC2VXINPJGW5TYGYNL1N69B1HDAP4FS3SYJLVRHW4GEE2VUC2HFCUAY401DK8YK3OSDUFU2W', N'DJ', 192, CAST(5075.19 AS Decimal(18, 2)), N'ZCHRH27HZIS6BMOKYZDT6AAS69VRA84JAQ4Z0K0W3H4EB2HCHM0TKVMP2OL86F6QE8VLHOJD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (8, N'Miss.', N'BGVPWZLHKTKJW8L7E5TYGLJSU3T2BX2JIEMTRYQHL', N'4IPUWYMIYNNZG9H0EKTDWO6WBQAIZW7EJ7PS8942Q19BW38JVU098I7GCTJ6O4J1F9G8KPS4GQMVEVZ7HQM5WX5108FEQXEMI8VMN0Z61WTHVC1HUBOXIE5H4F8B9DEIC0D', N'NL49', 101, CAST(18136.89 AS Decimal(18, 2)), N'GQO6VH3RJ9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (9, N'Miss.', N'INH', N'ZCJHRF3Z4N5N6YKE9H342EI8RNWOIA5UZVHHR652A5CHAK4ATZ9UX83LUBQ3JEHUHAOBG3M2B1TX11Y7JLVI0BXQRWNGG2JVNHZZWTUQC7JVF6JSDJKXJYU6CXJK', N'SOMIIWRLXAH0DEW2M4GHQS902YX1U4F3K0DQ0L82B6B7XZMYMW1HNRC0FLGKZQQSVDGD0510VD6KG132CYEY3YFSNCBF5O2LFJCJJ9XHU1L9LSJDID81CSOWYNPOUMU7BK4XPJI20W4', 242, CAST(2741.39 AS Decimal(18, 2)), N'8AZE4EXBZSQNAD026WUS2NU35XJ67HGN6HI38HG2R8D6Q2ESVEXVPGMKFW86VR4IB3HSVWUOFR1U9OD3JQBSKLXPVXOC9A7Z3VUMKLXYK8FX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (10, N'Dr.', N'L', N'6M9IX9J1YAPR56TS1BLDU2XHLCPNTNY99A6L9DHWZRF8U5ES0EAMX7L3ORWLKW8BBFHVZ8IOTPD3NOMFXWMF', N'C56VTXWSF19MUFKVJ9N76DY0NMNYV50FOMJTHUUWQ2S9BI2AZNJQ9WVZ66779YW90TX7VREPFQH3LPO5JDZ7MA6RQKMANNMR5I8IKUE78TBJFRDHH1NWYPMQN5HA532R3PY2G6LOYSZTZ', 80, CAST(14080.72 AS Decimal(18, 2)), N'SBQI5M4GBYQ5SXX7HF5K2QETQIXTC8B50A2MXT4N2JSX3HSOZQ2S9CC2XWSMOB32ML4HUB9OBIIIYHQ8P9TL6JVOY0P11HYQFPAIDATOHEGRTT4F6JWFHIW2PGJTM8MUKR2867VFF54R24U4W9UHKI9XT8TXRZ18RM62RV9ZNHZBE40KLFXCE5A1I5FYDYNF3V0GYSC00VT2JXJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (11, N'Miss.', N'', N'CC2O2WHHWC3I3WEOJSSWMS8TIFZ4HNN9TYY3F6WB06XC9KJR8RE3UJQJ486NWC08PUP5YB8DWGVFVVJXV7WP9JEA7FZ609EN', N'CY64TLZQTGWIUED415RJFQTB1AGZX6QTR0TI31AHRDVH6XB6AUQU2F7', 200, CAST(11191.80 AS Decimal(18, 2)), N'79BB2PUMB5JLGALPTJ8I4KMS2WCIB8IKMQQ4MCDE1E4T8QKP948ZO0KNNJ85CBA3MYZQKH2H6UHQGTJBCN97ZJVL52H3371P306ARU4S1QS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (12, N'Mrs.', N'6VR1KQPW3UT5I5MQ10IM', N'PNFUETXI17DNAO8P8RPGAY5FFYJB2DM1886842HDZ68C1MWQRHRHP7VQIZFFALKBF2I0L5ABG4PSES1SKLL5C0DFP4N12EQKSP7U8RVL7DQR0PLMEI1V2FZEP', N'5V2I40SMQ2RUKV00UAR2UB53Y9O3GVRBT8C8YRCRL9R36HMFUQZRN5QTQZJUC', 69, CAST(2040.91 AS Decimal(18, 2)), N'JU7UZXTP22332EKH0YEZSRMFM9KIIG59Q01AVN46DCM1W37C9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (13, N'Mr', N'GFECDJ3VBVH', N'AGI882E50PL6KTPZXY9LE0I0NKCUICQS56GF3Z4ODVPW17Y852H053NAXHLOPJNNZT1DCAWYTL7JBMZFM4OFUPN1I6HLEGYU81X86KVV6J6JV4ZBH62LU7T95ZV5TAKDMDA9PR828T9B', N'6UBF1CIR23X0GLK1XHN89QWZONIIHZ7HEW3XRQFAW2OVUM', 243, CAST(13485.55 AS Decimal(18, 2)), N'S3CT2R8R7PCB6LWUD1CAMDU7LF5LJJ288UO2WWYA23FEU15141P5ZZ1E857NMN8NN33BXUYG317IXFDK93HHTX89T9TROBOFVRRQYU49291YRIHTRNDI6QUQV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (14, N'Ms.', N'H51BIXOX', N'36E7548EDZ07N27OQ2VZTXITPLQX0C1YHQ2SHXN6CY8E921P0DIRDBQ6OKIKDAE0Y2PX0E', N'59O1273FFXCQDT0A2WGMKHN961DB72151ZC8TX5AAGNZFZ2G', 139, CAST(2402.86 AS Decimal(18, 2)), N'IN07RSDSN5ONLFZ7EKVAIAS0Z1X694X0U5BG9VH9KYVB541XIYB9ULA8U07QU7JI8N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (15, N'Mr', N'O3XB', N'SEPNUO3JNJ1XMU9K60W4WF3S1K8F7C3OL5PCNNVHK0V0CDR6OHJX49ADBWL9CAGCBH4XXI4EKWJ2S1RPS6KBUB1R1L1WNKKZ2A1RK0TPPEU8GXHEWNI', N'SLYD03NMEV0TR8', 7, CAST(14762.91 AS Decimal(18, 2)), N'G4JXJ2MPJEGVUZ0NATN69U3L9OREDFC3HCLTZ1S78VQTD4CQUJ9PKHJL0XOUB7C42DDID6O90');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (16, N'Dr.', N'RVXFY3DTPGCO76L1RZBB00KEJ2TPVSBH1AS7YVWEFLZT', N'RZMTW5GICO8YIGMI0Z5RCVMFHSA44MZ02A82N8VEKBC06VPZBYEXHQXWC6B3UCDQP7W87JUR4Q71IM9L3BS681IBDCQGWSJ8XMBYZHRR3MSRJ', N'V7PDHRG5R6B4UNU6ZXFFG2R1WPLE14GI8938AOY5BF76OZSZKP0WCSWTFNHR524MQSVKJMVAYA41VKCWWMTC3K6FCATN6', 43, CAST(16129.47 AS Decimal(18, 2)), N'XD3A84B0KT5MI0SZS2CXV1JMQ0RTCNV0O3J5HQOKJANJYFUDPEDMW3KWUHJ8CHNWY5XFGNH2DRELDZNB5E4YA93LINA06G71NRKTHFW2WB85PZIUU82YDOMP2CWTCHVWJCXMEUTPH12Z0XWI5G6YE9NY5VR5I3PFFCLC1VF0EDGBMMO4FDNWBXIAOZH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (17, N'Mr', N'HBVW4MZ2QBJWV', N'DQXP0JJ7HNPLVVTEV', N'Z8ALGV38FYTQX2OVXUALUJ8SI5MF79T83RAVQA4GSO6VIDM3QHCYCLCG0I2B9O065LM6RT4NQTS6CC94IIOPWUVIEUV77T74N0QWRGCXDP8JT53N8YSQZAAA', 215, CAST(6318.10 AS Decimal(18, 2)), N'2O6EBMKOBKH905K1SBBI7NP5FT3HUBN2DWXP620Z20SVWDV5DHHCNZBFZ1ZHI2T0WFW38UUQBBF6VU81XY4CTAEELHQ43IG06RYHHSWIMR1BK4K4TXKKYG6M0IHQ4QNTUE03WRJ51LQ292TGXLB5YW2PLBGZA6EW47G54H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (18, N'Mr', N'OXX4VNXED2W2WVBLYFPCCDZV7U271WFY05SRH', N'6Z4VAAMLJ12L9RRHZZJ7RZOQ4N9EMWYPRGKKRHFM2E0I4VEXTDWUUNK7ADQN18ZM2DUS67PHJW4DZ6L99BK804U3VD9DQSLUFDF', N'3RWYWGXLNJCLDD26RC6LCP9R7Y90H5CQG6NPFZG9', 214, CAST(10005.33 AS Decimal(18, 2)), N'1DEICQ4DYO1TIFHVYCAHKAKUV7UX1LNBGD9SJDPZHYIB9CVGNBITUZNQTKM5V6BC0PD55OCKNA0MS8KJCDAQ3UHGPIYYQK3AN6BKYPBYZX5JY1YKZ3TIVL857WGMQDT26PYMX0KM2CQ5OXINKEZNQLF2X5C29O8L43D82CMYJ6FJU3GAES2BE6BKAWPSOICD441LK9K7R03K5W7TO2OHLW7XRSY6NUA1T2FP2UQ47VKE2RFEOV3LUVS7X3URBEKWP2Q3GIRUBJ9QC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (19, N'Mr', N'36T2XSZ1P3Q5C37JWAX1W0LPDH', N'1LRLOEAXJ773SHDPNQMYIQWTXBRRBAXLRU8OK', N'X5MR1VLPJ7Y3OEEI5QX6W4I6L57PDQSWXAFKMZ63OBXXENRR96A8I2ESMF5VOVCTF25EZUV5KUIL6KSYEFG6FJDVVMX7TAESY4ICHDS', 64, CAST(6315.34 AS Decimal(18, 2)), N'VZDJHSRP7Y97RYZYSTANOZ1BX6389AM1V48VERXS50VST9QTUDQGFO4VX1MAOIFWC8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (20, N'Mr', N'Y2R3K3HBJI9G7W65Y', N'KLTX', N'B5OOJTL2N7H9F5DWPAICWOB9FQM22GG1M0VAUOB20VKMS5DSQLN7UFINTF8T7JZ7RGMEA210YGC13PGADUCGS86', 62, CAST(13034.99 AS Decimal(18, 2)), N'NQ4J0WIIO49HNGAEWJ5L6ZCXC5M3MLYFLX22PTQKX6GROKYTE3ID6M5ND77V9EV25TWQD7O2TLNZJL8S7SPJ2L8ZRFOIMUAJBDLUN7G7EFJLY64SYEOHPCZKKXZYI6GYA4O5ZE4ZCH4N1N0KBWK86TUZD0AQ7HP8ZLBUIYSJ9O478CJXWENLL8SG9PRY4DRURVOFB62C30YHOMR1HCUSU3MQTVKT6TFVWAFCO3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (21, N'Mrs.', N'VKBRH8HTGK2K3PG51ZX052USN0N', N'O55L8EW6ORG8AOXOCNIM8AMCX9P4O614L68NRQICF48UBLYZMA8XBABEJTNZPRHIP', N'I7GFGIUHWDUCIYHNKM9E3HJ4YYGD6IEI9GW2LLKFLV5QU4RECOW5YS21OCHH2HADYB222F1Y2TS8BSAT610IL8JHDUE942D3KRSI2PBWMX35ZUPV1NA0GRRPRKO', 151, CAST(14926.88 AS Decimal(18, 2)), N'QCAHLAARMXQHRJZZO8XMGL959K2LE7ECEQ4GJL1GJ4XVGCOCXBR3RG5425807ODFJD20EIF26G3BOEPXWQN2FALXK0EED19URIB2ANXFVPXADTGNGA4H1A08S4FE40O579K63MN8S');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (22, N'Mr', N'Q5QVN8HWC', N'N3FAWL56741S1BBPIEY3TAUU4Y3JNONQ4ZYUJCEMS437CRSBOZ93JMHC8L6YILIJHAN1DG55ZCAO7NHC5RVNEK6IIMLY5G36MKQ13R', N'1SU0GPNJ0SRHP4WN5EII4I7GSCMT02QH04VU32OA75V9WTACV3KD262IKD732UJY1AHL82K2Q7BZMYKY29XWIDEU1C9QVK8CLX8LBO4SJHMVU3VMT91SW', 132, CAST(15622.95 AS Decimal(18, 2)), N'7QDAKQKQY2WRSHI2A57IAU0R339AKTNWPT29VHJOUE2L8FG3N0CH09XCPL7HH954F02ZE87SLIOWSEINM5MKH5VFVQJ9A27K8X67DHPFSJWHL0JA3JUCNKM95N3NOXIIB3NU8AA5F6RY9DTV786Q8UWOBW2PD1RV1D6ICO2S9OWHSO0RU8GFRRAH6ZJC8KREFWXW7AII6DHJXFVMWAV5LB392OCC5PKOXI1WQ4KJPY8DAQJQ4WFXPLT3TNTIY6DGTTMFDYVSQCGM2P');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (23, N'Dr.', N'KJLRNX8ZFK01U77XATPJ3GKO2AT7XU7JTUEEEEFX', N'7T337CS', N'FOVNKVST75ZYDPPYND55C0QJZXHNWLJFGYHJQO48ZP9GVVQ6WUL', 240, CAST(3435.67 AS Decimal(18, 2)), N'B4L88');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (24, N'Dr.', N'OL3TOBJNPYO6S34YXPC311L', N'L4TSRQV4X45JRV70J832NXF8ETNUBGY5PH0UBNCGQFTXY87CM3JZ8QHOOKEY31SG5ZT9UDOWVNB74HA5LB78XZXY0B5R8EDPMCRYEXH9FM3LE9K7A8CRTKI62V9J7XNHALL', N'NRBEXBNNE5WLMJIF868Y9W5MR9O36AR20VSPN2ME0GUUSNUBDB', 60, CAST(12192.17 AS Decimal(18, 2)), N'NYBPX33A1KJLRKG44C50N6D5613OHDCX466UBPGVSHPRX1A5I70927MGL5IWZETN8LGKELSEW976HM84QY5AD3VXKP957JWEO1ICLQRXEMCTZFZZXE609IA4PJZOBM7DDTIF3WJ078VRQ2X5QA8SDV55REM2Q2LREZG6XKV1U5T0NIENLUY1EEZHNCNP9HA4M4CRMR75E7Y724I9ZYGV4KDZZYILX6RDVOEI5N1UNSM6GSEJUDPB0FZ2RCRN8M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (25, N'Mr', N'H80STIWES0EVHVDZ9J7WJD0QAFHO2THM', N'QCROUYSAVBKQRYGZ2LW1TLWJOX1IYMBSOTGX', N'PMNEQLONN', 227, CAST(1069.87 AS Decimal(18, 2)), N'7FKBDQZ3CWM7CX6J7KYQJHGDBRTWEL1JERWH0SVACED7N4KTJ2AVPQZ7UPE7AGI16SIFNQJ5V841Z9166ZCBB5UOROMBEO0WWC0VM56TJ40GLX8LN70A46Q1XUNY37R6785M85K1TIS64D2TG1N6NQRPLZYRI7QBCT8CSLCINZHMDJWJRTI2KLJHHF087SILRHUA5Q1UO5JO94C23E0OPNRRARVCK4AUGVUVOLE1SNEE1U8C3Y4TSUW3Q30EVOAKUO7DAGDI0Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (26, N'Dr', N'QBGAQT619ESO8G2BDTHTOT389IE17CYIRVRJXOIQ0UAY711YEC', N'NWVR8AQAIR9FOPJX4G8ZWWAB90R2YHJIEP19LA5866S1A7M35VBH9OZYHW1PJFTRX50ZN9BUAZS', N'KG3EULQRTS5KTYS2BU3FCQVD1GCH13YEYQGZQFY24JJJR5SOLNA', 246, CAST(12859.57 AS Decimal(18, 2)), N'19CPFII9MZH2MYQ5LK064DUKDNU2MKMSSXUUED');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (27, N'Mrs', N'00TBX8718F5TXFA', N'4802ENX2518PP3SP9FORD0456NFVKH69V9U8VZBV', N'K8BTLQDE89QQTRL2ISCVV1B', 8, CAST(17933.84 AS Decimal(18, 2)), N'VCENKCMKEJBRXZTROFSCSNGM1CO9O3WR704TPP97Q2FJBTPTZ56EM1R7WRM8NDWBMJJXUZ2Y6KLQ7XB8NVAIWH468XXX20JD54WR9SYZ3881F10ZGELS3DE5EDOX25V518K20JZUWAFO93Q7WYF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (28, N'Dr.', N'DPJE', N'QMVWA9KGLLUB1D34VVQ82HOUZUG8KU94S9ME98VEVEYVCYTWR3Z3KNF8X1XGSCWRBQISQOVN0CCN', N'7BLVNOVDS4UQFMEZ2JTUTTQ0KP6SBFY', 186, CAST(7885.02 AS Decimal(18, 2)), N'ASQQCV30WYD2Z7GXYXFQVSXPVBNH04O6QAYSCA63QVDHB63IQZZJ9OVHU0U18M0SA6CP9OKOQBZZEGEP74Q144W1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (29, N'Miss.', N'ARTTJ507HFMUNYH', N'SI10KHGU6J5TDG7AFLJI7KLF1538B37ASQ5IWG8UFW46DYD7NDLRT5B7WLZFE8J3BU1NBODY', N'XIM94IQKECXPWVNWECSC7GYDLKBXH22D5BTWZ4VKS8GHV13O2AEZMMBGK9OJ6T2BAJJL2QW', 154, CAST(17877.88 AS Decimal(18, 2)), N'GXBF4U4VL65TE92EBSYPV2DM5T4VYN59BASQ99LGU3S99VTVOMTBYBJDJP9BQ9WY1VI3GC526HURA3C9087CTTAZQF6KZAPL6U8DDPEBHR5GHR3GCZAH1K47LID05L2WS8LFVYWBTVV2OTIZBQ7Z07KMP1SVCE5VO9O86NLD3ZO5O2IRZDOFD3VKOYQT60YFPZEF4ASO5TV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (30, N'Mrs.', N'J', N'O2BFF22RVLYHGHMEYMBGTG7C1UIXPWYZME52ZRGIWNIMLLVDE8D22IJ7UYEKJ51ZMYV1BKF65SJ5YKRFZ5IHJWW4VY81DWZRL', N'H8JY0GHKHMV7N2RJ0CCQGBDZ647CHILBD4IE2CF3R32KXVN7SZKPE6T5UJSW952Y0JUJKCGNW9YC8T2AGZJIXWX6ACJJJJTL14JE14NFIWS47', 122, CAST(6504.47 AS Decimal(18, 2)), N'JEXNI1VYPQIKD4J7XR7308FPN3MPL0AJ7U0A13B440QZHT20QLQDMS0BY8ZFF6COFYCI496UF2YZHG7T1MZ0AWWFUPBT3WPYN2JIHJWGEWYKU0TI05DS6CEJ1XOFXCQJCZBFWPCIQJLDYCKTVTTXIWRBN0HJUGI15E7UPDLATV2NR0LODVJ3JT1F70SW7TN90J8K5P3H8I4MU4JMES6YXEICDRNOLP2Z8TN7S1JNR2V1OEL3H5HFNOBL1V6D2FVJF4E1HCUD8I7VJHNZ6J7G7NCJH16XU5KB6CLKZKL5B364HG2J877I8FBSRVJF5XJ2YVO7V2ZLX254G820ZMOMY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (31, N'Mr', N'BPMAAV0', N'0MPU1UT7WAYD996YLDMKGP1R5DCDS9TSKFK4P53OOB0M5IPYUEAL502ALYOOIFEMG6STP28', N'X1HHF9LK04LN87TX4DFDB39N9CB4Z03TYTEH113J0G3ESDVGLKSFPU6TRT83XHKZ1SOFSCW29VCUZ', 28, CAST(10085.91 AS Decimal(18, 2)), N'3R0TT405ZDK35LRUO57LK697BJSIGI8W4XSX619VLS2RJC2G84YJECGWHTI9BHPH5NZ8TUONVC0S4HNZGBACKOHSGVFDI0J32KLVDTNEFAN2BNSZ5JS07CXG56SYEB4VSXPJVRLNNVW90FGS2F7Z7JVQN5P61PZ46S9EX93DX5CBFNFQQZVZ34O91ZVQ2FLYWS3862VTBU216KA0PZF2T0014ZCXDDBIJDFNK7KO32N92M3HPV12ZJ5VR246PXFYIKHS5MFHFRYQDRYHWV8IB8IZ8JVH3DZ6NOQI4AC3FKN7LEI04MATPXN91IKLRYE1SR3P0FCLJ42RLADT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (32, N'Ms.', N'JX5N9VYZP9ZHE27TQZJZAHSXTU8P20GX', N'AYW4PELNNDJEZ8MJD9JRHE58XD6ZPV8S5UB74XK6C014W0N8J9GFJHZVSN7B8MYS5Q85XFEFPCFGD1BXQX', N'VWGVIE8N43MKP7T0MIV4', 57, CAST(10327.86 AS Decimal(18, 2)), N'UDG35GQ0GHMQQBH5MFUBT0OAOAKUVOQ4RLWKXXMADOJYQVTTLLZVJH7UP6EVWV4SQIY4FW7OSJY5GQJTHR9AOVK9E1VRJREHJR78WODODA20J1EZMLE4MU3UXPQD0G514HMOIBWTDKWDTKQCNW5YD9UOODA7X0NX51V1FPGAOKQ1XP1CYDP4B7NVMX050PVDWZ8RPOXXFU9SJTQYBY9JAJLYD0FIPB9ZPC4YH9MAGSOHXVCT61T2GB3DD9EP8E83KA36OSH1BY2IU41IOMBNI7JD9RK7VX11JKWMS54EKRQH8LI88V1M3LLDRPXW796EX1Y98EQIHW2QG14N9BY0VFYXZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (33, N'Ms.', N'6L22U5RWN', N'FFT8OUFEHQ9YP18Z5RIB3U1Q71IHQB9KA5IDBIKAH0XOFDPF52658MCLD21MCYN5NJIVNN77U2WCATC3', N'ZOFN9OQ5THBTWYCN1Z6RDOKS7MO899UYVHV7088PHHAMARS9HDKJPCZB3MFN0IWJNCYF24MTQGAVDYHGTFQWPA9JIK3DTKP', 215, CAST(5936.18 AS Decimal(18, 2)), N'U2877ALBJ7M80T4J47JUWPK9NVB6JI21APKN99OR44IX00B4VBBQE4L4IYKCZFS14LYA9G9UIRQS7N9MJ6A76CM53F5APCRPCGSE20UE2G8METWVPXST4LUSYS7UBZ45Z0FRVUJJBW5Q30Q9IAKRKYKRLZG9T022C2NDE50');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (34, N'Mr', N'8Y2G8HTJAC12247TEN8XPT1O7H4RWUR2N8KZRE', N'O54COTXZ9GXXICS7RP5W9EIX0S9P1S7A9MZZBCZQLWE6A9BQ44J46639N7BWJ8YG8MOWDSVFPFBC0BMRGJLW8342IPC4037DYX', N'LRYXS', 115, CAST(10188.48 AS Decimal(18, 2)), N'D9I8F4PY2XB1EDL15VE9PAT2E1CCVD9PDAGCBHAH7WO1OY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (35, N'Mr', N'79G5LR3JYV0Q3NPJFWD8QC1NGKYFTJ810M0O9NGW3X6VV3NEXP', N'NLECB93E', N'6DQQS923X45YTLS0UD3FWI1806QBAM0JOF8D5YI0GEMY8UR46KWLUDCHQMIQTA4LADCEUVU3YIV205FM4PPFPAZK1O8', 127, CAST(17256.22 AS Decimal(18, 2)), N'MXP04G3K7EDQNLP1YROZBK4DNLW2TMSEFKQF6C599Q9XYQMVIUQ9ZZ51SCCJJ1RKMYB3VAVLMFPKB7EXY1JYWIEFEPMU0LP7ZOAZFJ08Z4NKAKPLXFKIHSO4KWO5N1L0PHLNWFHF0BYSVT5UZ1WK16Q6Z6FJVUKYIMVSZ2PHX5I6UW8QQU6M40ZJREN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (36, N'Ms.', N'2D59U7SO1SOQENZQHN19RGG4T65RDWJH3E6NVD5GGZE', N'UQ8BKKFZN275ILDNGREM7YE3DY5269N5PD7S', N'IQLBUNKDRSQ1QRFYS', 184, CAST(15805.75 AS Decimal(18, 2)), N'0YK6QZ99YDUXBENVOKC3YOS1OYUHMC0KFZHZLBFUNZSDZ9APD4U72KRB5IHS5RNMCAHBXNAC4HGYVF1FO54HHTHV85T2UNPVB51PRY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (37, N'Mr', N'F7S8WC6RVGELX011A586MZHBV3HKSS2CPLEXU1PRMN', N'0JGN7QVPS5Z0OVHPRJWB5XMEDTDF2F5EL7F7YZ08IELT61HE5FYTBHB3X29ECGMC0KFHF9QSIOSRCT7C', N'HL7VL3LOVZESD6MZK8XK7CK1UCZNOXV0RR6MOM4HQ5RKYYEJER67172415184X0X4E0LZ0AY3FU1LZ3VYF8XROZJP2LIKVDS5UGKYTJEG83LD', 158, CAST(9737.51 AS Decimal(18, 2)), N'PUH2L4SFQH23ZN54ISM3RU8IHRKMQDCNPDFN0QWRFQ3LRJP861JW4U1VLYLTJ5PD4FDM8I4RWVN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (38, N'Mr', N'KQUXHFFO8V8LSRLH3ABNLIKAUA469GGKYZWK0604D3THH0L59J', N'Y9NHB23VCAWPMV1R8SLL0YVO5BNOJQ4UX2E7ZUPIBM3ZU3VSQZ40LQBZDYCZFFBL61RJGUSD23ADVWT2FUYKM397RET0IP2WAITTBCC', N'J125APO26GEGWXERD821VQJIX5VUGJKE6OIJGFLN43NZ6HWMZPUVIC5SIJ85TUMNV0A8FVBYNEXS3KCF89UROPVTJP1W6FU9H0356O64DW74FCPY7SXK0UY64HPPUER7KNB2G69K2PDSHRD602P', 125, CAST(4411.95 AS Decimal(18, 2)), N'RMRX2CUGJUBJ11527A0PHC52ZOWR087Z3Z7NR6O0INWJAOG3MTND015ERZCSS3FANBG2THB1LZ7TGMRB7T56KTZ2TSVRTW8F7LVY8DA4HMS1TCY581KZX9PUCD80MK7ORRLURS3TI0PY0X8GUQJSB8HYW0MU49IXF3A1R4DFXRGXJQTE5R6V0EDIAMXQ68O9IRJWN6PPC4VKSKE577PC2MW0QRR46N8O26ES7WQY2GJWJTPQ7SIZJB7WUI6WFLJOV6HL5MXAGRAL2ZGW11WE495QZHXOPUJGXU1DB4KLU8IS1LTV2AUEO5KL0RMNO8LL7UO8Y3KXGBJWQDPDO2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (39, N'Dr.', N'HA0E26J26B8FSENMTV0', N'6QXHFX4H49KLHRZ2S', N'I99M1X1PYHAZ40JS1MH0JCHAH6OD3JPRPCPAEO1J5JLLFEOH7L4DLPV5SY5V9OMFSJARB8ECLYVZQWV3H65HEB5ZH', 231, CAST(2796.69 AS Decimal(18, 2)), N'F05SSAFCKHWWLNWK6XLWYPWXCLOVN18ZMM5L21VXIR0FJFY9TTIF25OP37F6MKOI9X9ZHAH51NE6PHEWNF1UJSXGXFIVLOBY2H6M5YRJBDEERH0LTJJ7IUZG0T11SMJDB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (40, N'Mr', N'WA69HO3TTOZXPUZAXKUEH3TT5O1', N'S21RUD1E3D30Q3I2DV6RRUABW84GFJJQ1SJ9UEVKG1TRE4JH3ED3W0SXRPVL8KYKUCZ', N'IFJ5AHW5TV3W6Z7SSNUVEV22D2I41GDAARQYTFND3K2ZZL06ALJI5M4MCHR7YR4CITME89', 165, CAST(5274.59 AS Decimal(18, 2)), N'47BRQONII6EIOGFX1254F8IPMCXPROT13CDSA1SUJ0CT2I4LMULH77ZWPL5ERYRTCDFC2MMZAALFVPM48B2W3CTVCH3OWE3L9I3RI08L6WLK0ZY15FVVP0KJZLIY3V6Z6D8Y1GT2NI5W9SH3PV8OQDSG4JSXHAHAQLDNR00PLS77UN974E87NI9SKSTHOWKD0U6NE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (41, N'Dr.', N'TDS983P64RWD2Q8IBBPXEDP81MYTHC4TN0ZGVPOM5T65NGB', N'J87YZLB', N'CZ', 147, CAST(7699.43 AS Decimal(18, 2)), N'COVI2X6LLHAKS21AN7CL3Y7I1P7T60GLSA2KC4GCMY6C633ICQ7YBTQDHCHC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (42, N'Miss', N'UBHTZ3OFOK8M', N'0JXSPND05FU0ZLI4J9BV29X25LYV7E3AP2X7S3WL7Y', N'STS22S2CUFXU4NN3LBOFFBGQG6ZLX0M6IPTATAEZ5LXOEOOYR5NNOK0HD2LWTGFTTQBFUC9BWO9UERBSH0U', 23, CAST(7956.56 AS Decimal(18, 2)), N'CEL0PRI0HXIRZY4RVCXMPHGSI9ZJO20M3M9KLBHCKIVTO7CUMLL0KQ0VYSIFSYBEXVNCPK6JUK17LN4AX4X2GZ2DMDLST1JM6GV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (43, N'Mr', N'WPRN3Q2QSMMN3SL7JKKA7Y6UATJCJRBH1H83EIKQ902O', N'EHYYXP3FQAFMRMVN3PHTRCKBXOABFDQO4UIK6N053YD0AF6LXGTVP5N1XM08ER0DJQIW3AGBPSZJ1HIPEZJVYY', N'DYIYPCXROI6P63VOC94EWCRZA53LRTFSL', 185, CAST(6857.26 AS Decimal(18, 2)), N'JZ52F25ZOT9BO7IN18XXTAQBYDQS1F05RBQXYUNET2PS3A4LIVKYJYZ99T31CCY8T4JCHL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (44, N'Mr', N'6VA284', N'HMKMRRCY0GJW9HMZC6DGV2DLJQPD0TORJQMNWUXKDTY2IK87RZ7OLIBE9Y301YY7SRDJUZ3I9T213A3YHHM0LZ61F8EXRWIEVRAR7PCRWPFSF9AYV4JKCXLSKB4', N'GU8CPHFHNEIKOBWNF7WGV17IOJ9B0U3D3IM1FZJMYEODHPHSP4D7W', 150, CAST(14533.87 AS Decimal(18, 2)), N'6LJ4QKX8N94A5V2LTC5RM2G4GZYQR4X7DDZU8OBLFR72TDQIQ00XJFYHNM4X9XI0CYHOMZ3SCJBUUDA28F0Q40NYEI6MKECI87QVV2WRX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (45, N'Dr.', N'', N'K5RCAN6B0BQR4U4WKEL5XG1MDY2Y6H6WLQ7QX2HS2ZXJDRGHSO85QYP', N'RFNPO673HSA4G5OV7GN9HHCU1Y1HMWHVHYR7DPBDEUWV2C9C3UWXJMN92SOP4QHLBFNIDGHH4AUNLGROPODSZKBUBI5L1L8OCAKMPQZMDES9RZOL0Z0GCPLQ3S7VBWGI', 81, CAST(17146.13 AS Decimal(18, 2)), N'L034M9B1OTWSVCAJA3SG8X7TMMNF76J8SWEMU9VXBIPILGBDKCRTZGZNTAI0LVUHAOZZXNO07U5P7O75AAUUFP9BWRTJRVBFN88XGCFWNQM4BAF43CPB102KEN36U48BJQ2ZF9PYUY7O340MBOGF6ZEN6NIS992IHALK8FPTMRH2TDH9NGU5OT5JCETRRXOKVO6SJGEWZNSEIBUS685SEXUO518TMX2P2W746OP62Y500Q11J0LISW6YTINI8KA1L3CL3PMIIYPGRUNE0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (46, N'Dr', N'BXXJWD96P60B5LMKH', N'44ZBL74J5U6ENEYIWT2YII8LIL6I905N12MT257VUDEJK1UDPQ8WVQLMVETZ1MA4OJDKS5FRM7443P0GQSSJS8RAG0XOB7T739U1O9LKAHAOMGI6DD99URCFR34S7RFFDW1T', N'6AAV5ZZPRELR12BTJK2LSBNOUJWI3BHY98LPDPVZ1QLA0Z1QW1SBDX8UNM1L3GMFXMHTHLGTO2J2QCOVH5M2I5KCZQ2ROAWL45CDH88AKYNBD64AX63XTKWS25TQJP5E6YYKZAD9XBHKH9YTM', 188, CAST(12954.70 AS Decimal(18, 2)), N'9LCJW5Q9BN07YIO4FXDFXUE2ZT7P6ZV8I1AOO166VUEYHB06SNEQ1K9F69K3Y12BSSPW8ZFDQ6K2FGLOT0WJK57XSUHFH37US35PM3YT810U060QOW9Y4JQNKR4DH0WMYQACAV1Q13AJ4DXLURQKU9P9CI4UYLB84DVAWOGSUJX086I7UJJQ9BRP01ZRR7RGS2FRHNO5AYQBCO050X0E2KYSL59VPO1NRH85RRP7VDFBLGDB0TRT6CE73M5CDSGLW2JVFUE87TJO5N65SYVVX7GE2125');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (47, N'Mr', N'10T16WHZ4', N'ZRH678AY3N0HQBYYKCCX', N'TH6YRK8JBBEIRVT94E8JANSU0I2CBS704RW', 203, CAST(3883.84 AS Decimal(18, 2)), N'DU2WTEIWIV5EIMDTP1FFZJEXKOPM5SES9MTZGRB9N8A2PGEL2LDZMPLUF4C5PWRPHD5VSECXQ6RR9C8393JJEE6J1ZJCF6KRHKKCBJSO9F9GXUL2W8VLC8B36MUSU0IKL09OSWSQB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (48, N'Dr', N'8A', N'9L5TCI2VAQFOBDMR2MI1HOF3AGGGHTJPWGP5CCVQ83TXKTFXB6HQTVWL61JV1LDG6QRUOGEQRSTEUIIH1J5ACTV1K4Z', N'777EBFY2VFJLR75JL2G5OBY8HW8J4DDZZ41W7U7VOQYLYGL3N', 155, CAST(13064.18 AS Decimal(18, 2)), N'9Z4QL6EHF7AZE99G5OO0U9WPUXKWA0F4AHYBYG0OEDKA9ML');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (49, N'Mr', N'NBTQKBKH5AJKU1DQK9QKF3ZTAQ11X8BXFU', N'TZONPDQU1K9VSRY11IQNI2UIG33CUQAKH3WS36OHRNFGAAILUUZ1DBSR456M9D0AAPDOU6XVT9VUMD86KII0R966B5NYZ27DN46KWURO', N'F1BQZV9YWF7FXH1KMM68CRVLHXDD90A5VHYBO845N8XSO8THJETZ', 179, CAST(16384.38 AS Decimal(18, 2)), N'FBR42A002FVOLI6FS6PXAXHOO0MHPMF8BKHY8B2ZGY9JKC2V65I2XOPHT2F2OJAGZNC1076H4QGCOY3CXQAK3DBNU055VZAWNSJXZ1VYY1Y67DSUZ34Y8QCMCO7020M4FJPVF6CWVCL2E4FG7A6RVBNWFWKBUUVXFTROOWFSR83W5A788QTSTU94VSFJM020GNNLCRSAVE0N8RQ5OB23133KKNSVHW6Q53GHNMVHXIXFULW41AUAYYZCK20PYXTY79H4B9H1FK6I6OPYROT61VS733XLL6I0OY7L4RSSTSUDSG5WC2YA4NXBHA07CWG925U8G4U0V0D81EENX18J88W1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (50, N'Mr', N'ZBV19XBWQAGCU39JOIPWJCZFT9IKWYL', N'373FX4QX01RVZJ1', N'EBO6Q92IWP', 142, CAST(14246.86 AS Decimal(18, 2)), N'V4UQLFWCLBMMXF78YE39OA2VD9BOW1T9S7K0Z9ALGWG2S10L0B9TTRCL1YDB48GJIDTPU78O4ISSUZ3B9PNLR0G0VZZ1WYG8FWKE7AQT2LOBYJR1V11EKVSHWSUV77R51KCXFO3ZZUI5B51B8X6VW1NK42IEFVLVUI9E7TM6X2FQCM6RQJNA1W8ZWRTC6OJ48MBSWN4EBZXUMW8HVROV7BUXA9HF0A09JAIPAEV3F8Y1YEDZJBGE0NWXSDIM6OD1YOBBEI6HWKGZCSZVWHVPTL8VELXXW8XQUX2A31K14YIF7XKZEMPOSO7CFFXTL9LNNP4EPOSVWUKU3SOH0XI9I9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (51, N'Miss', N'ZOEEP7HM478JTD6XOPMFPYTMCG7ZFQZROBC6PUUH02SC', N'7DPIZWR1I7H7N9QQT4N13QD0W0Y0GINL42PG26W7F1XQNJ9RA01VWZEGZOLYXQL0JW2LK9ON7G', N'42KGIPVEH0L3T2', 232, CAST(1807.35 AS Decimal(18, 2)), N'6QQUN3RGVDUSHS5APUUR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (52, N'Dr.', N'FLF2KV7C6F1UR19ZI7D7HVH108TV5FM5HJWURWUUSFHWB', N'1SNDDR7PGGSP5N8HDKX9OGX6Q60BEOFECOCB87P15JR7XXBSB396WLVGM', N'84VTV6B7G6A', 2, CAST(9691.73 AS Decimal(18, 2)), N'3C9NRGTNQB4ERYOZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (53, N'Mr', N'YTLHIUF4MK3E2C2B7RSWC85E7LDIF1DLQ', N'30O4139RBK42C', N'XZ2MQJ0NLOCYTIFHXT7U3S1YN3TQSU3A8KXFEDUKSFBJRXZCQUAMYF15Y4ZNPAURL2P9K03KZM1OHH6P3HZYKGBSJSH9D6UIKKYO7QRQRQNCEDNGY9J8BW64RXQRJT6SR', 164, CAST(8216.09 AS Decimal(18, 2)), N'5R5EPH906OUNSFOIZ2EH7VNYS42PEPUHAVP2LJEVZNLRYZXVGWSVAIM9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (54, N'Dr.', N'A0ANWSQDWBRDUISG8', N'JNADFIJRU80AE8HRSWOB4PC0HNY6LRO9RJN8AI0', N'3XIIIDP97USYE550B3MM6ODTX9Z06YJUKUAQXGR6J2PCCSIKMJH365CEKPK8DO28AYEJ', 185, CAST(18917.87 AS Decimal(18, 2)), N'7LKEJLGUDDXQLWFOIHJAWZS669HXY7S8FZDYTGG14XLM05UZC7R12Z77SE893JV5KOAMIHU20I6YE660FILRFQ5GR55F76XL2F1BU8GUDO0KT8TM77ULX3QUJUUCCEUTLLWZ4U571QERPLNJCI7ZCBNYP7SZD3IYT7Z8BTIC1NJ7PY4X7B0T6VG9XXAW26TX7FXILF7JZUXPRF9Q3US23ORYQPAEJMAVTMZ91LBS3HUCXRHIOKS7DRUJOYSW4TZCK1V5GZPIIZYMUF1Y8SQZU3I2RGK2TFNAHHSVWB1OU9OES8P9XTNC30IGJTE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (55, N'Mr', N'4FZPN6AXHWOK6', N'DC5G4RP09KR8D0MUBAVSKC53JQJVL8GAVKXRJVWQYXW1ZFVQWSX0M8J162WD7TF13HCS3UAGD4UNG334UTZSBFNN1WLGYIJ4IUYI23M1HGMIEWK3ZSIDUMQNTPR69UHUKP4L5K', N'F2VCG24Z0H4QFDNH', 67, CAST(9866.18 AS Decimal(18, 2)), N'EMP2BN4CN52WQ14KE39JQB4ZSA7GYBB2X198KM253CMSQQM1WX2GKU93HPA0GNDBT0ZOSVZS04GEPC91O5K08VH2R5QVB2OFYAYQRX90YAFGEVE4F8CA3C3YIWWM54GYF0FEEI9QWK2YG1OWRLF2PECL707V1MUUUG1DFZQWYLDIA4HH70UJOD81OT7EBEP9P84Z0AGSVI340TB2IQN0SB5G7ZPMRBLKW3S10HHWJ2O5941UI5WKQOHE3NS0LU0JWJ7W1A109QHQN072YV4MF1T7MEYDPGBO148PW4T83VB07RQ2GP1QQE3VQ0AMBOBSFSPIRH6U1WIKQT0UNVX0EKYM1DZW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (56, N'Mrs', N'OF111JU05YBTMURVQYTMHBNKC', N'R6XAUT584BHH5069V4APDBGSNYSXORZYERQ6XBWUNHNVRCCUEG9GUVOGQ4MV08KCBJ3D9ZCJ8F2WNL0BMXI8II3J3AGSO0TEWAJ88YKE3P8FTRS54B93PBUTGK9ZJJU7LNZD2S2NC44S9NQBHB', N'HV58VISUZG1DEZO6GLQP28FJ8GHYBFRU9Z209U0TO84JZ3QRQ76WPYB9GM0E0TJKO73EWOXMKW1U3WJ4QP848V4B', 186, CAST(1345.99 AS Decimal(18, 2)), N'6WFKIKE28BYJ7OUWJ5WZFYFQBDUT2HEH9ZVZ2078LSFKYG7W4PH73WE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (57, N'Mr', N'DZATOB59OFGQEOV391DUKF6M5PRK0DRHPY6VPBA0OD5BE0', N'DRQPKFPROOLVJU1T6SF3C8LQL71JSUYI8VHFVXEXC0EYR8KY8', N'SKMUMTUOKURZBU19KBSXH5K3VNALFCS2SQ44ARX365J1R4EU6UN', 62, CAST(8048.48 AS Decimal(18, 2)), N'GP84PKZQWH98TUTIXNDNJVRU6YPCZ6ECKNIDR3J0TONH6Y29WYAFIROKXEXRUMRQ3XN6BFRU4CUU8AN7VGG0VYTTYXGC5R66XXD9BWXG7GB6XTCMRPWE6QU54U7DZEOC6NXBWDWYJZTFMNV4LULFVR07285HOJHSSYZAW1PDTXU6WEIGY3S4T8HENQ8N8FA0I1NOOL8J47MYXTANQOILQCYJHKM5T15DNUOVRTSDU9ZLLIHTGKXJWO952374Y2Q228B25EWWW4QHDDYY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (58, N'Ms', N'4QD1M6IJXSOOZJK8BNZ1FH', N'KJ27C5604DE6ZUQ3NODMY8EHR', N'BD6MZJYYI8981P6KQXYTDOQBMIBR9GFLP8QEKH4RTZLYWAZ2XU48VU6NNU0H87P1TOI', 138, CAST(18105.59 AS Decimal(18, 2)), N'TP84LHYLJTOMOFSIXIC7FN1O0NSYSSO5814DIYHRCHML7A7PYYFULQM6NJ4XPZSQ4IDMAE0Z1LVY0GHPF20TCUJIFYPZTJ2COVWLEJYGT0VO572EHMZZEAZV7CP15HIIA50STUNGUV0JNQTHWE2GDOG5P1D2TXABHDEZ7ALNYI4I9F8GI74RF25LOU2RGLNXKO29CTAMSEHUKYVATXJLTJWE8SBC7T6DV7YKCY3PXHY0LA1QYRYJ1141SO1KHXFY74YCZBYVTUOBLVTXRLEFVNBT3XSOWJ702ZSGCOQNT2P7DTFWU4SWJZ3KS492I9YANN8M3CL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (59, N'Mr', N'EXQD669U755MTNB4A6F920NAG35UOFY4MQZ4VTBCNYHITXRKZJ', N'UMYCM3AY9EG0JB9VT0J51J8OLWKMVB5KG0BJ1RRAV0KBMM41D3FDXLAAEARPIO3Y9VJJ0PT198A0ZW1YSI9RWRMVQ15Q01S6XM1R3L', N'YS09S70E2SFBJ8TEC7PV23RQHNJLAJ', 213, CAST(19359.00 AS Decimal(18, 2)), N'UQMSY4GAHWTRQAG3W8N7FN4J3EJPKTTHJQ1SCALOOZLMG6JC64QUPEN7M2PJKQPO2C809OQLMZIG2I3WV7IF2YS42U69L23Y9WJ4YI3IE47QW644ZSOC7AL4J3XEIH0KVJ66YZYC401YQ28WQ2ATERRZAFKUKO0W4NUCZY5ZTB878NDHV1OF6764R7VIF4RF04U37WWRWAZ2IKQN13YJ0KQWGQKR3NKOJS64TA9Z5WJV73L7H8GB58FFEXMGB4O9PBJQDMTRTZE30UOC5DAV68IADRPVNSO08A5WKVUUEPI6UCEJ89BXTT2HS8CMWX31BDUQO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (60, N'Mr', N'U08XD9GW20F6S71', N'N9D4PB9AI9SXZFB1I8OSZK317G33DUAV6HLIJNXKHQMH84SRLKJIES136CW975XNZWQIUTIUB4B9XMS3OCHSARHEGHC7QOCBSZIBE9XS2P6AHS6KJTKVN5D7FC2CHA3NRZHY3HPEFPQLK6WNAR', N'7S645UUFOTRKVFOYZEAPMZNPU0AS5NE4IN7JC4NKHR01BJVASPJ7ZUI84GA5K1A0FN1874MVQQ8UYMEA4ZZG475O4YFVTI0FGZLOIN3O3OG8LNAH2Z0L2UW8IC38PQ18QS', 32, CAST(18737.55 AS Decimal(18, 2)), N'S9JFGGQCG0C6NDGQ6F7O3CI7YGMGUGHOVFH1EECMQGRB9QAPKL7FIZPFRBHZU9H0JNA7WE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (61, N'Dr', N'', N'X3HNNLAV17KBRLJIHB8G146GYERN8FE1PM5KABUCSLN6UDZ0', N'Y0QRHWBCFQW3XSUIFDM3D66KUZCM7IT9BGB7IPQHGHL9MKRX7QBERVNKLX1C0TID97DGHMZQM4MVKWX97EFH7EHFT', 160, CAST(13420.78 AS Decimal(18, 2)), N'S2LYMK6Y76WW9925VQ1A3WDRGZRSLF3T59ECW13VKD9TYD8QHHFGU48WPUINTDCS22RZUP8TN6PPMJT2R0B4ZMZ01IN2JG171HQVM8WR8LTNEI951FWS28SF3QXC16A74IO4SXGI4JVDTBLJ8H14K84TPBRWBJQ2BMIWT4D3YDOICEMS4E3J46MWDVFH6K6KTS26SPP34Y56KMGAOZRXG6Y4ZMIXPVXE74OKBFZEOZF51G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (62, N'Mr', N'O79GU2L4J5HJBKU5P33DTLVFW9B8SOBSXOWS98ZXNST3YD', N'OFC2BMTW0P8TNMMTJM4FZ85GWNFGZLKFRMKZ1ZDZCN9MLI5Y0DBRUK1FAV5N7CXF5S111NRJ843BYJVDIGGMASK6K4P5TQSZQUHTG3XCLRJPHPHQ0S5QWA5C7VHWXMQIC3L311WEJ30I9VOUNY', N'MLNEGNY8ZF6BGKQLSM9S0OZR4LD05UPYNP0E', 6, CAST(17190.18 AS Decimal(18, 2)), N'QF5T7S93NTX756RE81QYFXVY8ZD8GRS3JARIJ2PLX01QE8U8WK64AHWTJ6K8F0NW0UOVE9U6B51FW4KZ55CVKOT1EYYDHH6WD5PJKYTNPZS5GHWELL3AORBC1MGFAHOUY42RE0E6BP5LWNKX2KRWEW8LUDIYHDC8BY6CF50K6WYZMQFD2JDQQSF2VGW1IXCX9YH7IWJ6PHX8Z3X4VY0MIII4HY8Z2Q80NOGHWU1H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (63, N'Miss.', N'GK023XL92CTK', N'0K23FP4LLM0FZ10DE4EPYVQ6S9M3C6M9ZHPX905DWGARJO1G8HAQ8954TWA6218F0QFHB24DY0SIKZM486UVVW0PBK4DQZAU7VRS8J45DWS8GNKU95XW7DJ4PP6RYQNYPX', N'7NZWBXI3WXURMMV51QXMVAV9X34Q8NRKCIKYAVORHO7OI9I8USMY3R7XSPY8SRV86AF42WV5154626ROKWWF1SGKAM5LWGZPTYH8UE5XWGWYN0UMYAOVVF7ETUTFQA9L5FD4OIT5RYJ', 198, CAST(1259.00 AS Decimal(18, 2)), N'J2Y4MHS3DKQXPFQFCQJNK4Z8WLANG80WIGYGKZUGFVO5I3X9P2J4HTLF2P8165N4KTE9GAVDW37PFUQTN1YDPWEPUJDVRS9A8KKPOOSF757ELW07YFD579FNEPEWWZM4TWGV914Z8I6JP03YJ6WCE33Z4XAY9WI7J3KOG4YXAEXO2VYEMGDQ39PPTGQCQ5QC0YZLFEIE8Z206FW9ZWCSIS49DVVZEL64OKO3VCY7YZI47PJDJHDUSXT7UQ8KIIZMSXCLRSDMX5UJA02OCHFX8CBQQG954EOFZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (64, N'Mr', N'RDCVUPLNO2VH46Q0RRH', N'P7UVO1OIY3S8O094K1ENUBN2IDD6M9UIJCUNFA9VIUL0XHIQPM2WB9GDKRCAOIWP9APB5MPASI4ZQM51VMHZ6X69WG3NXY70YWQNR6K3XS', N'VIXASJMLS4TER3EZKQ7L7BT8NQXFGI4XVMIBXJM6NNS0LZCK4UL0RXDJPOM2M75A', 121, CAST(16236.92 AS Decimal(18, 2)), N'BACXMR3QXN2AWUNJ8122EGMLUAJ7IJGEJEOSBEVOT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (65, N'Dr.', N'IVNRL7UBETGD6AGY99R3R', N'T5GNXLBF10WIB3FEPJ1CTB40UVI9O1D2DTD4GT52MJ5Z2DFJCRVKWGAH0FT121Q0NU4HPBYWDYQA64XGGZXW5T5XJW3004ZLS5C89XT1TZ6XP0BWHCK33TUTO6YT7XV9Z5H1RP', N'WI4L32030YKISMNDCBMX35Y9YL8WKKGHI0PH8Z0SKXRZS1X1ZOAWIDWQJUMIT4IFH20SX64CAUC5EZHXO6XVAKZ53YXEDIYGEBHQ144SKXLO0RBKCOTM6N5X3UPZ9QZRVWR2HRWJ25BCYA5CMC1OO', 53, CAST(4994.81 AS Decimal(18, 2)), N'FNOGJEHK5NCXHVNR2C7W8D6NQI6V8T5E8W0YXEQ5PXDT1MXS4JCIHX91H0P18LCCHYOLUPUNL26A0CL3LEROGMWBMZGWOOW3L1C3YBXFPPXFRZ04FLGUUOVU2DYV8XYX52OZ0I59GCYRPHJNYCH3729X5H1LC16RQZ9PA13WG7DIP44KT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (66, N'Mr', N'5LZRV9AKC03VPK9MU98VMETQZ', N'J5W36M87JK7INJWHZAIJ2ZZTV3XYKJA4S51X6QN6GYF80F8Q2NHQ854K6372P9NZA2QHHYB8MC34JQTGV7VW1JVM1GR3JLH6BFXXOQ84C93W200F9R7IDQYR7', N'9R6KM6F5IUXTS3Z92LSAJ1BSYSPCCWOB2JMZWW4Q3XMHF5H1CD9GWES8FEMUH2SM5MQ9HZD6G26MFUDTAN0ZM8FOQEKHAA805Z', 144, CAST(1863.94 AS Decimal(18, 2)), N'WWGVP3SRUJHJWE560P8UCX8KM0OR70CGS05ABVA6WI7KFWAYCI4FCZZZNV8PE1JT60RV9UV4F2XTQN4PPPEOWX4S16NFMLRVYDEE5EPINZZ9158ZRJZONVW8VYU37FITA2UC9QKB0W0XXURWXNO3M283H5I6KMA7H6ZZAWP0ZNOQUZA17Y5KRF78URV47DQEMSGRVSL1XN3YEH9HUHZMGPG1YQ5J0LTMX941JJ5EC4N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (67, N'Dr.', N'JSH8RE45L083G5IV4NAAKWPMEHVW', N'G067P1UWS4SWR4YRKSFYJ1GCTRDZTKG6QK97X4J1267VMDZ3JM56B8KFKUDXOV37OM66URTF8EWDTKQGSAG6EAVH0UM3QLD73Z706T8RSQXXB7LZ4X5EEWSEQO604QON0PAUD', N'SE8KC03ZU86SL1SJT2TZX72J2FVV6T5HFJKE23NZJ8LGJMZGIQEXB0DKCOHX48S02PD1GDHQFUGPMMZGFFDFF85E5Z2DLPUAFKDU8X', 105, CAST(16104.74 AS Decimal(18, 2)), N'B9TCHEAPD4YWCET4N10BTH15C8YBBK9C2CQPXS1MB49SB8P5Q1RA3BAU7OZ9GYDSVMTZO37U0E0O89U4JSKATY8R2VH9SS6CRGWPFPGMTWAPALMYUVQNE2ZWD1XSLX277OXRC4OTBYHWOIGG9IFW1JYOG0BDRO0VU2IMNUMP6WBFL38UKGJ3I56OP9ABTB2NXL1L0UTEWQQ48I2DSHTA4XDOVUWEJAVVUNI01MTQN46SF2F76XJCHRIZ7DP6XFULUU9K02C5N3NZQK9TEP7MQJD35ISOWNS8AKYKSV63LEPE3I8N3VS878VA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (68, N'Mrs.', N'QR8RF', N'9Z1ODOCX5S8NZTFYS66T9IM8M219WMXRLDN6CQI41', N'', 128, CAST(4297.06 AS Decimal(18, 2)), N'5FIAN90BEP5MP1II31CUYZM95K0UJ02PN2MFOTX5O3PT20EU9Q36IGI6T84385RDNGZMF3T9375VAT6456LSWV66KGMUWJBB5M1SF6XU2BANVZ20X2KZHR9S2YGDK9AMJZNJ2DQFV2SVVWKNDOWUZCUDD9QGPJ9T1O4WCIYKB53EZEW5ET');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (69, N'Mr', N'I348PRJY8ERT2C', N'IDRHQV71W3NKGRCT1BN31JVG1L69', N'9OIHJOYPP1HPVCLUKYWGB44PZ691847IF96QPNVG1DNJ74E2ZJAA0JS5JSHDFWHKUZAM6U4W3FEYGKIUR62OUWHVG17W5H14V3P8USW5EE7L4UPYAMM8USQXHE64N7QLEA2CV', 12, CAST(5146.65 AS Decimal(18, 2)), N'WCFN75');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (70, N'Mr', N'A5GPVN3VTAJ79', N'2N2RFZ9G5B62VQT41WVUJO7GYSZHBG5PYFUGKS1S2CVZH06T1C0OAF2DFL', N'0Y9W9GPWRLC8MIUSA3DRQFLSI6NL6USC21MNZXI98LNLREL7RLZYZ4IKCGE3S4PWS05KW6TCL3I5R013LGTLUUCYI1AIJFH4VQSR90AKSNDWMD', 73, CAST(18957.16 AS Decimal(18, 2)), N'6SMAPBSZT7SOBVPCJT9FEZCK2WKCGM1XR1C5X0GRL0LPDQI470VTXPV6G18SRGJ65VX9IJFIDHTEEN7BEG5FR8Z165PVSN05GEJIT9LNLCFGVHSTUWEAA3FXWV2CUJQQHOXZ3PI5UHUESI5ODW1W9PUDZMMX68T1MOZ7KSP5D8FT804DQEZYITGRTJ0H3LYMOTS3JX3K6WJ0915YH86R8VJS87D1S81S9T4F80TSAFSMAGISE1ZUE7DTAZVCK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (71, N'Mr', N'8ZB0G0S', N'N0R5P6G4FVDJ8V3R6T8ZXL6GYFH', N'BFBHCA42YN72VVAT6LE9189TK59T7', 136, CAST(7391.96 AS Decimal(18, 2)), N'RXUQQFWQQHFEGT3XISOLMQ97D2GB584H87NURJP2VOBIF0QKPCG3NZG1NMDOZLLICX59585Y3MPYFRSDCWLSR1T9RM74602A2S5HUHEH7H019HLWUZC3ZTQB4WHI10S2JFVMLAIVH4K90RZA0BA6OYA92UDXZVG7PYHTLZAKHHMV8GACX7HQQLDK5MJQXKVLNDK2A5O10PP7CF1MK00SDQG3KWOZFJMWL08VW72RIFP0W68QLX6WK27XWGIDHPMG2SLC65QDY9AX0F6EOYEHDPCJSBYFPO9TT8Y4KVJF7TYAS9WGA3PIA53CF2KV6AN9ZH4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (72, N'Miss.', N'', N'JDH0ZZDSB76T0WQXOTRS6NVK7LW1TB69P1L1DDK8IBGZMFZ0V8R5NO8VIXSD3BYZ0W3YBOJB9I9U6VXSMV6LJ1L', N'GC48Z27X5TROU32YFOHT6A74R35HX61BUH6UYMW8L8GKHCE6RMPKBEA640GVWQZYSGTDW7ZTR97YUM', 91, CAST(2906.15 AS Decimal(18, 2)), N'H2UTFZ9KR2RIEH4LZRIN5LOHBN8W5OAA54Z79V3BWJLDB162A8ZHMWECISQCE2RGDAIXB3O6RL0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (73, N'Dr.', N'KJ1XH8MOSJ5GMS2K2E7AY5J93ZEFSM', N'TPJGK657DGYQB0O6OGW5EDOM00Q74CFZA35M53Q2D2HQX7GL60W34GLF0XGJFY301ZF8V21LPUSCWYPTJ504GCUUHQL7M7MEYXR8Q4YBDAO8I28N0AXYKO4LQ4HTYI7DDG9R1AEW54ZJ587IZZ', N'FPZPBGGZG60QX61BV9HS1I19KMWT26CCHE16X0OHCHD6WG2NQXCPCULWO', 233, CAST(8208.64 AS Decimal(18, 2)), N'696JQ2E2BNH3TXDALJ4JMVO668Q6KSP0W368L6LBNO4PTF3EPDL7HHNBK0DHB7IIYG7PR5OEXSVYQZDQ5CG67IJEFUNLT3ZG6LRC8EMKO79OLPLLMMCZQBBFXSAWH3KTTFS470IRQWIZ8UTP92Z6R0PUABEG4P3LMFV6XGDM4L8UTB72YKMF4E2SQXUWM1N0SXDSZMSSOC15SU1Y3CHJ2OH8D3G0MH03Y81VYF2CSTRRCX0VWVS9K3X4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (74, N'Dr.', N'YARV5TPLN7LQO4EM79GELKPFEZRTHT6V6', N'CH0V0S6ILM5CU3BU2SGLPV0TFOLFHWYUYBUWDK9YVSTA0S5GUD5PIDHGG7FB7Q0OOADI8FHHJIQX2QSNJ4L3Q8CKUEF65XQ4R4MPEN8EWO6ZNKEPERR35XXFY', N'5PKMW9UO8J4VEUKZFJ5UD3K924UNZNT4H7UZXPK4C', 149, CAST(2040.74 AS Decimal(18, 2)), N'5EW5R66CY6JS5ZN94R8WQWF2L3QOQJVAWGT0670NKEDQG2RW40FBO7P9YTKOFHMFB9VP6N2XRLCCIPMICUJP4KLPQK1CMB83RYF762PHXHJ3VDQ971CKXWBRN6YMLQBGD9KKAEBA42SM0ITCTS5KZN5UMOK033W753QMT6ZSQ1GV3OQ4DMSTKQGP3PXLUB716LHX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (75, N'Dr.', N'75VWWQCTK3CFV5PC76B7QDLBG62V3T0QKGX8RADQ', N'NUZABMRM6Y439WW6622CXAZPSD5NZ', N'8IIUJH4DE1RTC25BJSE7PLQ0D70L2QZ0I5U1Q8LDIL8RDOURUL5SP5IMSIHBHIBO1QB673LB61O3DYNPC8RGK7BDN788Q9W0AJPMCNJQ0TLNHF9UVSY9RU', 166, CAST(6335.56 AS Decimal(18, 2)), N'6JNSCUX7AQYXFMHA2MFN0I38DYEUEOI7TC62508WIITYZOEOPR3Y19ROGEFEF3SL8Q43GE51EJ4H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (76, N'Dr', N'SZM2Z3L45M0JYGTKJGQNGPR2MUF8GKWSL6YEZ8G2HRY6Z6L0', N'66RLZDEMCJ80EGLAIV6YQVCM', N'UEYJ0VCLX5NST80CPO1FQLNW7XECXAN8FFV7E4JVN8OITMGLUG9KQFD9Q2B2GZNMHFCEDSXK45RIX52LHTIH02I01LGCTHENK20EA181IPGKNUCLZQLNH6LFWCCRBLRNQ4YU', 128, CAST(7970.31 AS Decimal(18, 2)), N'59PJP4NLJ5JKIMQLTGFP8Q8JB8BL1KI59YA5QUPY5ZOLLIXSEGK3PSGE058HT1JZNEBJBKVYQGK81NYSAI7KZFFHIW4KM854GPX67EHTL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (77, N'Ms.', N'N7UM2L28JG5OCNKQ7XSHFLBZO6PRL3G8E4TD26JKV6FSB', N'DUAHYG3NBRXCOXIRKPI', N'OBFLGYBLYD69VD2WR6EGKHXOGPXXTTJWHGAF52179UYZ6HG7OQZXJEJ6DQ4Q0DR4U9SE2NQP466QJYIY9P92ULC3W31FXA6W2T5WP15109TC7TNE86HA4P98WPHYLBST0AO', 198, CAST(9765.68 AS Decimal(18, 2)), N'C978DD6F6BUYZ8YT1FGACIBGRBPRLW1DZD2699IRE72TAHQP8DD1DB9UXRG1NET99GZL5SKRWOV5FH6AL0J8JZ0N488HSG3ZDSKTI5JGTL5OF4EGL6GNVLQAGBHXJ2ZFLWRNXCRF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (78, N'Mr', N'44EFR8TIO2WUYVWBMGZW97U7O1E7L85J', N'WWJ4HUAH03AT5PLJ44E34D2ONYUYN656UIYHA6Z36MM7G36YBZNFBFZJTUGJ0CTUY4ZMR48Y4AWHRU7JRVMOJQUEJFNFPG2UTR9B4J76ROB0JHSZNWR5P4B79K3CHS8O71OZKV', N'TL87K72LS0W3GM7RTVRDJW00K6FOHZCW4XLMX9QWM', 91, CAST(8901.80 AS Decimal(18, 2)), N'3FYUB7ZTRWM0F4R1AD6OLWQMP3JCQJ9F06S6SG44H4S5CF5S0MMYKRV6OB48OM28M7Z9BL9U826H4L9AXRC4WAU9BLHGBWGV1KI5FWGEDSQIKD232UBW9YBCCPXQ3SICMBGJ23U0BYR3KBPXIEDGLJM286TQYPAKADV9XJ0Z0ALA77S1Z08PE1R3P');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (79, N'Mr', N'A2KC5B7FWGQH77NOK', N'7OFXUFUV1NNSTOX5OG22JGVPYGMSHSSERHKG97HSFP2OTZFZAWZJITWRTQYES1E9U81B4GVHY9MTD6VY0NIKT', N'GWTDIY40Z4IB6XL8NESD4TNZYJ1KUK5VQUF376OHKGZ8DTQ', 230, CAST(15046.04 AS Decimal(18, 2)), N'BVA42LN6T6GG0ZDEGAYBU1ERQYHL58MSKJ75PW7ZN1ELLJZ8B0LG4DJ9HID3420LKNWHR8PK2ZOTNT66Z8A5N5O60YN6I4UL0S0XNHH2A0D5PPMOB64VRUXEZQHTKI2Y42SUS9JHR7UMRIGABZVBZZT6ULYW0OISYE1MWSW2MN4KZBNG96ILNQZ49MZ6ANH3P2ODGTDI3TOCU96JYHNT5W');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (80, N'Mr', N'ZSF3W96RQUMWFWC7NTBYH4S', N'WXKSNJ830EBTUKY3UT1HK972DNU0D4ITFLC3RCTC9V88IKBA0WTPJBONQIEZO8PWVHD98UCHZO8O0YJSBKZGATA4WPD8XUO16CD07226KBPU30M', N'0OMC48KN9TFYXJ6FYNKBHI1GPATNTEM5TCK5XTRHASTERQK1', 40, CAST(8115.17 AS Decimal(18, 2)), N'7FWDATPRZ61UWMAZFSZHU1NA0GF7TZNXSYHXKG3PD1P5TE9XOH706FA6SMDTDIX0I31Y5CFZPA4SCHGL6IIBRNRDNB4Y39BV4PNPCARC28BWAITB5RNVZM8UCOBU7HVFY8ONTR8WQ69ICV25HTSBMGWHGSCOZX4KDVX2U6HEIR4SDQIHL5DEOJSIB660EJWT2O5GX0BABESVB44QAU3TKPVT3FQNZGZZUBPOL1KLU22AQX671GQJG28CSBDI9NBVET0ZEG58AHZINL368JLIQFIR3CV9O2C7Q7WWW6SLBH9Y3QP78');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (81, N'Ms', N'DR3QGTRI1P6R875A6DLDSZ0U4Z', N'YMN388L179CIH4K506IOLJL9ITWY3F0W3', N'J9Q8E7IN6MTFWTU795KZ1I5W31OONPZQSEA5VWE51HR6X1DZZ6HK01703U5DJT0GN3NIIOBDREXJRYY1OOPG7EPQ6A11Q0M7HAJUEUGAV4TL4O9', 43, CAST(9975.72 AS Decimal(18, 2)), N'9P1S5ZB8W2KVK85RR692R0786JNCNO1HTN5X1WLNAQ1GX1TCY9I1X6Y1LWTRKJFWT2EIMTESKMS0YQA4QBED5ZKMO4C53U2QB5MVMBP4VQHAEX2UMO0951QUHSTHH9OQJ1PT4EIFL9IEI97R1HIFTTKAESETH8NM2QRC89Q75LNWJBB7K2G0Q8WPGFEC0OXDMVCRIUISRA976OQ3G69FSNVTU1WTUD6HO99NYKPQJN8FYPJROBVUFHLZ0JXGYPXD3SJWF34WGJW4EFU4H44JHC16N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (82, N'Mr', N'TDL2UZYP46GBW23VQQLZF', N'AB6KSXQBTYPJPGRKTWHY6F1ELFBMYR8GFVU8YGDLX9PMJY4G7IM3E5EUARYDL', N'V4PU4J88DXB8N9MQSP1GE4NT8EK3L4LI0W5MBS3Y1BHGI8NLH3TEMSQRGWLQY5N9BT7Q3ZEZM3F3M6AZQZLIA6V86E6F6CZWN85P0XHIOTSICM49LMZZJ5Y4YYKPTZT9', 104, CAST(5869.65 AS Decimal(18, 2)), N'NFM8RTQVB65MCL6ZDWLHKKOSZUKDVRRD94FO98R2EI4OZURJCIY4K6P3QU9W9CZKERD85IQ54J31F0T4311DSMT2ECXEYVT1JJ97HIDURTZ13NNQ15T8BMRRYBTTKB69Q1IWQLMKN6LYMRZQO6DT1KQXRI96PJAGMPB25R0FI8K40S46B24DXD75AL48CGV3W5CXGXLX6YAT0MXZD2UMEXI9H5RKNS31DG8UG7PEH77Z3E5NO5UAM8P');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (83, N'Mr', N'0S3JFOER9LG9X5FN', N'D1P93TMIMCIW0WPEVNBVFF542AGZY6I0ZTWOWAVAUOW9LH4I4WWB2QPYVL6SCMKFTIX701HLR00QIWJL6YU297Y94YSB32X84GF2KXH3EBJ1QYFZ1LMERH5MKN2286HP2SL1G', N'IGE1KZTH3THECVJ9WTKDZDI90R1CROOZJET6P80N5HFBGQL30GW69W45X41TXHQE5HVY1DJOSX7IX7TA5YCASIQNAO8K67POR16ZUN1MX8DBOM8QBQNY4FMMQ8ND5YHL7JQW', 8, CAST(11500.65 AS Decimal(18, 2)), N'N3FB51ADU8F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (84, N'Miss.', N'RAH04P2PAP493I045CSYBK9BDWUUM5YF3FU', N'08GROYOWJ5IT9IFJGMATIWUFV7UTYXDDILKDX0T7YN4XJEWY9JBYRNX4E1VG4UXLS4AOX1MFT3UVRXVGB', N'TFIXPDJ5FYOFH9GJRJCEJ8MZNHZRS44VCPIB51F12HB9ZXNP11G0EHHKTJ97ESCAUS3RR4EP3AB1XDZPU9PQN4HU8XIMR8NA40F7UVXWNQW36FNFJJD42MMPB9JUMSYVN1XWXSVYBT3X8ENS923', 12, CAST(4631.02 AS Decimal(18, 2)), N'D2I5CG57QJ5303WIXTF5R97DSE8GXT4UZMALMPX63H84XBA15RF1TAR3V4CY7P9WEB4ETAV8V91913GH37A5D21OU6QIDZZD7CPM7W8UW76J8H2ROVU0E4IB9FJNKDVWAO2PDU97YG96WHGC3YTH4ZZ3TDCSCKAJC9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (85, N'Mr', N'YNW31U4Y9H63G4R', N'JFMEMVNGZV4D34QJ5E4', N'UI7IDPVKB39US0F5IRIQOES9JPHWMQKKPQ05TFI7XAM8J857ZHAIKCJGQXZO8YYKJP5109B38ATDRKQAK9X4G20C7KFWFUZYC2OT337P5699J5P56O3Z1T4', 140, CAST(5697.12 AS Decimal(18, 2)), N'KFDDUMN1YVCFRZ6JLJDRAPYV0HGUE5PUM7VXPKZVHX08GYKT50PZZIYVGHDC5TNT5ISK39U0JH9DOQF1XNODGQV380G76NQOA72Y50QW6OFH8L6Q2CFH4ACFNPB2TMTWQL2GWWXS6RADVNTQ5U88J0UNBGPN3KUIQNJQ2LFIKC3K49TN82HYOI22L05F79OMXRM843NJFQO6X9I1M1F02VU8KH41FZABNGNCNLJ5EXJYTV5BH4T6TOJ1XDNM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (86, N'Mr', N'MOZ606N7U8', N'18WV5NS2CH6F58AHYDIE0G1QBF0Q47RGC2TBJQ8Z3K4IPP8UT8LSWP7K65KQN1X4PP22FYY84JBGCJ1L65WWMZKNU85D6IB1MZT0M5FVACNCER8N4Y', N'PSTFUFNDAV1PVW7G28Y9SQS2V9PRQ0WIY74AARUQJWZO4ZA9HNXSVUOZ0RKKQWNAYIRNSX6AD8QWR3X', 26, CAST(1394.17 AS Decimal(18, 2)), N'M3FFCJGL6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (87, N'Mrs', N'5RO6NOB6IGPWHGA1VQREID5SEFNOSZO8TRZ7LBIE4X9CXSI', N'H41IP5F86TL2L79TCP0Z1Q1M9B7920H87ZUXLH3V7X91PA154YVX4ZIR3F8DX656BCUMD', N'ZFA334N3J5AI6AZN9OQ', 144, CAST(3111.77 AS Decimal(18, 2)), N'0HAL5CWEPCSJB64HZXMF9YW6SU4IHCOPBQSOJ2EO0ZXA62S8AUJIZR41K3TB8DXDN28KDFXWJYEA1LZP1V7MS6QKMR3F93GN1KN3U7VVWNZ1CU0Y439C5ALGBOYMCIMGHR8HYVVTZCQ56P7SQ4B6T3HRZ6S599IE0JJLLJ087FDSKFALG5V76GME9HIR3QKQTB4M6L6742YEQO6JW6O3DB8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (88, N'Dr.', N'P4SG2TJRLWS81', N'7VM5S3HZXY91444K47H3U69PX0R2QCFFSSQ0BY7EA3H94V211R8N59H1MW7RBE9KIU9BD485Z2TROZL1YQ1Y4SAIAODEQG2VTXQ9', N'8MHJHMFN3S7WTPLBLJ7UVN4MMN3383N2DBMDXQMZ0QXEOHOO1PGWQLHU', 30, CAST(7018.32 AS Decimal(18, 2)), N'X4C3195HVMZ9BNFUYO23I8NKAYUX1GDI3LP1926UXGJ4PX89QT5P840PHRT2E8GE9G6PXDLWI852OJUDQL67BN9YK0KH93GPZ4U8RIBD8870ZY0XWFBS293L774XT3MERG2KOML8ATY2G8ZM0NLTRNNQ091JDEJ5MS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (89, N'Mr', N'EJRG3PG3GK8D9K4TVM', N'QNXI2N2GQDMB6SKDBGQKQ0PQUEJ0XXR9BF833F1572JBR3KNHIHG0PVPX', N'TJBE054II27D', 49, CAST(1322.30 AS Decimal(18, 2)), N'IWF8AT3I9A14Z8IX5ISM4SBKFK2VW9TFOZGQKFAZO5EFZ52BUHDMU54QKVTPR8MZGLGZRSCQ7SYYEWL9IQ0EV7LIUQ5PMK8GIEZDP2J24NE176BO9J617749ZY51MM4NKHGZW7KG6YA8SKAOEHF2D68BAPDQWIFHIRHPPBR1ZQU9XVHFNHM4719D94P7UTJOISP03KY3QE3NCYDE7X2FVAAGI3GLMJ7566R56HC3IJETYL1ARB0WQ4S7H8HZ3DG66YH678');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (90, N'Ms.', N'WZN6', N'ON32JSMDZQKH9VELCOGEZQUWIEGA9MKI5WQE15IROD3U209L1EC68J7XT7K4CC4C62BD40J76PPLMZTI5U8UAD9MOTKTLDEC9RN0OVG0U40ITMATD1ZH391T', N'XR5VNDP8YMEK1XMGK1V', 192, CAST(16910.23 AS Decimal(18, 2)), N'PLZXCWHIW15UBJAE2DJOXZCZ527M04V2I3ABR6FBZQLXYJ5NWJESOKAQ8ZSAPVIR62B78ZNVX8O7EE1LWJQHQ2EYSK2RE5M48TRV7XEWVJUGV3BTY6D55113ODFOWWGRMKZLN6DZ4TL67Y2P89T7SGZ6RN6UIQZY22TB4Q5RSD1BFUVPAPFN28Z5LST0ZIGETN444RLI31EEFNRXRHJSACVT3OQBW5RAXMHSQRKJ4XJ1TKQX0W8IYO3HRB1G09LX94HS6Z70W0NDSUZJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (91, N'Mr', N'6Z88MOI9DHJQKT9MN77PJYMR16B4OQCJA3G8G', N'PPBGPMSBDCVCTT9D7Z6CRS2IRGJEW9ZP', N'TSXDLZLSV6EHB6SORVX45OVWWUY7I1X1B914UR9NSWDR8X9V5XPO4RY5X0GQ0DAT9D514NUZLAB8A3OZL32KC8XKBW7TBIMFMKIUR7QI2P2UGPUTCG5XAPG0GLP8F1O2NWMQKT7D', 123, CAST(8757.27 AS Decimal(18, 2)), N'SB0X9B9JZ0EP4IVBMRP2YQ0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (92, N'Mr', N'1Y0S1E9EX3N', N'8Z65K4H87G9FHK8Q3V9VG0', N'KIN524M1DHUDP4W3IE6HI21006J249I8SKQ7TUDH361JUPXSPN2E1VUHGM5WKJX4ZLK4DP9N1PEB1I5A8RDH637WP9R6OGWK', 21, CAST(11631.93 AS Decimal(18, 2)), N'8LY0QPWBHI8YK00T886YSARHS163AGZ1ABPNC8TA438LAXQLRVUPJ1WXTH7OIS11J6N9BCHZFWUP266VBKCFL9I9FRUU04RB2624AHAEEV9N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (93, N'Ms.', N'0Y0GF9LUNCY8TSD15KC15V69PRX8IM88H', N'MTP93EE3C5HKT2', N'XK94SE0DFDBHJGYHVNS6FYVDOF4Y2YKTT13XW5FDC3RQWF6TTPTT3ETZPWGDA2AGSINHC0LP7FTC64H88A5D4RPF848ZP22ASAYDSPGS43LNKH', 162, CAST(5052.95 AS Decimal(18, 2)), N'7VNACDYGLF9OETJIMYA4IMV42LT9X1Q0U17W6KORTVGRSGVNRWRWZJOKZJ8RJPIKO9UCMMB2AIBN63BMP6I09U0ADMXNBW83CV2IMJ14LPMG80EV7M2D7HBU8JYZPOQD97AB0S054DFJ8K2D81FPUVWVJ8A2L2FXZ861P3UEMW8T1RMOHLQO80IEAFRSIXK2YIKZD1N5603YM3TSMLL0BQOYPSQ9B2WOC6UJ7MAGXKH7WKR7MY5WCKQ7TL9LADT44FLG89LZA42R9H150INCWZCRG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (94, N'Mr', N'QDIUO7NM4P0RZ9079DQL65SQQOBCB14QQH', N'NUO4JBS29VANTDPUE73KBVVETSDW9ZZFNU8E7BGLTQFETQLQNB3DPIXRZABRYWSAVUZY5AN3QIQLGGK37M9YWMP5XGFW0PMXX4IYQMKCOZM7SCBJP', N'KE74ZWXB0T798RL05DJJV63GJTC8151', 200, CAST(4059.15 AS Decimal(18, 2)), N'PLDP5JQD3HYAZCD6M7HYYCJ4KRQG752U0LJZMLZJ0VEJ6PJAZQD4AHOD184DSA6YF4ADSDJ08XY2Y0YU7FHGRYJIW6YDGLQQPF41E6HL7CWCIMF1AA5DSP6GKSHMF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (95, N'Mr', N'0IBW4DJQH9XRO8BDUHV4LKR3ZVAA3K90I7ZPXHM8NEBHSWN4', N'JBMUD95U0PVQ20VSNBYMCL2XAWZIDL4W6S6AB3R8TWMVGXXLBZO0K3VY9PJG9NGFKZJAUKHKJPSFZ7GCZE6DW4B3W81LJAZ6F6AHDMRQI4GUAFZ296HVG', N'QBOLHX2DVZXKKF81J3FA1', 5, CAST(11853.81 AS Decimal(18, 2)), N'KN68DIVWF1XV9F27ZAQX26FDXZ9OGMPV60S85A8W5DU4FWGQEDS6VI3D7TAD87GTC2P8MT1P1TRPBAY0II92UIZOXE1CZVOYX1RC784LC252RE2WU9UPXDYT31A8SOQ65SRAJLTAEOQRDXWJC4IP0Y0J2X96XVSOCYWYMRD8GKB9N7G64RWO6056R77LCNCJV1FE0YWKQ99FNRWVH315Z4IBTP7EJSWS7RDLS256UBXWRPJ0BC49L7KRJ3LBQH0YDG8VDA3FXVAN6LK36737OM707M1OGUFDBZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (96, N'Miss', N'O99VCGGQ7W838NWZW9G8LFDVNG78AA375AEB055QJZQKD4FQFI', N'IFDLJV09QM0SWZZDMFUSNGTG9ZCCT3PCOUSX857N374NF65973818PS7MXCJJOFMWN31614G77PGC502T24PUO3Y2LBBTO4FRHQR3436YST00BUGW9PGJPR8K4ZKPTNJ39PUF8', N'WEAQL6KP', 141, CAST(10509.25 AS Decimal(18, 2)), N'AHNM09OBQWWKYJI4JET9Q97OR9EY2GXC629LIK3YZAG4B134YPVYHPS1AZURUQ9AYKDWAWMYAVAFS3CP6AZDKYUH97BJQC39165QO6U23XNMFD96M5KKQWQZPWN2L28YR0DLXM1ZFX9NA71VY4WLRJJ5G60RJRG0OP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (97, N'Mrs.', N'N7WE8', N'PZ', N'VSCIW20I8A5OW8JW3LAOXPQTSFAARCWS5O2S7XCYJK70V905QTHKA0C51JQHSPRWEDI76RO68B5DIQXIE5JXVBI5CWQO7U6TTBLIRSYZ5AC', 76, CAST(7697.55 AS Decimal(18, 2)), N'EZN903L4SM2OIVR4G6N77H84QL9FOH8YLCMWAUWH5FRIDH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (98, N'Miss', N'E7V97G', N'Q2U3YQQV', N'VZNAM7', 64, CAST(10620.34 AS Decimal(18, 2)), N'WSM0U1HNXRIIFU5GBE4258UULA61SQPR92DN1GDX4PP5RCHN0ZF49ECOXSEKVGU61R9CGIEU07YGJP29TI1TALHUPPP92T2NUI30246HKL32GW48Q4RCE1VG9FMRS5R74AM0L17OCJ8OHFDTKHJX2P8TNMQNHEOFUVX594MO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (99, N'Mr', N'T0XX', N'JYNV1QI7Y4IG54AWQMZ1NA0HLZPDG69TUF3KGEN4X11KGHLXK673QTQ8Y69214QRVOMQ0PGCZV3M9F04DRTAZ520OV', N'N6U12UDVA10ZD5BK64ERM7KSKZK9D9F1ZSINYAJODXOX4AYTJEG67FGGM1G3A3I0LY0LMOLWLQDPIMOA1QQYT9UJC20WUGDAENC5AD6UTJKH2RXZD52JDK7B4G9JNO25C3AVAI0OKV49', 98, CAST(10539.06 AS Decimal(18, 2)), N'2ZUS6YT1T7BMT5F1TDYBJ6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (100, N'Dr.', N'LYR3QOMOSHI1GTREF09V5FMY9GCITRC7HHUJ4J', N'94L3SA9PRUVWUQV4VQ4ZI64O9AGSPLL15367ERABZQ89IUZJ317AJW33Z', N'CHL51JOEUXUF00T3M65HF5YG1PU5EZHFYNSYNEM5EQI6FF', 188, CAST(16282.18 AS Decimal(18, 2)), N'VTUMI8JFVU0ZQE0XLO7D');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (101, N'Dr.', N'7SK2WOUSDOID0O125CSU9C3V15B', N'TITHZ69TRQJNQ3', N'I6KXOZS96I43COI0VFFHD7VG8KZ2PNS0MFCZT1SF5DLGJBAGVQNQ0XWAB3P4ZPKJP3HWBJ6TMZCZMEXW9I7Y010OI1NQBOFGT1QFUD5BKT41L', 84, CAST(16849.96 AS Decimal(18, 2)), N'0PI3GRNDDW2ZZCCASASGRT6ONSWAEYIQI0UW052N7HM3NE13CMSEEW17JTFNVDZFE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (102, N'Ms.', N'ZZ89VJ13LDP9ENYUBECJGEO', N'SZRXU6FBWOOEAI9037HYSIIR20O390GB3VRWB55QE7WTARYBHQFG85MAH0VUHC2W8DAFQCOY2RJLLPHA2CLIKZ2', N'OW6SUHILJN3', 76, CAST(19586.79 AS Decimal(18, 2)), N'HZIFAN74896319RSYR53CLYNC7PESUI7PCX2LWC579NS0GR6W2E79AZV0U22XSCERZDPBO61F0W2X5NWFJIQFBXEC11QT97EX91022U7VDR8EXXV76MEAMYF1ZCANF75TH5O4MTDPAU2JP0F36INNT4AALY3QKKF5LFWS9QLC9OZRWVCYX6GXKI0CUDJNPM4PFWXA3NTGXAE45JEPM5TE3IL3EJYW7XNMK9BZX2UAC0Z9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (103, N'Mr', N'CP7VOO1QDATEG8HGMYHSNIFLD8KMTS3KA1X6C6EWB', N'8GFB9B82', N'E9WGIYJW5KOH2VDVE6XZ3LDRJITYX8I', 144, CAST(8917.53 AS Decimal(18, 2)), N'V7AYT1KTQLXAUVJPX80NRKV7ERJAI13ICZJCNXEW2STNEP37ALESZMBBC2K1H9AOIEYUB710U4KZQ7TPOCZXNBJQN7ZKCCESH450Q9V3JEXV1CK59VD49D17U7647HNHPRHL1SYEHWE8DNPBNUAHZ9I43X5I2RV2RF59VY3HWYNDYST6IVHD65HF9CI4NFBQ1BHXIFFORTL1M56B3YZ7AHWLYP0IGZTHMXBMAWO3FSMCKGT3670OF4GJFWZSFW7RZ4EPUJ079WRHVJ0HWXC9Z41HGR7EWWOILUCG149N6SEJCZOWVHWHKXSU2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (104, N'Mr', N'W', N'0LWGIK41HEHL1OSJLR5QJB8BC79XDORIHFL3KTJRHG2LKC6SNSOJ3CLOCL4BB7OTMY4L3OYR7D829NQ00H9KZ7F5TXRZP8GAS9YM8KPZTXBP3JFOU3BTX3TFIYS6WZ2Z', N'C1ZVF4A6IPR48PPY3M7CQ4PSW4WZ4KYX1L51WIF9VRGDT9JTSVVA05C8C7ZA7B1XRU2MKO2L7XGYNBYML268PNWW9XOOI52KPJMY7W94S933PDK18CO44S83Y6CNZD21VW83OZFPT2GF', 106, CAST(17427.22 AS Decimal(18, 2)), N'82BMBD89V16KGROP36QI5H3BJE06Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (105, N'Mrs.', N'UKE2WWWHXWJT9LHF4EXL783EAB3GJKMBRTUHQXVLNEI', N'YAZP4SFSAR2VQ2', N'T7VCNG6GXFWAI01KM4F617S5GC8WZB2CSK5YGACXWLXGBT6ZE46X18HLEQVB89GMCKIY', 7, CAST(7854.90 AS Decimal(18, 2)), N'1HD4W6BKH1B33NPA14TVUM4KRQY02WC1B8ZP6BVHDIPO62EGM8CVC2SFCTD58BHLO9RVNZ4Q9CHBXGDPCIEUJHO8FJCDYP9213ZWAJSM4MM0KHIWFNTPXM17L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (106, N'Mr', N'XQPZSW1BXLG0RLSGYDFU6YUNLNO0PLLPV6DCRKSKNBE5D', N'I24MWNCOFJ39SJ3UUCT48FZPBW1NCRJSWHOTUG29MMK51JM96W7JWX122FA0LOBN0ACAU90EAJIMUUOR9SGGJZVZGLQF51NXBW5Q6BEXWS9', N'23BSHAG9CTN68IU45BJ2K', 142, CAST(18901.21 AS Decimal(18, 2)), N'F4NQRJ3FATGHETPRQXUONY1GYAWJ5E2SBR3OZDU3W56PFX9Z05W4CWVH36SHMKAVQO5NP1RC2RSIRB101WIZIYFEVLLTLDGCUBYQSLAZDJ1K4DQR5RGP1BDS8QS3FYRPBGDA7FMJLZWUAIVTNTWRAJX5I1T6JFS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (107, N'Mr', N'P44FM9YN', N'FF88QJQT7V30FDU9IK98VKBXOYLXDJJRQIJ1CIOMAUPGS5BTH4EBI1HV3BKRXTFOBC9WTSX0WNX1UU4JNSF9488P1OX1YXOH', N'QF0OM4B3RB74C1U5JX1B2X75ZRLH78YWAHDWSSOBY81CY36TA0SM08IS7UPUITVJ', 20, CAST(2483.09 AS Decimal(18, 2)), N'9OOAEVJ02IPEVDGA8MBXSK55I7R6LGZ67KLLTLFSAVORTJ94LJXX4UIPIJR63DFMIJ6ASUGN6INXVEBYXNK2I22C2V39T8PWG289CYCR2AQL7LT47T9GTC3GHU8WR7TXTRGT52LYASZ8BG5G2Y10Z823YSSIQF0VGTRG40Y57A50CV40OSUS5TYKOCUD928US4RIOPB10VSO32R3NSTXL7QNU7RS5LW42A783LBZGSS9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (108, N'Mr', N'ZW1D', N'15FVEZP7EFV3F096045D6J24KU5VV2YZFNTPON8TQ2QSCLMOOVXSJ48H2BAKTUBBGWNR6JHDVBM3S9SY8H6056FBFB', N'AUUOXCQ9PCTWU6VLS77GBW2ZKOX3US5CHZO9B5CN1CAVOWCNU9QMO21ERV48FMFX7HEVIL9NVKEZL6ANC99K2IOFY9IG137', 15, CAST(7175.34 AS Decimal(18, 2)), N'9HLLRPH9A9KD4NHXJWEZNMSUI02GUHTFHMLP66EWFVR1NUYYT1XWD9CMOR3QN0ETG4WI2RRCIHKSVR7N13NTKX279Z1F3N9EHYLIXGV1AKDVPKQXJFPJDK9J2P83QC9U85AX5OPL8LJZJ6IO83VNYQ1WO2F87SBYBJNJ9TRVP4AR19ZW7KUMHLWI4E838HDF9LN0IYEECZXUF9UE2J1NYOHPM5FVKOM8QVHGLZD85FAHN22UJT1PGQHL4YDDJIUODP3KRES26SHIDZ2K2KCRMXS0DWCNMZPMLM4YYI250YIN8Y74VSAY621FX36V14G63UWRV3MKH7QOE4REO8STPQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (109, N'Mr', N'80MB0R4K7FOELV7VJPARXJV9YBQ89EGP6NBMP25MP4XO', N'DDOZWRECGYUH5DKW7H4OSJCCCNA6AGCCVV4Z7CPCDXB0DZ1NK98', N'XDN7IH5803R3O2SLKGW5DUUOSYX83SLRCZ18I24U40KZRLQWGXWK6213JYFJKW57HZQO0K2HC21C9UW780S6W1LA', 20, CAST(13582.31 AS Decimal(18, 2)), N'IKO0UC73VICKE1F8R6QGYCD0TCR6TCMHCDE663R8A3U52JDD8Z0NY9H57O7IK19IWV70N92OEI6UI7Y9YEXUCYI3W8YIV8N8UB96CDPZXB8G2NN0PYJ64F6XD44FAJT5VY06YRXLOXW1Q109KYSWPG4E5BT79AODH2L4MH2Y1XH6J47B3UUCRWGEUM1M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (110, N'Mr', N'8O3F1F7QL6O5', N'BMVU1BM9G820MHMA9KPUSRBU7B', N'XPJNKA8', 189, CAST(2895.87 AS Decimal(18, 2)), N'PCE8IKOGVM3VTVRYXU04I');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (111, N'Miss.', N'DO0VBSZY7YJK6HKO1TM6IPMNS8Z9ZKGN', N'DMNL', N'CISU2VVUE840OTO2', 239, CAST(11580.31 AS Decimal(18, 2)), N'EFCMKL6AZFG0BL3X0KJU88QGX1OGWR0HFLYYWVZ29LNNFTJ6VZUGLNV6OVPJWQD7FYLQM414KGLMK313HILXXKVRPS916G5I7F8G7TJQYPV429LLTL2E5G9U3T1UVZY4B2E5ULWNZVY8OQPG6N7KDRDR5EDESOUYRQT0UGR8PEFAH15C4LN7SEQKONZG7HVA00HXXPLQWZUYC29480971N6C08B7GA07J4AHK7EFZWASJS8MDV868N8DT4XPDEAMYMF7SSJ0MT74CDT8ZOTL2TZVVXOGAO1KMOUWC1TLB7KEF40FAPPOLPJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (112, N'Mr', N'COGLTT4PR0QJVVXN2KD2YUN1C', N'7I18Z9YWQGV5VAEVDRD0KD1JB0MPC9MTM1S3GDAZLS4CV5ZXX3ZV9LGUHHWZM9JGT2JTHAFZGEFR8PN61PS9ARK1KYMYHBDB9OITL5FMOZEV5PMSUQXXH962II9JOGI514HK6UKVA5LACOVVCU', N'BJ4YBFEFQ2VIURRTGWC4C64WBHTG9940HF8Q4X13EEBT0CKGD78XBYU5E7NTLX6GYU0EJ0PJV9PYUBVYXD3217OJL3CW97HG8UU5B5XCIO128WB2BOW8U3', 222, CAST(19146.68 AS Decimal(18, 2)), N'NJBV43QXSNIOJWVYV89U9KFRW85KZCZX5P9TPYG7HMMSMCWEURTCFOV23KYVY5YFNKITN18WR1CMYN5KCQP8IMHGU6P50L9CO651T3RSIXLEB84GEEJ7FPW032YGB2W6S0YRI4Q8ZXPL134L29RL11WYA4XR4BGF1FLAACXANA8IZAZ0XCD2BA4Q4ZHE6Z4OGAKMHTBQBGYRTDYZ5XTRXE3RAV6AVJ4O5K1PQCI31NQVBCXQ1H885DQ26SBMN0USBAL9B98SFPQAO8FXYF9DAVISTZJY0WG0SYJ1ROER9GTGMFDYD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (113, N'Mr', N'2TQZNHW2US328ZHHQPW3XC2MW02KJH1E9QQBZSD8NS14J0', N'RDGT0HGB3WVY7H9U172LZ52MCOWPTME7TBQSLAH2PJHYE6DS3UUNA85LATHBLRIGIO5WQG9RPZWGN376A3LYSQWL64HRS5GY11GQ1H1ML2XACOY7LB0H5JNRRJPMZHYKJYF', N'R5GTFOS9NR9PZHQMRGQKC5MBOS9KLB8M4E3ZVCHOPFDAZ6BLL14S3J3MJ54NE8NCJMLKDRRFZ2UWRBCIHNZJ', 159, CAST(4059.54 AS Decimal(18, 2)), N'O7RHHFRSFCPARI9PIPOE691H4U225EMKLM899AH49Y921ZOB7XWNAZ7E59DMDPN0Q5P59ZG78K470YF56RV8HYALFU3ZXUQKB8CW9J17GPFPUZD7T8FMUEJRU3QFVHAETJWSMIVNPNSSJKRFGW5PE4QWPK26TLBYE1WB2LKADSW6MQ89CAYZBKZPT031U3CTDIOFCUBUCM7JAYCSUIMC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (114, N'Dr.', N'ELH4Y586QR33MFBJCRPSI96HYCNG4BX3WO', N'NH4T2ZCPSM9H6A5H4ZSHDOYHRFN44DRD9BJ467F67XZ5A7FPBHFK5Y8', N'GJLBGFP8T9GR1RCLQ7U9PS0O7U8TM6R94623Z9WB265TE4QJZWQF49HNIW4M6WLNI7NUO8LGAI7IN6A24PTPFB4UOFL35A45KHB6GVUQAA5M2Z0BL1HH2W762T', 174, CAST(12243.83 AS Decimal(18, 2)), N'T17H2IJUOYTUSCQKWX3NH8DH9P4PNTBGZ6JGHXACS0NNEPHLL7YLJO6LOP8CDT6VNCUMTA3YNRVGKP3J8J3FVQXBZYRSPXYYTS01VUSB4ZXRTP0ZLP4UQRZWEIMU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (115, N'Mr', N'Z1D390J0KVOQTB8O', N'IN2M', N'9NIBZE1X5V3L9U2E56IRPE9H3TM3OA44NOL3SZ5701UGHG8NZH20J1GUE076RY8VQZYK9ZM61ARNKSZNLZ3674KL7QOSRYG2SYQIINE0VWZ9ATAL0JLRU1NLECCI', 239, CAST(9761.82 AS Decimal(18, 2)), N'B9PSWNSP1NDRSBVS6HAXS60S482S3NC7XSTQ7ZW17AJ1Q2XF4480CWQ49XNOL0LEB5TZI5K6K8PHMY21AMOZEBV02OHAB8G7O5PK9YXZJ1G378HAUMDYCM0ZATXTO9VCRHTH9HSBPOFCVSTT66FPUIV25QAG13B963BPF01D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (116, N'Mr', N'T7T4EZ6MHS1ET07XQCHZOGRY8ML9LU4', N'8LFVV8VQ0AXJL9GPT6J0XSMY78B2LMJ5SUZBJAFZJZB7H0JOS9PGIMEFZHNNXS5ERSQRA45IRKGXHFG6OM9BW2M6GJC2MR2RUWFP', N'TE2TPUL2H4XL3BB5BAEF2R7CP7RB435BVO1HWFLYOJJFO6RQBG31X3826Q4H3AXDYLQE9U9WPGRI7SOIG0ZO04DSGZB6A3UEM6G2GCHH', 57, CAST(8551.13 AS Decimal(18, 2)), N'29N6N3IZ3MHU6H9MQCI6CALD56RG4E652VS98VHMSGXGTFZM22PNI6HRN90GC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (117, N'Dr', N'NJ9PV', N'SEO36PY5GYK0HYAJTIP5JBQR3W0IP3KZRWV8L7PDO0ZLS24SR70DQJQHOX0AOGGDDK8L32XMSBHJB4Y0R7QH27886EKO6FO8KL87TJPP9ELF', N'7CHCPVD1L13B8DU7XYAJ2LLLCW1CL24JHHSSWGQ4X4O2R3ETLUID6Y4LQWZTT1FJWKTQK2BH76LYXIT8I8QQKQCJD610GXAVP567AN8JJ060C5O72QALAOZ67', 249, CAST(6689.52 AS Decimal(18, 2)), N'VPGBRAO0DUUWEVC4JQ64E1PJNVE1LYV1AQL80INPY1OUSMSLFJQAA7MT0WOWWNEFZTLNA4412H6CCUQ13SM28KR23R73URSBM9UZ04BAFO7S0AH56NS40C6E2IJIW06BPUP2ZR0ZGBNJCY1TA2X7YOAA3FWHKSEEHW36KE6FMTNPPM24GQ8U2ZD1KFZJUJFOX82GVV9WWHK40LKGDS0TKJBHI2L4EMK2EZRHKL8LGCYLF80YVJ61JL4DWKXS95I9XHQ1T3VSJFC8LQ2A1N8UFJJTVEL0NGBBTONXHZ5SNEH48WS5HNRMWNUDYX6FIV4331EW25S2IG711FKZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (118, N'Mr', N'K27HR8IMQUHT3ZQPPDFVWSD', N'65JYZIHPZB6C0EOI9FCN8ZPWR77H17NLT6Z80P6X6JKA1UT4070Y8RT7FM6SAZOSNKJTFFHJ9FGPEEUWD2GT7OD1DRSEJDM6USNHB0PLQGPSA3T0RAF7JUKY7HGNN30VTAVLRDKDDV3RZK', N'CD0B09VQ9RCMYUZ67JKB67ITYPMOL05ZZZAVJ80W4MWXVFRFM3HGMV44V6CAM748LCMZK3NZJN7JBLYIY71HJPD3V50CVP9XHOBISSVJGIX', 186, CAST(16627.99 AS Decimal(18, 2)), N'FJ0OOF6UAZKTPAS9E07HV2CVP4FGSCIC6T2C3EFL72S578S5ERNFDHRC65ZJZQ2XG7MW7G5ZKL9SA6NGCA10P2ZP2P5YEVLH0UP0MVXYLNUR7Y20IJ7PO18D8WUIA7KPZSSFHM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (119, N'Dr.', N'0NN5Q', N'9YSM9YENZ7P9UJ1YNFUZ0879EP1UNRTZMQ7PU', N'OKTA8U', 232, CAST(11539.80 AS Decimal(18, 2)), N'GC2E187I3N4GVNWSYLBRP1FNE35SE6NJVPRDLN751EQV6RP13ZTT5U4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (120, N'Mr', N'RI26RFS7OJFMVRSSR55YUV9ZNROAG4LDVG3Z', N'RWEMVE23QTBXGB4LQ0RI8JXKZ8EQN3CC36NYKDDT7AY7JQAHU1Z6YC87ZTMMZBGMHYUAN60CNXBYKP19Y', N'F5NPWYI3E3B3TE92M9FP5BI01SFFBBQ41CTSUZFJ9OGG5E3KFI70T464MMN3J3S3C62HKH8NUVFHU2VMPVZT4PBX5P57BB06W', 28, CAST(4600.63 AS Decimal(18, 2)), N'WFZY2F3XZLK6WI7BE5QAAKHND4OFCTD0KBH6N93LBTVL6I4KSIFZ3U5BYCKXQOK57JMK10N425ZGPWGVZ4MUEDXQ658AP5VN9PEMWJIRUAXYUOM2VPYM1PRTMWEWSDEW9C7ZHUYFMVZ3GYVII6E079LJYKZ05LZHV1OHGNK1QI06QNDO0WDMYEP0QO0WUX90VI7E9E1V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (121, N'Mr', N'W7BWHOWFAXM38', N'VL45EQYGZRQQTV', N'3YCLZYAJ5XOP9JQ0EO4ZYNV4BVB0BJV9LHZXA3V1JKKD8GGMGAXB1WFF37A4N98M2E4SKTQAS2GE3HWVFPK0LJ7O2JU2T', 250, CAST(18752.18 AS Decimal(18, 2)), N'C9O9FTB7B097CJHCNQSNN7S8ZA7FYEMUI0L40RAVOPIX0SJZQ2MN98Y5GF95LV9XEEPBXCBWFWYYPV87Q8PVSYLA2GNLI5ASFLJM271DRP7C90FL71ED6D4FSF9HOPDAM5I4CL4J7B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (122, N'Dr.', N'HZSFV', N'CQKV0TO0NJ019MASDO3GUIBK3B7', N'E9CXBTBN1MKMIZG1CLBEPXP70I6GQ1ZNH1O', 75, CAST(10086.42 AS Decimal(18, 2)), N'2R80102EGQXM1G4TNXJO2CWQ3HB9LXV5U92NKE7GMBXKPJGN8SGLNN1QUIXJOSSJVRRREG99Q22QEC1K1N1TH9I78BS2HNSTIEOXRO9RI6VKKABHGCI0RZ1L8KJ2N7S2A880N3SCE9AAEYMX0AL45R2IC3P7574BDT9C2AUCK5MHPR69XM1CLOWJ5POJEL765YWLP9UPG8KZ4LTKXF9I5RPPWP7CMAYYYFCRVLKNRCVD4XFKW3MYBO1D87OZ2H369L1P81PCVMRTWCLZANGIN0N9EYINWKL98P3JVPBUEA2PX7HWMPPF1KI9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (123, N'Mr', N'2JZQHQKX2QFNT1UYT1C7DJDU17784D307QNC7KF', N'9LW4F48ZHEX27KGMEPOTOYD2PFYTE0ROMHR1MVL5DABYQ0991P5ENEIA7TE06FLGM8GPTE0I3JFENEBP5OROUD17ZGTSHKYYPUCIKJGMONA4Y3NTHPUHNWM97', N'1562KRNXGZ087069RF2GK4XSNVX0NW5HAAZ7E8UXARR1IX9PUQW1Y7LX8EFOUNAJTIYX1ZUIK56TDVAPM85WZ3J2O2Y0T53MG77ZZBNVWDGT1SJC3P2LIDKPZV8', 80, CAST(3974.76 AS Decimal(18, 2)), N'RAAJ1GA0HK6813KBL4D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (124, N'Mr', N'3ZDJHZA71J5Q', N'QCL70IKS2T4M84062X9VT0BRQHBT82BBT41HMRJHFUQOK89IWF79ZVIKV9S35VK0ITT42IJBDRFZ9N7I8SXTV1BYLGLDZGCK9Q5QE4FDVWW8FIB8', N'0', 71, CAST(8236.42 AS Decimal(18, 2)), N'XC6GM17V57O6UL4F0BC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (125, N'Mr', N'OUJ65PAICTOMEG2DHQ9LL3E5TD2W06K7DXIW462V58R6PX', N'AUCXR4HHVIMW6CWEVQJHG33DJXZ53I25DBOL0MILO8JMTHPKZUJSRQL6RZET5BECFGJUNBD87XT7JHJ18F69YAEMQIU18OGCU76DYUWNGBKUXEMAFCKQ55D52W44HC0JHHCCA53DIITNPJP', N'OF1JC6OAPAKA0LMP1VIMW32H4', 200, CAST(11199.89 AS Decimal(18, 2)), N'ROFNANKL43FG4B0E4TWZ8FV9WZEGZ5AARJ68XI6ZHLR1S82JKPA7ECLCT5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (126, N'Dr', N'I8TJTW4HLGDDSMDI58G9GX68BNEGCC8GVAJN6NRB8GXFRT', N'VJLV3Q6OU0B1QR63B1DF1AZ9977NCPGI7S9XR4FQANIAU1MQBPCO69ALJBMWIIC4KSUYI9B6MM5DRPF8KHCMDSCYHODFII8RBEP17', N'NH043OU2O1SIGDOT0S17DY39UCHEXLDJE9I6AL6WFYXLXIF4X339GWPPEQAQ6F53O836VIJEL4SE1HCBXCHTH33IJTRJAGPZTTXPF89EJPOB4AOWEZTUYBMK4KN1RZ45FSL7KMVO22', 115, CAST(15760.03 AS Decimal(18, 2)), N'B83MYT5OK5RHLNXHNNTHNXVW9V3VFYTFRRVQEZS8MJHET8OKGUXP0N3DD6C3P98LBBPUS72OUKV4GG216JFK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (127, N'Mrs', N'8RQLX8NML2L85IO498XHI2QBIG500ZQHID5O', N'82E61J4WTUWDC16QRSGVGUVWN3DD2DZD1V9A87QSUKVJJ467', N'SERE85U5BNV1I6CKUL7NKKJWBPGCR34RW1U5C6EWWUSHJQ317213VEP7VV2JOHD8I35HB67N7BRQS1DKME4P11WHBN9H4V7EGKZFLLQ1UDWJN', 179, CAST(17853.20 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (128, N'Mr', N'QA87NYLLFMSKBO7UBS', N'KMXKB7E6IIY5QUFUICGSWIK2O0WYBCJW6RHQ2SPOU3QORM3PFP1RQFO22VWAB', N'FU', 34, CAST(5149.49 AS Decimal(18, 2)), N'3F3OHC8MPICAV2HIUR9S9UFSZXX3BW6UOK7WL5AVU251ITKELICR6SR9ZBOKF4ASCHMBUKWOGEX6OE96DIISKFOWSYXAHQFQRDP069J1MNASULLK1I6WLH7WTPIWML7QY6EBP8Z3ZH6X4W17DC8YJI5A5S7HQNE0GKTO69VSJ2X4BARXNAJ9D96F145X1IDC35GK2D13HFEGL0ZU0ATF34N6DDM13YR0PK05T7UA9FSXUPU05BWROX8YHA7ORZZIOER0ZT1TFJ6OCQCNJLWS10BRC2NJZ5I9F98GYT0BA3B5RKMRXK4537HO2ZOX6HTA0W82HWOQKLIYO60RFW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (129, N'Mr', N'1E3G2NLMB3QRC0HIXO9U44P3UDAJN6L0M7MU5K1B9', N'V5Y2ZYDORPNRXTSVA1X6JLBR5R3FN6WEDF7KQON4CRXB4YHUA7KUD5W9U7W7VX0LT8EHM75MESTROZM7985GM11', N'HXADO6H7N5OWPIB3C972XZ0O3VO4CUC8FZNXX1SEH8YG244UKFAP7SKIWL9TICUTTFHQVE6BHS', 145, CAST(10186.94 AS Decimal(18, 2)), N'F0D68SKEZ435S915VCK90VEKHPI0VZWH9VE9NQZ9XIPLHGPOM05FVMLKMSOJ9KI08LVXVRI5CABI6S31ZUDUUHMN9UNU1G0DZODWLSSVIZ2LA2DTPNJE7N6QY7N14N3WAYIHF6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (130, N'Mr', N'OUFKT5A51X0WO0LP6XBSFJ6CD', N'JXPIRF9EQCIWK0822XGKB4LVKPYNSKYR76XOIMUYJE0BGQM9Z3DOKGWFCUX1HMM6EROD2KKF3I1X39EU2PNP696QAIBNPSGXRTXP196FIXL2EYB2G3ZSY', N'P1JMZQTKWJM0ME51BRZW4D4MMMEZ69Z8E7VGCZA2OSX97FUBPCUJIWGCWXZCCTE', 26, CAST(15826.31 AS Decimal(18, 2)), N'72HCUE1C7GU4EWL6CIMXD4QQUW6ACJWDJ6CCPBCCXVGLAJPZOS6ZT832BRHX8Q0NJGL7K9H06A0HO5FB77MKCXKA390XTE36VS1UXHEFB5SI8LE6B6Q14GAMVB4B8J6R6UMW3LDQS687411IVUMNO21FHFYMD37RZ1CEZH2PS09Y73HT9LFEXJ33S6EONRC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (131, N'Miss', N'W3JPSTV7E0XWU49I4NZPIM8FD4ZH25O36J96', N'Z4KX3J8WQA14', N'JDLFJOOBGW7BFUF6R29TEFQIQJKFZYQVEAPTUFS1OJ3LO4W1HTK9', 53, CAST(1272.75 AS Decimal(18, 2)), N'ZG83PNJDRWVOT38DX4CROSUFY8LS2E20NKZQVE4M21M0NFAOY1QIEL06MS5G1RACTU094HIJZQOM6TSIYWT1OKM1KT438OKBQA7TE1KHJ6IOXEZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (132, N'Mr', N'C571HLLSA27JXEIDNR9V', N'9BOSTI869O4CB787LTOYUUT545M6M6B09T1RRA59PQQGFLSBZP4GD6AFIJONV2K2C42H6HFANE843DQIDA6X2UM3IL88MIDN6O3AIA5I9TSYX5C5S5AKVN0IHYZL97O', N'K94N3O048BI6CX44MCCA84VC4TMMIY6DGBT1L5QRRXG7KFC7SWUG8ZBGDRJ92DLA54P', 134, CAST(19145.35 AS Decimal(18, 2)), N'ZMH4X9N98ZOADEBA5CVVMZ4XCCII1X46TC3M7GEHMYKFCA34V7JKI460IJSLQ57BVIH1AO3OYE9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (133, N'Dr', N'COTD59CTPAU2XSISN11MM21SY4Q5QIS0BH0GDOCC8YKS', N'1LYE9FZ35ON81O6C83FH8SRJOLSKBJ825MXC7XVD56F7ZRGTSMC5R7X8TFQOMFSMFL2EQU5B72B1DKJW4ZRO62AYPOIS76QQESREP12XH1XOWWV9VTKNN3FCA4P2BC', N'43JHLKIBONSOGEUM3Q5HZCNTLGPEC52GQB2ODDUOG0SPZVTNJY7FY81RGPV4U4YILCY5B58PVH0ZKXUQN2UDYMHHAB8OIPTC193NWNBEQHJH717IU5HSALJZUGU0WJ75OOXAT6TZQGMH2ZA84Q', 243, CAST(18362.75 AS Decimal(18, 2)), N'EPL18ENTDJNP534NOSRGQ9JTS2U64VM4UIMSYQDCIEXBVSV7KF06NSW55R95JHPIXJUNGBPXEEYCB8Y07MLPUGH1LHN6G8S0OFEBX7Q9P2R8UKTXT9YXVZN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (134, N'Mr', N'G0M0K0P88H9M0F0J737HUQFS1EZPODNI', N'1CKMKS573WU754L2ST9XDM32BDE3KB0M4XWCB9AGQMHQTVA7O1W82FQF9HB7D1MRW82789QJJT7Q5D9F27EIFRJP6H3TY22OZPTLT2ZFBDP97ZAV8W56N3C4OC0R6XLHQIRFJO', N'C812GQ4SGTBH6AETJ4WOOBH1TY', 42, CAST(18763.87 AS Decimal(18, 2)), N'2T2ZOJG6LXNVTM2ZVCZSO871NPC79V5OSX935RK5LKMWWX366Y1J0VRTM1BY79WQSY3VDYU4RT64MA4QM60BULOW6GH3FLYCNW3XT7T83WR6PN7CWLC18LW7A7PXHQP5UTGP67WECS7XTH7I857T9X42ZWMMIWQC7MCV6H5OOYOGDYDSZ7OCJVWWPEP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (135, N'Mr', N'FH4445I3S3ZRUC8CT1VDAIPKTY600JUTQDLYV', N'Z7Z712AI677L1XW1VDOXH289DS8IP8UCKB5YNWA2DUTJYBJJUHV1UR4XZQT8', N'WV6MW6QUXMMHKPDC6FYG7O6R47151RZ8HO8XA6FAGFG6WMCZAYAMVIU7OEHO4KT6MD0VGG200NZR7ZUIV2V2GDDYT08VOQ6WMAJJMGITWAL7J3ZPKZT2OQP8012G76B9H35XFBVEK155S5', 207, CAST(11265.21 AS Decimal(18, 2)), N'KAWG1VQ75BBR0I5B9OO0ITMB8ETBQF6SRU4E17EI86NOVWC0QKN0PPRQNK8M1FHQ4JZ5EQ9196SC6YFB2SL5R5322DQHZRGTPXJBW6MZALRIWFKP4WK9TBYZGX210S1IQZM9F4EW5LU6EK5MS1C276ZEYKVZ3LZIJ9SXTA90IO38GSKVRF8YGZAJZ8AV8FSKLCM5S8THRBKJ2RX6ZZ7OC12KY8XK0ES3WIM36F3IMQ64ERG8A4W8748K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (136, N'Ms', N'2YOE1NG171RCVCS4ZXRKA5YI28860H', N'RSYCU1QSXDZ2MJM8OA18OO7', N'Q0JAPW47VLAILE2LQZBQGY2994FIMLJGVLCFOVLDDV9C4SA0HGF6GFZSYA1LHLKA1UMZ2NXUDYCKOQ4GTE065', 218, CAST(10388.94 AS Decimal(18, 2)), N'17KB9HDJGMK4TZJWP1LUY56RO9VIKVRA2U58J7C9TLY4W4G4CBI2MQBV0SMZLUZLV92ZUBDHPC0C71UKSQ68DPNBI97QKDNZMC9N2H90Y0DAPZNZX26UOQ75MQHL3MWBO1QUR7IBH5ACCCMJL7TI7SAV541BZOXB31LN8T8QKUDJGUS93YZVTE4WQVPM66CS8Y8BRYASZ3YCEREACS80O1IPXPWC3LJEILAILHH5N7VQGRIZGEAEYB36GJD21X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (137, N'Dr', N'AGEZWOVG24S', N'SHS67ZX228L1V73ATRX4WZ87IPAFSZ63LKKC8JKXFX0EXKCH6RFWR3HT9LOHPIA21IGBNQ297ZPZYUAXDT80KABI3Q3NV38', N'0FMKGDU0VRAYAA5AYUIKTI2E375KR3LD5OU6DI6J0C3L9PFTBIG6OKJID7G97A9S6WTMGYXFNYKGEH4DRC98MFPK4CT51XBQ', 211, CAST(16952.12 AS Decimal(18, 2)), N'EJJUTGWPUA2DH5S967XWPA5F6H3224F3PIH6WWOIKPF3VYL1O97V41Y3E3OBCUMQUZNZNLCAIFB0U1K8V2ESWKYNJDSS8D5Q2P8VAME2XXCPQY8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (138, N'Ms.', N'59NNI0LDO7B', N'MYCF41UFO6OS', N'AECWTDCL0IP023V23HV115R79I45REQMUE32SHYYWMLWZJ18X3YF15N5MB96TMR35OZSAMJX4EKU8PGV7OGB65CYFMUMPPTZ4VDD95SCVIKNKSWXVDZ56GX0C0DNRX7ELKQCB3L2V', 152, CAST(14073.44 AS Decimal(18, 2)), N'JFFAFUTA1ZF9TK159KY5SPX8OBVZ79XL5F9SXUA7VYUA749CV7F502KTH6M4ZT3R2U4EB97EAQATVN1J2I4ZTRL2UFAQ7681V28CZV1L01V9SQYU522GP3YA92KVYG63H8YSEOK6HIZSWB93HFL44SCR4X3XB6MJURRKS5FGIVZ635EXSGEIV1YPW6OHLNVAWFY4JPAB05M8T6OYJ64UR3OSS2NLHY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (139, N'Mr', N'W06BTFA1P9GVHCVG3GPGIDS8FKQ5E3325A2WIKNMTQ2WS', N'IUFBR4V99HR6X7WNFD3RSC0IVSCYSCDLJ4LWOB4ZCNDGK86TYS9SL1M5TWGZRXGW36NTMZZ394E4YJXMLI003L0IIF2', N'FNLPEMPXRBQNTNYD09R4KYA52Z2KLRSX9219FNMQXU5WOXR2DY2CAQJGCFMEJ5BZJSDRMOYDM16QTEH4706NPFNIIKXZ076SI5DVJ0FOZOP9KTNYYH6JYOA35V81RYDEUE7N0L', 6, CAST(16776.13 AS Decimal(18, 2)), N'V0OAN79D353IPFQWQIPYEI0ISR5BH1PT1AQ84W0R9S0OOLYC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (140, N'Dr.', N'6545A7IVLI7', N'V47F6GCEKD7YT5IGMH6AZTD8XGTI54B6W77', N'7LIN1PEYPWY1I1NUUV9QOSDX1AAE5L0XCWZYF09ERWI4SWVD7JDRRUWE7LMQE', 249, CAST(6795.91 AS Decimal(18, 2)), N'6X2R0GCZ5HW1YW2G9GEPHRTIYOMIBT7ST8A3M21UD8YE4PAVY8F4JNLE3KSBUUNBA38PMYU6FKB8SFE9DQJ3E286NVZ19P0ILN30HK9ZD8OZBCLO6JX3BJX8V12QZSXPKSN5CDRSGJQ5D9UAABUQSW71PV5FIJ0LBZEIPGBSR4NRTSUL7SFNX7XOLMFH8BAWI5TEVCKU02YN9F7X0J8P3DN42QX20TJFTQ8OYFQU8LNV99F5EHGP3LT5HPC4EHT6IITJ7IZLSDHIPSVSARNICUC8X3782LFQSGCQFWYWIVXP4BFPUJUNTBTO5LL4BQI6XR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (141, N'Dr', N'W8P', N'XZYI6J18B17X2KV08SS2RYHPNU8F101LXDIMIO3GR5XV9VFL8AX4F5DZH8UCAM6AZL0O18IJPCBL0LGRFM6Q3X6S0J59TR55YMWNVRK0SDF2TSYVS3XNFG72F7OI38PX66', N'S4', 7, CAST(18911.09 AS Decimal(18, 2)), N'8F4DETR0HXN4MNHEIRSWGNOLTAUKRCQRCL6AP6FT2BBQIHZGUCZF5U9LQJJ4Z7857WR1G7OCCZU5BX3CADQECBMIBLK6NAUU2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (142, N'Mr', N'ML5EQ6AZYIS2MRBWGNEK09TVKAPKPKNFXO4GQE1ZV57', N'DPTWO26YPH3Y8K9HQUHPIFT7N21WJOHVN5K6Y79L8HIKB9GXURZ3PG', N'1PL2PETMVZRA8', 130, CAST(15936.43 AS Decimal(18, 2)), N'JLQYZMNN25039SG7ULGTSV98PVMIP15Z35EHLBD3RP8GI8BSPFG8E8ENBH9405Y00004DZLI7C23NTQGJUS9LWKURQ54293LQ7GH87EQUY015A0IQSL5CPF3F5DNTGGY9GCFC98CG2ENWJOGPME9OX91RD12UQWDH1SPYL5GK8P9AS6WGWY627AB7BNZ85HQ515UQZH4HXOF8ZQZ64LXRPBARHHMX68EQZ49NC5HFUP4IU28KOT3JKYGPV29IV6AP9O9VHCTY4IXZ6RWE929C5U61NJR9WZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (143, N'Miss', N'EF8T6BH9U44D', N'YVL8L0AF007A302IJLWH0X9VEM41ROE670MACZNKX2HJ4YDXR9FISY31MQTZW9NCM132ES5KXCJYFPRG969I9VD8WKNM5ONOE5X2VAJZ3VKGE5LXYDPQZ52QNU5T4IE9PVJ', N'4FX7M886IZKQUEIZR3D8R79BH5J5VV54ZGHAHR6WOU6LHYJE3V7OW0DW6LP3BNUFRDW8IZWHKW0NUJL51ZNH7Y3K4W2P8KJJR175IVD8RFGGWIR6VJ1BZD7SAB3MX79ZCH', 11, CAST(13436.02 AS Decimal(18, 2)), N'NEF86TC3CZ4F20GJ36V8SXYKEI87XKK25YAKRIQLWYXC0F3070N31QRQGVTNK55RF294QVRLF9BU0LJZE70XWG0F7J4WO20RS5XY5ZAB82NREWQVBU9D48UZ1UX6RVWD9K1UOLTFWOOUS90AT8KUTMNKBXX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (144, N'Dr.', N'9TGHQADVD5', N'ROLYNAEDBXURZQOSYWP927F05QULGBRJLA59RR2OQPEP0ETEUMAS598K9KTXGTW06A5OLE07U1JCSQ0RWGQU1YEB2K07Y57WTEIP84SFM3Y', N'SBFM6MFQSINOM4V', 110, CAST(18426.43 AS Decimal(18, 2)), N'14JD6AHUVV7Q0TGFK06RTNCJA1KNWHJQNIDR5BNIR6EY1UUZ57ZAR5HES024PUXECG2HFPA9CN0M8DHF7KHPH8ZI0ZZ48ISW90MKSCJGWQX34U5EINX5D7W3HJHGQ51UV3D8RXNV00SRBVD6TKLKLNJ13I28V3QRP371HWNLZ14CF5SM6BN6KG88JC58UF0XA127NCOWW0LJI7LXQG1KFK78VZH5REQK161E3KYUMR9JUPPCQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (145, N'Ms.', N'NV5', N'QVSJJ20022Z7WUL0ES9OUMJD7BJSNB7X0AL7SHNV56TQFATDIS0TT993BFB8J8DRU17M8E8X5DINSSXWH59UAE4Q0HVD5FCXT2WE3754K3OGRMBJHFREYJGFXGLRJVSQ1LTQWI', N'OJ8JDUEV6RRAK6G3EMZUGWUP', 204, CAST(6329.92 AS Decimal(18, 2)), N'HEDGIQUTCNUJ4H90HC57U5H7XOANE5A4FJXC7LOBKA8AZ2MSAT7D7IDCW5ITF6F6DQ4LKXTWNTNKX78U2IDKYXXW6KF12VVDU2X9Y17D0APDUTFPXNRXTV7FS7EZHRTSYAPU9ZW1AZJO7J1D5Q4F4YJZUHGQM7W8GXFK3KFYQPMTBJ7861TQMENZQPZSI6E33B794H9LB6OECPOB97KKD5L19FTEKNFKBJPZBY4OS8EGQ9N00OIBLTPYP6ZPNU0OR33T0O0B3VS5R5B0RSD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (146, N'Mr', N'MEPV21H41VDE3ELSKQNHKLI5VTW1AA5B5ENFF9BRSOELCVA', N'A05A6QNZD6CVPNYYALGHNLDKPBYF5SK', N'NFANMHH1CKF4XIXXJGFU45M1JAZ50ESPJZQF48J9987L1ZH31XWGEUFHS83CHC0YR', 151, CAST(9610.60 AS Decimal(18, 2)), N'44ZHTRA5YE0X8QON6U0BO67Q1K7KVZYV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (147, N'Mr', N'SCDX7OH1WKZ85FUQQ18OR5DAFWO', N'YNGDT8AP9G8K6Z222MJ4F15OMKKUR8TKLPW27K51BQ86DTEP9WCJ8G7', N'KXRISBW6LVY00JSW43HCAPJ9MW47RX88UAFJBI4', 112, CAST(8572.39 AS Decimal(18, 2)), N'3JM4MZ8EUDOUVW0GNUWS28YW9G9KPAYF5H461JKVSXTSIV6N637513EULQU5PNOKE9ODRTE490Z4F5DD9LEM2TD229LBOE6488E96SWCO3V139FFCHV392HLVLBH83FVUVW6R36HP1XZXCZSU6Y6I2V5RSEKGE4LN068D8O8AEE75INIMIN148CSZQFYP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (148, N'Mr', N'6WSZJ', N'HSR8OFX0M', N'J88JIR7KKL8XHEGVDIWW6PFNNP6P48KLYWS2GZQUOKN5PARFUJ5TM7FUSKWSL', 239, CAST(12809.13 AS Decimal(18, 2)), N'1AXCBW6RFLIQW4ON084WYXR2GENE8NTPJOC3AT6RCV31JEC83CP6USN3IVVX8RJRRS67RKD72DK3UQI12FAVXNVQ19KFX9IKBB9R84GJZI3G8J8SCTUTHNU4XF6H0YATVZRIGRTXY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (149, N'Dr', N'8XX83GWMJU92LDUNVANLPNZ2HB0L', N'YH30VIGITOSZBS6ULVVAC5IYKESXCWT7JQUXM81U2QNI5IGY2TT24', N'GB1MYKMDFDR18L29YCYQVK2RZQGY9V3X863B42C6TG4R1KZTRIMJUUMV8AN73N3JATS2HQ5V0SXE', 211, CAST(14297.33 AS Decimal(18, 2)), N'WEJEIH0R23EP3OG4USYZI08AL8SQCL0WUPQFLIXPG8V6E6W31BX0ZZ8V68T9PAFG3HUDX0IBV9IA51WFCP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (150, N'Ms.', N'ZS0PP6W', N'BTY4FGPJ5WVKFLY88CU17LH0T1YUVJ2Q36F0YHSL5JKQMK2V0TKG734PBYAEHVOLT4H86XAQK9WN0RD9Z2T1YMJZ2PP06E39VYW', N'BPERN6R9K3EJ83UF426DKH7RXB1DQI2X7EXK8GGGCAPQEI9NBFWPR1WTHNUC5EI21GCT597NMP09SHCF', 198, CAST(4302.68 AS Decimal(18, 2)), N'0OZXUHV9DON06SE3WBJ50SL5QHXQ5CEXZMFS3KZW2R5M78CIQXZ3SJN73U6DJ441AQ0JDM0CBM29NYXH4F07CA4GY7P9DLDYM3CH8S43XMR5HEJ4X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (151, N'Mr', N'HYSR5LI1C', N'2TP2JUWY6KK1FF1MM7LI6G89J56MS2UW75DQI4QKSL14G5ZO88BPVKM9U9ARSKOMPOU91A4IH1P', N'D1BLC56I43KM4AXSMPX6FH188310N00AF9RC7B5B16M1HE2G5SE8MW03D935U32A6UJLL60M03FVL6LMX6U8V6NVC43F7ZGX3CUNVHVZRS8IG5H6OG8O8UE06N9H3LE0NHR8BXQGBVG3', 143, CAST(4819.72 AS Decimal(18, 2)), N'834XOZMJK5XRYP94MKLG8CAW9QIYYKNKBOD9UPFDUP7Z66N2WDRZIGGWS8OYGNL0HCFACZAW58LJ4BP22G2LSO1V8GHL1GW737HURDPW2V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (152, N'Dr.', N'B1I0HCXQLYUQSGBRJ29DW6YUECUTJ2H150PK', N'E3TE5HEJQ50MI4W8UYS8XFFSAQMX4T8UU1URGWLA54WKN7RXEVNI9ZO03FV', N'4E7MWQQRS', 140, CAST(11069.57 AS Decimal(18, 2)), N'AVWRGILVZLZ7TAJ2WIOVOCEFXUVAPR5JXURZBO03GLWL4ZOJ7BSEE0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (153, N'Mr', N'ZAORYKXYQ6CGD1FRZE43OM4H47JHTLRRQG', N'EWX6SGA5RYDH2SJU43YOJ95PKEDU3FS6FOQZNGFAN93P5RDWGTV0G6X5Q7LD3F1C562E1J6NNO195GK', N'9YUG78DW5D7VZD9VQPSCDDB3192U6UO9USIAHGJ7XYBPP', 82, CAST(19080.54 AS Decimal(18, 2)), N'YHHUMNA68FGAZJKQ7HKE3FSAY5B2EYR4XOTIUUEF5FO6OPP0NKLWTL2JP6WHB7R9NBCBP2WC349OQMM8GBFUDVACLASOYW4XNFICDEAKN8SOBES3JN00SXWS10PF98E60C0A39V10U642L16HP4BW35PJPBDOVBFUMNZDIZ9SYZXRRPFZJXJ32AX7BQDYID4JQ9GX1SZQUIX37YS0WD5YRBRBQR2RLB9LVE0H9HXQYT8KCTZCYD1486REI47AP74J9C8SXAQEGEZY37YXRPT795CONLZ5AM1QOPA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (154, N'Mr', N'RLLXL0VN6IC50196MKHND5', N'0GD9JSP8QL8GV1777RJYPZUXM7CS', N'FTD100ZFBVNRFY6JPAPY16VYD96KFE2LDSU8H5UN9EHMNQ1K1E900Q88YENQTF0WT1DM4X1JG1OMP8BN7MI151LMJL93I3TUEKSLCEG3CPJY1M', 71, CAST(6938.43 AS Decimal(18, 2)), N'K7FNNMNU6SBA5AIZEW93ZK5BBL4UC89DWYCKA5KMIIHUAOZ041CRF71013C1ITHYJXE7XXP9CMLG2B1NM4PBWIXPWBJ6TJ4O1JBCAS26C3FTLLYQ1OFD35100OAMEIFSIWEJ0PCT2JZS343BDS444RLVHABLHFRTNMAO6EQCCLAK68XVKY9MDBOQBI1PDQCMR55GTF5Y2SRIG1P8DG1I65GBYJCND0YL9NS03H15TAJKJ6AATSCXPTGMPTIA2IL2T68T8P5WEVPWMVSS92TKO1VG76A9ZR3BOGRDXG14NFIU3KZU1P0ZO1ESBSM2EVXNSE753EUS0PX8J0CN6G89R3M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (155, N'Dr.', N'NR1G55ELQX6DGJ2SZYZR1IFJE469T7LEX6KJQHR', N'OZANSDM2SSDGTNGAQSMGU2EWL31MGMBFX32LYT3OK5FZ5IWBEMVFPBALLD1OC0L5GXJPLUCXPYWOMEQ36P8URWQLTG0KRECJJ9J8Z7QJ9YPRFLY6MYHMSREJ7XW4UR6BMC', N'P20J7WYRRGR3INX1D7U84FQAT5FOGIMKX1K1HKMYFT14LBYFFN6Q7DE9BPP1HAB9T65H', 189, CAST(17530.00 AS Decimal(18, 2)), N'2Z15UZPRIV2PCUQMV7YY358AFYWXNNWORK24CPY106PNYNACPLDJ4OJXQRQV3R3UZEXSRL969XYXGKBROK71ACJ305ELZ2Y82UOKQIK4B7A7PLG5FY7JJ1KMUT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (156, N'Mr', N'M8K', N'CVI4ZZOKS6Y67HTYSWPRSVZ01BLOIRE52GLB4UIN36LD9QON0TDFWLDHVH2OD011ST4QVITYD2OLAMRAMYOPEZ9H34FMRT935KKFMYRIZE1TWS69QS2FBCNSJMNQ276K', N'WJTLVSBEMPH7Z9SCWCJMAPSUKH4ISAE5GCI3C5BL3VPZ7UH1IWXUMUS7RY0ENTMBBCQNQPZR0YJFZSMPZ3ZVDKJMJBCE4XX98EOV4UATX6TNBC7YBAFJUQYQS43FCLN3097L3RL4', 9, CAST(7763.54 AS Decimal(18, 2)), N'M7O76YQVLWR16Z3Q22BDEO850VFO092PWQXWN039ZQV9OW1JGBIKIFDYYJ6BJ1UBU15F2721Y2ENTZH4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (157, N'Dr', N'3S51EUE77WQJ0LQAEG492RFAZJ2H615S', N'KFQ1BNO65QZXFKAX6WZRURSWSWZA', N'6Y6RVB63D2THDFHFY2ZRUGBJPM1', 246, CAST(16612.03 AS Decimal(18, 2)), N'W8PRH7GDZX4URQYWJFMQLG88GMF1P4Z11HMT5KCUP229Y77CGR9KUD8FZG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (158, N'Mrs', N'2F', N'FR8H0BCG7E4E86MOV42CTVB7SZTNT9FND6PYRGE8YHZHVCLL68WRXX7JG0O1IOMXZG01GNWEPTEBWTBGD8GKCOQFZ6IQSDQ9U1IFCK5IBI14JVNMP8OA72KAQK2A56MC34HVBW3T3Y8UMLW3IV1J', N'LUKPBQNSRZWSXCZJUMNUP65OMDYPNN2990IIH46NRPOY57TIHSP2Z7GFPV2XRX53XNIWUG1PG02ZH7JEJG8UYZ92J2TL18VUKK1HOXO0QZMZ4HXICNDBOA5XDGCRNG', 73, CAST(1681.10 AS Decimal(18, 2)), N'VRFOUY2S934QY2S1IEZA8E3LXVE7N97TP9H2AE8AWFX9B0BI1CQ1062TQZKV40WB1OKQR45ODTHTAWJW5BJ6TJ71DGN8Q1AXDZZMXBKLVBS8YUJUFNPTHQHIHJCBHXYCJJGAXXYUQXAHQY2IXST2BHGNIG4EY93YDFPEE9WIOV2JFZSIGTEO4V123TSHSKVHUC4A9N4NWADGEW7IOMY5VETIENBKHFQ40LO2VH9SOQSTHLN6L9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (159, N'Mr', N'Y5UYTE71F0I4QHI53AA', N'F1SG7PRHUC5VP1EDRAS4U79TQO4OYRA52NN3PE36CB8M3', N'747EX51QMR84ZCAX24B8DUJ5AF347LXD9AFUW30CBXRJG55', 157, CAST(7227.32 AS Decimal(18, 2)), N'6LPMFILWLCJ6GK9FT75M7C5G5M01TZ4Z7MKIAZ9JAKNG5JB985UZFNLTG9HTIK2M8KZU0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (160, N'Ms.', N'CV2VSW05RXKX64B9M6GNJEUY0XQPJZPOR', N'XKI', N'3IAMC7BCL24H2XJ0UVUOXG0Z4ZXG20P49I1PAA12Z29UYI9EDROLAGNMHAIDAV9', 142, CAST(12094.87 AS Decimal(18, 2)), N'5UYMCMOOBLAQTO55JJ0Q21HG0QH18KJH9IZ00TBZ5RXVIRQEG30FTAN4CILL4NGQ1THBO54Q81LA3MX9Z3K4K4NZUVNI7PUH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (161, N'Ms.', N'933Z6WD2AIGLYL59JXUMSY04VU5BLR7W62V86NZJAH3BH', N'RL8FU8SYQJK2I32ZT1DBOD6LRJZNPRQK580OXNTF', N'DZ7KWUQKTSPV760LPI2BB3TSVE7ZSOS3SOGZAOIJ04RIRREBAWNRTX995FPHMQR5', 213, CAST(2048.01 AS Decimal(18, 2)), N'7TOAFPBZA7ROD1PKCM12C6X5IGTHLII63ZVS8YJD859WVAHTXXV2TFY1WJRYVUDSOLLD5XBD2NT6W0A8ZZJNMGDN0UWP7LHESH8AO3O0LH06LS5V8JYVAP588YDA1M6H5FDERZJWBJ14F627P0MM33B02QQEZZBI05EQ49Z2KRN0S1V5K15HVJBA2RWT5WJ2SX5WTZW7OK1CFB81ULTYTTNHU4NCC5WO7L7VVZCL4YSAIZVRJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (162, N'Mr', N'Z5JAGRT4BA2Y3BR2GIAJFWQX3WXAC', N'QOKM9S4J46V672DEMNB859ZS0XA3D258XZXOMZHQU3LLVDY5MAAZH65HPSLCI1610N874OSM5KE1NEXNY4G2S6QRTGZTE58TXJK74R1X', N'M2JP0A00IA6CB13ZVPV00AUF7UVZ0WACLI5PVM9LMQAN2XTDLHR0V5ZB74I6F00L0TQTWE49F9DAZ7C90HDI5AGGITHR426LQPN870H7DIKLROCZR86XNHFPC9A3WC4C3RK9K42Z065MPUPUGI0VW9', 236, CAST(17333.61 AS Decimal(18, 2)), N'ZK3L8Z9O2PBJUJND4U3C5V97TV1CZV8WTG6BLMC8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (163, N'Ms.', N'VPMGV0RBBG21QL67JOS70K0X02EM6KTJS1E', N'NTXS4TAUXEDK39TWHDOPY80CL43TPI63JK4DTYPMOYGQU8TARBMEC8KFSK7ZPH5E791I5G2IN1', N'99XVX', 120, CAST(16988.41 AS Decimal(18, 2)), N'6WNAL49N5U0O6Q3BVSDXXP6GFQDCBSIHURYYMX8QRPU077MQ20PUZAOHP6VVQWBCBJTER5PYKM67V5873N9B2OIJ3G8F1C0UDHPOD7YXBR9C4GMJYOR2N0AM1ABAW9W7MCUEGKTVOCZAE5F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (164, N'Dr', N'CNFQB47UHD54RVC9H49AOOGSL44RMJ8P', N'ZR9HCAT2DWSRA0OK9RQX7T1JL7B5A83QA8KNJ2UOVFRIEIQHGVTRX3S5QQW5ZOR4S2G2G116X11R1I52GTPFFCT6FEXS6OP7OMQC1N1EUNUV2147LTO6ZBPF89N14808CU3ESS0TRAKSIX4DAQ7CZ', N'DB0D7IZ42EN57WHBS0HKFMEC8GTTBZN858MU49H', 245, CAST(17756.00 AS Decimal(18, 2)), N'UOHDLX7D62M3WN02U2QSM83DUVDA0Z8WUOG8SJMO4G7DXPZ1BXGBEN0ML3IPJWC7UQ887S9BG1N50PG4WCZ3JWH7NTNO0W5840J6HQTIN4VCZVLVNDS6W8NY81LE5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (165, N'Mr', N'SUW81WWD6GMXAVB7J1NR4PN6N57ZF8Y5FYY0F1G8D', N'8CXB3SZ0ALMMI7YPESSVEORWXB49QD0N8TLQHHP8TQZY5WFXFLBFJ44JL0DSNP9WKYDPL78', N'PPE3DPPDHXGWDCARWO4RO6T2RE0Y9M6JI5VQ8AZIRGBDIQUTYVXG4QNJWBCYPR3VQXD8HKJLPL08VFJ0J6ZDOQFSICTWY0T0CGN', 136, CAST(2623.11 AS Decimal(18, 2)), N'BJWF0069N6JHFF057R7R1M4YBVCKYG5FC2SBFKULPDQMNFT8X3TT6DJOFY35NLB7044DMPPNXM2OWIBV23NUMC8ZI4VHGPX31ILJAFM7E6WKAVSWN72KYHKOW5UIT767OZMDWSLMHFGGGNON');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (166, N'Dr.', N'H8U', N'2K1NOSR1V', N'CMCDBBRIPENHRCEIRP6ZHKP4QNNOS0VERYNXUL2CZW33OC4MMA8M9N3SX7NO', 105, CAST(12434.96 AS Decimal(18, 2)), N'YU8MD5KXXM5L4E6ZOWB9F0UMF2I0488H77UDYLBT1FZ5F1D19HRQCEVYZL6AMJTPEODXJT12LI700P7EPHRNGH4SBVDCE06ILARQNGHGGP5U7UYAESL5S69WJLLNFONLBPEQYGQ90A7QCALGX3YME1PF1U72UT1R1KJIG7BX2C4IZIJ9Z4PCQ169ZYP39NE69FPRR30QR0J1X7GIAX3P3O1ZD9IHI7OFYY8JSSHW4ZKPI5CRI6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (167, N'Ms.', N'B9TJ2H', N'U52L44P14G3XK3H3E6IPB7CDDZ2GVT9BWFV4TZU90J2SU4ZY6LEKI6WMSP84186B6R157C9EC9PR5KJ80499FPSQJ9B4RP7RDRL22UQTBZ89G5H75Z4XZW', N'2PPJ9PTOHN5NT0KHMGEI02HR843UV0NYDOW7DKEMBX5M3YGN', 229, CAST(1783.92 AS Decimal(18, 2)), N'BKO2KDPEHKJ8KC43YYWQIG7L44CH8XRYBFCU9VO62E0BLR0CD1DSLG9VD3YF185JTKW4Z9U');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (168, N'Mr', N'Y237PLWPWXXIGHBWARILF', N'HYBLY15MM1YEDZG5', N'AAQ86N07YA4LYTG06A53D411R63WVO9OGBLPWQ60WZF9A0D3OMWOBJ559OG0K3CA0G5M8R3G', 117, CAST(5295.67 AS Decimal(18, 2)), N'AQN4FV0D4Z46KYDV5HH5X85U8GI1VVD37AHVS5FH3KB14ZZV60ZHSO52LTWZDZI9L0YAGH302Z2CW3P9HMUUVVBJ4FAZ8G4322F30OEOXZFSLT5H3MHQ5NDPPE6173RLVY9UNL9S85XWGIYB9SVMYDYFPPELIDHT7TXMJBTHDPIZQG97GVRF75NHZU4X7N9UO3OMKCRYYE88VZP8G65NM1L25FMP6V9QFNBMRMM43TGTWEL05WH0IM8MHMH5P1R24IT8N2GTK1JSLS6RTLKAE97TEP455GE12DPELDD2FNFH2G0PFPB4HHOVA0TYXBO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (169, N'Mrs.', N'67FCRTX5W5GKHWUTQGJJGZJQDEZCJRK', N'DFYFHJ9ES3YSL9SGV43R8RS6CL7HR38PTYKJYG0F176X6U1S6XHVDEXLNR3VBRMOV9YMP9HF4OP1LV0IKFBTLCCF1YV7D539KI2WVE2XG2ROOV0SRKAWGT2IXJKRDA', N'47EPSRRTZ89RLCW6FG895FSM48UVQVWIGJ7CQFGXP7LU3IF38GSBV6YOFRKJWV33BQA15KGZZAJYUXIMTRMA2LM9LIWYVX0T4HID7DXO0TBLNZUH9YP59S1Q31GMNH419QUC', 218, CAST(1978.61 AS Decimal(18, 2)), N'MHQ82R5G8HVQTQQYOFPF5AKKPT3LJE54ZCULPSNOKVVZMX2K9VAIL8YCX5J8OKWUCQRGW49VR1VAEKYRRJBO4MIQDHOJ9EZZY1MV5LN4MEQJDOYC6RG487QQ713EGPMD1VBCY3L6V62PVZCPICDIXVQRBWN4I8OWSCHHDLD2598250U8ODW4C3G64K11GHONI5WIHUCXYACNMOLA2EF4CJKOWBDSJCMOLLJ04BQU0Y62RSJGYRZ12JAZK7M6HJDLNO214L6QNL4DCIX3RWUSCKM1AKFWPKCGLKE3QIBCL8EHFWM2AIEKPL9310');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (170, N'Mr', N'5KVWS', N'ZKGG2T3M6CECJLNQ5X3FSU7TRFJZBTBJ60S47EXZNY4J1GJWASFT9U94CNPN93AC1U6ITJIQZ4RTQORAWMPJEHABQNRKPAPJNRI6903Q9OT42GDOVFQMERYJKUR5SX1PF75Z5K0VJY9PN', N'5EGTY9991MLOFPW8VKBGS96XA0IOABW5H33K8BBJSH2FUY8R7TE5JWMW8JIXQKZQPG7CMCZJ8SOB6Q2CSRHGXRMKG', 22, CAST(19372.89 AS Decimal(18, 2)), N'K69138NSS3TD8LH6364LEYCL65RRZBB1PSR6B7A8R3UYG46Z7E5WXFCLTNUYGWTGSSNGTAVWVWTA4D52ZSJL6E4AG5DNCCS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (171, N'Miss', N'T2RQ1S1WZF2G112VX7NPZDULM4LKEX1Y', N'9AA2P9K25WTYME8XYBN4PUAEIAEU3GH8WDLHVP8R5C2967XLNLZX2JHF0VJFVPZPEK19TR293VZCR18BCS7HGK6DW6HZ6TWFDDUL5OSVIQT6J4NZN822IH9UDOCN', N'CPTES7HCPEQW5UTUWR8APHG64Z2ITYUMVF0AQU0GTU0OLWMMM2UUC6HU8N9S4YJRJ40PTJ42RSHVGSK7DGVQ4ZAPY513K7BUB94HVWT2YR3JPLEG22FO2SNKTB', 97, CAST(11599.01 AS Decimal(18, 2)), N'AD6OHP5XJ800L1HFISYOC8ADND0NX7JJ4YZQ7GK9MM1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (172, N'Mr', N'DNGRQYROHEKA2QITANN93DG854X6HH2E3FOEL478V0IY9BJD3', N'33AZJZE6M5N0BZPQ0TSIHBXRTWW408GC4LFNJ6058S12E27IJ3DVK4SS5J5M3A6EOBWPJ26TTNAPAVCRPDKWVLSZTMI01D1XLME25HYGWJ2', N'OI1HJGMJ6N2CHNTSCVQZCRK0ISMSILKOJ45', 97, CAST(12616.09 AS Decimal(18, 2)), N'E3PEOX5KD3I23T14PHZCPHWM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (173, N'Mr', N'4ADOXZ67ML0L', N'U3HA6EXPPAJ3', N'WAK3227T0QY190BO2BFXY1ZRTU0L2ESCI8V2BNXAJQ0SULIIAWL7P8LVAS981MQLXL', 180, CAST(19851.87 AS Decimal(18, 2)), N'R827P1Q6CZJNLZ01Y50FWMEFGK5MP8W62BXP3CO2SWQTHG3HZAQBW754TMQ4W3G42CL92BYLHXN0VKY0GNNFHLAU6SVGLJ6OGMR4UTFNB4TYJ589OQO9F0MG2Q3AFH0XRZK9TT5M8Z3DRBB0KMSVVX8FZA14Q58U4W7KLYFUL10FX9PRF3QTP42UQ5AJR0W2R98V3QFL6X9TWSHPLAPNFE4ZTCUW3K5YNN0TNPN4NSU9YXNKYHB9ND492RVZW9UPNY4UPRNZZAQC4KEWT3YL8WAAIRRWTO7DY5L0SSV6UB9DNS4ICY5SB8GRNUBY0Q6A2CEY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (174, N'Mr', N'ZC66N2385GFE2VHZULJ3QDR1FHO7EIL89TIM35WBZ', N'WWXK6SGLC3NG9L7F3ZBJV5Q57UMFC8B3AJ9L1WQRMBHZUTWSP9LB8KNR6RCC5084RJ6QCL', N'048DFE5D706W8BIA6SKN9MZRIDO8W0EU81HD1J6SKUEU3W0XJCKSDY9E5HU1QWH7MCO7', 234, CAST(5743.88 AS Decimal(18, 2)), N'E408RRXMWMQM9J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (175, N'Dr', N'YUYAV4P8R0HIGMK5R5DVTNU6', N'78JXJNQAEXUP3M0VQVHF9KEML3D7AN6F3UE2OM43FHXEBA5HROFUU65MUWBG9IZRREL88Y63REZRM0AAXWGM7BLXP', N'48NMR2F85NMDROJFLHAR38K', 21, CAST(5689.55 AS Decimal(18, 2)), N'IF2PPUCXHW635ZAAD5JYU5KJGI4Q7KBQ6CRN9O9416JCLOSNLCDG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (176, N'Dr.', N'8CVVPP837EX24MKI5QKRRDW1YEQX3OAZR6MRTC2B8E97M', N'8RBNUXH6MXOX9THB3G6D0TL0ID2CJGSOIGQ', N'52NC78R8T2F3W6LVT50T8OZ7YR0UDFRVOZHPF31WWEJO9FJF', 121, CAST(3815.74 AS Decimal(18, 2)), N'L0DUJ96PLPWLFWS7N1OWFWNM8XSQG4V7U1LBESQF2EFGNQ6RZGYBOKAPCRMLGG8HTOQEBHSVA9T1G6YHR0R06KJARVZN54YM5YMY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (177, N'Miss.', N'MJTCOX9FCVGTXAYA0I3YBXZTPSN9IC3OEVR74Q0CPBURAZE', N'S3J29FDDL0MN5W84QBRE6A5GU5N640ET32JZW34KG8EIQE7M7OX7PB8HY374R69LLTK2D97N76XXVMPFX0ZF373RU', N'FYX8RGH2FDF8WUEBJ', 65, CAST(16650.41 AS Decimal(18, 2)), N'SFIN30FQ885S5UFP8A95FNFH5P6A7WHK0GYL8D3K3JIMTUZ9IXWODTK5Z0HDU5ICQLSPWUGV7O1V4SOAPWRAZT66VTL8VPQY15V82ADNG1GPRO06C6NXD7DXFLT397ZIY3UZWG8FJ3UXDGF6SEWO1TKTRYSHGAE82YROU09WY8D9DFJY6MAUBAG4I07YNRY9PLVFPQCR4ZQSFBFCFTAUZJXRHM5TTB87A4KSK49FAIQBKNP7LVJTG395N4Y2LJYSQJIAQNSAKVKHTL7TWY8XSFQ6VF4F66URKXK14FGX389KJRB2X46MA00BSCFBIC4D1TXV05OHHAUK56M331I107GJX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (178, N'Mr', N'CXEQ3OQPJ0N', N'0TVZSAYTWXU49YGAZJEALBDS7R7THEPS8B8ER8DNZ2QSKSR0ZT7KDJGPF3R124CH72WYQ2IR5QBJLL7EZ6UO74FPVJZNGBKUQ8KIWTAXAFFM7W4TWD2WANA3M6272VBU6GSC1OH6VXDRPTH', N'XPWGQ43WT4AYI8KYYHTNWI0MZPLOZJ4DQ0LQZY8T5UMCSHV6NXWXHWJEP9G0IEW9ZX7HMUZZ9ZI1WNUHTE12N', 221, CAST(5548.33 AS Decimal(18, 2)), N'9S05FR3VJQUG2RFO406F5MQB7GT2DTCEYRWWHCU3GAMW8NZRLB3FDH3M2OXZX0IQDGHBUJ7S53YVZU3KG2H1QX1GN9UTFV5FRWIS5OW24BA9I7N7LCIVJHZGF0NKPEC9XJ43BAFS5EWFMRXGMM72DAVAW2C40BCQY0CZ2KWAXPP4KKTO37Y36AWNNU69YAST26HMEXD2PX5OKQPC8O1TD9KN4OC8DMBNXW2E2795TVD8583W5T1A9YFSMTIQL4O3LIROO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (179, N'Mr', N'90XZRS', N'E5Q29O', N'VUH61PI7BQXCCU9DKSYWOIDHI1FY63DUMS2D0GT9H1OR4JBZ8GU84QJDG0N09J18C3QJSVD3ZOFMTMDZPGQQ84QV8PX0SSZX0GF0TR7C3R8FBWJTNOATSBZ', 118, CAST(2906.50 AS Decimal(18, 2)), N'91EWZIWBIWLG3JL1DYG9S9OJKO6AMNGF8UJ0VDZXWAAM4514HK4S7EI0CVBABMOVF679ZL60ZIDHY2EEN2S2JO7UBJNZ1OMAMF7YXS4VD3TP011AHXM9TMCQYDXGX6ZAW3VJUFHVXXOGUHT9IDI31DGZ2GZJUOX73JTX6HF1FRBWXWWHKNXKNV8IMVHEFY08ZHCBOW30YHOA1K26KIZ6QDK7BAAB00LHQ3WGJLSOKXL67YG1SAUXY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (180, N'Mrs.', N'1JR69IR8038IPDVWKYDKP42N4342P', N'2XGWPQ3UE3KGR3RR8VV0D9IDTP4SX58LHWQELSSGS2ZN4CQUNDH7DO7SE220LBW9V', N'DUB3YCB7OHMD7C5Y8ENHWAKB63D3I65PG7NYG4EQF1QTA5MAJCKDOIB2AZXUY7OICXXZO6H40W1UJQ10G2J6LR1XVLOH7KR7D8HD7MLCUGDRHGIJXWDWNI', 50, CAST(2589.29 AS Decimal(18, 2)), N'ILX50ELR0XV7JYNLMYQBMTRDZCT8IP6OIWKBJELE2SWNB0EIE7OV6N7OT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (181, N'Miss', N'UZIKD8LR48CGQLBHYHE3C1E7PWH316', N'YUD', N'KW043H0XG', 4, CAST(8187.63 AS Decimal(18, 2)), N'5NKC9BR6ONDC28DC8TX32ZYBUB0BIUOWHZ8YTPJKW5BR414FHUFERQH6O9IXAGNTYHV20FJJ9C7WN76T6LTOF94RI29K7LAGHISM61F1BV4FIKIH2PRPNZDOD4KX6YBO1RF5EKM55RDJ4O8XJSHIULSI4491HHVC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (182, N'Miss', N'OJL98040NBTT589EGCN4NOL1TLBVGRIP', N'6G3F8AAV8GY94KN17TOX0IPRUG6PS5DVGB613YFXIJTL2B7CMTR55GCOQCKR3L2322TTDLY8DRF4PI9T2ZE8Q0YIBRENTWGQ', N'THB9OSUG6B4E9FF25JA6VJUAXG7IIVTJXMOY7A93JFG6T6MKP1CHM999N0C7KBYBILHMRGVV96NG3OHQTNTHICWNDFB6X2I7G5O7P0T85H7FLS6YJLDXHHT5PT8C4PX7NFZ', 191, CAST(6044.06 AS Decimal(18, 2)), N'GER5C2I2MJVMUJOVMDDHTTGYX1AAKNNV1ZOAHS6PZF81XWAKK6U3HVQMXS7BS7HYV0KUVDEU6OHELE11QPQETJD691DOKVWRYA5XBFP6R0WTDC1IR6K3H24BMELU0Q9BSPFB93QB0JNTMKSXZUWDATAV5T');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (183, N'Dr', N'U', N'ZIDZ1UIRD0V0LM1IAI3PUCSUV97UPYIZXMQ0VU14VHC03HP4C5JED1OMQJ4RNN1FHW2ZW1MGH', N'0A1TULB1', 73, CAST(10852.16 AS Decimal(18, 2)), N'WUU61QL1NWQ9OG93YFAO2MOU6UV1YFK5FTTG5CL31J509K8X0QCFV48A6ZZ6UJ28BLUVMTXLT7NJGNLMMY08249AKJA5CF8IGWONPDA7SQLNHPTJEDKWIT56BKA3IR8EZ42KYXW8OTFCJMSUPRRZUBZMQIC526O1H6OCN9KGHC8PDTNPRFDR09KN5FTGLQ6H4EUCYG7G6AHH398XUNEMSW08M067F4VQ5RLZYBQA7WLPR2KW6VMXCJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (184, N'Dr.', N'W4C2GTGQSJ78ZFI0', N'TD0RRD', N'G1K8DNCPLQZBIIVRG3GK0S5T8Y9JJ3W5S08RN3R1KH2P0MHR51DHVG4OVR0EDT5ITTJH944DCE0IPGTMHHDIPFABWKVW2DNRCKV62ZI1XZ5GGLYFYEXWFNSEJ8LO98BYQ8', 197, CAST(6884.26 AS Decimal(18, 2)), N'7EMQY9012FRCCO9ZJW3EVBBGJFA0KHXEM2DKCLS17VIA0Q87XW3084SV366IY0GKHDQ9AONX417ZS0GS623NEW5H9HH5E937EYTM0ZX895W6XS3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (185, N'Miss.', N'E1PZXKFNP8KVS', N'3HKF4LWY39CP9H7FWI7FQ7BI2WF7BMYRR7K5H0DA61TRAQ7HMX39KYTV61C76OMGAL', N'4KMJHYCKQ9UUALFXOGRBPSHMUDTRPO6P7GTVBUFX2224PDB3TANIZWGC20P35KV134NURKLT0T9MQCXH2QYE1NPBZHSB5BSI701LQGB8PTI6NTMP381FMGZFEBUAS9', 133, CAST(12006.58 AS Decimal(18, 2)), N'PDCVXT5K78ZS7HJUY0LU7TS75UE90YKGEFF0X7ALS8FRZ41SL28X79VWL4Q2FWK9OJER1IXRPZ1YE080TMNYQM95KJFSH86WO63GQ9Q35G787WIKWP8S8MI1987I34AHS5A7XS9KVKS9F1XN0UWRZDN2N16I18Z16PF2MAN3FNXOT8M8AKH97IIFH7KVMRJMKR3QLV1P6TCCGY9FEX7HRQTO70KEQRHN3A415WMFIR2E65YIY5HOK2VTYEILAMZFBO85U79IARYZOFI112GLAS31FA3QD14WRM2HXSOQVYDS3V4IWHK85E5IL6QJ4J49N272C0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (186, N'Mr', N'UAJC9396A6XTHLCCGXQRAW4PZKWFRLVUZGCYF29WG8QJ13', N'2X1XW5W', N'O1QFPBCQLEPP85JN5U28WADWQ0L6EL0GF4T5WEWDQHF0WRRA', 164, CAST(10203.19 AS Decimal(18, 2)), N'8DQQBEAYJ6KTWGWQDHKWQ24LBT451N26WCCUFOT3A86DKQ8SQBUKS3D594EIA4XW3EWJ41BPOGMIVQ1KLBEPSIDTZ6KA9BT5BAA5TPOP05VBGVAJ3TWYQ73L03KXG0FDNG7LGWRWMPONM1C3W17GEUF37O4Q4Q8ZQIOZOP2720C0JFYZQG1ETZZT14ERR0RVGPX3DCF7Z0DDIEJRP50OPU5QJVYKBAF29GKTIVLD0UFTMLAMKM1LZ26MJ6KHDVWOKA32UQ9UJMOUFC4YKC0O8U279YABB4Z5YQ8BH8RTD71CEB771MW1V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (187, N'Mr', N'UACSN51SY5UDO7UEPB3U19DWENTA25LNVH24ES8PXNETLOK', N'ODJ8BPYLDIP6TDOZGN53IECHOS4JKZ74NP4HNS0I829XLE5O82H8ZTQA12JJKE0EBKJ386BNMMUF4FVANFBIHY4UZUGL9HXU2VL0V1G2QULCYB5L68W', N'OPFQ0SENUOOQ5C0D993CE', 53, CAST(1064.80 AS Decimal(18, 2)), N'FQ7WSWFXJFNIWO3TGBK6A1SPTXQ39P7Y9QAI3LGVEFNLPVFI385LGPWDXI3U5COU8O95DLQVVPSVD60XH8Z1JMIKTWKLHLP1RTD1MA4IIAPQW1ZQI5CXDNAM6OBG05DA0Q3KTZB73HI9WROSWU3C8RN4IQUYYNHDWEP5YFWIU4TW41PE0JK611283Z134D9FZ5CH2IUHXKH3YR0H0FYE3BBVCH2YETEGVDWYP7CHP28HJYABZJ2OFUCNUG5KFV33518KU1ST2GP13TBD6RZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (188, N'Mr', N'MT18Y80LWGEZBQ', N'3IWD4EPQD5O0D9TUFLZ8SMCRVOOUE0KTRJY8K6W2CZGFOXXVSBTA4UQ90PTGPUBDKV9TAKA9PXWS6W3XQT226AOXTP7UCGCIO3VSO4K81KL7XY34LVPWS96A7C0LCFW8K', N'RYOHEVCZZ9BBPWLQECFH1P7NL5FMMHOYGXXH1J', 173, CAST(12424.31 AS Decimal(18, 2)), N'RP1019482R2UZ4BIQQGXR9MZ5BK04REOV8CG07ILWJQADU1YHTMGA12');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (189, N'Mrs', N'SJ6H64P0X2DWE', N'421A9M8T1MPHZUL38HQGPEWLLC3YVLOCMJU02BM3OZ7KKPD5087EI4OP6GPWI9XGYDUF0K1XUNSQ7B0VZYYME9UHV4UM', N'IAUPFFUM3SJUQWXO2Q1W9GQCHKDVRZ4OVZW660R7RIBU3MY1I8VQ0M32KH7V2YU4OUZQZRH2ZT5R4W9VMBCI3DN8VULPSW', 104, CAST(2233.86 AS Decimal(18, 2)), N'31UQO43ADEZQRVHJ7V18IBLB9MIA5XDT6VDYDRWSFGWZVA6MC39F0UZRFJH2LT5G06KWIJ6FY8T2EMFZFWY1OYSCWLITAT7MAGYPQA3TXTGR0WDS4INOU4R2D80X0C5416SXOQ85S53VH0BZ8PPS6IR6OVCH96TLOBQU4F4D9HVO0WKCW0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (190, N'Dr.', N'KBP34N8', N'PKE1RM6VY4G79KVCXHVFTXKAA2PJDJVQFC52DPGPU01TIF4OZ5XNZ6RSZ3Q', N'SN759N71RRTR7HCXO8C9RMB0A6QU45S92OD3XQZ8E9KRAMGRJXXGGNE5B6U2WCXMYJOJ38ZX83UH1KQOQYB68CSFA7SRVXB2CYTQXWNAYZ7CTW3RF6BX0QELR99WG71BS', 198, CAST(4501.67 AS Decimal(18, 2)), N'AMCYJEL8SDQVMCI65AHVSLBJOM36SAZL9HIYBD6FI6BZIM9CHPF1F5WOBT9WBFGHE5M4TKVR31CL9B12DQO2VY54LUNI4A33PTLCZ5IWUNX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (191, N'Mr', N'DPNHH8YE8E7XM9E7DKXT35KCMQB4PW62HN6GUPNH1JUZ', N'XNHE8PSXFSZ815LTWRSVX0K8L8R8KC29YRR6IMKSM7965P', N'53Q0QTB1885GMD30CPME1LK8ZNNRTQXV', 222, CAST(13776.92 AS Decimal(18, 2)), N'SAEZS6JLQEMG0HJZXCNTX9WGQO287R770RBAFNQXRICB75CHMJZI04GJEY933BDZ6EG968JALP2FWK9KCLLOSP7WBSWHDNUG5D4SP2BEZPWA20MTPOQIPO6H6JYEB2WYVMAJGGV997O2TXUA53SPWBQG6NL54X2XTXFFQ3D8TH9HZ4N9PN98962JVTCSUQ4C5R9WHEJ1PJVE29H2ZCFHN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (192, N'Mr', N'H8BWHPJQF084BU', N'TKYV8BVRX29SZYJD2QPAAEEA9608QQE2WNYNLHUY3ZU38TKT2U7GFEAF6NL1A', N'0R01EFHMZH5GANVSFVCPEQJJI126J8HA9VLM3ZX94R23ESO0RYDUK6697HJDCB2Q0', 138, CAST(16271.02 AS Decimal(18, 2)), N'NMUWKXQKE2CWC8URSB37IQANGMCATIANOB3M1LTMA55S25X877J3DGBXB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (193, N'Miss.', N'WTOC74FY3YDNX', N'17O7WC0WRKVR6BJB1GM65WIXMHDJHXVSNGYNE1X8T62MKN8ZVVM5E4H', N'6F29PFY3KMOF4PD2ELUNP', 246, CAST(7846.11 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (194, N'Mr', N'RKALM5I0776NC2MXBJVWK7UIRL2', N'ORKEZHEUO24QCWW0IEDYUWDY9DNMBQDJYTZNGJ8BR7XHJHMZYLN0RIASDL4LTSJYOLRIX8JY516MYVFSQONP3DRGI69VEMHZOZSXP41Q2OVPBOTI6CV54TVBTB0QYOKIJ7', N'PBFLGJWTPB3KL9XI9YWHLKLRDT0AWHWD53PQU3ZF7RWDCK344VBWQ8H5QN8NIMW8EQFIJ6O5ZHAUN7FSPW5150MWLK06UBWLUOYL5LKX76W9YNII8FYMGV2D4IXY6IANKOZY8TN4B', 115, CAST(5681.25 AS Decimal(18, 2)), N'FYLGQVSO8057Q7HHWDLHLAO32LY6A805BU5V0UE90EXW20HCMVJXBTL59HD5WLD00ZWV2MG2ZBH7DS024MKEO2TH9ZMJG8DF0XV33MA0FGY0CDSHGB1A0YBY5EL2ZXLQY16FWXZHBKZ74T5V752572E1LXXO080IV71A7CKJCJYGZ3TC9PUUVGIVM5UZ0AG3KHCWRUOVKITO4Y2H3LFBD5MFO5O1HLJ12UVIQXKE0Z9CMURN3CVFU5QEUX7L6NDZZRL93KQ600ADVASUE0Y5P37W4HNTPY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (195, N'Mr', N'8Y42M9NFXJOP8WMH5KRCC5MTS0VKQST039R83', N'Z2H2MMXNFH2', N'UZ3CYY2IXFC94ZMLHMOMROV9O9NJ9ERUA913ARKYWOKVAAKZCNC1FPF53UNOBI8JNIZUYJBP2PP340YDON7L1QELTVZF4VNDF07SBP1SCNYQZC13V90NBMHW', 36, CAST(5747.90 AS Decimal(18, 2)), N'DMACU8IKJLPETVDJJ5D75O8AWKP5LWXG1RWQLYXMWFFJZOD1QY3NCR2OE0GAJCYMO8C1YMXL7QBQ9OA76NENS94AP7BKIM3JGSUQCB230IGLFCFPP94VYBUE41CQBC3LNS9HTJVUKANATJVCSMV9I7K5YGMAYCSNFUXN2XV6E9AONJLL6ZXOHU2F74IDXKW8H0VYL7AUQPV8XWHEU13YE35KRHFYFH8TD26NONZYP2YSZUIBM4JWHXTDUA64SCF8G1VUPUP714');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (196, N'Dr', N'03F60SU5OOLDC7UPW3CA9MD3P4PNMZ4DD1JOW54TYMC7', N'UCRO1RCUV4H4E3BRD3C64RUFOA8I75FTR65D7ZIQ6C1ULDNIB69B5W02HB0RJUNPOND8YXJELMZRP0UBMP61W4OU52VWZQ7CPC6X0FKDMVQJW9DH5TNLTKZI3V1NEUEN', N'D12JVL62CN3S62YME9ESOLHUWJUV02TJBOXOY9H2RNNOYBP710WD34FSJ8NBRB29UKHH49O5RC00XTWLTMUZ6GF6955QL5BGLEUDT83RCQLR3EVQB2I4H23D4A8Y4YJM1KFIZIR', 21, CAST(2577.47 AS Decimal(18, 2)), N'B5DLXY4BAYCBF8TTEGV6DNPCXYNLSEBUCOH785N0493QGMW0BR6YVOF1OZBIJWNIZRQLCQ8QJCIG87I1PR3KNESTSF08U4H8MKQOVAOKIGEJ5ZSGH9TSS2VKYXSWPZWEU9TNGT6E2I16Z8NTNJRKBPFKP6PXHRVJK0OW640O3EP90OKQ9Z967B25T8YA38WANHMZKRMJI3HXZ6J1LZOIIOC9XI2X6QKUHEMJ2L6IDPN3U55NOWO3KERY5C11PPCSIMF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (197, N'Mr', N'D', N'DTXB65TE0D5XVPEFAKDO4IMYHCPBZHV4980NJDYOU6T6UK75N8390YWU7YTUFHFII1OMPQVXMPUXPF4X4JOQDL3BB6GKJ48DRANSWLGXC6NB4Z4RUWPVSO5WXDAIAADHGG6FRB0J3RE7YR6C1O', N'I2NFVO2U9FEJN6YIBG9J04NE7ZQJZCQTBWLFFNIF7DPPJZYUMW7I88KDF97WYJ', 10, CAST(18948.03 AS Decimal(18, 2)), N'J0YZT55S18FSDE892HA2MODPK4SODVL7PK4OYOAE9YXWX9OBG3Q1CCYVN9FOCGF5N72S9KBD7VTNQGRBGH795JVCM91O8L1SJR9Q6V1VSCUGJA46H47V9603CP50JM4LU04Z614KFCHSPETB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (198, N'Mr', N'L6DCOVSUEPCHV26JOK7ZBO5SRYJB', N'MEDK25RVJAXM2S6VNSPZJW6S1AXY66XHMKR22W390', N'WOK8QKJ3NXTBMFYU70VX35', 16, CAST(15680.02 AS Decimal(18, 2)), N'U64D6JCQ6DGP1B578LJ54ZGZNFWO7EXWUVOF08OGR80NOUE0CLGTA60VQ4QQMOJSGKV5NP70X2DVYSBS0WCMY4MOVTOVHXU3P873Z9DMDFV8S4WYTYPQCWUBY79T0BJZ8A5QL7TRIP8I8EVRWQ2J73QTEV5RZJL1WVZHY6DL4Y7MNB2KBIWA9ZS4JCBP21RZ36MDEESQDGE9V353SLFHMBSW3UXLUNJ378JHOP5XP6WSLJ9G78WHMACSEQ9JG7VPXB1NKOE3FHRGFZBKLHELR1GXVQ2YFMHIA6U9HMVJUT14IWDF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (199, N'Mr', N'A64CO3H8NGIL65ZKO', N'H854CFSWJJBO6Q8LJS7TPCCF0H13SROFZ3EXMWYI69NE6YD0UHDB26Q5WP4UDO4SUVO2CAYMTONFPY92408A', N'K2C7Z5FMHOJS0ZR892SJLFWYYHE0V2MQRG05ECJX7ABM3NXVGSLUBLM55E9IQFRE2S1KYLTXJUBB3AUBJJJ3HRF5TVZZ316SJXKALCWVYOBGAB1VJYY7W', 224, CAST(16803.31 AS Decimal(18, 2)), N'PXYSAYVU4RTLGNS0958413ZMURX0CFZDNIQPJP07YFCV1XD6948Q4AEMYBYI1VHPRGYXW3HJ506LQ4LXDRQ8689D44Q7RH62XN3LZG95NPL34SWUQ04A49JJ7KSSC9SNU3N20ZXXHLLGM59B8WGQDWYO4JEENHTDXY904TTQ37TJO2X1BGKGS19Y4ZYHLJ9ZS8JNV87E3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (200, N'Mr', N'QS2NNRD4X1LLPCG74I756ZPB13PD4I672OSJK', N'CDSD91WS44H5UJB9BNKIRIDJBFYG1QDGTEIHWP392TPK5AUFYTSDNRMU081T3GRDR0BG1TDLKBGXSTD0LIH8X0S2SNHNN', N'XADWQ3LUTHNJR6PJP6NO5SGYUIT3G43ZVVZ9XPMT94UTTQJV6Z9R', 99, CAST(13894.96 AS Decimal(18, 2)), N'N53E01MC27XCKVOBV5UC4KYTRGI96395C2E4VQZWU9G12FNOYKC1JRL369NKJC6ZXRZHHKF56XHV3WQCSUALR8LLHBXL3FDH3');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (201, N'Ms', N'JDYK6GN2Q55Z1GDJ3R', N'5L2BS5YEE5F7SCAO26V07KZIGR89ODBPX95VVG08274CSP7GR3LASM3LMJV1WPP0TPAI6FTL6MYZFMPRJRILS0XA6J9BLYBDH4I3FO9BAZ4', N'7I4UE18AHDOEONV6GLZKTE1XM54YXXGVBFNDUFJOEJRQ5E52NPQE96QSG679W9CKXS', 172, CAST(8826.67 AS Decimal(18, 2)), N'4AF66E46VM9PZAIBRP2K8P6EZ6MU2QKZRMSGWMNVGKCZCSBN2RNOFI8F3160SA441AXCH2E5264NC627UYSA3VJ9DDCVFM36G7X1UZ50DIM9EL2XZZ6TIT16QOY4PJPF3Y7490DVTRXL9AVSAFWGGAOM6RA501AUS66FDXNYLB0QWGWGT6TAM8Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (202, N'Mr', N'QMJ200FUDI0KWMHZU7MS9OZDK75GQUJL1GU00BXKRLAJPL', N'O36ZU3H5647TSZBM6HZ7ALHA4MBVI6BTWRM3D9HHH66DXPBGDM5SZWV2LVV7SMNZTDX0C89WZHQ4F4DEBVIV1ITZWJIIEAPUJ6JJSA35D8TH6RNGIGWW4RYBKX4SP', N'80HB02B6ANBR701A872M5PVXN7AR467SDBW26DPBX0F55EZ8UY3CV6XJ5KOTSJ13FIEV3Z4VIQO49PR871W63VX6ECXLPVJEZCPNZ44VU8T4HTAFTFLQMV0KK8HR1J6M7A5XZ383W1', 246, CAST(4276.72 AS Decimal(18, 2)), N'AKYHP7URH3S24FFDRXU59XQQUUCU7Z7J7D5SZ69EG88TNUBDRGJODUJCU7MVU0KIV8VR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (203, N'Miss.', N'DKHIBGYT2M5HSUY4IYFIFSGYJ921NDFOYYRW8', N'IPSVK8KTM0SDITOBS4W1ZXDSQR88ZU6AFMP4P', N'U1TOK2HSA9SR4B53RMDTA26W7ODGP6ITLJ6IQJXPJRWDEI1LT0HHJ71SUWHWP123RZ6K5NC8PO9J6THOMRMOO0ADHDNT10ZIOSLF', 22, CAST(11830.51 AS Decimal(18, 2)), N'MDLO1PX20IY2QGI5DTTYRJDJFNQXFZK442Y0X5HMX5LCVXT1C2HXFOM1AW9DZZN1XUYNII87C61MX0OHTOKCHMOGGWP0W3NXHKE1Z6IUU9L8N0398RKAEBKB5H7LS7B8J34DMMIN5QH71FTFTFS4JDI603VIYX1NYCPJWPNL8W4OTC9QORSDF6P5KXCIR0P8OU9PQ9J3R6VM9UCNU4T65O8RNKYYC5T87VZZ3K0E7OL8A2WQLPOM6I30MH16BLQMC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (204, N'Mrs', N'742MRDVT5PSHRLA2TL3IZ2EW6O7HJU31V6', N'6FWOUV4R94M85ZWORLBZ4SZCURUIXV3KMHYH5A2IOZI3MQP7DRV4SP6DFKU21MTD11MN1FJGISB5AVQ32M460ZSWAK1KG0H2642K316', N'GG6O9SVYHL1FS9XFDEQOS3RZI6OORVE81C6BF0F8FF0SME9Q22ADUQKDO652366L7TDG3MZCYI9C2ZD3XYMPK0DBSSM8VD589E', 189, CAST(14924.45 AS Decimal(18, 2)), N'FDUDKA4FYG2ZGKN8DNH62OSZDLIU2MXZVNMJW84EIQJMYM0GI38356LQLVZYRACCJ34TY4B5I3OB550RK1BZEUTP2VY086M7D73VH7IER3K2H9LFU8DPZDYP9F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (205, N'Mr', N'AGS133Q4C86MT', N'7ELZE1', N'T1SMF2XECG7BPT155KH17F2OA0QHLC13NEK24B6MML0UKHWFT70NRDDDZ4CFCGTZF', 101, CAST(12703.67 AS Decimal(18, 2)), N'25AWCGHXX25ADIX8B9R7SAI60TW809DM2GG8G68L0CNDOY0725MGH7ZRM4WIJ8WOOJ7W2OR4157FM5H2TP6VM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (206, N'Mr', N'W46TQC5Q6G26DABMRLKV0L0K0E9Y1N0', N'JUQ0EHMD19QCGDY0IB9Y5T5Z0G6YLESH8GHQP03KJR1BDOPK9E3O52XQORZXBORNH94ZV7AH8OFERUMBRLO6A3B6JR2Y058VZDT4KPP24LGHNIYU4N6QZKCDXXG45CG2FKEE0IQ1', N'NA9Z0TEVELF83S3BODCDB91630ZQ96S0EHUM5U769WZSYR1JB0RFN1RD93W0UNL7SETLYH6T654FA98CZGE9EDDCPGD2Y6CLBRZJXFKUUX9HXC3ZUJ1E9CTF0GWI43VZTI3I9OE', 46, CAST(12203.64 AS Decimal(18, 2)), N'4UHOLBAP2RFZO5Q35DDIFBZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (207, N'Ms.', N'D3MPW75ULKACYWPFSQHK1YDA4MTB26OIFZSANLPKGP9GBNL', N'M2PMUJ0S7TDZIWF1', N'VJEG3VFCCD7E5YCZYKIHI2QQ29OE8KQ65GIPXCB50J5QWHUU64KO5W1STOEU713SM1', 211, CAST(11217.70 AS Decimal(18, 2)), N'5HNUPT212REDFD2FUB3G0NHBCQKSI4ITVXJ4OGZ8OEXXRDNRBXN38IJI0BHZ9AJY8LHITXREBURLPJKZ2SGKGFKCE14CY0ZEVZO5V5YD59RDRXSGRIXGTYHT054STEGBVDQQVE3WU3F6N7LG8OLF3JLXHV5Q15K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (208, N'Miss', N'OT5A6F0EPBK9ETREVRWZ4FS71W4BOXYG1QM91DB0ZDKB0F', N'6N8KXR4D123KTMW4UCHNQ2EFCXJ33XOZCKB3SBPBK9TGW7D7GUOJXDP38T7Z81A3E379ASBIN63H9YJ5JBM', N'OFM1M8DGZXZUKFT740108FPV8XHXZFD4U85FJ2XGRF2VTUTEDTZRL0Z8PQTORFHJJVZB9EN12L9SDU2E42K5FLJU9WPT99PBYICYUI5Y5YOZR6VVOE', 99, CAST(14336.66 AS Decimal(18, 2)), N'TGID71KCF0LQJB6TKNK4S08CST909DVPIND6P79639Z2XUD6OB5DLGYS85LDSK314W7VY04CED1J05FXF3B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (209, N'Mr', N'MXVKKRMZ91Y99BOQRC48O7ICIFWZQUG6LQIDSDEPEQ', N'942ZV8VZ3P2IYP2SZ4XNI5WQA7UAA2FWE1U918E1XCEX3KJJVQ5FEYQ38CONDKP1A63XVSRRQVQ6RYMPOAEKX0IFAQ0OJQNCMDNXHLO3YDPI8KC9Q', N'OVB3XC52CPURTWXUUH4JMXLZHXJ221T4VP0GNEELPFS9B7V3UC1DKUYRABM0T20BVQ', 50, CAST(2248.88 AS Decimal(18, 2)), N'7H32OKXJLVEI5YX1NI7O7TZ8FFR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (210, N'Mrs.', N'7232OANSZW7HEFI24UM9EKSOITAXEXF', N'Z365', N'3VG7F3IU64BOA1G', 69, CAST(14714.25 AS Decimal(18, 2)), N'QOXO96UNS56D2LQIYID27E9XVMPEIVN9SUSXYQ9Z4A8HBUMM2GAW1PVCE0SMGG4XIXK7STK78EYW5SL103B2KQ73YGIXXNIO6AZD9EU9W2OMQZ6MERLC42CSQH9BAMAKWAQVT7RM916I1KCZAWJ625J3X6NS4IZ9S3QG8BS7ZY33WUQ54A1D33IQRMXMJZHQ2WPXUWQY4B632G73GINUHM5OKZPLE6NZHC1Z5SA7J29RXFOBFU51BN9FQ0DU74KXO6MPF7XN7GAEDER5AE6J0LOT3L84FFZFHB2QTZW8WHTVCU2C98JTY0W3ISLTYS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (211, N'Dr', N'XTA9ED8P', N'9NNM4S3707EJDBO82MBLJBZ7QEQYKQK5H9DATZJAV6OBU1YY1QWGUJJYOGWQ14M9M823YEF320QDMODPFSWUU3BXQELD3T9QJFOMYUZNATEUT6CZ26A97SFJX5DJS208R0T60RQK', N'QZFK0R86BSDSMFGDKAS7D5L91ZRMYMCZCU9BG6VCMAVNQQ7ROX3Z98VKE5I0ZM7PFDFS54XEFGK29YJBS0Y0IDQ4ZOXANUC0367DAFLJZOJSNSBGM68', 195, CAST(11113.14 AS Decimal(18, 2)), N'RGVW1B0BBIXNIRSH8IWV7V6HHEZ81D2A392FHY118W8B0DEBQADB2X1VADFMBR9YFNJ9PCZAGUMANUH30OIQZQ757654IEQHMAVCT4LDA3U7AQ8FWCMN9JYPFD1J7VR245NDY49V25GWVZVHYQ76S273C6XF326EBS352UGS2QL421TFIKLHOL91YK1S6US0Y1L3WQE39F42H30ACIWIQQJ17ITOL7XK51GQJS6I78G7KUJQFOX9J9AVJUIV9KTW4WXZUMY4C');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (212, N'Dr', N'2H9D83YABAVSHZMAEJVZQE1HDKL48NQLX6C3IA9PBN3NJ1F', N'9J1PG3J2MAWIZIR05OTHGU8S52TC5ZB', N'N', 25, CAST(12063.69 AS Decimal(18, 2)), N'GH9BHCZ39XAN0VQK6O9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (213, N'Mr', N'OZZUCPB', N'QGX9ETG1TG6R4PRH26V2W3CEA8JDA7XMYGSJKHMB8SNZOGBC9Z49JN4JY5A2QMJJSOW8WKJJT4FCQTK32', N'62NATG7NRK3JZ3Q60CEF0TTXG6DGNGMCDW04QZM4CCXZP3T7PG6WK86C9PTN2QZAYR623MF1Q92OWU8DC6R6AQR5QOV05Y2LCN0XXQ43045B5HGEGGAWZSZ8Z0', 206, CAST(18774.61 AS Decimal(18, 2)), N'9NFJ2OXKVSPTXLSTL8D6W5BWMHV289FAU2OT2P9TFF7G7HQE2XZYB3E3BIXKSVBMDFYVXZQWYKRHYVP4RGZBAHYRNLIJRO0K3L2RIUH3630RCX4FTTTBV0BWH77BG749J6DDSXLWYV47H7EQG2PYVOO296ABN5MZZQ75JRNW7WCZV4F9SHVDH5EUIA4LMA9T858QZ96PFTRYCO65R0I5A9HTBCM8N19WNJRQVOAJA6YODGIT3YUMS3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (214, N'Dr.', N'FS0OIU1NK9VANJR3', N'XXHPW', N'FRFVR7GB8TAFL2O65KGZ87GJPO6MJNSYWEOCL9E3O67L61OTBMUNJ147AV631USK1CJ7DBLW6CB20VDOZCBWT4EV9H1P3A2UD', 108, CAST(5638.02 AS Decimal(18, 2)), N'ZOEFNMY1EJVASXG93QYV4BSGUTT4O7N3J1R1H8NWC4J4I6QVNPQVT8EOVYLTTTD7WSQR6ESV32IZROYO3XHYGR9BM26INU3IQC7PFZP8XVSRPEX70WPVCEQ5IF438979Y09FG894781LYHL85ZHQ475CL27ZUM0NNJTP5HQSN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (215, N'Mr', N'5O3AEXC5QG9NV97UNNQAL7HLF2A64747WK618', N'E1JH1620F4OZJ2FOFLFF7RS4K6ZRPL22RRTU12IN1EWL5KKZI8HWAHYN8EWU6ABU2L8R9LND2RDSU7Z0LZ8G35S9S5LN6NHQ32JKCSQXL4UJ45S1FV862UQXSYY3Z06', N'JTHHGZ1XH6P26FII3OIVRWXNYWAVSVAHODBK6IWCVVN857AM7K7DBIVM', 139, CAST(4907.24 AS Decimal(18, 2)), N'O3D560UVX8RG4QUWTE099L8DYEOW3N8P3IJ1YGV65YORW6E2U8NCREC3V06SCXSA02DM6SYDIU3AWHGS0L1UZWXP5G6Y93U76EQUSSV2AAUXA26EJERQWYA44OGQM03E0V4HQMZ8PY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (216, N'Miss.', N'1UNJRDR0OZNGZV1TOY6HUBM60JB2RB2', N'AMOROEOT9AVZB95NDJ7AEAO8CLRDUMXLXF8IG0D07FXRYRMJTBQFSV00XFF2NAZNDA1V0M6C673ZDXALZ7KIVIS', N'UJKP54LW8DS3YCKS60', 23, CAST(16003.95 AS Decimal(18, 2)), N'P10E3ASEVB3B74MP4B5G96FXEYOOWFJ1XDK23ADGTL83WKWD3WVWKIAJM3Z4L3IFR2DTKKMUXPMOXB0U1BKZKMGE21F0A9UQ3TBU72TJA1ZUWMLA352AJIV4LYRI4MJNUWL4Z5MZH1PJNMIGF5W56K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (217, N'Mr', N'MALVM2G3UFDAIO7952W8UQJQ8HJ72P8DWGTP966MI', N'E8K0LADXG9EOPQJ65E9KS1N05U3FQGRVHZHS15RVU6I3ILV8ODCH889DKKVR7X6ZIJ6Q9Q50NEQMIKHKYUQD39M9Q37HAZNWZIKZE5ZY8CUUHMV03ASC6TV8WXZ6IOQNQTNZZH5SVS4RFSR', N'9PHQLNO8OW55IOOCZCN', 164, CAST(7481.44 AS Decimal(18, 2)), N'KX798BAEOHBZ01HAYI3SHTCHYFA3ZPEHAP06SVEO7M01BMIFXUYM3RORLPAS16FZ3UPA0AI24FLVTA6CXU55QRDJ09L3KLM070YGX7FNCWIO6TYAJYV61A8BH6AROFHISKNSCPFQFISU8PC6BBJMPGZWRNZRXNYXEZWL65YTJ5QIHE2ST3GDVVTBLR0OQNTSJVF9SR05DQ3KQGFDK6XT7L1J6L0E592VBYZLZTZ23B05S8L4BN4JPZKXUW27QLZ3N79RHTEQ7VQWLWRYZW2I5I5CD1R2R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (218, N'Dr.', N'NEXBNBB1WOEUBVQVN4J81460D1UI0ZVAQR34TWT7V0SKY2', N'87DZ7BQ5MB2H6SFJM74NYV0L5ZGDO4T45VYAAQFE3IDOEOM3DL47N45D6SU7UCGIHYBAU49VRPKGHC6GCD03ZMG1QK4IW8KR1U6GCC88B8GYKOVULDUGBCIVHAJ90RZJ5SFM6Q', N'Q1CXUHI88ML5IZD6CSY1HWX027AE9ZLGIA47DKW45FZ1B', 173, CAST(11104.15 AS Decimal(18, 2)), N'BHBWIKZTMI8DCU9OCX437UIHY41WDG1BZFK8KOE6Z69K9R6B3POTYNKGYUYDJ2G6GXDX904OJX4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (219, N'Mr', N'YYEI1291J8WXMGT1WS44JSM2RBBC0BM2BWWKMHU7GQJ', N'05SSQ5IH2PAWID3GPCAZ1SY7K8WSR98NU9UBIKRPYTHKQUH61CQAWR277K8I9PPTHM28ISX4KK07ADHPRQREIXR36M4XC9G83O23S8N9ELPBQVWT3IQJYAAJVY2WOZSB3R3M', N'N', 112, CAST(6749.42 AS Decimal(18, 2)), N'LY76YPTOR7CBU39QQ0NXP33BD812L0A0JJV0MRFT8RE9K136QDXJA6BHUVTPNR2RXCSB793YKUOXPURB5VB72QQC7E6RYQ5HPMB89SYHAZYFIDS04HKSFVO6LF3T3BZUP782JI2DXTW2SBUTL6MH5D1TX4MTO5EYZ3QA4PGLF6VMYLEAKA7XPIOB5F4EW8OSEX3OKJOVP12ZIFUBQB8EXH9HEE5PK2O6H371IPQ1LB7NFPTQKSOKZAUXNL96EYBMCVHF8TT0L7SL9M1OKF5SD37789DXFJMM0KBK8EHRZNZRH9N1JLMZTI88O96YFVK2K6KPAHG5XDSQ4FPY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (220, N'Dr', N'WY7R2', N'DXI2HZX8FDBPAUUIXASDJ7U6RLFTE7YRAIPK8GHBDBGLQ6D5XS6HA9R53BBVK3U7EKFS49AHSH08R8FK89VL1GG1QKHW4LQ9G966QK1O', N'BIZ6DM7U4CUM73Z814M7V5TSWUV1XVP3KR3Q0E2W3A21PAX1GQ06CGN5P7AJQ6W8MR2F088N', 223, CAST(12419.93 AS Decimal(18, 2)), N'CDUXNSHB2WY7JB42X6BPYQ24G2GQI48K8B3HP4XD2D8LHXD1ON78E9OLBPGKCRTYNEZ78MCS9XMLIHNIOE2VW06ZNI60NC1AJ9X2Y5T2AEZHM33U2XWYPY1N8ZKQFC4WVC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (221, N'Miss', N'', N'POT8JEUVQNB885X4E1KRDC7RRRI29TN862BRNS75N0DXF17382CJHW5DH1HRVSMW0216U6HLU', N'Q4K3R2MXUL7VIQ34X1S3J6XETEY7H07HC4MB22X4OMWKPD41YA26GJIK769D4EFTEPIE3R2V4NFW9CPG9W97Y01TL24VTJ09626ZUPX6862S4LAUHS3758VDOPT1M62KN5Q76PLKZ2YRX8', 53, CAST(12370.15 AS Decimal(18, 2)), N'8JKKIKZKI0PDKFBXQG3LL8AUYL3MXA2LA1UBHDDDPDJMIMZB3FEGSQG09PMXHDN8Y42IK0GC2PW8POCBLRIIVMSJLU1RRGVBQANEJHQ3Y1D3U7ALDABPV4CCBJXQYOLMTKHE0XR41FJU8OPDJGDG56GLYB20J04AFR9APWKGI6OGLI3MUJ6HA5HN3WFOUQK0B9EHEENMVXXYH00F8F60TMZA9M6TGWMRMN5B4L7FVKLD7J53W0FEKK7O937S8U5ZB5BUVOBM8R490M3QH3XGH772GG10DF61EM217B77OS6SFXON0GB5XPH3X9DFNB8SK2VDJ1J5VPSO1FM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (222, N'Mr', N'RTXL5', N'4CY9CQJET7H4Q9XYALBF9UEGXCZ192LQO3SSE7PR8HYFFVBR8VVVAE49YHBZQH5QLRFNH5J2WK7SVY1208TD6PF9ZIT', N'ZRAE0FS4Y7SA5WVJ24I5ZV3OR6J8393FG1T9CS14V0RZDFGN', 56, CAST(9359.61 AS Decimal(18, 2)), N'RDZX414O4Z3XXSKCJE7D2A3ZX597XT1INUN9CBNJY68KXL725F4N79GGAZZZRWRBXLA35B07QOEV2J1BX71HOEAED6ZCBOR1EXNCB4WUFWWJUKEQXO1KUAMIAVPZBNW2WCH4VPZSA72RHRJSR8ENM674A42FFXIR0UMI39');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (223, N'Dr.', N'BRQRW17LUMPJ8FFYXNT8Q5T3KA1FV8EBQ8', N'WP1QB8TOFO', N'IWNE3O3OLMTWK1O4DU42M792E9Y43ACQV4KDG0CCQKQ587AZ2V0LCLHBMK0TQZKAA30GGBNCHSC1G4U6ZZ18AQEAM9QV0JMQZGV57UJR7O4K9GVIQUUQYB0KOQT7KRCY6L109P', 14, CAST(4061.80 AS Decimal(18, 2)), N'8O9AN7V1ICW7398FP5CURNKDCOBQM41PID6YDWJWF2J3IQEI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (224, N'Mr', N'Q3FKOCA1CI7TKGSW9RXL5YN7M0SQM7DT04PV', N'2CTZQ7BEZF9YHORKWB5OYBM56JHGN5DMCZQ1CQP2N4UHNRJ1KNXC9ZARQNT6PUQT2MMIXP75L30UH4IFZFW080CCOZBPXIDTE0F0413UGRR6ZG', N'4G91', 20, CAST(17476.95 AS Decimal(18, 2)), N'EWCRF3L4VXYW4EDA7OQ292TMGFO3GVL9SY87OY39LUIYKZAO5TA1OFIC3QAZFHOZCP3666L9LGH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (225, N'Dr', N'34VF4GKDGGY2C4KTN4RG8XOKKF', N'L5E79YQL19AUYDI82P7FGPHAYC1JG95D7PQJIB3UOFDQT75HXIOHR0TWN39XX64R4WM9NYQRMCR1CQGQ7KMYLOL6VUVF26XIALMWKVTYSWU', N'MU16E855OVSNFBGH0B6FC6DNEV91VPAOADXUONSCM69ATDKX8H343MAF', 50, CAST(6595.96 AS Decimal(18, 2)), N'KU1G40XNKJLDGV3YN3U35IMVW4HZ71G7Y2R9PUUFJ0ES3QQA2NMHMD9175K0IYFJ3DFD4U8T8FJ53TR5E6XKFYLKTP1J9UWLLVPQBC68ET87U4YEDELC0V44SUKESPJEIYK841U10P5LPDPORN5V9KKPRKYGSSFP9UOWKQ9CKJCBPIFE5VM5JO5YDUHJ3D979GBUOT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (226, N'Dr.', N'4DTFRXE5M151H2T5JTNA2T0C0XF86FBVOCGZM174XZXR', N'9SKXMIQDJ66FBFET2BOGF9QQ4J6BQN5OT7X2AYSKGKY4F7L4H0WH8EZ01TS2CEMW0HL3IBJ3I4ZUAMBWX1UPROGF7', N'DSIZ4AYK3D1DLSDIUS5W3U0ABSDL6LO3HEBVACIVAQP0IKNPQL8T4IDJR8OBWCDHPYV7HI8IAAMC40SQ4O', 210, CAST(15328.00 AS Decimal(18, 2)), N'1DTAP88Z85JBW5A5LPQIP9Q96A4196KQBRLRQDFQ4V8EK2D2ZBQ4YBESNK3F36Q1KS04JIF89ZEU0BP4X12YGFS0DT45A0MX56TR28JHVHVYXJRBVZI24RK500QPD9Y9DGPTHX1OIL2YKT2U2SAAIKTDLOR2HT3MJLLGUXTXXTKJPMK6XWNLYNQSMB7T6Z6OHGEY7MZ4ZCDO09NZ4K5L5INWUSTIQ0RXNV187LZBWJLMA2SDN7PMULIZTI4FSGDYLF148ESILUOMW0MS0GUIB532C1FOHJIG5M0U1O48F610WW3SVBEBLVNG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (227, N'Mr', N'2ADER5RW51ADHFTI6Z6QAC5MU', N'1G5P81X13XLIL5', N'LDVZY0S31N6YXD8AKP', 101, CAST(5769.97 AS Decimal(18, 2)), N'ZR6Z301B8G90RRBCL24425GYNT557UAZKI2WY9C5ZPOGTR4K2YZSJB9TB7CAUW3E6AG9PFECQY4DH05VPL28UHG888LQX1B3L99JBUVNKN1K7WBB2HL9TUKPU70GUNFPN0R7QLJUQEO6FV0CW9NGG19RPKP4TETX8CW644KHXQJF6D9Y6OJKZY8LQ0H5WE1BKQY2YT8SO6IPIUKCARX5V9X94AG3MFLJP7UFF7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (228, N'Mr', N'HLIC3W8UXN1UEAKYJA5L5LE', N'SY3E4PEHW4AJW5B06VMA2YTWYW8JEBFFO8ZPD036MY9KXI1WSWEMZVEU57G8GV3KPVUO6LN6SFN4O8', N'78CQIUW0EQGX68HS4UYW6PE7U4BOZWP71PGN9MC520DCLQZQGK3GLS9IU5WDI71H18WHRUIHHTT6B1L35K8E', 66, CAST(15170.62 AS Decimal(18, 2)), N'CGQV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (229, N'Ms.', N'RZQ17P5RJ8N5ESYD5MI', N'FVCQHW', N'8M8FXT4QYMUYWBDTHYL2MZRY37SJS', 198, CAST(19995.99 AS Decimal(18, 2)), N'GI3WG5U5HWGBSOYND469LZ0BZ4X3RKO4D4TL7JNHKF1TRJMQ8BYBKL7GISXB8RDW7BXNVC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (230, N'Miss', N'GCLW5CTVG9DW7WL356M7IAA5MFKQBRFI375FEUWVW9', N'FTU4K5JUQQUPV2NCQ688UK7A5W90C', N'XZMOSMN2U1EQI7Z7EP8ANMMC69U9CQ0KYPOVB8JQ5F4KNVGKZVS2BILBCAIISDP30TSSI4W66H48I1OAT9AHXX9F4DI0Q0YSP0KT2N2VZLWTDCSAM7', 250, CAST(4112.07 AS Decimal(18, 2)), N'UP5X7KFH6UFLDJSXC3FLC9T25MFMYVWV4VVV1JA8HT1WXAUR4QI9184FW3SK4TIAYKHHOWWTS74I7W4USNH8DNTVQGYXQQ3OARXCSC38TPGT4L8ZYXSHC9XBQMR8XY224G7GYR1GJ8FN60Q47ZYTXLB1UMM6KVAUNEPOES07VCX3U94QVM0YZ84I46LC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (231, N'Mr', N'AVRXH6U8Y0BO62F9QR2JOTUTZR6PBAQA8ZZ', N'4MNWF1U11IMXPW9YDWSILK8OYVMJYNWJHLM81YMMIP4QMWVA16JD8UIJDZXJEA2EL3G3A0XE96ZWGI220BIS3JBN22V21378MQ4IGRZ09431UM3UWUJ2SAA2RT185UD6YRA', N'J3852KDO4LVG5JCIHHU866FHB1F2RK7EIBFOHUH8PZX945', 111, CAST(4867.72 AS Decimal(18, 2)), N'VVOYK0SA1QFYRXKO76KIVAYVBUE97K76O10H9598CGUVK08BJTWZ1UAKWSMQMI2HJ99QW3E2XC6FG2BAM2PDN74URGKGIJLTDCCARIEGEU2OOV3THC3JTOUB5EYGJYKEQC13Q1J4N9YS5G6WCQY6F2ZPI05CJXWGAOYBT03GSZVKP16O824SZEZODCLPW6KPCIIHHV2CNIDF6FZHUG4HT4GWOAXHEDKLF677IO7CZS5H0KIXD4VF23W81MS7XKX9YR007RY58SH1YZV4S04AH4JB9Z6WWZEEUVI8JHPL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (232, N'Mr', N'UH2KHJHIRJYDZK54TQMG1YXQ05XNA0F725F8', N'EJM9CHIZF9SGY056J4FCG1RNQRVERX33BDGD7AQARB', N'A1TBTRYICOQU15AWKDGXU4N1N0LI795D6B50Y9ENK', 49, CAST(1970.38 AS Decimal(18, 2)), N'P6ALV91QNFXGNRT8OQ8K198D362GNKAAJ4SX9QDP558KHY73PZVRG04GXWHP6K335MWIZVZXCJFW0OV4YZRNPITI0BZC8OIK25FV1P3T0XEXL8F91DR7SGDMSEIOWNOO1UTV8029VXMR4WXSVQAVXARMRT2N7FXD8QWQEK11AICVTLIWHPS5CTQQ373FYF1F08JDZ7DBO9LFYWS6B55HMR1F06N7GM2UGWUK24XABHH28BS6EX3S9KT873DTK6U26QZ128368V54AY6PDGTII9LV2MDYR3Q5MEVIB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (233, N'Dr', N'I14CB1GSTQQ4MHH', N'I0K94P6MTBX9CSZIKM37H5O4KKSY9E4K5E8M5HQPLB9RE44K8R5NN3', N'20Q0F3E2DWN7W5DRNT5GB3JCNQ0', 247, CAST(8745.03 AS Decimal(18, 2)), N'46TWKEEOX8XOF3DCKW53ZFU5F450IW2ODNCMPLO6HEO412NNRAUZD8ROBOHG8E6158BSQQNY7YMKRQ4CGI8713B4WOB048Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (234, N'Ms.', N'I9WJCKBMT8R3RAT5XEBOH4PWHY6F6INJ', N'CCFPKW7DF6D4XJDD3WEL6VXQGF7QH8HW19W9PS6TEYUK1071UE2R9HYGEP84OGV6PG2NN3NBQL781CPG86W36PNJAFV0J14X3NUKXJDRRQ1OAQF20SVIKR00TJC88NSO', N'YAZTD01NBNKI44V9PZFZM6LLH3IZHEDP3442WUTV3QG08NC779MOA0NRPEB9I26X9UFZZTCV5JVWPLCURAS7ROE2GDDHJKC1KJQD7C7DXRI', 19, CAST(9011.55 AS Decimal(18, 2)), N'8MZSRVW1NWREL6WLK40Q5Y01W6V1EMTZ0JC4RBKKL7K5CWJPRQG087X9MXWL0VM12RE2URT8JF4XEUPZN59O5TRSM2ITFZKQLJ3LIGVZW7GS3ZVS8WYULYV80MFR9ZTKVECVR3H6AARYDZOM6QLI0P4MNULV14QWDVXOM004ESKB7XV1XTKIEAJ5AQ7WIL56JUKH10Z6PH485TFQYKY7J7I3CREWT4LTMERCDEZWTETW6AZGAGYYNXMCBG4AM2DLWBLR13DJK1E5DMW1SXMC5M5PRF0W9OAQ18ZVP7E73EDLIHYPK3IOG1FA5W0M2H9WQO4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (235, N'Mr', N'UJ', N'95DI4IPS4CFOZ9KZSZQ5MDBMURE65I4YC70L1KV96PFEKCU9S8FN1IVWTQND4IMM8HBS8ZY84HZWXW2', N'5R242HH79Z5LFCIMGUCL6TC5UYMF2FAZ6NXP', 128, CAST(13762.63 AS Decimal(18, 2)), N'M1CKIF8Q8J69GAB66M9ZSPQS7S4M5HVUDS2JRX51SO1LQQ6R53P4E4DXAJCQAMLQOBWO8SF8G873N42HLCG1SRG9F587LEQ63BWETIJDOGN5W996HV4Y5JYXUN82K7N1I10C7NN3S3DC3BC5W2QP9R0JCZJ69HSGSMNV8WYT71515LUJB36HGYRQ0HZ84HUBBWJHOGW04XH8MZDR5ZU6AAZUUWVRWPOQ7TQ82DVU66DJGJ403834MN00XPMRL53E8R1S94PS3004XGDBRUONMK3JSQBCQ4902ZBPH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (236, N'Mrs.', N'IPDYQ', N'X4EX3GXUB4RAWI4O3T63011T96IJJYYWO5F03OJRJHG37NCLCBT4QYHV2LOWYDBD6VLQ24KE9E', N'9F225SLD5YUTLX2FXKBEW93U24UO6ESFSB6F9I11RSO0RLGH7K83LBEZC700YW7Q6F0AQN5EIAN3L32GNCHL6OUHW722I12VKYUCK6RKE', 8, CAST(4910.91 AS Decimal(18, 2)), N'RYJB0MNW2GBB0QGFRONHZISC1ZQZ2X4OTF3P4BJGWWNV0F4IKM8N10D85690VNT5CMIKNRBF47L2VXBMV8FFPHNS2UKX2IK82IJEWJVSASIUFAD7UM5N8EGUZPIT7EDLMDZDEXPCDM4XYTDRGC2FDXZO1OE711LWEW72A0TXWTAM9JV5BQCUBX8ODBBQIHBB07I1LBHGJ5IJMDEIS9WAOQKHOJOZP2EFIYL10U');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (237, N'Mr', N'J3AC0IWL775SUEJZ1DDWGAK75', N'JLXLLTX775T6QNKXI0MT652XB1LI8QFUBFX94Z221637DPV2I72DNLDDJ0AJ7EZHQYUB', N'KANAE85JCLFLKHLJEIK3VH7S', 169, CAST(14213.55 AS Decimal(18, 2)), N'Z9WB6EO1ZWSX9L0M9N1D2NHRGQ31OSDHYPX1SEE2ZHP2W55THCBEZGGCR5VFBMD7JAYJNZUU9ZDLYFUAL9KCGYIH8L9MJYQD3HIL6L6HHG503VDBALU121RLSGA2P7BA80IGW84Z32UZTHED7XBY3PA1PXTPB4R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (238, N'Mr', N'RXM8', N'ASIYJSZ2VJM6J00N17P1KQ3PIUM7LHEUKC8EKE3TE', N'N9PVHLW6B4JTLTUWZPHFYDDR1R80BY33VRRZFNUZIF8C1PSPQ6WRQCK9WYUQDVVD1FXU1U', 134, CAST(15927.72 AS Decimal(18, 2)), N'4US2DWF2GUXZ7RSA1WUSVD6IPGQYEEOZAKUYPC0AI9H9RBUY5INE9ZERN9CW6GN25YONXTLPWJ9LWXRELSTWQ9PA53AFZ341ME3SM70CXYIPQSUQIYADNRCV9EHTI6QSF8ZITYSERHYRRZKC8KW0SRDV18J7P6TR7PAHTCXK5WL6SK49T5LY9PZNU4GLEKPLN7K1O2JWNCVW672H39EKLUHHQMNOVB5L70IK02KQLOBWU3HM1ZH564ZTP2B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (239, N'Mrs.', N'DYZLLM5XNIKBGD5Z4CJNZKT18I273RZYZ6SUUTXCWGPDVZ4TZ', N'NHNDODYTOQ495JOS5RHE5RL6RL3N4WN92M14689SSNPA6OQRYENMT9BVSIMCP1M7MWH1RBIWIOLH2AZ3VCPP90FTB6CNMW2R0HOA6P0', N'BUHXJ40PBZIA42BDJ6H3HS4MMJVBLSYNVPKX8F04V8JRVLQAP2ENKRZJQVAZ9P4J0UEEIE445C789DR', 97, CAST(14180.59 AS Decimal(18, 2)), N'FU1B79P5OHG1PNYXJKNM50MWU0F20PUXRIBQN0PLEBYKIGGI6295FOWE85H7UM5YMIA6C8AJV28T22DEJWWYFPI2LXIIIHQR6ZXZ596YRQ9DG3B5R2NXQ6JW08KEPS0DBGM25D8AQY6PG5LHLDQFUS10G0ZXPR8ZQV1ZH80EUD7R0TGVM2SC1KJIEMM4EAKYP6YK3L0DDCLGL90MK4BNZWY6CIKVMVZKS82TVVR01FZPZ2X5MZKAYXZT8S8L05QHC0NC76RODBLJX869LF9MAPLV99K2N6ZWOHDYEKXF8WWNCFV0LYZLW36MFS3YMO06BOUFU8V0ITE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (240, N'Dr.', N'MK3', N'VR34OUTHJIHCCXYLQKZV9LMUGKMOW6C2TIXA4GCV44FPE3J2TIYFM0H', N'TLLIDA34Q06D41V640Q07CRBY9H7JQ9D396O3L5QQ9OH7RZ4H149MQTHT9K4SWLZRS9VU62JV09XN937ACPHM0QDFPVU00XUOOQFH3AAYLDMGWTJ5DTG63DQ1WG5B8IU2F8ZJOP62EJ1M4WJWB', 88, CAST(19802.94 AS Decimal(18, 2)), N'SXJUDJGP6E0KARIMHZTJVQCNKG5D2Z32PRTH88L28B0XN953P9JI0UJ2LV9XE3M7BYVIX1D8EQBKPF0AA2NTFK1V8QWDZNO4OTLOEM5OVA49JZD6VZMBGTRQW0A7409Q26VVTBVOWYY5FSB9CQHZ1COV2VSEBYJU1E6C3HCJ3XEHULA4O1UEI9OQI0TYIGCYE341LZ5VDYV3X7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (241, N'Mr', N'1S4XC2KYTWJMB9LB4BE6R', N'ITD9UULB0935J984R46WFD0JUE7XGT0ESA320AJ4P5Z2EOZP6I9CBMEZ8BZ732T9G9D8553H', N'N7HNLBZDKN4ZQ2JJ0NUZHNNDSKC4X0W9ZKVNLSNOJB4IXFTY2K', 204, CAST(18985.49 AS Decimal(18, 2)), N'GKOQA35CRPGU3OE0NKG2RH9IOVZ1KEKSA0CDUQ2V9RCC4527YX8IH48YB52E44RD4NJ2B16WIKS05WDJTS2N51B5RE2OONQ5ZZ7GLZVXQB0WC8TERILC1372CDBXYH8VTN05OXXTW5WT1ETJKNW51E3WS547OYY9342O8NPUKRFW6D0XJSCAK2TFJ4DJSQ5Y6NQXB5AWX2LAZ7PE46NVLNO0AN44A61ULHPJN3LEHGCIHJGCEYFM2ACJZPMO06MR0QOHI5R0K9E5A5JQ7SPBQFSB45KXGXDAULIQVYT87E1SV78T6VG8HA1KYCDCLUKMV3BPNSV8ZG4CDZFWXRQKG5SJKXRI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (242, N'Miss', N'UG69E8765EUE40PXGUSXNTT9', N'16ADY46EIRXKN36W4UOAC0NBPM5BQJ1ERRAF4LA6SSLBWPS66B1BF691JYNBZ', N'W2C60K3U1YVFKRVZ56W', 204, CAST(6728.15 AS Decimal(18, 2)), N'GNCUEWSWI5E08915O6ZXGFU4Z6QAR5P0DNISSHY2N0ELBK8VREVRSL41T8U86H5DFEMKR8D67X9G08SEXVJDAY8SJGZJMQW6V16XXO4J1OJUBN1LGGAAYS2H5U0A8TJH12LY2UH9QZBMFDGVF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (243, N'Mr', N'U8OSB5XTJXOR3OBQ', N'NYQISWSQSIJHHJEBF0', N'8Z6F6I', 124, CAST(11175.43 AS Decimal(18, 2)), N'36FL82ZOR2NUA741T922JLY1KYGG2SE5VUPD1FUIZD2EMWP4HDJ7TCVH8E0AMIMZOIYGHRZDEJ35JKEO9BYO87BJZ84NEKVGQ3P3X9MQD6S98PYNZC0BJXQH6FG9MCYUOMEGUAQ0P8B2E2A9AHN2JKWTC8XHSD407YLLAHTOL0MBLN2357Y5PWA3PL3MD97B3BVGHOYSOYGIYL7P6UB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (244, N'Mr', N'R5RW5KL7UKDTV1MWLJ', N'Y4FIPZLH8V5XZ7X5NLDWVDF', N'FDRD1D406NDV2HXMPOVKR2FNR6LMWWW0HFOHAKT2GQOBRBTGBDGQAYCDX3MVRH4ARDDMTFB4VS40D4VGC5BIF5PJ3BK6YYBYMEKEY6NV2CVHTBZT86IM6MVMNTJHU55WH6EYJ', 36, CAST(7519.61 AS Decimal(18, 2)), N'EZBANHWPE7BCSA8ASMMG86GQGR54EEFJXMX4ZKSZS9EHN4QOCWWJ7VC8IKUVCRBZRSE6C3B7TMOYRZ3C1HSHHVB2APLEQXN1YEPUPKB8LPQK6DGIHIUVZTHVGBVNHWGWZM0CA8MH5JWS5RWW8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (245, N'Dr.', N'', N'JRXOPM7ING1R8G0I7EKVMKKAKERQ24YLOVYY2WSMONAI66W6LUOGTKXZ6N4BUHFIHF2D', N'H6HGF397PRBRYSS0IYQ4N50X6Y0NX09ROC4P6SCF3R636DGSEDGLQDIBFIXB72TAI743K2UQLB0VZ', 4, CAST(13388.53 AS Decimal(18, 2)), N'X82R25WUEEONQP8UKJD389VDPFWPQPFZFEY8T8KVGFU8TIS7KA6CI4VODP1M874OYO7CQZ1CYINTFNK7NP5FJ3HAJAV36YM8A5A4AFGK9UD0H29P5UYI2P5V7XTF4X50VEI9DFW88L6PPGTH15YB036L0EXDM0FBOD42JZCPXQ9GIF5Q4CEZZTZR7W8YIJM85V0CCQX1S8EATP3K9689MGCUDCUMQE7E31BNESEEEC6QFPXITOOBBCLPI6ZZVAAD006REF5HSUV99LENECT2QW2RGL48TEI41SPFJ53DI6IGHBFWRBKIH8N4XEBS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (246, N'Dr', N'DT8XLL205D6H602OIRPO2KG', N'1GAMX7Y924EHK47FIR3YZRFSGR67R0Q3JPJDETVDYP4IQT9C83ZOYEIA1I660RH2DAYVLU1OWQ0A', N'QTH79KKN0AT', 197, CAST(2713.22 AS Decimal(18, 2)), N'XOEBR7GVZ489FJJDMA468GHTZMT5LI4UA2LI44Q4Y0S6B91P3QB47M2G6KC4EBAG0EYCX19HK077OAHPK41U70NOZ5BJSLPMQB6XBPR2HTK6EVSW2MJAAG90RADSPPPYBKGC3KEVCYCDFG93DFG61FCA2650CZDS4MVTEGSI7OXB3VKB09FA8JWV869WEEJDKK9TKFPWMYYDH077MUZ3K3JLPZL86V4T5JQIMQQLJINAKIE7Z2A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (247, N'Mrs', N'K0NW2UI4B79XWTAJHL2H', N'W2MHUZO024469CVNPD6725FVERD1BR8E8N5GKO6RT1B5TOCI507DT2K', N'9NU181YVKZ8D8BJP0FDNCIS3T0S9PU', 183, CAST(17496.42 AS Decimal(18, 2)), N'EFTH1O3KUGQRT58Y9OKV4EJ1G906LE84LKEPP9HYM5R2SWGFAGXAHEFZWS1SNWZF8M58QI807M9YNG9KSLW5GXM65FSX8PAP6BU5Q7OR7X3U5GCGIHZ10TZAZZ2BQARICJSCL3TKW4YIUR1P2CFRP8PCBK6R4D1W5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (248, N'Mr', N'VMVYYETUBGTDNCLX6YAU16ZR5ROG56H', N'MQ32LMPAWPYL6F316EE1TA1PEVWAKVL53ETTK', N'UARS6VK2YX3CRK4YY0VNLX6GRVR789O6QSE3HICTGCEQ860JP1U8U7LX4A1B4CUP8XMZ61HFO279IF7KU8I6EFCI7GY6H0O3HOHBK1COKFJR0BEO3GGWUOATK3R', 139, CAST(3208.09 AS Decimal(18, 2)), N'IMN0UENF4WVGF7XD8EV0S3TG00X2FJ21D99E22H1393TGU5ZTR4N15SES6ZUHK0LTU35YJA5WUWJZ0Z5VY9NFFZ8HUMV3NJJ9IZMQZ1AHYQ788FR7TYJBC5DUVO3WE29AD9G0DFWXY6SZ8F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (249, N'Ms.', N'Z7PDRX4FOAZQFJ8HPMAMRMCP', N'66C084PQBQX56ENJXCODNQQEQ14TISLAG388OT1XZOK5DEO6HKGH46FGFXA70W8J5NP36FU4BREZ5L1BCXBXB359NSTRITX3F00PPL02QC6DSFATVYV2LA71HFFDL2LITAJ5LBMQ', N'2AXOD3RTYV0TVUMZVKIV2A20JR9TEOQH9ML9HVEWKK', 226, CAST(1774.01 AS Decimal(18, 2)), N'OAP07WDMRVAXD2WHXUYYQTE1LC6OP2WFO1QSK96D3EMKMZL3K7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (250, N'Dr', N'4S6QCO5ZADGN758UV', N'87ZXSH7IZWJYUI', N'7GN1Z1AX0KWNR7X4LUXF95JJ98CI06MAHKVKWQ9S3', 14, CAST(9743.96 AS Decimal(18, 2)), N'49G4VVNFUPOWOYU9BC3WNOLVB7UFMR34H7R58XVWWUBNEI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (251, N'Dr.', N'Q78BLJ7QJVURDV0QN4XPBMUR56STHG2RWGLIET7NJM', N'TY896MGNQOKHV58JC46C383PY7VM62KYSEBM3CK9SJ898ZBCQC7TO62KUIBYQTHO3LPHTLG0KWJJZUHZVJVUVQ9MCQSK1LIY2K5M9UJ4V69SMIK01B27YNTDB242TVYYD', N'QWDYU1JRS2N4G2W3RQOSXTYL57CC7VK4CIEN', 108, CAST(15096.04 AS Decimal(18, 2)), N'LRQ9QGA7KSN18S3MKEH7P1EH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (252, N'Mr', N'94J0LNHI4W5U4CH5FQD83T2VX9IBTXA5PHKMM6750YYV', N'HFOUP0ZQYOHH0U6RIPJB0EQSB6QGA08BE115B6L187P5WT2AW2C9F2K2OWJJAI', N'AEBY8EKND4SNTYJ3BUWYSTNO6JXHISXO9XHCDTOFEYS2JPEW111OIODGRMROH24K64EVH6QH5GKU0K4H50GHR95KJ0LQ1ZYBT7WFAJEUAJI14JG6H9JGLNTWYTBGL', 87, CAST(8843.88 AS Decimal(18, 2)), N'ZTDYGTA9NVHCN7ZAHN47VO171U3FD2PV99AD3Q4YDSKWM9W7HX7D99BBR5XLQUVL6L2DWM7RJ6T334LRYVXGUBMZYZLXTI8IWZQ06IBVPGU3G87NK5NVWFRUY3FX09X1XA64EKKFK1QDHJJPRYDNUDMG8V133DVFIT55138ZL7AUPDDFKQ51WA6KOPWJIGC66AVOEENOQE1N2RRUHMJC8UJ8NLGC6OG5V4OEHO152GAI9JHXY11WXZXCQN1SXBI2XWRY2DCSKDARJ1Y33IE4MJ8W6C');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (253, N'Mr', N'MH5XNSW5D1G1N', N'XG62YS0FB4H2TPLWH3GK8NYVCGZGFN2RPQRPPQ4HVM14XZRC3Z2FUY7AHAQHTKZO1QD2YW6QZYOLMTYCPMC', N'G6I80TNP7LLM67R4GZKE8RFIQ5E0GH7Y9A2CJVJMJR2XUZHL4UCCW6ROQZIUEN9QENCV4FLKGXVINROSVM4V22IEMJDO8VICJ6MMGP8SVYBB07CQ5MRNLJLACQS27RPZYCZH42B5DCZ3Q7EE7MI', 155, CAST(9930.59 AS Decimal(18, 2)), N'UN87RY8KDRIUKO9BJP5SPOXOFXDFDNVSQQI5C6ITAHLCKOTFD7O60JY6QJSULT6PVQ4U63ZD6CH83K3R3X15ZOR6RBESDO8HAWGUJY998B0O1P35G1QNR1Q7ZX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (254, N'Mr', N'B56O6L04MSUJ8J785V75BRCD54EZCG3LY3V0T9R9QIVC34J', N'KNWQJG8F0MNAMC37MOD7TBFV9LONCDR78K3ETMJIORQDAEY9QQQ185M971HXRL3MUG228PEZ5VJ1L2KVMEWL', N'3UQZLB9QW6K49CDN8VM3AMA9KIJ5CEVK83V3LZVTTL87RUUETQ5B0FBHKH', 2, CAST(5383.38 AS Decimal(18, 2)), N'UO7ZI4ZY64974OSXNO34289CCXKQ859UMWEK0BIJ2RW16ULZZ32IWS0LFVNKJ8P1UFL897XB6J2AC85ICKR52RYTVS54OX0T2V6R8DQR6RBCPQ97Q57YHJY3GRCG2SN8J98H1E9YU0ZBFL45JXEIQ1CIW2AH09PD43TGHR5BW84HKNOUN6W4E4IHXQKY3RXKAL6CSNOSS2MHXUX9EGUUCLZ0KCIR6685AJ6YGB2ZI4BBI1K2SBJMW38PM6RG5WLLUG6DOYS3EVB79OIJRGZVML87BHCAJMTLJQG1V6EUIG80R0FXN8OPXQY88Y26LIJS1QOJ7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (255, N'Mr', N'Y4WLUIRKSTI170R5P9K4N7EV3YFSV09', N'QY2XU6R5LQ2O3IUBW11BRVDMKN5GLADOHZ3IZ5EIMTJ5GDIJQJQDU9', N'2R3DIA0V6GA29ZSAOD3IPO5CM9JKTREI3KT1P8QWRZOYJNWC74N3HZPEMRR9RG2E2RYO6RLGM6RQZ7SYC6CO4A14', 47, CAST(2524.80 AS Decimal(18, 2)), N'OL15C6C7FA2EMAX4OTR7SW388ZWGY1BWQ6K2NSDSW0JR47W9UX1VRZORITWC9W9DY5OFPVHWFZBSCB413NM10G5QISKUV1IZR5TYIGJZF4GRNWF6PV8M97DI0XXWAN1EHB17I5IN4NLV0D2MDD4ZSVQJRAXKIMOS329BU7OJDLIMLIHMVBJXI1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (256, N'Dr.', N'L018JIRFCB70RP2PRPNUJFQQP1HV3YORJHG6YIM6I4SCZD4EW', N'VLGC71BJBDE63FCCRMJ', N'EFXHH4AW9VRO86GJ6GA', 117, CAST(19467.06 AS Decimal(18, 2)), N'MLHF78X4HYSSY3QR5OLL6D3X9TAP63RA1GNQCSHBFG0NTQJJ4KD8XGF8IK5EX7YE7IQIG0ED7A5PCF4J9RLMPIDL0F7SM2D8ILFAZ123500MAPV2FL46MBPP54H0SMQ5WX7RZUK8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (257, N'Mr', N'16DFH5AAII1VCDM', N'XB7674LP2KZT747WJS6HBA8R16E4E7ZQBKXKDA52GLGQD', N'ZFFYSWK4EARPUSRBNZ52GTQB1940V4XTRVWZZYOLJ6IZ42TFE5V7B7S5O4XIRK99CYYZWSBPAKI9AR7YGPLP8QIJ3QAV06TYX8M53UILT6WRPIUXWZ2', 232, CAST(1214.91 AS Decimal(18, 2)), N'HGPIQBBJ5C1X7L6WQ5UJ1BJ9VPCH42L1WH5V06FT6HN9P7PC0U8PPOM5XFN0ZTE2RZ1PGBWKP1DKO9KN00H9TWC8UZXKJEUC2KIP60VPYOZOA2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (258, N'Ms', N'H99VR83GCFMDRCW2ZEWIE4ZAVNZ3', N'YZ7FSYG2DN2F40QGBVK8HN6NJ9N30QTHEH7FXZE0A969HX64CZ9L653BSJVJBC1', N'ZJ1LGEV6I4QJC241VL6ZW1UQULVCY13QZE70POZC3CHR055STV4GWZMZRPK9A5HN00KYU3C6MTWJJ2QOG3J3XMU0R88Z4P1YVUR0L6YPIXU232FPZVT7LDPD6J6MUC2WSYOPBP394', 2, CAST(14353.57 AS Decimal(18, 2)), N'NUZ0ZC58UNSUHDB0B70H4RUHZ4RB5XNXSH9QJEV0XBN2D5EBMNOH9KDWZI0UKT3XZV2Z4LHWB0JS3S3UQFOH96N74DQ1E0F48Q2I2E716R590KS7F5344LOT7VVQVFIBKFKDPLRC8NAH0E6JKIL8XBZM19A7JG6Q9UPL0EIUDRWHA6STOB5C');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (259, N'Ms.', N'MSFPJVU50XT2W22JXJ6LYVXG41DAYZ38ZBPM6O7G2XZ', N'UK1NSAICGKY7GW5L3IR1G7B8EWME3UOX8JFXVIB1GX4L7VUVD9GTL', N'KZRRWPSJZ8VUCI5DU1ZCU6VYA', 140, CAST(9328.48 AS Decimal(18, 2)), N'9D9GYBGAKSRGK86PLI50RV6EHBVGHJ7BTW0GG4222KTY40QYM43S0C2D7U');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (260, N'Mr', N'3FH1XRY3TH6RUZLIIK60TK3LDFC', N'6', N'EQE9RK2RSPLEMHTBCT1XM6KYV29SZE4THRB24QGBRKPFRFEIIJT2XCJ86GEPBASELSXV6Q6MDQ61G46FNR9FL1W482WOBQZHRBTZIJBSC6P66HR19Y1J0DSJVSM3UIAMQ', 142, CAST(17375.68 AS Decimal(18, 2)), N'NGZS1LGMN7P8GG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (261, N'Mr', N'CQJ0WHCOJCC710FH4YS72OXIQYNICWNIEPR2Y6', N'8S9WO48LW0ZWH8QK6PKI2Q1I1Q0TEUC9CSO29FDCPIP6VXE4JWMVEO', N'A5B7X4FH3ECPXRBVEDPGHEI93PW7XUW2GI6LP20X3IAE65VV', 195, CAST(7433.66 AS Decimal(18, 2)), N'Y7179HKXUDFEAHUM9L6FM2RSDOD3QWVMCXEUCZKH2J5EL655SLFNA1GVG9UL3G6XIT2D30AA1OC3WD76J8A5G8CBGIE25ZELC8WR4R2SA5LLODZ22N2U61GAGRXKL742AQQOHF2R6HUAMRM3JB0HXJFBRLBCUH730JAXNBLMKAOO65OP4T1A7N5RBEWV4PXOAR92G8PDWMUQ4LXL80GWWDEIM8EPIUD0DFVL9FDTKTQIXKAAYJHW8DVWOX27TZV19TDPQBCSMNC2NWL1Y3RZDGSZJZWBD6ZKXO837KKM7P9L1S8SC19P8WOT1D5QE0FG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (262, N'Mr', N'DMWY57Z', N'IRQUY3E71OQKPKNARC8TK0VM3BW9I8GUO86BJKF8ABOI5DPKWLVJ6V0HV3QM74PT7V', N'Z3WXA7WN13878K8IA9FKP5CCRCZ432YU', 145, CAST(16047.09 AS Decimal(18, 2)), N'S5YNHUDJ4SN67YRQ4ZCW9C0ZF1TFT76ATX9NA4U6V6340MUEEZA12KEF4Y7F0YPWLDD9P4GZ55028WYS7F1UX578JTIBWE6XH6IN9KP9JAWXJB77ZF8LXVZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (263, N'Mr', N'', N'GEBQ6XZI8CCHQMBDW', N'FYRZ56AAYOYSPVY1WWWFA2TQJ5X8SJY5E6TLHI424ARHEK2G02761EQC50F082IEPSEJ2CKDSUA0BCBZ3G7PCS4ZFGGG34T2RCRM6IEOITD74Q1SOFXSVT2WOE3LW39O088ZKPTK2J7IEWVO', 152, CAST(14340.68 AS Decimal(18, 2)), N'64QWL52QY3L1DBJMPRAN99P7LABH5LZL72H4UTNE75ZGP5UOVMV6KC7WEJABTKKC3ZUAUESV3VF399HGGMMJQT0VVKPBJCKNKMCPBJUGUZ2PW3M51UU6Y1M9ZYF9OGCQBSIMWR4WS6PQQBYSXK9PHEOJ03QD4KRDMCE4KZ99PYDRBWINZMB47N8W3YMT1RR8E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (264, N'Mr', N'5LGFN46OS', N'WOS7OFGUT15MUAAH86LVOM6CR5IM0ZVRSGA729PVAC4YCMH268E4S1OAHFGJWUTT5DTEZ2FZGPKBI805NGFSLRZRR0QMS6ZGJ', N'NRN616YAVYRFSREJP6VI17ZMDPCLJHRJF68CMHZ19OPR259RSZPQZ6DGS1TBUCRD77ZMI1X76T8DH8K7FKTJS0', 50, CAST(18136.81 AS Decimal(18, 2)), N'3EXU7XA0ZJ0W84K3DH8M6Z3H1LDF8Y65DZS4P5FDT6OPW6QI9XEAZR54AGTLKVR1CUJ8BFD72VTZBEKUVV6AJW6LTOU9CTTYFMC2MH6TK674Y6SWVYQPOGHYFNL3V91UJO2I8DOCPDO2MMVXDD34AY5VDO2J8HBY24M4TDQC0BR4RMCSRNQH5XJLJ64JB5482QZHZQ40NQ3Y704RC9RKQTS4K1LN860V6I20MU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (265, N'Mr', N'9YUUCNOUSB9CJY3EL6PRARYTCQF8U9J2AXWWJSJBHD6OKT2IB', N'SZS324TEN2GCR9FBVGE17EE2MYBS6AP4S7F1CKDAZ63WAF8G7HAJ1I2DKQG3S08DCBKJUEYB2411BHR7QVLOZ63A51GL3AHYYPJZVOMSIZ', N'9TSKLNN7WXCKU5N8R1HJ6X0YKGLW9J7L6NQSQHCKJMBF5NP2RB2IAGDBSU042RXDQQD6', 208, CAST(10846.53 AS Decimal(18, 2)), N'0JQUEUKEI1D72DJH8YVWY5GRGQ8SOY35HGQ10ZDAZN2LVZYIN0T2QXUV2YDOMSPJY8QL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (266, N'Dr', N'JZY0RIZ0HL8FZJS62L16VTMEAWKA9JOXXLQJ49', N'WG123Z9DXFJD689ESYD8RM32LXSB18S60P6T3YCLUWJIFBDQLAUT5QPADZG67XCPMDDG2GATMREV3KM', N'UI9PX0KMKSWQJ4YHOAPAF0VH8IROYPEAJNWTSTCGTP823DINZV1GNVZUMSGF8VNUDL7V75OVX9HPRTDUZ4P2OYMN', 146, CAST(10142.75 AS Decimal(18, 2)), N'IG9KLWA2UVHRQ5O50EJLVY2MPN7YJNN8DV5JKI50JS82VXWN0DYT6ZQJENUXPCJ788DU04LH8I23QZQRRJX5PT2D5L5XO7B690UMJ1NWSGLNXNTFW256FDIF60PEZOT07VUP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (267, N'Mr', N'EWIAX31DNWERGG5DPDKQUXPRXXBIES82SFN9CIOB8I', N'J1QQDZ090WG4I6EWKUV2YXO5Z06ECU6SC6M56LBNC3G506BGDHA9PJAMDLRDSMX6PNRBJ8PYI8QVHI5SPQ0VJX3TW0SLUYUP69GCF0W4RCQGTF', N'160CX7X1DOI6MFU65IEE93TELG46K6EZJ85ZOI01JOD4VOCPVWI', 29, CAST(4318.66 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (268, N'Dr', N'EVS8', N'VGYN2L1MRKYFJG44KD0P71SDPTV377MZGVW4VAS44NOSHKDON763TQXTNLY8PYEKXYYOJZ89LVKJD0W4G7GZ0J5QX2GACKE683UIMP4NZWHX5DGNPTRIHFJET7RHIXX1H', N'89DYCLQH3RG7AIME9VIMHCULPOJX3FBOOXRAU7M2SJYS76UC2XFZDVZVES8N2TDOGRJCRBK28FUXE1DJ', 187, CAST(10763.05 AS Decimal(18, 2)), N'38PV0D88FFHSP0L25RVIFGJC8W4MKF2S3ASUFAE097RK7M9N8Y23Y7PNODN49LNZDOOF8QMUCV88OZ5MNGELDYUWL462NARNJS6IYUEIC7R2YHYO80HS71MEURT3JJ724KOWSMNS1W957RY35HUMTYGH6SN70BYSZPXES2WLCOQBSG62TQX2PL8547Q0YGRQXG5ITKB3L89484OPLLDADW3EGS9LBVMVXZEBBO89EUHGB3WZI1FD2GD1DQ21AQSPMD79QCDXC4VJFM3CVA2AG9TGMCYKM6YO2RUXWN85NH0XLULQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (269, N'Mr', N'R706KIBG7RC0RJZUNCY0SV17O8H', N'B96DIR2TZ418LJMTLISWPSKGPEXN42YGGR27HBB0FOFFCKM7UPCF8KOIPPO3TEOX5KRTGFC96RG0D544SPSEPJ8V2KHR', N'7U6ZBBSYWW1YY0Y6ACFNILQDC', 230, CAST(11875.40 AS Decimal(18, 2)), N'P6ZNH8CKQNDETB666GNS5G82XMY8VVSR8XX0Z1KJHC5ZURU6UREDYXH8YXQV93PVVM5VE565W4BTB875SRE3HESBFO11BP9DM947LYSOK8GTMNWQQK3IPMEGUUG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (270, N'Mr', N'1BW5PUQ6S2H9472K5OJPJ1QJU7NW6THB1Z', N'870ZH9RSSRFD28G4O5KLJA3L98LCWRWXKMXKF0VVCBZYD1NARREFX6', N'Y11GCEPTUY7O4GQDVFJ4AEVR4PYVBM4TNJCR', 131, CAST(19996.33 AS Decimal(18, 2)), N'45U7VX613ZKTYQI8XZORRBBQMQO0VNDRI3KFE9YOHVMR09JZ46JU5OXSU3L4966GLSBV52TO00AWOKQC7PVO4ILU6RLAOTFAO657XNT1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (271, N'Dr.', N'VU7BXSS2KUOWLSG10PSSZKDBH6U0Z', N'X3FP9NEW1VISFAWON9O88B488KAL5CHZDJ0G0BL7XEX3V870V2Q59XULZ6HODTRPDJEVAFNCNHBTE1DZDAQ2LBQEHUTWU4N8PCTBPFEEHRM17XTIB23P32SY7WXTJQM665B151K', N'FJM8450YM7YW', 104, CAST(2790.39 AS Decimal(18, 2)), N'UU5D03AD8WKAHB27HPEHIZ7L08IEIFJVUC9OGG5NAXGWVZ6V30GYFJTVNJCSLVUSDOG51DQ0JQ6LJAQ11NBIZKGBIE1W3D2F2NJ6J1TP9FFOC8BCTBQXKCTS74NNBTW5NRJWRJHZUL8J5SY92P3RN4VPTRZEE6DFIA0LPFLAUQ3Y4AMF6DKMQ4IJWT30J3LN8S0VRDKN3SXW0WLI4K70LQODRHOVCLQQ4F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (272, N'Ms', N'684S7QYDLXQZ5P5B24PR', N'N7TYTN6J0BLR1Y4NJV4TIKVR5FV1MRCAHS1V8U4JPDT75U571OIAWRS2C2TES5X8YAA8W9EOQK44RNLAAN0Y91DQZYJ61QRKGK8VKWBR9', N'PBT8HK59CNGUI8UE0L4ZGGVWW58VSHHZZ6WTZF2SMN2W6EMW6KLMUXO9FXBBB9GU5HUBC0ELIBDTDZQIIBP8WV42IME13QHC68ROJAK5504IJVWF7TSZJ8Y9CSTPMDHRU0', 30, CAST(11553.72 AS Decimal(18, 2)), N'B9ROSSXIX7MIZ8KVZVL2H3M39OOAI27RL798CWF7O7R65ZPNSPRUJD77NOE33M0VZUWSYBJ3GDEACFY9Z1ISBD78Z2LOHB317V7A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (273, N'Mr', N'L87GAHWTQYS3ZNFRTLQ3N3V1ZF', N'KBMOBOHJ444YZXWK9YP7NZTKO7', N'571Y8RJ2WQLINQYUAXHSX9HCQHUJSICOI8Q76UK8Z62IQA5ZNJ7TD7OV', 77, CAST(16923.56 AS Decimal(18, 2)), N'XOG6ND6YXV7P44237KMNOSWQVL59D3H8N72D2MNZ0917DYD61XZBKND4SQA28XLUDZ2X2P1LXNMFQPCW8Z7F36NZTXKBBKR3N7TEVF4CVEEX1YD2EEU9P6Q7B2344Q9CWISJWX0SUUJPSPYVKIXXQIDHHL2TBZ85411I5T6GD2EUM0FL48KMSBME5B2AV7GVMEKQOGPQBHKO3IUG5GP3FMCTFNDURVK5LI87FPXNITABRYAMGL5EICF01RB12VZFWE2LAN0GJ1LMB12HCRD5Q6N8286ODVLMUVFCVPBTLOVHRTO0PUOBITOQRTI2GC2NGYRG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (274, N'Mr', N'564QB74LZXCW82JV', N'QPDC8OGH13BNUPIMNFHKBY0NC216KI2Z39QTQSVAJFUGXAUI5C547N3ROPZ6N9WJ0BKLYOVUK71V3JQ27J17CYSG6', N'P8QW09DEXZEZQNFD9SR7YLFCVV9BIBBKVHHMUBZ', 25, CAST(6946.48 AS Decimal(18, 2)), N'PLNFJK2A6H8J5ZJ79416PL169C9L70T27E080VY9MFKC9IBCJG6TQAW3JH67BG25N6BRYA6D6SJ91PXQ1W2RUZBXHXPJPQX5CFP27KD8ATNYQM2UKG6EEBBOVE91LMOFUDXL0UIHI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (275, N'Miss.', N'X', N'41', N'O4TBQZXVSG4FX', 20, CAST(13434.44 AS Decimal(18, 2)), N'G1BD6VUVZ8KJR0417TABNN484CPGTQXOWKU9CI7E6PNGUAMWHZMP666TW38T5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (276, N'Dr.', N'61QJ8', N'OM9JBGLQ9KGHBJ0L7N5ZXZ48O61J', N'S3SE0502VMOU486TIXTUITS4LWYDJ27VM7PDTGAUWM96MVUOPYY', 99, CAST(6642.00 AS Decimal(18, 2)), N'19AVM65UPPLW5XZODTPSZU38IPE1D89D8SOE5YOGQMAX3918T8PF3DE752DXR4HGG8OC9LIF592DK649O584IT9UDH83LQOM4TGUKOZ8PAAUA1MZX39LVCYMZTZRCFTEKF8QPAOZ60F7JEJBU96HH2QSVUVQP7W9GVAVTWANF9FVWQ3K9NX29CWHPFVVEY9Y45RN4OIYZI28NUV4Q');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (277, N'Mr', N'YOTHD5GVTQMM8HVV1FUHOI0', N'EYJU1WKRCS34BXZKQ1FSUZBZ1VOI1U5E2MVLWN9NFTVV1VL15NY4MQ9ENJS571QHMO1O2EN3SRC04GX6AMDDW1SCDGXDU3GD3D9CTXZRZUBUD8A7LLVKOCKLWPALGA8PBZXQ6L', N'L24YBOS46NITFS8WJS02MZYWKLHP19OK30AJ2Q24O6N93FRUNY4WYWKM48DQ623XZYPEIOTSQVDGBPS4TN234RL7GNFUCBYL2Q95QCCZ4B53I4BFF9WI00S7CH', 183, CAST(18184.19 AS Decimal(18, 2)), N'G2AT04ZS6D0F8H0HRRZGFL5Z3Q9OUUKQ43H7OA4MOBI4XJ9L85345AVVXAPAUAYBT9A5ZSTGMCR4211JQFLU7LADLURDD6AN94LFCMHSIRTV85T6T9LDOFYEIFVRKDQVQEAC21B3YTBGRE5F1LK3LWZT56WXRP740X5UVH3SYHFU4HM49FQZTNAUEG6V5EC8L6FU8BKKHR54H4PNJRNCZ7BDNAFFA8MK578X2SWYV6H2I');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (278, N'Mr', N'8W438MFNV6CJA3MRV1FBX9QG0B0AORVGNQ9G1CM6BYQ14C', N'DNMD2PXY55QR88WPQTNF4MEAPLMJEBK008IW1YIVZQ5FPJZGF96XJ58Q9BOG3DKTLQQ0PZNRASGDGYK5L5444NHV0RNQ91SL6', N'U9ZFE', 228, CAST(16542.20 AS Decimal(18, 2)), N'DAQIBEQ09EV26XV5994KZ9VRLRVOGTQ9UHX4ORW8T4XU2ZMY3QW8XX63EZXKJ1JFNM8P0QGIDVRUB0PM5XLQWHBWAUQPUBPSLI6FRWXC9DV16CRE9BFLFSJ6BBE50RN16Y8TTAU8Z9HIM9QX3BFJW3CTY04GHSBHPUV74XKYG7M5A0K1KH2OB452LEVT5EQ7Y0TREJT5RG3OH7JYG3V0PM5LPSLQ2RT1HF797SM1OWXV1GLEVWC2JPHBV72MX33ZN171Z9RNHTCSPAJ876U6EQIRXWEZP03KTX7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (279, N'Dr.', N'YT2LM2P6Z6N3XM4Y4BWVK', N'UZTZRFLEMQOUAAQJUX9FPY9UZYBXI9ZU744LCMEOIP1Q65HDZQ7UCRMWQY0T4OWDRUN56578JKWZWJOTGYYR14IGI7VDMLKUTOYCI', N'SDLFNEGB2YSLIP', 16, CAST(5088.41 AS Decimal(18, 2)), N'9J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (280, N'Miss.', N'5QJE8ZY', N'6TJZBRUMZ6A6C6P4BMB6MYATMX0158KBA4R482TQLV8O3F8D5PCC1CP7JPDEQSHQMYV8EKV9TKKQPLP6PNWGW7AYEJLJPF0SEI1', N'CZE3EGL2X2S8EHQ4WQ6PQP0SVG7X1ZLTSMI9KC0G7ANCV52TCTWUCZLMZM8Y8N0YGYGRZHJJQQIF2NWPDDK72QHS1V9Y317J9OVW', 103, CAST(4882.73 AS Decimal(18, 2)), N'L4OLPCPLKNUEQ8XLWJF43USYHPRZR2KZNR91P5SF8AUBULCCVCAGTFBRCQ4ZKPUH3URZZVVRR0VT0G3VCF3FS457FIPZ1SUIFC70TDDZHJPTJIQVM8M5MFPZOJJH6VPY5DDO831Z14X9FCOXRTDT6PW0M8BATWSLUQN652MI6N3HHGKCVMPDIVRGGC10SR55BCEOOHRP6UM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (281, N'Dr.', N'PBNQ1HM68DYKAAD8OK70MP8H', N'K0YKT3JGRYIX06O3W0UEOWTVZCKEKSC7KKLOOCNSOU7F1OJIQWWEOMGN63LGJ5VZMADFLZFJD1QUPETAT2ONVXJX3XIKR69IY8SQB3WQHC1MWMYR9ANHH83ORGBNHUS6R', N'BTV9C3LG5KBPILU2TWQGNQ47LGPJZ6DS012KPYPNWBVAX8L', 28, CAST(17831.59 AS Decimal(18, 2)), N'LEJ6NYF77F3YZ7PS0MQFHY651WNDUZ6O88U2TUCTCXYV8GPHSYPK370N7E5RB1C79FPQCNZ59W2K0BWK76KVALK177UFPKIALQLTRY45ZJA74GNWHKK5GGWNUOI5SKFPESY9P2T81FWQBDWQJXX50DT4TXY2GYCE3LSCID');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (282, N'Mr', N'3OC17UP7GHBF7KNCY3IW0KUCAPOSYWZ36PYTA40J8CTT2THZJN', N'VHL3ZP5X6JWW1HZQAGIS1Q43YUR99MJUVOQH66AYBJ1KSVFUNQJBOY55CH44XVOJZ20CQIK46KGIOJB3FXLI376WIL4O250GUILPU2456F53INHT50O096', N'CGGS5F0KPNOWE2HZ7JPHJADV63KCUU9CUA6JPKMK0HV19S8TUW2DJ4W12LM2VOQUEB24VXANX5G2FBLDUQHYR', 213, CAST(3561.88 AS Decimal(18, 2)), N'EQB31K6CHSRLVNAO1YUFR4RS33INPKJ85QIFOASKNKHAOCHRTWRDNYFAZJZX2INX8IG44V0R6AS6NG3QMQTST6K7B8F4AUH4XK26WCNYV07D68NJG8BBPU32X8SVFWGBSN92DWU93VWTY712LWN1J6F3G08OJRIZJWLIZK5JE17TXA3Q7QAJ8FRL76MDO6PCDXA2MI31R3MHZL55WIGTHZR34ZATXRV8BVG0004OM9R4S9ML0GH6PVVD66YM7A3Z8E64545VDS777MAUCOSGAPJGZ2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (283, N'Miss.', N'MQK0JTZRH5W9JH89', N'RV4U5DV20K0N6YL9DSFCN23EU4BI1GZ6O1TUP8YSAD5IH0AUKRB7TTSPSQZ12D0JLTY45RJ4TN2AXKWUT', N'TQD4G3XKPBQ0NYQ4Y', 90, CAST(14396.61 AS Decimal(18, 2)), N'T2HGC5RWE3IGVBLSWON6JW39IHMPIUP42ABTWBU2FPVQU8W5PXMRCW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (284, N'Mr', N'MU2T2YOOQ0AH8O8A8DCMPEZAD', N'Y95RCV831Z9XQXCLXO25OS86D6RIS8T47LEQETG3V1PKVWX4YBM8SNS51ZD63QBS54P5IL647YAN2OA', N'LFGENTLR0884', 185, CAST(11252.02 AS Decimal(18, 2)), N'XY7YVJ2EJDEDL0RWLULQU0CFAKH0L8YR6ZDUODZJDBBDFUB5X11XR5GXMROA11SBFM7LMX77U2DIOZZF9C3K6101JG8WPPHBI0XTNPJ0TT2ORY8MS80PY84EL625OBI5K2ZO16SJS3QDYB9L8L4RD9VJ8GNDBHBX4PYJLLGGWVIRG9WHW271GTPPSHYBWFR8207KMO0I07UHR43YJ6G9A9GA08R3N4KH39PF1CU81O19Y7YOEZRPY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (285, N'Mr', N'EB2ACTKZDPLUJRWCSSP99Z', N'8MKGMLCKS9PFFAZ5QXER6SMC4H0TD42DOWXH6U6JR5C9WROXZ5W59JAG07B5KJ7N6BQJCIYWQUZ1F', N'R3IHBQQG6PDG5BFNMNPSKCCFF2KIP3PBK3ZW5GEE7GFP3YII63DLJCNER22967R201V1BJI68AL3XMCHK1CLP4S8GK52E58ZOCP12G6NL7C8QJH5QKO4V5D', 143, CAST(9016.04 AS Decimal(18, 2)), N'YSJWJEXXUVMDEIFNW7C87L87CSA2OODVJKBWV4SFA3U5MLSF8Q2KDPBCKBKR3U96IRUT7JRREWX3R3LRZUTXLSHT9ZCKK1CFUOMUQZ8PYB6HS7KGQTR90BKP90J8677CKH93GR00M4YAM012EVUQA2FI3WKPF0IR3TWAYH0ZT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (286, N'Mr', N'4VMS7USGJKCLGX8AIOEULPDM7K39XN2Y7', N'GDS3T88X44LHHZI1Y8YO3L04LH6ZFFK90MRYCHPYF86MYV1ZDPVQ3R9UCNIC18IPKBGU7KPHJZ8UEE6PG6MPJT69DWLOZDX', N'8NLREFR31MFKWAF4VP', 25, CAST(16023.85 AS Decimal(18, 2)), N'MWCA28ZHTBDG2H2QZK6AKML76T3Q4WVVXJGI6STCQY67DNRF77HFTI50B44958DWGIII0KK6QUKMGEUI2OJWEF1FD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (287, N'Mr', N'X76', N'QH1NF7RT0E74IFGYHSVUMS5R56GBY0H6224WDJA9FSP5M1QYFN67H2KXC9H8QFUZW12GBKKYHMFT3043GIWBUAOZH6K312IZYP8LZ9NV28QVMQUB5ER7JJ5MC2', N'ISKHW30BUH43IZUTEVF95G8644W8G5J855V3O5OND3XMXIWL2G09GGU1JDDS6RVPXVXD4Q496RV2IM9L7B6Z4ASPATJARVGM88P2KIGBCR2OKSJX4SKULVKM283B6THBA9TAW61OUUND844HAM6Z', 145, CAST(12039.80 AS Decimal(18, 2)), N'71OK6HL9QU48ENNBOZYJJXAL7HPGI1G35KCII6N216NZET9V93Q2GUWAR3CPS4RPE13UA4SIBVIC9A7D8T7EADMAN2RFTXAWFYLCQEK4A8RLBJ0GVZHYXDE0FS68CDOELLXBPUNT8232M1Z31BJUGCZ2JLXX7CSXJC0QMPR1CNPV9CDDT271UUY8MUR3WPL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (288, N'Dr', N'TDZ6KQ', N'4ZH', N'L0CN3ZCF54I9QDBZ80XRVZR76DY3L1KNH0P8GNT7O9PP53HQSI1M88EL94GP08T4KUSQO3IL6P2MA123V8B3ZXE8L3ZB647GFK5ABR2P0G', 246, CAST(4361.64 AS Decimal(18, 2)), N'A6I919HBJHHSM3S77J455Q2PER3RYN4M2TL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (289, N'Dr.', N'38B065BWAAWFKN7CANOJHGI013NU0UE5MA', N'E3FVDRJ46V08L', N'I6SB72DTSXQ5NFJ4L46F2IL7QWRR45L3IGV2TSR9SAFJOEHUSMHLT1E0KLKBBLPMBNM6KHBSDXMR32IBEW', 223, CAST(7486.74 AS Decimal(18, 2)), N'U4CKLVHCC5MI2KWDLGRJ3SU95PDWDUPTIPD27JK99PC95KPDQR1M22Z192EVILZHGT0D7U51WHAEFL4L0Z5MT3QGPBT44ORNQVTBKC6WLZPKRLLOXTVIGDOC2JNV11W7QMOKSS0OT80TD6O3Q46BT87C6G90OAVK3IT5X0V4S7P7CVYVVJ5WULDIFBEBJ0ZIDGQVDJ6Q82IMI00BHD545ZQH4BPLLJLS77UW53IBCENS3RZFB3U5VUCDQ9R1UL4PGPFB545EVURRCXDCBA9IPFXCUG5VCGHRAYBDCO97XFA13L1SVEPJBMZ0S2GP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (290, N'Ms.', N'CS8QIR2XN0SM8M0PJV7UMPBZ2IGWFVRSAJVK1W6RFIV08', N'TDQB8YNABGEKM8XAIVLBBR6VGKL9LCIBJ2JP8TRI94SZGT5A6VD5MA916VVOCDPZX3', N'H', 11, CAST(14295.58 AS Decimal(18, 2)), N'92EC0GDMZ0N02KA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (291, N'Mr', N'F804VAFGGMH8O0B5IS80BORFN', N'KP72P4227Z7EMEA3PYDO9THIDX36VFT2DSLLZTN0J712ZG891AZ0JERQ7OOR1W6S640TTP3WAD51RFJWPT5LFSIZ1UEA5WZN19VUFEGC63P69QZS5R18RLCDM1SYBTQEDHZHJPHBDTEC3BQBUM5D', N'09H2VH87FX6LS71SBAABO8WFMWH29XEM7XBD53OZ2LXZF6A', 26, CAST(4696.00 AS Decimal(18, 2)), N'W99EC0YRXFNYAL97J9NDVO24N6WD2I91PVWT7AL93NFKTFBEQGHTWW9764R64KOE6M9FPG08NEA89IB8VIML1F4SLOM2JF5IY0E75VOAF85IM1YOTIBMY3DQHHU0UYP88RA8343ZTC5TAL6JPY804JKVNOPO0NFHJXAVRQKPFBSLXJGVAABWPO4P6EKFEEZ5WOADBBSYDJLSQYY38UDPCJSVSLOC55A0BNO992KZICI62BY8GH7K19SCVEKQNGT78KG29OT5AD7Z1MSHMFVOYQZ2UBDUITC2JAXHUVY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (292, N'Dr', N'PFE3UARK37VAZHCU28', N'RWGXI7ELH0DCASRQI8FAQU', N'HJ3LO60SD2GZ05XIIK', 168, CAST(19859.99 AS Decimal(18, 2)), N'N1AN2TB9M337K59ILE7XBYMG14GQOAMQH30WGB01048FQ5ID1EWGN0FTLXCLKCGCPH4C29D6X6Q');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (293, N'Miss', N'S76G902R86QHKG9KZ1DR6H4X397SRNHMICVEIY43RJIECP', N'6Z9ABG3', N'VWNM7MB82AWZGLMLQTTX1XI03NOZXNFGVSFZTWVYDXXHG2ZDDJ7OPMCYDMJKXCBFVG3N6MRTYUK4Z1K0NBLDFQR8GGL7D', 245, CAST(7599.24 AS Decimal(18, 2)), N'PWM2OAD62GMBHMQ2OEKWZDF09OCN2H3AY83PBAXAY9A9USVFJBHJMU7CGLTZXQ4KDCD9I0REHAYP366GTX3R0KN30R9PGXD75PWIEMWJJ22CVI8AFC6ZNDKTO98RQ2XJXRKEAO160K7YHB8IIZA4RDJS42T5D5SH4IF4YU0RBZZ25MBD1Q8RRTRJ7S97UWSVRQTYV3KOYJSSDGMIRG3NW0PARVX6KSWF64BFSCHY6KS81Z6Q5RFDS5ZQ1I705D35MDL957PEZ5HB8G9RP70TDJM14K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (294, N'Mr', N'TQWDSPHXA39DZTAZLO4Z8LU20W9ZMZQKDY', N'ODJMLJJ1H3PVS10SIZLCDP34WY9X8X24DBOYR656Y7Y61', N'10LHM0ZB7QRDPV17YC2IWMRXZ4PU7P1KGNTJIHEK1B4UL20V78I95UEE9NIHA44HP7W22IOHXHHKIWCX3TNZ7REM8EAVZX9W7M4D5YTO', 205, CAST(16804.92 AS Decimal(18, 2)), N'94HSSGNMNDWKY11ENNNIK9GBYDAS3RK4LTGAHDOUKULDSM1RB4YDH1T0O5TE6UJWTRZ5LQWAZTXQN3IBBJGYS7NJ0FMCJAOQAPJ0NW6L7NEO42CKNH3NDK3L4F554KRP47FYJIOFCVR5TZFX21O161DQMYW7Q0GMWPJXME15TNAHSYS50723WPI3TPBLLCF484FIBOZJ8JQVXN5Q7IYCQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (295, N'Mr', N'2VAPW0FKB9L59HKXP8Q38WTCWFHABDP', N'55Z', N'1CNCTWCBKDHG5AYTATN7TH08KDWSYS5ZYF5FQ9FIXJEJRG2B5KV56HPJCFSG0KDS8IIP4', 143, CAST(13369.28 AS Decimal(18, 2)), N'6F3X2GJCYY2OPOPIWE4CGZCYRNFU95E2D1XZFELIZVKSS9YH1OMJ8EQ7345E0O3SK0ANQP3ISLCLEJ6HPYTKJUUZBPWA86HBSR8SZAQCL4QN15TJXOP2VI9P5AC1SSAL31SNAEHE7HZF36Y6WCDKHFGAIJMPXPJTT4J0C59J6AVEITLYB64GFQ4OKH5RRSHHX6LYNYTQ3TD7K2ROXNDRL2E30VFV0HSETDGC8NBDCDCLCX4IQGU4EPWUSHYRIYQM1ZD6LFGAB0E7PSR3RW5KNOZ3G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (296, N'Miss.', N'', N'RBVRBYAFQNAMSK0KIGC11CTFD6RW3XS3XR5Q9L0POBFHVCFE6GHPSYEFIGE57DCTV7O0E9AWFMCQWBJ0', N'20E5A93GG4AKMDX0THQM3BHYHD6LA9XC7MIUQ07FFVYN6GXZV8O0ZIGQJGNW3I566XD0V', 59, CAST(3938.40 AS Decimal(18, 2)), N'KQOJUENQKCJXXB0JSEAO4ZQV0LT6YCZAQ0UPLS50KZ7EJTZTK3WLSRGK0TJ9KHR7C97WGAY08A35SBB6MZLVGEHYJ9PS8WF3701AM2DA5VCINASPHCNLVWQYR8D6K5RCV0YS90JJMBPL2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (297, N'Mr', N'F84BZ7YS1JTFR0I220BNU551XSGJ48XJL3U9GLQ1RA6D0X4F', N'CPMF2AZDQ8T7VIBYMMOOEZX5L96MOI6WDDUNQ', N'9SAA67CTS1F7P2KXDO6RAADACXPSH82X4TYWQPB8EPOLHVS3L9KOU3RZFZX8IKCJYI3W3O6ODXDLMRTG5M67OE201ZHRR3PTC4NYSVZX3VAWP6CO6G2WD5VJF2V36FX97J8H4UO9M84', 53, CAST(12387.48 AS Decimal(18, 2)), N'A8H0AW9T');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (298, N'Mrs.', N'8', N'SWPNN0HOK41RAOVCCDSGUT4CO81XUHNN88USZRCWOXO1LW7H011HU9IZRCYFYKT3HDI1U3CL0WSX42RR0KWTF5SZPU0NSW', N'36BVNTKA0TG783JQ0WQNY1O5XUJCSTA', 74, CAST(13038.62 AS Decimal(18, 2)), N'A93JEP6PZ4ZNNC0FGS3ZJ65VSX4PKUU31RNI5H5TFMQG2BNWGKT35UO337QGLG549WLVOH9ZNAJXGPTGA78Z0RY62KFYRO7YGL66PR8ZBUGUARNEE95D863IYFT42B7Y2LGVINQJZ8N6A3VBW0KHIUQAHN8AX3XZNIRPBSVQJMEZIX8UJI71RQF8V6DUFGLVBOISB6Z45TYWFQRJFDRFWW8W2JT4E0B30INUFFICI3VXRIS4EUE1O6ZFFLPSCVP4IVWW2X40VEXS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (299, N'Mr', N'DEC7A22D6QEOSL9TN68MG9AVJYS00O1KVZJ59W', N'33LK7E6MX', N'03G9Q0GDUN9E3090AY9PIGU2H5XS98H7JB75NAZ0FDSBRA2XLJ1UKKMJ8DRL3O4M52VST3D0Y8A5NJB63Z6Q6NNYONW9IEXR865PF93H51VBAHVP2LH3HEFIEW4673HKAI', 79, CAST(16673.09 AS Decimal(18, 2)), N'A5KQPQKM9ETJ8ETQP0NERFWMV1GPE6A96E4G52N44I9G3DUIBA5E9E9V8XUN9V723KDUACKNCI995FJI7YE41WZR58878ZU9A6DI0Z8ZPH1Q50PSEBFBG217KLO13CFDOZYZ20I7QFEJV8M5JGSWJJS755XFB6VD2O261QPET7L1OHCCYJINJIT56QTW23WJJ1G76G3SQE3CXRJNTLGSO7TJUXZBWTCPB2IM056HFPX5FH7F652HM4UB8WC8HRVW1D0V8XMOFYCZAN4DPK5QQV2786E3SX0NT041GC69JE1ORU1LSYJWM556ATN2JIVHXP59J2XCDW7CTEGD5SBUE41OUX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (300, N'Mr', N'6D8KADMERR4G9QMS43HNB9', N'GGYGLVOK7EENZNBKJB03PS3YPTIHJDUXZ5ZOTI4ZB2LIJF3Y', N'HDLQTVPK5RBO6R6', 109, CAST(4245.77 AS Decimal(18, 2)), N'NP4Q0IJQ2PR2Q16JQXTDWD9WQ713TNHFLB9N957U9NDOEQLS7KBQ1JUAF7ZSHGXE7BGERJ9KPZ39ZLIZM8W8CQD1');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (301, N'Dr', N'DHPUSS13JRM288OZIXK19W7RU97F1R98WBV2KITLPNKPNODK', N'NVUMUZND0RRC71TKHOUNMR070RN7LF9QK8WIZA56CBTRDN40RY2R9AMVUNL2BGRKI1RY5BK6IOBBX9TDNMFNDHGAM0NCP2UWJ88BV5VFEV8LYBY', N'XWUAUQNAJ5XA1KB0RLECGUN7RTAR37XE0WJNG71RQB7OYFJKFBWLDUR39MI1FV7B7I950OJJJNL5MZ9C9QCRAC155GDTP0BU3VGF5EKQRC1P9LGAD6RPJF0', 169, CAST(18394.57 AS Decimal(18, 2)), N'Z725FCTQZG2A60OBQ12GLAUO068JO1GYEXSB7EAMAIZ5FPF77XMPBLVODD59491XZ4V98C3BRF52BO9AQ0CRFRMS13YU91I1H15BU5YUTAYWGTDO4VI3XAI8I385E92PX4L9JXGL2HX4TQC7P9QDJE37JWTQWTGK78ZB8346FW1FCDERR1F4IO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (302, N'Mr', N'3ZPQ8RGAY0JLM2SID5WCMFZ4ZBMB', N'T8FP0470KHC4O7HGTFRO0IIHQ08H9VBB11IGN4VE08QDTRR6ESRJJ9LBQYZ0', N'H3ZJBPUJBQ1RIT6V5L', 246, CAST(7733.36 AS Decimal(18, 2)), N'I0DQM4PO81CWKQ0ZL4JYMDOU6I1ZVDB1J1GAUDH2P7SEZGT0Q1UZYQJ4CJJ42PTVPBDJAP57NH8FK9VPO09UIB2SIBYBUDZ0EWOO2AQ1WMCHH4K3OUG2GZCE8K0YRUD9H81OK6ND98XWYLBERVMZWXKEJAGHASA283082WIH62S81GFM9M7V7DDJOM4AP53HXVOVL2BVC4TT5BD3UT7OKEVUQGKGS8S0ZAA6SK17ABJ2KJEC90FWYFWJ0T54IU34CSUU16BAS0D9VSA6177RTW2KDQ6YFWPF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (303, N'Dr', N'46VM0XRJHOJESMIAZ3LR69IG7', N'QRP612MP0SPJCORR4', N'YABWJ03GI8LAOUKY2E0F1IIDIJPRJZVJYF2L57GJ79BAQFDWYV4H56ZGSXD0BCWJC1C8SZSVXH7R67N25STOVEESFMS7TG7VCSXO344Y29JNY79KABUIJ8NYMKT56L1H9CED9YZ1OULMUQU8C8XH', 159, CAST(11332.69 AS Decimal(18, 2)), N'FPROJB2O53X1NO7JY3ANBAGP9GA0CVVBX1F3IHIW52NS5IQ2ZFGTESW481F201BA8L4M841GKDH8NOKQQ81XE1W44BUG2FV3QDJJE4TVEZ81ANHKHOCR0EV6OZHX9LD5HEH940CMF6JETVUHU9YE343CIDVEMWLSL3JW57GHBPCUUGDS5020MZ1DA5QR5X0JLQSPCXBMTH2DR9H1Z29MTK6M15L0HPBEPT84NNG7PF64XOL1NOR2ODP0K6O6CA545OOY0DDBL2XDE1P');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (304, N'Mr', N'O0LRX55ST', N'Z822G3RRSG6QP5VJ9H17SO4GEZ2Z6LTKLAZRTOAME9A6I93JOTEA', N'PB44Y2IBYRH71ELSVABBTUON14VQKSYNKVK0A8BWGPP23FSC8GGXL6SUNH', 96, CAST(1777.68 AS Decimal(18, 2)), N'JJCSX8PB38KHZ9UEA2Z8ZN1ABFHLGCMIHAMSYD6WYCVRTWBB7J3B2GDWI2HIR4URM10PN1FXW2AMR9HE35DX8AG0WPAVVN4UH35RWMO535FZ6Q48L2EMQXIBKZSXRK18XF5O4PIGG7U3VGU5L1AT9I3KLT6XUREI361QLG3WKX6I2FF45MCPA8ZFCK3BIKMOTBZPF3K4XD8BBKH6D2R7FO8V7ME');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (305, N'Mr', N'NYM40YVG', N'WUB3LNG0SL6MM4E53PL7ESJDYY4WJBC7IUOFON70T', N'U6SR5TTN6UKIMZFU34MJMCJH4B12D2PDS5GQOXJ99RMHOYUX6BPP1XHHMBNTRR9346PHIO65KC9UQ2S5H3V2D0CVNZ3DAQHIIICH9CEH4J4OOMRKIHBNV6P4UUTJLTVUURC7PAW', 160, CAST(7953.56 AS Decimal(18, 2)), N'DSDZBIPRFQO127RWZN3R3XXFTF8433HSPJR5080TVQQMDQ58XBVJIMXGUX6V9KNB9VCIGMWRNAVC6B23907R8YA2LBA224KB2EDHDMRAF4W7QK9JV3M8CW3BL9X5BTPJPK9RXKPN9WB422C01Q7YIBY6B2W4PMZMFCI6AHMBEYZFKY9IXW3LLQ0EL3GVNKXMXOOPK6QK4WKJCILCTE7TJD0OB3K71QNT1CIWAJXR6IGP6H22H329D43JO0DGLIJD8QIZ0P29GGN0XBIU1HPYODGW9Y7A6G5NZ2GFZ22S0STXH3MCHIF3TKOUALQ2HS2ZAZ0UU2VYFXXWKIF5BVSN11');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (306, N'Mr', N'YTTHTZ81JBUNFF69RYQRE9ZSON1HHR8D', N'MN4JW5ODK4S3B4BX5NJKHG8Y4RFZHGHKDS6V8E2Z85Q8EFIK4QHKH945E6', N'PEYUVO617JVTETMCT7NFIUWBO9UWAKU7K6YH7V95NSC1X1G050EHNHMUIN5LUAQNOO98V44XYHRQIUDMTTRA5DK2J4YKQOBC1OC9S850WHJ5QWBN9IR0JGHB46OQ5J7A', 78, CAST(4542.31 AS Decimal(18, 2)), N'EDM5DCZA7PUNH2RIENVNSAR6KQM0EX85LG8XHMFMP6QVX2KCE0LDY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (307, N'Miss', N'38ZUJRRO3LGY68JFU9Z5PYPT1S6YQKS2GLB66E87Y2BNJTIF', N'4PPW4M8PJXFPQLJBCQ0JO8VURYX24N1H2ZXAJ9MM6PZNO1RZYXSFEMQVUU55O5KVVYMRN8S23EDZ976P7Y47UM3', N'EOTI3ULOQEOUECNSBB7WBTL615LKEUC98ZB7I46O6CS1TGPU0XU80DUL2MHX819V1ELF1FA65JQZ0KDKGRJH049V4Q4VN8F43X0EV9SKMN2GNVKI9WHHHRVW5QABBF', 10, CAST(11920.32 AS Decimal(18, 2)), N'LBE7S9O7AWECHBAH6U89XMKV9H6ALECU6UVWJAU6YIVTHKL81XUQ5PUYQIYA3DLWKJ5MFEYV02AEQQDOVX8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (308, N'Mr', N'1MI88C5J5TQKTYJSDIKWC9G0S', N'913GX053RQFZBP5PBZ8QMMOFYQ1D19V5HMS3ZNHDU5FFA7NE15A37IFT0OH7YR2IU9IOX1QOIVWG785', N'W4LV3JYO6YYUD1S795MMQRYMB1395ZH9746C2ZGYA7AIJXIUCI05OTS56YK2GPJ6M8VG', 130, CAST(3984.10 AS Decimal(18, 2)), N'KLPH0W50CJ2KWZ9XEZTNZYQ2EF7049E64WBYTNMI8XJGZPIRHG9W3LPMUN3KO5V24WG0NA4RCAF1EA3OXGIOZH2J6O36K1U22GB29H36BIK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (309, N'Ms.', N'NM1A79RYAT885N0KHM54SV5BXI5S6HG2PIHUMHT', N'3NBWYRXZ6Y3A59E23XK0PYH0EMKBLZMRJQ3B', N'APNCIGF3DJ8XMYCKEC163FEIKO31UA9ZVDQG1G9OQU6I7SW7448WU91VA4RUCD9399198VIX2CG88VARRVXQ1C4MBV5XPEBCL28YRNZ8LBUITSMEUZ2HGJ1X4EXCPL8O', 232, CAST(11948.94 AS Decimal(18, 2)), N'6O7KJEN8N62MUWTY7X6AGCYYY0FFCBCHX8DIHJM5ELFWDO8DO4ZEB9DTQ9LJZ8V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (310, N'Ms', N'9KHJ9CRP8VJ51IU65WB8BWRTD6JM65Y0', N'6J2BIIYYFJ8HUC9N4246BHC6MD7BBRE53MXDHO6GI1Y3CURMC3EOZ55O7WP5AMMO42D8FW5FWON9J8URML', N'3N5MC04WO4QIMSJ9R2PBUW21BTCQMIZ25HQ5GRHZYKSEBEHME3YIIC57K4BINE955NC42ESZLQDA3NQWBQBJKGKTCJKBGYBKBM9N2CJZBZXSZV3WEE6X2QLO3ISJTGIMFSYHE2UZ6B7KJSUHFNX2R', 198, CAST(15882.81 AS Decimal(18, 2)), N'TLPLJBHNB1WUW2KAS1Q8CY5NVJR7Y255Q42SZMUDNC2ADJXOPARXHNYUG1QZJ9O8VQ3SZSA57DL0VUABM3INB7O357BXWUTDNUFMF5OX0LQ32YYLREDGR0WN10MRGD8DK8C1FNWHELNQHL178P6IGDLMXRKFIXGNCCIULX63IW16D66GZEIR6QW7MP4N2GYH40D426LBI30KBE9QL4G3EPGMGB7VSJ01XJ2CT1EST783QBV7GE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (311, N'Dr', N'RU7DL1LQFK', N'8CQ6', N'IL0KJJK06UHAC6WMIBJ7QQI15BOB36JGV1ADGTJBE65D38FNKT4LIJMS3ZF8U9WZB0FAWJ5OS8TKK4XWW0Q91XXBEHAGE', 184, CAST(2282.86 AS Decimal(18, 2)), N'Y0U3FJROQZPJZ2YMRCWXKPNA6GDV4FZFEI213GNT2CNT3O90SP3VJGH9CJWY6VJAZA4H0XJBP3U71U7I7D3FB4VX1TOJJPM6SDTTJSZV5S5GM97ICDQTS4YVE6G78ZR0EO0EZFD89JYFBRL676YTDOEYECCSM615ZXUIHYEAFKVFWZVOL1SL1NAQA20M3KL2ISFEX2P8RNDSTY1EHN6KDG4CM48EYR7UZSX4JHRJCJTD9IXB0L5FE0O2O3RTTAA0FIT01XUZWN8UMQ346XECMSGZ3UFGPXP28TYQOW93Q5IRSUFYZNMWWYDN2UX6HEAZX6LTRCF9NAMHAP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (312, N'Mrs.', N'XB06OAPP5K1DSO63S4J2XJC9NNSKUQIVBHV', N'G85LZ06', N'G59612T4R1OGTAQ27Y2ICUJMYE33WE9PAGRNAD3V3R8OLL4NKC9BEVZMMM8NZP8CSY6CJ3RUV6FKLU1C9FJJ4XAEH41N5FVDJWWMER4', 5, CAST(4672.72 AS Decimal(18, 2)), N'8FGG2BT6AFAOUZ3LCVJTL8L6N7C8LBWCDNOR1X7N4ZBDLAKP9MRVK0TATUYLLYJYA6BCKFNVPMX7PYM1NV2ALH2NXQ3COJECUIDEZ84UYV6Y3LKV8WXPW9CT4NETBA667KD7K72ER8BQB3KB673RLPGL6KACUBINOZRI8DB1UIYOXLH022M36FKH4S0ZXQKFPN1BC23TW2X3RSNK299ROEG9F9DFCB33XIY9K5OZZT73HGQC4GXOGTRB7SW3ONHLZT59TD0WL9SV7CRYI1BWEFM4Q');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (313, N'Mr', N'5CYVG8U7QHEPEYSLWIDEYRI1I4VE261BS5XG6NLOO4J6836W', N'F9Y9GI7GXZSAIV', N'KFG7GE1RLVDJ6O8UOSUE14OFB11PYEYIB1ZOG3X2392A2B7UN1YMXPFGR1VFDBT7XV74PJDKURAS2', 236, CAST(10265.15 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (314, N'Mr', N'WYT', N'Y1XIONECEVFR6RJFVIQU9ALB3EIADYWGK46K1HH81XKD0Q0ODJXRR1VOGMFA43ZGZZ62LZED1HSBQ7ACDTWT15OJ8H4E274XY4E1KY3E5JQ99JY8B2WB65FUANT3UZATDU', N'DZT61WFBKLMJXF7IPSFUC63344NES5FNEDNWM6AWRLALH6MXDC2IC716VP1W91IF6Z5KSBWIHJ2QWHMYIP0G2XA6BG', 37, CAST(5445.74 AS Decimal(18, 2)), N'2R9LBBBL4OAHIQF0371W3U1XKNCL7K61I6B9NZYGJM83N1JKGDBF2UK8PC1OYQDJH9YBF6C38KCHLY9I3S4T8RZNM3JAYAHS8OLE2759087HH2MR2IK6MKBQ9A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (315, N'Miss.', N'H3ETXCBDF5JF2W90CF8WOPT7CSEYYH6787A2JM9A9B9ZZ', N'LT9SFPIOHEF9PJW20BTRTPKQW40J59WWE6CF29HLOHXFVD4JYW9IK3JW8IWAPYI8IJVI7G0QT73CR5VI0GL8ZEBBMF6JD7VQ', N'W5DNQ2UFI1252FK0T4AAD33EJ02C8OY8BAZD4WCN123XGKY0IXH205MT1Y3Q0H6T2TTRG7WWSM9BZ5YZ22UB7W75O6B5SLNJV9UMQ6KA1K9DWATV03OYNUM6LN39WQ36ZPFQBB9VHJAMMT9DDF5PX', 115, CAST(19544.10 AS Decimal(18, 2)), N'CN24X2K8XCUFVNUSZJH6JGS7GQB5ODV5RISMY49FWUPE82OJRRB6S45VUUO7REKJHPNCU7TVA29PREZD1SEW1OCNCXS4F1NI95WIFCOJX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (316, N'Mr', N'66XVKGPWFS96H', N'PXCILCI', N'W1NN123BEAG3E6V3KOUSG3J0JREPWGLE8ATE2OA6R650', 233, CAST(4871.78 AS Decimal(18, 2)), N'WQUG4GUB6Z0NITC0ZXFPG8ERFLHGYP3UYMRMSWSB94VOHLN25ECR48ZNC31IYECHW5PW1Q7343GBCP9TYEAJDBQQM49OV9CURESBWR1E68N0RNBMT7KK3T4KFY9XHJ8URLKYWXW7DVC4OQYZSNUOPSQYA7WYI3XN0S962CPVAC68GZWPZ94TOK4YUMOP1YP9XP4VHSW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (317, N'Mr', N'YCEYYC7UM6HP5XMDGU8ML813WPHCSISC54CXXA1MIBK', N'JOC0753ND98D983', N'JF2I9UGU58THN49ODEXP1U4DG0WDO1AYJTZCB7MM4K310WFJ1HDR7A4PAP19Y253XUYT4WC5RBKGQ2DJKCC6NIR8PA2M6DN1FZ35YMF5580VQNY7BHOMQYGF3P3TU', 55, CAST(2650.47 AS Decimal(18, 2)), N'XZDDMIHAB6Y8Z3ZGNACGN0UBNXARV087CNWP6RCB5EDVZG9TPN86FGTW51PO7PEBYRVB7A9VY0B9NYC6NH17R1RWUZK41N4FZ2W8KYMFDC8F4J96PJ1QN6JWZZG8Q4TAWV9L23LOVMUETCRAPDFIMDRSIZ8LHDP8JYJ8AO4LYCV1C43N76ICPBOI4H22');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (318, N'Ms.', N'EVBS91BFXUJPBB', N'JVR9GDMCDD17I0E43CGPYBFA3V0XNCOGT4YQK8F520NT3V5CV3AXSE88GH6KCOO0PLED1OJVXANYOL77QN2J2ROFVP931UTDBM4IHRA6KE0IQAKVAZTPM5', N'ZEOI1RZ8LXW71FIVI2BUAOO0BGJO18JLBF8L67L78', 217, CAST(4088.65 AS Decimal(18, 2)), N'Z7HXLVVTI019UK9HQFDWKDBVDJ7A04TL1PY4E3R88UP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (319, N'Dr.', N'8UU13E4K1LPF5SM3ANBO1EP3Q6DEALMLM9SRO9GB9AA6JM6M', N'YXZHCFFT2H', N'WQQJX1W871IZFAPN7L8A7CEAVM6WOAG4M7SYASIHSS1I3BZXWJ00ZYWJCFNBUZJXKDD8HRDE2QHEBW7KM8059G4OA9LV47NT83XPYRG55LX9GH8G83OLYEN38PX85I9V3O57YHLU', 158, CAST(10120.77 AS Decimal(18, 2)), N'H2UQE0E1P5AMWLK1NLSE7F74M53MN4OQO5EAOGVZQRWWEC8SJQLN1AY1UQ48XREKHKXQ79C6PTNGJBPAWB2WJ0OD7DGYCN1YDCEUEHLAEEY8NHII0UCMOH0GWJJUTDU2RO27XVVFPSI52GQPUXXIAF9WBXXVYQH0JVGYFAL5YXWWYVEGTTZVGCRCF6VZX0GZBIL6ZSAJCRJDJDXFJH14RLJ744J8FM8YGXKGA7G0JFIOTDT19FFFYC7PYD2V924QJLXLTH5B11KB3VEQBHYZ6SZ3PUHW5LRHAS58G77');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (320, N'Miss.', N'R81ZM0T5RAW0QAFY4SWZUF07ZER4IK40Q2', N'M1HOQZCWZNR6OL4DT214R6P5LH9YR4KX0GNJEL8UCQ597RAW71MR1DIFBB38QE4U2T57XLZ8T6R00FYU6DQPITWNX772HZ4XLB6EL3YL2DYUL', N'UZOJV7T05M1I1UUGTG9U7ZNC26SC0H', 183, CAST(14822.69 AS Decimal(18, 2)), N'A4EXRVM3ZBKR35JQLTWYZ96G931AQ6A396O2E2BT7EWU00D48EMMB9S0YYNOUCDT0GHXGHCIH2R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (321, N'Mr', N'CLMZ8ZMWYJAJ0U8FTAMHC8UZ', N'EWD92CNFB9WH9QEWQU2UFP8J83E5N4U22FSBP7XRA60WH4U875N4SR2PNT1YYIR6FUFTX27JWB', N'HUT3EZKDH48ZV8C1TAQ50CZLVCCHPFGZOVKN8Q', 1, CAST(18102.96 AS Decimal(18, 2)), N'CBF9PW1BJNS0DO3FENZV13TKIQ1348H7NMJEYYA19CNGJSEX4U3VJ9HUQ88AAFJKI50HW0O1L0THX2XVC3ZA5MOE4ONPPZQUT3XDRW0351AJF0XNBCY6F8EWHMC7CYBL9ZNU5J3G3W43C5Y3R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (322, N'Dr', N'9PM76WANR3DHSN07I1NPVQAA4AP4L64QNSZ9ZPS', N'8OB2396XIHQ9BC2NV6YTRETHNO0A4X47H6T1BRXPRL9POK4GUFBDYHSUVTFE8WSKDI', N'H83RQZZS4P4Y19BQ5V781N3N1N8BZNOT3U9WWK8MVK7RLHEPC5FS0HEU5GP3QOSG0AU70FTKMLDHFB2K8', 33, CAST(19957.02 AS Decimal(18, 2)), N'ED');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (323, N'Mr', N'0W8RVX0ML9U67ACIEC', N'4J1C4882654T2KJGPLQ9ZEZ6HBIHVT', N'ZT8WTLFEQGU5V6RRRAM6PXCU6F3XFUD5U8PZ74H8SLOCPHP7PNJRX2T1HEPDIIZW2PANHSKNS', 215, CAST(4276.31 AS Decimal(18, 2)), N'JEKO0V5JSQ7QO9GD2IR8H3J4AKCO9GDJXKQL354NYWA5WDNVHQOGN5JFUFDGJHACDNS4JU9XE3ALTE7XWG6JRWWS0ARNRN4GMXS9KJCNGR2JUYMG8GJ2BRKHQ0493M5RZTYVLYCD4J20TDX1OAFB315VDBJKE3JUMBK10QUA36XSOKND22LS6TNXN2IAFSY1Z8EISW1XG57X4D7TO5HCIRNSNNDX7KUA7WSF54K60NC1LQS9VPM9BMJ7LLV5I4QWAXP8KRNJLBBUEL7XU31HXLZLCKUK9ENWXGRO0KP422N0AOTZEXBF38YOY4VZW2A6NFXYUIW9EWFUYYAN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (324, N'Dr', N'V762LYMU0NQ8T90OYIIE7A3IBCXICFHVNMWFUTNS83ZYU10', N'B5R0XS374PFMPQ0CUOF2YM9TPJVUSPR6DGTNAKMOMEMJJS', N'E38Z4OPW7RAM8SENHSE3QALR9061PX2WZJNPTH90OLB7MGGI9TAR8ON3HGQ4IN69PDMO4OT0JDF4ZE4SJOSVMAOBWJ7CR', 219, CAST(17579.83 AS Decimal(18, 2)), N'V6B38SOH2QWPP80SGCVRU5V1106T3QZU781WY3FM8GRS0KPOE2HMFWWQAA27MVECR1HG74TDX8IED30H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (325, N'Mr', N'7LD', N'FHZOSFQPOVYAEW8EFY898XC292RFK0Q9X9FDT1ZRMQ4SC98REZ7LAJ1I4XEPOA5O5OD5GVLDYHMISKP0U01LT4ZE7X8VMA2BLFMNW3AJDT', N'I0E1I9USEKZA8V8I43CXKUUBNEPBRKHH9DVFQXVVYR98VC2S2EF40TLN53D4KI1T2I0U0TS68HYTKMFBCW9D5DHFS79MKRAFPG5DB7S8M8VIVR3JO2RO9OOP0L2SK5M', 105, CAST(16300.33 AS Decimal(18, 2)), N'IE18CEBBBLO080C2F1Y28HA84P6DIC7AKW3HC4EN55VI5CP86BX21E313T4N7YSYDEFCXVQBMBW2LR2R0Y76E586S1DI0QF7DX5RXCAALMFQH0GBRCN9RLJ859JVH7BWVPPOMAUNNWLRPIOSL2RN26GRDWMNTFSDBIUSBSOGI0LU0RINLQ9FGNUP9YAQO6T837G6NVHTDB41LLQLDY236DXNO4JCHYRC7DRSBCZP9G25JS4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (326, N'Dr.', N'VYVL3OR914HL6VK6CKU5UQ53A4N9BZBQ1HZPRBB62EQ4LESYGU', N'TWJQK7EUO9JV0PYXJMPROEAWCX23RPI7ZI6HN7OO8FE21KLYX5QWO2XEL', N'6I34G10430QXHYJ03PXHZM61RGCP40OGLECCOZ3M2MK8XR8211PU85HJC1C0PAZ3CAC2M7C4MAFC1X4', 187, CAST(2930.41 AS Decimal(18, 2)), N'7PDP4Q1QASHJB4CEJSU8UY91ZCTQAR4W0W5RL17HB0IJUGD53NLQXWS8FBQRWBFINLIFYKTHKDWTFQ7JYOMN6EY43WC9BGKZL0W8XY6JT45KZZTP46S8PSC9ME');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (327, N'Mrs.', N'MR855SSBZ0HY1SQKPWVF1', N'DM5A2YRCVHJHACY1I9Z8VRC36MZLJXLRV0T1IYCGAOP3FGUDXNJNE', N'7AN3AT7FWS0MM3XRMHWMF5FUPK7XQ5IFWBSEMWSI2W5U7PHJCNPK0IL1UTDQLAPRAKPBAJ4QPDKJ0LN02OL2FXEEPRKTJ1WS6DKMZ68TIZUNX2186CNXONCC5BLJYB6NGRCM111VGRJG2RGNPBN', 35, CAST(4954.48 AS Decimal(18, 2)), N'18K64TX8FUYM0I2T18E443M44NBASNMMJL4B9Y0R2QDV6KSQMYA0898YLF1HHNGS7B2FDRJ37N2DQRYKULNTDME9D6PUWJ9FALOUHCCVF6SK7U7UGHMVZMELXT261P6ODM35232I8SE6TT1IYVDFWEFN63XOA6TP047KR2RCE4M778R3RJ86CQSY7FYZ6E72YO6PLHRW301RR7GYBTWRXMD9B8DB4R60XK8I');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (328, N'Mr', N'O2GZ1HWCOSGFOZSBTWZ0C5LGPCVT22LFJE36P5', N'SLA14GY5TXWRLAJXIKXJY628OQSLNVEXDI78RHTWH5VS7NUJU05YQVELJ2DEOCHXIYE22A50Q01SAA01V8RMQG7I3MPP4F74', N'DZ3J17LPU7S766PE74BRHX3V9EUXTNOZ9HOTKTKDAQWCNVLAXB3IVMI6F5Y1UNV7ITXPHWUDKYHQ0Q8DTJ0IJ54NZHEEUIJMUPTUXWS1GQYX4R5OXL8ANDND', 122, CAST(1118.64 AS Decimal(18, 2)), N'2HASC3BP07ZZZODHG4CBWDD4GRBU0U6YXW8BMZLJ1JA1DB43TJHFW74P45BKRHP60122F1VGITAC2CR4N80HCR2PRJ6GN1RJU40C91NRN0X3XRMSE7XJG7U9YCBWVETG2QIYBEVLK9TCTZS0WE2F472NAQDWQRV96G069OGZBBY7DHFZKBZHCDCUNUNL1YVTDK5DYLQ8X23T9V9SADCFSEXS36JF0VYCG5TTC21YKRJ9AJKRKVANMF1ZMC9R2A714QD42FF8CEU0UNIKMRU5KAQ04T60SAV9JI5J6GP5G2B8L04ZTO5BG2HU0DZ89FF2IKHCIZE51PPHY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (329, N'Dr.', N'AENBPHM3RRD3', N'X989SHJV47PTLB81BIFLV72RWYGLGWBSW5D1SR3R8RM8HOHBSXSJ', N'APZHGI1FUVAXEFWQY1T77I7CPG998ZH1G5N6SJ07WI9VURJ', 132, CAST(13577.21 AS Decimal(18, 2)), N'E3P7634JTG1AISGGV0N9P0IRGTAZ9RDZVIYWJ18BXZR0B8HLOLTOUPSDKXRCT4A131F0UKXURCBQ9IG8COBOYP55PKBLAWHSOPX9SGR4OYWHE242HIZ5TL3EW9AA8BKVUJ1KK6FWX70ZSNRMG84RWCY3LJDI5HVCE1NV1JHA337ML');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (330, N'Mrs.', N'G', N'Q6GDT0XE7WWWGX78KFOD3KUA7G55S4E0DE', N'BKOBU5HRINSZ9R6VE9G8SQXF1MBO9BHXX4YOA57BOWN4R1X4BEHLBBDLM9A7USI76U15TIL915KW3SOZO6DUUVMMRC10UZHVDGYWZSBTS7K6QGITLAJNFNCB8FDGHKE1', 211, CAST(10496.03 AS Decimal(18, 2)), N'L9INT06TYIKYY1TWQGCNLRZVLWRTNS4CHHX30INV5K25A2LGH6DRAYIU9M2W9D55D7HG3PW8SGH0OULIBACHFD1IZ3UDFQLSFWR2L4CS95YTHI5E1JLY0NQZ6YH0UJS2VOLR2IW6XJ7AE81GXFBW4NRR6SWNNCXQDWYSXDBJMF0HGGKXW02E7VX7WTLAL9JLLHWIA9JJ4SAPMABQ7ZQMAJJHZQV3S0YCWFVZJ2NNHJAFL7KMIV3MIWA2XFJJDGR3UXT6EC74B35R94WR68LXXBUZ4T13J490R6KNDD76NYAERJTTIRD5VT5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (331, N'Mr', N'WIH0APM29M71VAVLMO5OLOTVY2832PYMZIIKPOV2OCEPIGQTW', N'UBEARADFBKR1D8F7H45O5B65CUSL2IWJ2ADX55X3Q5IPFFSWDWWW7PG', N'OIMUR0VUK1MBGVAU7FKGTFQ3NOKEVB8SII1YVZTANSVLQZRJ3L9', 47, CAST(14254.52 AS Decimal(18, 2)), N'2U2LA3L7U4Z2J9ES1E9Z1F7K07LSR45Y02KJBMVKC3KNKQA9DK3GK6GNMHL2HTGPY11VGFIOMYVK09XCF60PDULXWU1T2JNUOJPTLH4OXVKIS2HB55E9P9N7UQYMDPM2A0WGK3QX1BRI925UDPNX4D5FWIZUJIA79H7R60R1EH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (332, N'Mr', N'RFTRF7OL17GJ0KNL2DSAWXS309A4DICE6WXJS72AV3M', N'48YWIRCTO8Z2VH2C72X0TGQW2V85LZBCUUSW60LYSP16FQ0VUJP5RGPNI1UMJ67OXN81P556', N'ULU9RJ63FHZ8TUSXUBZ7M9S0K4DNW1B923XWOS6CSPU6TNRW7UPRM1JKSTON6J7E5Q5QWV915NEWFM7XDHG1BJM0JD3U3J69IF02H1ZBLNMZMM56MRAO252M356JREXLH', 109, CAST(6145.56 AS Decimal(18, 2)), N'DH5XRK49O1OYXVGK24WDJ0K8RVDOCYMIN5RYRK79E9M6KJAWPGPXI3OCWW6W6GWQF6BS3HSHXMZAEEO8KHYV8OZJHE1VEA2YCVQD8HT7N70W4DYI7XCPH0HQ7RBOGX3NJ0XINAZ3NR71O2F3GINGYDGBEZ6H64RQ3CD3GFVXY91QTF25C87XANO6JM4O4IWJ0HYBPBN1NQIPBQIYX15YXTFFO7JTA6SFCIQBHQF0K5AJ5ZUT35R3DXL62INHRTQGX2CSZ7G6L4DRIVAOC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (333, N'Mr', N'L4CU1WED1L8TMPR6W', N'Z84FJHCVCB2A6KD54E56YELHC9SHZ6PEJNS8K8YJHQ7V5ER2UWKQZZIKMM3APUV6LORIS5KWFMO87', N'EZL4GCH5WNDX7X8C9H7CCDZCUGJ7Q0IH85KHBY7XPEPGR9BU5KCZY1M853H0M9XV5VO1CR1B99NXNJKK5O15OIJ7JCB7G7BFHUAVL9HDJ0QODOKMJXVX7S7MBHI0FUV', 150, CAST(19869.11 AS Decimal(18, 2)), N'Q5FP2EXJ8Z2Y8RFTM2N2TWOKI8KTN67Z512L180XVGYH3NVLCP970AWUGU6TU3V2R3S7PTRD2P6DX7GVCYHYW0YV5857272S');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (334, N'Mr', N'8JV1C3M3SUBHESA5IVWG2', N'CXHPN3LYEJ57LY4OUNV09HN9AOBNBDBADWA5T06SK', N'Y7GT8OZV6OMNSVTUSPNICD8ONOJ4RHXO5NQ67QEUYZQJ6JUGNO8Q6CQKZS6J5V4PQXI45NM1BTKCMOI3U3G287ITX56FJUP3U1S91PB016ECSDXBA3P1E2GIEO7ZH7IG4HILV824RF02', 158, CAST(1842.63 AS Decimal(18, 2)), N'WP0UOWJYW5B3IW8DBGWLX5R4X1JAUMDT1HG0O1Y00UNRMCWUQR66MQYWXNGVELAOQOURXASUNX5WH5E4RPK3G77BJJ30L2LEKZ1YH5XGZBIOL1FR8C3P167JHJ7D7R9KCQBI4GMMR344OJPI4BS9ZWDER');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (335, N'Mr', N'4YDLN4X2GVEBV3RJS97Y4J2J6GI', N'97DKKMRQR0C6GUA8EZRXM07UUPNZVUG2FM7FWQ4PWKMAX6FGVKL', N'51J7U4G5NOSKAUCHBJUNY8AVBF10K9', 185, CAST(6488.17 AS Decimal(18, 2)), N'GYXK882XCUPXNRQHXX22UYTP8VYZLFDXQM0NO7VW2Q6US7O1JIZFCONI48BC92CWHR61R2SP2504RZW17XG2GXL2YHJFWIMZDAC10N9HP9D6NJR5C95CM9GJ532AJDTJI1QGMU0KNYC6KEEFPD2MCAC4TTVXLZXCGTOMSAJI8LPNW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (336, N'Dr', N'7V9GIRFXOQFI6PEF33X7DY2N84C', N'1N190IPUYSVXKAQUNUBNV111EWWO974A891SKXFD09Q4POQNFLS08YCZLZV3L1KRNKOA8Y9PFYNLAWCP699OE31AW16L2BSZOZG4ZFEHC3LAAROOM5XCSWD', N'1EP', 32, CAST(11098.22 AS Decimal(18, 2)), N'ZRPMK5A678OMNTZ3YN10PQQSMEUKERLO7JT48YFS2AMFX6NQI5M1MWK80W05BPSGM0E4ZVV079YF4BUFR4284J1AYK4BX9GCH6TXSIQNALTDY43O2KD7NJB2Y35FQJ3YSLYYHXN9DEYJQOCTGF9CW9OYUQYOCBWQIVLC6575X4T9LSCARCYBAQ1JW03RYZW2H80U3ZNB84FRFFC2DOX0DLFRT1G61F6Y8RRDRI7RPM36B93HN1D91VPWS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (337, N'Mr', N'WUE7LGVKLYS4NUV1TPSE4', N'JEE6RNM35OWBG8PQUSBBIQZ5DHZXEG7SMWKL17POGH4MUC8DF6H0K12SE8T9NPPPH', N'NNSM22BGSP1LEQNGW6EUWQNVF3FKDPR6KLPTJXSLNSI6ATMAXT2VZVCX0W6YMQ22YU1T1TXZDS747HLLG5NKMW6O8STMQTZWPF7FST94V3H6O7PI', 54, CAST(12229.19 AS Decimal(18, 2)), N'01JGASXGJOOZBVH5BQH9FKYYJZ2XWC1UKHH688CB9VQETNQHRWKYEIUG2KWAPZJ7NTETEBX2E60KUK5W9K50R2F1N03NB1L9BIRZ8X3GYHK8I9MIE014TJGKDD5D79QDKQ9BS5NCHP29I7JDEL8B0GFR27MVRP8OR6NS0AP9DPM4H616TSZM1FD3AH9LJSKSHDICJRC3VZXATBAV5G1YQLNBTJHJ14PK4UM3OPM2FVR1H29Z6EF3QL2VQ6IZ9T2R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (338, N'Mr', N'G3IA39SM7EFU0TC7WP', N'PKN4PM2MV0MDB09LH7Y67KUS6SEG1RRF5PMOQBHUXX6161XSZ17IQAX5QUXW8LL3867LELV6P499ESM4VMGZJ9OVSHXVDLMBB2SZUCEE60SM0ORX8T1L5MKZICSWN0T4IXXB', N'KHG3IG1OCK8ZA8JTAFS95TNWJOJEZ012BB5CIT7Z6RF804KUXDDSW86RUKJTWMOCJ6NZ37AH7S3DDEVE3OHMM9534EHX9E2J33PUHK', 245, CAST(13618.92 AS Decimal(18, 2)), N'D6ZO77GTYJUULTR9ICNOMUIRRDH6NSLT0R4VAAZ6Z9S2814DRPRHE2NIO7XTP965X0UTPVZ8CGPC2FJQ94FX14EX4L72C5HP3M476ANVQJ4YDAG8O7KLT94SLWP3OXV6YZ9FACJZGK6H0GKU4YE4LWWTHBLAKK6TNXZD00YBOL492NS5BVYQIRL23FYYQ8EWDDT2G7T302F0RMRTJFYPLGAWCXAL2ZKF78WOTQP42UPGBLA4FB9OAW3XQJW71');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (339, N'Ms.', N'TT5ASKI', N'', N'Q2WK44SDFO5P752QA0KUOPC7TPKAAO1XIXQ', 25, CAST(4298.46 AS Decimal(18, 2)), N'HZTJP20TQUNQQUKRMTXXJ96IX0LVZ58UTOYBRQQL4MKF0J58DZW2A4H8TAMPH4TLMTX1W8ZV3CSXPQHDUCI085KO7PIH404ZTZT7M3C5Z0ZYBJJ3S8V4MSCG98U6QHR27T4QWARR0D176LDO6EPV5ZD0MCYD96EH9XQIFT6IH449R4ANV6ZBSVW7G33JBDHTYJY9VU8D76E1V38H2BI363PE0I2BPN63MAB861R0XM3LGUCCVLH0VENVTJ8DSXOK0BFLR0A0JH5KZ3X55PG35588NGEMSE80XJL5FRKUAGHD83VQM372GKEU26XBLO7495MFHRPE5LTPOV0JKO0P6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (340, N'Ms', N'1UJCXG9DBOADLRZQEOST1PLT2KASASQQK5RRO2HERF1ILB', N'AI81SIG2U4Q0MJK06PISHHKHR67O43QFXMIID3U1JFHN6ND9KHR8T65', N'PO1ZC1294OVD1CFTXQ20QOREJH2QN76AFI0LYKINN334U79X970SUQT1WNFVYBLXIKYICT', 65, CAST(5473.73 AS Decimal(18, 2)), N'JD4R39T99M8C42GF8UDTXVQP566DQWNIX2M8BQOGKVC6HCRX34G5CD9ONFLW2FICZQE1G84I5X81IK7TF8ALGH5KTXLV4SD5DZ7QXPHV0Y0F57537RGU4WVHKU8JM8DDJ2OICGWPRFLIHQELRINDBJ0G4Q63HY8RKMV2JNQRVQ2PADZTGMR4L01Z27ELAS8T7UXUVB14RWHLHB5QQCNU636KKV0C84G2I8IGG4Y4LNDOIGIR1OVX5DM3OCAZAPVMGE28SPALEI9JQH23C8AK9JW4MES3UZTV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (341, N'Ms', N'2UEW3RO1B8P9D5G2IYKTGZ72C7E2LO27RB8YWW', N'YQAMBRYRDB2011N2UH910WB4SX4MBI', N'C8FDMLNJB74HF6DFOPZP', 15, CAST(5103.52 AS Decimal(18, 2)), N'Q83EAYBD9JN33C6A6M1EBDXHXMEX7QEODR09YP2AZ7ZZ90I2LSOCRHGDBLKE6I4YQBCXCGKRF4DX8X3B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (342, N'Dr', N'YV4GJYS49ADIK0IS2MC', N'RGPJMT7PRHQ9UKD8ITPDCX4S2F6UDMBFVPBKBH08NRHJ9MGJFPMSM59TCX', N'4MPCH5L99RLFCOKFD7F944NTT6Q459SD4J7LQ04F192GJ22IS0BIJG70ZVIBFH40Z7BTGZOC2Z7U279R47B4X9UOC7MUHT0K41HCQ92', 15, CAST(9055.69 AS Decimal(18, 2)), N'E21WVBMXC9DPL0GUBA6PNG7S02C0DDIK81RG31U0P0Z661U3W3XMWMPYV9WTZMJZQSHJ80R9G60NG0MY893AGWOMCTLU5012G0FDKAUWBN6QL2HUMXKPJ8IU4U6EFX4F4X6GL8EXE7ZSPX0ACR77GBJ7HK9P4FGEJRLOV08EJMBC9P57TW2OPWYTEYY0ZOTYQK9YBCECITNTZ6YRF2V8DSOMSR9X18EUTCMOG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (343, N'Dr.', N'WDMFN5HI2WI6MCLXBJO4J24', N'7NDC56BE59TW0TGQKFKIFYNEN0ISQFH7E0TL9FCDY7B9MTLZ6FODRE180YO4NIOPSLH0ZUG537K7', N'BZFJ8CYSMR685Z3PDNG9DUU9ZN', 15, CAST(12412.71 AS Decimal(18, 2)), N'VGHP6W85T7Z7KXTLLXWM5K3HA9ET0NK9B86EQNMRDMY2XUOH17ROST1BDZFWIF56MQWBQEUYB49JL1KGLWRSWWHH7V1R8P9YHRF7XCRNCTCNKHPCFYBLNCAQ8E3UD3PLVA1ULDI854F3JUWP6OB9ENA4HPYI8WA83RR9GUQ2F2GJX76EIENOSF680XDWEZ08U6ZS2M9BX9UC6Q79JK0U8LGNKI9IHUOG17PQ7EBV4CQJLU1AQ3DTZ5Z8QC7KDQT3KDAZ0G1594PWVX1QGYSDHUGW7HZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (344, N'Mr', N'85I69I5BKCP', N'DSUEJLAQ3G0YLLAR7QFJLH0BL0BYJAKUTKM6TP4WDZO4H2E95EV', N'0QX0V5ISXTAFZ9U8QMRE5YRY3STGH46KKNX1OQB3N65', 25, CAST(11603.94 AS Decimal(18, 2)), N'6QIDIMY8J29928KUG2CTBG3EYGMQWERJH6YIMBE8YT7EP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (345, N'Mr', N'9OTDGA2CS6W7FKHJY8ZU9', N'4O2WRITIAC7TW640Y4XHMJ6MSVUJM1T4E3P5IPEBWLM1RV8BXDA0HEULIG4WNAW8I2ESGYI8QLL0W4UX', N'37GZJL3N79K2YYX2', 78, CAST(13012.71 AS Decimal(18, 2)), N'B9AMF446KQN3F208B4APSV9184O4UH9OOF4CFAYMEAM8VIWC7QI23ZQFZ8EBG0C2HYEZXNS06NAH916P7BW3Z6LPOOD7WN6EYJRW3WEJYHWFO86Y2O34383ADPA9AL4IHWJQ9AMBWC5HA50GIE47K1BPGGIDL59DDDYSOG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (346, N'Mr', N'7HMB9JQ', N'JL8RSN084N1LHNMPEIOGGUYV2AVSUODL694ONHQFEJCBGM8YZBIM6H6', N'1BSNPVCBSK0BORYSVVWCTXW1ICB2U3QT8RLVC8DB3NQ13BIHM9321QI4ER4CJ9HPT72X52GMIK856UX7TTGLZNSI9GGK40SU617W9', 22, CAST(1023.28 AS Decimal(18, 2)), N'S2R8Q3L07PURWGXYGKT9TR8PR3R4W78R2PC4STKMUGBORDCXFFH7V6V1U2HMBH3ZG3P64S6M07FCFJYDRUOHP0WVUBAQCXBDCB7NO6SN8U7NQIL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (347, N'Dr', N'M9N0OMQAN9ZRZ29BRO1MCCCUBEHBR51JLLKMKEVUS', N'MCOIS7EF9FF8IX1WR91WHMFF1WTI6RFP3F2AS7N64X2070', N'BJTHKGHCYKTXIPTWP6FKOPLVIHSEZ4N1X8IWRI2B0WIWR6I20AC1HPXMYYY3', 182, CAST(10594.83 AS Decimal(18, 2)), N'33VGSMAG6TBTIGA2W204BAOK118US85BPZM82UKP1RHUUZ4RK5ROIGZSFBERDFNXO03JT2Z1HA3KTTQ2WHANHGS80UTRFSCL3J6UWLYH5Q78DEYLKCUW40G87UIY98LPXHHANW6BITHQ9KVLW763YFH22YM12Z7X4IAVXOXO6IDBJPZNZX212IQI0E7P949JLKMQ9ZO7AHWF16JCYZ14W5ULRSVJH8E19UPZ38DZ9VRKLBGUVUQA3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (348, N'Mr', N'KQUHU57BJKH3UAWS', N'19LUWF97ZX9HVDW8IZQ53UQ4KMUSKKE81GR8KWJ9T82CJQRT8OK0HUC7JHAAKHNFJ0FEMNOLGGCUSDKTU1JV', N'3DUWSZA7W4733JR6O4BZPDOSMK8BVYTJZMXJOZZ77U454X', 209, CAST(3153.50 AS Decimal(18, 2)), N'MFP1ZG44Q13V67GJ9QL1V1EAZFC0NMH4Y479918WV44PHQ58DBKZO19L1F1K43G4JYW2Z797IP6RXOT993MC1IFXUM7U0OSRN06IT3861CHZUHNCLSA0G421IZ7DZF7UXE3WIAF6VGAO0G2DYV87DRAIX4ZUWV6M5N2FDRUAD450UD02XTE46ZG53LZDBLAZ9NJDEMZ70YU9MAOK3XW2H2G56WBSRGZRT6Q6UNNAU63757JTXFAEO7H76E6IA6FKY2FFKHPF9M7BZ80ZCIVC6K3MOJ0GH5ZNQJ82R39FPU42Z67');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (349, N'Mr', N'95EII7G5EHNRDT7', N'', N'55G9TN3ZQO1A7QZCXBN4HM8IP54RV9JNO725FPZWVN7UMORG8I6UHTVJWXJOIC4H5EMZNTW8BR8UFDV0DNIC2O6VCJ8H5ADJ', 91, CAST(17260.83 AS Decimal(18, 2)), N'D65SB3DEZTR1H9Y4MJKGZX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (350, N'Mr', N'NRM0UJC4', N'Q64KP2M8OCLNTIAC6K0YK0IHE5XHGJXSF599A1XLZ8RZ95K2IIUYU0TQOM5K55S5FT7N8125NEZB9J79LVYYOYXECJKNV', N'PP82SSFMXIQK14J2JBVTREG8QN4KE31DPBPNNYLV3Q46GAAEPFMYIPRB90B4NV7UHCVQFV', 160, CAST(9497.49 AS Decimal(18, 2)), N'99FNCF1MHB22AZ7CN5U3YC7YFV0FFMRXGZVIVF1YX69PE7O4F7XB5U9W1H7GFL6VJ4MB3OH73W5R3IK87V08PGSLPZHE7KIC0D59KD0QQP79OHTJWZ9KLY63C0L472ZIDTRPCAOTUAIZ8JW75XH8BYQ162XJRVINPPVVQ46MBFPBF6VT3DZ9LR7E2PIAD41YRVAIN1H1RUXV9FMZ63GEW91YIGS1LW86EQKKWC52WYIQTB5M3J39ON2HTCZ68GFVMQHIV13UYDHXQA46B6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (351, N'Dr', N'LH1HQAPRPLPE52IDBGNKK6QA96IA', N'GUGLJGXWTHGPBF1IG5FVYA6THHVSBOGE99Y5UNZQCO1HHYMHDU3F8ZE5NM32L5K401F2GWNS6OJA8PBJVDFHL159UTH8KW', N'LQZP19ARFCPUZH2UZJDENMG78JAO3FKZU008IZP1Z8WRX07DEHV61HRZASHIYLO0SQ0ZGUB0TBEEQO97BX9LKDXC', 4, CAST(2287.93 AS Decimal(18, 2)), N'2SZIQN2QJCZTGIN42U');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (352, N'Mr', N'TQSA2WQFNN', N'63WGGIK0G6A9JG4XYAK77P3JZV67NFF89IC6B8V0ADYAARLTQVIXZPYH0DHKCDD1R2013YLQFKWURS879CGSWH8JKV5YRANX0WJ8RKQRASIFT3P849BZWK5ATGG7TNY4', N'1YQI73EJVZ708WK6VCP2C8LJ961B3GESNQEWLHM80VUP1720PFO17AVSD68012GFKECIHOKDQH2HEVH230LNRDLDULIE9L6XEE5NUKI0VAAQ8EEHP6', 86, CAST(9298.83 AS Decimal(18, 2)), N'Q1F9BA65RJ7TV2HD2M7RUTBJHZK1E361COFWMIO8JIB7BJ3RY5KIV3SXPVSCQ5QNC6H7MLRJYZ7CI48XVS29IO68VH7RQCIESNU52W4DD0KVWGFLNUGX2G4OZ8B5E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (353, N'Mr', N'XZN7HFIP3MJ2OKVFQQ8KSFZVVW426RYNTGNKIISU', N'YUU90MOH3YTQ', N'1GTN7TZNW5535', 167, CAST(3917.85 AS Decimal(18, 2)), N'TLGTJU92VZOPVH3ACF2L3VVLBBJ55TKZZD7YE3WKCKZG8DLMKOWW2SWXPVH8B4W1FPPIA5W9II9IWFCXQWKHXNW6GA8JLN98OX1JO2CFSMDKJE0AIJIEJF3RSJ1ZXCNV90UYDT9NJ5OBACM29X024UO8U9R41CIFYIBIK2WP9VVEQSHFWYPZCLQECL4314L6N9CR14I70BS9ZAI2SB83NI3DRW6YXTN49ORHFPDSFHY0TGF131BPWIJ45ZZ5XK97NNZAJ0M2YGN5K2JBG4VWHX8R4MCGP8UV8QD5H4I2E8RFUEJ2FOPTODQPF86WO6CPLRXTPETBMSH85SWP2900J17U0NQ9Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (354, N'Mr', N'S65AN3P7G0PF2FH0', N'5XTIZN1FQ8EA4IYMTEIU9VY4SMD731B0QZ2VUG48XF40M5J3QU9KAV7AYPPD9TBOXEK5G3SDAAWUQYHM', N'42ZQT7JHLSG3U4G71P3O5GLQXUUXMVP74G3BERVYDKV073ZU7O4G0G4OH8SZCMUQ29YD14S9T5BLKKJTUZPXQ96NBFT5YVLRP5XX5LT2WUMV', 146, CAST(2850.39 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (355, N'Mrs.', N'CLBFJBOW98X', N'AH8SQPUSRW4QQY43F27LEMM2WA0ZCJ072BZC3W6PQDP6OMJBSRBV91OOU6VVF8VXNFZSZIWIV1XGE9RO7K75X1MAHX0Q0UXHARY3CZSSYR6MRERMP0OV0QZMSOA1H6I03G5MANC7SE', N'J3WPY4CWWZT2A1MBMAXJJWEMLO96N1WMBHSBXG0R8VS64UUJ7R9JPBMMO93AV68V37RS9AD6A6AO38IQTQZWSCWZV5MNDPV2MX3W32AWD39J1XJGRCG57C2QARW3OQ', 108, CAST(6142.82 AS Decimal(18, 2)), N'E7W1U3HQD1UD6WVIJMBGUE5C6KK2T1OKC0D9C3YT8CVZ65UAYI33XHRZ2KV9IFWCDA15IM5FOH8HJ661P93BXKMV9D7S8OASFJMV4OSCCOFF89GVDTK8BLFSN5W4ED7Z6F10JAX0HRZ95');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (356, N'Mr', N'X7XDVZ9TL8SEVPR87Q15JR67I89UGEDVSV', N'6V0J35E0062GKRCANPQBS85JA85B1NG3LJSQS46V35IT1ZKVYDOH13DXPG8V03ZCPZV0YLHJIU7NQCHBN9DOZZ1H5U0CVBV066323KWCV5Y6WQ7DYW7QPADQXEV', N'KA8264LNRF3IO3DYYM6V08QV9UCMC', 137, CAST(18437.56 AS Decimal(18, 2)), N'MZWBEF42HU3T8YSNXYGF8T8GB3WJRKL6NGJW72ZSU4Y6WP1Z7UT0SPYSRGZAILBW9X6SEWFVZOL4V1KM2WBWRLDYIQ5R2O99T1XYJ8KBEY033TXQWD7M9E5NJ7ANQOSBFBAT3L2UBZHTLAUOSEVPHM0FVAEBXXKQ5OOSJ4MAADA9WC29DMVBS3USBVYT6RXEERNWM24OSKE3CQIJ85XA18X2UV5T4JFVU5P5NBI6J8OQGLCEK1TMC5TK1QLGIZGUOGVDU2HMSVPPD4FVBR82PTJP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (357, N'Mr', N'SR27G8763TWJTKFOI7RS60Q', N'L5N7Z7GJ8F83D0TU0ULEMMDY34AWTD5POSRPHR7OAO5JO4CPHIP2SGHYSO3UXKQVAJEL93C9NX4YHUAZRKEAN2W8BTXTOCQPX985PRFD6GEVBIGXE33C5G87M5AG5JKB6E17L4', N'78MAO9TVDB5PPP3TDNXSYGHVSBJCSBSZAM8VWEF4529VQBJ1RGGPOJ6QQRHCPG21J6E3H8XZ8TMV7L4HSHLCV2BQFI45X3EP08CKWGKIJHHUWAI5MZJ7UQ6GUNNY4S25F', 32, CAST(4457.05 AS Decimal(18, 2)), N'43WQ1NKST2ZPYKIJ6UGG46XBP4RRD4VX61PZKWR85WK2F6C6PJJY287X5L0WWTFO62JXUJYA38B7MVVISK1ULWUXUSTYVUBCHVVDNFB6K8VTXZBAQH4BRL3A7L22PZE8WYQR0HVC8U9C010VHI8DQ0KWRK52D9HKUNWY9J98MS2XBQA6K6L6R0IWETZFCTYZDOIC51MX8ZRXYML19ZH7NAST40KFJUWST2KM8X0IJNYS9K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (358, N'Mr', N'NPEC7UW', N'05036O0XSCZFK9DKG10IJGZ8NV2PWG9C9T274C1JM8H36302SUK5KMQJ5SGALA0C3N5R66F40HWBZV1JV0W1V3RN2J2CVQYB750IY8WMFG5', N'VZ9KLBX3TD', 190, CAST(13752.87 AS Decimal(18, 2)), N'R8Y5CCRB2VP75H6EE2Y4V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (359, N'Mr', N'06ZH5JKXCK2EMOGA1PVN', N'QFJ9QXFKEZGZVIPM3289IK3UUILM3ALFXOXNZSLYBDX8O1NFJ9ID7WK5BPF7CSG4D016L1MBHAX4NV5TV53UR8713RB9CDLJWTVOZGUHM7VXZGIGKMC6OMD4S03TPDY3OE7U0HTE', N'GU4ZZIXJ6U91WP8SLDRFCFZFJV1E7ARXSVETIZ594L82LXDVCJCP2Y80UPF3GI', 241, CAST(5477.36 AS Decimal(18, 2)), N'YTCYYNZC0JK2S7KOKG1QHQIPV1C9JQBF1PA5TDD4BQV5N2PZTQHH35L7AM3XAQS98403XFU63XEQVD2SBDGS8UCW42V7AFTLXMXJ2M2DWBD5QUCXKALX900ER3ZUKNVN3SS9FJQPA3WXG769QXM0UWCXLJRYM7T8FQ2X13H1JWM643XKXP3M0VT7GVNWRS239NIQ487NGLHXA5TIL70W368KWVG6FK9RTJWGK7FOIG5EEVXA15AKR6Z3FYT9S08VCP4Q9CXDRBEN0T60Y5599O0NKS1ME5WH792OR61P8XSFRB2LSSBMVYMNPG6GAAZLFWFQRH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (360, N'Mr', N'3DR17JQTUZ9WBJNKYJYMUGLXC8Y93BHY9KXT7FXZU3HLTHB5S', N'M7JCA2N8VPQ1FUAFQVZD0R98S8K8OG3TYV2FTRIXGKUN719JXE9MT0AUXAJ1HEKFMX3KSUMYC1XFXM0RZ1AA6GZXK8HI8GG10E0AYPR', N'W3C90AEAL8HAQ6WTMI52OX1VTMDZTK1SMACY9OCKX8QGKNHUYVTKAGMY2GFEWFG17OOGUXJX6L4F6LA54J1XQGH6NEWT8YNHSP9VZ1', 224, CAST(6023.15 AS Decimal(18, 2)), N'R4F1CWKV8QGULUAM9NEYAZLEYX60UVBUAJJHFX9R5LXQUFDR4A63CJYSJ13FPK1CEMK2AS6BENTP1UKIJEVJP8HRLRYEUU2KJLB7VBHB4UPOQ8QOGKVAOHN54TGIURHJL85GJCM7XJFUJS0C1AX9YRW2X532UYHCD53H2954YNC41TMCS4HJU7KTC3ID9JCY23GEPJ9R4TABER04JRAQHXI5K95ZQRUFAE2YC7M8UPE0X9FK2ETI8MH4LAUFDA0DZV00P2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (361, N'Dr.', N'25W16NRTPYLHPJ', N'RB9R3VWB9S2G4995Y5ZJD4QWLWEJLQSA97JV77UPB68FE0XQ5VCSP7PNKC66GDPJZR6WQDYQBA86VBILZNEQE0L2IVAV1N8XGPFMU00RWLGEYIR9UL7SZZ4Z63EU33PO1AQ6VWRYNN', N'', 43, CAST(19587.84 AS Decimal(18, 2)), N'B41WRIH8AULWCXC6OXXC1D7VJO1118EUZMIE6QPL32JKSDOFMPC3RQQYW6C2GG71GQXQFYZX8B9ZTM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (362, N'Mr', N'ANQMTDJMYSQYZ4UXSGE8B17EA1', N'TJ63Z411FFGYHKGGQM5NTWSDOS', N'CVEPB7RH599DEJAQ6HTF1QP8XMNHBE63J0KV2RUGMFNZOA38FIOI8KYM65SPJA5Q35TDYFNENCTL2PJMJE2SQNVZ2YOWZ4WCAWVIHPAZU9UVQCJGM6647C0FATBZRRFIGGB5U04T42XGT08PE7ASYS', 138, CAST(11801.68 AS Decimal(18, 2)), N'60MEBVB39VKH0DM4MUH41GXZOQEVFHR4A352U2V54NOUVHYJL7M4BH1P2MQLHFNS4F6X8KAKZB0ES347RU98UNSS1FZ7BAOO0WPFA1B1W15ZHNXZIJTM6EXHMDVSL28ONBDVEOWPJ7CTHSBEIZPSG2ILY7SW6JGUTGC692LUM33Y24ZU2GALDF7KTRW6V0IZRIZ1G55GEU6DZJJU8YUQ9VGD8SDH5EYMK37K4YEXBU6I9UK982YW5SPV1MSNSNAZVJSVBZQ9KXFFOX3E8392G2GSECIH5Q4NJ6NQ2OY8BOB8D963JEFOE8JT3ZHZH94U');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (363, N'Mr', N'PYDCDY3JUKIZCJJY9FORPV1T1BA58FC', N'DYU94C5BF00EP2198LC9LFF0BIZZWRSF6KN3L5BLB90GQ7FLRMJRBIYXITYMD6EN', N'XWG8NEA83UCFA1EML1C04EKMAKMKJHMJNBD9ESHFTUULGKYO0LORLR0JBTY3SQPM7SRYN48TKX7AKY5PLYJXSVXWBUYKUDN257EOT00WDV6OKQZCN8HU6RUBUUNT6NZ69', 248, CAST(10406.90 AS Decimal(18, 2)), N'RWHADBJ50RSQ7E45EXRBG8ANTM27ZR2KHGLCPT62VJDHQ2VLCT2BCICILTGQ9C59O78QSRGLRPF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (364, N'Mr', N'SZUNKFDZVL0CAH1PS3YYL9OTXKB1OYAE8', N'K85EYN39RXCFZA32D7A713OLPKR7P85UC95Z96TYGIKKLIIJUKZY4F5HJKPEVVKISI2Q44S7EBRJJ3Z628D487PW3OFPHE3KX1S3GSEPRSJTOMXGLIBNIG9LT', N'4CKHVLXNJXP9CKULWLWTWDD2TYC6PPV0FFLMR5CVWI8WMLI2YKQDAF7RYHOX9RXU1OTWZ7TQ81XE5GG8G975YIQZ7TOAHFM4KDVXRL3QQ059ITMH1FGZJSVJYUP5JJ8SESTR', 21, CAST(2452.90 AS Decimal(18, 2)), N'VTXQRHU5PR7Y43RVCGTJD4SIU4SKDHJN3FNR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (365, N'Mr', N'6COWDT2PW4VOIJ9KD4GDRIB0Q03BBXAL43AO0WQ5VV', N'N3PZ86LHAWPATNDGNW8GQY3Y3F2HS6AB4Y1O2JLH0G6PT1TV2SXXX7PQZRWS44P3LE5VMPE3AQFASE51M6EZ9DEX8AOANSCWQ23EWX9DEUM6RFXLMV6YQQU807NB0', N'IGU6GEYCHGD7692YMLRICYWWX77RCUQ0UWIYMS2EW6HDBYDA6UR6189KJY996', 152, CAST(2628.28 AS Decimal(18, 2)), N'QZRH0KWZAMP0K8BWWIQ1EWMO9R87KVOFZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (366, N'Mr', N'KY81RS3L6YUEN1O5DQQEYUAKE9KKGEBH', N'GHEJJPAQ4OX0KEQ76SD2ORME507VDPAXCAD4R8W8AVQH0P5FHS1UYXFPU0DIHFCFEZNA1MGXW4SS04DGVSDLNFZFUO9RUDQVIB301UEVC3YT5MOQMXMP1RSYZ8FDCO2IEX9P0D', N'0MQDC9Q3CUIDL5GJKZTXKI2JYMNYEOIT8P6VNYL3J3HXOON330DAF9MHK7EQMSOOBP5WZLVMDQDH05VAYJUDA8DY2OAGJVGQETLYJQ3I5QXPV5GFC4R2YAD3', 76, CAST(16137.31 AS Decimal(18, 2)), N'MH11DKVIJI2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (367, N'Miss', N'5R1HYB', N'0EI8JH698ZJ5XQ1TRJ51TF0JO1FE8DZP8JLBJI8GSY7ESI4SD4I6VCKLDZKI2S1U0UWE5P98AO8U7MQ5WN13VSTWY0X', N'6UAAF3I9M27JWR8FC8JBN2X7V4F3DS4FIMCWT7PNEG939VFCJML1USO3W3FBNEVTXR1AECM5JVW7TTYZO2KR72LQX8ZPRD00KF5', 105, CAST(4803.61 AS Decimal(18, 2)), N'S88R6XXQITC378CPFEXA1LMUUV465VC3LPZZZTOQI8GS4XT58634KSI6MDWBSQKMG8HH9CPLQ7SS5TQW1ZYZR7JT7SDLWCXROUBVGBVVGHED0Q1SNZATSLU9POAHY4PD904BIUGP32IAT5SGQLXX24Z2Z26R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (368, N'Mrs.', N'7C4N9PMNBQDE4HEPONNI7J4', N'YPE0XCDYLQNNU9V63QEQ8EMFRXZ70ZG4RPALA7XU8SK50D9LXNT7L6BK3Z9ZC6YL9I', N'U5X60GIYVH935FNKU4MU5BC5CWD5VWNEOG5J5DQQKNUGZWKBQF6FSABJSSU33C2ZUVEPA3FGDVA', 79, CAST(9422.51 AS Decimal(18, 2)), N'EWCS14ZLQ9TJKPP3KFJVTQD6RA412CFOOPO65HR1TV0B4EIE9YEMMW7OI60QZXJEU4UV1JY2OI1YP12DSQS3XS2SH0NYG01WBMHZJMDQZBY3U8YH4NY94GG122D0V0MNH4N3K2T5D23LUYX916TT2SRV5GWH9CUZPBMPLVW1TSW2CV6454YP6SKODRY46BW073WJB7O69RZAWPIA9SC5D4TWQXCTWRVHVVU8ZNSXFSFET9SN8NVDZRM2AZSDUU9HWHF0UAAL0EPLPF3H5PK9WHI38SYZVE3KIXHBURSYD9DK21DUVB84A0LEZBR2BAQLA43RXSMDWLWM4X17E44K5Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (369, N'Ms.', N'MCJIAMNFE76', N'4Z9VWTJIGUGFEND9', N'GW6GC1EGQ7LE4LQCJNN7LUM4IV1NZP2W0T2VLDQ2YM9M9ZLPD2XQ82XMA2YG0RG04PEAJUR5W', 103, CAST(18957.57 AS Decimal(18, 2)), N'HC3BJ0QM2JR9XXLW3OU8O4YA19JN766FCULFTG3D6YT3CN3AS70VBQLCDTA9G2FVDBX3B62NLG2PAVXE69U06A4L88106TX3JYP0PZYM4C9UOV2IVV367EP27CV242HRJY6C5XO6B8WT19XC6J4AQQW49NTD4VH1UIBPPPCY7WVYIV1XFIWLX70S213I4B2FRUYIY7NH663UUXMEMVYLZW3NHJMOMUTVUG7OWIZ7VFER46X5EOV9DGGVQB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (370, N'Mrs', N'PNBPNX8Q1WDDQ1DUBTC', N'68JKEPIBYXH2TYWIH5MNRWE2OUQMJUBZWLF0YBQ9RKXV1FMVKWWIRLL9TGWJZVR3MI58JVJ6FDW7ZJ188U1NXS7B056IE6AVS', N'9YLZVIAC9XRCOXWFLJFA1768IJLA5IBSTNTY1A7G6OHI9S0GE387PMJ2SCHBW', 83, CAST(9445.87 AS Decimal(18, 2)), N'EKZUCC70EPXH3VQQKHCJBLH9XYKIDZCXKHKMWK2EW6IGH7SDMQWDDSPT3PWDSONFCZWLB4UZEYM420SQ67WM3YKSSRJ6NPM7J33HA62IWWYF5KQ2X66KS0BDF4TJKOBPBELZXAGZ5DQ604M70G8HI1FIRQ16DIX8K94RYR5NQ7FEA5DBHLJ4GU79Z27799MNGHLQ0V98BLQBM08MCQOSYSSP1URVKYEGKRYSJMBLCATV4WMZUKUIKTONPWP54DOD6AQV1F3PF3ZWL58S1Z3VVR3B2NX5HYLT6RXEH53HD0NTAJXBBOABEZRQDGR9MH2J8RZGVMIXSED3N9CD86N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (371, N'Miss', N'8C0W54CP2Y0XBS01C', N'8IAECODQ3EPDAAFNB4T45TBU8D', N'6RLZI14XEBCZ3DPNZPJ5W193263Q6PTVJ6HPX99ZBGPXVPI5C5CRSR34IIWCXDRPHGFXWZQPGJTFCB7CNXE0C13S2C7EDX1YOZGF9L9CEMB8XOR6AJO0ZQDGCNUJRBCIIVQDVS31N1MPPVUDK13T91', 180, CAST(12642.59 AS Decimal(18, 2)), N'6CF7Z611DTVWX4KIKGGP6CJ0LO33');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (372, N'Dr.', N'V9B', N'0R820E6BJYTHD97PTLMUW3RV51ONE7G5Y0DZUBOZ4YWPHNGV', N'YM02M', 61, CAST(9031.55 AS Decimal(18, 2)), N'E1FU5DWCSHOKGJYIH5JPUSRPXQTTFLA3YYZRF1SQO6SZR5PSKH3JKE9LAPWEJ2X66KMIK73FCS1NZRYS019XHRJKOEHP5D6L9MT7I67DEO7RDLLJR4DITZOF11U6QDAYLFEDXR9UTWITJS73SYX0ZOS9XE5GC1M1D85X67L0UJPXHVV8UQDRF9YXN5GJLSHR9HGBM9XKCW6GZUS2IWMMNVL397A1R1F12XOZFKMLTTEJ3IYSDE0O6V3EWD1EZVSBH4E16SNYA0TUG2ZR9HOD0RV6TA32I7LX031Z4XLKR1D518XUDA5H7FAP977WPKG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (373, N'Mr', N'QPZ5R99T4LVIEDMFJJLIN2WF2Y0CID', N'4H8MI', N'QL2ATQ2YEBIGMCY4NQGSGYQ7I9GWSQVPGAXGJ', 193, CAST(19790.20 AS Decimal(18, 2)), N'FVUC00NCW3MZDP5LC8O813PKTCQXPOU6LAQ5DLUDMTL4SBBJ2MKHW81B69JNAQM78GD3YZ7QEBL8ILSH06U24D9D8FZ4163W6EVCX8K3FT2KMTTLH1N3VJ2V60VJZ3O88O13PGJSLRNABOQELEM0IZ1MB05XC13C5UCYSPV1IVH3WSJHAGXLP9MERPAMFKOA5GCRMWILHNHXQJGNNV3IVG43BEY6QVFXFLM35IU13V62RPO79NYKG6EPC9G7XCUM7KI4WDI502E092BMQQX3WVG97XQV2N3R0KU66JBV4TJEREF9XTH7ERPC38X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (374, N'Dr.', N'2C', N'X0CXZQIWBIOICW7UIWMQX72EIKTPAP7JF8', N'W5SF6QLDMO0TZ9LTASUVSJ955NFSZBFIL8TB01S0M5MSWYRL4N04LONDWM9IATDB9I8QGAS9ZT8MWH97WUOCBAW', 93, CAST(5647.04 AS Decimal(18, 2)), N'MN3DY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (375, N'Mr', N'LBW0C3G8', N'ZIDP8M2K6T44YQ9ZBZSUPYYFEXTLMA423G8C47D4UNVLDGUY1PVKNEQ1JYBBSHXVO10IIXV4LNZ22D1Y2UKW', N'KGFERAQTRBIE', 168, CAST(10719.16 AS Decimal(18, 2)), N'ZO85F6F1Y2B2ISHHY85WC9VH2YMB9HQ5G3ER1SEBSDSM01Q4H5PU72BQTQ2HJ3RHC6MEDQF5TU4YG9G17IT4SVYDROXAQXROLBAUFBQRPJ1DXD9J91919N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (376, N'Mr', N'F2SEMFXD', N'KEPQ7T5V2BDPZWCFCF4UQZ0FNY5XD9YW1G4MARB4P9JBLC3IQEG2OLEA29N8ISDISP4K404HFOTBUO8UJJ', N'05TUR4SF0GFC2MG41ZYLB50VDIP3FVKYVHVPUHK54H', 236, CAST(10047.27 AS Decimal(18, 2)), N'G88NPS5FW3FC4ZMLWR2E9ULGEEE1ONQEXMTM7O1YK349I05KNFD978FLNR8AE3Q8D1EH50D7Q3U5QBXD9TD9AG6P78ZFFQKGCVWGLNFN15I3E9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (377, N'Mr', N'OSQNTK3T8WBQMS5KRAIJ6I2E8GD9JEXL0M', N'YRJ80P1GHQQX4OKOYD5AFY75PGREY0O9UZPQ9H4V2JMQPRPM909HE910KEIKYNIH2H34YUFH9A7WBGFY', N'ZZ2ONAOQCKSEU5YH8FOZ4VHHKQQ9JFSHTL0VBT2TQ58D230KW0BQFIG3IK4XJF6', 19, CAST(8544.30 AS Decimal(18, 2)), N'BTU1KQHYWUPAW0YS0JESUEHSMEQ75X3BXDNLKOZQVXZMVCIM3C');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (378, N'Mr', N'K3YHCXIUJX3S9MUV4EU56PCEC6T9UZ', N'45YR7VLYP6VZKXF15O8NKOFKS7414O3YKTTIK', N'SBK9425FDV8ZN3E', 191, CAST(12672.38 AS Decimal(18, 2)), N'KZG0XC2F6Z9SZREDIDC8BJOXXEUW9V34SFIBGDQ8H9TQM40VHZZ9Q461BJ2II55AW40J83W4M3Q2QXBSEYFAWUDO8HZWB8QC4JUH4HMD2UMNE4BD894JPUD1QBBR3ZTEDDX63TOXC2718QA46MO146M95SQS5VA31790649FK67');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (379, N'Mr', N'Q0DLGTS5MNNJH', N'VLI58NKHPCRV6R7A6FPDYZRJU12WFQ3XGFTM5FFS', N'Q6DJ411B4WDQO49BYCLRIQFTUVDK9GGE5N6C1NRQ9947PEQ8LW0BINYZRJO8OH1OGYL1YX9AKVH9M73', 142, CAST(5567.12 AS Decimal(18, 2)), N'NCS016LHBSA6QN1A2WRHR400H9X2C9GXZZMSZQQZ9SS9W39I2ZCOFQVICSJR8J52BD7R18AC5S7YCR3E0FZDWSH933G77YQQNPXJVIHTOZINIW6LO5RTJS5JV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (380, N'Mr', N'O3MOIT65G8URJ5638ZK6DSW0D1B97HI6U9O26KB6KKJ', N'AIRA8ICQ9MDS7RVUYB7KN2Y9TERYL5R0XCOG09LJQ554P59NXR6387D8KHGUQD53VDUU3FUOPOUHWTJO530TYNSQZGWITRSC028CAEKIXHEJCVBQXRONCC48L4VNJBVYWHHUL7DQJIVG98D345K', N'55YDG5WHO7LIZJ2S8GRRTO9OMPQM6PCJF73IIN7A13CQBRB1TO05FCMGV9QQEABZU12RFJ9K8HQQCJDVEP', 83, CAST(16277.05 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (381, N'Mr', N'RPANZJENZASV7LBHHWYZPOW9G3WNODMS8R9ORNAO2U6', N'25ZNX0Q6IXZLMFNUDH5PEY4UZCQSIDQTVRIUWLG67LJ9UTLIPN0UN415691EGQELUSKWCJKJ87QIA6U5R72VDW6RPCNNK2QH7YF19O552GLGDIUZFVM8NJ8YMS60WWZ6G9BCRSW21XSWA', N'HO743LNN9XHWRRDW9OJL9FGXYLW', 5, CAST(12335.58 AS Decimal(18, 2)), N'NXS3562HBMTKIIX5OX9T');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (382, N'Dr', N'GSVL9UONMKF3T06VMQZLN', N'E6HN8PGHTNQGEGI596HF037I7MYK7QQBOXEZI8NAPYGN', N'CWVBOGUBNXY6RW0MQLZYYN36V3J27A5IOJAC267AX18CQCUDET6DMY5PTOGKXR4DRGI8LNKKDO0XERGI95OE3SVQELJDQMD6XVK9ULRQ8MZXX7B18XBR3P9ZKST046URBU0I6', 77, CAST(2800.97 AS Decimal(18, 2)), N'6WVJ27W6VKENXUK1KUBL1LKR3M9WE38A17G0WJ3Z5AG2FWKND443X8PLC3FFY0SRB4LQDJ41QCFQ4IC72LI9Z5CTHV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (383, N'Mr', N'', N'BEGKVNMFUPAZZGMQWA3XESH2IN1I7P1NKWW8IZB24WU840IS1JTOCQ7JW', N'NNEX5HSYT6AH5SBM27MKO2SRM2R8M27SV1ANC5KR7MYMQM12GPSSWMILVMB2PKCQZHM3HN9WMUD1350Z0PRX9EV8JORQUH2MA8N8ZXKSFV629GHQMB2ZSFHLLD', 32, CAST(3857.81 AS Decimal(18, 2)), N'S3O15IOQAATATZ2CLSYGUR8CCHIS6RS8IWCX2BA8FR1W9BPAWSR0JET1VBOOZWJJHKSXN49AIQ02PB31R7VD0RP32A2QMM8J8IFOISNSIHISDRBJ8MWS1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (384, N'Ms', N'GCMPUM9WVHBTO8BETP', N'18M474NME3JD7WY0SIX8XI48GNVDAUODB4Y3F0OPKHMF8OBXPCXOLOFI3DNK8ABJE523YVLSU8NGWP0SCYNYXZSNOFZ2', N'TWJ14RQRVISZ35ZHD7TZ2713JF2UVR1MLCRWWU1AIOM8UBYUTX3DSEHLUFIOPWW4', 223, CAST(5079.71 AS Decimal(18, 2)), N'IQVOUC2JNWIHU6WEIZK3VJ8WPBYIH0PGH2ZOTUXAPZTMAVW4NT4X7YAZHYYJEJ1N610S77LO2ADVPLLTETVOVS9JR06UVDW6X6G9V4XF7FVWKF9VC44KODRESG160QSOE7YJ5CYAVFGGWCZCQBIQ9BHJE1GF3REHM7HCGQPZ6UO8XBHFFP82F2PE44WI741YTPUMVZLIJFN9M3J0YEBO8KSFN2ML3OMJ7YHRLUTG4QIZFGS0KVJTTCQ9XFZSDZEVS31NMSF4LVJI2SZ6AM184TQV88T5V035BM7B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (385, N'Mr', N'6', N'3GA5202L8ZTQ5UC0ZMDDV8AMCMFDEEIWIFQRCAUPX63ZU7S4FMPTLOHV6OTFLP7TGX7P4LNPSO4AS4UAYRPPAUYUKOHE48Z9', N'5DQE2KJ5IGEKT97G80XNOU7U51HBCLMSISOX7FRCJ7AX3115B8HVZGRB6V9038TXUL21K98T9K4GJ9R3ZB', 208, CAST(9208.10 AS Decimal(18, 2)), N'4DRGF8YS765FSIQY5RZD6FEY99KSE6FKNS689SPLS201NP3IC75V8Y8OZT66N6D0RLS0CIOD2EL3ECAJ62F71KCPJH8FLIXMPZA2X35UISTUD49NIN0LQ6Z683GV99RJGZEF18L2WLP9RIBF7LXYICVJ04UUMAK809DEQULA1XO4GQFQR0NNBT043VEXDRGM1G8H4XOC0MXLNR2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (386, N'Mrs.', N'C6VRGE1BUKWH5E8M', N'WZ20UZ00X8SRWWOKBQF4RNDQA0Y7DK8PUSV4R93SOOCM53OSSUSHK4R9MCQT0SND03W30JS1M', N'44QT10DRC5Q9BEC3HY0K1ZOMECBRW460S7OT3S017HWNJBT16694ZQY5F4EPOMV7ZPG3QJ0PYZDJ2033I9KQU1119IDYDBCLMPOTUPBN5K6ZDE3F1B6F15DYNEU861BMNSXDC98TXXK9U1NUEYX24', 211, CAST(5955.69 AS Decimal(18, 2)), N'O33LMWW699AUFNW9H23ZHXLTCBNPWFGCS59AOUZ4J18VNTWDPN4LO2RRI99B87AUTY2AEMLN3YGFPP6IEAZ9BUOQDIREKNVCRE2ORMY31GIPMB1T3RWY81IYABWVV73F24OBNHQSBW7UCY31GYASRX3QV3EFP27UD2NINP5M14MCTOMB8UFXWAO50XGJ2A38ODG9BKEQSORNARW6H27UNAX3EIIP9LJQ0EOF7C0N57J0U8092Z38KDGDUT2OH65');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (387, N'Mr', N'U0CNJLH7INBC6WOTY46RYD87L0XEBIT2RNVYT1SLDJY', N'F2ARL6B6EIRQ4P0LIFJARW1ZL17KR91RUXPPZVQJHUD4L9Z62E0CHC', N'JHBQ5FV3H39', 192, CAST(3227.71 AS Decimal(18, 2)), N'MW3HY42JEZ5PJDN9OZJJNSTAZUH6KR7Y2JEX5JAXXJTL7QUH5T0HMMCT3TH4NVYMS6N0ZQ44OLM4Y729Z01RRPBG6LUB25A1K7T13THFOVS1Z8UVQ84NU7U2U7TEVS2IBLKRE156IL3WWAGYQYLU1N6DCQ6WZ3JWT9PEN3HP2Y493Y6KRVOX77HOE7ENV96E173MK1AMGWS2IX9DKM44FMOLR10UUSSQ7WVJZPK1GAFF5HY03842YEIHUJ0UXM1ZASPCI0MFJE5E5CVIINQLNPRSEDOFPQ3U9G5DSLI3MPJK84CINHBAWGCK0WX5B7PSAB5P7IQW5NZX66JA06S7FTXS3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (388, N'Mr', N'QYOO8N7A2V6H', N'J1A5JZRE5HZW70BMNOZS', N'CLHQ2R2DH4L33MR0T848IP8G1M3SXUGG0BP2COV5ZQGFW8MJOVA8Z00MC1OAFMN43S', 4, CAST(18018.71 AS Decimal(18, 2)), N'CVNDRF0Q9XZNB5RE48HEEUCN45EIDGDCLN6U9RVJXGXMBDUNG0OPAP5IJ09L0HCSJM1OYW5CCXHYWPCQBR2DSO1WHNB9IAJF343OC6OKUBCD87LTNJA8FZ0UK47AKWU2E1USLND43IIGCOO92HLZZB043');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (389, N'Mr', N'52JN2V0T8LI', N'JWEC20HD8O9', N'ON4CZ9R9TKTZ', 50, CAST(15699.82 AS Decimal(18, 2)), N'47ZDZYH9Z7DS70554XHKIWGX83AV220QPDJ65QIJY2PHVA9LTT63NIQ7Q14WNM7W6M2UGZ0EEXLG6Z2YTP18WW36MBF3LMVCUTA87E4UTSPPWA1RZ63YKY09JV85KXTR19LDPTREL7F47DACAO4EJXSVS0PB6ZAVYXONPN25FODDJV25LWUWSE84GPKO4G7LWJ5APMMNMYZUKFCWYJPA4E3KOK702D1ZGRG0QRGZ97ATFEJ1CNQKQXHIGKL5FMK8XZDSYC66');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (390, N'Ms', N'QZXCLDEEHHMB86OBJ0WHE6OZ8XBOXYHD5NIN9XHHR2ANG7FV7', N'25NPP7KQG8NLDR5RSDOHKX04VSHY90WSPE5UNWXHF1HA8SZAUQKV0RW45ITWQLHFBVWYMB3VF62JG', N'32K7HZA2PBZFGPBTRR5UM085WZR9DJGVG46D2GN4HUYB4XIJGG1SN5W3UEBH70P6V4ZC', 49, CAST(8050.62 AS Decimal(18, 2)), N'Q0X495A05NENG8JAXK55AKMM1WF0R20HJH0WJE6FB59Z6LHQUI1S00T6EA2DP992NW3Y8MQIDQU4ANGGEO6818HIOUI9BSQ2W7C9HII7SIEA6OVQTMZ0300FFKAD4G7K0R82B7YV6YGJT7C0YSGPTPYV6XTX843BBU9EFSELO3U4JHL88AFBZIQATCWED1N1V48ZXXK5DV0QUUBOBLOYPRBT3ZL3W07NFS9F9MABP9Y4H0FY073SCPC3TFVYBH9DNCA2LWFOBD8FT6B3JN2OXFBQG5LUQCZ80KH4PDD3SEHZGW9M3SEOEKG81KMFB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (391, N'Ms.', N'98P1MJBX3N2QHJZ', N'W3T64IG0RYI1P431RUJ1YCW1OJNPGUPDNGMQ3JHZZB4X', N'YQB40CR1X1ZG7SWHO7B72IO55WG5SG0Y60IQQONS52XCB1Z8SO7WN4GF15Z4VL8H01A6A6', 1, CAST(7641.17 AS Decimal(18, 2)), N'XYE0F8P6E59ZWIXBAJWZQYXATF4824RXS6GILFH0WWE9EFOXAQ92JCVZ137Z3G49EC6Q1FQU1V2TKOVDR7YCUODGBHHH8HXFS4U28XVVZF0O91EC8T8WIREPYQEKX9MKYM1FTS5TC2DF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (392, N'Dr', N'6KO01MJEPCV0J1HFG8O9N41YCCUTF1KRO71U67', N'LLYSEF70FQJ7SIKUQKX84D8IDX7DJ2N8YL2XOW1EHD8P2IB1W48Q6PB7DFFG7UGC3A86FM5UJIQR5JFUM6GF', N'ZKI2ZLCT4W8D394A2J2OLPIWJTGBARSXMY7B51H', 114, CAST(18476.33 AS Decimal(18, 2)), N'P6A249E90X0Q54IJAXPSGQNZZIFOEKFEY19J4HTZ8BXP0POOMA15NN7YJA3MUQUGHMR3UYET4QK4TYZATQ14IAQBTA0TD75HGG7DXLTNV71X325KBTS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (393, N'Dr', N'NOACANBE25M98UPK1', N'X18AVK8HL6NWVMR94M9YE7O', N'PCV7N858WR7M7H5A2MJ550ID3B', 4, CAST(9141.56 AS Decimal(18, 2)), N'OPX7WGAKYLFWK2OCQLD8WD8B8T7Q5FIKE1SQI0HGA9PAR4C0ESUQGJ7AHMY39JFI3VIJ9XTP3WXMNYJ3G7BCLR3VTH9W1E7RU77WMTQHZ4MJLLNI3VN172WBRMPSNXOPP6RGRMGMGTDG5KA8URS6R5JRBW404YU1GXTET7RGE0LDPF66BGXW4HXKM04UHGHIZB07QVFNZCRQK52VPYON1YXYZ9RT2WYYI2EDFYGG19WSQ70HX95JRUG0E18H3ML2DS7HROFRH8LR148R8AVSRE7OLDZEQYCFNUEYZIP8TE1I8PZ9TG8TQSB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (394, N'Mr', N'QNPSQZNR4CBZN99K1LDSQA1', N'J1T0KU', N'51S4129Y8UA9AO8FJJ6P4SX9IHBOPTH4BIZ64M6', 52, CAST(18275.31 AS Decimal(18, 2)), N'LJVDP10JW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (395, N'Dr', N'RNS', N'D0I590WJ2XCYC3UAWNKHJ7GFQDARTQ8WQ59VDGI9827119CUORWC0CH6K2FVP5PBOF76UYWG5B9HZEEG1F22UWWEN3BB1NK2CWDL150PUG7P2075NYT92NHRJSJRNLFIQ6431SFWFC7DP7CN', N'YIWGRD9HXLZTXLLD4JMJRL9FC6XSP1BXDMRLVHH58TQ4TO6QWM1K0MSD9H3LFHRVA1G', 22, CAST(5885.90 AS Decimal(18, 2)), N'37Q9SQKMZDCOFWEPK9PIOUJFDFNCJSDIM2LRJJNI84TXMW4YY0GRUDI8OBWC28360U1DBM51L6AK1LTGBODIBLO8KC38MBFZ1MXRVQNCUF5N2X72HG0EUKVE6STZJXEARAJEO1KL11OWG06M41Q6A15GRIL2XOTW0UVSETEGVFCTVYX5M7UH770P52M6GIOD8RVM5D7BN9AUOBKSKFFPTBPST5MC77ZCRZL43B09ZJUXW51UHTL12YJW22SZRU3FAY3OQGP8E6PAGRVO4SUDMYAS20J1H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (396, N'Mrs.', N'CXYMZAGJYUY', N'6N2TA0PFL29L9291P', N'U0HN1GBXU5LNZ7V2ZQXRTDCEDWQQ2UUS8VVW5EIJAUJ4VFM7LOVJ4OHHN2A5PLVZBTF3CZXL7DGZU8JX9I5DYANJDE824DUPYJS10I', 128, CAST(13301.85 AS Decimal(18, 2)), N'FFNY2C314CMW89GA74UYZQSBOA81EPPDOLU04WLROT99BDK77STE6J4PMBAR41MFM97NEF5AI396GJZAQ1ULVA65G5DTLUMM7UM26WSRMJW29Y83B01371JC22782COOGMYMWW4T82ZCE4VHW9HLSJF5BA03PJPAV8LMZM7EW8U527YY6QBSV2VX7TBLW03OCOH5I8HA22OKP933C2WZ7XESCOF6BLIW45SDQSGY91PTDB8XP79U34GF9OTTTAZHJSFJHQDKMYQ67LE0GHH3BOSZPD31ZM4Y289KWOGYTP84EA7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (397, N'Mr', N'OIJZ22ID0NS479SFMR036WE7DP0CSPM6N13', N'VV43VJX', N'LRACR8HNFJCW7FI006', 18, CAST(18648.79 AS Decimal(18, 2)), N'9SCCSV5V0GU3MBKZTR4ZCT4R0I9MFNKE6FR7AS663EKGUDCI48AN58BFNKC9LJFCVFX6JDP1LXWY9OXM6RH6CX9X3BJPGWLKY7LFG5YQJ918CD6YNP2T1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (398, N'Mr', N'R2UO4FRO4TEPH1W6UU4S3CLD25KA0LH55KOKXBY', N'QF32CGWVHYCOG6FNGQ5A5', N'QYRVHUJR1AFHXRNJ', 244, CAST(10959.80 AS Decimal(18, 2)), N'0X5Z27UZLOCCZ13H61TQN3V0LQ5K1RTRIP7N9G2QWJNCV0E4U6I10ALW15DC29YUVLT9UG7PZ3T3FI5LB0PV8SQ74AM43PNNLTHA64AEZS1XGHHIZS01J3L2UL5JT2M9F6HL1UF7QBWFQTQMT34AOL4I7EFKZQLW5RHA0VH4DTB875C0VIQQXBLT2ZDMFU7ZQZAYCGMXMZXUAVB22EPG0UYT6O70IUPIMBI7VDOEWT3YDQI6OBJ05QZV1GSO8LFRAF8ZD46PPA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (399, N'Dr.', N'4Q2JAAVRTGC', N'YB09GRR2RIWF99BIQSPELBO0HOGGN5DMPGHR22053E6US1W5BXZDLRONNZRRABEM49QTSJGNSJA64U7FRA4Q500XRU42A8URZJPJB3DSHCK1', N'OYWBVRSJRHM9GIRV4SXTVSH7HGCZ1F4JVVC29KU6YBPDWHKSNMSZPPQV', 123, CAST(9975.65 AS Decimal(18, 2)), N'6R0GG51C6APDVBM5FK06ADBNYHJSK5UAU6T410CI799HK1DNQYQ5P4ASFCHYL8S0GEJPII4F8HY04U3W4V1MFOLPV0OOIEXYH805IO58TAX769NK9KUQ66LRTTTITGXUKZJWTXEFQTS4RDJLC4FX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (400, N'Dr', N'XB3EGHLZUG', N'HISRCZZ7OG48S2YFDCJPI7K5O4OXC8TFZG9BCAY8UKB3LAJ0ED3Z1CXAXN37B2UGNO9BSM22DAVYWHJE', N'OUEETICC3DK6PLJXQVK34BZWKBFM5U65GMLQFR5TD0T30LY091YU6SBDUIUH2P687FP20SIYPQP4IWWYDF', 3, CAST(16875.40 AS Decimal(18, 2)), N'7SBN9CPUNEDD2M6QRRC6EZDDGZFA75P0ZAD789KLOK3EFQPQDVKC3R57EX69WFMHPCES9YII6QHTWYXPAPWCLCX855TA3AO9XMP3CWHFC25C9BBG0GZ7IAWCE6N358EW27VA9UDD8HZI6LYTUD9NBHRNQCP69D');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (401, N'Mr', N'IC9KWDB9IWCND913S', N'NJZ4TEMJZEO7QXSQUFW078RA1LQHZEF3OMNJVBU9MST8EUNC2812MEDFRO37O', N'4VBYNB8WWXNQOTKVKVVZGJ04F36UYMW4NC2DVG1RSWL12Z1AX0B2HFXKV7JK4DY90J3CR7Z3T37JXY2F2WXXBTM8FHHOXH', 167, CAST(16219.67 AS Decimal(18, 2)), N'4O9A1G1662LY1AD5T7U9SYRKKG8KW564U7VTXBXDT63KQIQCC6VZF3H6WPPL8G91WG4TFJ8HAGFLU6U2QV7P97PRPOX8LB4CW2O9EWWSXDOYNWBQUNVC9JROQC4QM0WYC3PSIKNTYFRVIR3TD7DYGS3CAZJ1R55XHQMK6I7A01DTRW5Z9BDFNXHJ0CHI1L2T9UDS5JMUZ2YFE9KEUJSGSP9J82KU1P9EYKKXIDUQPIGLZ15QS2OHTM0JLTJ3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (402, N'Dr', N'THK9O8UH94GPZXO2J71PYEH7TWLOP4FETO0Z', N'JKYKJ4A9UJLMDEEJW6YDERDDGA87R67MLH98ATBJ1TDHH00Y08SX9ARR7L38V3HOCZ1W5683UFBKDVWG997JDACAPH1PP2NYCP5HY4TUZP2TZ7DBPNYLWXA1MQ6O4JD', N'FYB0IWOJP078D8DNX43I7G0Y7XUX9PB6CGSLLXKIDD7W3L801UKJ', 104, CAST(2172.32 AS Decimal(18, 2)), N'ST9TJHUPNWG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (403, N'Mr', N'9N0QF37SSWEYBQU12CFZDFSN5R4P2WAXOYAJ0ZIAAE0Z6P', N'RC7OQEI5GCKO7JBI3P02322FF3V8X4PGBB', N'ZFZYDTK1R9ZP1WXFS1ZKK4U83', 107, CAST(4195.93 AS Decimal(18, 2)), N'2QA9OK7WT1Y1SLCJ0COUQRXO6RFKB1467RQVQAW9C65QU80Y4APB7LYATL3W4MLSXST0UGTQFFIKM7UXRHF0BTZLSG257Z4PKCT2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (404, N'Mr', N'EKCQCK0PTVDKOYIQWMHACFA13T5PZF', N'M0PLA5T4JCLU3FOLEJBNO9R9MI98CN4CVGPHD4PWAYJ2T8ST8JAWZNDC8GYRVKSW89YMP67AUEDQQOFDQGZTC7C82C8X6X1Q5NUK9532B02LAMMK0K1ELZK0WQJDXA3WDML3UV4LDXIB', N'LPUVF5RCD0TM730GL377', 8, CAST(8814.96 AS Decimal(18, 2)), N'03OHZVR3EOLQ55N6LG3S77EDNIFBS09ESIQDRJCY7IERGE1UGIZWP97SPATGFGAEE7YNEAF235KPTMX9HLUA0DOIAYOGPWIR70C9FDF63XSKPIZ2DKYUL0D1JGDFLYC7MTIS9OU35O63K3TRZM35XO56NBQY0ZK4KLXV06SPPUOXT9GFNLGZV79YOB5YXV3532IZ6XRS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (405, N'Mr', N'GGCP4P6XC', N'RYGQOWLWN462TNJLP40X57N1IQ5GG0NH9V5R3N9EH0PIE007KZOTHEZJBE7YQ5FMHPTYIRI2UMF5I5NIPXWHCUZVWLGPFBNCK20P62PSGLYVYU15RO8T9YAMPY2XATMJ', N'PBK9SLZ9ULQUI7V7WUUYPIWM5TVK3JQ1WTWDAMNKR3IE2SPV49O9C8C6EX3YPF5BUPYPAHWA7A6M0HJC4ZFUUHONHQZDIOUCY7KDU0LNDE221Q5WDQUPZAGD1A7KHJRIGUNSX6I3ESHFELLR', 230, CAST(16854.91 AS Decimal(18, 2)), N'DF307CDUABFJL8DCZ7O1URURIURRH9QTO6HR6YGZR3NKOMHT5N6Q3QZMLBHCKMD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (406, N'Mr', N'9HOMFTBSN4DOF1Z', N'2KF4', N'2ZRU4DNQ6CJS15TMKM72CY68QB6T0YFPGYEK0NBH02QUZBDNNSUZEP84SJ4T6T', 193, CAST(13256.38 AS Decimal(18, 2)), N'KLUFQL61QOAQ4A3VDXLU20PX6V6UG4E5QLZ2R22JG4ZEG9IA7MZN0IYKVX8VFBLLA4ZIA03AU2DX0AHXDVMU5R47ME7UT745JD4B9ZZ7IOSY51KKFBIJORGIZSWWT9HNY8EM65OEVFBHY62LTMEIPKGSXMBH23D8650WMYE9N4O9FZKTPA26UZYDSLPKU6BS23AT65YV84VLW6DX1IRS06E77M418UFGSV6BPQMKB7YP4DHL8RIBFIRVO2MJ1XMDOES0018BV6GT7O3U5ISHC40A4BNM43IEKK0PKGL6J6G82YO0YSEJ451KDIWOEL7SO28MNE9OWMX5OS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (407, N'Dr.', N'ANJFAPE2W4B8D1PO4L3YMENZTXCAFS0BQUEJ', N'BN830QV4W1J', N'8WUC2Q9MWAQ1A8C8FXJ573FARQARGJIA6CIX4YBXE6', 144, CAST(9508.63 AS Decimal(18, 2)), N'5NMNBOZ9FJGB2JWSXZNK0P1CKJPMI7VWLAR1RXV3OST373650TZ6076FLA3SZDQ7NJPSSU003JV7VX4HDKLO7PWD3BFGU34B2MFNDDC5SZ2GCYKO5LEFR1ZXNBOHEJ50FK59HG4Z7GW7NF15RRB9OPJ0NI01PVQ8U11RTA6OHF7B5R97AJQM8WCP14MZG2ACPNDMEABGLNR8I8VV8SR6430YPBQOO68F5ULIENT0791L437S9QQNA37LMFX2JNREFC3NNCHLZRYU2FTL4XEXFK4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (408, N'Mr', N'XDJ3MPBH2ELFOJUX0OWZJLDD3M430I', N'YQ2U3LSD070SHNZFWV9M1TDLK6YKRK20DZVVG4ZYNQW4NGLCQF80SX94DH9XN7MF5ZFIS4ZRWAZBX8Y4KLTBC28FQQHYV2BF3HYN13KM', N'PNNXVFA', 75, CAST(18270.81 AS Decimal(18, 2)), N'MZVYQRGJHM6SZJ5W85OJ4DJ7LBXM8UYU720NHIU7BFCF90LKSIPAWKW9FODFTUANOBKXIIFQBG8P04YLPCUQ4OYM5R7S5FEG4ORXFO2A2YYFC69BQSPG0KIZDYSRAMKV2RLBD151AKO6PIAYIW2DPXGJ5RJHVAZFE2DKLXYPMO6GWC9VNT9DK664A15LHN50K8RN4PCKYCR1R0NTHNT21LU7W8AJSC7YI5VNLMQYF7F4DADC3TT3YYDJQWFSSL5SIL4Z7VXVLC6NSRU05F8E4F6XA1WUJNVU2NMS5E48WYIMSQRY1FNCCRN2E7P5Z2CXHBK452VRA0H6XK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (409, N'Mr', N'M6A77JVZOCHQIQVR86DP6IJ', N'G3HXY65J4C1EA33RZR1M0WTYK7GAA3G16VWYQIRJCFQP90TDVV1BI0FKAIDRQU80V07F741G0HAL54OJE', N'VMOH4HJLBFH6DSFUYQE4GMMR15QN3TFB6TMNIUDGLD0H', 228, CAST(12131.24 AS Decimal(18, 2)), N'JAXT30IIB0JDXOY9ULK5G6NTYKV2B9G5U16V188WYT94LPX3CRMKCFPDN4VJ5G61JEJVI27MDO6MWI78MRPKMWSECS8XCORHN7K761L9J07O82G4WMXDRLENL4JPUA9OXPZOY02L6G1MO459C40PRDQ2TXM1IWF8QIRJ3R6WKC6AJSYGZ9CP9JXJZWV0D02A1TV6DM6KY45F6FJ1Y528JPY7L7J6W5IJ9W9PWR3C2SR5EIDKDT28YURBUOL52ZNSLL6A6T461P6QXSS2UZT33AKF4XV86XA35YKSC3DK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (410, N'Ms.', N'B06Z0L7', N'EF15I6FBO740TH6QU9SD6QULB1PUF5TTCOGTZQI10VGTCZOSFFAFR0VNLGTGGKWIDBN40CQ3QQCBA08CCXF0VE2CTS7IW1KFZYF1BJR2O6P0NKDK7H3J5VMZ8BB8587O5XBBK70T5DCPO', N'0LX8TY516990W', 123, CAST(16095.56 AS Decimal(18, 2)), N'V69O1E1VIB36KPB1Q58XW04E2LY80QRL9E73BR3JTCNM7XK98RLX4MRV2ULGFTVRKHW6H7PZ1P4KCH750PZ85TGMMC1G5N30GW2P0ER11LWFI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (411, N'Mr', N'KVZ9DCMD5O7N1UUM7UVXMSC4M', N'O8FNAEY1A4CGSZ8JXFZ0UQ820ZHAESJWA7N2TIXSQ4M7Z4F0KLFWQO7XZDMAXNNILF5KC5QFH69P412WKGPSCM5M0Q2FVNU3H4MJZUOFV0FKEHTYAQQHXU5Y9IKM2AJUB68ZFIWPSAXB6L8', N'YQWHH06ZJ5RB4CYJ2M4U1KTFAV9AZKDNLDFPOWIHQ01RGHTT2N6MV2EEXG7MQV0YR3PQX8U63N31I1YS1G', 118, CAST(10893.25 AS Decimal(18, 2)), N'IKMFFQTNLQ0AJ469TDL33GFH5LXY6KW14ETGTQ7D7TABPPUNVSRITE42549USUG1UY55BPF357W953SFQA3ETE7QARBPGDKCD9HQKPC5COCLHVX1CT3IR17FREVKEQMSMKVWM1U1YY151L9ET9CNA2LC11Z6URRM1KZXZ0FBY2KTZ2D55GQ5EZHKYJUK1O666F3HMBFST0O8HSCYOU0E1M822EYG6VAAVEMKZWIT0XBDA9266WV6OS4K60E8DZMYQEC35SZSB6D4AURTBRA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (412, N'Mr', N'V7DVY3506NRMDWJ0KHAWSH5JS5PA', N'W454WD5MYNAGA1CKHK878TJRT1ONXUSN91PY5EYY1M0R8GEQXCUMD1A3KDBUPIO4VM78CDE2', N'CDRSJY0S8OVRV030CR3WUT0J8ZDVWHELAONK0B6RWGLH8V81F0M0YJDJC7KKL5VQAAG7CI00LBZD7JBCQCFVVENQA48SRM6RKV7XF1OX0LFMKZBTW7T8P0U', 92, CAST(11784.67 AS Decimal(18, 2)), N'Z3L291DYHAG1ACNWWZ0DW3UHFZAB9KWLOCZMS9T4E0A1PBTY7UXCRWDV84NAR1PWEVCXD04M5WYVSTR35B4ENJUSZ3ENMJDDBDNUYWL7QA7UXH2FDJ4FXA9V1KX9LH0LILKF6W49QWNDBZVI1ZA2FXF04RSEYBL99LBBXN8GEUO0NVJ2PF8M6Y6L6JAE4QAEBE4QNJLDQTNK8ED98QPJ3Y2AFQ5DCUCOJAP8RTF5TUWDBLCR516D0RBCCTBWD7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (413, N'Ms', N'RIVMXG', N'96LTRJDMYPKZ698RLER339JYVWL96DKXSZ4UOASUX8RS35PCYGQZMYJ0', N'MQW7A89Z48TBCDXP', 49, CAST(9185.74 AS Decimal(18, 2)), N'VHY0YP5HEBJP92PZTEE7BOYNSYDVXIISLT1VCLE10JR2H229NTIIYZP7IA80B9KWSR3F1TN70C7RXW6QW38300TL3TC1CDQQZU9QYM8T6AILSXAM3I371GWSXHC7GMVMMHS2NGR9VEXQH8T5JQXU9IPIYGSGA0DKEWZB58YNQUCMJ5APO6NPO1C4R936NBYU1DBL8I0BRA3F52ZT53S4DNVDKUJV4SZFVIK5UPG55CYEXWZOAA0JIUHEHX1EY46ZANKNITYGNMY0OGFNVULUSFW116OWO2715Z39CB6GBKWVVGP1IDI3IB7VRILB52SLFXUPD5BJO4J8J05KGNEAJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (414, N'Mr', N'09P4I1O7VKGZDM8VTPNE2T3TDU4E5', N'NXVX4FK5M665E3BLX6UIQUQ69APMKATG370CXWSS6NGYI7KDEEPSO', N'IV9Y06BSEVJSX1K1BBO5HMSCGIB50GJA4L65KXLKKFVCP6679A1', 158, CAST(9200.32 AS Decimal(18, 2)), N'IUR7ITQUB9RAGYLZNC2YFERZCQD1VINH2CE0X5NHTTTAG8K6ZGZ27KN42SVSFOZSL983JK1IOL5MKHI4561EIKAHPAY4AV14T0O60HNEEHDMF0JKARM8NLA0ZQE8MX8TJ0TJTC3OJNZ16N2OQDUJ8SH8QN793ERH8K3E70RYNXPZL8TBNPI92PKQJLS55UL5WISMKOHQLWVB3IMITVMDWIFJ0CUM7MTTCJ33F7RY7RN6T9N1YABA778D38M8TVIZ32YJEJ2M3N64U8QQPTNWAJL4AP06LJ4B8O3QA3ME8P6K04JUIVJ07MOKHU8PJV1K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (415, N'Mr', N'ZGF4Z', N'WT6POTPXKCDQ162YO1D2B3DSN1QC86L1RLA7688Z2934LS5DBGQNFL7TFE1M3DPDQBYGVUSGS', N'8K6V2XIIV6SYC9OCVEGDP4K2RFM9B4WQFH1JEA2NF3OENX0FIUCUTNC4Z44NA87R91IU84YKCTYMF6EUF7RHR1WR4XKA6EC6WX4LE57EWRI0PQOTP983HPZ85QPBJNDXGRQH1TF9ZDL0JW', 219, CAST(13687.58 AS Decimal(18, 2)), N'VV65ZGL79OKC03655OP043MZJ9GUWUCOM258DOIFXTYX37GQ2JD6BKDR96MQ0QAEBWQYYYSH6A2B5PVBTQSCH5C2OEZ72SF6IJM7GHS4RW01H2MKAAXAYYX5JOAJZLFDUWTL2OVBXOKK5AKMSEWRV58JMGNS7856HN6K80HMFMCA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (416, N'Mr', N'S6ERSXO7PQX8JN1XA2D66WRNW91YK0J8MX2M', N'01086VWC1RGXM5DHSR6LWOKPEATOHGN9V1L5T675PQCXXSOS3E2097IBHAUW18VK462LJ7NLJ1V5CNRML0K3EM0OJAOI', N'E8QKW68P6YWGNGWU8ELKX07SVTZ434YP8OB2T3GQ71JI4DSS2ICLXC5E1YO274L1Z77Z5U15XUCVNI161KRDRWJW1UEDJ2GIIX5TN8H7N2Z9XCB611209MGAF8S7QKB9FX5QC8IT3J', 217, CAST(17786.86 AS Decimal(18, 2)), N'C093NRKONIPO9ZM123PJE3I3ZDRXAC9TX69FEOKGLHT4HWZ0ULCIMRZ9I53AZMEB9WQ2P6MEJ9YW9DM3EQ3OZQ7670X9K9GY3IUK6WBOYYZCT3Z4I0W8JPBJPJVP9DT9TZTRI1WHFFQ1QUD41SQKD7FD6BVM0MEK4PJT97MG3ET4ZASU6RNGM9WLKFL76AGT05X0BKUT6AGYEBDVJ0G9YYXUTX9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (417, N'Dr.', N'WL45V4MXVVIU25DRS3VFRUJWPMO6OMLKEME', N'B4HVSSQP29VQHH8BCYUJ8B0NR5H6E29J588WEAKU0WIRPCX5SC6BUZ403U3MBKA0ZCL88BW1E0IBS8YE8CE1VXO638SK7XIGL', N'OX9ZOI7CIZF9WGUDFFAG3RQUZ6LTSI9XPWRD593OJ7', 107, CAST(8943.86 AS Decimal(18, 2)), N'ME9TYZ4TDRJMXU9CSX782PO6T6V1827DA06R0NZE7KIRGUC4OL1VQ0RXQ3ZR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (418, N'Dr.', N'91BS4P0EJ4IV6HUU77J127F8FG9', N'RCROWGG5XUGT7VVOEY6942OE50JCUHH1PAGLNJFXLQ0UPA0XOIIJ9CDPOCJWX3BFDF3WEA1UJ8', N'9ZO99HV3DS3MW6FZIWEJZQHJZOH', 26, CAST(6327.18 AS Decimal(18, 2)), N'2LBK5BWNHB5YS1H6WPZUQCN0BN9891WN8A4Z77AIFH69VXXZAQUE0WDPXA8I1NEGFIPHXIZPEGE95E4EQAYI6IMBXE1WYSHS2PUD7F1RR40KI3JJ6USRPWAWVEKIG2QLZM6GKQ6A86Q2H2TTVHQ40Q26FXHTVJBPEELVW3ZFNHII57ESLQNYBLL8J00M8DFOV1N2HXWRIBHJ7K07IP84WCDSTCBW3C6A2TM4KBBNTVG0421YZS4J4ASJOV95L0N656HEYWN6DKA0VCORACWB7M5R12261T7AVXLN034Y5J0ROB7HU83C');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (419, N'Miss', N'9YFGRXIRS3A1T5CL4T06SRC72CE1M2COGR4LO', N'D2TPUZLNBYXRCWRXA0J0HFKGA63IEHO00PZMUNOXBGZHGNR0NCRU', N'5CLXVYGUAWCBXEW5MAV6Q9LR4NTJI5AK0NX065QYQLOLK3MLTCXOTAHWQUT84XC5MSA9HVYHKWG5L07118Q58LQQ61ACCIUS9IYSSC4XEG4XTBAPNS6V76X', 64, CAST(13244.80 AS Decimal(18, 2)), N'I0PCVGZ37JHTLHQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (420, N'Mr', N'39Z324XI8XUU3MF2HIL8DEJG4PQML20RW3PQ6PP8AK4G6RYQ', N'85YIDFNV29UAWRNX42NBMO1F20NF3V1QT0SJ14H8119757JW33IA4JEK4IGCR8R774GWY3V0LEAKFUAUGRC0DRMAL7FIN4GT91Z1RNXZ7HPP8T597LV0WRUFH5AQODCGYHADU93TTCTV2W1R25A29', N'1K3FLL511OV21E8P4SRSGSWURKPKBYL2LYQ89OCSA3W5G8O8JHREF4J9N8O0WKP32TG3O0FFGYHDWREIWG0U77NGEHK00BVQDS2MRKKI1BXGN5CWU53FKVWV5ZO6GFF53R03ORRCWISVA6T84N6V', 191, CAST(16672.59 AS Decimal(18, 2)), N'NCT69GMQAE5HLBTPVBCWVA5N5UY0IY2THA6W95P1EZ2GAIIWQRX94TBD761EIL8BBB0A4WGPMAIW7OCNC1AQ0TONYTP24AJTQQ4YH7RTB8MUBF5IUE2GBHBINCBB7DLCRP5HJD54AGFR6UCJN68P82I9EMB5VFMYNA2MAOZG9X6U2JBT0SN04V4O6V2X2Z9UUG4WRQ8Z7RGBWO7VAI53RMTR6EFEM1E9OBZLFF19JOSDESSIO7MKU528MCQDAUD5C7MLOLFVGVK3TGCDLWPFFUEI8RY2O');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (421, N'Dr.', N'D9MZOQIYCEAW6W3X0WPVSTCYSA2ACQZD7SERG', N'WI7JJLC6BU58QRJREYH26JYYDL3IOI2A7IKS5BQIHN0YQT698BQCL79DK86XHTISSV177RL37ZKIJZ8KFTADS', N'F5IW7GRVD2LWSDW5982DQJ120LZ6G2S9KWNLI6GAZGJG6ZHTW3UF4HHW4FWMHKFA9CBVPAN3RRDA0LV1359C7C53ERH2AUTF186UNM3MGROC37VIKU', 134, CAST(13909.60 AS Decimal(18, 2)), N'YOBN0767U3RR3ZLZE60DRE4XQIT4CWMD6RWVS5G57E1MONQFX9CS2BWKKDWIE1UYGELB2Q68QU5DCI93RD63JUAUVCAF9XQ5J3691EC623276J72');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (422, N'Mr', N'00OQCUZNYK2UYTJHHTNHVEO8LMEXP', N'O0977W4S0N586URY2HPM4LMQTK0MIOJ50261Y0JPZFZX', N'CB23X78HYTKSXYY9SF1EH2NWGNSZ7VZIFAH3Y58ME54SVYRE4Y32IG29N6M9E893U1DMH', 101, CAST(6784.90 AS Decimal(18, 2)), N'TQ0UREM3RGQFQZS30U8B01C100GR2OC48BF7QASPJ59YLRB4945OYQ3RDZUQYU134M6FJKDP2JRUREF8OBIYIN5I8OTRF1RP46TZKWKPQFMFY9ZZJM1MC3LH7VRMA0R2PLLFNSRS720PJYOU7TZ5D1LCJVPOX45MOWJED3Y9UJVIGQ587WEH0MOO09WR23V2WE1NFAG3UQAU52VSQHH0QOM17UD4766ROSL2OHSWGAM9BUIXD31LMUC8SZFKWBWOJJ6DGS49OKKF2CQCBGQ45L5TGDAP17Z4EYQSO5GKZRX19W6F939GKRIYE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (423, N'Mr', N'IBHLVO71GIZ5CH7IS5UPAL4YKMCG5QF', N'BTDSGRSN5K3DJDNWI9B3083OQ01XZNPMOCIRMT2WQHUI3NENWSG5NUC2PP2GQUNIUGP7UVAO7FCJDKL2LD177JYTZF1XRL', N'AM6EZCXU1HWEV8RWZY87', 29, CAST(13722.70 AS Decimal(18, 2)), N'W3IF7GKF13LYO5Z65DN3JJ7UFYYJJMFREC8D2KKHHTV2TBF3HEM5BASDVOZ8H1WEOUKBXL3LS6LQN504JV14ZAG3JVIEKCZGXGEZQ36WB1C4O2QQNUOLZRFDEHR13P0G65S7R0DGP4TXYBEH5RQPNDG510L9B4TL1VYI9JZMH8WVYHF229WBYATSPN5QF34KB7W3DV8MR38EGK7JLI717HMQ25TMD97D4CJQLC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (424, N'Dr.', N'YK2RCDYUAFC4IQ1602T92Z2W6J19CRVQ2W6SFG6F7ZFV8ZF', N'WTBNMX7S0IRY7ITO53ZUCTGBBHV7EUCXLAGP1XZ4EL0OFLRB5QWTRQS2C0C42ZD65UCX14M74VGRSSVPQJ1OXJ5VHDD1KU2E7UIL8TA13OOWA19K5MDIYP8MPHGNRLN', N'SIZ85V1YTL4X9NHW4HQBS45D0D1CX2FE9FI466TGWW7WRGLLA0VGIVNNCM7SUO0R6QNU4CPYO9FWX9LJSF2', 55, CAST(11906.95 AS Decimal(18, 2)), N'71AKV1FB4FM5WW2DTK5172M8IWV941GY9TZ0WXROMTO6Q3AG2ZP6FAH4F11Z6573ZOV2W2GWTGEEEFIELE75BAIYCVKVVSIHMK7288KZJT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (425, N'Mr', N'K6F3W6ZZ', N'S1KY9AGW9ZK9U8KG3TWXGJGHMWVRDMAI1E39GBAU5H8Y5YRGW0KXPPT8K3BDEPJNP18G4BZSI1RZBHBN4FVD2CSBKUODZWFGXL93QBBK0REO', N'7YVERVRKZ', 83, CAST(2804.69 AS Decimal(18, 2)), N'ZW2QZJMESX1SO5XP1HK01YWRT8F6CU7MIXI194LB8EQKLSIWAIIIYSB10BWR4G1XPE9RNVGXW9RN7C61PIVUCPOQLH1Y7T6SCSU6IR9F2LMO0OTN5V1MK7L0QJ55UHP22ZAFHZIY8GSQ20PWODTCSK857UGZL4KKWKL1ED65D3D3EUXQT8GHOD9HQ47NJJC3W7UIEOIA7OZP74QCWQ5DN3WJA4A96IMUQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (426, N'Mr', N'5LTBOIIJM2MJ9RKWE12J7O637P', N'UX2RO8ZT5L', N'M7VFP0TRGXAWS8GQP30N0EM2K8V929L4ZMM70IJLQ0Y4NA5MX15OJB18KTUH5KO7C5X6M8Q7JFXZFIFA38B13XLNLDN7N2F5BRSHDZ0PAY43E1S2DKEX9N4FK9K8LIKH0RNOPYX37LQ4SH9KL', 67, CAST(14166.27 AS Decimal(18, 2)), N'770EB5Q690DKALEVQSDZGSBB8AD84O25YXXJCIEZMGTW5PTPVARTGQTEWO51SH2KY8LCNUI8EDCZZF6IGNCTX9O84JMNCC65E8YW3G10RIE2DTFHINL448NPKD848UW177KQH9FZMC1EULUA455PQ106L8BQ8WSXMCV58P087MIS68UYIX02P7A57E48YOQPJ4SHQO2F5XH4J7ZDED7BWQ7F1QYUKSAJVS92FC8UVLXRP6LZFRTKHFTTWDF0Q8UDN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (427, N'Mr', N'BSTVX7B9UD3IHWBMXTAAEV7H5WF9HEP4ZC7RS6OCYH', N'9WV9NLSMMA1P87WT3ACAX4EQXLMBNGNS0WUUF2XEZS2MS8UJREWISAE5I5C1ZGY5N9PBD2E1DYA52RXOR2J9J4ZPIOBAPVEJTW', N'T2NIWOMDW3ER3REN3ME4CENAPNXZM300N0PITIVZ1C2TOFHYQ5EM6G8EEDS8QNR', 58, CAST(19890.00 AS Decimal(18, 2)), N'9RYXX15DGBTGPV4YET');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (428, N'Dr', N'IBILMW18AWERFLB', N'JII', N'3E432VTLRE3ZCTLA5Z8DU6SA3G', 141, CAST(2514.88 AS Decimal(18, 2)), N'P2GYG52X73NQJ4RWU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (429, N'Mr', N'0R1SYJ4PKUR', N'P0U4U093Q7NAXXPLIA0TOQ3BHJRB5SE68VU8PZ4O8LL31LHL4AG8IPHYWINB9YXYSH113GWI5BK250AW256VB6OJDVB6CTFAOMBKJFINDY264ETW8R93R1NMTHN7', N'N8EL8QAAEVUCSVRD82KRI2REA4PKYBSSCV45OE33BZR', 71, CAST(19761.15 AS Decimal(18, 2)), N'HTSF3YI0GNKWRT1FXVSSISU4X9TK9BYY9XWZ5AYHGFCBCTP46V32JPYOHU5YQ4PLMUW19NXAC23FRMXZV442U6E70HS4CIPJPQOHXNVJYTQGMIWVW52MZMQF0RVTYUDJQ0XG189L31GXLILW77F2J20808M3N5UW32SVYG3UDEJPZJ3I6ZLQEA0N0OFSL5XY6KTJPPXQ3KP5JA9H53XOJ4HT25V91A88GKIFPKTH1VNULU3PFXNI89E220HJUNOSBHPZSTRKAGNOGN7725U3NQZ65FCP39MD6UI443WL628SMQLFS9HOTL5LHIUDG2H0T9HM432Y88XKI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (430, N'Mr', N'XCX6O5MBSDF5E8LLR5GFOKXP8UDZHXC7H6Y2U9X64PZO', N'Q5CVAEIPQCNMJID3HFY1FXLKCIMZOR2RBIMSQBU0A6IEMG8J9IB2P5PSKSJRSJ0ZAVB0VKD6LYR8F6YVA2P6FZ25TU8XR27R6J4Q57OP54HQEGCDUNGPTUJAT570CFEIR0', N'E4WI2SJ8IP7KHZB41PC232ZXRLOUYHGIBO0586H5SK9NOJOP2Z2LMO0B5YRG4O918O9SZ5WV77AITB97WZRZFUWMNOZ9E113A7FZAVPW27EEDHIUPKJ4XAMESN5B6MG6677LW9X1', 41, CAST(17417.31 AS Decimal(18, 2)), N'KETXXURXJLOXMM9J44L7YC8ZBO6JGLOL29XFJJ5N9VQWY6HO3SZA886UL8N8HYW3UDOU0LZXY3MB147PVRIVMR0P9OYWZ0DRZUB3STOIT1C5MUTG1XCQG1H3CYLBM2XXPUB6T3X12Z2KFU3EVHV2ONBYD8QT7DVQ3FFRIMNX0BNGZWOIV6F57V92IDSLD3TP4CHZEBW8UY1DZVZHK8X1XPI76D94T1JWHYBMFO3KA6B9UW3MEB146SRET9T12RESE5V1JC1W5DQQE9D9A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (431, N'Mr', N'A9QYJXEDCGCF7XTSNUU07O89IRI7ABYL', N'W28Q2E00AIBRDHV33MHXBZUWZ0NDQQYZEDFAMXDBTU8RHETJGBAW92QX8BQ1RN9KJCDZ1KH6864HQ2FL63WEF2PBNI2A7BJ5KO841UHWU4N2Y865W5VNRV5GN1BIH6YWNYX2TAJCM0KA', N'UW7GH8555JUHW50L07MQEQFQ786AXYGMIU3DEYAEZ513MPA270V2AAV3GH992V8637Y22M62W8Q9PC4HY32X3DC8YZXXP1B4WUZER7ZKTT51', 219, CAST(11398.48 AS Decimal(18, 2)), N'QH0FQO6XT6U1IJSIUO0131A4ZS110JVJRF0WRZE6UMJV13V7YVFO98JP7VFXM4X9BAA2IVRVAT7GIF3VXU2446AIWAPVJHKPP9KRTTO34JEG127SSJ0S2S540R575VBT9HR9V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (432, N'Mr', N'CYLN0Y0XU5PMMMB4DHV4N4L0GFRE730HR6UZ84', N'NDECXE2GVEPIRHZIYEN6RFZB3BMLJ1RAU1ZOX6KSWFRJ8J2SKTNLX4N8D28LSGXUNENQHBLSTU9BNF3J9T1PD5C', N'ME3CRBYSB3QVP33P9CVWMCUDQQQ4I397AOCLTKXPDBLR9J13WVKGA5W9JQM1LUA7TIK0R', 26, CAST(17584.51 AS Decimal(18, 2)), N'235Z0KRUHU3X3ZGRNW3FQ1NHX88L6JAXXGHWN2SKD6AB38SBCHTV5FL01RC5NXK6ZMIJ4L3I1KRCDPGW9OQERHVHGY0187ICRX85TTD8SMD093BCAFWY75EIR125K2AT1ELFGB3GBHM43U7DNNQTBK5LJQERQ7NPCKYUIVWZBGNPI9FWTPIXCHIH8ZVQWCP3UXSJWDURQQHVWF2ABIY0PQDV1HLIZ63ZQKVLGV0G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (433, N'Ms', N'VU3DJINW463WT3HL7CK', N'DRAVXZ0GIWVTWCB88VS2UCKYZPBZE7HI2XCP1PU', N'VOF5JBR247OM7MJTX5S213YW4I1DXQY1BE0V14LLHGLFCYMNN0LF8PGRQI109D5D9NATMORSJ6K', 68, CAST(3696.72 AS Decimal(18, 2)), N'Q6LZMKTXLEEDPD3JWHERCSKNI5CJGTFII5ZJRWFWSLEROL06R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (434, N'Miss.', N'L6LQQ48VGRCV8VZ9KQ2ITJN7367E9LMMOY0P9CNFA', N'UTTQJANXHSHHC9V17CV8N01AFD', N'HJJ6WDQX4ISMX85J3KB3B86PNT1Z8TW14W97YV4WN78QUOVEI8PYUG89CUI2CROBMQ', 140, CAST(8691.72 AS Decimal(18, 2)), N'KELOIYMYGG79GSZWVJDKS01IYRDSYX46SE91WTN1XSFYOJ5LSSPHS79JC2QRKT0JC1H1JXZ2WCM0L3UFMS067NDK5QPU3WH4SVMM242USNKGK9X98A4SSTCOOWVT85Z0UI7PG7DHP5DK2X0VSGLSRPBYJYY589MNNKL118S0WM2MFRLRWZ0RJ785795I879FJQXIBYUJNLV4MOISC7988U4GBGUS2ASPDM3PU3FX5H4YB4IIRD51Y17OMG6U41GDS6RZLTX8RC2RQ547XB1P4QRBFE2DWLT30Q55DJXYFX9LYFYGBZXT0R82EFK6QJB6JYRZ0ZTED3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (435, N'Mr', N'FCU7NY480HA', N'YZL7I1Y81JTEO1EHMQZ6S1BIOUM5TRIB6JOYW', N'0YYK7GFG4ZFVZYNG03X6NO0U4C1KWJX435UFKOHHF04AXZI4OAO8OKUCY3GUEUJK1BRT37VCLF', 167, CAST(1057.37 AS Decimal(18, 2)), N'7H5DZGL1XNZ39I3QYZR7VL32ZOYGC5JFXH1L92KP4HEIJVHHX9VEMVEMD2DBI5PR4K5RGIGWF13E6KJ46GJ3A4T23E76O97YSNEZQP1FSZZLR0FTJ842MMHZQ2O1A975U4LJ5KDGF3AA48A3ZDNF44C55E8N1Z4ISTRNEWNZVNNIB6VIRL2WMR1PSFDRBPFFZRIAHNO2QOKGHUUYJPVFW7W0S2UYIWN577IJNK14X06X6K7XLE8LU0JRVIIFS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (436, N'Ms.', N'C2JDNKXTLU4Q7AU9Z73N713ADVJ890K5CLLY6WP2IG6L840', N'ZGD1UHDY769JFJG7YXN3IOFSE90I75CGL0RISQ6U4QMFWACZUZKRAT2A1KMLH', N'MKPW5UXVLUPFJBIHH7M2KGJ8M7P1HFCM8T7S9', 152, CAST(11163.26 AS Decimal(18, 2)), N'JT1F9ABABYORIW0YT7UXC3O1B7NRO52MB6GDWRBWMB39X2INRWOAKVDF5Z41NKL5V2GBFN22WYA10E48O0ZRGS1FT07XN99');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (437, N'Mr', N'4U8SDMVAY9ZR1OKK9ZDMPV33I05QVI19', N'Q1TTYESYE7QTYR1ZW4W1', N'A0HZYQCV8ILQE4ZC660GAX4WE6I37Q3P7AWMLLITWQZ6FQ18MWN1RSWDVLKR79OIEVI37CRKN7KJYYGN5AGA31YFEJQZ0RLM2HSK8X0A42EK8CEX5XMXTDFCW3', 221, CAST(18605.04 AS Decimal(18, 2)), N'PYEUM773UMDLLBFRUWCMKTO300HEF4EMO8C109LHSVXUEFUIKF2RWMHV9AUMPSOP7QXCZDRKAVUOWUPK6ZUZ1NP2QGSPFZRZ77MNIHI6OHG1RSYEK9FQYONK1ULIL15A3VHP822OGNBK6OAYHD56J10JJ2MOV0LMC6XWB96I7RABC3DCJN07WYQ2UX56FDSG2O70QEM87MZSRP6FO948ZDPDFV1E402TYU8NVCM50S0AZYB5QQH69KGPZTLUC846J5UXGIJCMZ77CFEHKWNDJWJDDJO2RRSSOUQT4EO764JAC9CJF3AGLQNNLGJWUHKV6FIIOKD67F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (438, N'Mr', N'63FSSS', N'8LL6RYGG74LC90LL3BY6VKC0GUA92OIOF6IG8M6GBH735R', N'NMSJWLXHH5WF79660NE615ST34NSP1FN47DNBIIYBVW', 24, CAST(15042.86 AS Decimal(18, 2)), N'EC91475MNHB6Y637NURDOJO3XQUVUQ496I9ACFEPPUXDV8KBLDPBF1IUO53EC9SWD20FXSV8G1OTMA8O6I9H1ST40EM6B0DF200S84ESIGVECO7DXF8T0AVK9VFI5OXFO9QLAFF14HZKXFSB699WSJES5GJCOVMTIFQ3XL2HZ6OJBAMU34BWF1N4UYGTW3D9U51HOODL6SWMVVGUTP9KJQEHSL8Z59KWSEO5855ERQPM419YIM06TTQ4RKP3GEGX70TG7AMOKUSS0RCRC9GI9E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (439, N'Miss.', N'QA0XWY1TWLB9QE', N'DSSYUSO8KPXN7EJLWX3I5DG5HUED8VZ6ITOVQQLEU7NX9S43OI8JL9A0CMGZEA0PPQ4DQNV6BOOYQJWPPBPQ', N'9HEON6EPIXNITYGRY4RFQ8AZWIUH4GV680', 243, CAST(8224.81 AS Decimal(18, 2)), N'ZOJENF1YDASF47SR7ZBMZ0X4Z7XQ6XXOTXTRNVY8IWFH7C8JJI9JXS3ZQFFGIBRGD3L7E13B1233LFWNZD7NNDQ1UU07GIQ74Z43Q05IEXHUO0EBJRG443SZDKCK0VVJCVZLBSWY8O9QWWCTFPOP1M3064Q6OLHJ2YIS1SZRVHVFU13H7I4B76HPSYF71QAM6POYDJSNQXUJQN5409Y5H6BWGS02DRP46885D53NQGKABXZ4TA6RR550ERIKJQAY7PDHF0QV6AF0L1KITW92LXC138QLNI4Z5M2MKHPSJBLHQ4EC7ZRNH8DACBE7948N6FUZZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (440, N'Mr', N'9R5ACH5FG7QVVK4SH', N'FL9JOJ39LZJ7X7INRC0M18WLC9TQRA3L93A5VT24SXQP5RSBD1YYO3K', N'LQZ5INQ47KUTD2RZ63G107ES4CWK21H9SEV1ZZ9S042F1OHFD2RZKEB606Q525', 15, CAST(15951.73 AS Decimal(18, 2)), N'XC6GI9CVAYTEENRHIX9S9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (441, N'Ms', N'OVEV66JYBTA7SIHIUOMHF7LVJP6268SST22I9DLYR', N'ON7EQDHBWXXUXDSXAVU4H7GLHHCQB4X6I2G8MOEFFFS7TYE080NS9GQH6MX80RZRZRCUWKBMHFP1E8RI3BHBH4W2CZ10Q5EOG082MJ3OP1BUQO2YUE5O9O', N'L0Y7Q07UO1W4ZRFUH6LDEHTTGPSY21U1XCI8NFG83XO9BFKB9ZHSO365Q089RN7V7MARC8J5W6EV57ECERRVJ4OCHDIN77GFQS2O4SZ1FBVHPAZJMVU0VBB2YXAYQWYPQY5C4P7L', 68, CAST(16447.07 AS Decimal(18, 2)), N'2HJE3YAA9ED92FG1P3XH0GDVQKVPXWQ6ON9OW46EKZOE04KC0G85US8M4OOI2LDCO6LE5R4LXJW1SYUM0JOLCVFMK8FNBZMBQUI569BN7AW7U6T2IJXWO2UQZI7W5A7WEG703UCF50D1Z8SEFD5S2PMNZS6N2FHX3ZSDYSYN6HRNPTQRQSGR4FUOUJ0AOOCPJFY0FEGMEHMKYZY61FX9YQSO43JESNZH4149UQBBCUCNS9QULU99Q3RSMAVCV1UQI4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (442, N'Mr', N'5B59E7ECPG50QGAIBG0HS20HDQGY8H2', N'VUAIXJAVB01LE0OWJ7TLFS2BNW25C0PESQC8C064F5ZTP3OX5ILHG2U2RYV0G4JBBMTNOGKI1O6AT9LK840TE8YPV9HD56OAMOH3909PY2', N'QF896N6EY0CCFKEHZQ7I0AJD6RQ5MEWN9', 118, CAST(4956.90 AS Decimal(18, 2)), N'WUOBA3MX4D5VUCOSXEQQ1ABMKVYFA0M5OUT0XIY546NFHE0Z69WCRDEMI1QF56M3RZ60JOVFGKMVNV56VZ9139DAF6HVRI0YJJOI7ZFIDGV7RJZMWKK5XKZHMVLC60OXKOB47NYVJQOND6JW7UY6YU0ZJ7VBE3CDSYM27VF9MOL7WC3FCO4B1HYPNBK0RMHGEBUF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (443, N'Mr', N'Q119QABYNUJBNSBL', N'RWK9HDARB4PX3O4SEZ6DV0VN4SIA8VAVBS6SB0ZZVEC6WREE57VQRPKR1W4PV0JGTTLAHBHEZ6IHNORDD340Z', N'5W2SSA3KRVLCAEQV5Z02RFWU3EX0SK4O37EIF6XXFFIORTGCER9XM7GQZ7PEC2S7RW9308FY13NCW839XKM1B62WQNI7HJKCNBWUKDC6BAVIJ4TR4FG', 27, CAST(6887.47 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (444, N'Ms.', N'R15Y9L2BNVOQF48DHAOE0R141TXJPTLEUQHFXP', N'3L8FREV94UUVC253XUQHQL733C5RBRVIG9QZ21J2JQ1NMSBO7A5AAIUIE5CF83YCZ', N'GRVKUDDCP8GIJBPKB8PK8FQ0AJCMTQ22', 178, CAST(19604.27 AS Decimal(18, 2)), N'HOCFOJA8T363GZPY0BAZXFVAFI075SKHOWVZSWCXOGU8DWAMRHDZKFM1T206J230IPFK4Q63YCBGLNWI7DGNELX89T6PW6ELDTQOHQH0B90735G56HY5MFLWR6ABJG7SYP2RW71HWFC4KP43C0JE88ZY7TXAF5HU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (445, N'Dr.', N'GYY2FN78PAY5IM77Z00XFNJLU99', N'E3C61WANY0JKHA0HJ1LL8YE7KWO4UFSPNAD7B189ZMKUZTO1ERJWQE35L476TI7UX6XS6ISCLMEK7R8MQ2VVY86WJ5F42TS1M5', N'RVVGC0700G2UDZ8E9GVPWJ11UAB0QIZ5EFRFT4Z8IJ8YN6XK47KA7C68UUL2P69HHWFX7SL5HN7CB2DOCQWIXOY29JLYIXJBAQHRQZCBMFTJ4TWRHWPY9QKSXDOO7MMK3V2LLLYDELW', 181, CAST(17157.37 AS Decimal(18, 2)), N'89E3P9YGG972GC116ZIXSKPQ4J3AQ1QXI2CGQ0NRLYRZSVRHV896YW9NKOY56NPFI9KE0KB5BRCUTPX9SMEISJZLSOW22HLX9BHJADHAX3U7KFUUQPDK86NZ9ZLBO83U6EKH8EYF44KOOS0DU1CC40O2OH9BS5MOZ005UCMBRXF4MYAHY7HMWRP5QITQ5MNZIWPORUJHF1L6LJGQ7RDKOZR8AUFBJV55AFMP9MQ3OZ7V6IK623IE92AJ4GDWF7YJVFW5XQGL19WPRW2SA89GDQV753LS8TOG0OZQME9BMXD06LR8ELM7XI64KO0U5OC8LFO2WC5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (446, N'Mr', N'PMSFR', N'H3LK13ETG24YU', N'VEXFNTHL7L2J5OTCAO30S9G9RA6VYBKOU1XJG90E51CITJFWSL2PHWQMYNOCNLNV1DO3RAW1N', 160, CAST(15856.50 AS Decimal(18, 2)), N'ZYTFDV1JBCDN6HIIIV5YEE5XK5FQXOC2FQ7ZOQROMGJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (447, N'Mr', N'8F2PLGTL', N'KFQNCWOZ1913O9RTC', N'URWYG7V93C9U6XBALSLOQKDGGFUB5IP12S1YPZ7GHEIA', 66, CAST(10290.58 AS Decimal(18, 2)), N'AP14X6K167GKSVU8GBMM0B7F9ITR4HBXVCNV3ATQ4BW8AN7TVI8BUWSZHLUECTWPVJO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (448, N'Mrs', N'8QO2SNIIEXS0SFC85EBI3IIDODR5AEJ3UFAU57G', N'1URJ4H', N'66RSGP3FZYADGH0DJ3KM7SEWDKLL47C12TA83JOTML2TRK9I63XAXNF', 96, CAST(19941.25 AS Decimal(18, 2)), N'8Z45IVHPFZ5LB0VL803ZKOEIFEEBE6CQYRKWE2TYE3JHF93CXBGVFPVKKLP3H6B8MENJGY6665KH4X26B2D2QGB9WZCSCPH8RBU1LJWY4AOA5EGNJIRES9I53ENGMETGNCPT21KS6FXGR13HJO9UY2FISOY7WGBQG8MTPNKHXZ8DB2D1A5WX4ZILW60D3DVQ46ZJEA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (449, N'Mr', N'64DIZTGZPGG2I25Q8AEEVC8ZDP6C5H2YX2BY40', N'RJFPUE7L8ID2E998H2BJYE51', N'SUEV3HASL8BM7R9ZER0LPK4SB2E1923EEVG84SP4BA8I9MBFTXV6NUO8QMK139IJ4W8BB1VL1VAFBMIORZ8B6XRK77', 83, CAST(5587.72 AS Decimal(18, 2)), N'W4RWYT26QAWXRJDLHP1WIM6EK4I943UMZCZTD2KRUZA36F46QKHUDEAAXDBUAT1NG9YEJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (450, N'Mr', N'UXSGTYGKRAJMVS2DUWD49N4U8DH5FR', N'P5W041B8SLC8A6UTIGRERYOSLAGSYWCDE249AL3H2TLOW07WHPGY', N'H8O11RPDDEZ3R295RJ9W34WA307C75N43IDDDU8NM949RVG8XSZ0XBEDCDX1KC58QV09PVRWB', 56, CAST(8099.04 AS Decimal(18, 2)), N'8F491IB375ZCIKLZ9K1PW0QQH1XNMXHPM6B2Q4DSYT56UYAH1H0DCTN8ODSZKOGANAPC8J9479R2UKWIRGM5W3CSI3DCCD89DVIK9X9H8V632LE4H9832BDJXWT56WST0HPY1C8T64X0X8QXO9U25472IYMD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (451, N'Mr', N'M8VJH3WE1W4E1MV66VPH1QV47TY8FGB504WE08K9Y', N'NWRG4EUKIAW8ZT71LJWCABYD0VL2KB8FEZR6DS669WKIOGX6ZUV6JL3BYEG8TR062GUZ21OSCQ3ERFOKYE3PF1WSVG8', N'9U0MJ8JZEF5N6S301ZW73A3WIVV7J102PA1KCPUOHKXQ33O75OURZ4JZ', 21, CAST(5357.99 AS Decimal(18, 2)), N'4BB3C3LVG350EXXDCMO5WGX2PNW9NF2PVP2TLXK55185P1Q79O6CX78OE9DP7B800F5PU4RE1J0U7RCOWO0Z9PROGEFCJVYTT84AW0C5WRBE6EGMWOSIB9QBNH9GPFU6K60YM2SVBU2HEDH2XSGU2FIKITNERWGGW5UZDH0UWX6G68XAZ6JWZZ34OGGTFD3FELL9IIPFSLY582D9WCFLDJHW1PBW16EJTR2KNORHH34D1YVM37W2YI2U4O7T6SEL6FBHZTM8LX49F4V2TPTTACLAP7GYGXAOPI6MMEM9LOG0ESEZT4ZHZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (452, N'Ms.', N'C75828C6B9Q94WCQBO5OYKKYE', N'CY', N'33NDCFDE2YVRJNC57PICDSF6N2U792KR1T9L7B', 242, CAST(13321.61 AS Decimal(18, 2)), N'BUU1RRCNRONGKWY9GF2J8LVLWXTH5BXTO57BRLMUXXWSCY8H0KOKEGBPY95UYVHGQUREPMHVS8MAO38XOBGLNDE8TIDIFSV1FG2I6TSD2TR6U00V175NEWTCFJL79YF0CKV80PQVI3ITL7ESHHH8M8MJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (453, N'Mr', N'PH6', N'IVDG7MX3Y63USIPJIPWAEOBQ0K14MTOFECLJEYHY0B5JC73A5WPAZTKMGNKTH4HNGFX65K8Y93JRESGRYP3EZPDRYRIT', N'5KB05TGL1IMRE1NDAOHQ9K65ZD4PPEQXWKCR2S9D7GTOMA5QDGYWQLVKE51ROQWMROVUOWBIF3JTRHJO7DB8GT7BPSDWQHOGK7XXFB1H5FHM21TXMCKAEN6YGJ4VJERXE', 181, CAST(17715.01 AS Decimal(18, 2)), N'P3N7L34ERT95SUBGA4BEZR74SPSG6E4XBKBM2NXZEEUE4MPN5RB3B5NYVIFVBN7DPBT7JPDN7B0KXT0504AF20M6XCQK81NQ7TTH4GDNVZ5312I9V7CSAPPN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (454, N'Ms', N'AFJ', N'7T02PRNDZR41IEWAS8N7TUR02OQ257D2EK29IOP1SEZYZCHBHG6JUMKC1ZZ00L7RD2NXCMR3JLEFVT1P7FKO1U7R0P7JPO', N'8KKL8VBU31BL9NZF9DXD2W0YGV66YQNK7ZT8C04OZKJ5MVAHW34DZ00BJL5DO5WDDRD9UQ3999EHDVCKLP9UL9L6YHPRVQZTN6RVI0M50V4QMIYN9KRZW1R466AD0BDI9LT64H2K23UP', 183, CAST(13303.07 AS Decimal(18, 2)), N'6ZTF6N9DG57CIZU1F4N1TBO1Z5GEF6Y367YHJ8PBVPKWBWD7HQVK1LGUASG07VYA636A1DI6EC53QRQ2S9WOAD1KR36RSO40RAQ8P2547O5PFC4J2D7XZ9ZS1MJY7QEQ75CF1HDQ4RGM7C5EYNPEG61IBX63I6WHAFH90OHKZHT7SDLPG5ZK0Z914T44BA7XVZCSUVEA55EZDTQYCHMD7CGA6G56KC8P9VBS1SULQPEVKAOA35STNUPIJ1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (455, N'Mr', N'DOZZQQV952FQZ019WW49JS', N'668KWPJYUP2Z885G8X9TL0IPJUWXME7EVK78N940OGPZZUYJU8ZMFUF6OI12SLBFHN4O0WTYS854AJQOVD2DFLZ051K482825AIBQAIYF1T6OAV5SC6FIX0VN4IYCPQP03Z00EYLU4YESTCU6FC', N'UKGI2IBZ0XMFNPBP95OILH0OSJRH7WS61YBLUVYT1J8O7RHSQUTY67KDKRPIQUR44GDODQVE6VG18CH12ZQC3T0UEX125F37S4JRDSE0ZFSAQJ57ANGQ3E1BFIAFOS8Q', 119, CAST(3965.80 AS Decimal(18, 2)), N'DQ7PSWPPHHXXJM1MIXKPWSU3FKF2F5T9Z7HUJZLYVK6T5896L77LYCPLW3A8HM9BOOYC563IBMTBL0X6B8G8X7BMHVYFPDH8AV4HAX1F4P9CIEZV63X861DGDBU98NSY4L0QWGWE713');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (456, N'Dr.', N'6T4IV0EZAQKIORCXFT', N'WSK79MOMSJLQB35LBU4', N'883TQN9LQDN1P3VSUSIYC4D38BUIYB661', 66, CAST(10434.77 AS Decimal(18, 2)), N'YZ43V29MG929HN4Z2R6GXA7XD9ZP6J04Y5ID6QD5E6IUIR88CXBGUNANR7PM3KFW9XBC5QSBD11RSDEM1QC97JAAUUMZ1R1UQLKLGV3M5Z3TLJVES3LD76PPN0HA3SAMZ706SS55MP37GGPBZ86X6OMKWVYGDTICPHUDIOLZXFRH2H96B6AVLCFBLGAXUPRS7RIZMBTAM7ZQW4IFLR57JNQC1IS1EO58NYAAYAJZC08ECPEGYUB2KJ9J16X4JRVY1R2YU7GB75VJEBZC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (457, N'Mr', N'FIJNYOFX0DA90L', N'EKKDYM2UROSXCUT7IRRDQBTAJ82ONQIBAYGB869MKUU4RNDGAX2K3QN2RAUPJE605GMDEHZBI4TWHPJVVMEPOY7KBDJYC', N'IA1DKZ75D1D9QEENU0QRF4V0LFSQME6G06LKRG8IR6RCQYLF3BH6G93EE0S56GJZUW8JTTV', 75, CAST(8449.62 AS Decimal(18, 2)), N'B3JC2N4PQ9SCFGL4ACLMGMRE0VEOQ4P6LZ7NBLZ4Y93XOZRPAE4YEQNPC5C68GYMKLQG9XSPDGN7ITP03PDB0QSVCHB68SVIAGD28BGDMFLX2G6IFB3J2NMTTU3RLMGKL5W2GNSR90PL4UTVASQWPCGNUJ9D7ORZY1CWJ42SJBA1X0PZ18HTWKU9P97XEEJK9QM2IXB5QXDD1EPTT9CZ7Y3E636AX5E4RQR7EMH4WB2Y6G7AJD342KCBM8VFQ18KJ8MBNIF7S83WV57QVWRK2A27DGK5Q2EV2IEYUVN0XVBUHFFH15JTAOI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (458, N'Mr', N'S5M7Z8Q240EICHKZPGTC4M56TG3DL0HKWNZ6B7TFFNJ62FG', N'35NTYA1Z2SYR2YWRL2QYUX0GC78220X1YY1N8NQ8UVKLRWV8NKSH7DO656GR1YX1VWS3X8', N'R808DJAMTCNAWZ0Q376QN3BANRHTQ1M9F2E88U1VQ6BTT82UWHGMN5ROWPKL2GWSQDUTLRI86A0GSHHFPMX8L0LABQ', 53, CAST(12288.98 AS Decimal(18, 2)), N'6FY6XAGQU7TDQ9VZ8QM6Y7PX033KIKLEZ5RFXG3MFK09L2QS9JLJ2BAYP05T7V89MFDKHG2RMZRD7GBYCABYY1CNVTPXB9FJCQN6P5BTHTW2KWQ8O7GWK9BK3PPNQ4GDK81HT587ZHH5493Y2H84SIY3F220GN2CCJICV9FJY9X2R5GTLRL9WCL19X2Q28QBF4SLRQ3T1P5IKVB9L8EP2TG0YG2Y6OGQIMNMCV2UOR8662GDLS4UT19MORNAN4MC9FZY8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (459, N'Dr.', N'LS68X5ZFDI5CG4ITLPIDOHNDOO7HMM', N'XCI4YCEPFBZEI8GULAVI16Y6VYIPU4SBE1U4O8PTQH1G1KETE27T2QGQDB90UOUBIO0GDB5C', N'J9FTAAI3GD894Z8FD4AWF85VFIN7QRJIVFYYQGP69D11GCT8CK851TWA3KDSMBDOTQEO09PWF4N164F3OFU5IEG1JOU63XJX0C7QX', 175, CAST(7010.26 AS Decimal(18, 2)), N'XQ5K0AL9UVZPCEJMXHC1YK8S6J4VXR2I5WVEO80Y0FXRAYS8SNHIL7QCIDDH5PB3SHKFJ5XOGE0INGH8QW2A9KWY5IVAVJSB4TYTECPMPT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (460, N'Mr', N'OX7EPEOQT7VUABBYA5PLDW2P35TK8YH', N'2RJ5I4BJOBRXZ9OK3RCZPY1NPXDJXG2XV8ZZWKV7YH5D2EJFCW9KSDV3PWFKRRL8', N'72UCQX6U3Z4A37H75F9D5CFJTHKP1UXO5K7RA6NJVPKV1SUBGS7RHKZVNBI9CGS91G5I0PXYSPIFSJI0M899N57KKB3ZOE7EXATLNBBQV8ZR2K23TIM36JMV8KYOLXAEI3I', 164, CAST(3688.64 AS Decimal(18, 2)), N'768O2V4Q9M0U8KLA0ANSXLPETIOTE7FLGHPRWUTFQSJO3ZP8S1OC205LHUUK7BC26FDQVUD6H81420AUSG1CI3JFC3A2Z97FFHHOLYDYOIVTY0JHJ0RQ90J3WYERKA680MOLIM8T22NZ7PHCKSIYHG6FXESNKMEDCNTCBXYXSYO6CJW6G26RS7RJG9N4UK8ANKV40MTL6ISZ3DIL6IFML4WAW2AU37P8H1WCBB1JX718QG59M8DQ01OJNL8YCZHYSKH1H6AUGVPE2NJFW08UTZ7FCCOQ337XP2F6Z3SGYJ94CAGZ1T1BRN5TC1P4HKRDORPZ8D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (461, N'Mr', N'R5HF9PTFW', N'U2Q9PNJV508SOKBDY716I4HDW904AF7VX58BT5N8QONCNA1C46TJK1PQKDDFNEKQSCVICZKSKSGTG4PL8O04LNBWFIRFS7LC4XKAFIZ4M1ZRLW9FNR7Z', N'PWCAXJDE6FI08065R38DOYC3DM4XXL9Y1LEW5C5N57PS1XGLR5MFV4TRK9WBEFHL6JYNM9ZFXK7G', 136, CAST(13366.38 AS Decimal(18, 2)), N'T7SVAQ232VOOA1V61XMTXEOYERVGLLGRNC84YRU39YM8TVHBSKN2LJIEJTHIUMIHEX1XTR892JJZRF5IAKO0XE53UTK4AB8NF5TVUKH1CE020IM4OZ8AYHJ0RX2063ZQAWJML9OQ2NNJE33B6GGA3YPXLT4XHHU9E9R4Z0IFAI7AU0MNTRUQMONB6L1S4Q9L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (462, N'Mr', N'P', N'G441Y3T840C74PJKE5POWHKOJBJ9CR00LYNTF9GF6WH0MJG7PU9LHBGZJFHNKKWCZCM52Q55PAI0ZJ20UBJHIEJ9HO9ZST', N'J1G6I6SYU3XSMBWFU9QQ4MIZSZI57HAWCI17G5V9OMCG1VZX303BHQ4XJHDJONRCS0F3AOYODG1H92XX0K27EZFLD4OZRCL1V0N0FVNE1EX1ONNHJ', 3, CAST(7993.74 AS Decimal(18, 2)), N'E45BZC5Y10LQE3K7G4PM4NPLFXDZPAK9MIFWHCTFORLO2KRIGLOMJYORFJV2Z68RGB3WNO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (463, N'Mr', N'TNC2CPWCW00RUIAJK3HVP225TWPLBAOE7WWGTR7J15', N'L0519XB4ZP4W6TGZZDHT81', N'J3LKXTLUQ6ZYX1U0M9FWH4WN501DWQG7GBSHFA2TFL5GE3GW6O0E2MYE6XEXS7XZPSIL8CKB6LHVZG82J4', 5, CAST(18509.67 AS Decimal(18, 2)), N'4BAYC10JV6UI4MXPOTOGYGQGIJU8QHVUSVJB8ZCPEZ0W4N45ILF2Y7ROKUFT7STDB0Q82MHOHZ2YFUCUEOQ41SVK3VQEJJHL6MK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (464, N'Mrs.', N'Q5QKR', N'UKSCNDG5CVGW0UIS3I7JREHDG1PAMB0MJLAGHKORJKR1QWG4HKDA1HNF2FVMO5I1VTDEK1BIUF07NGNJKKT2XPL1Y', N'8Q25TCDBIV507O5QMKVNU3O7G52FQPCDN1P9NMO9U12F1L97TPLHOHC42VPO9YKSJRC6ZW3ZWLSS185VWVM14VP6OK6SX0ZWGAW9828WLLL2OJ3TPTSEBJOO26', 187, CAST(14713.93 AS Decimal(18, 2)), N'WV2V4QLZ4T8PILEI2OCJ4547V24XHHSS98XIMUZB6WGAM1WY5YJHA1ZRRVZ2LNHN0FF9NVW7P0C8PTKU66SJXBI896RQVXPIESA6LMB91CSAPQ1XB5WFVYQPX70G36CRAUUXJD8JUIHKI8II5UFQ1ANF2K9ELU5V00ZUW4DXWCKCG56POHB9QMQ07EVZ4TX0CMKI8OM1GITOPAYWDJQ3IW4E9ZNH9ET2EJZUKOG0VAT8S1AWFYLK3THGH68905S1OQ95B4CP3Q882WL7OQ2BT8ZL2IDEF7ZQHSJ1S4LBLVHDK8ELK0LA3H7FR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (465, N'Mr', N'9VTHUHRK68FZB1MCLKYLUQTWYTK5C', N'D1O22D1P5WJ1KF8VFLGF', N'EPB2VLWCRBVNTMQFI9MI4HD238LLXL871KT6AJPGS7CIT6YRL35EDXC9YN0BE53OL8TJ5ZJ5Q', 154, CAST(5697.07 AS Decimal(18, 2)), N'3SQYAVQIRACJFJ5QPYRM0T4STELPN0K3A31TKNKLM2H490L15CR9O5O9OY4V91VRP89CIB61D5ZYC0ISTKKA8BF5FR5LIOBL6QE1R8IT5PVI5QX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (466, N'Ms', N'3CY61EVWDF5VMIRJQ49EJ6M5KI1WJ1WL765304Z77IGY4B4E', N'MSC13CG458BO9TSDN5XBQ0J0ET1A', N'4V8X9UZTFTQ', 93, CAST(13308.75 AS Decimal(18, 2)), N'FC2PHKIES3WR6KJOUERMLH1K2R5IFW0PTG56MM4L708OBQML67OQYB2YBHMPF0YW37XPEC27A6EK9D8B4JB87AQIE7V40E572CK4SW6T5HFSWIPX8AL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (467, N'Mr', N'GWYGXQTLJDYDCIKNFCOIL41YUY3PLEQS4YGP9P8C7JGUHBU', N'L', N'7WT0K2GGT7E5LPY1X6VBYGTH01D6BKP9X71WP4E94XG3BJVYV8YFFR3C0JOA58H47DO1BTSEMOBV0XPUACOGBISATD4', 24, CAST(9087.95 AS Decimal(18, 2)), N'OPOTGFB7HX7W07IXS4I8DH3QUYLVIXWPSAICNRND');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (468, N'Mr', N'WAOYFVGBU0MYN3Z4M68D1UEQ4BB2O7GJ43TBPSD9H5V83AP4JB', N'2R9C0Z0LKZN7KVQZ2M8TAVA1BI2YM3V9QYMWZGRDMKDB2SY5NUZNRR87H81IW2YH4EHM8UZLVU', N'SE3VGBVXVUM2GKTQF7B2', 159, CAST(1494.02 AS Decimal(18, 2)), N'YC79ISPZR53RDI6MYYITFOJ1I3QO690H5NE5VGB6WWQRSXFRCPOS4K5AT6RF21TH5MMP31QINCXJYR8KNYBGK7CKI4COOW3U38M5APOBY65SNLB1Y7R4PCWX917YO2TQ82GP539Y90IE1JXWSBQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (469, N'Dr', N'B2HY1WYU4KEMMJ3UJAOEUTZVWZ5MTL7IDZ5GM4R', N'PHYYIJXBS37IYQFFRF9HJMV7OBBWSVESWKIPI9IYYR6DWWIVSE75MDM3LRA770IXPFLD8QXIXAISGIARSG4DN86JYE3QYARY98NHB5N2HP8BUUN3HJFRW49H92', N'UZTJ0TPLE7YPXM7LGFP2SZGQM0RO', 242, CAST(9142.94 AS Decimal(18, 2)), N'5Z4QBPV9HPMWDEKK5MVUXSUPUIVQ3B6DBBL8YPDG70GKEL0MYDQ6FVJC5FVST556J8K1TCLF8FNXC9B8I8RPKZYFR92JULM1UA150YTMRBYZ8MZW3MAKEFLK959KA2LMSL22858JF4Y90Y7596F7A2NEOHVVP8COQB7MJXOYEQ59HCJBX4B3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (470, N'Mr', N'RY8O3J8P0G6TUWEH2L21QB0IDV9NE', N'TN7JMIKJ7VTGNS1WY0UP3RZ8FVZ24Y679PUFA5LSABG8O3SZU7BGEDB2NY3QJHE8PL7XYMMSE1ESARKC307XN', N'UM111XFACFI5BGMNDJYL5ZSM01VJ2W020KJLXNVOSB306XGIT28GT3WVTE002V7FEG4RX1QPN9SUVRF3KDQ0OK8XONRIMUMX3NLQSOKRBISJA1Z2ZXGP56RU7639A83TMVQ86PAVSYO5RPMMO', 67, CAST(3524.32 AS Decimal(18, 2)), N'EBQXNDQ9CU6S9JORLLCHHSJWEXCXKYLX81B0VJXO2WZG8SVJBJYM6MRUJQ1TOD98J77OBWPTKSPNXXPJ11M1YMVP8M45H4ZONQX0L77ET51DW4XL1IRNR79XC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (471, N'Mrs.', N'7EI9NWKASCRGMDFDNGK', N'TWDRSC1U9SW7I2VU18LJ2DYJRVDRNJAHLZSAJ6U9QKSM', N'JPEXRXWRJLLBH3FZWFBRW9MKX7HM3IKGLKPDEP3TBE6O', 246, CAST(19181.82 AS Decimal(18, 2)), N'GPSKBGT1Z60OYUT78TKHT3PJ3ZCCXGHZN3RIM9ULKV5QLCKWTJYGCUOC08GB3G3IP00U3BKYYZXYYYXQFFIDH0NTFEIDTIH3RM1KCPTIY0ICXQE1BPWNYP0OD7FPS75FHT7BXDEQMZFHIAWOZG23MT51LC74A3PRU2V3J34YB61YAJ63B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (472, N'Mrs', N'D12QOFXQB89KBE9RA', N'38IG8ZYB3NFXU0WZA7', N'GGLPRS7AWT92U0KF9O114QXE2K7BIFH3YAGQWXBPC5ORFAKPJD2P5M5QJ7M6LVSHB54JJTJBCBOY25YR0HS4CRYB5Q7OA54HD7F9615PUQDT', 83, CAST(13901.00 AS Decimal(18, 2)), N'QC42TNO5QK5AFIANNFFS5VB4SGS7Q254TKDCMS97FDDJS0QINMWQNIKU009CVGFNF1GV5X1U67DSISCRQAJ36FGBZJBMIW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (473, N'Dr', N'8HXRTPAAPM2Z7S2Q85CS', N'HFMJALAUECSHLCNOMUAEKB6HCCDP5XAGC14FGP7VY', N'6OD8V63', 33, CAST(18102.37 AS Decimal(18, 2)), N'YYP4QKUDQL1KF4SB8OIMLXBH0L5VMLEB9VFUTNL7VWSI4V06773Y0AQ0M744EZR47PAJOXIL2BRO4SD5LZOEIFBY4F7LJHSW5NBEKGH9OIWPJ2VUUZJFACMREBE9QX1LIVIGHYK5HEQ0JMF2JDRKXDLT1J0818JRGB6OKFCVEEYWMM8RWCQD5HN49PFXYB39VYJ7FQH40V6JFP7EB9COH5LZO1EVZFX2AP0N20B5V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (474, N'Mr', N'8YTZK36584N2272QM8DF', N'JZB5UL6CA4ZS66957Y7KPH1C5J887WNFGFR756HRJTM6GKVY6BI9NDE2XZ0BDY4DHKBQE2Z0GG1WUVVKNA1WEDR31P9666ELO8PW85J3BHS7CI714FN3W8Z3S8POSTTA2F8L6', N'O4J7SETMU1677LUPOKZC29ME4DY2UFFZ0DP2V2DMB30P6LQKTNKA6R0EH52FFRSEL77TWSUL6C0Z8W7JME86V4S8CAKQZY7KBM4YEWO0TY3UR15LXJS1ILIGFYGL73L85FNMS94P', 49, CAST(17293.08 AS Decimal(18, 2)), N'D9A3PKI0LOYFRPCKJDCM4LY39QOJCBX7TVSBOKCUDYT83VXBAHGXT8HSB7UZWYOARRLWX1VZ1I95SPZDSD8UVZEKD00HQCXEAIHC90D9MGVBZBZL7G7JPTFRC0JX1E9PKUV9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (475, N'Miss', N'QANB0GHK53FH00J4S8M35GIFW4LZ0MX', N'BHQYKW', N'7CW1YHB4ZSG551P3NJGF3TPCVPBDJSOE2BA9MFHG5G8', 123, CAST(1225.52 AS Decimal(18, 2)), N'N4RZZ8E33L10E995EOG3PZ8HG8776Q5GQCKBFJQL0O9FHXM4ZK55E5JNV9JR07XCGK91PXPUYV31QT0JL28LLZ2LSWG50ZKTQWZWNLF1UB7I2IW2905YYBRHIO8SHJUYB9AUU3V0N6Q9RKIA0EW0TMUE4IEYCMKAG87S828545BSKHPX5YS3NT5PFWQCOWO0MGTIDQ2Y5RWNA1TMSGTDUGNN3HCBBWG7HB64O6KFWUXWXHED23J73A55S6FVDQM9AO6ZVOXL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (476, N'Dr.', N'C', N'KQIH72QIAPG9M4ZGVAIOI4WALV546DXN2I8I66LR3SRQRCKUB1UN282FT8VBWM', N'53ZEYJ5PO9MEMK685XL6312UQGH72ZAMLE7RPXF0NZQSOWM198B7U17304NH1XMPZ0T8DEJ8ILJ4B95UUFYUO2RK63RKAXYQC0TO3DO', 17, CAST(9952.69 AS Decimal(18, 2)), N'EG0JRPM3Z98C83650CIRP168NL8BEHE5XBPT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (477, N'Mr', N'IN5OJMPK218L27JMTZRC89S8EVVHKJ5G5SIVY4OZ', N'XRS63WH9OPRKPD6I9BBS4IALUFSOYB9UHGUYY5GYUR6YAND2NPM0KT7FH7CO3TBDFW39J7J4VDYCBBA61Q08O9AN8FHRSRU0GTID', N'O2P9H3SQZSNMYR1W891', 75, CAST(19897.43 AS Decimal(18, 2)), N'M1GTREGDX1LZUVCFU6DASV5HAOHV2FXED0DA2YXMPUQKNBKM1Q35CJDQWZI3XLAI47MTI2DV8QKX5KUZ3VTCBR1UMMD2GUP4J8FFPQ3ZC7WLYFLB5JZ1SY6C5R6VOAFD1GEX5E9CRU04VFV712XXVNCL12AXJ8A1SIKH1O6R9MAXX2HPVZUMDHID4SV23BSIJYBCVE6CV5N9CENZLL1KEOOA07D8T4NXTREZQ4UHSHQ7U80Q5VGI984UA0BN0YJRIQFL0O9GQJRWYGGR6M3XN5NLMJOPT6HUYYP3TFPGM0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (478, N'Mrs.', N'KEH6B2DGESY70Y9VX9OR7ZJVRG9ONN', N'3JF6H47VU35X5MDS2O6MF03PSB3IYWITWLY7K2743REBCTN4H7D5BR43FQD60OXY', N'MYYKNTRAGHRGQ35LCI23B0LHABRLZWFUCF8Q45LOCHAI16VVMGJQ6YYMCG9B16BJ1W4BUFG7WDRTP3F3FWZJCPNDGLDOWAN66RG42K06ZCTT75', 102, CAST(14118.44 AS Decimal(18, 2)), N'PG8WUKKHDVL3C2UYGZJNJ2XYZQCYRXMBNDY4ENU59P3ZCVC1YG9H2C7MJ9W37LQG8AGZ3QKT4EEUZXM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (479, N'Mr', N'ARYNUA12TH16Q7', N'C0KO68ZG2INMSDYOZ1QICH4GURUP13FUFQ0S2GAZEO89GGNCEH1M6G8UW3TEDA', N'905V47S6B9QU', 124, CAST(14749.58 AS Decimal(18, 2)), N'DA0AN59B5BL4QRXNYMQ1EDX8VFCNXCNLNRPXKFS315TS4G2DHQWD7KPZCRE8SLDSOZGY202ITM09K53FDY67G9D32PKS0KAFS044Z3BGNDKKJGF7OZVTE5CELDWCG9H8BKHK0YF9NQJ2PTJLAC41PG1MOQIM7Z0DVB9YZU6PKL6OM9PSTA135GJUJUWAFS2OP57EKKMF5FG3ADZE1QTWXX8FREF4YW9RJHYH2B88NLXPZGK5VH9PY5RSWSM55IH96PJSEIBPHL8B0IFBT99GNJSDQ6KAO2244NJAWRRC6J7DWFRECA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (480, N'Mr', N'4U9Z0U087LULEVTOSQ3NG2AELV6U95SSOJBEFN', N'Z3T71D5LIQR4O8V0E4IAJ1SNZI5WZMWL3895N9LZ8WJVFCJL03FAVZWXB57I78LWU50FZQC4II1NIW8NYJWW', N'2SAMQKMYMB1VWSJZWU6BO3NQEIZEK5VCQR47262MIYMP408E87EFKIKY4K87L8EHGP44NCXQRKSQHYLE9K5DQGR7662HXV0AK59FV3QW9NN0QUG6', 174, CAST(6948.20 AS Decimal(18, 2)), N'V90MMW527Y11FI36CZ4F1IWA3BFGAE6XEQ7V41XEQPKD4ISVT9FE8VADCPIARSS3MOB82A1QOCXJ5LJKN1ZRPJGTIEJMX1YRK1V4KK75DH6XFTJWRW0QT1D38HPNQESMD6Y4PF03TTD7CIDPUMV108YJNSV2UJEYPKK9UF6CWXW0N5QQ30T4JQL58EGXJX8AEFISY4UFFI53CXWH15ZUQAFYYE1GY9SZPLL7NY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (481, N'Dr', N'U9JR20PN60S8GNKS2J', N'MQ3CBTH13R0AN19B3MAQBRCY9FFXKKNCOP8FW3NWV2FR1CVUYBUXM6VUD52WEJHI3NLXSUE0YEU8BLWWKKY8PQQITD1R1RHBLWNEQX24XUY8BMIS85BUK8TDX', N'UY121Q', 1, CAST(4875.68 AS Decimal(18, 2)), N'Z6DO0LITAIZWEXEJ40JTJ2DG6Q6DQCOT2CZNCLEDFLRXZDE1B2G7448WSXHAF53XU5T1XQ7IL5D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (482, N'Dr', N'E5O5Y1', N'4FSMZ7WJNFYI6MIUBURI66U9JVFNQC39GNSMBAVQBSZ3TPZPCQXYLFWYKJ33S9SBBO2IUVI0Z16E7QFTVQB0E4N1QU2R6RY20NR5NGUG7WZK8IQT4A72YRW700RZSRT723DJYA5FV', N'XXYH9FSWJI5BP6I5U932SRHCPVJ3WZ7JF8IY59MTURG7O5HSBS7SXN75FMRDWPZKAMVGNK0LNA71BANJEQR4SFLS1DIJH8X5RWW1905RSM4NF6U5Y8Z5YURV13EA2H3FD29EDM9ELZC6BYCVICK99R', 212, CAST(19948.76 AS Decimal(18, 2)), N'BGHTB42OWHOY43');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (483, N'Dr', N'1XVKE9438D', N'TH53S838NWJW48RK4NOVNG3', N'W4106LUPAIO9CWFSBYKJYILK2QJRPWU6LVC9BM3SQA1NMO0Y2J9AO78EIHXF23ZENIOGJ6HPVSSOGXXEQKO5NKIENYQTPNQNAM030JFW2JFVEJXLJJPHFTR3Z9', 59, CAST(16927.17 AS Decimal(18, 2)), N'F44XAHT3TKC3KVYLYQAKCFOYA2F1DGUXUVREH82GICN8Z1HTX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (484, N'Mr', N'B8DW', N'H547UT5S63YE1X8JVJ3XN6Z4RD5IQZ6CEDL', N'LFN0715EUXUD75R334MZ305A6X9', 15, CAST(12662.10 AS Decimal(18, 2)), N'P7TJIZF5M82SQDPF8O3J3QNT2ZSFZ8LM3HQN3BDSZCLU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (485, N'Mr', N'ZUGWC54R9VK8H63KP9YRSMLJ4DF6VRBHIXOBI4G', N'3WEURRP0ACJ7E503D63B50FGNN27XLZNBLGZ595WHYUEUY3LZ2Z8A', N'GUW3QPTHFJ8T853NP5IBNQOZDAPK9DU9SYXZ0QNHCANKWSQYXIK0FXJP6XQG0872OY1A73MZI1ZD342LJRNRSTUUE8T207H33LVYRGQTVKIEY5M2V5W8LF9', 21, CAST(13059.32 AS Decimal(18, 2)), N'QL9JJTTPERZJ0GI6Z5EM8M1BXBBKR5TFCDIWFFSWPQR43UULZ677X1DMH8VHETZTQK44N3QYUKZIVX72GQKLYLHA0WE7JAIVQXDIQPXWG8CD2URJ0T1O8EV43T3ROIEK23SXKPCQSO4P84864U6Q8TMB18FWL57XTSAY1TZBGAVK95WYLXNUCOC8GHVBAF4NH7WGT95BUV9YY21WCHB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (486, N'Mr', N'T3BJ', N'H3GX64OI3ODWVTO0Y307U661MOJG7VMRD13DJ8217ZV61X3AWZ4V82GAWEAHK8A71LITPBHP1YZVA0ZOK9J8QQJALTG4XLHZON4GFAKKIEU9', N'36VZAKZAJWAH84T30UW7B', 227, CAST(18076.87 AS Decimal(18, 2)), N'IDL4G2HJXO0058328G4BRCZGEDAEFZYT4G44MR0RSLD6U8SQZZNWCZX6D4Q2S33XP7VP3ZFHFCJ5YTM5LKEGC2G5IYQI1YZOIFGND3M0J6G0G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (487, N'Mr', N'VL19CLYF4FD9WSZ', N'LZWFMWAO2HB287WVCSFH06MVJ9APYQCW970TJPBO6AL6SD63NP5MES2EC1VCMLPC4ES063CNGRAQLG252719KQHH5MGITY2KK92EL6WKCI6NHBTWYQAFKGREXAUJNUTHOQ5BDOKVAGW', N'W8LQ7UA8HNB0UKKRIAL7U2V4TQBT8RI1JNAMDJC40BEM6799I9BLM3LTDHWGJH0Q59H7AYEYYH7JO9YMH2', 95, CAST(19869.50 AS Decimal(18, 2)), N'7KHKG8ONLNRQ658XFHDUNJCZSIXEX5MGPRQ60GHQZUTTVMWHRLQYML4O7IRYAAQF1B1FE2XZ0MVSPJ36L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (488, N'Dr', N'XWHJ3QKIS1LT1', N'KU0UTJJ3ON04INHACCXIOOYR6HI96E43JPU2A0Q3AQS1P1SQ79JXJDDVW8NB0AXAJWKTTE0CMU8YVW15OS1WU6K5BZ61CE2ZTHITGZXT87BO5EZZ7IM890GCBEHU8YZ7R85EE7OPV8NMU', N'YFWFG1G9VNVKIAOHWQ1YKVDN5W254JAZH71A8T16UOIB2WO8ZR1WF3P329AJYA5CCV3B9D82OV4WD1K87U5CHDKDHY7YJH7JI5Y6SDZMJY7', 136, CAST(10393.66 AS Decimal(18, 2)), N'MBFNT3N2YHOI4DSKLH3PORYZQBZOFLCUOE0DHXSB4FAH66OBRIK4DWNOOTDB3A235MZQDE2OORL8GGTJMNXW17GSRBPOJG8UD7CK6YXCFWGLBE78ZTOFC51X57Y2PE48IRV949DOPKG4RVHD3PRSH75EFYZVN1R72KIY3QG0PSOW6AQLY8PFGP9N4QU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (489, N'Miss.', N'OB', N'ZWZ6TTSUQS15I1H3', N'ZTP1O1C45TVYBQTA59J7NKD82EGTUJSI60DN86AH43DP90V2JOG9F0XEGHYALJ9M0', 21, CAST(5725.91 AS Decimal(18, 2)), N'OTWFDJSXU5DY9Q3PJ8758EXFBCQDAUUDW1BWV9JMITRTVR5PMK4VIP6AWH31TFMZBZ17F6T9PLNEM4JK60QPQYV7V0ZD6IT26RHVQXAGRU6W1RNRXJUSPX9C4UCE6G36SK8VMNT8Q9YVRY53C8FMN0D8H4RVLV9BQZ3HJS59PL1FZEL5O92Y0HIR6ZEHWXNU0M4RUNKK35X2YY9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (490, N'Dr.', N'V8RDXI6C1EHB2LBH6V7TZL51JGAZ5E5R161K7C0DB71B27', N'974XX9LL0UXC0CTIFELU256EWHCC8PM7SNEFPY2NDLTZVHPF7N3NW8I41P0FW8CA', N'SAC61ZZ13J6NY2ID952J263Y7Q70WLTROW7KQDNG9DXD7SJWR793JGAM7DYASZ5HQFZ2VXNVIMAO8PQE7B8OBP87MKCCFCOA', 101, CAST(10622.60 AS Decimal(18, 2)), N'JL7CTAA9HBBJDNDRX7ECATA1OHVUKGT7QBYAQB1QCUAIB06FR54RKWSQB5NBFFP0I4T2P30L5O0FISPOAF2EB1MTI7ZKOQAW5AZ764QO4IMWWD7IGZ0ZCAOHHZJH3FXFD3A8SIH6OEASFQX50G4PPBJULIP7K9KOL7IS3ZQYIUAY0W2Q2EHNB8P2JGN9SALFTL788511P57V0LTPGY56SXCCHG8MBH688V5FOUIWCFY51U1YMXTT4FNW8UQRXFP8ZYM5FE0MG8TCY6BNE9ZEOC3T786U3RZXQP627WJ8X6DWLBX1I3CNFBKMVSX776JP9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (491, N'Mr', N'G9BV2GH392PTG', N'PKDYESGCYGGB6JFRW5KLZAJ49DZXMQ58IR5XCHTVMAYR2TU6LOZ3RP8E08P0SIP7B8SFEIEFBPZOCS2GITCYQ1GTIQW4SS23KRFU0FR39KR2PK2759HY6', N'FMSTH1TJDLX6LDHMJ3HRG506RFALBG6XZGT2YLQAE4Y4B006UPV97JS9ML11Q88XEZ65KEOYC7CB7WVQF3QMLXQJGCKPJ5W0PCTVMG0WW06G2QQA', 78, CAST(3713.63 AS Decimal(18, 2)), N'L909FIQRGHZ68WB4BZEBIF5J6EZB0RNONPPO19N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (492, N'Mr', N'67N8P9VJR9TVTISKUZCQUQTI3BK2SHHJJ64ZD2CY', N'G9RYXNLANJMV3LC8F318O6AE3YOOYIA4W', N'MIMCH8QG0YCEMN7F66IWJH9LO0QA8HQL93XM9O833ELHOI9DZ0VK7E2581N', 169, CAST(7316.05 AS Decimal(18, 2)), N'XNU3MOK0V3UJAXD63G21JERPTBJI7N31CJEUK2XITYGXW4DQBJKK7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (493, N'Mrs.', N'WI216MZ', N'A522I3IZW8FUGHVWUDWY3AZCUYZWB', N'IG8J8R4JPK5HXFS4VSX5QDA7L6DU1SD81RKN629XDQNEUDMSLX9G4IP550Y1D9HX6XG6U5YTIZR0PVD7', 99, CAST(9032.60 AS Decimal(18, 2)), N'BIW59B52T8ZS7RIJL1JK7LYTSOYT6O2IUP8WYFSLCR47X4XM7SXI1NFQK2DLDBW55GYHIMK69X7FGQVOQBLDQKH69IBV1781VZ2H5G3L7Q93G09U6OU1PIELZS70AP42P');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (494, N'Ms', N'O8QHPDGD45EOTR9RABNDS6RMEVX7RHWOLR', N'8IYAB75DLYQP92Y9H7T2OW7YPZ5Q7J4LNSZXV55NQGSY7E0XDLHS39FBB0LB1F52T41H21EB15B748QBZ8CL2CIECNMVKUMABP52CJVC65RXX7629ABT3J0HMN4EFJR6J0WF', N'K93IX4I1FI537J38P8WXFYFZGX4QPF9NRHT0EE9SY4FNTPAGNR0NGA4MT32Z0RBZ8H', 79, CAST(5536.17 AS Decimal(18, 2)), N'KHOEIA8050ADQ98HOCC7BDKGID83BIL6EAFS5S5JSPCEAL1YRT1RPHT7W8W524PNE3ZGTGBV6TEM065XBABIGUHWG8VXV0GN0P06LL4BH5KW376Q2ZTST76KM3ZKKE06CQMB5YBQ500B9LS925VW6NUTIFKILJR25EJDKVK3N3MS6VA1APIEJ30PVTSPET4M9Y5V1FO6KR9301MM5I8W0CJ2EUHR3UPUY0J7PFZU0CURUXOT65KVL8MWF3H7XX2P2F40HFXPJDVNHR8G5NLX9T8QENSLYSW394PESNB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (495, N'Dr', N'9R1UTOL8XY9158ARVZLIIH43UF8MN9P32NZ09HUO6YUN4U', N'OYGC0FWLLH5HJLAJT7RONGPEGWNEKEWARZLBVG344W16YXWXGNPS5QF791W3RH06KUPJ0YND4MKREJGJ0PYXO440KD2UJZCMVUL37CXHZCOJ5NTPLC22J3IGQPZNWTT59YVJXCBOS', N'QQ3UAZ4YAIS6QMN3YFM6GC66AC9S6TFEBCKQJXPOCBU31XBCCODJMAVDJXJYPBSH3EUD1XJ0QXU5I25D0XFHFVR0H76MDQZ0I', 129, CAST(3585.35 AS Decimal(18, 2)), N'8VC7CYENV01AB5G86DMUMBQQGRDD2TOHBUODG1DF85QYQMS4OG8F1H4X5LQLL1L2BJYHG2S406MHKR0UZ9OLK9G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (496, N'Dr', N'YGP0PZ8LSMX', N'XCFLUWJC97WA2SC5DICAL6IJA7R9S81E936605U33KKM8YV37RYTBHVQTWBN4AK05I0YM558O971MWABBO', N'0M3YAF5CTPGPUGS6YSVB27NUWURWNZYTN62I92M0B222KRDPU7S656ATZ91GN9PUQN2OEAWW5U004KA5G12F6ROGW8I005D1C7', 66, CAST(9453.32 AS Decimal(18, 2)), N'PQ8VASU6KNN6OANMO3FUUNCELWMBCZH233RPTXU7CFWW4U5OL2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (497, N'Mr', N'', N'0A72S8FC3U6ZSZJGPXWH1LQ42AT4XLZCF8JQXF8Q6T2EIAE12FLDE70FJ30HEAFHUUJKGTIAO6A8IBMSVS1H0LX8846UFRBVDLJORUK8WBO7WRW7G8LL9XG8WACCNNUXUEUXSY118TLPWPB', N'WOPBKAW1A69OFZVZM7ANYYLR5RVV0HYNX8DHRQI4AQDAMK3156QU1JDY2X5SF00T7MR6ME7VO5D8LB5LNTPTQ3MDVEEULPP9PK20T', 114, CAST(6447.23 AS Decimal(18, 2)), N'GUL02ET9D6IUK5K2LJXSR97');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (498, N'Dr', N'FZKN95ZH99ID5WCKNGYZN95X8Z4T27D', N'7YD65PMG4ARGI7K8GRDIXYFI7JDFCQC6YV4PANS4RDSH6KJ08C95CTJ9IVZLC64DYKIM2VYSY8QJ6YBNZ', N'FRYV5W64CQR', 90, CAST(12173.55 AS Decimal(18, 2)), N'EQFAQRXP9118I3PB0NH1TLCRJRK5O967M3LBYJJM8SKJ4BKIULS3S5OTEOQZ7S10VTLEHDDH3VT11TM862A2H2FHESX9SKEFRKNAP50H7BZXCNSL2IS4HYISE40OF4OJGD9G5BI01TV62I5R0B6ARAYT1VWL5B13MFHYDBGRZR3O');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (499, N'Mr', N'HG87D6EZV9P67NK2W156Y0P6TMF905F1W6', N'7ZH6U5CV7EO6SK9EIM1XXCDG642Z2JJCLYZ4WRQDA6NJ3RF6ARFPL2FUL0ZQ2CSNUBLUL4IQVONQPTCFOWPB3URJI4IVR0', N'4LB6230DA7ZDAZG3I095RQEYVVYP7Q1O30K3YIHY0FM8SLK6F2MBHLSE7DB75A5J', 24, CAST(14907.19 AS Decimal(18, 2)), N'CPWY8O3XES6FGEAEXVPSRJM16EPVFBZ69PP50MXNX58NAJWW6C1WDWBS3VSTZ8I3SZ5QP4EBX1UMBZQNHSP393SDEX24U3OPN5VBE671XQZB1PH354C6IETP6RCS29GTD5Y64E9ALO5I4HCOFYZPQI68B55MUEYNA5YWRAZQV1KT8BKPFNC49R3VYPUY9MG7QH8ZIFX5Y8TPXCZZKF662TEI23X1F1H9KD3R2L6ZP761XDXLPUDTFA4W3PXFIWPWRK4K98XZ97GVNCKO5BBKOOTA86NDORHTI99D9DCHXEJ8T99Q4896L482QUB2LK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (500, N'Dr.', N'ON46G', N'XD0PS6LK58OUWFP5SNK16NHJ0K2BHLNYVDPCO4K83BJ2F0U3TYQ77Y4AW7493KLPYJPCHN2BYV3E40QYIIUFRW9FG7FD4T7ZGP1BEHH3', N'BA9EC5ZJA5B355AAR944Q6H76WL7ASP923HAAR3XMS6FGA170WE01FF4S28GKR8HF102OZZZ67IXZ1QVUD6DEP8NOCI8JMDUKPZF9ZJ1XETTXH4QBDM6LU3QTDEBHQGJ', 88, CAST(4848.62 AS Decimal(18, 2)), N'IPNCD37ESZUNA4KGYXW8FHA8D16MF1AVD31I6WVNXUG7QHYY6DD4PBU0FEZCWKZRPY96229118AL13HW28G1O561913SXJRCUPHR8SV34B2G18ZBX29N4Y3JS7X1YH4IHXRBLPOACCXC2P002RVV938WLYZ0UU5N7KZ3HNP7EYAR1QG26WZ6M88DPVQNQNFI7A5IQWIE2NHASGVVHWTYVY0YBLEMX2HQJSKRKYCAEK4YRXK8ZU5TTHN89');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (501, N'Dr.', N'Z4EJZQLF2X127CHQ2DQR5YPUOA0RVERUO4ZWBMUWUUY8EYOU', N'V087HCOH5RLP6Y29AW97P64N3YFYFK00RAVW07YVRWZ2MAARZ13L8VFPVL3JXP1LQKXV2582XEGS721TONZDGFSWV61F4FX1UDB1DEOTS1NUEMHSJAU9QO5AS0ZV4TXHGFY', N'NDA2BLUU5GZWEQ68RX5069PL', 136, CAST(7768.55 AS Decimal(18, 2)), N'64HVHZ6QR0W4AJKJJAU26D16M2XNW15CHDR7SI24S15KCVKL9AXCE61T3B8F2IUQUKMXSCR18PA57HUQIBDM3TXABY4G9M297FPS9MTXJW3PWWLLHIXQ58M1MBLU7ARLM1XSS1HVIG27P7EFDJZRPB4YSN5Y0ZQ94H2VYTTF028O5FBEW6HOA0WAXZZ4WIVJPT275IHKPJQN3FTCBR1UI2Y4LRYZTOJI7OYBD49EPWYR997H5NT4H01NVXMDKHQ0Z8GFGIZ7HN4L37UCKGT6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (502, N'Dr', N'XLRGPW0EJVOPTJN66E2DKFGJTXBZHF', N'RZG9Y6KFSYH9P9VUKOA6809CETP', N'MWL7J6Y9Z94UOZRRBFE4UEM83PTAINDNPSPP9MMA0MFH1D3XE9VUBGE7AD4TDNRCWG4V92IOS338Z56PMVW9SJC8DHFVISXCU3LL87NBR617D68', 157, CAST(9796.56 AS Decimal(18, 2)), N'E16NBFFIVU76YR1SR1NNLNUWGKO29T3OK4L7AS5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (503, N'Mr', N'L6CXT0EZ8YIRR5', N'3', N'7F7HRIJC3WHSNM606QDWKLGF7KHMH5V79AO3LFLCJ8HCPVO4Z10MTCKMYRA70XVY1AIDY3FR50CB34QBVDMG48EWP24T5ECLCJBEDB6WL9GSZ8IU1YBMBETSWLNVYLLRNQ', 105, CAST(11798.30 AS Decimal(18, 2)), N'JPMSXE5GTJSE6IAR796QRC82QJLT5UIZWL4W11Y1E89Q0OH1UT00LEA6GJ1ETCAZ0SILEDQ5A5CJ3I121JYCUIEIAXFHZK82YAP76WNG3UPG2R3YHZC9DY4IEZAHX86QX9LSSTV5WH8ZTYGJTH0Z7YPZ57T6L6JVNZIS5A6N37DVP4OGJRNG87IYKLNK0PJPYDCTFODJACV0LU90IDNUI2MGHK8KNLNENNWCSV0VD45WBHCPBM2M1P6WQVCUFTVPOHCXXX7NCSGEWQ5Z7I80J0CYGZLWI6FK8G7U5ESEFEA98SZZQDMXKV6O4EHYBA56DW6GJAUSQU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (504, N'Mr', N'0AB17KMGTI47MRK0W452IGLT6SFTE2NPDLW0OG75', N'DZOO0KULAK3QIUJQ6UX3XS4RKRQ3U5GLBMKHL08B0ZDQ2IHESOMU1Z8LVW39TQQ53IEWA155MM3XEDP19BA6IMJCDYMOWZH988NJ4L4RIH7FVA7I72ZHFKMHZ2IBFG', N'KSB', 17, CAST(3063.40 AS Decimal(18, 2)), N'4Q3POZL64JHZC9IQQXU2494WCMJGFJT7QA1Y0OSYP40MVWT60K3VWSGVL7D2G5RLP9918KP24WCZ8H0FSDFUFYBXT6CTAQHKDEXLNRYGV0QZFHM46Y92QW5QYB817WSEESMTKES1FZZF8BICK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (505, N'Mr', N'Q', N'N4UO6P5XO7JN1E4G2R3HUZ0UOM6K22TB18KA1L1S15BAVWL2VMFKBZDO4Z0KJLULE7LSTTEGQBGPNPYS13OGM802UW51LH8GAQWOAS817ZUZJO0E17', N'K7PUV', 60, CAST(8917.23 AS Decimal(18, 2)), N'MCHFUH96NBJW8Y8CLMUSJR58NQWQIMTVHZ9GWYY5KERGHIQ17WPVHROU68S3KJN0INF9OSFMOP750PQ40VIMWXDPAF9O6VK1QQYT3GCFG27SKJUHHN2P013K9QZ9IRGS55F9QW1KJ35UPL4QKS6JTV1OMDKDG2WPMENE4KQKMH6WV9UNL9OQKWZA4QMDCO4G6G7BYQM01LWBO4TDIWR7D64PEDADXD8YDPQF2JPVMOOZZOLZW9UGWW2ZBHXLF82NDYXZEEAZ7WK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (506, N'Mr', N'EOSR7OXLNL3PJPHVF5S2QVFT', N'FWEY57JYXOCV93ZFXTAI8UN8NE0J6VQ0EYSJVSRGRUBDV4KWJ93LRPAK86AQ7ZR1XCGBAGJ', N'LWGK9S63QAXPIIRNAY0NP489X1QZQFLKY', 188, CAST(11456.99 AS Decimal(18, 2)), N'I5PPRBGNJR1GMQ3KM3FDL0L1QLKIYV9ZCCH5R7T4RE4LWHCOAQC3G64HJOZ6QYPNI1498XTF9BL6W0499W88I5J580M37NETPG3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (507, N'Mrs.', N'UJCGWZ3SX65D175GHZ3AWDB6KS06NSJ8ZQC4L5RLZWLICIDXN', N'2TREJACJU30XS58ON7AOH08R29FJN9M3PYIXYV1YTQW4ZU9R4SN25UN1LZB9UTWKHX7UNAQS6CVQ44R70OEUMJXUAHCYJR40TBN2NE4T2UWTZWWH7386E2XXZCJ5YR8E8', N'AO7BOTEOXG1VAS7WXRU727M817CBPDRI72GY96817S82RXSUHUPQXU0ZOGR7BMRN4SK4FYHNZ19VYKG4EITUN0KD1G9SF0QK1LXZCNEIC2QWK5140NSSTWZ3773YPO8YBPUDNHRR4AHL9NTWF5S', 210, CAST(15219.24 AS Decimal(18, 2)), N'C2FCXXU5KXLJJPWTQG5CIZ18BP7LXSGFW9X6HVBLBDKAF2JIQK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (508, N'Mrs', N'9WCI4H75V3ZX45NWDBV', N'WTHPKLJLSRN4UEKUQFJX', N'7XR4LTR5KFTOUSLVBNHIV1OIEDUKE7J', 132, CAST(1421.93 AS Decimal(18, 2)), N'9BRBD1607P88SH5NASPCU5K15FQT96PUCP745XK5AU3V24RT9F8P1783QP6XACR00DV391IC8K101PY1NXKUYZT5G4DFRMVX23UO8OK8WWHG6821R4ADSX21KQM5N2KLO3XXVASZCBX1HCZ81COMBI541S4H1FKTCVS2A45GBB0G00J7RE3AEXA6YSW25BXXR3PLKWXX67B0HO408WPMCAFELL3H83A0D2PXBYNVG547M9OAOWT9LALA0YTGP3WAMFY7OA9U6667SCXTTB91F2G881YO10G0BBM9BG7J0Q4FAGHN1ZMDTUVKYQYM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (509, N'Mr', N'UB7IBZRTT1E3I1IMWHLVWF9OM2SFVG522MRXOT74PEBTOWE3N', N'RDP2AVYVBMIL4Z30IJNMT96AVI5L30SVA95FRMAQLPH55JQEGU8WWBRI7E7SPD', N'VFREXPRTPM7OGTRH1XKRO9W688Q7Z7RCV9SE17XMWNT9UZ2LMCIGMSVMIK5PZKTHVUT', 60, CAST(13077.54 AS Decimal(18, 2)), N'LS5P5WGPNIC4Q1OX1XRJAM2D26GG2ALIK6EXZP5K1YEHA93T6MXS632YQRMYFZMDWTJJMQYBS7IB8K3T3N9GDTBH4G782641B0KGPK6FNLZZLQQ5NTVSP6Z3I2E6JQ9M2G07ZN4IGUSSTCWEQ1K9ABB51HYN50WXBDW4QI60OCBVD6A550FH6ZBQ4U5IOHDGXUGGGRN7VJKY0FRU7SH4KERB25ZVCNB7YVYIQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (510, N'Dr', N'ZWP04F1JW87CYDWC0WAKY3AH5I3GZPOPSUH9C1IBV5XYWDGYWB', N'ATMBUUO8V8W14S05CRR48RVZYIM7CFI0', N'1CGU0YV0GNB865LMPAQ3D6VG27MBUBEZ6VJ9WOFNWV5V9XJUY6SK3PTVH0SSBJ649B2ALCQ1U37I0074OSDNJUWH1OSWWNBDP0LXV88MGRP0IBUGTN4J6ILFF', 103, CAST(14013.12 AS Decimal(18, 2)), N'PEC8MMECQO3BBWZ9VI35EBRSU77DZ4H84D33RCR5WPEBS1CF7P0FFLFDMKD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (511, N'Dr', N'HS22WM', N'X6BI8VJSLCOZAMP69V0Y8JIXNCB7HVGQWT7MPN3W7CNF7ZNWX03JI1ZDNDUVJBAQVX3HF3HMR3RVW3QOOFAGSX8UTTYCS8CV1WJAW6GTJHREA3HJN6731', N'8XJU57RUSZE99FKQ6S4VYQTB29JS66F6HAZB2MLH8OIV1JDOZFCTAJMI38RWOZ', 242, CAST(10537.34 AS Decimal(18, 2)), N'E1DM7U7YSWHJQY8PWG0TUS5941SJXPH7ZCQVBR3XUEMB8HOHCQH5KJKMW4I52N03FAKE7DD5D3ZG5T0MDB678BMFR4Z79YU6EJWYXAAZCCSHK4G23VSRHTU3N4M2D6WE8T2MX2P216UWJ5VNOW4D63OLOTASN7L6FD9Q2T505PPAYYJI9YEH1I844HX3RXETLNG6V4LU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (512, N'Mr', N'UMBLJ6JIJ3WNZZEYOT5BKR15JOU7WQSLN47VZAL', N'XYP8NM45TJRVTZKFRIZGXB5UKP', N'LK8SZF8NK6MMA8Y9JVVTQULVXNH7UVPT90WATQD8QSRNNWBA5Z70', 224, CAST(14331.19 AS Decimal(18, 2)), N'37GDEMQ9SIPS44X45LKW198AWPAHDM4DKPYBSQQU7UYEP1GIJ1QI0YPTZ5HOB8V5DB8E6MCFVQO7ATLU8RYCV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (513, N'Mr', N'FEUD29CW3TD9', N'EOM19U8ZLKNIUPDN8ME9IZ7EO4KVMSVOYAQG6IH1L0YV4Z5RKNX75GTEH8C59CCSPZKJYXHP5DNH1CAPYTBYVOJHHBZX6CS9N664FL', N'5WRZCVCY1TPGSD9BNFTIM3Y2X70C7', 179, CAST(17539.41 AS Decimal(18, 2)), N'CL04BM82IZYS0DT2CXPBNA9II5KNFJ9JARZME1AP6S7P9HT716F1MKY1BIL62LMZPEI8E6OBMZ4U3K91CCL848WPTXBVF3NL680UYKTVI3EMF3YR9KTPZEUHITFGVSVICJOVKE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (514, N'Ms.', N'AN2K62VCCLTA', N'N582RSBD5YM6F0DX1F22NXJISLEUU65', N'VNP0445BGV1APY27VJ1YHJEH62YP15U0QZY1RS955CZXHCEZZQCGA8JB97U16G9B11JP00F3AWS5KG0TOYPBSDPIFMSJX7ZP3OWGTOZZA96DFERT60D7QYINB09E8W53W31VJK00ZQ0J7C21', 2, CAST(1062.06 AS Decimal(18, 2)), N'SJQP0T9APZKMUAXLRDIC54D0Q8V9VE26UI169OTN8JQGB518FXWH12WN5QZSX0EAWDSB8QC3KV3MEWOK6MUXHL5RMD0JO0P84FKXDP0PLTX6Y9991EMA5GSB80PUPSFJ5VHZBR6HM5CONZSC4QI9EF2OM8PDZ6ZTEE02RAX984O044N97DQY954QTTC31THG5IA9YPKUS819Q1KIKG5MF0J89A9YXU8EN8VLTEAISV513VZS9UILOV05Y10OGLWY0MMI6YO65NTJUI5DAGP2CNQS7QMRDM17Z71G8HLA6BF11GAGWMDZWTLDWTBGBXSILMKM5TU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (515, N'Mr', N'0URIZE7DW6XO39BX33CJUCH4AS7QF2S02Q', N'C0OSMLRP5XUZJ6C9984PCJ4PMP96EHIYTCTEBKAFNDWQ3KZL95KM1FXTWZ6XCLBOEV56DXXPYP1ZNEL1QOW9WWXDF0ICDD3227B8FS8C7VOBE', N'ZDWUSY5594SELQE33HCDV9', 164, CAST(18812.96 AS Decimal(18, 2)), N'W17PQRF5UR82A5MOKE65Y9IWFFVNZ8HK4HXK563J0521AJBE0S4QNPFNIA9BVS5M9NXT81IDBM5T6HMW3GM73RXF191VWRO8ZFRMLI6YAQE0KMG1ND7E5YIIPIRY0MGJXWTRPZALAOXDDWVET07JKA31W9W3Q8YN9U3NTPCN2L4G155TMD4ZEXZMSRUF37V1PA4IT7K3NKHZ6M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (516, N'Mrs.', N'H4KUZ1DEH5W3SJE8IGRHODN767HYTDWMC1UTJ8', N'5HD57NO1', N'0C80XYGZY8J9J9844WQAF7LEZMF4VQOYQQVHJY76S5U61HVUUC8G5Y6TRT', 175, CAST(13417.63 AS Decimal(18, 2)), N'R43GC3Y8CUGU1VXKUP2QQ1MZFS1BUG0G6R2AZRIXQ1RNCDJ8QZM93V9QI31K2NDVU0OATML3640P9YN29TKUTRCAIBSVPXV3OWTCO8E4EI2ZVKHKGZB92I13OERHUPD89W1D4AD0EGGBODEYU7FQML15UPOAGXAP4TPZJ4F5LBUL2QEAZTNMANMNUVIEM2JH5R6VNEFPS94AQF33ADBN9NEH615NL0IJSDGAKJNKEXU1IBXESF49RW7HCOOL9R4RQLIDZSIRQQ8CTDZU4QU6W9RW6YYWV1AMS2AWTJE0XCJ0NVOYOTHJXYUGTM71TLVOFLJQ221KBU8JQR8AAZ71KRPU7T27');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (517, N'Mr', N'HGX0YEOE60TAKA9K4GCNRJEK389RRPL', N'HXSRDELBLMZWF3DMXFK118MZHU1Y85FD0', N'BJC38KKJSDQK6PJHADECIQL9II7SRK2PPXVNG1MLHX2G3R1RMGVFCHILY2LPCRR7B0U9UV08RSVKN45RGG6AOMD8EAPEGW9P5V53WSWRFNOJLXXTXT9WLHIONMUK5MRVJ6FSY2UOJEU1YTNHCV', 195, CAST(11066.58 AS Decimal(18, 2)), N'D6BHUK2BXVLSW72PBQ2EWRUDU4NVPJ90U8YNX2V66ZD3M9NKN4W30TGMCXMPW6MEMLYO9FR8UW8WEQRLG38KM5Z1RBAZF69ZDYG0AZA7CO94LJ8L619TY2SHMXWX4SSOM8JFAQAHS07XWVF73PTEXF0A6ZED2D3KWKHC0TBFRR0YVULQHPUFYDR6888BCWEFXM1BE36ADEM5F2FCENWDIOMITA3RK02UCL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (518, N'Mr', N'9390QCOTHSBX03C', N'TAM1VXMK3OF0QE0J9730Q9BT9JCN2F7LW092ZWKNFH5XJG4NXPV790OKZTSCKYHNGT4P5XJDNGK93D9SFPPDJ', N'MMC3OCHFAXCLTVT0FI4VVZLC6MHQUYD7A54862QFHNJQ6T155T8Z80LN10X2VQKCK5BNRKTCSPD7GU5D', 240, CAST(6847.57 AS Decimal(18, 2)), N'8T9CDIK1JQLR6SWXO01W8ZII30FPDBSST16I4BIUYN3R7IXYO3ETAOS9AQ8D3UN7YTX5MDSCI7YLWRAL3G0AXYI58X7D35R3ZVTEKRCBB1B3Q6DJGNANTCAZASWO5E9DGUM0YW0B3PZWNEE2KOXFU39MLT3RVN5WRYNWKCLJMZJ4DDCWEU4HGTICKZF4S9GFJ24ORHI82DTVK597G7C0JOGXGABKWGRDI4LA9O4WBWF20MRFQ8OLWFWVM68G5XBLMGCGKYXS3GPM9DXTIWTOS6H37QO3FNQDLTGJABVSAWHFP9L98FY93MTGZ88TAUCFPB1FWDI711EWO1DY4EU0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (519, N'Dr.', N'2HQC7KLX2CWQ4XNHF40G18TRRJ6Z8GK0WY', N'CWBO35482GZIHQCEH05IKSFFHMK0XV933GH8EGUD9EE49LWJF07O81FJGW7GL3B66WE084Z16R95EB5VQ0KWNKV20XRI8DR527XD7VAB16IGSA55QBQKJFJL0CZBCHSS0336DSOUQ8UH2F9QSLRXM7', N'BL1QDZ9KH765NJQ2751HEEK0V7IMD76UKIJ5IL65129DM745M58P4V5X01V6GM6A0', 167, CAST(2654.60 AS Decimal(18, 2)), N'H9Y00K131HFJ2QE86CUWR728WRXUAPVZCQ813FVSG40JYCMBZQY1Z3Y97P38N7SBMF7BHC4QH1FM7IAK5MVKQT08SYUDBM59BOXI5ATML');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (520, N'Mr', N'AY8HPHBYEGYOK4TI', N'NOBCVWZZKDP7YSYNVUAK2JL28IQPV6SIFI1FTYR9A3CZLJUTT9QDB2LSQ', N'K5ZLJMYVFB47DN2C08YHQOCM4HQ0PFWZC9MZ61LMQ8FTSTN743MXBJMVSDG2VY60F5U3026YMBRH9ITATIWLSYNTNQ7SKJQR2EE', 178, CAST(7620.20 AS Decimal(18, 2)), N'KXNB2PEJ30B8LSFYJJIQEUW5BJKSEVT8ZJ92KGW4YSJ4Y33526R94UTQ1H0J4M487381JDE2NERMAR77FFP74J44QI02GCZCNBWUU1MPSOMP26F9AS3PXW4OY4B0CBLAEFYZUCDETZFFXE2J3RSO99ER68WQPLDH2BBM8GFXEOWXHORK2SXLIW1407SMGNO7MXCL3FAMBV9KDH9IHCOXOSY696M1NTGR0OBJC5GMIA9NMHRJXA44YRITZ6CWT9ZIEIKO5P5CV1FEJBJSF23');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (521, N'Miss', N'3VATN', N'NG8UIJN6RGQIUX20AY6MGPOXWLFF', N'ZJ71WNB0R4M9J68D2K7GI1F9VEE3L0FU46B9BVO5NN1J4X8EBDOH', 248, CAST(13439.25 AS Decimal(18, 2)), N'OCS85IK5TKT9BQ84W2E74S9XC4AONJGQ5MU2PBIN5ZJB763T2EWDNW8W3VW18VI9333OW6FLJR148XP61GM8N329DXZTFHFAH9742EXWYBUWU3N55P0R9AMZ0UBY6L51CRNZPL4MJQ9C96EAAUNPHN06M7473YPC5SK3FOFKLD7J0AQUG0OCXFKOQGDHGWJK0W6HLBULE344GH6BHAR2ACEQ7VCYAX3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (522, N'Dr', N'L', N'DW8O0BA1GLTBFSE2AFTAASNM4CXSBYW37ZDJIUTMSZUDCA1XAUM6M5WL9MKNDHPHPQ4GEUKGL6IAYA9TB0IHBQH22SAVA69A9COM6KIF96KFNLMYCQBCZ85Y8', N'X4Y4X5I97EROR5DUY27W2TVZW5Y5ZS7BYO61D5DP6VF8AVDSUJCAHL449Y7S7D9F6GQ3ZCHTOHP7ENP1R5AGFXTCJ1REXLISLZ1T49SI1JM0VWQM96013TZ9M', 139, CAST(18694.30 AS Decimal(18, 2)), N'TMI3498452XUBG89A1065GANIG9QYWAHZFATY3771MX7EKERM3O9WWJDCULNZH59RGUV6FA7TS4JJ29X1I3V81K3WXH3HJ7KGXPJK7SHF3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (523, N'Mr', N'ELOLSWU68DI7MBZP', N'DLKO5FX71MMNNQI27551EG5BJKUWB06PD37XVK04IFK0CP2LUW10T7NWF85LL0W0FX9JJK7M50JYW4ZTH82EZ6W6GAHMFEJIJJLFFI19OEUSOP0A9B4CXH1913383L7RH0FDJKEZ6TQKB', N'JXL2V3YXLELVWIDSEWATHMB55RLHPSZR6RQVXYNJ1YBB0DAIOAE3ZTVWMFX4IH7TEUO4SHVF8RSJBZ5SG2SEDWSDVT9H1J1', 138, CAST(15768.11 AS Decimal(18, 2)), N'0T9LNMHEA0QWRZ8Y6PALK2VMB8IXV2RLGBV38IUXQ66NP1YJC9LR5I6XYMAF3JI794GF35POUCUEW7WA9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (524, N'Miss', N'EASULUFYOX0NUM0NTAVMDMK4HBRBB9SWLJ9N', N'IRA6D3A7K1IBDCET5373AN9MROX454RGYXKCYX73GAGDV861KDNMD8TUHNFO651FA1DGR1U8V4M06WRIIVJRH43P4PVAHIXB803TUP9JJEQ9LSOKWW6ALAY5YNC25KQD6BS6TY', N'QHX5O5Q6FYU70CLMA4NFPSGI2B8Y8DEPQ9SU2Z4ACLYE1KDJ7M6WVLTY0E3DWRY2K5HRKR', 142, CAST(18520.34 AS Decimal(18, 2)), N'LMGZFX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (525, N'Ms', N'TTQ9M3YTIER', N'SL082EU4B1AELCMPX1XU7C7DYOD2AZHRX8EOL1WR4J00V551KL', N'B0D23T2HHXPRL7HT4FUTNWRDLNWTV3LZG2VWIJQ4YXLF70CV3CDCPXWF9ZGFW8LEB', 240, CAST(19810.70 AS Decimal(18, 2)), N'Y5L7ET6NZDLKIF7JXXTNS1QP054YVQAPIB503HFIOQXUBPRJE2J1M9CXEW78P7S83W27A6FGHAZ14WDBEKKS6829Y7L796SGYORFMJ97N3KBAATIIWU5NZ2UTS82L86AHI3F5YOUAC52NQZOE3ODCNTYLWMUB7MEXAUR6DCK7ZUAUZ62TKNHJSXUP4U8BTJ3QQ5DW8H1Q45CTI4LPK1QJ4V4CZ11J48DGQJ3UT5L3MRFNK0608JRSSKMV00W6FHMVRW2Z1RWEFNWDGGRZV1BKGKN6X8TS8EN54JVNY7ZHNDD4N9EJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (526, N'Miss.', N'JT032XSQODA33NE442BDCV0H5', N'4V3GFEM9D0RTCJIGCYX4W5', N'AJBLAKOPUPAB6LA1QJQ99I5GMJ2A7QC63HPTJH1SN', 78, CAST(12865.76 AS Decimal(18, 2)), N'XBD61F69W2TX361ZR8XL40N2TX37IINT9KA3AY23PE256JK6C5W0HY4XNBC4BYQDEZNJVXPS5TVPYHWADWVDLMBBFDFYMYRQNOR6W1BEF3VO2FY5F2QF3DRROC3IHQ671519QQDCLHXIRN80E9JJ7CNAXZHKXSWOXOMXDOFOPETLF90033387MZPIQCQ8TFSK9K31AMPUUUTI1VNZHGTOOHAOXENCOGVZ015OWZTHDDCS66GVORRCL4WR9E4WYD5EYTH0PY3H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (527, N'Mr', N'RILAZXZTRGRSIMGX3GIN5YOUPG2E5OTJ', N'QNC7ITICHP4DWURYAYSIQCQOGCOS3MGYYPCT374GUOA475MMKZN54MGEXNQ64Q9U86F7HYU3UBN12MGAP273ZBUB9YVFGXC4FFV1QF4L5JBSZECB7FG1I5VXC3YJ', N'374XTV4VH2O2GRDVYRHEH4D48OVHI9HXM9FYBOQ75C9AH10XGNIAA8IZT0P40NC8KRF7CEKA0A85U3M6NX1UQ6NDRG4AZM7IZ0PQLTL1389Z0D4QDIG2LIHD31FWA9AE3P5UDWLTC0QHXNCEBEXG54', 235, CAST(5868.39 AS Decimal(18, 2)), N'CAA5IIQYROXPJEW5EEIVXI08XTCOG6PN9P9TLMRVDX7P8PFFKVBJKMQTA27O61HLY9GT43JRNMHZBB08DW3LU52MZFJIE2PBFLQY9MAHBJWY5RIY2ZAAXWQS6TU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (528, N'Mr', N'P6', N'EMWYJMNQFJAXMYG01CUMK80GAM9JYPNHLIQXEUFSOKRV64W7FXAQ3XI5LWC3SQWSC37IL7W2XZH4A6Q241EXEO0KBY5JGLS1ZDST0WB3T0ZJOG5H69YRBYEN3M7N1DMB6F4WEW18', N'HJBMJEPRUXVVA', 204, CAST(13566.20 AS Decimal(18, 2)), N'K0CKX5JPK1ZRLM9B94H8XKGFSFDJVYRFRMWA6C1Z7SD00IOBNFJ2CMR0JXSHS0TM9J0ZPY4W2H056GE9Q2VGEP25VWQ9KJ77YRQGIPLOAMZU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (529, N'Miss', N'4DDD3AWYDBJOWERJYH7STRLIULN2M7UTG6SQ', N'A4DOGWUSOC6M1P1Z4QDON2FENC9B9398P11U1ZMQCVC0', N'ACHXMQLRZG1KVCU9ZSOA191FM9WJ1R1611FIIEBPJV6UC5VI3MWIJZA7W63CVGEOMVITWBQKHYR6363HDEGFVJM2Q7MCAZU3GH8HN1LSWB0K744Q3MYG', 170, CAST(14707.73 AS Decimal(18, 2)), N'LT3IJRP4D7KGV4T7VCIAS6FPYQ1H75RQ8I92NQ1SH3LJ6ZNKSGFAGJTFEEKSP8W7GT8CVQK5BQSPKVIY2HOQQH9OPTO858396D3CRBP2V9YQQ4UJVMQ8J6HYKKM11CZ3MJI7R6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (530, N'Mr', N'5JV2QHDWEHRX9LGIDGDRVIINTC5GQ8QM1HSYCP398MG3W5D', N'P4P3W96NK18OY03NJIL3YX0O7X53NCSPEXY8J8CT2K5ZS52YI2TCRXIR41WZ42Z78J911V3B5R0DR0W1V6', N'', 58, CAST(11772.21 AS Decimal(18, 2)), N'RRMVGIJXLZ5DJIVP0W4S7ON0J9V37LNRPEYGXA0F0M12WYGKRUIAND024MB6NGQZBDO4JERPVPRKNL3LTABC2C4BEWBBYTSKV1QJ9B1D2SFXMFEJIQDD4DWZ9DQM2GQ1X6OLUKBH8YAAX6OYISS8GEFI5Q9WKFAM2D0FQTOYFV463M23OS4ANILIQ6G3AEWTOO8J697P4USLA9EIO67SB0YJSHOKCLN0YAIFEIWFKE5SQZ8HRYF473INPOROKNCJ7SMZQZ359S8WU5TS97TE5J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (531, N'Mr', N'EA2PEY7M079DBW65R4V', N'LIFXGF64HBDOZKXQ8W1WMYI60X4035V4YHEPTMTLVRMZS20TT9N5T9YM08XJ', N'S3', 154, CAST(4505.46 AS Decimal(18, 2)), N'USUPPR8UX2MLXC8QRU9UEVMTJVYEDTYDNYS7WADE0YBT7KVF1H1KWOEY515USUH3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (532, N'Dr.', N'SH6OD3J92EQ', N'60CG9QI58XM3F1VCIEXXA6UHQAOISPKOAAOQ9JJCIOLB02D729HUZL0Z6VPY1ZCJDYS5D43ZVLFLLIHOWHGJ7PPO9PKDTKAIC1Y298U', N'F3PPD9I4OQLYMUCSOJJJ1VM3W8O0D3487YV2I1HGIDISHRMNBG9J6KGMS5LIQL9WTDNDXL1H2LC9K4QXEPR0FL2MI99CGZQX3LY348QQERHL862OE', 236, CAST(8723.88 AS Decimal(18, 2)), N'9XZK0UHGVUGKSLZ0JCWSDGZJT2U4JL6G7PYMWV0MJ31UYECF6U9HLAQTYFQYZCX9NZC3NC4NB98AF4LEPFYPCOVXZ4OH42N66S6Y29RTQL5B2FDTTB9KE7WZ4F3INMI9L14NYMCFN4ZRIJVJRVNSS3SYV7UN59632WQ0BQU6ZUWA84GLKKRSZQGI95RQSP9DXWPMTU700HTY6HPRQ93LHE3CF7Q5Z3DAKICCFURPCRRIWHBSG00JMOWJSC6L410W3JEN4DBVHD8QMLFYWYPZ3UOWMSJ2O6KBQUFD3ON2O428F5X7X8P6B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (533, N'Miss', N'YI2F6173A6X4GPYBG', N'5HZD6EDND', N'30U9H7B0VOBO02UF5Y5NS6Z1LN4GDB7LYSVP2U4RS3C2EQQEQT', 78, CAST(19211.25 AS Decimal(18, 2)), N'T9UH0BT87BTX0R62U7AMAYRGGGVC5GGEZO15ILNB9GXREI550UDHWORUHE0KGG3QUEXBQ0K9KYDU001YAPCB3ZIAX6O3K3VSC7W0KUE0A3WXBWTGD29Q4SNUWNDKBH2KHT30EGBB0Z2KY0C8PIT4OKJ13WGUOTFFURF0CCNSFSROSBOD83R6NYVWA1XH0HN7KNP7LCVCU1PWTV9R83MK28RWVIQAF6SY4K35MGRV8ECM8Z3ES59XU24BVSC2MKWO9RR8R45RBQCNW4OVFBIAWU32FS9T3P9NHNDH8UMNZIM4QGFR4HNA2LRENOTZVCNL68R6MLPUBE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (534, N'Mr', N'CRALUW4EBAEYKMHLESUQYQXSHMJ27O58TR2', N'2KJSBN84WNKP6ABW9KKFFOMIEQQBHUBX0RIPZJPAT4C7DFAO2A5T2YMEY0ELXWM1BMPFSMWQUALABF4YF297PIU143QY44DWHAVQQVVGDEZSDC2JVG6VNEBTSOAOVXMPXOS1JE8J6SUAJ2O', N'3JRVX1TNT3UMKGQQ765CBUEUPTWMVWPQKA316XYN97ANYGSLO0I8LHP85X6356RWE329DOJA8H24JQV80AXUDH53LUW9RUI2FE9UEJ80G8Z3FLPE1Y3U9XIWYZOIRAIDZZO5H1TH2XE5H1NZ5I8', 37, CAST(10900.95 AS Decimal(18, 2)), N'YBZCHPM1YLVWZTJ1MSNU0N1A6ZXV2L7AC5ODUNDN1JH3ACRD2K22OK8BAO5IRQZDDLJT466ZE0TG5X0U7KTII4MSXD35HVVAK4QPSY8VD3NNQR5COBA7XHV8YRWR31HJ4IW17A29BX5EHY168QH6LNC29HQ12HSBM4I7U44D80W0CGRZPQICKBXH6USQK17T4TSCFUB4M3XKRBPSPQCCYFRA6110BET7T2WJOFKVEEQGDDPU4Z0TPVVO2H5DSBS7APRPF64A6GX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (535, N'Mr', N'', N'173OXH93Y2Y1L6LFS9VOJ1ZH7NOUK1', N'RNTIVCVFVP86QM3FWJXZ4LRBJDF', 39, CAST(19179.66 AS Decimal(18, 2)), N'PAWTC7WCDZIX67H69623MI6NLZEXVQM8XBZRKB1LEGUA7UI8PY00ETX6388CSYGNCAZV8PLX45OWGRG67XPMT4DSOB3OSGZ6XWUN00C2VX5RI7SHVMQJYQGVIF09UGN86HYKWT57KMQWYLAGJLS6PF87F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (536, N'Dr.', N'DO6ASPWOCLBNVA5HPCMUH38C26N555T', N'QZHNNUYSFFP2HG6XZ7FI96Z907LGASEJXS723JXKUHG9TYI11PPN4I0J08MG9HHM064O84TG9UNSQPF1OKEL3QEFSO1VWHBCZT9MUUTXV9D9U', N'BOC91PMB56A45', 94, CAST(15079.13 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (537, N'Dr.', N'H804NF6003508ECD0R3FF5', N'TASLRP3WI9SPWK2XJSJBSWGT7URHPUD4KKUR3BPM93BZU4Y8UXPKPJEWTZEXYL6NWN5BPBU82X2PLHY2WINR5SE05XX4WSONWN37ZMJJ3GHSHPBC0C0FYF', N'MCP7EVX82LK8O5VIZHXY36DY40ZSAQ9TUQZFMBYJY3LROT0HFN7S66AFZQ2DV5XCCRDY5GVNID00LM9A0ICMJGMNGJF', 108, CAST(9150.45 AS Decimal(18, 2)), N'5KZ38F9XL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (538, N'Mrs', N'AGT7L2', N'3856RDPCA9ETXER29Y3OPAMIGML3KS8OH5ZYUGR5D47I3WDX99QGVRTSLMQ5SMRH1QCSES7T7Y', N'9KNS59EXG2BYRJAS69', 42, CAST(14863.76 AS Decimal(18, 2)), N'98L2GJZC0KWW5JP9OHIQ9R4XOK7HDBM1Z97B0QP6GV6V28FGDYQREURI3NDVBIYOXVWWBD8YRBADK9VF5R3FKUN5HP7CCTVYXIX7CJ4ZPS03KEXUSXQKEJ438REM6WLXGBF1CO3MN4PRUJK3RDKE3AKEEUZK4HTT72M8YWI4U4XAUC8O7AUSB7U5R1NHPJH5AVKSWB5VUGKYD9K1LADUN0IZ7HGX80FANSZYRGRV5YXVMVRIHMWE5MH9CKKFU8NU09BLALA5JIOO3MCBQYFM4150APM6WB0XB3UDK58VCRUNYT6Q78PVS1QZ3ABKZ397HQCZRZRKQJAD6H1GJVYNM5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (539, N'Mr', N'J7SR5N91T95', N'K23FJ8NUA1RTPB6C8QMCRCQHCKLIH1X9WG8PH66X5RGG9WMG8FZ3LLI8CM2ZM4D84HW83GV1KO7ZV97GY4A12UOAY0DV47A0E8CRZDDRKYJ', N'DHRDDTATW4PIL10EXP7UB7', 206, CAST(4744.86 AS Decimal(18, 2)), N'ADV99UNW8HM68G6Y8G448RCSM8U034LKCL2MWPHP2N1VKBT0CXQ6I0WJ02N0ZMT4W1TMDK2JZE1LPH8AFTO6EE2COJMT1GQGTWYIH7MSU673YBTIUCL5YMQIZHYUX9HIOLRSIPT77WB76YDCQ3YPUKH76GJZ8SULOOECJ005IDY2AIB03L4UASN44KL25TZF1QIIJ1TP3S6GLFWO4JVNN0AW1A8ZEXZPEJ0KZTG2SFRIL6JPOXYMXCR1GMG9TTA5TH22EBPB3TU88SBURIAHZDR2RZ4DC68Y4LO44HAC7M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (540, N'Dr.', N'UEX74NU95E1D4CCQNU7', N'EIC3EM1IUB6ATMA', N'UY6DUZ5TH6P2EH7AZUFISQJPXR5C2ZFI54XE6GGUQB8CWZLXPF70WPJ4EHF3TTRIR6W9KS3JELSHI7SY58NNREMGKSZP0C0XJPK', 83, CAST(2602.32 AS Decimal(18, 2)), N'4HISOAMIAJT6GQZAF7BYWLW4N36P98X9CTML86G2POXFAF8E47V5VOMIKE5K4X82LJTM3E18R988NHT8USK2CSDO640U1VXSFVTQLMBQ5MDMFEV3KXPCC5PS65FZE67WBGTRN2M8GUXPFR8S8W936LF960KF6CCYFH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (541, N'Mrs.', N'X8KY7G9P3YXT9TBGD8PK', N'3ZXCE6LNXFGLRJG4ASWGN9GH6S6311YD29NK06H7XP5Y5GQBU2Z1PUFTIF6M0ILVH2IHVW34APIY4IBQ1V8Z2XO8UT1LZU6F39H2X9FYYUQZBHP03GL59LTJEAN1UI5FI3VU19SSF', N'2CCWCOLAW2M6OHXL64QCKFORTEI1LVXSM2VTVQA2T', 18, CAST(3857.63 AS Decimal(18, 2)), N'YL3FIAGVI8ZDEWNQHX3PQ0JLMH624IYAXG964HRTPPX06N5JJLU1BRKY1IS03EQZAPGYMGL06A003JFZBNIINXY5WB5MOQPAZXQH77W30UV1RKUI2TOGW8CDQA1BAYBFLP15SXS4REIS2XEBGMJV28EQLDQW5LS1JFF1JPP50KPHPJBTVQUOEGCCBAJF6VY6MH9MHDSRXEUIJX122X1FQ4M233P959Y5MIV89OBHX2Q0MUSE8HD9UIF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (542, N'Mrs.', N'SM45EMTAJDZ1J', N'176OWD41HI915HGXONLE4GPAH8MVZUOTP0KLDQDAXT0M6HXDE3L4615KIW7OQ81NUGB5WUKX9BGBG24ZA8GV9JMOU03GJPJORDSQ5SGKJNVVKU', N'JI6T0JFERFZ85NOL3Y6JO15TKML4QFTNI7V6LZDZM74HTEW85AMCW9NHDC8EYAOBMBQYRH03K6WHXN05PCZGTGQ8KET8QZ0CJSVH', 214, CAST(19447.57 AS Decimal(18, 2)), N'U6IEOJLNV01SSDLJINEMG8AB0OWOA33DD36XTDH3JXYSCFP0NA0R38QA3CJXRRESXNEP7OQ46A3I9IYKYV103BA5CVUGUJBRJ6UP10TZKVLS580LEYYVQDOLD8CBU99MZBZ3N9JY22F7QI03V82VLG15H9BSNI4BMYTT8XY4F0TOXHUV88F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (543, N'Dr.', N'LUZZNE556G74B1VD', N'FR7DIS6DATNAWQ3DJRSK39EUISWBLOR40WNOCC1WKZIXIHKTG9B3R916DDVPVURM1JA03E17QWZ3RHB083VCCOCQVHBYGB0Q7WVY7JQ273CVAXEW1UHRZF9C7J5L32RFV9WVL', N'YHNAISQC5JPC3OMB8H5KHDCORCK6KY5SIHQUB5BO0WEU3VNAE0', 76, CAST(17316.12 AS Decimal(18, 2)), N'6E1IATLDXQAJX4LSO7VYAXFKMD80EGKE2J48WAJFBK7OP9QTW260DHB8YHWWLLZG6WGEZDVENFMQQQUDMF4CAJ0L8V9FEMUQLQISSCTJ7SCYUKI7MJA6GM6NWV543FZ1KV5081K9LK5I');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (544, N'Mr', N'5NV5MFSTUGEKLYSQ5PME815LMYA', N'TODS49CGGX3EXMT8QRMJRNE4Z5CXZ10IBO1TE7BZ0Q37IO45LMI482L598TZXEGEWK39K0UJGNI0K6MA07BDIVA92VJ5DC2', N'BPX6L4YI57JS7EXTLYRZ26GJLYILWO9RJNT2LA5PDN5GH37F522CM1958DLMMDLGYR8KLV7AS1ME002HR2FTMX5IEOT8PJ301PIPVMUA', 169, CAST(11712.80 AS Decimal(18, 2)), N'1QND2TVCO9YKUWX6PFRSBDZFHYKY0KWHOGU4IQ0L4OWL7GD5M2W5DPUOR8W39WB4DHVE2TOYF5ONGE81KFBXNQ3YM6C9UWC7CS7PKZ2TEXQ7177D0UJUKEGMDXSWGE4ITGAO6IHLCIJP0VXEYZ9ZDIMYCKCN76DZT7EKXJ6HDXI2VRLHZDXG554BTBCL5UD54KWTHCHFTRLFZK3KYUNT8WUN33RL7KBJKCYAUS0NWINDJOB98RMB6JW8Q8PEKV88G2VNMSQ6T0XQ8G4FRIDGX0C0FPKM3M2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (545, N'Miss', N'RE5YUDOIZF66TYQLKIFD6B9Z63IAI5RUII', N'AOAXLVKLSZOLJKL3MJYQ33V0AT7PHO63KXQVWOO5MPKJ6OPHAGJTDCI6T9NR', N'SJKFU58A4UJXSU0MP6W2ZL', 109, CAST(1085.26 AS Decimal(18, 2)), N'9FXGSNNF0GH5M5Z94AM2HSAFPV8W7426YWHTJNM3UXFGI7E9QBHT0ZIH5HRXFR8WEB7PO6PGNI8KDTXIHY6VM96ZDZN2WPO3PI27ZPKKL15IRY4CK8GGKCA458BPINKXT4UUQPJSEMAK4O7FVBHN97ID7Y2RDV1YG7OM39LUPN2Y2Q0G0WT65WNMLHNSNSEIKB3WZLBLQNXL5KBHXLQH1VSJJ20MMT6X9JEQM4HFL8FHZ2G165U21XHOIJCXKOZXH0CL5KVT3BVTFAKHLZGGY4WB2P72SKUW8I0YPVWLA1YQ1N87ZUBL8IYD40IGDS1JGZKXAMRP3U5X56AFGZ3X89');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (546, N'Mr', N'ZEM4E1MQ77187U1', N'U44TL0MUP7XUT3DJCUL4PF04CQ8EJ2M1WHSLGPLN2NK9MYJ94NG', N'YLCAHDL485ZTDK3JJKYKPJ39UH25GX8V7AMTIUQXIPARS1N2MMDH00KEI2GZABX3L2X91PU11Z9BGTU0JTJRU6Q7AFDQM20ZUPFK4CLONZZK57', 104, CAST(9382.44 AS Decimal(18, 2)), N'QJNUPDF8HZE913BXC2LHEC17YP3ZDP3B6BUDMR2CNMOXQW8B52QVMS9DHGWZAGVRW22Q8XALZ9USO3G1HRUBZ8PE1HV6U326QW1NTI37R4VCXHOEZUIIMK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (547, N'Mr', N'5IW5F', N'1NXF3ZHUS7ANKWYCAS2N8Y12URID6ZAWM6Z9JCHH8QVVCXOQ06YCKS73LVKBG3OTXE1EWOTYALFH26PX3SD0', N'M49XUR69EBQZLB3EYY9GRDAW67V4V7622TRMD567OG18ED0CKL0LVRU8UDQ', 240, CAST(9776.65 AS Decimal(18, 2)), N'ODOOR14QW6N1S2S7YNMJUCCGKSH7ZKJK64DA5UB5NEY5AGWB6NJVZ0XB074YJWQCN3UOPI24CG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (548, N'Mr', N'6SQVE0TNBOA9Q6YD0CJL2R4UAFH9LCLD9U8UDINLWJW', N'XBTYVNNR50421XYW9TBD02YDP1F5N8OQNSZ28F11564LAF08Q1TY1M0VCF9U8I4XCEE9YWNURA7TYD3A06EMEPP0R3PS67SN269W0RAUDZ6QF7XZCYU13HIMPDIU6VNKHKQR36A8WK8FIYLJ6Q', N'W1D75NWRKH1TS2RBC1IT7IJA6K6BZIRZEJBM2U2QG8S3J7TTZIWSVXF', 98, CAST(8970.54 AS Decimal(18, 2)), N'GD663W61C1OK6619YQDMQNMI6L7LNKFJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (549, N'Mr', N'XY3VXSHKLU3FOVLYJJ2Z2X0WX40IPXO', N'8CRKKNM7M8FOIBM9VG5V5NL5J833RRYOFEF7QZ63GZN0HVQ3WOQ30UBKRM1CKIGU9Q83WEJVA2E50LNN', N'H30KGKR2P1E9Q59IYRCZQGQZRDCHLY4H4X4YTI9WGQDHSK2U9DT3KGN1D0T37AGQXX4S0AOGIGIZ3876AI7750WOA3LTO', 166, CAST(6723.21 AS Decimal(18, 2)), N'3HXU001DVDAZJOHO93EYU6SRO0HOKDRM512P3FXPB9U9BJNXQXEH0KOXO650ICSILOTHLSKT5OMLBJF5CKYNYALKC51X9X7ZHBNMP5BYDKBCX3L4R0NYE4KB385GQNJ8HN4ZVSF6809DZ8M8JW6998LCRCJGZV7Q13V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (550, N'Mrs.', N'UQXCCLCTU1REQT5HXO2CHXB0', N'0721VOK2UG4YTJYJSQRMN6I5USXG6K6YDUKBDTE1O11XEXGJGM7UW0UTOW62Q4WA95KZYM5ZBPYL', N'O69NKUFATYPCL4XNX4TMTP28LW1GIWPVSCRBPCRZP9ISFRQM6HZ1CZ311OTZSW9TK8CMXHGHVTZTPSG9QVQ7VRZS7OE0IR7SZP86F3OO1I5JZAB87K9W51YS9JE9', 205, CAST(10167.72 AS Decimal(18, 2)), N'ZL9YKGQDU6BULXWUHAY82R7I9Z7CTJCWDC8YM7PSI7HL0OU2ZC9R5M87DQPL9DJBUFH9OX79K5QUAMHK44DHALRR30KWI4J4O6QL7KD14Z6ZVEXQ84G40209OP6NDBRGLM64VWDJQBCAERVP3TNDNE3L5HWHEQOT8QD98TVCRWEPQQUXUHKJODS7IKZEZV40NJ1NDLGAYAMQ0EVFMZMX544VY6RNTGCVRD17O7J909LDR174PJR097');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (551, N'Mr', N'7X', N'KQXCEZKCB2DZRMGMCBJ4QN9DGKTG7J628O468PC4CYY37070OCZEEHEWHKVT635SVAQ3IADMYFSSP65GDTRUJSNR97OOTIY8T67W94IEYDFZPL7BEFGCCA83MYTALPSGH', N'FY3L7T0KATM726DLGTWD5TXIBMXQFXVPFMLJ1YRHAOWQNP3VK7TQHVWM1LAKV95CYWSFLTKI1F3HW7VLJ267457JPYIGN7L0IKSQWN9RNBO2SFQTPO1S3X8TP8QMA4UUU2ZBF5PVTEKT', 122, CAST(18386.74 AS Decimal(18, 2)), N'IE6P7UTGHYQZMCOQFFDXVJR3XYMXAPBMKIJSHHBF7T3E02KS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (552, N'Dr.', N'RZVN5KKXY', N'ZJY969BDV5CO2N0D9E1LWIX49AA7S9LYH5MNC5971YE3QXW598FDFVNGMUZVY3LMKD6X', N'4RA7OQY5SWLBZ0OXMGIGT8PGEEKZ6ZPCFCKHGEMDVP16D0G40X6X1CNW2UT95ZZT78WMF6H7U5K47I2E', 124, CAST(19599.66 AS Decimal(18, 2)), N'SCKVAZZM2S97V6SM3E4TV9X3XQ2GC3UDUWHCRQAJJ5EP27BMARWNFZ6JEGYKWI9ZXVDZPFVD4L9PV80PEF6L67YVPXYASQM0WER7UCXUWJJUQHO5F85GCOTQXH9RHLKEY8TGHTV1HBOMN3589TUKK5N7K1AD25DBZ5VHN7OMD3Z1Z72TC1INQ0TTKLVFIHZCYDNI8NK2587G6M7DZH01NPKYB2X2B84V4M3MJJKPGGIISDMXEIG0HXO8SO76QIQW3CBJJKUFWAK7725YFZNTR3D6YUTUCEZYPLEG12ETN147DG1PI8QQVX40Y5LORZ2HBMILOOWCKT5QZ6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (553, N'Mr', N'MX79416L54YIK0VC1WFXE4OI1U639688IO2547', N'D045UKY4UDCE5YJT7JMI61I6D9XCSICRZ3W7B8KBPBSGNHS41SCUKEVBHYSLMLCB0KE12CIZYATU92JVGTBZ5I6K8KPDGZP3ZGF22Q2PADWAL02FFW4T9C5IEUTIM5IYLPVSMGTPQLPSMVZ8H', N'GY8S', 173, CAST(10518.94 AS Decimal(18, 2)), N'HT3B3O83SHDIWHQ2OYMVQYG1UBD61RE0SB3VNNZS2JP4A60VURHRCA2JD2HRB2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (554, N'Mr', N'9TC1SV8EU', N'XJVVUMAWN8XK34UXOW59SY3E2ONDWIUK0B7Y3PV8HPTKS6HKXO7227HZGGT5YX04DCKRXVUZ1WS24IMW62G8BRISU7IMWP9KPO6FMQN1U71', N'A2PNFLLC8WP7Z54TOUGY3WRIPJSFAP0Q0FY', 97, CAST(8286.98 AS Decimal(18, 2)), N'02DPKEVE0ZTT78BQNAIB99MOI8JHL57HZHP1XHGHZDGSJHVA1BUGTRSQFP7BUDSUSBTPJAS5U0CWTU40C9GABQO8PYL894MMLMZ7N6RRIOMSFWXLK6YLXHJ2NK0LOKVPDPA6VXD6HPRM3WTS00O361O33XJ2562YSWEPLRPMTR38QWYRR7LNVSJC073XDA1BMTT7H478B19EYGC6ZSBXLE20D2ODNS8IQSLW2R9MZCCTI5EKUXYLY3Q7QTUFGULJTRN5VF38IOY828H7O4IQTNJN2D69XU65QT0RH8OETQ2A5H5HCMQBBUP5703H9UBNHSH88PPFF3X2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (555, N'Dr.', N'SJOI1UH8P7', N'FEUXUWYWGRSLURXPD72BM7CFC7AGEFE3QBCFDKSZQD3YWKKUTYNM5QJ71ELNMII1DOVIFHBSF3K94EJRMFNFRRYZS5EYZ5C8V2K7P1FBMU725A3MUT07V29MQVQ93', N'XRRVMHWOEZJWA5R4STNDB6YWT61J', 90, CAST(11409.38 AS Decimal(18, 2)), N'9HL8OWA4VUW3UKH575ZFFSDZX9MWAW7XNLXIH8LX0JMYL4D58A7YYM4G4MBEAETYMZG9MZNYJ1FW6EDSWHO0P8Z0GGDVX6NMPOBMN3I9M8FW78AP8IISPT8DZGT5LS0CET6H3Q5SZFDGT2S76NMFOUW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (556, N'Dr', N'U2CZWQ0WYP7T35323VNSFBAGMKPHUKWFZIFQ', N'T9QCE2UC2K0BTXKWUI2R3545DSSYHTB5891XBTV0SIRF7J9C1T177C9N4KYLAVV89U2JVMK0M1YLEOYTJFWNS3XWZETRUA', N'Z6K7AVW2KCM023P0V4', 248, CAST(9074.25 AS Decimal(18, 2)), N'FYM6ACNU72IE1SMHDPTAFSJXNLZX6LNJWA254Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (557, N'Mr', N'2W48IW2LPKCXSEC2FUJRVCC0I1DSSTKQC10ZIJWE7VXZDJ15JC', N'WMJ6CGPHF80L6DO8FM41UZ7F5W6KHTT5BA2YVIM', N'YVY7RKHQTV1FFDTFSZPZ9U27H1D838WY1WKZ0ZSMT437JX6M9OX065V3TRQP79NLZ3DJSTET6265RUOJVQYFBVRW1H5992FKGH7FJNUG93U3ZQCY36TGA894BHIBN4J3', 20, CAST(14028.45 AS Decimal(18, 2)), N'MRJ8RKE6D041Z1LGMEPIPCQOMEYHQQHDF76JWJSC9FMW1KOHAUFQFFSA1VMCLWFNJRMRV2J2LC9AQTM2QG6WARYZFVH1XGQDZYDAXXM8BC526IJ78KM5PJDSSMBZKI54LVARFC4SUYKXLVTXBASDULNGLLHALMNS70HA7SRWFTAQYF6W');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (558, N'Mr', N'NVY4PK4PGJ9SVZLLQDDKWY', N'UYHESIRJA5D4Q9WXE31FA40MFU9VBPDX0R6WITNN5NABFOF2E4KRG63QYVZX8V7KRF4Y2ZFLFE9MUO6QF7H65LHTOGYMTQF', N'MO9N8Z8WI570OWB46638ZA883324IS4JQHD13BU6LKR323NK76GYGUMB', 213, CAST(13277.96 AS Decimal(18, 2)), N'ENAQSAZ8T5UUT77BRQLEJPJIVX1BWI6FKI6YC2FQH2EMX1ML2F6PLI9P4SUV8OBBZFAB19');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (559, N'Mr', N'KZECNZ079F9WVDWAFDTFVX220RYBS6SOPPE5B7HQGB0', N'FPK0JGZEPYC2WGW9O9I0E0F5YBAM1SRPYZ74466Y82H69EW8JOXK8EVE9E185CCX6N3X8R5I2JSBJ8WJE22DU7GK3SUQ4YSVPJZMBZZSJFHP', N'1J5X3DP1NA6J91VCWNFI560FHXCB63VU1L1SO8H611ESG1X4LMJ77TAUJPG51DUKFCHNZ2NO59H3R7YG07Q', 27, CAST(3252.70 AS Decimal(18, 2)), N'PBVXHBWKUAG8H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (560, N'Mr', N'L2Q7T2X62IAMXCCV1OF2ML75ZRZ7W3YK', N'KV1IHT39Z2Z6JTGWFE4QWMZ898F3ATFPRXJXT8N4PMPG0GR5IV40DYQY', N'JOM8A69YSB4N6TD4J94JYV1YC72BR05UNA0QP9DTTPVU4TWYUUWQ27LNMOW33X7S69', 232, CAST(16051.47 AS Decimal(18, 2)), N'GU29HUJ8JHTR3NHRBKTGHEPKRE77ZKSFTZIL82JEEGRD3Q7923ZVF0U24HH2MB9ZODX45WI80E21NBH16Y5WKX0T4FHQKHS26RPQS346KQV0YTFS0FWN6DFRD3ZPFSNJMZUVMQ82UZBT10VA0OQ5K4VTCYDP3EQS2BEYZJ696TT71LPD8PPQ1IYH30JODJYF8JQQLWBGIGYQBOSQ80GEP0QKCWUY0HWNVDZIUZRBD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (561, N'Mr', N'PGX0', N'S88D0Y5N9ELAJ37RZ1A', N'', 204, CAST(6588.60 AS Decimal(18, 2)), N'7KJ86F8SFD2KP7S6DP1CG0KBVXO9W9841HS604PFQ71IKBNRPOL1A0S6Z8C8QYW64YI8FM68ZML8Z2RKAXK8N7U0PL6RRHPSBVDMSEC3HD1NFJ7XHSYTENIX3IJTGEHIXTX3O4SVKHQA56L5D8AZIVENCGI9VIM3VJQLL48C038WX8RWXDG73I01FAQ7MI02UMEMFZK90YYEMHP4OLCH2F0DIP6AD0PH362BU5HXT775JLEXKMJ15IZEL03QT9VZ8GBGEE9J4FOV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (562, N'Dr', N'HP9ML7FS8YVM', N'I8TGAKFPEBS7L11', N'SME9WBP9Z7TIB4HX', 6, CAST(2653.04 AS Decimal(18, 2)), N'UUWA8QRHOCK6NPT1Q4JB8X2AYI6CZWQU46R66FKJ3HJ4Q9QPGHDB4J0XRMCPJEISMQ1GYMUBKZ8QEYKOSHVHJEPL6TFK2U0OZRHZ89QUN2R5B9JS1OX1I0871GA4798PZJRNGKGIQ1UHNK9XAMJEWY6YIAYRZMMDT15SHVCG8FBH6RKH6CTKQTT1DT56MOI4EGNMEHFEA26GMOSQQHLMS2N084FOQ5UJX72P4Y2OXE9NMCEO1EG53VBCTNDA2QO48NJFM2MSEWPDSZD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (563, N'Mr', N'SVYQZVL823PAYJP', N'EQ', N'FRGPC41DAPVH3NVT057FMTQHCOFVDRZGAORHJ6GIDWMMTRVJYOAZ9HHL1YCOP5ZIQF7FWDATPP1Q74OKSVWOHZ7S75GKTRT7W4WEKGNKEHAKGQDWASWT9B1Q8E7QWQZXVTT37A0', 212, CAST(6714.21 AS Decimal(18, 2)), N'QRNCPPF1VPVHKSM6Q5EZTY1YSOQ76XKT9IKB3CFJ7HKX7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (564, N'Mr', N'7VFUA7QT000P6J1', N'NJTQ15VZSX9EXF1CJFR3GJG9YLEPH27C8CNCPIRAELMS4XV', N'8BAZPMCGSK91VZYL35559WOOHCOMXAO0RKLX111L2RYCGY2VU8024U2CNLICXPJIV99AE1J24J2HXB7JATSOAMVXI89FIPOD7GG6OR', 3, CAST(2305.33 AS Decimal(18, 2)), N'8M9IMNLD2RPPJ1Y8VX52718A3EPVSBE4QNG4XNBW8VGSLDSEKYMMR5W6DZF8XPLQCLYVLUB7M8TCLFPPMBBTOSCLQ9QY82ZI9PFZFXTPNFZIBKLY9PMMES2K9C4B4DYJ9B2VZPAPIL58STA6OSOIGC4GNVQ2SHKAGG90IPYKFX3SNTSF2YNCPG2W6L74Y7W01VSCKANYT33J8BTU2A0TU8L0DCTXITM703RR0GVRBOILDJNVRD2N726TASZ7GQG0HVJ5K2TMF8I5PZMTOY54RY0XXYH8HNAK8I4H0IBPKG8YJ03A5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (565, N'Dr.', N'AE6OYZG1FIEMJBMNP302GREK45PZVV1I2', N'JPHJMN833JSFR5HPPX5KSPN1NUXO40QM', N'TPYXKSKEBDY14XU88DCS5R3JFVOAHU1VICYZBPB4XUX1JNKGD88SBZA1LEIO3AXGC3JRYUWJ27UBT1ZR', 200, CAST(10507.65 AS Decimal(18, 2)), N'IILB9IVL8LKK4RYYW7V5T6NFJBP1DWU63B4RZW8LMEAP4ZBH0L3WF0BCV5SYTT7BRDHSM6Y0Y9IEWXAJZ81STYR20SWT4ASS7YXQIIUUM3X5HWGXU8YKSFITMESU94VOHQ7X0K1HE65P0LL3BYZWC7ZRG443P0KH89NQOJXA6G6MAST0TPIB5ZBARGGVGXRDMNHQXUES0PPV1DHOB3A0H8C9XDZ821U9PSZNB23YAPAG9G9EZRKCNQWDA8SKV6PZVF58DUD80BQSYWZH4L9BGHMYWMC39J34ZBLTA005EB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (566, N'Dr', N'0KD1Q8EDERS49ODC02IYVI0LKT9H6KHV', N'SLNQL4K95PCJ83W27RBZT2FW5YD6EFRP4ZP416KG8GHBBXFR0LX9FNCQ5RKNQDUQYME9ES007UQDK3K8IM5THIAHNYYAMWPULQDPJ6D8LW1KWY526C54718FCWLFT', N'8W8M8JI1XEX6M1NXHPG4SIICOP35Z7JFQDUDOT3K0Q1GZDG67ECCJNJQEWYIFD1PVHG8698NLV41H2CA9XXKU6W3T4ZRUL4MOBKHX7', 7, CAST(2813.46 AS Decimal(18, 2)), N'B03FE8BF9WEIDT6CRHAZH8MSNB564L4W54AYS6YUX3T7LS7Z3O8N4CV3DBR235BOSHD9J8JKJF2DEE6U352GCGSS87LGFVRRS4F3FYGV4N4OAIOY4XZX3UCBOK0CN25NOAK9Z3F5P6BOC4IQIMBIWUOXS3EVY381IHZ0XFY1HT7WJNZK19U0RNRULNGWOK7LYA6U5IS2NA02MSE43UTO97AUP4EAY2DXMM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (567, N'Mr', N'6B2AODSO3CMR0W0MIUY03H', N'EA4WRTQVPB9X7LGPKOSW3ARLMKIXCMKXFUIQF06C', N'', 147, CAST(15119.94 AS Decimal(18, 2)), N'9H4EJHRDHNO8S8CSTQJB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (568, N'Mrs', N'JRHXYX7UAWK3DA2BPQAS6DUJX', N'BMTVATNZMBXMWM3JJ97BSI2QBID3Q9KHGKSNXQCRUYQANAI8E7WRZ0JSJ3JRGK8CRF5CUFLTWGHUSS20Z4OIDTIG0Z3U6LBAPDJ', N'5PRNJI9', 143, CAST(7638.45 AS Decimal(18, 2)), N'ZB403I4LW3GZU5NZGA6IUT71WL1M9J63A695ZDFZNSKK88Y3OTDGCTW6433HGHBDWCPNVHZ2U7U19NSONYXG6PQH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (569, N'Dr', N'VNPIVTII7GTQWHCVFSNBGJ99TOB6XX0P2J4R', N'46DYM3UJJPZR0IRBVQZXWPBUCRMB464F9UWTRPW9YZXA0CUNU0EZDLBFVIMUGJECLKI5MYJ6TPYXS0U0WZG4S41OJHY821TFKKPGTO1WG86OMDNUOMXH2', N'JN9IFHUOLCF19HS0RHC5HVD1XZF5F8KBVN77BM77GVVKSXOOWQW153UO97KF1P9DS36L9LO4A4OLZT9ZAQ8OBI5STIX41R5RMISOR', 213, CAST(1882.40 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (570, N'Dr.', N'4EKRJ49WJWO0Y44LJ668LMZICLAF4OCCKUBE3JWE0D9SM5YTV', N'KGIUL5ZA3RVJD7BE68YKNKYD16T3KG3CDA08XZ2VW54ES20FJ9GPIHM0H5SFBWPNNJ6262H652OHFKKY6EKBZETVO0QR7NKZGGQ9WX9GS9KG', N'EB2RR0E8PGYK5AGL19XDRQOK2JZXZG1K77CWLJR5DKTG5GLVA1HIREBNNIP81G98FEDYYJZHHSZ7X7ELX3NXZITTVO93UJ3XBL1R3NWQ201YE4QG33AXTB9WLJ29AVMYO2VC5NH9', 70, CAST(4733.83 AS Decimal(18, 2)), N'31WAXJ5H7NVJA76UBM4ZVXHAFUHJV66L8DSG3SXOPK1ZX5CQQMV3LIE5KLU21LM0G9BXFQQIPG9AVHDAIRT8B3ZQYMWHXUM3Y1INUFB0VCE584A27KKASDOD9LYSU8LUT6CTYQG3FSDZOUHUCTAD9CALD5D9GI6MQJB1SG3H4HUZ0OOF34G0Y7LHVQFTD6MXMQ95IG1VQS9RHBLPGX6B25OIYU511A4XVWD9FJWM2KA5YUZK5QCF0AVG1Q7N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (571, N'Dr', N'ICYJFIE1FYUTSVKBF4TQI09R88C7V6NGJZ5ZE1FSZ14Y', N'4KXLT8XBEN9PBE6BPZHIO1ZTB294', N'WVZHUFQYT0R963ZB45KKNG6D3AB8EAFL0QWFAFR3BBHUVPIZW01HXOJGPLDJ4IJJK68F6J0OEG8CYBIESBCD8XNC7GQO17ZTRX9OG2TCZC3GF6HD3ZRS55ANI', 67, CAST(5267.17 AS Decimal(18, 2)), N'0UFOBWKXBAX0J9HVIJ3VLVAXPWK1W7OC9C1QUHNXEMUFFEH1DLJ63SO5JIYEBJ13LLR67R00W6GY0VIAFJOAOI9GNW6CI8MVLRUTMATMLIAWBQ4OZOZSVRE3CBJAKOHNKLD90ON4P1P57C4XSICU8T0TDQHBRJ1W0MCQCVNA0V3T18VZ7LH2BNEQLJWA7CC50S4LZDLXU1UDP6S4VH451ZKD7M4SZD3NIYS8390T0K79S11ERREP86318R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (572, N'Mr', N'6LE8AQT05LI37A65758BD', N'IQUD2JGT6DEMO1SHJLI342A2X42L4ARZS7VXFC8VPIIM2V006CRGR1ZGFRFXGVOWLFUG6V17CMDLJNZ232ESIA8Q7FHNWBEUUM0N1KTBAK44ODWRSDUEGWEA738QDEB18IRXN', N'7PTBN6GFL11TXPIZ', 153, CAST(16202.83 AS Decimal(18, 2)), N'D8SYHY6VRDJ0LHA5GRAL6KQ07YEFBUR0CVNK7MQBL5908RT8X1N9X57SISQIKRKXLJNPTQYU1ZZ0BPSF45H97I27NU1FV7RULBEO43E73S7Y67HTZBDEAAQ3GG1ZOIZU85FZA3B1RA6EA40GD8FKTCJBLB8N1FIKTDQ1RHIVZCN03BSBGLLG2E0VL4DZVNZBRMLXEYOVPKKJ79JW7G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (573, N'Ms.', N'SPKXDP0QGWB61MXZLGTGDDNW7R8MRVVN7WTON', N'1J83HY642UJPVIG0EX8QGXB3XW92V5LY4GCB5CEG330E7NISK84UPXV3755LO48X8KLE65U1ISMCXXWADGHN0R97L8306TRZU25M2', N'WU6W0YDL2G7NLNM6KU3JNPW00LGBA2196RDTBZ7QFQLQ9RZDFMCUFFQ7X6VEI2BZEYHT9TVLNC3X46R9M2VNQ7TQ16V', 35, CAST(3102.70 AS Decimal(18, 2)), N'2HECUGN4J0BDC8HQVXHWQQIUK72W4GYGIHP47KKI1R6J92CAPJNZQK3BZJS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (574, N'Mrs.', N'C4ZF5LS08K78KRHWVE2OQMHDYK0NZ4T9', N'LFD3BWAI6A9V78MLXGBDTX1UUP1MIURA88U29XGCW22TRBMJD95OAOBODJ8LVO0CIZMYDJC00YGRV83J3H98O2ZKX6PPPUH81QASON6TX5OC7KT4IDFSNFZ216UMA5H8P', N'4S8DELBAA54MRR63BS3RFLSF6N974QS3XQGU3QIIUGZGY9WY0QE834PI0S7QB36JD0O0ACZL9KWYMBGWRA7DBJZT0YTAIS6R9F3XLVONQTZI7QVOCBZ0WS7T1U0BIO2HD5', 84, CAST(1052.28 AS Decimal(18, 2)), N'DQZ32VVUJDJADYUYKYLHUR6LSZPXDD5NSX4AR2HD7IRCZDLSQ5R0YASMJEB25XG57WIGTJ7HH79C0ULEDX78M4OH4IRCRE891M43V5Y6YAJR0FMPTWP7Q7I370BBSU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (575, N'Mr', N'74PGY8146INEJB45A1EMYMPMMGKL414QY', N'YBUFBFAJENCDDK90C3T93USMMZZBUIUZUO65T210H31CQNS9DATDEG13I8TCFZPVSCIPD3692TRZTFVY6PXJPHKEM3ML8PKHE6JD43W94KBLO193CV5P256BR42AHL0C89', N'68IBWMJNIKHM924Y7S5UH7AWQVD51QH411PGT03EC5P8J8', 160, CAST(4762.57 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (576, N'Mr', N'CMSFW', N'NVIT3TNF45ZPKTJ8DKUF8Z8L00LSIJZDEGM7U12WEP15SEHGYDNSDUCNNWT27', N'8DQVO7A7YYMK09ELS3CK7DO57PRICI1DH44RBUSW', 35, CAST(13991.68 AS Decimal(18, 2)), N'2Y0AEPHJ8Z1ABLWGPW1JVP1JT31WUTND4LGT0480BCH8OX6HBJMERATDXGGANLOEBN6Q43FKO17I8SUWWKLB78MTR3VKNXDQO2W1RGC7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (577, N'Dr.', N'0KJ4TYF9WHO3ENDLF2UIOGZ5DWGNYHDV48LE2KTN1A', N'WL6MB46CDCIY1JX3', N'UQI6F25XJX56OIUPKNZGSVGW92W4NAXAGTDN5Y', 63, CAST(2378.17 AS Decimal(18, 2)), N'2QP2B54MKE30D731DZ07VWROHU5VT5G7D74HWQFYQY3IAPAVTZEGBZ86Z1LHZ8SEYVM62L4MJ2HWS8ERJ92URZVEYYIV4YYH5OKE34S8URW9IBDRNUXQ6YNY087339HL3ZR3NZOEGUZ02LWNLQ8A08B71MEUXP4L9B6IK94N6I9CZNVECKIC07KVOJ20LTHRPDQRFD2BML4IYZ8EQZID6SK1RAU0731C1HMLW4YZH7PF32WOBN9MB4LXTOZ4I13JKRGHCMIM0IVZ25YPE5PKTE0XWOS74UGG36VBLFBP5NMS9MVOPAQDBJP5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (578, N'Mr', N'NC0CBIR7QKEHJLER', N'LJ4T5W7ZK4YJX7ZOISGZ63D9MZA9FS', N'NLKSKW6TM91Q7TFYYALXC51A80UQU57JL', 220, CAST(5055.30 AS Decimal(18, 2)), N'JKOTAH62EVV9N3ZT0E6S8NAT4HU334KHPK2UNVV5FQUQZE27RJB5JDIVAUPSN2Y9BEK30465J0CHTJUQFMCKTFX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (579, N'Mr', N'IRBF', N'PK48J22RPZMR07SG4I9JQH3MI5V7', N'CV72V038AVLJQH0VED', 33, CAST(18435.08 AS Decimal(18, 2)), N'17KT52HDRKELUY6MD6LI012Q0ZD1PEGWG72TKCZGJZP858VGFQ7NTFBZ5UT6PGND4I4MWD1064Z1BTLR3WLZ7T31W2OQJTR2BC3M49J2O6FAOB922SUO5AF2QUPBHCCWPYPYMTCJA0CELMDCHHRZ8N7T71JPCCP4CJKPLAF8FBD5Y0G3GCU0KDO2RWQLAN6YA7221NR61IJWA2V6KF90IPJYVHYPKUYS5EUQY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (580, N'Dr', N'TZ61ZIV97HDSBSDK4569NAPQ2TOTW59Z9JI16AJ9BGDW4', N'LXJRA9ZTZGLG1RZJCD2TJ5R5928GIPD7UL323ZPYTN51N3PQ425SSENG5DH80IA92ELFOXGCO30V0PH6DHCGKLEGYMWPIGXACVY9H926LT3PERGFVBUI6UPHZ5H10', N'1FHKAJK1FZH1H5BHKQWEKU4V5OPADQZQUZKGUBXIAZN9TT3EE0G4IY06BLELUAOPZ', 137, CAST(11428.25 AS Decimal(18, 2)), N'1SLOY2TRSO1J0UE5GLO37JP2M7KRRV8486DGETRH43P9N0T3EZY82U6I3J2QH2ZWGWBTHXRMU6Y4UFELDGCSWZ2D0VDVR0Z13TTRP0MG8CEVW2NN4GD0Q70GTXTLKVUT6W00MNWDUVKKL7HX7PQBNZBWSCXR60WCHKPZ2N1HJZ6UNFVMGWEU4J67L479P57UY720IIVKN8RNSH8DGBAA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (581, N'Mr', N'9LDCDL45GJ9F', N'U75PJ4Q8O4F5UQHP276HT6LE3H6HACR06UYWJ', N'7IKUM8TD3K7U2CLBVC9V8VZD58XBO0BX92LKTJD', 89, CAST(4089.10 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (582, N'Mrs', N'5', N'7BONMQ310YZ93AUJXNLQM1Y9XCCEYZSL5DZUS5KVB2H7I09H6', N'A4VFZGI10JEBF4ICJ7PDBHP299K0R0HBY2K3ZKEPQVB5LZH5K81MU0VTFS5QVIA012DDKFCZS0NG5KHARFGIYVHY6QN7EOT7LA3IM4L4W2TUCFNVBUYG2R2', 137, CAST(16897.86 AS Decimal(18, 2)), N'27XDHEXFSSDSBVFDU4Y0T7WRJE3VUTDVW7W04N04X5VGEUHLT0L6C9TVB6U2A2KZEIV4YF873T3OBGDOXH2U76INE1OYSXTVLW1VZCNERE3I64JVT65S0PS708PXQ9E5Z8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (583, N'Dr', N'2D17DJSAC', N'XAAS26DFPAEO216D3PB0RR3QFJKQRW3V8B2HBCBSGCFAGMZF04XJ55', N'LE6TR5K46FVUGYOMUBMW2NLR2SWKPD5T8YX7XRDQHONXKSFC5BLQ552XTFQZ9ZETA1LH0HO2YVEE0O79CJEEREN3W0DI1DHH9UNI6XCOMJSAROX57GMPL01VEIL0361K', 38, CAST(7842.98 AS Decimal(18, 2)), N'FEIOLUN3S3ZH9IT5MS1UV4TVRMPNIZXIX14GBHKXCMZ30RGEW4SDYD6BKMXY50LT6HJ7EDU584I95PU06BRD7JKKUTVOJLSC15XI780IAM5UVX5VRXST87MMXZCLI5MMB58ZSCSXA83LEPOXN0WLTY3TJAL8WF04ZIIQO62F5UJ04187AEXI90SD1EGHQJ1U7YLV6Y9HXGGYE3PI2EXHHIUZP5O9QLPLTOS5FC0C5GKTKUYYPXECMKCP3M51AZRBQV5PAJ2QDLB1X1EV7PKS6DZ9C32T6Z26P82PO8N5VOY08BR27ATKFY5DVVD7H9JEI5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (584, N'Mr', N'ULXY6WTMAK3FJRNV33ZRRBDG93COQ8', N'57KDILMNT6IGQZP2', N'W461P2F6PR8MDC738BKRSW8SR3OCCLGH8WUJQ3ID7JV9S906DWUUGSL0WD9LE3U4AQDGHOC4T6K90Z0I2HYFQL0GBUNDUW', 216, CAST(5540.00 AS Decimal(18, 2)), N'PZP6Z2EXIEY00CZMW5IRQ3OTTUM4KH3022I3TI01MZXVDUHMN80EKLBWD5LPBDUGXZAX4SB0QPGPVXGL6ZHBGPGGRLPOWBQ94HXEKKIVW0NU4L0FOZJBWJZ7JT5I2N3FY7KE021MGLEG1LC5LAZWREDLHPVQE0S9X8VX1MFMXWVA4J6XH0XSN6NKUYXA6B8GT5ISPF4ZUCZVJ2HYJX8E3ZLQLB22O5FMOFGZ0D82WXYA7R0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (585, N'Miss.', N'B1YJ0779NGSNLQMT9JIFPAKNI8', N'DIJEBT9SJ4QMZJP2FW9QZT7TOM3Y69GA165NMH', N'3OQY', 187, CAST(13385.47 AS Decimal(18, 2)), N'HYQ92UCTJS7DC1AOWC64LIX5P6I51BJTABLQF6KU2NF86UPUN9DUKW5Z0KKVB7S88D21GK9QSC2Y2PZUH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (586, N'Dr', N'O3K4W23RDL8NOWTCBYNRQN9257S', N'EAKYHW1TNTDA2FBRKBPPPQBMAN', N'VKOPKP198CZWCQIX4EEPPX5N0YAW7GKA0ZMIS9V0JR7YUQ13D1Z9C9BYE1OLF52RRPWD4Z4VJD5YP6SAX6I5HAXRNN4RK9KEPG65UNZDX3QY4C979EO9MWAHR5PGVDAATQ99ZNGA648EKZMB', 30, CAST(4905.80 AS Decimal(18, 2)), N'IRXO8E5LPULOIUU7ZTROE30N28U7XBLPEOO1AK4OVUUE54U74UQ63S8EQAM0KYOD9V9T5SWFO3TK8MIXEM32LFMMFAB0Y33X5G59U01BXBH0ZO64ROMXVLSU9N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (587, N'Miss.', N'0GA0SQI63BW', N'KTE2GX3VGEUQXNTF4SYEVQFKCWS4OZYNTHG09RXDZKVDQKS1VA6UC9KUDTPK4Y7GG6WG7S6DVLFAU1UR3R8ES3', N'WI6KBSS6PDOXJIKSF5D207LXE2HNVXSIE1YV4QHYG2A9RCNMNL4U88EOW868A5ASL6IHJPOPNFLXXC61FVZ9SY96N', 63, CAST(18204.95 AS Decimal(18, 2)), N'VHVHLZVERG83DLR4AYMNQ3689H52JOAZ7L5T1TV13AENJK8C3HIWN0NSBM73TSU369WSFX3G2LJJPO8TY26EC6XDIFMR7AFBH9OGW5E2U2G73SWIV0TSXRWPU2FNTAD81C1F0SWTO3KAPQ9QI3W7GNEPDYLUQQ8JO86QQHI2303T7LZ4TP5PD5RDXB21722YV0MHKIZ0LU3GJLI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (588, N'Dr', N'IY871VUJVY9OVGQ1THZOA', N'KWLMF1C80DEXJNCT23TZRT9ZCYYHDPTNCVCJM6QCICEXF4B3QX5AZ4JQNLAH2VUBKRLNBT7WCGGEFCJ7NVQFJIO7BMW0V99NI3COJNS', N'YVJ9NBSINKT52YXF6TMHRJ24SE50ZNWCUAQS5ERA5FPL89T1BDRGJ5IFTFG96RI0NHBS759R1CCCUGWJL3OMVGSORBZQYI3DXOYQY1T63ZF7T', 231, CAST(11924.27 AS Decimal(18, 2)), N'YH01KI6IGSTEEGV1X5X7ZIKAP44J2BUCTA2P11EDU30RPKM4Z1IEOBSGXPBFDNG5YGL4D50VQJDWHS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (589, N'Mr', N'RXA8VXDN9Z229RE219D9V27M4BZHCLB7A7', N'Q9YJO5AA22U7', N'KDJXN22V47PM0W5JTI8YE5I5KK9IIV1LULQM61V1B1KQ1B0X0K6WYVRFUDC3SJC863RF5JCSN7MDKR48JCHYP4NYTARSOS8ROBKXJKRG7D9Q9EU394JG2EJ2GTLU', 197, CAST(19491.58 AS Decimal(18, 2)), N'4IZK0SFNIHMSBQZZ6NUT8ZHQT1MN4YWY446WE2FDIT2MRCP5RK69NZD418QZ5RJKLNO7J2L47HBFXVZGCHWKRMB5Q1V5CG8Q9I04OIMOY225NY7599MOUYSYBIGH7FRQ9K5FUUSUU8L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (590, N'Mr', N'BWS0W58P9MS6YNRGQA1FPPO3JXVBNOUS1K2588G3N', N'FR23DBOX7026TWCZUNZ2TPAJ4J6CLXSF2I2CAL6B3ZI8VCV8YA7FV4BPGIYU5CC98N4ATZP9HNZT62NSOYDAQDKX7CWRNB6QN8087KEYLXX75HJDV567Z1JU363G3XL5G8', N'K4UZVO976OZK0RBUXPFGNIK8RPASHHQY', 41, CAST(11105.40 AS Decimal(18, 2)), N'K5HSUPW2TJVAP1S615GJACW3SSBEHSTMD2E50NNIJPWPOUPS1MSPS1F88E01DHL1Q9XNNM5EIX0LF7EY3ICV03UBN5WMNL414VY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (591, N'Miss', N'Y0C41UK4LX9RHL8OGZAX1LR04DKL7HUY', N'X2EL3JEPSGCSPTIWI5ZRMP550HXVNCRRWBLAGK2NKBQEQEDNK030HGJ8W9KMLJ1LWE87GX2B7AYREM3AAN8R9FRCE6ZG10AAP5IZECK5Y599A5UYJA9E8XBGMV', N'OM9EQEPLV2FKW', 75, CAST(2050.67 AS Decimal(18, 2)), N'X25EGD7U1US1Z1YV4P0NELZIPIRWTZGK9Y10DXENV0ASCVMLM9WEUA1B2MOXLB02D8R00XH6BCREB76UW69K22QYXPYQ8G1KZ7F43LKPRP3HIM0VGU1F1GZAIT3AZQYUB7E3R1QALKSDZ8FAP3AEFMJJ84MAI9Q0R86B8W3E3RTMB9ESLVGJEPOVVNFGRBURLQ1');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (592, N'Mrs.', N'CRNREW1QI2X', N'9YLA70O1843WX22S46I28B1XQ', N'M78J36E41KM75EHPPX0NC42F6BQVSF4OVONK9XNSIKLPSI8A46DHK8PI5TCRFJCLFYBGQWGRA75RJDMN3GRL2M4NZ5FGKWDZ8Z9U6RJ7PL7C3XYR6POZSQISTOHLGZ7DU6JJ3RGBWJWHFRK17O', 145, CAST(15872.50 AS Decimal(18, 2)), N'2TZVAOS2ULTCWQOUK7UHND0GZNZHMW0K7AQSVK9QWL0AT3K1NZ7EWKSJWNOAGYL84LZWYZY3K1CQMW2XUMPMNNT1ZBOM1M42OLYY1Q08GT0EC1X0KQGU8YKHSYWNAB1XWA10X4W3LH6UMEPYDO2B6ATP0H63UDX4R2H1ZW2FUC8RSQUD9Y9L9QRLHB0FYT98J22JWNYGMMGT21XAMSTV4BU1AWKNWMH1208QNAGM0SZNAYJFEQT5ZE3871902AKZ5FQ2T6NBB7VCB7RCC586TB1OW0JL1GJP70HU7GL83HUSIRW0AWNW1E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (593, N'Dr.', N'A3GXKSHTQBC9C0N9ZX42AZ5', N'W2SU1DIIA7CV19L3LTFEBB64694TLXXOJG3L9E', N'V7D6HHH0IAYRPETIWEFOE8D39U1D24FDSPB6GZ12MRY1XR63L8NNSZVMUAXNF3XDUKYZ2N1XCC1NAC5HOXSUHRLSUPB61DMITK6CT61X6PBFX', 16, CAST(12611.05 AS Decimal(18, 2)), N'UD26TN1AVN64BPW4WJ03CG8543IA5SMNTVNG5ASL16Z5CNKAERRD1BSD4W1P4Q520IAF1FZLQF15H3THI7WD09MI2AB992GA1W4TC59YS6MM9NV13K6XUR2QWSDR3QCNYQ3KYZ4DYYLUMZ8FEA5PWJGAUEXJRHU1UYNIJA24FSYV684WJXCTKNRFATQK2KMG3J0OCPW38193KK3M900T41H7788QKH1U6HRN7GKU19LIDOUPP4A1KSB21TH4G5JQZFX3SGETF5SVGYTJDJ0F609E5PLEYGDVPUIXQRW8QG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (594, N'Dr', N'KX1386II', N'QDERUG959G5P7HCEKWNNS8PXCAOBL50T7RP0XJBOW4VCF8P661JPMQAHOHFKSXJ3GCIGSBH1KZQODCI4LH4KMA7GH7CG4RVZKRV3P8EVJI5M0L3BYAYASZH641ZKZ1WS3R3LGEEC3903', N'CI4GZHB3W3Y55DCVVYPJTP5SNHWUORG6VLCS2LE47QN3EN0NLBTCPEFMDBSHKGE5MSAJ0JSAKKC212E0G99CX3GG6QFRSXJQBIGLCHN1IJS41CKAWR0', 224, CAST(8693.39 AS Decimal(18, 2)), N'EZGM2ZYQW54KZ5IX3UZUZSW6LFWSMNRPPEUEP2JF0PGQL9JR8USEQMMM390M2539DEULB471BKTAB5LCW4JSVDY3S8AG1WCVL7D6FXG3MQ36SBBXOOQYMBDZGRT3TQ0F7YO4SEWYO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (595, N'Mr', N'GUA3ONOD', N'KGV30HTSK6K9PYN9TVILCJ8IIUKWM7JZD1KL4GZK20ILICRFQ39DHIS07DL5XX6DMLWNE24CWYIC1NZ5345IX5HV9JDRUTN5T5YXF41OYXHJZGZKDF2SSNFH40EUODH2BD', N'727IBUCA31IM1MRJLSOZL7TEBCEU55U0W7I9BXAI4CXH053FK1O330QZ8S7YFH4Y6IQT3H7OI6U8ACE58Y94GRWVHJ1IPB2N8YBI', 130, CAST(16013.73 AS Decimal(18, 2)), N'54ASBGXCRC6E8ATDQO4DAVQNZTN659RR9558POFD6GYN8SPDAEN8UB6AEMSISQ7IKE435KN28R6TW2E63AWQLJWYZVT3VXKG9G3UNM8PRL034CDC7MEITGW1I63AQK7B6QJGZKIG16Z0ITTNHHV8I2MSK1BHJYY6EPWDSXDM4YGMHVJODFS9OYS44RVX81W38');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (596, N'Dr', N'11EEEE9RRLYU8AYMDMREKJSUEV5C6BAFP6X3F5IMTHF', N'WO2QY2GK0OXVTKSDERUC5PHSEQ70LFE8MX3WBP3QB3ES65K9V02AG0D669B8UGYL9O9VHW1P', N'AC3T0LX6HPVE2PG70IFLUBJGPY6370B1VQYM6BF6ZP0U53NLMF7FVXKYTM31ETYGDUJBRU0P29L5APALBKHSTV5', 13, CAST(2204.59 AS Decimal(18, 2)), N'MTXGUK494JLZAPIN436PIFWS811FD21DEP9PRWL75FU8I5G6ELXSXJ97W57SIOV1I8KLGSW7IY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (597, N'Ms.', N'KZ8', N'411APM95X4KC4RLKWP2EUVU4SIHVPSZYDMCZBVHM13XCE95WO', N'6ZSK7DR', 2, CAST(13733.36 AS Decimal(18, 2)), N'3LN93KV0S58GVF1TMPSOGJSQAKUQMPPAYZ6M8V37MN3V9SP6EZ9HPA3KSXYIQ5E2FYIW8FLQLK1SFWHIVOBNF8KNVMTBXLHH91GA9SXYEJV58A4VGGM1TRN7DU0MMAT02KJEG682QD9VCFFLIXUGYFNIE8XF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (598, N'Mrs.', N'CGB0XZKI8KZJ9WKGAJ52CU', N'L6ZAT86WH64EF55MYHFM808FDQYIQJDK6D7SY2S3SEDBHMNR6RBOH22KYKX2AO5YSK71YDOVOBTUMWXQ36BZ8P34BMTE5QS39FIXFLT', N'RKHAKBUREIDMCEN3BIQTB5NHPK5R1GIOHEEQ801ZQQDAIILRBO8ONYULWZLZ63PX0O5X0XVBHR2LRCZ7ZEFC7T1IJST8F1TN0FAUCOQETW7VV9TK0D0RNDP6MND', 74, CAST(16010.78 AS Decimal(18, 2)), N'BC3QV2OQQF97KBGHRVXFE3OFC2NW1088S9E155HDQUSIL8D460MDZ0E7NODSFRPP61FAWF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (599, N'Miss', N'735K33UAFML0PZ9IPLFUV5ZCXWZM0T67H93WSFGE', N'2FZ588Y1M7Z4D5Q3H2QBJ9QYJ', N'3MWFXFLB14VAN0JBL5NAZ98101ZNP37PAIB60RXFNHIVIP4MTEKGZ38UEUFWGYLXX504PCAT77MIQCJAWCTBJQP7AHS5C1ZPVLYCPZXG4R9SGQ31B4Z34A', 220, CAST(2205.14 AS Decimal(18, 2)), N'LDJOKB5T3OIP1DV8RV7DGROYZ52BKT38RN0ZFCTVHV93W1NCBSNEP2WUPLPE9U9AKAYECVTF2BVLHK1XHPZR6PIPQ69UNFMNLZJM39ZFZ8CD6BC4JSXJUH4VR9N6MYRMP7ZH1FT7QKSXC5IFT5AVH2T3VNUUMTT0GPOZBV24YPTAP6IMQ7CGNW5MEWMEKZLWQSHNGJ4Y36WR9JEP483EGDCJJ1KE8NJY4W');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (600, N'Mr', N'AKWOVVG01FGXZC14SM7489LGDJGWDPA', N'K7D0BHCHWSPXW3OSSXQOP3PFGCVHASP1MHNRNMW', N'6GTT7K4H67XM5E6LXFC6RHXQKDQU81WLK6SWW6PWZ92KJ3YN4I2OR4MPI29UUA84BC2YMAPQPG7IEC7GE3PPZ8TGJ', 103, CAST(18271.81 AS Decimal(18, 2)), N'WOV573EDHZDDVHX9CW6FCFY3FYPPFNXMCZH092VB20VJ5NPWBE62YG6HQRQ9EOXU1R1W0W090VDCKEXR9SE1GVNVS09ICMWE21IEMSWFDX233UWCTYZMAWD6353ZMIXEYZ9JWJ5GVZNJSKSY3XOEMA36NBBHPX');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (601, N'Mrs', N'0GKL2O20JLZEPAHX2R0S9A51YGACEKNB4BWIRF13J6LM', N'RW9XDJ6MNQHS7U1HHYJYMV633OBEGX4519WTUR1W68UJBWTRG59P2XVWP5UP8R6QMCQYY7NQWMSD', N'DUWV1O1Y96100UTBYBX4A6USFQLI53JLEJXUUUEIHG30FE2VWN9HIFS7Z4FB3IS5NFLHXYH4WFNT2TD0NPMHT12ZQPVPE3EYNXDZTLXX65L3RY46RFNDVABMCLQ73RPT0O64GD62SO', 208, CAST(14262.51 AS Decimal(18, 2)), N'VZO54KDGASJQB8UEJC5VOUIRNV3VK8ORY6SJ4EODQHDL3KSXTXS4J131HWI9GIV24RS4GB94O');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (602, N'Mrs', N'7Q21ITLPHVQBJNMDQLZYO9DDY6MQW93PJRRP7', N'MS6UJYAOE33D03OXCOF14XZ6VT8HISF5IV3CNUPSW178MLX4YTKYCBWPT0ZPPS5MNYV40C9HYM52PQJ9V4JP7GS6ZDIMUZ23WLLOQT4MJ30Q6UZ3HPTL9GE65O5MTMMYJ1645UJ2ZW54G2Z5EF5', N'OFZ7SLOYZF02CMQM8VQUEGR32SZQD8LL7ZN6DDXLETPD0MTIPQY71UX8OW40MYLQUEVDYJ9UX4FLQE2GYG0M9EKC2FIH8XZG7YJMQF', 98, CAST(3138.20 AS Decimal(18, 2)), N'57GXO2252NFK8X3Q27WFX8LBHBSOHHNNGSVVLK8F6BF8MKJV1P9288UXL4FCADOKZS3G175HZG8LSDOXSX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (603, N'Mr', N'WQ1LNG677SFPTKMOKYCO2C6VS8S1SRWW5FP', N'6GUF6EI1NHSWG165NUYM5QLCAAP3P07DHHS26QYQCIFI49NFVUHKHIZFUI5VOFCN9EEZ93YWV7ANB380MA8UINWYHC8OL21X6R8PUO6RVKO98C4R949D6H4MIGHWV9BT', N'5H49WFCH9TO15XYHFUIBJ1RLZ5YDRUGPIWU554NXQX8OKWUI9H3S7414QJARGYQFD', 135, CAST(8088.13 AS Decimal(18, 2)), N'R8LF7XXAG4V5TMU8UG3TTJR2R0857GHKDQXBECWI3XPD3BFZX5UHP3T7HIO6OS20MBR2PITIJKQWUDYFL972L0U9XPTWNPTAUPQSJD9EBCX4DWD4J8LFL0EMGI40O');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (604, N'Miss', N'W3MX7RYUA7FI2U7SDI7JJ6SEO5FFWIJEUDRHBF', N'DHJVJ6Y4GZYZMQ58GFHTNQONL6E69WL9V3UUKVQYA9QI6MWPCOEUUZINSW9CSRVKDO4IVANLOJJEZ6HYAOUKHQFWL72OLD6ID64HIDU10T5BG3NLEA23XA2M98XO7', N'I83TCB', 97, CAST(2989.38 AS Decimal(18, 2)), N'UUQF15N6W8ZSQ93QW0CPCF4E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (605, N'Dr.', N'BDCLLT9YXK3JM75OQA882CIYRN', N'Z', N'LLLS303BG39ROIEVPFLUWHR6TAMDLFG5RLMJFCMI6GZUHNOG4DDEQHA4TEYSEQP1N3Z2VVFDS2OFHWP5L69711FAAIP0DU4GQY7DOMK9YZLNTUMXPT68GIZLOOS', 138, CAST(5900.55 AS Decimal(18, 2)), N'UA3C189PEH3DXV7GDCCFS95JQM3NYLEPCQ6UJUUZP2BR0CY549Y3RYWL5KLF4MQT3D07OCWJHCPQXDJDNYJPMBXEULPZ8FV3BIOMBQHRCF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (606, N'Miss.', N'OP3PHY1W67L7KF6HVSZW6OO1736FYUDTXSL9TULLLBZH53NTV', N'D01T1ZGXUTJOL4FIJH9AA2L23I8AF6T1TUXF2UJFU594QE14SF4QQP0AFYPJR5HNZIUQ60FOXTF5THBOG3I012A3TN035ZNPOL48KA', N'5E0YX7PJPCGZL091FRHFVSBJNWZ7YLO0T63JZNPL537DC6MG9Y5X6CHD3GA18HK4NG5EXQ2S1WASKX7G9JY0FRTHPPFIDO', 219, CAST(3183.91 AS Decimal(18, 2)), N'F85NR18R6216RFMD3NXA1HLEEPW1XGRC6QI5OXXXZNO0ABX6PDE4F4JXMR8256UPBP01XGP5Q0BDSL43RPCK2NW26KJWPUSSTZPLBV98O8DFT551N5BFUAMOSXUCXSGV7IKTVJRWG3V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (607, N'Mr', N'N5RQUZ0', N'RZFTW', N'OI3QW08JIVDV92OT69TRPIKPVMOP7AKEDKLAG7BF1ZF51WKF0V98JWM5XEV9CIB7AZIPGECYYDPP2FNY28PB1CVGXGC2C13JO7', 90, CAST(17496.96 AS Decimal(18, 2)), N'9H80FH9JJCYJC1SE0XBWSH7BLB53EFZRESEAOUWFIWCVK0GUQDVJSZ1R9XF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (608, N'Mr', N'IDRMXBUR9STXN06EBVO7V3GCJ47717XM9RC8TYDOMDTUZY7', N'VHXM13OMGLX7QWIZCJX6PH7D3454Q0M8EUY52H3WZ37Z60TEFSNVWQJDAKIXXJVFZOTWYDWUF06MA763ARPYDQCOAKVIY6ZG7R0I6WF2VSFVJX', N'2EUZLJA957X3IQW73TZ6Y32', 89, CAST(10466.66 AS Decimal(18, 2)), N'B654D65JMHP60VEW5CRKUBD1JGZERM0RFS3BR8HDVX78OOIWL4MX6U90T4KX7QRZGXR8R25WVDOX34DVX2TNZ3KKI3IMOK5558RQX94JZQ2T5CXOROZ4X40DD6QOJI7B7JSVCMXNY9N91RF66TVZK1708ECRJGZHIRLLK1B4RC6NHQBLRJHPM8Q6BRNY963HA6QA6TL4HR88UKJH2RZ0Y9UA0EASEDUK8ODAZ1FXXD8VZICR85VI63J0CGASJTP4WOZ578H1B22L1ZBH1JK8HBD45CYJQNE4N3YBI6JZOU741XZC4SQ08');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (609, N'Mr', N'YDFZAS6EXF2T4MQ2V7', N'2EFM5UW28C5MDHEW90QFI7OWECM3KBG4DGT3JKULAPR51A1LGW6UTILUQI8T7THXV09XNACO644TGIU3A1NO4LAVVZD0C0EH7TA104X5JIOPDRD8N4J55TS9PE1OXBB5PMLM7T', N'01AMXA61UKLK793SQ2P90DUCFU0PO1WYB', 187, CAST(4524.40 AS Decimal(18, 2)), N'MKAVZVAXAONXYX0ZYVZKKM4938DLFYXEV6HD0N6OPQKJG4Z1B4UU0OWZG1SRHOICQ91RGNZBOAUT2LSY8C9A32D79HXZVF6188S737KO5I6PT2XU8TI5E88OVTIZQ0G93TLTTLV1RL4LWND7K2Q1W1MZ03B9PLX52WL0G31NXHDT3NS8FAEO9EC2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (610, N'Mr', N'VOYLCH0KI9LCLWJ8', N'54H4MXLH3L5C8H8BE00BM28876IZR5R0U1E1OO6B4XY2SY3OHA7L7IG2V9WGFLQXU5I637NPUO6P45G82TIGY5SCLB5FSQWJ608MGXKAMHRIBQXPSNDL29ZOC6LR18X4SNI4XTS588', N'ZK8OCV0W8X4CZTQ6FVETRM7Y72AHCTON84AJJ2QT834X73U6ZIM0JIACCAH9LJKE8G3UJ7MC5KKOH9Q384IU7N4QTX69LG8PJPOQ0ZMRV9VYYMU3JD1H0Q7KCD0L0DQPBV4SL038HQY', 56, CAST(17417.70 AS Decimal(18, 2)), N'LTPAMB6NZIZ1DQH133ENTVDB3TE69VNKJTU9BDB57544S62JXN6BXFDPGD6SXZE3VFIKW7PQR9FNR8JXRV9MPBM4F4TX6I88R19DNINPXGJOZQY8U912PRDJTE4RERJ906WPY5987JO9SX4P6K3XG6JZNQJ9DWB6WANST99OZTU524QW9FLTOMSUNW18LZVA8ICI9CVXBEXNBDXJZN0YBHHAHT4X703ZXJXJR8MWJOHAP5IAZI8YZXZQ120F7YPBAXQRGDRR13EN06KCBUYOR40ZK6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (611, N'Miss', N'RYBGLXADVKK0NRZS', N'GEA0UEGM4CAGX0KAABT8EKNQO8T', N'S5S733P8ER', 186, CAST(7696.08 AS Decimal(18, 2)), N'P77PLY6ZSFQTLQHWWJCQUHO4CZ0J5XQ79V2JUDSOT7SWK0DYA73G7FN7J2CMXMTVPIJPOY2IQNXNPRJCM29XT90U7UZR16R6DX71GNAB5LPJI0IRI0ZVDV1FIPHTYBHKWQ9RJIVZSYS8JGB7C8806WTHVSJQ5GCT34NSQQ70502F2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (612, N'Mr', N'BYZS2H98N4B3HWKD1AXW7AQO7GXGKVIMKALK', N'ZV8CUGJ925RDLMTRI6L3CIHTFZEWRK', N'TI4ENY0RHJ5M2I2IJ9TZARAR7LTIXNIAK6A9HMG9HZGEMIP', 50, CAST(9973.15 AS Decimal(18, 2)), N'V1EAGQ2GD0XRWRY4UBLZ4ETIHL08V6TDF1WICVZMQMRNVYUF206RT3PH7VT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (613, N'Ms.', N'VPG18XSYAEN0MLH1W208BLLJTNSMOI6BZ46LGU', N'LKNN93XMHHA85KFNSQV7INPGGDFWU1MIIT5SXZJOKJ4M2AC80CM5WCTYV76VN0SFUSQCFMPT66NYI3E516WHEGM6Z6XQSO0JROR', N'1K6YKRD27C615ITU0U2W7S1XTKIBAW5OV5HCGJQSS824FE4', 181, CAST(14842.88 AS Decimal(18, 2)), N'QUL76JCUVGSYBZ8HN6NIRK6U02JBBFAG14VW1JGBMZKM87FU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (614, N'Mr', N'D', N'K0TENTYPOVFST0UG4A1D5JD8OY0I637UB4L0DIULIXH3Q5XRTJFGND30MLPOSFILNLFT3MGFV829HJ18PMOR7X0KERS6T2EVF5O8C0FT07I', N'5MDRF', 141, CAST(11824.46 AS Decimal(18, 2)), N'8T17A35OR63Z0IG5BX73BF3QBWS0JLTNPG3L98R1Q8ACCCLG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (615, N'Dr.', N'PW', N'XD45NJQVXWEJOUFCT9MT', N'G8J95092SB7I6Z1GDH493ZQWIEGJ5', 144, CAST(12962.37 AS Decimal(18, 2)), N'GXA7RJSPBWEB445DGAJFVV255D35RDZBBX3NJFYXBWYCDQL34ZW1118LV41DFNYXW2Z71HU0CM3YXPSFRZ0RHX9AOHSEDKHOX0FARD2N5VPEX9N5CMMGM6GZTOIJPFMS4F0WAIODWDML8VDFTN2RX11RKGH2UJXP8XAH8RVTX8J9JUQXB3P1CUU3E9BT0MJDFXDBKV72S8UPHS7QPJQRUVCD262YF1SBP6TMHFDGWM9305LM1L4HVRJJKZ8ES8MQGJZBYL896AV7M9DXLGWUWBFXMA2I7YNO0INH5AOGCUBLWCXBLATBBST532OOIQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (616, N'Mr', N'AFX90LO8KCXA3W8K459S7C0HFWK23N9LOJ9DQJL3UYQM7VH', N'6TBVSWP7VRZF5M0NNJ9BIYJ', N'ID82O8T7EPIQGQXX84XP8WN6PHINRQKPW4SU93BSN62FQDJZYK', 67, CAST(9690.75 AS Decimal(18, 2)), N'7M763LWSBSGH2ZU1ACQWW5BC8PID3LZXLS4YP5UPPIHJVAR590EBRU51BUYE3JPPSIWAVVB4I17ENSHXXC327O5RM2NV7GM5SSQCEHADP9TQNQDIC0GQFNI4C4NS8GX1E1MV14JG2QCYVF4WO4I6ZVQ59M09UH49BRBL4IH7H0OOAK8X0Q44XR2IAGLF49MKL3M43IS6NAOZ71VPD383D0BJOTBNW237E436X4TIYXGM22B8LW100I6KR3FA749L7GL3YOS89Q4FKPGMH210037VXJETPJBTOVFMH8AX4SQAEQ02MTS429K39Q5F9YJQFARO9U49S');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (617, N'Mr', N'LE8SF4VXFFU40M4X2BMKNU', N'4KHK3ZQLP0RJS9UM1O25E3J8FP6QCHB8AJ', N'BMGFMP2D7P55TTBY3O5S422T7FCXJO6J83646P32HPEAXJ71UW1JHECTHN1A6GA4WPDMRZHFO1KCEXHSPIT9IPM2CCMIOTW0FAD85K9VFMUFTZFK58KNM0M', 218, CAST(14810.06 AS Decimal(18, 2)), N'V7CXG7IC7WQ6REBBCR2VO590U3YCSSOJCYDCRC9XWXQMZ8JCDYHD7WGQYC2D86JF87US1YK0I4ZQFN0MJMYUABBFINEE9VPPEBESERBEDHV2XPAACGUM7O4WVEADK5QMF9C3988SAKHTG9HSC32T12HP6HWZGXT7Q8NOD71371BM7BGMWI1H3XKCRMXRB8BDR937MTF51YLZRUIU0A2YWB4SOAWQ9ARZQYVX89Z33VG4BLLW32R15DHF5AJBWOVR6M9SZLMRAZV0VZH2PZN7IQTCHGSYQN6E0OXOBSXIGZQ6IGJ5SGMX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (618, N'Mr', N'LJ6X8LE', N'8E43V1DQ4VGUDOM9TWDD1095ETZ97OI98IM8XL', N'2BAFDYRU5JX4K8N59YUVU68CX1CF98EEN65T9TIGUZA92A0WLFEO6QCW2YHBMCLW5IGD3TVFGD1VVZ9M1GTUUP7WU9QBB6UIEE3KTMTSJY8TPG03OV95IQ1G', 247, CAST(2174.20 AS Decimal(18, 2)), N'N8GTWBJTO1MTG072SRX24RJZNU0WM5919CCGHVFHEOSY3C1GC30PPUWWPG61AM6IRLK3NQKWBFOGZKVATJJJ5KCEGGR0PD6RI97ISXTLI3D96GW4LV8Q3ND686N7ZK7Y9WXQDDIVQX01737ZJMFU5UV19LAMMYWF0AI6R7CCZ5MCY5YNND4CSS83UB3WL4B25S3XHDU7HSGJ8J24NMY8TJM71FBF4GQVTK662169IWVZCOUA9Y9Z538L5VV12F312LQNCW2LFPQWNMUCK0656RPQCL065473TUXRY6XDWNJGCBXI1IG18XUAWZBRVWFAHN3TP3DD2T8I7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (619, N'Dr', N'KE0GPEH5KNBYAOH38UTJV9XXRKN896NC15AP', N'40DECYUS2P7ICW6P75ZP224JFD6LU1EC8P9COLW6J0WJZ66D2TE2YV42VTZZR8X0AV9NMU1L8S515LJ96TJ1NBECK7GUMXFA3V83WIR8RTU5P3WAAQSYPVDZHX', N'KJT2J49JIHHVOSFM1AWHE7D9NMGXO0NCNA93ZQ0UY97ZI802UJHF5YVC5KFWNCVHT48EJCMBA1I50DQFME34J87PEXXFB36MEP6E0LJHX55', 67, CAST(8919.86 AS Decimal(18, 2)), N'D0NI4NO6UW0MVZV6H089YP84TX43YFOB3NMB4DRSMBS7T28EIWB8AY9NSIP6IL8F7OJ7CJ149FMNX1BQPPK13G14DZJMOKA13DZ4J02YV6YVBMQQ7YHS06BQNETD0FGP5KJJ166ONL5WH5SR8SFP3H0W28H57PYGQ9PR36P0SS5F0E9HL248ZRMOKMHSP1HYMP67G1O23EWACLVOZ0J5KQGZN16GPWBRB6SB710JD24LUBCYRTTPHBDW97KFU8C635Z5TKGXZ0RH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (620, N'Mr', N'', N'ED7YBDVX9CFCO2A9TH8MHB6KW4GK7I9MZGCVKUJSU5MYUD4WEMKH8AL36M26WAQR2TD8PFPYXFSBO8PI0K5LYSDPU8OXSCWKFVV00W6ZXLJTHAFYXJ6C45SAFNDHRR6LJ7WSCOI3D6O', N'FQCRUZA98QYKXJZMF706VWQA7CF1VL7D339OK5KBTWDNRLHHLW2P5Y8JZ2KIK8ENJKHT9B19MODYI3JLVYFYIH75VQPIK2QKIP464N7AVS3GK90WIZNMTG41CCXJMJPJYSGSYDG', 170, CAST(6601.85 AS Decimal(18, 2)), N'V4CP8PW3M9ZTV20HLO5PXIPC756CVQHJWBE27PMJG3GVZCXHGGDBMSNCFZI2IJ7WSFWKOX9W2M8U1TDV8PWEC6X3O1M87J1XVK3JFDTI6H8ZJTBMMNUSNTJMITWNB1OILBYHQUFUVD7VXXK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (621, N'Mr', N'EIL52XBWJW22ODSUEAH3P5Q9WD0ZX5ER42FAYP70LV', N'8K7JTP085JGA2LLCIP75EY9AEMM812YXGF2VGUN1QXFZRLPQ35LOYIY9AX572S73LITNJPWO16FHJ9ISWV4VH9YYHSKJOGY', N'Q53PERKLQSZLF3R2K3TSQOOB3KIST7Y5IFVNDFNLRBTTJ33U0E7UJOH2HRMU9RSIUU3Z83O5G80EVURZGNRFZ3LTYT6LSSC0JAYO03MWP2EBO37MZNDL0CJR', 194, CAST(4608.51 AS Decimal(18, 2)), N'P0MKO8A20G1LH675SPE8VUWR70X9LNOK81XAE4UD0VG9TUDP623');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (622, N'Ms.', N'Q67I9J6QZ7VG9RC9OWCYEIAYMXIWO3HHT502PVQFQEFK8L6ILG', N'PCE8S27D', N'91EW3DNV0ULV2YC1UQXO95VMKL5FQ07Q7FR270LORFO9MQWO1K5LM2Z36SCH7850MUON6ATU48XUHM0TOHD6UL44GNWFN4GIAOMR29HRQAHD54MJ', 166, CAST(4195.66 AS Decimal(18, 2)), N'JBZV4UDOA0HDSGCF9WROV17ZEMYDM82JKG0X116JQ520E2HCHXFAAECI40HHVZ22YYSBGFD7P7XPY7LB5MWOSR854IS1KPOQ3Z1GA5W1J8L3HMJXE5B83DA6PM6XNCM0J6MY5510QU4J64OIYVMFDFNPPVQNYYD7MKKAZKR94BI89QZLYOYSP7M4JX9AED1SHWXMKEIE3DA1WEFZV5OAZLIFYGR2BHVQAPRCSD0K5KOCWK75HAE9ORTVEIN4NG2MHKR7M36I444EW6ID9LK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (623, N'Mr', N'39WL8V8VC1A1VQEM4R9KT6W8Z', N'WNS3HQ0EDA7OCLBJU6Q5DZK7HR6VAZUNQMKL6VZ2K4B6R9DQ2OYWH8VX2LLPJ54DGJXP0PDY6OK8OEG7EGSL1X6HQNJL9AIE0XP7COQDBZPTNN8N', N'JSQUY50QJ6IDE70RFJTZ8QFZMGK4QZB', 197, CAST(8146.87 AS Decimal(18, 2)), N'2L1JWVYAPWWOH2UBT0JE3W5JMEY8ZAV1W1JWI8AQ5VS78FWUB6K926X5GHWHXQBF1VSGIXTKPS984XB7I4WSQLZP4EG1BSTFKD6DMGCEDZJ9XO1I5PZSTIOFW2B4HR8WZTNQRYK1RIEQ2PSFCXVMT0L2OQGK58WMQMA31AR65Y1B3XD6AVRKWM3Y8L20H0WJLS0FEPE16OHUZ9YQD9A9GCP4IBUF8QO51HPAXXSKHQD749ZYMBN8QN392VW2UYTFZCSHKOTFHPRQYIZ9BWSW3GEEEG720PQIWY7SGIEYI7Q0VDAKVMRX5WCIXE23GRFRY8TZB7TTHUEVQEI15N6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (624, N'Mr', N'QQ0R0A8LE7XJR7GZEEFDJUTZ2QCVOWDOL55IVK00T9B6PK', N'EB3DICIDFYC6SOV568QP8VPPFA27DT3FVGVZE1HL6TWPD6IATNHFHYWILDY89A0MVXBBTWQ5Q5IEZ0C8RSDPCOXWKDD128BWTAUFV7HXWBOCGHJL1PHHWA970FRFJP2HTM', N'CM3BQNCIL1J3YDC3GMQLSKKSDQ8ILWZJUH1R3O1R7AD67B193GN49Q9R2BYZFUXP1Z8HBLZRLYEH6DL1PZE48V9479OSQ1BDDO572JXIGVJABRLPPW9GFSH5P491W71JN14I7DY61WNCCZS', 173, CAST(10777.01 AS Decimal(18, 2)), N'YSD0MOU1GAHRSY2NJB8NSXFBHGSJV0YTK1T5VSDMCRD7CN3RBVHUEIK0C1J5VB6FBO6R5WRRXLA1K8YTC170I4E1GSST97R1LXVOHCME3QWS7JF42PSU36W795AC4XHPU9FMCAC0ESWS7MTWDORJEWXF1NEB1AA587XY4TRSCSGAA40NBEZF6YAYC0LPW0Y4IQJ0OVSJWZ6MGM4XNQ0NAV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (625, N'Dr', N'14USHSMJWW1PAXCWIU9YL2Y3TDFJ9IN9HPARU3VWYM8LUVQ2GD', N'O5XDKAGT0ZKF2US0DRUZI0NFGF1D696JUWUF3BW6FG87FZPLRPPQZM2OIIX593', N'OY2TSUXK7ZIY9VL9UZNAN3HCX3FI54SQBTDX57QS3KA8V0W5ADICBISLHPWPFEE27RMGIO4M9U63S9HW798', 245, CAST(3683.15 AS Decimal(18, 2)), N'AWZL37');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (626, N'Mr', N'BGMFZ5QZ4', N'RS1L5ZCW1VNJ2RFZGPFMGJGK7U6WLERXCTHEDDJLETNVB30W3IGFT', N'MFET0RGFB1DO5813EFMM9V3HCPT78ZI56NG', 173, CAST(9394.68 AS Decimal(18, 2)), N'VCTBSJK0ZGMFI7ROIPVO160BTMQ83P9OCU3US4TKCNRJ0VCRJ7HV7J0PBHI6SBWA7X2O4WVDWABEEGAXAZPV7DHSUEJBMNS1QGC3SONNC3ZW8LAU6KVTM02TGAUPDKR8I9NY475LB1J4DKK84O41RYEQEINIUXASCQEYYCQZF9HKGYGWPLLOFPHKUXJMKMRERRRN6LARY5MHGU9G2RS8CLCN9T30S3ETI3SP6TP3BTQ92Z30O3JTTI16E4DCI9ZUQTZC1K991OWIV2KAP3CPKLZZ1MA2FDL2UWJ9ZQY3TAS4MJBBJ3MFX9A5T0AF97TN3UNYJBAY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (627, N'Ms.', N'39D9R7KMK2EYDZZTD9XMC3WPBTVABM34', N'67CHDBTGAN3Q68A0L35T7NWL84U9T2XC3VMA2W08SYI0RLWRL2XD9Z9JBR88GJM7PRMBL0YO3W194VT', N'DTFR7PA8HHXK8DIRNLHQCXGAY86CI7IHR9QL', 138, CAST(4591.77 AS Decimal(18, 2)), N'8W9TVDIBYIBQ64LLDFZGJUMG41SVCR8TNAPC0BYNS3AOHXXP2D6VAILEASPUKNZ7AI2VF8L2HCNFJYZ632TZLCI5PA28M42543DZV19TR3EXV5UBTIQIT0LYZX655CFCAIAFKZB2TZ7HYL9JGQF3EJB4IFZXV4OFO1NCVERT7NOUS30ENMOEXBYQ76X5ZD7PBRTWXXO1ZLWQVGBEFL98F9HC3W5OHLUTGZJ193GQYNECF8VQUIPE4Y91AHS1RZJDR39VXA5B4JASU5XV0EUZWFPHPIQSBEYY31LBY0TJDEAKOH64KX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (628, N'Dr', N'JVCUC2N6FVA', N'82NQ5K23M3YBNRS8BBB0YL5L48ACY0FGXL0DVW15OJOI1N1B4SXSJ', N'VEKKVZUR9ZUHQIK5PFFC4SZIYPAZFSYNWQR7X6HXMJP9BVROXC2UA9V2F1M5PVCG07K0QD8JXHQL3Q63XM13P4CNVPSVKB8Q7884ARXK4JWSJAYOUI82T8QWUX51KCYM9ZEVH2S5OHY67K4KR3013', 61, CAST(14409.31 AS Decimal(18, 2)), N'D4KHBER5EJC0PLBOTJLW0LBLH54T8BM8DDLTIJ9X6UEZ1EKZCSDKY00RTY069YX3X3MBZI5AANQ56BK3K5HFY19DCT0KJ3O8XA2XS8ZUN3ABAVKIEXL3GH5WT8Z5ILQ6YH8W9NAC5NSUQY2H8H6LHKSF553J9TC1C3CTMO9RM9YTPA6V6HW0F4OEPSQ3JR2BBQIML9UK8EZ8MZQUZ8DRWBM7EY3UX58V6MHYSJ9WMCR05GSQ1W4ADBEZ4A7N50M3632ZHS2FZG4KJL1Y6DS10XHV8ITHBLQMPOT1ES99UOAX6UFI89GS7L28M6QZYK4DPIUVS0KD4J7CNKOE2B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (629, N'Mr', N'C3MF5SH1H0ZDOXYC9BYY97T4MY16AG', N'ONX2MX9Q5MOID2RECF96BFWNKH7Y7', N'WYHC9DMWZRKAJJV27SP2EC9KOATK9HCXJ32GE5TFIRI7MX0KPOW8C0RKOXOZK2MHFNQGGFO2Y9KMT2YQ98VLL3KJBHRHGTVG40RY7K390U92F5QMZXQB71WB274ZO', 205, CAST(5038.55 AS Decimal(18, 2)), N'24YE4LKF729AAKW7OZJQ8O3OOEQL1ICWNB18R3PA7KDBU8WRQD0EIK0D19PQUZEOPDNYJOFKA9JNBSUFHZVOHXE2BN7HDZF86OLHLY82XG481C28FA9V3P7SYKNVHX6ATAHN7CTJQTQ1T50YLY13PJ4GGSI0ADLZ9TERVF12GQ5AY6ZSKOAIW2KA606EUT8D8RRZQ936WYNZETIATPGL323684KU9M8NHS27EZ2AL3LXFLVCIVK4DMA5NKQMO9XAQZHMRAWU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (630, N'Mr', N'7LAY', N'2MW4WDGT94VYD2UI9ZKQFIJDH9QAH5QBIZK1M95DXJ55BD1TS177EHPJ3JNNM6C4DJGDISWZT6TWCD137XHFXIW190Y2MHRR61RRXOB058D7OT7PIJGPPW7UMF4ITUD', N'L5D4HTBZJO4LLRUI36Q5II3J833FWZF4LS84OBOXB0E17LG5HK3Y8JP21UVEPV2J8Z0SIQTRHTUI42CNMYYCVHW2362UG97FXUS7KONQQCGEO6XZH7RRWQOR', 148, CAST(3557.98 AS Decimal(18, 2)), N'50ZG6QN98CD23AVIWJU8FMB6B6G38K7YQH7LAPHT3CGWJ8MPM4VQ2L7JOS5ZAJ0N4EBM2A7720535FN3JQH4PGW49OWIKIIJBSS4W0NCXNO1G4D941FK2WYNI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (631, N'Dr.', N'9U5TM3AJVZ6E4', N'F1PBL96JLHAP4PCGT9K2112AUX4HKS6BU1SM3V38CX37LHQX2NPK9ABDZFHO5OZTBZU3XQCX5CP3YUOC77FW3L1JPEMOEF3NYA', N'YOBNZB7LEK9942XA7LJ0HDW83D8IFI7615LZB3R18SAMOPC5THP44RKLS3JL2P6VD38ZGYY4UIRO2AKE03OYT329K078J5YIME9LHDOVIKAM0WJII5LZ171A1YFGRQKOJ82N1ZWNESG', 34, CAST(1258.32 AS Decimal(18, 2)), N'CEDONJHLRDNJ7J3561SVN5AMEI2YHFU4LON9Y804JVD0MKUWHXPWVNJ73QA4HJ4BIIXIVU6Y1NBSRA0TO6HJPY8Y5G58YWN0Q1H3MB0MRRU8CQFSQGFA2KMKAZCFOYZ50A2QSW6D6USX30ME0CHHGCY5EXTNYKYSSP71OP0T9247SOG9CYFBGHONCWBV3JELWZ5ESKQACN7E7QDPHJA05MBA1KPSE4QQNJBSJ1HR85ZS99GLILEJ8EG9NUD8VXW7XGQOFL6F2JSZNI0R339SQ7I');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (632, N'Dr.', N'W4WC459HT7RBQ03SRDY82E65C6WA8NRM1Y', N'MMM0BARFXK7F5', N'TF9OHPPEKZHEDYKJX74SZL3RTVHJ8YK9RSHLOQZ2064KRNA2EDP6ON97CIUL765LE7NKHYU681RSGJ06KE4V9EK3I996WDUU1I5J0PKGIIYMWGRS', 239, CAST(6367.39 AS Decimal(18, 2)), N'314OO8WA9RVTJS6XFYGPMGM4UL4RO3HPYHKDGHQUMHQWN78BXBDRQTNMFZU234M596U17THY8M24PQHMDTUCQPZ4UYYHMNQHVLMHC644UEJ3RIWOH8PAAAEK6Q79VZBLVK8440A7OQHB6VCB19ZEYG7L62ALZV8U3X769RKGYILKT3DADV7L0XNFDNY2QO7THM89O619OIGFUMS2OZ84NMU5ASSMTIQ9AR26U4M7TYXHH7KQVVDQF36UR3YWDFG6S653');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (633, N'Ms.', N'SA95SGR1Y2AC9F37TFW8HX', N'4HY92PPXBDI4OJP925NX2PK64LC54YIZGX9X4E', N'O0T1AC0NJ18POAU7XRXDH5UUOCQFY72I8C1SR65WHOCRT73EYPTF0I5YCXLKOBZQ8Z2I640R8LO', 250, CAST(3850.15 AS Decimal(18, 2)), N'L7KD1APPCN371QX5ZU7L8FR5QTEIQPB1H7ANSDESG4FFVOBOI1SBYHB6GEM7W7ZNC1PUG9CLFE43ZCA1HPZOWZ3ZV37DR6W95R2UZH78P6WKC8634LP77AQDXPZD1YU8HVX7AG20HRZP3JMNX496GP1V1PW9H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (634, N'Mr', N'ZY9Y85F49SG', N'K7OB9I7M8POI1R8OFX', N'IXIJCJ9CO1OP62GTKL76OLIT5L8TP27ETYGFE2751M17BCB3O67NDIIWEODRAFNMU9W7M0FHD241KBITA45IUK1BGJ1PPGUMZFD1G3HOQP9BEHC26KH594RA8', 180, CAST(1163.27 AS Decimal(18, 2)), N'6QCN2HAYTOIPPGA1AD3BGXPOSST26LJTINK9DFH5CYBKNR0LL0FI56');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (635, N'Mr', N'HI75RAD831TMV5GY65P2UJ97JIIWJX0KT4L', N'5GDJTCUJNR9R4NA2QDDAOWZ3GFFG788U0D', N'R2YPRW8H24YGC6NHS4APXZ7YJ4ZOCUO3TVBEP0YC3WF74P7AISCMZINSV06NXJ57', 179, CAST(17165.75 AS Decimal(18, 2)), N'91NV9N8R75P62V1NUWXZHL410S8G660NC9B8QK7H363FYKYQJCKM86WNWMUHFRL141USJSX9PFVBIP3FUIWULEF5COB4PP2CL1BWQ56REAWSBL47JENXUQGPMOGVHTJZDJPGD6PPB5FAHMURJ4LB24HULL92OBALQXESVNTCPYLOB580UPBC88W81UVSWN00VUJK71VVB8L4ISJFD97Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (636, N'Mr', N'MA4X4POY4M33PGX', N'E7NUYEZJVYXKUROIB1M38H93EXEBFIFRREVV2IFWPD45IVKOJQXTE90XXKG10N3CJ6SGWSFSMPEUD4KICPSPKLDHEYYI2DW19RLC24SQA56OV5JTZ', N'VNHV9SR6XM1KZUUWP6KI13A8JJOUAFJQ7Q81QF90KF2VL8V5CQ8DLPFSC8BP3XWI3AC9LS6AWKXM1FMB', 241, CAST(1950.90 AS Decimal(18, 2)), N'XCH05Q1S0F2XLTGMNSSTF0ZNSQ9AGENF00YH1J1BT3ATJ6XZ3TPHF6KWCU8FGQBLSNXLUZK4QH0BQ64LSA7NP6ZUF147ALU3SO1V9B448KQY6965QNN6INWLN26TUDT4MWI158BH63E4F1O5UYGNYNK4SF864A9VRLB9Q40IB50F9R5ME0YVW65YCE9Q05CVTIDTPFFQYYBTN4V09LS4BEZKFCWCUAH6S4LQECWZL8WYUCB7I9GED8JEJTDDI2VOG50JJ4MXPTI3I1P31OTLT3TJK67LYIGIC8HPBRODMJOKPGWI3ABU99UDCGYCX1Z6C0QAJ0S90FYAE9T4APHN7L93D4DUT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (637, N'Ms.', N'2EGY9ZL8SHO519TQKRCW0SX5UB2XFF62ZWIENMFMOW5N', N'PAVESXT', N'JIK665HBGPI3JWNJJSBVMJKKYG1SSRXL01KFBBW5UX53N6DN92', 2, CAST(9809.72 AS Decimal(18, 2)), N'GLKI7PPLY2I1UTAKY2MU28JBZRQNWFNXZDQW24FOQF55RFSS6A7Y9718IFZ1OIFKK5UXU10IFEH45TZBV49DPHFSBHEM5DZ80KKLLVY49OJVPX2OFN6K91U3Q1LDNED1E94L9EP05441XK2EEP6H7EYYPHVJALHVAIGFTHF1Y6F5XT55Z6YX7WUZB5VRI6QKM9QF3NLWA4J1ZT1WCQK3MJNEOG4NMNJSFVIO3P1CL2N3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (638, N'Mrs', N'IXVSCJY4149GB4XXNTDAM64QF3XBP84MA4CE652W8XYR8YCII', N'1XUXP8TCLMI8F7W2FFFOM8F4J4OL6VYOJR3VVCFXUIKWAQIHETZCI4PTIPELK76PNUPO41620HU3NIUTL67DVM5E2AC5YTDMCU9F0UD', N'MBF1ZY08P4PIPRW2IC878V61OEHWR3DIP9AALZKHB2705EFBQ3VA0V8Q5ECKG3HMQ6SFHMHISRW5O5', 192, CAST(5853.60 AS Decimal(18, 2)), N'T0I4YFSLMX3LCRNIX9MLRL4BCTMO8IKWJ0UGMJN8Q6TXF2QYETNS0HM8W6R5S3D4C61BW7WELEUKR6WA2OAEURV2EMJFRIFNTOL80F27X87MM1GQAH34TYALBZW9NHN3Z7R3LN9MM3HMK9FD6T49FAUUE0W1JSKFL3MF9C5M8GIP02JJ2TCDNODXPKR83TJ10GM03UOH1ZR4DQZUHZQQ37GX1C');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (639, N'Mr', N'02SCECS5C9LMFT0', N'MXC1AL50VL0E0SU1PAMUO03637QS8ESQTUQYA34G4CADSYMJ08QP8IOMU5X2VCRGS9K52WQL66PBPPE5K7S0N2IA544561KS', N'AZ65N83IU0J47MZ0', 78, CAST(19639.46 AS Decimal(18, 2)), N'KVZCP6ENJGJG74UCOX8JZLXQ43SYT0OYQ74M1M2YZ2GEYJIL8VR0TTNZY88MDGTISKP008A2UAKW4JSKK6QY9N5XJ5NSEGKI8YLETHLZKP6I9RUFGN16QV94ESGVKH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (640, N'Ms.', N'57SJQIQG2O8DHHQFT', N'UKJDHG4H5J2SDW4RSIOJRSPRAZYSLE4LXQV4UR3QOIIJFHS7ZDDJW8T1VR3HIBVQ', N'LLAYLZT4MDI9Y32ZI2LAYTDNOYEXIAVSROJ2VXPZC11VK8VXH4PKEP9S7M9NKWLBHQHAJ04KDLYXRI3F2HGDLAD2FRU8O1FFFPDURLDG047TQC0OJTK3F8Q', 218, CAST(11201.56 AS Decimal(18, 2)), N'DQ1N6XEQ2LQDJHMNSA8CQFDSDPHZ11QF31SS84OI2WYLZIPNS4OKC5XYC8AHFEP1VBAIOUFOLQ9TGRTUZT7WC52X4TFZT72N7WQO86YXP0YLW3HLFFHM7S');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (641, N'Ms', N'71TYQZM1STAMI4RLS5QYYIBBAP4ENVI6SELYT7HSXOPX6G63LW', N'HVM0ZW0FYV9A6BS7RS70KOOXU93OM7CMR4YM660HD4YCKQOGB9RJOPUS6O6PTCSQIMJ2C51KSQNGQCD4LMCCGTY', N'CFUS5VWB6IH258OH3ZDG3KB3Q6PUHC06Z6HBQKB48VM7UYJA53ZGVA3R3Q2Z61UUIB2ZQCQIO877X49RNEPDCKBO3Q8ZICY61SPJVJKSDGRM2VTZHABRCGHYZD', 190, CAST(7408.85 AS Decimal(18, 2)), N'P8CEUFGUEOLMK14MTU97C7H10CTKEQGGF81FVS3I95KXAHXJATNRXKBIRBDILVFN857B0PQ0QRY6MKQJEAAL2OIUWIOKELWDQWP5ALJL2N06M5V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (642, N'Miss.', N'LOU1PQIN0V7EWB3T', N'A6FI0AO0B7TX6M3586QX1D2UA146ZF9PNHS6QIKH1N4IIGXYJ749200W3L7Y5I0VY49PTWFPM8VE8KCU45MSB0MMHV24ALCJM8KD675MSENU5LNJ8DU0V8JXHM8YTAE1WBRZZYNW0Z0XDS', N'04Q0CA165EQV3UX0V', 224, CAST(8738.29 AS Decimal(18, 2)), N'KU4BLULJNDFH05L5VLGQVL8SQOJFOB7RNH0KGLRWB5HX62KW1UB0O5BZLBLWA5VB5OTI51P9TKFP3BMN3MET062I51Y50VL596SI92RZ5174PMVAPXSOQ1AYLBC43K9YY9FWJ4E1VFOYZXSJ5OF22WF8VUWXPMWLR95G6YQLJRTBDCYNITYE47W2T71P7GB8I27QSBC6XUIA33UJV9FWNHHKC3NZX1D3FKSA48V7GSH9OLYQCHUY1FK1LMDOOD9VHFVIAJEMD8FVZ8VR5XMF7F1Z0R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (643, N'Dr.', N'ITRLNX1ASE5UI0TQ7WHXCW7BJGXPASL2M2KR43XQTRWCD', N'V8JWXRBOEPMWJZ6TIZLXTTNJAQXZV7MKP5CPADH9KNDAD24XT6HYRVO2KZL7UCS6216ENHI4HCC6G', N'PM8W9I706ULBQJHOJNNGFB1OOKRF8XFF', 45, CAST(8399.86 AS Decimal(18, 2)), N'IV7I3IMR9QGFT37KS0O1DRLJRRTN1DVIJUWR6PBDDGM1PHSC0U9YBQCQ9ORCOYQVUXWZ6FE3OBNW4KT9YHN64W6SH5IHYZOFQR6RLT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (644, N'Mr', N'HUDNPFLVR', N'67MZ6OQOTUHA5ASAF8U68BVPACNDGEIHM7TELU64GE8CWDB7C7W4B94UCWPT0C8ECZNYHDPL1QQU3ISX1G18ID6C2Z2O4C34', N'6ARN3V7SC47LUO6DFA9DECDLJ8PRSR8E5OK9Q0GSFO37U3UVK1TM527TW', 142, CAST(3073.87 AS Decimal(18, 2)), N'KG5AZ2FMOUHD7AJQXQ3H0XW4ON76DE2O4B2QYM7Q2JTNHMG46080IB5NK1LCU88ARS8W8TRBJDFG38N2630C516S5F5X1UVTAIVODKWC9XG4WOJBDI6R8W5PMGQSNTAPIM5KDZPL6N37L1WGVUKIN3KED51XU3PFNRMAIYYETLKLTX4LJ9WT9S2E1R77XRR2YNKUFMYXW6O2IYLF0GDK7V5UP88RRQG1UIN5DA6XBZX34ZV26R6HE6V2HP46D665QM80BF2QAF87X2QPC5LZJYNNMKNN5ZJ4SRD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (645, N'Miss', N'MG170B00S27GF1M4YR4L', N'T0XPCQYHA2LJAQT3SSKAZWYTBWIB0HPNLOAHV8OP2Q7AKSR89LCKIT6X24DG8NHTDYXMGB7K3V88OO8I492E444SHCFQU7HF9DWMV4SXDRGMLY8DWVBYK2P8T553VH', N'4V6G0KVSF53WNEUHXQ96RFET6RXM82HRDKVLMYOIB1OPSNEERO4HJPEPGDA9N9JCOCJ2J9VZ1RUPRO1ICIUKYZ7N5649OFV2IB1F4BVIT5FSVPXSCRW4EZEO5WWC5', 106, CAST(4409.32 AS Decimal(18, 2)), N'RVRQOG7YXO4FYFU8L6LRYKEQSFKBV3E6P9XGDUB3RPPYG8PQ4BJM5LI7H0X9WV2U9YQPIEUQVIZ9VFAKPU7KKS03QQZDX17VMVOHIZ7QHTQNL9B1QDJ1OI9HYMYREHTUB4N0RS2QMG2R1DHHEXMJH564L7JV0GB0ZWBHLBAXBTF7FIFL5H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (646, N'Mr', N'VXQY2CM25GRBZ5N1QQHRVJAL1EB1LHUQ5LQJB9YZDXNLF4GWY', N'VESYBRLN0H40CNI7J41UYWIU7ONTPZO1W1K8SZXMA8', N'BMVS6GNLE0NCQSKESF8CWWJRNIWCA8FJC7TSW2JH4QDVH28M4Q3G3TPE34', 25, CAST(12077.53 AS Decimal(18, 2)), N'GUAC6XJEJ96P652R41ZV3NP7OPYO3RYPJ2U5PK4J2WQN5492CQBJ5L9T52OHYUARBG53BW2KWGT6W12KGWBDGEKYT00MWNL7LZCOY6QFNRMPS3W30401IXBXW7AAWFO9ULKXOELA6WPPRV5Q4XLSMJPONFRQVGJ72DU6IYEMIQVM8L511K6YUVMBVW99MUEQCHME0Y75IZ9VN3F2AQOBAKD7QIALO5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (647, N'Ms.', N'80NU5BM4WN0KHOL15DE4QGRHDXWP6WYF2J9T3BFFW6CAZTG', N'HG1CLBXLZUNRZVXRM3SX0S34A29EK6FJQK1E5C2ISDP79ALDU7AJIABODX1I1J1TE30FTJMA0A5M3VU0HWJCVW1F9D18BKG9CWS6A', N'OJBB6L3ZJYRHPWR76JNAKAA8J4YFJIFPSYVYTE69D3PND8EJCLIVGUJD92S2MNF1J1PR1SERCDWHKNUAQE3XZJ9YEHOQM4NPNO3BJMIJ6QJ2X2TM7HC8KI10SQDK4O58Q7T', 215, CAST(2029.61 AS Decimal(18, 2)), N'NC59QZQ03C0GUMQOSG7ZV62FR3FNINMHDYMJHTP3JPLZ94IKZUI4G54H9PIMJ3IFPJ3WZ76ZR4G5K36NLUNN5I07U59SB2JG769Q0MKSNICBPYW6JU1OFU97JW1UYEOPL0YDUFNY9VZN5OHV838G1U0CX174KQU9TNQPZJC372FJVL2UE6MU57OQZMGS8IEJ1QTIXSVPQ49YFHHCZCQE3Z3LZZQD3KVPOVI4RKXLAX40YPBH54SVRZF1M7IY1IM69K9JYCKFF436V2N9N88YRZXOGGHJ1ZKSBXREGSJTJDGNW96KK9AT9NFANK3IU0EGKAVXB9SVPFFEI9R69XZROQJOIHQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (648, N'Mr', N'Z', N'JBL0I85OKH2005ZPXI2K6GHDZFTVA72OQBC8RUDS9KTJ5AKA9MYA3PZ3T712E9ECEEAOTQY259BLMY8OVJMN9SK0B9EJTBEZ6H5RZVHIOV4UEEGVYD7VNQ2MTACKCE', N'JJR3WJR9061BN2I', 125, CAST(1786.59 AS Decimal(18, 2)), N'O0YJZ02ME88AGE3U80RDSW8W0MRTR6FUIX7OGVFI75');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (649, N'Miss.', N'Z2HTBR96G7FXY0PKHXFRYUXZ8J4HHK', N'UUBE5THPZ13YDNQMXSJKG3JCGEIXPJX6AMAZ3ZB2HN7TKRPY2NFRSTTQBYYRAJZG4WORCRJXHH3SWPROOKV245DGSKN41JSYNROO3XLB3H9BQ1', N'SE55N3JS9XFILABQ8X2OQ8B0QSZLP1X150GB1O9G0YUZ49NPVA2Q0UFJ34EU3X270DCLUZOJNLORECVH4AQEY60BLW8W9ED2WMZQW2VVMJ2E5N4R8WQT7N8TC0ZXRR998', 80, CAST(15731.03 AS Decimal(18, 2)), N'0OOBANOGHPD2RS1IC88V7TESI7EECL85N477CAH62QY44UFWED29Y9L79WS28A3VH7FNKT62');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (650, N'Mr', N'XPSXVX97HKWU8ZY8BLFBIJ7F44', N'L7A2POXBZI8YS3FWXO54413LR', N'VRC5K1EVSF3M6XSHNDOJU8E5DW2X3U9T6JSCE3COECVSPQU2594WLORMD', 63, CAST(7322.98 AS Decimal(18, 2)), N'2SGUANOSHZZJY7DIZXFHEXSN2NWFRCK60IWH4DZ84AQA4CI014KVQKC40TRNQ815ESIFBWEMY6D46HIQ4WEM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (651, N'Mr', N'LRMROWPI753TM8QX61ZP09BSV', N'KYM', N'ROYHRY6AFM4F3K0Z5ICLFM10SUQC7IR5Z6BNPXLXLFB7XP6JWLI99RR4MYPX7U2WVYGW8DA8WF00BU32N6GMZHW7F60R7OPQCFBY99BIBACURQTRVM91EGWD', 46, CAST(7394.53 AS Decimal(18, 2)), N'OGF6RHBLBIV9LVBT2P4QYXJ67YIA1IUUEEQC39JF20MOIVLM6W179VTRW8YTY1KSN0U75ZQS5POXAUOCCV3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (652, N'Ms', N'8ZDHCSQFNGVS8YIGR28RS2SM0E5FHBGTWMNQ4PTA36K92DS', N'2PRQ2WQH29QFP5UZT7', N'8H1CJ08Q9OWI4SEUXBP42D8VKFNCVIYW1SA5S943I2X9RTU6H5780RSO3NFT2XSDK8RMKRIF0YYMFZ4QKHUQAPV9ZM25TA0L9KOI28MPMR82T694IO9L222VCINYPDMQXDCVBLOCU', 6, CAST(12559.15 AS Decimal(18, 2)), N'HNLIKYGUBQG0GT0H1EG7691K7VG1KMG3YFB0FBM6JWHE8OHHU7BYFVY8L1BPIE9PAD20HZ1PR9OARMBJEZ7DAHN2H3FE0WO4MR3VLGZU5M657OGYPSBI7WETPZJDKMOVLKN0JGXXZD7OAIVSNGP8L5WPDA5MWL9IXBKN0GF9UDIUPPJ74RQ3XG9FNYM8AB1E3ORYX8S71FD7M2ZNRYH5U5KG14Z1T6YJC4Q1YK9VYJ2I31TKYZHCTVJX3AWT8QDUHTVIBYO7OM6B32D0BE2TPLQGKSXNNGN858096A90AAO7O7U0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (653, N'Dr.', N'6JI8K3956RHXMAYCZ1WMASB18YOLIIKML49YS89SCHKD8WNS88', N'LCMLXOK3PBQ4ZP3GI711I5FMVDPBXQR6CA1JF3T2HS16B5QPM', N'4JHTGSCXM41FJ7HT6JLOZ85H4FTETW0XQWYJEJ1ULRRHPIU5DHF4Q65VEZO1ZY4Q43OM8YEMIQ28HNSLKN0BGV6KR24FU0VMM0CLU8WF2TM04XEQ63GBYTA9X3V6TZRH', 8, CAST(8090.92 AS Decimal(18, 2)), N'WHTNK4V3EXJ11J7YY6V23T052J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (654, N'Mr', N'0H6PE7HZMENNN7UBH1ZJRR39S7YSCAWD98J5', N'BRR55FW0QJZ96YJKRPOJ1FDZKP39APNZO8E0E64LNECA', N'FLGA7QCQK8N86GTOD8', 50, CAST(15603.30 AS Decimal(18, 2)), N'XJSCYWQRZTKL356RDQZ9QG8Q1ZYT2GNL1PXKMKK4AS85EKRWX1NF39OGA2BYYWOI5YKD7M5S5UYY83BG71W1T8IR0H9J9M6E4PZF0DPAVUA8AQ87QUQW0MPXGSDQDLJIOKUJ3VGTCL5YXAG981TFW9DHZ1Z70ZX9BSJQWP4UEWKEHR06C3HBS4MF6CJ1W8TCOVN5QQD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (655, N'Dr.', N'FVQB9NEOUW6EK5Q8PJ9EWW69OMBIA', N'8M2NRD112OWDSLFBMP1WZKYKI6LK2WM23WB31LJBLXMKHNMKOA0OBE3NOI5LSGZ51T9V9CA06PA1YD2UJ0WSWXROTOEJGYI4YGIODRABZZIM31PAFA1SK7932L1LXRJ7662HVEHSPKS', N'KJOSQ3NRCQL3154OBXFYC3KDLM1RN1HFQ0WB', 160, CAST(14663.29 AS Decimal(18, 2)), N'XY1ZOZZ81TVWHLH654JJ52Y538PM3VFLQYET3NQ7DBZ3CXU3EGZM7TDU0VWG9D46DA5J6N3IDB6U3VT5DM7MVSEXLKT7Q9YZ6TP2RAWRCG8VMIR52Q3M5HAKV8YLTWR4D7N96QE2PGAFKIA2TO506BTPI46JCAX4HF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (656, N'Mr', N'FOOW2697H3PLYBSES454JPARIIPGNM', N'F4KRY436XQKR', N'SQ7KZ00Y5L21SIRXAEHZA732V3A86C08TWI', 42, CAST(11066.84 AS Decimal(18, 2)), N'HZBC0XP7V0DXVS5QRX2DYQ1KUPFJTQF0V7COUN5D4HN3TMGIR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (657, N'Ms.', N'VEFGHPN3KZI15OBYUH9U7C6UQDXDKHSJV', N'ELSPPD8FAFXY7F0T82ZFCOX0AMTNDAGMBAGTO306JH4PNSQO3DONKCUQNRF2KL2ZZBNXZ6452TVUK8DHV4JZMS2ZFP5XOXMXF4QB5TPW8IKRGZ5FEX6F22D69', N'8ED2KEG0YQVJQHGMFCGLN5OVPRSTLT8VZKPV1EFWR2358RHOVETHGXJ2QHDSLMF4IZK6SKL0WKTK2INX94X60RF10M5J0MA4MYN87BWATSKV3Z07UFIHP94RKI', 152, CAST(14991.33 AS Decimal(18, 2)), N'X7F2WQXQIAI5E4LC1NFHV3RO8G3YR79WS2S8LSBLR35VVY3IIGKS2AVTFQTGMYZA1LDBCCR8CUPRXWSACKGANGUH7YS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (658, N'Dr', N'T6JVAP41K41', N'H917H46XFFI1B2FMR47AIFJQJQR7VDRK2IBFV11GKIKQWCM3ZFA', N'5F1Z9APX3VEQY8NC76JX1MXPL4SFDUWOO5QVRTALE1XCGPK92WXK0K4JHCE5HAK8ZP2SHRKDWYJ0OK8WJJCGWBO317DFE444DQNSRABJO213UX3IMYX3BN1YQAE5Z', 213, CAST(17311.13 AS Decimal(18, 2)), N'ZUZS4VTAKR65PBG8K3WJYJ32IONLRV4DJW9IUXM22IPLEALBZLX3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (659, N'Mr', N'527KUZES4I8LP4R9I', N'YY51PAORDZ21OYZTQZRP3RQZVTT64N7G2IL3CAQLDA2KGI1YCSDZNL66756VGHMQSMZ6CVGG96CSP6JCSUUBA7SHBFW73U4VNCSUJVMHCWPH9DH1', N'UEJ07H9QR25DNL1YCGBWI56CCPPO1HV5KW8', 103, CAST(19306.23 AS Decimal(18, 2)), N'9WGRW9G88JONTLS2YDNGTGFTIN72BL5Y0A90SQYN6TUZ0XKOT918AN8TGM981DWMDQNIBS97F090MGSK3J92JXOC2GJ5GPLSW7LAA2C0ZUSAD86ZUP5I4U2F2AGV93RQEH3EVI90682P5EZT9JBRJ2O24680LHRW32VW5S4BF5CVSDAOANLPRZ6CS09OA8FOH5M2I3OHE0BEQT9RVJQYW143VJ34IF16PNDMR757Z3AROSMZQITQIGSG0I7ZZJYZZ4O2FN0OEJZSQDF2W4D0MAO8VXL8067F5BSJ3JJ3I4CZHZPN342V5XCOGF6I1RO8BJNFL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (660, N'Dr.', N'7Y6DU4EZ6KP6R1S28U60MS52NBYY56XUIHX2HR825VST2', N'T3LNBGKTIUXZ8CF1G5CEPTW8CZDIA8YXUMAQJ8CW7010PH3JAGS74NV06DAB', N'JUQL9V6VYY0FWSXYT39O86NHSKPA6ZTQDEEIPQMMYBEEPAS9JXCHNJ', 216, CAST(16505.87 AS Decimal(18, 2)), N'ZCK9IHXORW8Y4V3C97Z33OD12QG4NXCA285PAWFURROA9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (661, N'Mr', N'Q6', N'2JAVZ4M2OI8TG6PRWJVWT7TFRT7Q9J5X0U5GR4PDGGLYKDOH68ATFF8UPU46XWT4CATM090RTHFCLVVD4PK08CILLAQW0JFKNGL9K2GX8JZXZV9UYR17BSW0R80QI3RA1VP49LS19NSP', N'D78TO6WOY591HEF83GMPWS9RISFQ8NC3TZ1BHWXF1MF8F8AV4P810TIKXHBWR6FBT67ID3R7I7O9C0CAIKLJEB30', 82, CAST(18592.15 AS Decimal(18, 2)), N'MS4ZAFFHRAZJ7R1T0TJYWWQD1DS4CBZ2RZ4OZONXUKGUQRONTXRUQB6P1RXWMA5FAWR7NCUC5M3CGVNAO5BEK5CGTEM8QRAJE0JTZHZG3EO37U953N7GZQV5KBE9PMLEBJXFCTA66UB6G88Y4G43JUKN5E9O3PQHTARNXUT9C0A4EPPB2F49HHUHZ99XKM3G3UC5GK1AMURIKG8GPXLOLHZBFAONKWPPXT0KCJUHEUMMQCXI1T8M0FVMV1Q6WEPQ51LQFO46349QVCK3C5MRN3PIXEOBSOLZ5VHOR72CO1JW55QIGMUQSY21C2S1ZTDFIAL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (662, N'Mr', N'NVX2IHET3QJ', N'LLP1WX8H88VKLHC1PE4SPV464KDY0XOZ6N6MBPL5ISTMTJO3FZK8OXMPGIWCKAHAJVEYBPQ0TY9W2HCKW9I0DGB90H6SS9L8BI', N'GD0L1OV64F80SI0X1IT588X41E6LWXH370WQRLGIS27K39P2KMCSAU87FVKMI9A7X5SRLA6F1AC51', 30, CAST(4087.64 AS Decimal(18, 2)), N'UWC4292MJSCSN6U5TV77SFBOE1CVO4EVJQNJAPNIVGIKQZETY7LM2E7EKOQ1W7XFEH8WIAV48OBCXRXEMJXGIRS5J8ZMZLMOI258RHBNCHED2VHSQBED9HWNP3D9B84M2NTVMPN58931CE3OR7VN68E15IJO31C4CSAF2L60N940EVAA0PH4CHFT8RQ36Z16XZPK3NL60VZX4ENA79OEJ8RUCG6AV2UO8X2E5Q6C3B3HHIPU4FWXBNNP8U7MHBAX0BP6B84H2BA849DTRC5F6XCKAD6AIJVS06H6TJIVAEUZCEKYHDV45UQ2Y4VY1UYIGI7YR707TA5R3D8WS7T4NQM6FF7OOK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (663, N'Mr', N'GT0NUNA4QLGM4UQ0BZOKS6IA0R00I9E1OWO1R68BG2', N'Y5PSQ9JFQNQNY6BFBRHX3K4XTJY7JD1LJEEF6GSQT1LMAU7LHT9HUL0E0SY6ACVDL53KRW9VYQ31ZINZCCQQ3KRYE0EEHLGH6705QMTKJDI3IYEI4ZUXM491D55RIVECAMVRHI9PI', N'1RO409KPTDRPAV1UZJS0MXHYHAFXQZH362USYE80N8CE0VZAE7BTD0Q39QMQUNZTWOJ818WLARDEL2YMA5IIONP5CRJ7RI6', 134, CAST(6428.10 AS Decimal(18, 2)), N'GGBJT7M6ADNAVPYYLVZ5T0TUPV1ICZBJ9BRTEO51JR0FRGGGMTOE0FNG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (664, N'Miss.', N'1EAYNQEI31ZDABPN2NALG6FY76P84RD4P4GWPTC94QA0PIEP', N'6Q1NFGLV9IRIU1YZRKH22OZ5TW2N1MP4EGYIZQPP6MLWLRRUSHQO8G2HRWUJDXTMSM3D2FZ1URVF32K248VJV0WYDGR2W6B9SY3YNDRCHPTGKNEOBSE52AQRQ5ZMOX5', N'8IIBCR95BPJLNBH6S0FO4G58YDWAPOTRKD52KM9JWD6Y33I09CFR2IVSD9DYUZFNVR1A6FM5QWSQ964UVW0D82P2HDPA8BOXYJ3B27TUQ905P5I64J3YY1ES2YTSPBXF7VSQ3TRN26NY2JDBVJ6P8Q', 40, CAST(1966.42 AS Decimal(18, 2)), N'Y53UA141F0N6RHAZSH1UA4K1VCIUVG8OBZGI268QVEBFT9UBEE7YLLJTK2YXI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (665, N'Dr', N'J5N5GLVZCRH16DCNUO6VTX9A1HQWF9ORZ6KMPY9JLXD1V8XC', N'GMN4ZMERGI167GDQ23Q3R56I7C7HD5OKK50Y09PPDNPK8KK', N'W4A93', 23, CAST(17159.38 AS Decimal(18, 2)), N'5ZRZVR0RXM8BZWS48LI6GH8A2PGMYZ7B7M8COUD2BMGLQAMN1GUCFBSOQHW6BETXEX3DNFGD8FVU0NJS2TLH5VVVTJM6X7RXTI7T69ZLZG4ZGYO2Y34ISBSI17J3TAG0OY0HGQMST0IPQVFUVJ8T394HQORYPWRP04BHX6M7HBOST3S5RP7A1MXEUJRSYN3X9SOMKYWPX0BSKCONVM70OGND6WNEET9U7RI0E6LTSIC0A5UHV4WBF28S4BFNAIA3RH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (666, N'Mr', N'CU', N'S8JK61XAF4XNEWDATGM2GFQTE1Q4GMANRXP4M3EJ8PIVC2AG9EQRYIUDIP64ASUTT9VH68OP12TQWUHBQ9U1VIO92CMWXA8FUO226T90P1P', N'14ECLYUDR2BRFWSEFQILHW6576HWVLTJN8118MGLIX3GUYST6HPJQIW4Y95EGXH68R36VQ6T9X2JTPA8ENQEWAT5CW', 198, CAST(2328.68 AS Decimal(18, 2)), N'STN9P1D753N3125IAWXE5JQV2QYIA889TK1O7V7A1V3OH7EK4ZZ7T2F92S6Y3VWXUD9G0HBFONC9G2DVCDDB81GR5SLFP876Y5T4YXJNNKI6P5T0EBMPHKOTXIB8WVQGG6BA99WETQNNIA20YK0EMHP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (667, N'Ms.', N'7U8MVD4', N'O3GN8UE0YSYALMEUMS', N'YG25LFX82VLYFAV9TFCB8ZW0S73AYYXUYN8D7RH3WH7DSPA310ZQZLUZJ2CECM94XQ0S2I21Y8FRRJ73W09YZ7VDT9T5F2R973F1OI0IXYRQ6270U8HBDB5PVMYTOXMVG5JN35EE0Q', 50, CAST(7122.99 AS Decimal(18, 2)), N'GZ6FMAQSU2QITJR4E7VQX0ANGAABUCTYHXT92HRI0VTGJJ6FTWZELYGFPJZB0EXH8R1VPH2WGCQ17U3W4VIYCFCJHEKJHGILYB7SHAPBT3Y87E8VF275WY5TEIEBXIEZU43VMBFU5649H3B25P4F9DPZ6EDZWEEBOYE2BD84NC0PUWCA6B58DZQHE4O8XGXQRSLIP8RSGZSWD05A12SK96XO8WO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (668, N'Dr', N'U', N'RUEW8SF5X0TBUTTKZWZN2V8G1QRHKEF', N'0G47Q1TA6KGVWYP52J7U0BVA0IJWPU3ANB49RF7RVNFA09NPDZCUTWZPKU68IWKCH58KUGEMCFYDWL9QVUIPH9HRBFPX8Z9Z23TU12UXLPIDXLTZKFDNDUU8NG8FQGEC5ZBSRFPSZL4SQ3TQMQDSML', 1, CAST(14679.61 AS Decimal(18, 2)), N'O067E9X1BTLYJCRE7U4EZE6UNDHLVWASKL4GSLH323Y8HU1WEJHES979TCJ1SC5EJSDY8BLLC0CVFYDTBK7BEW0BEUMG2FBPXKOPG3N2YW1RWBTVYPP74UZNR2KDP4JWPMXV9OC8W5DIU8E21QICP3L3K1XEIACTC429DYMADHAZHHSINHCYM77L1UB7RXPMSJ5Q64O347Z8SMM29ER1YD75XG8JMEJFRO6XB1CIS9UE8YSF78YC6OOEC0TQW5GPOJH4R7298OJTXYNTBEG6920RLA8L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (669, N'Dr.', N'J', N'X8Y1978UTPH05H3HS1FXN4QVMYUH1YLIKEELVRARO4UCE7BKM9OIZIRSI2FBDQSV3YGQ2IM0RN9IADHEM9US93J2NL', N'79L6KTF74B57YA075QKNSQ2HKMITZ2LQJE4I584YKDZGKVVFLJ821YSH73MXB', 212, CAST(14658.71 AS Decimal(18, 2)), N'NS5POHOZIGQAXGZVI2V33T19IAE4O3GZGNKWE39GZUSYPVCM0V28DIITRV7E2JAF0QTAV3HFTE4903KMYS3T08MY4R4IWVEFJDYY12RXDNEYE9TOBKGAFHER4V54YZIY0OPN5LKV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (670, N'Mr', N'2P10SPYWENAWJ8ESKDX3EUJ4XYQCUAOMDAZ66XK8DYFKKB', N'SBZEXCZ9FRLI4MORB88I4L1O4VZL0FD2GFTOR9B6B41M1RQ6KC7TF3Y7AA91CD8ZDI1OSZZ1X270JEMD5T1O7KNDGMDH0ATXV19JP1DLC6WCWXOWNWWICKRTVO86LI1M894H43N3G', N'71QFNK6I1WMM3EQLXOR28GUIOLLMB2L6NY5XQ48B93HBGFVEQL6Y68DR77', 154, CAST(12011.47 AS Decimal(18, 2)), N'6FDUNKUXG7BE3Z1Y6U6WMYE4FYPJ6IPZK9921XGBA6IS6JWPNOYREZE808EOUBRXHBUUQZX9DVLGGMYV20VHJYLKV11TISGZFKBUP2YOQPDIDXREAJMUF9DIQ9YPY4QLFM1VB36017RUK27X9MIZ5LK56S4F39PMYS3RWW36CMS7IJXN21FBLRFT1VPIYRWSI4VSZG0DJBMJSCNMUHD1TD17C9P16K8LP0PDO5OL02S95V0O82OHEVY43NFPQZ6Y31USN9YOSR0RKR2G90S4WQ7U1LA0QYV1WU53181Y4ZONU7JBLYGQ611DU0R2ZXXTWZUQLYF0ZU0W1JZT1YES');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (671, N'Mr', N'NYBEH175W2UZL14YNI988MNTOPGEZKLW3DIW6LXMR19UP', N'B1OAGJYHT3DBLB9GN1T6ZU593NT6RJ8S1V8Q4K7O84OX8WNS7OFM99HHVE7TQSP9ULAP3JB3U4YU5807Z0Y', N'2ZJ6ZAFY48TVSGFT4ZI28Q6WPVNZEKEQID5C', 66, CAST(19881.03 AS Decimal(18, 2)), N'4UUSS91HYZ61URUDSPNIFRC14BA0X01I5BR50XTOEJ0UTV7S5G88Q93DHTOGZ0JXYNWJZPCVWZ4VQI794HVGSSRW8DN79COD02W6YNTF3DBR57NZLECI4255V0BM25MJAQVOL0AGDEG0Q0QNLV068XWRAYC6CYRSGEBZDL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (672, N'Mr', N'SWBLWTSEQPROCR7T6CHXV7J7S2LNH7CS3FXK3', N'3MIRERUPDDYGFE2NMXPODCR5BMBNEZUPTM582IBBOLQH5HER5CK1A9PRUDGRG7BDI9MT8UL4MDZRLAZT8KI1FSEKWEDO2JVHADYWVKIAQFFX9X6JEMJWO9XQU2WUHX23IIH7C2YN17', N'WH10GQ5XQEIRF9SO4IBSMH4NFKJU2CEA238IH2R01', 26, CAST(9956.46 AS Decimal(18, 2)), N'VTOPROU9AVEKQJ4HYRUQC4H3FNOKCOR9ZS4CK853FP1AYD09BXD7JUQRCLA3ZAWM44KYESXQLRAM3641MF8EBJQ51DZYX235SF6TS2UJ0NMSK4N5G8GK2IBKEFX0SYSJN5TN0B9KKPENXXKWPUHPLJ3A4LEC4UQ1V34FA055YVZC3NNHV0AYH2X42JJEWWGQZDRTS5MPOCQPJQ7GXXH4JRJS50DRGR82F9DPVUOPEKA5B7LBB3GYEC77TYNSSU9X3OA9DIK39RPYHEHYE1GDBAN325VX6VXKBD2NXBYTICPNM8QFHPEQEWLT1777MNXD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (673, N'Mr', N'NS3ONT4H95EYUXDSDKD3TU75WJDYLWTN', N'ZDHAY8TAFZZS0G72TONTTDBFRGY7BOWUHYXDCRYMNNM4IPGR404ZEDIM12II9MYR34B2IUQ1P166Q7W2Z62BJWG3GBB98FC0OV0DDE9', N'YG', 169, CAST(2534.75 AS Decimal(18, 2)), N'5M4CT123MUYKZGTFGFHH65FR8MP4Q6UFCTHLL2NNBNR1N81QDS68FVMZ7D3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (674, N'Ms', N'TOOT7KP2BTG8J', N'929D6CVT6GJ3KN76O7M7JGTAO5HV6IOKWS1GN3W4FH3SW9G1OUP6R2QT9ZO1U0NORY6RLQJLAIR1D0DEPG6CTITU287NEV9FUE0X3OFYA4V9BO', N'8ZBM1DUUK3ECEKW6AUD08OC0972RBQNINI6L881ZJFI0U53HVTQ4LGWJNBCUB3JTFVOVDBY2TEGS6B643KVH0IX7LNXXW6NGWOKYG73JVOB603DB47QQ71SWXHAQD06MQ0', 99, CAST(17718.30 AS Decimal(18, 2)), N'BYCG0J76Y8TDRT6JEE30KYQYZMZH6HE8ZFCCBA041UR5YTGMO3LT93MC8EGDJQZHULDBHU73DZYQ7KZ65CT2WKYVTZ3WUMKBUABCF45TVHFA4W5NEA86XXK9NIIHQB9QENVW9MQ07Z6F5ORWUGHJEDDXQ2PXMN2K7OVG19DSK7ZXQ43YQMNATQB1AY57WSEJWM7GSAVK2PY7EG7LYQ600SRHDT6336VRSF14XN6FQ273R3NTQK86MEJ3UQ3Z4SHWU7FYE2OBKQ9XKNP96CC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (675, N'Mr', N'FFA1C7ZJTLXR3F6VCCR718OY6ZN1I1RXD', N'8LABETBU95BPDJV7E9B7Y0GB1081PMJJDSY14KULJKRRRZ1FEWG0ZGG85YADL95MLSBKKU3UEQOE9OK1YTMS6J', N'HR8NWHCLC7R6H9', 231, CAST(19193.01 AS Decimal(18, 2)), N'XP5DWX96J7BYKB8KOPFOVXLV5LJ60USRGYY5112HSHRDFAD9E4KHXNN0398AE36PEJIMD3INMXVD57GU89RV9BUSAX1RTR2PB1ZVSQWBLXUZSAUWTD24BAF2PPCF1QUVV5238K2HDG9CGV0035YFPYE0LW62EH9V3Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (676, N'Mr', N'YJAUGFR9V2VFGAWFG3GBA6QCVDKX1SU0EWHMKHVB', N'XCPW5AGZ9E46ZNHUKTML8S1ZGE8FSNDG27E8VXXKXQE04IKDHY1YJYC5AQFQ117M', N'SOGX8UVN0ZXC6UHOG07VJWJU9VGGP6ASHQ8H6SR2M37OY45QUJB6AE2V', 221, CAST(15870.23 AS Decimal(18, 2)), N'M7QO8ALRV03LUPCBWSE5WR1HBE02W6E9HQESCHP546JZIABC25D2OT7U68CT9IVOMU43BJZE291Q81Z02O0QSCKNJJM34VVMBUDO680I5ZZFRHL49CRLH4V99GJRXV97DFEDOAUUNHKTC4W2XIUS4946Y3EQO8LAPS1C27GYHWYZK1W4KHUF1H24B8FKV45EWA4K2KZP1VA7A4MX7A57E597PX0USV2DRK39XC20H4D56UT7LHDLYYZR1WU5J5W6TXGQ1CZU85PAR31V3T8AIGFSKB80HWGC77C9D269IIDS9PZXVZ1PX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (677, N'Dr.', N'SDM2RIC43KNG2WRSYZ3VT828V0K', N'O4R99ZMW2OHD1UYTUXTLFW3V8X4I6IVJS0GET38ZE1H9UR9WHX64D1KR0W0BU4PJSYK1DK0QPT6DEU1HO719CQ5RFPEX3X4ACYGV78JWXFFKU7C6UJMM3F71TTLO52NSPW0GD594CWBLW7C82JA', N'MNDDFYTO5VFM0HN849FOVV5PPL5V4H2ODCK4EO65E0T8Q4U1NX64M69QINOTSYKNSR9NXIUG2AAU1XZKR476BY162TMQ0DCFF6FZV6353Q1CVEPLO31OQECUP2K3V3FPXV', 122, CAST(15795.81 AS Decimal(18, 2)), N'NCHO5P4ZDBOC3KRSH0NZS03MJVCA5IUQFLK0RPXG4I524WMF62I02XTN9V4ACTUVGXXHZR1R36UAU1IN9X420UOHRXQWLM4BNAL6Y4FF1QXW3IS8CH0FPRVM9FP2056H2IMKFBO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (678, N'Dr', N'9UZ84UIS49', N'6XRE1DMURUSNUY6WSO96XZ2BQ8WDBX04H7P3PY4VUTDI4OQY1GFD93J7UTH8JTTN5N927UKEC', N'VHZPL013LWOAN402XBOP1UL9TLZAZACF0ZU3ODGNOAQX1RWZU1ID85D1WPWZ0R3AJ9AOAWDJV10Q3N81O0FYRZ', 56, CAST(6072.99 AS Decimal(18, 2)), N'HO1AWSE94IJ3MOMWFZXJEDFVJGTKW8S1SVY0PKPG1GXHL3VDWQ4GE5R495QGYUCWQIAQQL6U9GHXFX9FKGN63CMN4URJU8I730R3S4NBJA6XNTOBWBWI66TDVNMWUM01YATF66NGTCMT5P0A5FNIC00W7D85HQGW95ZDZ94POFOUJZ85MBQFZHOY9X7TXHY2VQJ0QMBWAXUXB6C752I501XSH1321BS6GMYTG8FZ0T41NRM3K0OUZS2TTRIOJ8UZ5OGP7JRXMI56XW4PEZI1NX7NJ40OPRGRY5WYAWW09R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (679, N'Mr', N'U7TX87JC0PTMIRGNJAD6QYKV9LEB7DZOOV8O0AU1BOK2F', N'LK71IXCVIMVENH989AELAKOGJ2PY8LTVRFL99MBKVNA7SR0RSYKAZQT1VQIF8DMXT0M7V0ZNZUQM9HOS2X5A0IV1MJDI3VBI1DDR4SWSYXA506SE1QCB7CWA4LLBMHJ3I7LV3', N'ULS7ZHGMX6FDRH8PYNZH75NX9HUB0C5JK2F2HPE1FF3JN9GKFAHASHZOYVXIM5LK1WTO16789X2S23A00AVQVUQ33R3MRWFATIIQGRJ9281UF7MVLXHBAVO76PL', 68, CAST(7367.69 AS Decimal(18, 2)), N'GNVWWMTAKQTB7GT52I27V2D7R06FH3HSWPQZN832WGW15TOHHQUI6JCEAO5WGDSH90FHQTHUFZBE6C1YBOXQ9ZLCDCPZ36LIOFR4E7RN9Z267X8XM7LSF17AF23D3IQ8ETQRKXJ3WAH9WE5F4RDWLT2M7HPB3DKQ9USE7GDPNHV5JYE0XN9B5UNKQ3K3780IQR01LQ8NEO93YX283ODF48LE68O3W9HEHCFSYCE7FLXGLJLT1B0JVKEH5LUD15R46UMLH9AQ950JA4SMM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (680, N'Dr.', N'GHO7YHQ2DWMYOMT84MQ5XMISN9GCV2DHF14WN0FH', N'N90DC37P0FRZG', N'2LGCIRYKLJK8RLNMSVOW481UE30XTAKQ696HSOCN82A1C9KO81EA1O5UKLYFR0QAYU1IE6U3J0N2XZI5IBPRVAPH3CW6QXV8BZ3I72A27BQ0', 220, CAST(11605.63 AS Decimal(18, 2)), N'1L9YJWYXNCH159USAQX0BR199PKV60T7Q636V8BQNJMX8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (681, N'Mr', N'LIB', N'I0APG3MI7K6HD7NSLWA533AU0T2FK5KM06KIXWF0A42G6VQ028TUPBAFPFON07Y1ZKG6N5UPH9UY0UN522DCCQWPW4SI7R02', N'2XK3SWGAYEN4JE29NCM5FQXWZXG1NKKJOG1EB3Y0EXDLFDNN7SJY4ULBZO4UFFNDT3G3DNXKELQIDCHLATTV1MFTUPFNZ3LZ90RBXKAJUYJI43YM7IKMLSC7OM8N7ALB0Q8DL5OPI9022XPRR', 208, CAST(8365.06 AS Decimal(18, 2)), N'0QOIU1PMJAJ0PTB3QMJ9AZ6OX1F7CR5300PT6O6RI4MTMVJHEKTZEZY0K0LSMI9S5GZO4IW2GRR5CD21IXTSY5P12O962E40VUO6VUDWNRJM8SN7YJAPOGTZRYLF8QZ2NQAIOV6NKW57L2TA118J3EBE0OFX8XNWRHZHH5I2DM5SAMDO4BE7IGY8FVH0G8EN99F43CSWJ55H9J3EAQTXIGEBJQ1MNIM57II179LSJINCAGYWR3PPFH4TU4KDA681JZ9R027050D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (682, N'Miss.', N'1L883JYBAATYWJP1E7AI5INIWL4797B46QLN83RIF55RBYQGP', N'0GMEJDWD4DGGBEVRJKXTLP9NRAICCIP8RRZD1QJPGY7DG8KPWQN729LB6ZN8UK1MN7OKEIQT08CNHW6IQSGMUI5I6O713BUWXLP8JZAEZT6UWXT9S4I23ER416', N'FGIYEHNJNACMCJD8HDUL11UU3BR9', 13, CAST(3805.17 AS Decimal(18, 2)), N'S103R5UJSWQQDP62P8ID9MTB66VPWOJE330T4HL4BP9M9JEAV4BXH0R67PWKA5M3CBMAPCY8ME1JD61NSKTSDMX3CUMFK0U6259YW3LI63A3Y7S0N9RPBUQQEJXUQJNMKVH7X3QOZBMABU441LRB84U7FJKD6QRMFOJ2QK3KI3PZ8FEJESS4SCDF09SDIDI9JZVNB2EHI6S5FVYZ40YDXNU2A32GSQ15KGG9KR8CDBMLJ805AS8IE5BW4SC70YPS4NKYEPEDRLZM09I23W5ZHJQF4K5SF1CFMUGWN1RLDVRS5PVU9933SPALX5UUKMYP9JZ6TME25KLMRX9FOAJ5Y8NWJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (683, N'Mr', N'JD7TWIXQCIER22YPR5Y1TAGS3ZDW6', N'QBOQPEGQW7XZQH1M0CBM8VX9YSRSITK7DLK3A3GFG7W2U5RL2RQSPK5VDFRXMN72MQL5WYBXWW51YUET06QQ2SHTFP', N'QXGWEV4S2BRP1IDDWXUFBW5REMOU3PEFWDVQXO9FF23W0IHG7DAL9BMJQMHH4781ALMZI50SFFZ9T9RV57NQFS5KRBZA7RB8T2LEWHY1DI6UBDQHVLCWJHLHG1876PKN4', 231, CAST(18678.29 AS Decimal(18, 2)), N'ZH7X0RX1JLPP1MU0Y74OTZVE593SR0W2MYNXV7JTPQDOPY8WAXAG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (684, N'Dr.', N'UO', N'VBJSS0UG3JMO3GTWTE4XJ0YWGWG0U8SP78GLD3D14EA9', N'FRNCYN9MDWMA9EKIFLEEPBG3XU9QVNXIQKXZT', 143, CAST(17715.58 AS Decimal(18, 2)), N'V0ZMSRRO4AJPM33ZX5QNAZ3M7P716IUQFARXOA3GS5KGUY2U5WCRJSIVXDF3JPHLFS9CC5BN2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (685, N'Mr', N'UOXXDU2QIR83O32TL6LHOL8XFP', N'IMA8WOFAS6VDMCWJTMURWHVZ8JP13T5POHY96RYKDFE2L7QRHHASGIH0RA0CYD7Z05O5EMD2OADH2SE0SYKLID95ZX', N'MPNX4PV5SUMNAZ8P13AKE4EIRPZ4KOGLPWYPRS7R8S2F47DY90IUO83IA46EPQL3D0YD0JX9', 103, CAST(16163.46 AS Decimal(18, 2)), N'U4ENR8MCWA627NSV0BV0X3NZ01OQIZLPP9XDH9L6G6T7FCLMJH40R2CRHFMPJWUWOHDXPFDRPOJQ9GJNG260ULXMW6W2MVNJBWIYZNX43DA3IMH0VY9HQT13JQ1IJA4T10EDXLOS51WHAU4AOV7NM6SHUFE8MELT9H1I7429AHBPXKSPMRUN3G6V7WII7G5QF37TSL2KTYD5U3KANOLVKYPSA5BAMK2TBK9TDYW0O9U52113B8UIUA6HDEJN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (686, N'Mr', N'51JD', N'VQLMZ8F1FILDU473550YZVZJZTLGNWI5G4HC2OE9MQZH7LPHB930ZYIZR1M5MZDJ0FWQMV1HQRB', N'JCM1ZEJC0UJ5LXG', 28, CAST(8699.17 AS Decimal(18, 2)), N'RX8VKT9URWPSL6A3KQ847ZEPJZ1ERFYE9PWCL9I7S9KB4Q93WETOBI3SJICKSV2BYBIVAYHB70CXE2LTPYHDM92QM3S2XXFX78CT7DSYWIHA65EHXIUTDPPO8R865FD9KFQ6PRMB5IH4SSKGPB5E3MJIIOLF5MSH47PRF7R5WINU7LVG7SGU9Z6YV8N1676JQ0ZL2T1IJZIKYOAWS57C6X740RV6JPZOB447LADERYAAGM06YQ81Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (687, N'Dr', N'P97E0RDAVBBI7OEV', N'WHCE444ESH5HLIL118MNCGHROYUG7L98M929P81IUZQIAE549ZGI4OVGZKP69O668XVBFBCT73TDPZHATP685R3YDM94IV86SJ9CJTPYNMB0UIQ02F', N'FENMS1H7Y139ZYQ39Y4WHHBQM2PW1', 232, CAST(18276.48 AS Decimal(18, 2)), N'DSSVKBXUYUZT8TK2BIRTL7NWOEQP8SGXPHRCFQQ2GWZGAME7MVFQA58');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (688, N'Ms', N'3LR97T9F0HNXXOZEKDFVNTUSALC9QQRB0T', N'KHY1GUWXS27BCUNL5P5Q008LJF24VV923IOOTITINVWVFBZ67WKAXOCJ9DH0RS2WT57T5ZRNWN343C58GWXZBY5E55FG1SQVTZ', N'R3HKK4', 201, CAST(8246.86 AS Decimal(18, 2)), N'5V65L8L5D24Q28NKSPDO86M10J3DDQNJ8M6JJKG7BU38IN5D8UYKSKXY955158SMEKHF140785DD2EIDEP4IR2ROO79EFF222GTY5PC4UQCM6JVVMSNG39VBSTRTUMST3ABMKK7OD0O1Q5H5BERMRLZSLH5CXI97XJJW79B2KY33LTLNBMHGU61HAJ12EVRURG37MLX22P2SIW7RWI0B0TDRH1LO88NP78B4PD1QPFD538YEC95WUFTY3CQKZ8UU1CL9K22JGAMLF7N826CZ3RVRFD1DNGRGLJ4RNPUA7L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (689, N'Miss', N'XM', N'A35084XDAL7GW79KVV3LUZTN0JBM4W7B3AU4AWPUDLVSYPJ8R7V0QE8AAIZOTB9DDWCLD49Z587840PB02UW17LP2JUSW002CHE1CXVMYWUH6Z69SONQGCC6ANJTAH3585WMLNY377Y5', N'N4IUF3YAAD23GWNSKBY3WZQCL5090SEDMSLUM11DDFBOMSL24AW9L0DND5993O9IZOHOAT5J9LQHN1PSKX5PV4SLEXGGRSAO5TOXAWRA4', 21, CAST(6499.99 AS Decimal(18, 2)), N'JT8IVOHISVUQAGTU60OWZJ50W3VLDC2SHBBY6V5O5YYLQSUAUUN9IPG0O7MSSW4FT29Y4UNBU0Q1KK939LRIOS9RVBAZ8DV8TJRNJV5Z6CEHYEG3XIJ75LQ0SH3TKO2H4I71SMKDFRCCESSGV61QTN27SQU1RCEHAXDG7EBBY5SD9EM0ONYDNCNGFZ92SJM3DU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (690, N'Mr', N'IGYZZAPCYMC4MAZ0NAQYZLGZPAQCX3', N'4I2DKZ7CALZ58QPD1CGSP912JN5QKI9E7T64GGPHVSXJXHDW8P6VHCOVH0TWUHSRCLYFKLXLMZXWBH52A8HVCDWU4BNGMSN', N'Z0AW0CGHP5JKNUWV9CDPRHA2BUCSHN6UKH5RBHX30A244L6U0FNEWFMHP7L5ZOZ1ZPZ5O4JSF9OHF5XPNIR20RX4VO23W', 137, CAST(7098.91 AS Decimal(18, 2)), N'HFC8GVPRNVPYD3TC3D0UY9W1759JFJP0FD5LCFIIXK0LQ1VYY6IPC027IB0AM6C46OJZY7ZOVIWE9BB69AK81ZOEAX31E7VR7VE1IWZQ6TUT3OY70U0BL42604P04YANM46DW9ODBT184UBLYV1J7K63T70D6ZM8I77YILAQ6N0R2U26T319XRF2Y2JO9A6B7SPXMC3DKBDKKE1Z5TK3XDBRR50G1MGVJ945JH0OOLEVHK1KJFQ3EUHX5HBMBYUH3VURU09329OPDWNFEH215D9PR7025DCPRWSLP9QI5N046SK8UW8UVSCQL5ZM07XPWYXH31P5QKWHC5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (691, N'Dr', N'1R6VYWOTJ3XMQ', N'067BIXCNSL8IERK0URMLZWFYO3A9XGYUBJW49TJDWT3R5EFDRNLV62E3R8NFN3PBME6VVFQ078P5TNT9NXHAU3N95SD0', N'4CA05EM05WVVZNR42J9WHHWW18RUA02FVN', 90, CAST(6959.57 AS Decimal(18, 2)), N'ZNR895IUZK20KA3IXPB87U35S624BWUDGMZZ9ZOJE4YW115UM1YS1WB4KMF22DI2QOJXA49Y0ST2W63R07H9Y1CJAVFNJMG0LV6DI7KISZS9398DIN2UW84OCZNFOLFEBSG0ZP9TNZHY92G1M24VJL4CRI0JK5T6JDXBS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (692, N'Mr', N'L3GC', N'4QS4S4R7KIBWLNXD8A3FDRQLFGJQXQ31PU3IW11J212F6E9FPWWHALSCZ7OBL0AUEA6QJFG69KDCOBF16301TLQ42RIOCPX1R80V7JWAFQ7Q8GNOSN4H081SJ2OR', N'B6E0J2NDV75RADQMJU0ANFEZXNSQ4TFZCIFYNIQTU31PWGHGJEJLVDHWSF3VAW81R5FSXSY036FJEO2G5B7QAU3Y0J58FVJYVZYQ1PJQFIIPXYH4CNPYOIQX1GSEMPK8', 40, CAST(12498.60 AS Decimal(18, 2)), N'DSE97WR5E9IMSMHJUPN39HPQ8H5AFW558EOBHAD8LL3R0YC7O0J8NOYV3O0PQGQI4DDEX62JBFINEYQA5YMECWIJFS7TAOH4VKMNKY9IXZW76BH5YQKSUB57VTY5Y99NYDRTB2P7P3HD0AD4B2VK3OAJFESRZ4KOQ88SJNUV0D3RUS6KGUTWEOKA38EWAY7LISMS1KKN8ZJQLIPM77A5AOA1OYOB8XK25I815EIV95NE5TOKISO3N2AUIL33W9FAFGL2ANHTPFV40VWU9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (693, N'Ms', N'5O7NFX0Z9PJDFUWBCGE03ZG7V2YP2369ZWY2U3QYXXE30PHSUL', N'STKMBKGAJTN7PM3', N'HOEPBEGSGARBE1111WS5K9C91OKX54QYA1GA3E088688ZLNFQCKT', 90, CAST(6547.37 AS Decimal(18, 2)), N'SG8GF27EJJAFYZQDYO7LAUAVE766TMP9TSGY2Y1JVV4XI9GVDNX7MOTY6C27V1LWU1M6JSAZMOQEQDD4RAS5PHM5ZISPVUNUA72GNACLCXKYXE8TZYGK8F7CFH60ZK3S1W4IAWGGY6TRWN7LAZQXD3LV0Q163BMRUSW1AQI2HZM2LGGR9LQ0U6EYA8HJVADMK1X4Q5AKGNFEGI9JA9WILLXNEYQ18Z77MZIKJB04A6K6Q0HSYY9LEV1Y39QSE8BHF8SH0P0Y8R7E1RXDHY3APMSRYJGAL8P1U2QH7ZR9XBCMNMXCBCAG51RTF0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (694, N'Mr', N'M2BW670SDYAW6J9DJWTH9PG25KD65K6VHUJ7OZ', N'0VL3UWPKF0J77C4U4EMWM3WV7D9UGAALYEJ62N2W4Z6A1936OT3AZ6RWZQWGNU35QX8STYRGCQSNWLUX925N7ZMRMM', N'237B5OMUJNCKT1DKRXNVJWD149G156', 113, CAST(4133.58 AS Decimal(18, 2)), N'H9QD025JY0G6H7UCD963CL3Y9Y9WTAX17H907YCJI3ZCV6S8BPEJ8X6W5R42S9QN3EY0XU4FXNL8MR3260K4WDS9BDUGUAQ8DB9G7RBHKYLLBX9EN1VSOLQQMPPKZOLNWCVAHNVEP3JYR6XD3GTSEYJRLJTI2RHVCXPZ1ZWZ6H2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (695, N'Dr', N'UUBDZN08KQC', N'CRL99V1K40BDQ1MY9E4ZEVY6KPFXQBG56RFPQHIRV0QXYOEMK1CDINSGSFOJF4UTJ57ZLX7SVC4D517WATDOY3NJYYWBSYCQ5WDTHF0MTKH6IFAR8R9MQ5UGI', N'JW57Y8YYQEEPJVO5J9UYEWY86P66V7L', 136, CAST(12609.42 AS Decimal(18, 2)), N'1RYFRBGJVS9XS4PYTCBYLNLTHYB4JTMWWYPTKEQQAY0JOS6XAX6T53ZD64YS0B026D1UEVEFLLNNN25OSEULNTRSYBNFFYQYYYDBRCIEJQ7KGCQ3Z90LHEEDL8V38YZNUOPOOUXFVF1WM6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (696, N'Dr', N'V0', N'1N1WZX0D78NDFVSQVEMG0IN521PP0Z2XBTDDLWKK65723UCDT0A', N'DUSNOUFBSZXH57T5G4XRA7DNXW181S2ISPBO30HPUI6FZH3', 161, CAST(4321.21 AS Decimal(18, 2)), N'MLJG5X4GJJ0PIGF6LQJPRM1F5CKQ2CIQFW8HOIUQP755O5FZF9G52GKZJ4BTCEE719AL7XH3WS0JHWQ0WLATVCOYC8YK70DBTY3EVTRHRD99G0IMDAWQ3LBPLB9YZWVWFOQITC53UT1I2EHBQC7W3N88NETJJSIUHCUSA0T15TWAJTM6UY8NPZSSGHVEILJ1A60PJP0QI6QAQYOTSNOLJV5IK2BT4EJJ9UZDSWM5X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (697, N'Ms.', N'ZXL8QLUTMSRFFBZ2PJ5YNXCHF4CSFTMBUDVMMF8600PL7', N'U1NIZWTY7AD86P1MHF5YT1AVBL18OCVZPM3A6VDP2MCVRZVESPVEVCMSQR6EVL9VEDJKLRGM1FV7PF4CQMF', N'W1PRAT', 90, CAST(3310.18 AS Decimal(18, 2)), N'4J9I1IT1MUXYIF1I5HD7L3M61VYB1W0JN0QM811TZ2SOMACJCAQ5RQX1W2G5JH0QTDBHOF94GK7IAYKQJEZQ5VRX3PP6KV9I22U8ZUVX0MP7IEQYHQM4I9KYLDDYP2JKAPG83BROJ2PJ6KEPZRPU95ZSIWNLGW7Y34XTYHU5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (698, N'Dr', N'LXLOMFQ1F2K3TM91DS5GK1FCF9AYYN7R98JE7R67', N'GH4C', N'5G5PRS7A0WFOGV41GM7XR1YNGT2B02B7ZB68YAPWN86IJTM2RZ942WM4IH9YPV9XK7O4PW35XB9IVG4N60K0S643O2P', 5, CAST(7433.44 AS Decimal(18, 2)), N'XLGK0R1ZOZYDO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (699, N'Dr.', N'TXT1IMMWZNXFQMKH88D5R', N'B', N'1Q6SY8XB4HDUW37QM382DLRPA95D3LFN7M465HJNISJOMQ4PZDGLTN3FZGHP2J8J1QN9Y0L5JLJK232K', 120, CAST(5914.50 AS Decimal(18, 2)), N'5PNQ6O58NURG1MKRHWJWCJJ8H4LMSX9LETS3ARNHSPYLSKQEEXH1TSZL6F823JFQL618UGGQ923MLYFWE67UF7RMT7XUILD898ZMIHJXGRSQOCZ70BNWCKADEEENJM7NOUDDYTEXN9EOF0YH7PU7XHWOXL732WEUJ42TZL97XQ936LYDGXFTRZP7YOGCLAURUJ4BY4HMGN978TIBNUN4GL2JEVUB5WLNVI8MHMFCGTC4QIY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (700, N'Mr', N'SUTUL2VTLLYVR3MAXNN2YZABILYWZIT2TP5Y8O1K151BG', N'EPZUHCGGDGAS199DFGE2BNUO86AEX96K971W1LEV9YQVFTDP73OWK97RUBLB11J4AQJT8', N'FEP4UTJJP7O0UKYJZMW2UQYSB173ICWEWKM5JF7W3Q9TW5O1K12G5HAPFWSSLF0CBA3AXTZKFZY4G5V6C6JHAF8F9XPNMEAOQXIM1E3R1H06I69A1LFFWI2V2O003CY0', 159, CAST(3080.63 AS Decimal(18, 2)), N'54PQNPA9HKX396GK1MBQKWU1FAOM9YTWWP517U067Z5WPB29CR2368K99OBC0O0IQ07K1FD6M5JLQYB37F9HVQPO4VRIJN5IZM5O4I8WEWH0PZIBC74LEIM0BJF5OUNY00M4SMZP6C2Z8OZ5DG6BIJ4GZ4DK238K8I0OCEJQ7FE1GNSMJAS8OBFGW64N8EM34IQPOASYWF3252ZCCR0SB0VX2KR69VHTTAXXW2Y9HTB88DAU6RBHDTS3MTM3IMP1YA9U42G9TRAIPNPP9XZHK0F0HUB2FUQV39AX4FP4');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (701, N'Dr', N'UHUXBP', N'CT2JTDXY8ESL7UKAZ0092P02T7FLLOAKGURUT1GTUV26IGTOJ0QITZAMTZQLYBCK484C2PGYK6E6NTKCDQ1LYRQHK51TAUVIJI', N'AEJM94Y2RGSF2W3OFL0YVS7VNKDD3NOJZH8RPNSGHD429G', 225, CAST(5954.54 AS Decimal(18, 2)), N'1NMIADZ4XTLM7HYV8DAQEUZ1FEGCRLU8V6JCTH6GBXI058WSB2V2FDX7OK3WXMCBZCR1YL1R6TFGBYV7IN1PQRTH8BO8EAIOK61SHUUP03WLYHVQPVEALNL8J9SMXTCWBQV5W3QNSBOMV7JRGXIIV83XLT8728R7RZ98MPTM5RH9ZYDBP150AT02MYK3UIKKJHVVXB5Q4WD3RTXMGWI12RWXZ7LO5QRM6WPI3HDEWEWDGW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (702, N'Ms', N'O4SKHBZ4YU2RW12YO28M31TYY', N'ABHMUJRYMK3Y0FD88ARLCHMSXOMNQAWN4Q90W3727T3XH60EXMN8RXQTPOP5W38COGUA6CB42PEJDPBQN8Q3NNV70GB7E153KR90CQ7KAI62J6FZDYIOD4O0KM9Q13Q1KAYLGAEW05T', N'RXCOQX2TI6OZORKY4R8FLNBYRTKHIN5L7KLGRZXMXNPK1O3PXEZA10E4LDWWDKBU12S45375TMHXYQW3QUK3OUK65HVD218DBVJZWYJT7UHEIH5UHT6I0767ILZO8T2SD4L27X6RBQWTD5NOB0V8VQ', 214, CAST(7350.01 AS Decimal(18, 2)), N'T0XNX0JHSKYVQPHKE4QXU3FJYJ35NVIG2VSN82UMMFXX4MNOEUH8PZHPKEPEWETX2HTUXTCBA3AE6IECVFQTD9Q2E32TDGQ8LZVNSSRLH6YLP2I20DIHO0JSRQFTQIYUD1T6NQJ3N4B6B4DCK0TZX9JLG2W1CXVZ838N8BF9TFTJOCGMC39QPYW4I8QKUHQQ9CY8WQ39KJ6IFZW3M9O9O4996350LVEBO2ABE8PMZZ56SEO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (703, N'Mr', N'NQH1273', N'HSOT0CTFJGPG38GPHHJ6S5I88UJ3KLN7BJJRYFQPAAH3LHH7TOFJMMCCAFL5SPVYTI5KOOQ1RUWINFNQCCAV53KP67HJUKWKFJ93CXI5YESSPUOUSVTGFZSPXGDH6766X', N'4PBGAZULDRO1EV3MKNE6ABCUDYBC7XTXMSHDVGWSG4I1O49S8EBLHK2SCH3COHEGXRELDPQ3RLP5SA68OI4SL8G2QP0EDJ3ZQ2', 164, CAST(7127.89 AS Decimal(18, 2)), N'BNYLTG243P1SL2OP4UTCPLPDJ29OY2HSFMPXXTI8057O7X0WBG1YLBSPYK1Q7D6089DYDQSABLCJD06M2CCI0I63UZZCSS0MZ7GYK1JLORMZZ8CYEEOU1NZP294DRFHIKPK6J820TRT9W64LN0YE46LB7RVAX6T993F9O5E6CO09UQ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (704, N'Dr.', N'5KCEQD1F3BYKKTSI6U33EN', N'235JDET4XQBSZCINQZRG4GRJ6WK1YR8LUCRLO8HEMA12E4G1YJG7FH8MCLDHUS66IPXMKXYHHDTTEO51FI3FA06D4482V0JU4', N'WQNEIN8UVUWZ2BUN6DLUPBBVOPCP7IQFQ69I13L5DDK8TPY2IWXL48ELERQTAJND3H9V2CL2RFGBQ32ZQ96BK5BHRO3ADSVUQ74CF306AUUOR2UBPQ30CCSY6S4D8BOYKMLJY', 177, CAST(4719.56 AS Decimal(18, 2)), N'V5IPQH3ED48YSCR2NXK0SRUXHMR1F5BHHY05EG3S5O15F6LTLLDBAQ04BL73P2Z8SRHU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (705, N'Mr', N'ULMO9MWRVNBWHM9BVLNYI0EATXYV7405H8', N'JP6TG0KYQ1OF8NGB1CO', N'JN900PAMPOUSLMPUHDE66NYMYZ6V34HADZ7FRBB2N', 247, CAST(7441.95 AS Decimal(18, 2)), N'MO6USU3PPHB0XGUR07RXWTT8Z23PTDOPRHYX7HHVXEM4W2RM4GSKQWGSVXUPRDVBTL9GHXKIPV0H7OCWBGLDK4YU1629MS3JJAAATA57V9VVWYK6LYDASHQONFEBUAWWRGYXD130BDHB82Y2LWNOETR1JMNEWTCKDY3F0NSKVDZE0FGKGBPYM7HYPXEREP4H0XXAZI2Y33S1UC0352XK4EX5H5P380668HE3H6LY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (706, N'Mrs', N'T4PRT6J2W8WAWXJ7IRPTU6CUB', N'VHIKIFOWMHUYOJ5GUM22VBA4PPWLMJY75EZ16MA', N'2FJFQ29Q474RJWOM21JFIL7JEMF9251BIMLJ2I93LDZ96LFAR59AJ80G8003M0NY5S8X', 20, CAST(17438.07 AS Decimal(18, 2)), N'QUJFG4DWAMBRJDMZSSTTYP3XMSCYXLZHZADJEQ11C7XEUEP4R3PDR4A1QLSNRFYPMUS9Z3K1RSHRSP28386TWMPU0CSSYD9W88R0LF4OJOLZNI81IJJI84SZ5Y9NAR3DIKJJX2NN4IA81P6H3RAETRO4FSUM6HDSK7H3ZP3GWWEPUKYFSRJJHOKQVE4571GN4INT82HENTIXDYAUUFTFXTAVNQ8KLY8UFQKCX47P94VN6MDW49AS71PA7R6IUXTP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (707, N'Mr', N'1KRN6F84G76TTRYXI', N'COB87PQOI0HF9MVJ7EVTI3A3INSAJ3A8B1Q601XZY83L1JXJIFUSRHH8E8QKXG5EQ947WOJ5HVVA0O1ZP9R39IGTKHSRBC1I3OVSEPMTVOBVM78P6QUOO158SANFWRU4UC7CS8KZMY8K6K7D82LL', N'5JJRFT5LXDT64HXWRSAL4A2H5HLP04DCH0MLPJ3EVVAN7WHIP2E0YB6UH2MY7FKT04VC67OWQ8ZE98Z3ZYPCE6TS4NW56FAHNR7DNDW', 87, CAST(11024.40 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (708, N'Mr', N'WN1XOWIDSFNMRUF55ZB82H1SGB1PYXUWOBXOL3VU5TMTGUFBD', N'DU2IN0427X4U619ZWXX5V2QSK17296U68MGI5T58GXE04Q0JYDC5NFMB49XMS1S13XLJKRU2RPOXN', N'B2KXU2SDY4GM4N1IB38IAJPBYIRI0MGM1I1CLVX1UJ61ZOD0PP2J5DWSC9ZBAADCOTKLLPWF56ORCNC95RTAJWHOM9ZCVMRK5TD53REZSMEYP4FPWP6IG2SSCW', 159, CAST(10372.62 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (709, N'Mr', N'LZL9ZEL9HCVTFUKQ', N'OU0O4WTOJS05EVWJFE4CX64GY6JADXQONFK2L4WW8EDTJ', N'CQK', 70, CAST(16410.30 AS Decimal(18, 2)), N'NHMDYXQ745SYNP0CBFBNFNE0955XPVCB61I5RI6BKK3VXCJ265JHH2602L4TRSI8THRL6VLS9Z2UKJ3WL2RJBUT4VI25EDJR2U2GLYVAKQ8HZBFJI77O1ZWYNNQOTFDVFASQGMBN7GZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (710, N'Miss.', N'GWR', N'DY6899SBRIQKPYDJBL1BIZBTXBH84JSBXJTK34OHVBN1C1EYJP2SR7WEMDAYRK77PFM64SF6XKF6B9HWXJPEG0KQ', N'IF3MIA76DDTIXHIZITAF5F8431LS6S1982WILIXEPIT5NKVATXHIF4E37ZIHPE0KBK', 189, CAST(18793.06 AS Decimal(18, 2)), N'MB4J3IN75UQ2X3SY77H5DC1PJP3VVKHL0BCBI6LBR5PKKPSDUDFZZT799F0DFSCLD42LQHF1M6D8MH4UWP1H5IM6421367WZT47FM7MCYDDSFZMSA5HPRUGVIVFBVF9EEI9P7P3OJR5TQ5G9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (711, N'Dr.', N'23H39V8BMWPB9BUBFCJ3CLJ', N'EXQTPPB4GCWE7UQ9VV6RP2DVE08USQPVWIPUOD7V32VXKIPPZ4L', N'VL0DZWVQMM2GJ6AZ9BIT4OSAMZFPBI8U2AZPTJHMKERH5IZBFEQ9SR57SPR0G6E3D7E86K6QUW9PWB5304AXSY2B5SW3SG5E0N3X3R4U70FVHFA', 171, CAST(15271.03 AS Decimal(18, 2)), N'0Q67YOCWRQYXMIXI1K4JLYSM3AOPP5B85JUP37GTWSGY4QX87APKBP71XK4NZM7LFQR3O');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (712, N'Mr', N'C', N'DYYBKUFPGHBPN1HP4VLINAOM7GBVAJVN5JHYKDATXIFMQ59I00K3J2H3AB44JJEWLOJ3KJ4QLRK5V1W26SVAYS322EO895AE4I12L6YHVUISIC78F1YQO3XTKH15UWGFG', N'JN0CVHBE522EN2XDQUP977Z8ZFPSJ6TQHFJ5GTIIBPS1OQ74225MP0ACNRCGSIUZ9BW8JSWXC7XIF', 97, CAST(9918.34 AS Decimal(18, 2)), N'FU4BMSITHCDGIFGQWGBSRI2SU9LUJEYTKYUVG02FI43SAI4S5OTBSVHXRBHD6OA2DJWJKKAWDV9NFAIB5TOVLM1OHX34IP8UT0EQMK7KDWYWLUHHT58DZFHRI82MH5DNNFTEVSOKM3HOO52NFMBDHVVEJN7EIK38IA8603L0GNRVXS2C5F7VT06SKEU8KA21096DWWMC0AWT3ZHRKV83D8EH4GMM8CG5LPVNLPF8SUUI4COKW3OP1YORVO8GAZ4NUQ8E4T5VF0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (713, N'Mr', N'S8QXYFM4JW35PJDXVF5H5IPEH4DN7GJ', N'0C0TGZUDE39BKP6FS77KP0L7H45TMZE2BCBV8MLYVAPTJ9WBYE387WG0QSBBU1RFP7Z8DB76M8OFBRO88TU7V6UFVA4GA94UJ94CANXN7XLY80PZ43307JKJCKC26', N'K88KQ', 146, CAST(10943.43 AS Decimal(18, 2)), N'JEVDSS1P4OR4M14SXGZYTP6OD3AG3YT91O4D0B9AZZ3MLC018EG1HT76ZOIKM6UH2YWQSM0BPJP6KRIXG2PFTZ6B5TBR6ONT4MKNF98ME4CY30M86K4KGFO2RKLYA850VW2Y7UI7T30ON88463LLK3CPXHVUN9B5ZC26YN0B2WQDEZFICGS7NJGRKC0PYNJJRVOB515I29JNCYAY2DI6H4IFVBMLNADFC7LJA4DAB94E0SEL22NL5D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (714, N'Dr', N'RV2ZLPY9P5SY7AMZQEQ3TU89', N'WC4TW1NBYKW60XKW6VL5B663NZOK0PBUHG19', N'060G57HPG1QSUSSCUZL958AI3RWO6388SDY2AF2BB6GBH4OM67E8YGCSWIDDBTICSH0GUP1FWAYY', 133, CAST(8700.60 AS Decimal(18, 2)), N'NC8FUFJVSV4B5CQNYZ7V8Z3F3W0JLMRAZ5Y71OIVRDCIWH98CEPLXHTN8TBXE0A54UBZEJL9GC4UNLJMNS66X5CHCAY8DLGQ36D259TTTG4KDY0NAP9MU47ZHTM4LDWVVDQG7HHEYCCH0S4EAAYNCUWZYEKBMP8GJ9O07JGS8UNHRQYPP8UAE8I1GRHSW5R94WXQ346QU5FH7F88GVMEVX1BRNJG2NW23ECUT7LK24G9T1U1J9C1JDE6VLZGLPO79CET2DE891CQHRIPTHXSBVJPZ5Z785ZCF80GM0Z6V3RH1NP339M3SVVDTOTWD6031ZB8R23SHRX831OC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (715, N'Mr', N'BFT2YX2CLDUHDC6HVSZPR77I', N'E4NCS5I40JMZGDHH1FP606WC', N'Y1Y39HZPZAB155S1PZHO3IZ47SG5YCNI', 8, CAST(9140.81 AS Decimal(18, 2)), N'W4YJVJKDMMX73SO2OF1CGC16UM1XNAR0HFG22K6FQV4F5LEY95EMM00K3SO9IMPBVXQNBM039LLK7L0872OIV5DHFWY9VWX35SK8VQMM4BC1EFCHRG1FY7FPJ88FNQ7COHFE1SDHG1DKSC2ZKGIFVH5YCUOMI7ZE30DW0XGZ2KZWTVX758U68SG6CG2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (716, N'Dr', N'XSQGPXNSGA947Q8PLMWSIC2KMX28JR3', N'B891PJWA2RQYSJ1NZMG2LKCTDG0B2T88A9GW92BZPODLRJ8WNI1JGAGRVFO8IL88JINI25DWBGDX6R2U84NKROR0TO0TE2G4G519VPTI458ZXIL4DT0EXNHUQNPE4KH8Z8H0PTYJB5FMG', N'0XHF92BJMT7OFOK9D7AGAOG1TWG1TRNMTN57AMFX64GPRGR3WWL5C23BHFLCLAPV5LUSJCYRRD958QAD5D4X6I9QKTPU0', 70, CAST(15786.97 AS Decimal(18, 2)), N'3QY82ZGSZ6ZM0JDBH94HXHG9CS6BJ6KJVAVBLRTUE48Z986OF5P2CK9MAPW9T58TMFRQN1QQFA2S9HZ4MHWDGH7A191VUK09VECTGF1DFZM1HGDSPSNC8UC48GPEZUVV9TWU45N6GIYHV5TKW862WO0028L0QMDL3RSNJIOJ4GWQWV92N4IRNTYKTVSVKMFT4DD4D50DJMXGS947ZJDM4MXAS7UNQSZI02LIH5OH3471VISJRKW09TPIG3B6BCNQNFFPOMPUVVIZEVFAEAW5WY86D22DTH6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (717, N'Mr', N'BO04CWVG6OX1WCO1R05KBQVLQ5TSUF9O62TJP4DP', N'2A2VFK226SN7I8ZEEKN0ZO1KFKVH2S8U', N'CWFKJ6LYKKXTEZSX2Q58776SPNB38PM4QN0DQO63R6TK0C49YMRZPSW4QMVWUIQUXT3QZE7EK1H0ELRCI25MYNEXRVN3S999GZM79EAJFCFOBWQ4UIESC4VAE5Y3R3LAR8JFZK34S', 49, CAST(5409.36 AS Decimal(18, 2)), N'HGDF22V5U25DBP3KO1R0GHUO68CLJC0DPRHXIZ7CFRATTVVOYHPSQ6A0MP8TQ9LI2SOK762OTFLO60VBDOM2M8NJG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (718, N'Mr', N'FLUF0NA80GJMJ', N'YKFB84W5X2PCHAPJWRUYGSE8IGVPKZEJTTKNK35GRU2MC7YA5Y60DVX556TS97KXN5JNP1YSLE7LQSWAIKJMTD5XVFIE', N'6M8QMV5J8AVHWC3BS3G6RBQ4W3CA4AE90PX91OJ2Y7UBEAB7CNS0OLUV', 242, CAST(8712.52 AS Decimal(18, 2)), N'BSQDM56RR16BGSE0YALLTLTXG2MIVT453PU9YFSFIE8U427UNM9CXUOQZTXKJNVXW17QY52II53ECZSDUSV9KS7813A5I8WUIAX3UHVIKQURR9DZ0JPQSMD4TZOUUW0999V11PIDXCPTYFHSQA4YI52WXT9VS1NNQKIIDCYB1CTFWJ6EHW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (719, N'Mr', N'KTFE6', N'D6J94Y6OAK3ZDFZOCFD9JAONY490MRAJKI78NBLTPM70FNGY68J044R3IWB0O61IAJEU7R00TJKX2O7ANBTD8AFFR3PR0L5IKPPW8LQF8J6', N'3UJJUFYWLG6EUA4KD', 188, CAST(5802.96 AS Decimal(18, 2)), N'KS1Q36Z47FNLVO23DXZEEBTX6CM0ENVDVX3VOTEBE7RWDRXRUGSHIHP8Z3KQKYPJK9PYK6EJINZ6KXJEFV5YVEUE7VWL8NQFH7B42Y6N18YVHJN2K5BPTRO6EBROATBVWKODLFCHOHWMGZWN8U03C1MQJ5QQ6HD8X2YXV9G4ST0BV1QEF4GGS7JUXYUFPMB74OPD1YRYDVAI1AUHFBB11WFPJ3ZXF0F6IS76BCDGCH3WX0TN3C0DA9688ZUXYUICF3082N62YVPJSISIACU302W9MZYBIFHHYQGT0KKF6XFFJMFQ7BNM0F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (720, N'Dr.', N'3MRF8VTI5BNMFUV405PIJJTYP2N69P9P6NMTUF75TR3PTW6', N'KU1TO0CDCO904Z3318Z7E1CCYB22KE5O3TVW2W308R6WFPR9IMDZJZ7JHOUC', N'KGFQLR5YGHDLEV1DYUZJ3SWEST4SHDOGADAEGD8RDVYGI02BDGB9KT4RK1XRNDH3TXA1LNXLL757UFWSRTF01EVH8ITFFH40EVNLP1QPJQOCOXX555ZU', 245, CAST(9460.21 AS Decimal(18, 2)), N'D7QL3PUKJD7L21YHPREX2MGP0K847RVHJE2MAZHPBDW2B1DO9TYVLHARQ0LJHPDRHQ1NYC7PAOLOQEEZ7JVDS0V14BV9EX8M04KLZPPWM9LXVL1CMLCXUZZHVZJNHYBCGZNLUS0HUYRJFY6IAJMSLAR153PZ62FNX8GVYGHTLU3W8G2XT0DXCIQ68MFQ30BSI3L6HAJU1S7Q7USP0S55OIBFIANC0RQKJAD4UW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (721, N'Mr', N'0GSAPOIKSTP57N9', N'ASXILWB4', N'G1F1TS2TI', 216, CAST(4052.21 AS Decimal(18, 2)), N'JHJWJBZZDTQQBV630S6O7M7TA2M7WU4CMO5LR3IBAJ90FPC7DCO77W9PLHOR2W5VLY8HXE026WCOJ9NXVP3C6W4QEGZAFQ8DDEFGGU9YBL1BJL5CUQWDTSPOTI3HEQNFOZA5U6G0F40KVT6TBNFOTUJLOQMYRSJLYLMKAZIN9WXOS4T0C96RAYMTFPH3KI8NLFM96');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (722, N'Dr.', N'2XGS72ALYJOSF44SWY5SXZ0I4211P', N'155ZYMVGW9KTKY1644MCED1R2YY8DUSF4AK8TK0KN1SLR4QUWCGSPRSO4EX0ON32G4O9DTCK42ODLFZX73B0E0QDIW3FNZV0YP4MFHH30VON3E2OEZSKB2OGE', N'335SZSA3Q2PHBPITBLOAAHA2YT7JW8OW1KL9I4XDU19R8YPPI0HG58VLS2U5KR7HETGR49A6NBF88JUZ4H0VQ7RTOZHGASS2URDEIYL9QATUSMD97U12QBR72N25ST', 100, CAST(18876.13 AS Decimal(18, 2)), N'IB5SEWXVSJXMMILSAZZT4LIE3ROA3CIKTPQULIKQWKWX6XWQ1S4MADHXTQON8NRF1CTWRQ6SF9XKOK86UY8A8WAF8T1UUWI8SGWT4ZYAMC60GW98IHS9EG752DOYPBYIROS7NE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (723, N'Dr.', N'X6IONWGDHY66B50Q4NOX89HGI2WXO418WWLHARH8BJG7MQOV', N'QGPWX46NFVBDHQM80IC394UF1N6APV1N84R1D4YJGFY6D1H2Y2254A1LMAU9XVYJUN4DYKUVKSNT5N2063BMTVJY25E39PLKHECPW3', N'VIDDG6FH5WR5G', 231, CAST(9179.62 AS Decimal(18, 2)), N'UZXOVP9ZBKSCC48UB9RQRB0LAEN9R41K4GX9HRCFTDCEWZMEIUGYWNAJZCEH1Z87I77V6YCJXBXDZMOAS9RXN2OG5EA5DUET55VORQ8KHW1KPXJCN4PS8AJGJRQSO762X47UR0I206GR13Q7UXH84MLUMF50ZGW9PZNLPPLNLNR1USFF0IXQQXXAID8CUI2KA612G4I5BUNHUJZUZPZGI5JS1C3CH9S2K6QOQDZW0SEVAFFYDDC5JL25N90316N21LXOTB3MQ3GQRNHLW4Y3XNJY4L0HCWUT4BUPIR52APEG5BD0RF6X7K5D1YJ7ALAU8MMFSS25YWS78');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (724, N'Ms', N'EYDCSTNO15KZJODXXAEJIGC6G', N'D76LCN8GZ8U3UKBQY46AT6RMV62CQAC320XFNA7BUPFVELR06ODLQTA7GJQ5KVPOVR0TMW3OWVG4QW79E162WRC9PPY3J1QY0QZNLXE9LPOVC6HJCHQJPMR4FR4WXZ5V4H3ZWK', N'W01L78FRPCJ05CVVGHWDYBF9W3RDV6Y5AS5M0JKKH3S0UG03LAFA92GLLSO4H2VJDDPD79VXWBWUJEEG3OSLROW7CK0', 76, CAST(8559.80 AS Decimal(18, 2)), N'TS80QXPWMJ6GNK7YRPFK7IPY7YC1ZBRX5Z5QZAUC4B028C5IXZ43SNVA39SSKOXAR8BOFHZHV2GVIMPVTU307O5H3UMPH2RGEPA01H2G0N8Q7ZRHKXZQKX333TKKU9ZSAZHSBOTCRN0JGE94255J31VHM7X7WHMQNFG7HZ6V4NYWXJMOKFHO4GP84053RMF919V1Y1M3Z9FG2ZJ2L9NGZXL7P73HT24H7OVNNLPITEPU0964G3IIYY94OOBRY59W5X8D4WE0J5NL7Q6G1Y0QKLI9FQZZ9YJO5TP31S0KOIYTBOWXHVQZ4IBJEZYDXFQLLZF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (725, N'Mr', N'PTATRE1F95NW43XT8MW8', N'HMWG72GWJ8FR2A69DZV7UTICLKTQV2INRT9WT5J1YULOI82KY8Q', N'UF3F89NHQNWCEIDX6L16E71S9AROGI0M8N2G8HM9RXQGSG68AZ1QIUTMEB5XHY07M93QGWPPZSFGHLZT3JEGH94EUF2WBOSTWITJCGSDABRQEC5SBBUYKKQ', 64, CAST(6051.90 AS Decimal(18, 2)), N'13F8YG22NPXQT1HE7KJMH5O1UNM8RC8C8IWEFH1OG9WP18JWXBE1FTWWFDEATUABGLHA43YQIV688Y0M3QAGY6WFM0Z23QULYL8FQ8RUDNIKMNNGDS72JUC9P2O43WMR0K9NPKVUZF2AOBTZCJOBIS248ZQOKMQH0QK1DZQTWD23R2LD8PRK7B97I5FQT79DOL9XRRLDSVE5PYC6DCFVU6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (726, N'Mrs', N'U2APG9BZYM', N'0CTN4KVN9P1GQRZ81AG7FT9Z7UUDH8SMCHME0LR9AWS8S5XQ8UJOSIK73UGAQH60XE485L8FI6WI1062W34MP4UTWFB65HISPRBD0PLNM35LM162NDEMCJBSKBBQ9291N4T9PS27IH0LY97U88IS2W', N'5PW0USDB0MKYSGHNQ065IDZH99L0UT8CRFDMKRJHYFQSS60UT68JDLVRQERK7CH6D76C2V3ZHO62N6P39R6NLPZ6KMW50YA', 27, CAST(8382.43 AS Decimal(18, 2)), N'OHCJ7KZZP3PE6SOMH3ERBX3HJT8DHRDJIBKFE7DTTVP10J6EPPXSFEYREU0EBLIXQ5WU788AQLYG71HZNUORUL33DT1J7YH7CSBVNB6GHN1UGIJCD0RGXR242SHE7O3R3R3FQMCBN897J8NV9O66719KP6SUTS8TJARPE4MRNFSPIVLT4M4IHWJ1HIQJTIHVZFN9GYG52EIS8K2TLYQ7NPCMQP7VE2Y5XXP27BC55ZG2ERTWGWXURA7A30IR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (727, N'Mrs.', N'V63UE7D6X3E7906BLP7P97SUQZ4B4QGBIG0XZ3F0', N'5GITPDVDJT4XH8XDUB74VJPUB4HH0JHYRNNS6ZCTN3GRTBPMBVOHVSKMQOHLWEC0C65UK46VYDHR2X0ZFU5', N'YJFLZORY382OES3KPNBF5TLN80RGYXYIDL44Q43LZ8KCMARSJCGCNUF4XRCZW', 187, CAST(4409.09 AS Decimal(18, 2)), N'LR0GDUAVZM9MK1O998YWBEH43DNQFZ7TLEK7GM1XI1HAO878I0USKUF69VCZ6KF0FG05GGTM71DAX7GV6E7E4E8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (728, N'Mr', N'QBPFV1OAXPAQWXOE84E3217M3PSZ8BI96HJW3FV', N'VZ3Z311IHRX9QGFN5V17OSJHBSJTOI61874C26QJ3OE6F81MICTJTYG3GLOAI8UZLW0JC2LZ4H30EC12RXABOM7AQ1VHIG1UTFKJ7HAGQUFBUFO4JLJKYIAZOQSA64H', N'Z5AKASNZTLKQGX991Y8ZWMHMUJ606YR4OO8F22ZZ4KIVRXEHUOQEQXECONPRMNTUTG1ROU7ZY9UC4LUX4O5H8DDQAWREC7CHQN1BVNT', 57, CAST(18401.17 AS Decimal(18, 2)), N'ZEYK91QXLGU772R277KIH581FHTSD0V07962I8D5AFOGC9N4N57XUP9T5W5S8YKKLUZYVPJZUE81GRO5TP58TX5H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (729, N'Mrs.', N'F', N'G96ZRIV9NTKT6WFBDRXXXGWB4LVHPZAMDRUK8OC1Q9X4XGTSA', N'HQFG3182SRNYHBMG2AHS3SMRXDLHJI2GU50HXXN8OOLKKDZF0L9K61XO3OJPFQIAP63CA5J5N83E726JE5GY9HAT8CD8DYSX6BVDAM5V14XXXIH1H0BAAJ08WA4XRARPG68V6T9R0KW5KDVPVBRDM', 214, CAST(6108.88 AS Decimal(18, 2)), N'');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (730, N'Mr', N'706KMICJQY1X6O32C58O1M60JFERBT8FN0U6GI3ANPKJ88BU', N'XE6KR0DVV6NDKNJYGE1V2OFW7NIRENR3771VFT0U7DT5ECO9KY0EQFF9YAD3HLG7FJ6CLOIME6NO', N'MMAMH0I84RC8HR9LVNRJ9QMVOIEE2FJE2XJLLKC89RG5SBW4FAG3M38WZFYYL46O8Y5J7O0BB', 70, CAST(15871.80 AS Decimal(18, 2)), N'WL2LXBV4VI9P8XL73GH7DE8ZYJTBQOPHYJSYW8HW6CW6W4G7NMUP0SZID2MDIJD6SSQP5NBUZK10H13U2MO4T0G6JAKTM3EMZPD3DR1ZAZQGQZ0BZRAVV8DSBK5U2H7V5E0SN0GBKOTUA0FKA9UVTIRQCLSTM6XTRUABY8NZBZB6EIIA4LKTNC2NNAF28NPDR02FQ4M1LVJT7LCT3HP1M45FSMOOSLRNAXED');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (731, N'Mr', N'03PQQ0LT51', N'AHUY96FNDCSSSW4GXDMWMQU', N'AIAH2CM9YSZFSZPNM5LEN4LRWU6CXR95S4SQMHCMBC5DPS66UK1UPWV5WIL86AC6ITNN7Y04TZ', 131, CAST(13560.04 AS Decimal(18, 2)), N'2K0ZJ8SS8F2YLYQYNRNVNN3GX8Z3WJ96YD0XO23VDMJ6LQ7N0PM6RISFGK1A8OWP6WZ7XT9LORH03WU71B36W2EFKLG40SNPPU0PQZP6G0I01SCJPT8WKQS3HKNCD4KV4RA9W4H2MWPVKEES9WE7KQ4Z1W86CDTBGMV9H3NLC5AN0WJ25U3GQDAEMB7ZWAQ9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (732, N'Mr', N'3L8XQLA5UXMT2X1C1NRB4KYAQJPW09CAHW61HNTNY', N'COWGDZKRQFOSI47E1J17DKTRD6HT1R7KNOMLAZADS01D8CYS57V2OMSRU426IRQZ745THM419OFDJGJ18PNTV4V0WVQ5W3V1925374AI2TT07E7EL1YT3X3284XMW', N'AZ723OZICPFFV9MU3W4F10YVV5IZVJX1QTK6OGHK6RZG3DSEK4W8PJ2A0C6Y60MTSDP1OF5NEJ991ISHC3ERMOB6R96B9IE655OPORQ5Y9T5AS9IKPM2LV632I9F9TEV524VU2TLD', 117, CAST(9362.36 AS Decimal(18, 2)), N'EFXI4B69TUEFHY4D50H9DL2CHM5VNP1F1KMHLJ1JX6XJWY5C2MQA8ZPSDL1I5AL3SZEWCNSMZYC6OJGJGST1ZR61UT3ZIIDMLTRWK90ET4BANJ4U5H1CHK40SC1IJT3GKPLVRJY7SE7VGVEBP9T0G051OQ487HU00UQXY92MJUK2C9KWXQTAZ20JJK61FQ0AJ7UL5GCF77HMG3OF57BK1YU6EE307ST9I4EYRGED2SKD2GVRV7FJMY6WRY2YC6ZPS6KJ07GU2AI9DG4XJB5ZD9NJYI6SDG1VSVKWVBQORKHCGXJAU4E010BIJ0LI0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (733, N'Dr', N'0VD9MSPNK6DP2JMX76WE5KKBC6QZVDT4CYJ2XGWW7CP', N'55SD', N'SDV6WY0ORJWBK9ZKN5HBV5VXZ7OENHW0PB3T8WMAEK2UZUHUW9FN32DNHX6OAM09NVM955BQJ6WB20Y5QTHD29XNYGBAPX0SJS7388OQYO3X52', 187, CAST(1158.49 AS Decimal(18, 2)), N'GL8MGHW828LG8TSA31ZWX910TSK1CVP8N33W3TG1EM26FLRIQ8XJJ4Q7K7TOXUV6ICS5PV79LXHB6UL801B4Y6PJDWBV0S3KQWO2SMSU1NYLME1PMKNV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (734, N'Mr', N'XRTNFJGMQJZFB2WF1PS6C9D3ZJ0Q907TVDELD3KBX', N'HAFU4E4Q1BVSHNBKU52XCY3V26OM4ON7UAQ457UEZ61RCBFYKEA0QGRI6KRXPIMDNNY6X7FNBNY6XCIRRP1PDNHDJ7XKFXPGJN3PC81DZMP2HLLU105ZGX006KNP9U8EYHM98T', N'HZ1YG4M7EYYBPT01M63RATVWH4RFD5ZHVVUBOYJOXKS49XZXXNGQ2B9N34GCC6U8Y', 160, CAST(5287.05 AS Decimal(18, 2)), N'R8BN8STKB9TTXKA5IGE8G2A84XYUL9F471ZNDFJTZAQE5ROTQK448M2OX3JBTYY2TOMWLMS2WL95CW2C94415BWKYAQ9W8Z1BNLH5R84R17NDWC0061PUXWHR1XAVI5OL8UOBL6HW0933871YP9Q6A7ER3P4TX88VI152');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (735, N'Ms', N'DTZ4RUKGUHJITOEPOVJPCQC6KXOB2Y4H96VK4VS56', N'IOOQQXFWYM2JERP0MN2JSLB34EB40YBL8MNBR692QOO36BTN9HZM6AMWDKLCMAWZAHAR3E8GEZS3W7WTKOVIZPFY0QX', N'FTZPDOMEUQ0QMK5UIQO9EKM67JH7BQQK5SH5X8AS4NHJNDIW7IO4KP2V7THU6F33ZGKU2ZW9GV4R3', 245, CAST(6651.09 AS Decimal(18, 2)), N'PEZKSUNTDJTWC69FIB0FX7W2NYR18L71ZA0UQMHDRYP6AXL2YF0Q4MQIIXWU2LKSBSW25FPVTNOZHQRQDP2SKGWCKIBTQNA5DXUI1JWJQ4WHYQ0R56GDJS7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (736, N'Ms.', N'6P9CKP7NF', N'LWGFSPSP02JU8J76II05ORSYFDZL1CRCG1UHJCB7E7TI40AGH8FHQRJT4I0FP7NNA6E7OQN57TRGY9TF3J3SW9MPI0C0CVH6J57YL2RRLAAX02VVPKC64UR1K', N'JU0L0S1MZGPMX4RFMOKDJ6SNT7MENOKBR59MTLFA2DG44F2RI09G6QIC2DRS6MYBVEVSU4M19AB6QNID5UWNF441MXJFTM3FF59QK9XDD77WFBMFUDNBQAWQ9T5XL67M6VRLDSSVXIA7', 245, CAST(2015.05 AS Decimal(18, 2)), N'VJHN3V56DJMKW9PUSI1GJFETHKOK7XLKPYMH18FVZQ3F4GV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (737, N'Mr', N'R7TNGTJT68DVC29', N'PNEMTBBKXT2VT0RC6MZPOF5HBSJB2OE6EWD4CZGYLG51T', N'8MAA4LGYSO48', 100, CAST(16677.29 AS Decimal(18, 2)), N'GLK0QRBF5O6J7LZFX1UXN7TK36HTBZP1OS3LDLTYN6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (738, N'Ms.', N'SULS2EIJKMW8DY4FI', N'QBESO42U09HXA1SZH8FVHXNNZ', N'GR3ZS60KPJK112KSE80OT17VMGLRNE6NCVB1SXP37CI3Q93IV6EG4KPFJ8CCK9XBCXP6QIZG', 55, CAST(14958.72 AS Decimal(18, 2)), N'D2WNDRNH3MX89S0XKAI45Y4UFHD2C7V9GVFH6J31OHLFRJUSCN9O526EX28VDL5VQORDCIR17GFNDP3VNLPOX74DP1J4B7N3CQP2SGFUW8MI18ZC8SVHYIJDNBYNQZTCBN00365VRPRFR70B4YYU7US6IET4V9HGV96E8Y91NZP8R4MGANIR1Y5HVTHPD1ZI7AJH0M25OX775JFERCT8RPFX4PJFHKOL071HL5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (739, N'Ms.', N'P1C83ABYZXFAC62WWC2MMDOA2TWAG', N'5037A3OH18WA094JW3MFPF6MYWMXCTNRSGZ1RSYE8SZJ2775QX0J0JHQTH9DGQ48K5HJA3R3486XFMJQOG6FS4R8Z87AJLXINRZXQOVN6XESCKA7YIOZJPFG', N'WHHI45DC3VHZQIR6WIKKDJXE6QSJXRC6XX737WF3ZZHDGBLEX0U0FV5DJ2CDCTFBIA2TBOY', 147, CAST(11273.62 AS Decimal(18, 2)), N'C33QXBBD3X07RRHUMCA2NO49M7YIYTMW4NEMC77D72EMNE8FJMYS5LXOYU4PDTE9B424CUIE5WVL9IL7ZIYCUUQIPQOH3I0EN4AIB43O4KM8QCEF8WPVU2FHDKEL50BNWGX482WVF97A7ISCC98');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (740, N'Mrs.', N'4YCXD8BKQAG4EL4AAQ5G1RDWSBC259E1ISTGXFTU', N'8K1VHKJBO9ONL00LJ8VPZVEY0B0WXYXBJJH3USODUAMJCIOE0HKQFD62V5JNDQCC41IXQQKIUI73BGZI7IXGRS44X', N'', 83, CAST(18725.39 AS Decimal(18, 2)), N'S5KLPS5RPHJ38ZC9F9750UFKV5AVS18WR5URWCFFX55XQ3276IX2236XPZPKIAZN9MC25KD2UR8VPITR32OA35UOZX1XMVXN5HN4RZ2L5V8AVB865YGFLPJ3SO37JFGYUKP7UP030348XJTNOVROEH2GYKC2VU2PEAGAL1BGXDFHKB68UFJNOSKCI89ADX851FTM2J2NJBQ11KWNE38FBE1MP3RDR1204AG4HJ5BDV4C1JAYBMVAPSUME7XZROVI8QWR3S5VXW1F9OK6ST256SABGTPAL6K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (741, N'Mr', N'CMR5IZ35SJ6506DLG41V', N'XIT73XYAFAZRN9W2WW52QE61FUTVLCXEZZ', N'GLD2KYU4EMXXCQ2RUJ4J1Q5J5U59S381UXY9RBZ3H8X7IE6J01G4TG1QGTWPTLCADV2ESSZJK02TSY1QOM9RM47EW8TYE9AWWNTMCRR81XKTE7XIS507BLN9ONIJY15BQ5W54EEWU1P', 191, CAST(17674.77 AS Decimal(18, 2)), N'ZM3BMJUIGZCTQEDQMQ6YLQBGFKBA2V9RBCFNK9K9YJO6GHK1GZNV0L39ANW17JFKPLHEYP5C6WZ215ZYZAT27EQP86DWCI1E34GVZ6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (742, N'Mr', N'FGWFLMROCVXBUP5LQAC8WDQ7VHMGUGARYCW5VQ', N'1ONEA410OIGVNJOW7ZU0IBSR842', N'JE0OBB5883KBZKYO9890S928BRDDQ3CAVYP9NT7NVW', 73, CAST(8903.85 AS Decimal(18, 2)), N'RUBO4M175OX1XQCCAUR5SC8ZNVKYXO4YT728WQM37Y78EG3ORR60809ELB0823AHJZ8QN4FK8OYT40L7RV75I4QSXONLPD13OQOF7D1MCLRK2GALQTH6W4YF8GSYHTVVMU5DB5ZEUKTWC6QHE2VVVV7JR96RK25IPWX7AW9KU3CCB132PAKEY0ZRNLL2Y7TREB7F8J7HSB1SIV8Q542AHQJPX5KPA6MMALXZUNT633MNY68RDVWU5I9NRHH3YI6MOFIXX8VHAW6E4WQRWSBEARHRBA8C6Q7LWZYJOBT40EJ9BUIVRQ666SCXXQLN0IBKOLI5Y72');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (743, N'Dr', N'CCHFO', N'3DLROGVD8HVYPDIIZZ5CWGPE5YAPWW652CXAXP67OBNP4', N'MKL6JGQNMSPXABRDKXSH5RAF0VP0G0L4V7FOPKTX0GPI60EXVFNQ3EWVA65ORP6M6K23W3OZ3VHO2R80GR50DU0HAKEJF45A92BLYA1SRNM8X7TIX58ZK58BKKTCP5KYP6FZFN25PC9Q7S', 131, CAST(11836.57 AS Decimal(18, 2)), N'Y6EV88GHRDLFJ1E4N1LYP64H3YKQCDWJOL7ZDHOPA4WMXV0N6EHWL3VS2XR9NP5EG1RYTFQ6CVOK9HK8XWJXWZYKPEXGPE1KZI6V32URNAKQFAIKCJBR67HG379FHAHXT3LRBO4V2S9LF8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (744, N'Mr', N'T5G80QUOMC2QOJ40BTVK5CHSZP0D0WFX1Y2C5', N'B4T9R8YQTNN6LQ5', N'2QVMAW5Q3UZ1DGP3M3OJQSU292297WI4S0RLTIA2JGB5GMOP09NNJ8T9WTC7TVI7BV', 82, CAST(7706.93 AS Decimal(18, 2)), N'EVD352AER0PSWSE9DTMWBPR9OFGPDXW1V2UK46BVJPTRLW82NIWSTBSP43EQMK0T4OXTYU46HRCMVZOS6D2U137JA5F0RK8ZOZNWZF4SEPA1Z6T4FMK8I5S0GDJTE4EXICXVCRTR99GBT5J4BBK500HJ7MFLVBD9ACJM8YSOTSZ8PG7ATFI3J9XIVEOPC8VYV61GMXVDJWC718URE4RGTAQ1F1QT92CLW0CIFROWJ4KNXPHNKXB7GE5LGZ0L613HKQB0VBBNGUXOQ23QK39CQ44HUR1FQ3QI1236EGR8LNRLHHVEV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (745, N'Mr', N'UQF3B0UE66SC1OJ33O8APQW4PQHSU2Y5520', N'GBBPVCG7K9TYOKS0A9M6WN4X7BJANQ3F1JUBEF0ZOLOIF028UNWC4Z8T7DIKS6JU5DW4PHLV8MHBYMI69BF0URB1A141XG6H1UC23XID103HHXVKUBAHQJZE1VTOCKYSF', N'CP493SMZ9GPMNED9X8VKJ6HOZ628NY4TKCBZWZKUX9KS76OSGMKZFBP67F9WPDCBCV2A2DCYO1N9MOHTHAR0D4E9N5RHPN4JX8FC4EQ29MADNGJI', 216, CAST(11827.88 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (746, N'Dr', N'XLIULNVQDXULNH0K0YEL3PP0H', N'', N'GFFMBY8GSN', 244, CAST(17041.23 AS Decimal(18, 2)), N'02SQQGMT54AWWC4FMNZXB3C0R3CIZDWNKG2NPBCNKKAMXPRFH2V8EYYWPRZM33TS8NBFAGPAACCRTP31CX0XIO8LI5XYCPJHQIEADB41DKX1L630OXA62WAJEQX4IQYKTV0BASO0SZKXQ70B1XAEEDEU8UVNDZJMLC8P6SPV89D2BCT7PM2KGK6GH63GX1NTGYCEYA598F55ZBIV1NXQWY606S8ZO9X7MKMDZE9FHTB0E0G5O7E94WWIR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (747, N'Mrs', N'QE', N'4AG2CS1ZUOTJD6K6L6PQIVY083U1G2A2HNQ9E9YOPK5P7BGISECMQ9R9CFT8Y0IRDR1QFARC701YP8SXNB92POB8VHXZFPQO1DCG9P3HM0EP7T', N'MV80X3CE95O', 144, CAST(2555.16 AS Decimal(18, 2)), N'7625LZHXIFP4WNEH93M5M5B2BHUO3PO4MO72DB7CIGH1GJBRUMNSVLP2UZU44TUTQKI8FB4XVAM5NAMS53TH2V90Y58DH37PMOAV03BIHPWKZJEJC2Y00DQVBI9A3QGS2XJY0QR2SAZDYO0EQO0F56P9YEJIT0FQ84H10FJLAV8QDDXNHUKEP1MV890L798SU94T6ZEA5E49YYVKHV0ZG007HMTQEYE1NGV483HIG99AWD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (748, N'Mr', N'1', N'4MWLMRF2OFSUXDSWI9DWCVCNY8RAM12YSCJ44WLBN0GU53U4VFTW68A9MDZZDETRSYLG', N'JPRRT0L7M8J98OXLA7VBQSGEEAGK349SRBVWK6EF7GBDBZS86R419DCR8CDJK03HZRHXS013TG3AH23EI7EB07JEY4O7TUV6CUEJHUG5P08T92959Y1CMRGR83YNCU9YKWXNOJX', 207, CAST(17846.78 AS Decimal(18, 2)), N'9EF3B99CU8XBK6NV703MI3RCEEII6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (749, N'Mr', N'7QMRVV0U5RRVW4D2E46NEC7W25L5', N'D5GA07C633OLKE675RJ1AHQXMX96P27IDRIADM61Y2JABDT0NJM61E3WFJO2Y5H0V67TWWUJLI37YFM848J5F0HZOLUTY32', N'R8MZZP4VVIYVTJKKDMBEWSTVQ98C5MGP1DKE5GRIY3SUVE50CCA2', 105, CAST(14992.78 AS Decimal(18, 2)), N'PB4PJCZU3SD30VBRXCSD2ASQE5M3PWRQ53IL6VMAWCXB9E2V1MH5PTNFIEADQV460MYXDPK2PIGPDGHZ3Q12FL0CF22');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (750, N'Dr.', N'0ZZ', N'LIE45Z4RP3LIAVY0XFXPMBLVP85A10', N'IRYER9QHSP818TGZ5FWVTGS0ZZC38ZTCEHIMLZE7116DJSNKP17XD7E2YYFRXM8SWWMQBTD61PURAFG6CRE6SVY72GNMJMAESDGM5W9VN1WODNRII9E58', 67, CAST(16822.45 AS Decimal(18, 2)), N'K8K08QAMG5IB1FG7CX12WBAZU1RFMMHANSIHXFHM6VIX8Q104S0H00V8YL66ZUZUO7O9WZA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (751, N'Mr', N'5GQDS43DR', N'IFBMF0H254RGCFYPSNUWI5D6AXJFXUTPOH22Z9IZGCSKUV8GQJCN732D24BIH', N'Z1YFNU6QMEEFZWZT0GHJJRZATFO44A746QDFOQ8FPWEH9XOVJO8YOOI81NL851MB6A98IJ5A72TMCI0WRTKF29GH85E1409NA3AZOGD0JXQMUWVJMPGCG79XURZD5467S5B9717BFKW4ITM', 113, CAST(18911.85 AS Decimal(18, 2)), N'GFW1SCQ30QATMZ9MW9IB8BNBVO912R35');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (752, N'Dr', N'YX', N'5AA2RUCWPJ4UG5CSCFO2PEI6ILEPZUX0HE7I9S3D3UTTICNX19SWTEBRR4J6FNWUL3C1XTJJBBYVKPN5XHOQ20723GQ58XXGYY7FZLZ7Q8LHGG62GD8YZ5SKWAYH3EAEDIXLH86CHGZTFPMMA', N'9VEEKW73UD5WGZUFRJTOKMBLH4WVB4F05O3APRNWY8FUWBVGQGDY0XRMJTWFZCRPX5RSVKPZWWQB669G5URGZ7WHQVU7WMGPXRJ', 99, CAST(14597.67 AS Decimal(18, 2)), N'31L4UFLV368J68OX1DNGZN5RK632O19N5BIXNI2TXG55ERPGL30DFPIFWUJOCI61WLEUPR9IBTJJI0DTGNHK0V7FS30TZDHE938TCURTUI2M6ZXWHP7O0L10DZ1MQFJXC49ERJHMWNQITL9T64C96SDO27FDT43EY4A1QI5X8LSDUI7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (753, N'Mr', N'SV4VBASD0UIQPQ9UX4RS2', N'OVOZHS6MJPMI4CY64XJKL87WGI6Z56NC6FPFPE15FUPGPYCNV8L', N'K5QD137FG24Q6I6XYG5KVETT5PZ4UGJXM5WZ3EFWZH0OR41EFJRGLZ75CW7C33KZI630M6UJ19KED520NLOBP3BNYRN662SWW15K00S9P7FCFTR7U6PIE9AFUG2UJNDYGNHCZI0MT', 68, CAST(2630.47 AS Decimal(18, 2)), N'Q8GL3ARJRKCK44TRKBKOA72NZF0K00TJ0NMKOHBNDRA56KT4S0SJYIHI5SMNA6IRRSKHH822');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (754, N'Mr', N'NMPLZ29NE8YHC', N'3P2FOSIYM7HC2ABOMIHQWE5QJQ7I5I3WLX8HCARXV2I8', N'MHOZ74ZGCZDAIMRPPJYXP2UGVRBF7C62OZNTRV8YV3ADL65VK9SWPKM83GSK80TBLIZYYTA02MRGUPMGUXJP', 125, CAST(16454.30 AS Decimal(18, 2)), N'WBJXXHELVSZ7ALH54FWUND68IED0CNKXQI16YK8B81EDIJG62BCT67CJ4AEI3D9882HRJA7K6KMMYTQZX6Y0AQQI6I2N5P7VS65G2PNS4SMMLQLBKFLWF8XHBYK18KEGCRTSN9W8J6WI44XGWQ2Q4BFJ8N544LJKD59UWSNBICC9CED6044HHOC1B9J04S4YMC5YV3J42R7RZ67U9Y3ZG12OT7IM9N6Q8DNZ8FBXK0FQHK242OQ6O4IKAG4NKXUFKHJLJ7LUN6FFMB795DKLW014V2PRANCN6Z5Z1HLV2WIIO2XY9VH6D9JKFEPHHTJZUS9M578OSOIZHJFT4QIF559XGLJMR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (755, N'Dr.', N'11PP6F4L8M2EUJU', N'CEEMN0CRUTPJCVXL0T33LR42TCCRKUTVXD7BSVHIR4Q4IY0ETBV9F5RK9CSBOL60ZUMZOLS5BLBG00JVBXX8ZKFSLM2G26T', N'S936JSS5AUAKALMVMBY5NU3S6DETBQBG3WT9VSF1IUSRHVK3ZK7MKKQY6A05EYTJITHDSD0UVXNS2BBATAURJPVJ6U3', 193, CAST(19028.43 AS Decimal(18, 2)), N'D9DINWSBT1NTDORJ2WZVCQB4UOIC6KOLWOB8MZVI0TXHRCRL5WINNVRMY8OZEG48D1WPDIX30GVJSTCHWW6A20Y0WOADAW4JOP3QG28NYEN608U4V72HAU6C2VSO7KT3CBU3PM0UOIBNDR0OU6H3UM9UJRNL9JGDLJUPEQE967TRIIZBU3U13P9P1ZKYZFK42Y2UXBA3R8WMSHC0RBQ5OFAV94NE6G9RMOPKG5EJTR9UTMXJMJ6NOEFNN6KSNVWBZ503SSJMX6CX5G2N73SM9L2781X9KMWYUYVNMTRUZKQH2IH64WKK39');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (756, N'Mr', N'74H27H6PA', N'XQ4OB1Q7IQYUTBJ9TX0QOY0FEUD2JC25R6IAVUK97PP9LLY92SN452HZPO9HNOO5NT2MS9DYDQJY8RTTV3ZQPXZOOIK6K2LJ1JLSICHTEORFJJRYUGMJOXGPTDY9O6D', N'SANJ188NE6BMKDQNWYWUZPB3420TXY7XAF2LA4RT2OWNZ765Y8M8Y8L2YJEY8FP', 126, CAST(7078.41 AS Decimal(18, 2)), N'D2SURVA1BAE27KE1DCYMOVK5QJQ4O1CVLVILTY0YPIE7OFAMQV674MDIHN4755DAYJHB2T7FCZX5GDHB93ESU4QYIZ36USTJ5485XYJXNRV5P7146SX1RKFTTJT2P1KJ6D0C4CDAKG529L9AYZ01URSLOEBD5G7L7BYB7PZUFNHAECK8AJ4Q1IOFLFNP0Z539JVXMX29Z6M7AH6BU33LCGKONJPS19TFHD1VHNLCGVQVWH449CVWWJRSZ7A37A7QC7PWFBU6IQ4GQPR6ELJPDXJXM9V9DH56N0JPR8PXHOD5FA2AF4PMRICEORA5FKT0LYSP62E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (757, N'Mrs', N'3DG9S8EKTVF2LN', N'40XO51AJM6B16K55RMB4G2U43WY5E748BHAJL2ST53XILEJ98SI2V8U25SK8255F13PP9MJOTIZD4CIPDOXLP2D2M7DTIKQZXHHHPTZL8T', N'ZEC5A5DS62SATO4XWUUPBYY1T0MQPSLNYGNKV1UTVU1WGA9AFH2DK030FABAIM3DH4CC0J1UZ1THX1LIQCA7Q', 234, CAST(18170.39 AS Decimal(18, 2)), N'WL7OJDIB7LU8SIE5N41ZYJIXVDJGHC4CPJQ6BNUA8YYTQK72JN211E7C29T6T2TUHHJ9S8TZAQRZKP7A5HWUA2BBBD31UOH644C81YAAT2RAN7SD2J1C5ZKE58XE5S5M9KVGDY867M08B0N4LQYBM414JX2T1V51W512CB03AU5IZC35KSTFTUZ4JQWFVF4BGZB6ZKR9QV0SZI57UX881Q815XJLFK7UQT2Z0W601KPYT740KPLY6VAQR90105U5N616G56XR87H197YSJ1PY9NUIB8RW4ZVPJBN5X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (758, N'Mr', N'2E3JL8QSL1TZAHKVZEG', N'C9HXT9VUD8JPZQN228Q69RZFMU10JOBDVT0T59KJNPCRESIQ1RXDHNZLA2AY8VBOX6U5QTXSN7IKE80UCBYSRXV8UFJ2YMARDOT8XC07U5PA4E611G', N'2YDN5KPKA8RNFBYW9WF7EJ6L3DPTJ5BVN92DZDEH5FQKQ9M9JU3ESITJRRKRVW04XVZ59KXWIY2YTLUTRG9P2X35FIL7SNM9FLNV9GZZX7WTGUQ6WQZEMA', 89, CAST(18568.10 AS Decimal(18, 2)), N'EIO6YNSPH119H447DI6N5WF0N9CRIYKTVZM792P7QMRPUVHQLBX5Y9EH3NJOB07IH7DIIXYASZXJ5P5SRL660EVLK43LJ0WPE87NHZ8ODNDYCVCDHRWPU0I3CSXDTCRR374WIIASDITD1W8OSQ3S37VEQ4A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (759, N'Mr', N'Q5YUU09QYD4JUG5236PHCKU8Y84380GN5B', N'XXIXZALABAUT1WQ6QESXZBQYM7L3F8H1I0DUUQUXB2OXZBODD8GN8JLM6KBR', N'ZSUQRYP3VCTJ7XZJAGASV19PKSFB2N7M4IO2FQ80731GNBI8W6PYCI6YI55YJE0756EO9X4J79KR0S1997EVX89MCQJ9LAGT2TBGXTYZ15Q2XFXQ3WOBZ5AWXSCJEVYXTRO7HLBG8FUSH', 114, CAST(18667.67 AS Decimal(18, 2)), N'1VU0VLV5RGVZG4BC642GJ9K38ZNWCP5E8MQHNSHF13WCV4CZVJ7L1U4SARSWXYT2AGQTETPEMMEGC884MO0SHKCDHY7V0LH2AU2EDIK1UTZEFO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (760, N'Mr', N'XG8OLY0', N'IU3TSB0IWB0KVLXMTYAJ8P7RTSZFRNAE27T7L360NUHW', N'OXST5PL5UXIEJ4GFK67T96QQ8IK83JBIFQ3FRKP8CNWRO327ZTUOKOWI61KN5C1AM0ZS11NZGYGL9Z25GD89PNXQTL8Q023ZLM4N395Y5U7L7A87ZF7R3SLZ28', 221, CAST(19059.53 AS Decimal(18, 2)), N'1JO99Y0KQ4CCGMTD15C6I6UQ43YYOKXYTI5CCB84AACA054F0FX93IWVOX45Z1W56EIXGG1QX8V8UJPYYIY8NOUBLANE6248E74LN7ZKE6CUMO04867G3NHHJ7B5SNKU3NUNF3BRJETHC0PXAI60VN5QPM2FWURRMHQYUDP4UGXPT05JIEU9HKZGH3XT1WVOM2VU9Q2X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (761, N'Mr', N'8WA5TBHR', N'3CXNZDM18HSNBZZBLR81LINRP1PRAVD8ABQG1RS9NDTQ0K936O238VULO6YYOVQC3KC09JATYYD8OXR5RL', N'FSX', 83, CAST(14028.98 AS Decimal(18, 2)), N'16EQGWPHIXHZHA1HAHQFV2XL82Q4AASCXGFEKP167CJZDP5STDY9BHYZ8THD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (762, N'Miss.', N'PYZ6AQVMV6', N'LTAZEG5RVTTLSMHNG79UNE84AHMXRES73A5ITKYJ4SE05DLL6AAYHRX7K6PXU7ZG', N'DU', 31, CAST(12623.24 AS Decimal(18, 2)), N'K675511UNWLFK7JIY7JWYBWCJ0FHF5Q8N1N5CU7N4Y5GDTRAEG9MYG799UL4LJEH5CRJKD64ZVS05GZP953ZW497TDVH822LJOB018P1A5M2O73TVWVFGFL03KP6HOVWT7GH5ZN0G1PQI6JLA2MC7M433AWHIJJL9P9GQMOV8UZEQUIW14WF1JP72DEV26IWH3GTX2UNDR3CMQD8R0GEM4JPZ2ED8TT1C3WMEPZY981AGDKC0531Q39DKQTUOHFKX1ZJTQT21H4E289LH1D2QRB8TJ2NV4ASSHDEE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (763, N'Dr', N'YWGDIL8MUI4JBQMBO2ARR8OY6C', N'MHHHYUV9QPU08YWW0QH4TPCDYYMV1PWTXZJV347GEPR136C7S0THIB7W54I07080T028F1SVJ0Q4YA9RLF30VFBLSMPYL69DHQ8244RQ8XYHL2YVVRFRX75DPGGSBT9CRCN727MGNCRXHT0QOU', N'0NUE167A4UFCJID1QLVBVT15LVAQ67VUQQALCKD0KTNQKQOG2Q7EIJL6LPT5WH4XZLLS7SO68UR26A', 195, CAST(5263.74 AS Decimal(18, 2)), N'I9B108ZVABH7CM3DU6QQQAN66W7BLLVV7GJ3QOQ29X8R5OSNOFM6ONB7L5U41N9PFMZV30M5FNGS2W0I4JN6YP6K5BHLUM1MOIBJOWKNSHQ06I5P4BZIZ3QQFFQRJ1ATMU3JLHU8ZZEHY6DM6SGIMIMLSK485T4Q6XECEL3MHRJ0P8S923KRKS638IR0CL25VNA1R17LOU1UZMWJSV628D5EQA4WU2AVOD51YRH0VZ2QRB3LM78HF0XHHWAGXBQLJ56MGUL1D569BFNE6I9MUSFNK1G03J8G6L5H5RL649UO629W9F13RROH6TAJLC2M0U818PDI1ON7URGH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (764, N'Dr', N'MQD2PSJVBGWM83UX', N'URHG9LUCOOZEENLP9EQSO5Y4KG7WWGP3HPFLAVEL8UXSOXCAV3QBX1FPSDWTEXG8YVXP80FE05KT75FN3W1SPE5FAQSWZL7ADPUTZN1UNCASHMHMX8PHVNJJPIFH7JEFY9FIBMN', N'U6TNF0HB744ZNR733OQRZ5V8A206NSJZA4YZ2TPWH9DO2S1E0QNDGJMOBKDCZB', 1, CAST(1538.50 AS Decimal(18, 2)), N'JQNI4PFWOABH1KR67NCU7OK2J223HNFCSR1LE4V5T4KE11Z3W0M34NLV6LY1MBF0VZOAJ6S2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (765, N'Mr', N'LFNFOE7JLFPP8I76WMWHGEQSVAVRG1NXBECQ', N'U75D3CYN86YQVPEP6A3H8KM4XVU76ZABL9MOI5GCKR91KOK8UPB1J57AK0F8IQH8VN4L2P70URXHAKJ9BMD', N'FL4OIS809ZT9PR76H0L5W46JRIAOIGCX6KY2Y3IMSQEDM9WW', 59, CAST(6233.01 AS Decimal(18, 2)), N'602350I3Z7H0B7466FS6UIHPJJ1COKP8JBYMIR0KGYN3Y0JSJ4CRZWXNIDKMZ5FEH8G09HNEE8PWVER');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (766, N'Ms', N'9XB6I3DU53XOFBH', N'SF2C4HQ8UT906WJY64IB7R7PZZH6WVD1KLVOIQLP9LW37AEMPCF8XC208DC40KBYG8GK1UFGJT1LU3IPLUGJG537JVG5EPAYNZTTLVWZO4BH', N'EVCD5RBFKX0IKITNV35T48EIZD6QSXIMDK3L0J0SMND6I477LQQ5Q3Y6HUESLKMNFD5ZE7MC2C6HU8ZV5Y526CVAMX4657711PQ4Z8SD3E3DWHB8UJNMFKH3IUDH3G6U54G5HVVW6', 55, CAST(6908.67 AS Decimal(18, 2)), N'Z9SJ7Y9NDA456ELAI8LPKJI2GYCQ61S4L1MPDV6JZTMYDI70MFDMS2YGQQ39MIGCHZJ5RWXN12PQXJOYQC4RO5BJ36YMSXWHDAHEZ28QIQKQC7J724J9EONBNZ1LXAV458DM2AZN3D8YLL7VMRKNDM2OM5QZ0NS8UFK3TW4R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (767, N'Mr', N'GT', N'4UMJ63RIB5816DA124BBWGIVR9LMGGYW2PCARXIMIGBULSEHMXMZZ58NCQRWI51V6CZG1ZA4MPTG4OAZU40IUZWWHOY16L4DEGN8SYGNNHC9CSJNFR2D4I16F3ZC08Y1', N'YR8HE5LVBLKKMG7NM4UB9M788R16RZNQG', 161, CAST(9759.85 AS Decimal(18, 2)), N'V60GPQ2R6Y6P7RI5P0XKZMFK035041QMSIHG27WEN7UPMIMO1X4V7758RGGLL1N47JWP923I3IWRSPXHGGZ6XUFLC9PMRATLKQI3MXFZTMSOADG1IY552G7D4BC0DHQTPB717UVJ00CB2QAZSO3S5NI3J5YAKFLBVYYZ5FTN3M424VAD0D8PDXN1S4I2WKYLE0F3SBTCUGPJJGZNULA77WXYBW71WQQINJN3G6LPKVUX74IB4V8AARDI3HSV3RG3P7VZSW7N0KNC10Q6EVW1IG7W550YEQLSER709IJ8NKA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (768, N'Dr.', N'PUKEJG3JRSDU5HHNOLBXBDYP7X20Q6ZVK61UOJRPF', N'F1O117VODVCMNJO5BLFIQ8VFHTPZ3MEJBOWQUMDK6PRNOJSJA7PMJIV769J8', N'MQU0G8V85KALIZXT8R1UIBJ09M4F4CYT4YUHTLNMG1HMYM818X', 237, CAST(6656.38 AS Decimal(18, 2)), N'41G2RLG8VEL9ZZTMV899YUXATPXVCNDY5HR4OX7S9DX05X0AOWCFB0R93681OKV70N4I7PXY0G0KXW4VPN7FAXM4PH1IP6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (769, N'Mr', N'L1S8R7XOSC5WVBWV6LD2TK', N'WKQGSBYMYAP7UB0G8QX15OVWR0STPKL252A416W7TWCW0FO6URXJM7B7PUOSJ5XDPM2S1VF1UP79', N'VOL5A6TQT4F4SMGHK5F0N4FEHUW1NE276L24ISK', 138, CAST(3049.50 AS Decimal(18, 2)), N'PHPZITH2ZYEFV06C62DB1DGW20ZTPNF8TBB37XL17K7HVIR4I5UGCV3B1TWIUOCBJ6LJP349GB3G5Z0K8VAJTZWY8Z1E137I8VXPX7EF1LZ0RN52SC9ZESHK9NBP1Q8D3K891AN1GUI8ZW7LTZLOT74FDDG9WPDBCMX6EV1HP8JJA9LDGQV24JJVGSVNUD4RH7VCY06YY3ZLOL54S3T6TB6T21QMZDNB4S22D8EFJX40JY7VNRUQJXX502AXAKYKGNHWI2RKPEMV76A4UVY8IWS6UW1BYG5ZZJKVHACK0A14A2YUS5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (770, N'Mr', N'HAYGNZ5TL', N'ZWCCLYXM1FYQ2F6I3OOYY6DCV5ZCWPXZ2VPXBGY70RN732YF8IQ1JADSI0GGYLPCIZN6Q96MQGY7I69T6J4DYWFRIWEB0I8E1BO4', N'ZVTI0WO0H5NWTW3R96OGAS3F18X7JBYRK40RAXEK5VJHQ6E9HBVB4307REGRZHG67WBOWBHCS3BE8MOVUNP8GMMG4S0VGMKNFDAUVPD6T', 14, CAST(8125.75 AS Decimal(18, 2)), N'FLP1JVA2M1FM89MWNMENJID88UNVRX7JSDPE9I0067PJKOSVO6B8DIJW7HTO7FAPTWTVJ8M4MEGCTTNJ2R7LLZ5ATT6SPBSRXZQOUXCFK6MZ172DU9MG7O3UQJ1P2UFAMPET3YP4FR1EC68MQSXFOCJ8WVYBVMDPRBCCS8AVJI0GNPHJBFY9WZMA66X80E9SEBN1TVTII1V6B3K6DEZGN3TRP26MB1V5881B1GPFLGRV3FZ2LQVLES4AIWCRP76H5QX3195XPJV7CXN9330K6ARG3RS54YQD9APDIV1CLYVUXXXK82NL6MAUZG09GZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (771, N'Mr', N'RRWWY5V22DMQNBPXTC5CDQ18A', N'RPYC4A2B5ACRN9FHCEMJVOTUVM88J67H4EEU51ULDFCM2KD8TXOW1LI3V4GH2URZ2UM8UKCAK15GC7SA9ZFMHBFIWB', N'I1SLZ5PLXCR8PK9UK3BLW6INZUBUZ49JEX4LNITU6UP8W6OPL15AU8MCI5M5TVLS28TSGN6', 221, CAST(19109.69 AS Decimal(18, 2)), N'RTHX289R71OY8EWJ5T8X1A46NZUE1VRVM541FZVCYBGJHN2G2XUF82RHPBA3DVPC9TC3AV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (772, N'Mrs.', N'SQ', N'0KCJ', N'AGF1HARS5M9YZZO6AR3IVN1A9W5NDW9XU30DTLV7EU07MNT3JNHOKO6MF4SK43E9CB3VZACOWV31NTNL324QEKC6XDYOTA3BFQUBJX48ASRPK4ZLH6G2YOURZWXLCNVMSRMWZC25YVFMSNM', 245, CAST(10450.64 AS Decimal(18, 2)), N'5YVYPTKOZXEB31CNKDNB3PSY3M49OBZ57TOGC31N4MA5ZJLAX5RPMJ0F6WV3PAZNY84ADVAHC07HFMZJ0TCIK9INS8AF7YXUMN7QEAX2VACMCI0KXB2VYH3OQHI4LU9D2CVSF85PW9N9XVBA7PIVV1V5JI0XSSG10YKZN85P6DZOTTRU68XVCEI0GP8W87W4TM8YBBMZKTPI27BPR5RKULOMGJJY08GYGUV7KTJULYBJOZX9DI42GC97XMHRSOZBCQ27C45YMWZW95XGM9KH4DI3LNAYBR2XZZ6YXPW9D6GKDCYRO05I');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (773, N'Dr.', N'PNIJE4J0Y8GIZR77RMNQQ5SO940QOM0C4SCQ', N'OCK7X4D8LDC0F2QOC582E5IRF3BJLBQ7IMRZMLD4L713YF3TKAOE4G4IUSRTSUM9N4ITAR', N'EC7NT1CQW2CMZIWMX5XTH2M53A3', 96, CAST(17438.90 AS Decimal(18, 2)), N'H7Y8YMOU6MUT1XAZZJWCA4XXXQ8PIAAMKTHS7QY37F6JLQBFNSPH95UD91A7EZBVB898FHR8KT4UXDB7FS1QLTDFY4I5GQO83B8DH2Z50GXG0ZGVQ2SLYLAIUU9BZLRT4WQL5XPCSVP4WXEZNMFDY3AI0QJNSO6EP3C38UQSCFS2V6LXFANC6DU0M8LFE2J4PBFSLBRTWN1IB7MU4L7I0T8B8BHZ8BDAVNDKQTC4IUGICCPFMRATU14V23J9TRKK9QMNU13B93Z5DPYWM2CH1KFUJHHM92AQAW9LP1KKOZJR1YID5NMRE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (774, N'Mrs', N'6975WU3PTDZT1JB5ZJJUUA93TCB83E6EH3KCFLTBOYFQ0', N'QS3H74FSZ0HYBNB31H95UTJBQKRFTWAJT9XM0ZXEF0RSAWBMC1GB1L7X9SQMCZZ3QY42PP22KVQU1Q0U943RGYI710C89A1F0O2CR9XMZEQ6VDVIRVD8V7NRFW0OCTT9TATCOO2Z7GS18CCO', N'98YBA47ZG7SQEV0W0F6FZSOMQSBBQ1JIX9HO30CVAX6QD6EM2P5O4O4GJBKHSV8FN9T5EBSZ3A42MY9KEP91WVE9514RGU2FOR24C88QW5KUJ2UL2023M7ISVK0C70J97PDVW475', 105, CAST(7077.57 AS Decimal(18, 2)), N'JOBR3CKG16T8VHGC7KHST10OTLZ4HMGIC7CKAXY807XDYS21WSF2AM9HNMYIDFYFQAWN4V29M9RL3MQ1IY7O6D8PYUXNZGUK9INNVEW1Q6G1VOD0WWZF898C27P9YEA5E6CLZ26316Y0X6U9GWQ2GFCZ9BLNON3BWAMOCS1TQVD1B8FVDFS1N7PYUCBNHIED3N3MK6XOUXCL2BO0WPA8U1NOLNTZGDB7GZYN4SB6I46QU3WJOARS85I1ZF1WCY7HL542C0V3E3QQUWUHQAB6MJZAHWNPQEUKWP5PZU6NEND4FS73LK52M1U16TLGC6D096T');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (775, N'Mr', N'M3O7', N'UHDXTJT1AWU98A5KGCKKJU3SE1FELJ3KCKICGC0QZBDR8QY6NHR0R3LZDKJR4EGRTAXORS44CUK7GBKN28R3R3T8YIYVT8MKVMYYTAFUCNOXJDJ2ZVPWNCZPHOP9T8A370C', N'I4RBJQ27JPFRYSH8A9S8VJVMBMTOYPXSXM32RGBTX5NB3H8XWMLVEXLZ84ZWWE8TRNUCOFHTXYBPVKI', 54, CAST(11785.44 AS Decimal(18, 2)), N'Q5IW3ORY6UVOPK468SXVU4I59QA8ADV8Y2CG29YYAWVBXWRS16RG8YAMMCMDDINTZNQM7O4YUZLY977DZI64LEZZSPTPMKKR92CA54KD2SM9DCDE49EVCJ7KNRUIUEC9FUO6VW7UXS2SRQMGBFKD6OFQURNEA2JNGDUIN6J81JXJHFTW4D6FUZ2QFYC38TKV9EBDW3S4VCBNRV9FXR9WV4SHB43OUFZ8Y2923FZ1L1JHOEZJPX5HJOZ5LU2SZ4AFD3POM6BHR8BUKBSX5KZW9IOA23G8D71HQ34LPAXIMOPBD5L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (776, N'Mr', N'8TV9W03CKIVME7LCXYZPEQ75VVI3WP8JVAYKLUOCC88S', N'DMUSTXR3FVPKYWWYJPXJN8G4K50', N'DWSC31DZ04TMHEXJXUKGNW8G4', 144, CAST(15148.36 AS Decimal(18, 2)), N'15NF4D5VEFLIQ24K7U3G677UNGALSDWXI578JLCCX969OERJK43J244TXSSN3K21IOZLVV1LHQIW1X58PR1O9DUD0DBQTO9D74RZE6NO3H1BL8SZMKYBIES5UMKIJASTG4OW66TI3DLRCIRRKC38PXVTCM5SL44SP8UHKVSGRG75T1SBUSX77J3J9VKK00WZ8S14NA7PJNH9PQ0ATUYT7XL54B7OA8GQJ8X0ZONJK8OJ1UTJV9Q6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (777, N'Dr', N'C0JFJO4OH', N'DKPI1QOC1W3PLVALZ4AXCCKI2T645P7NWMQU66J87JWMM7XRYV4GV3R007F7KK6BPGSY4FETL1PSFXVVVE6ALRRTVQUZQBONCLX6FZNIGAVTDYK3BKC5DWPXOZ3DLF39C2GTZ', N'YFMW3OM6J0LVQP9UBJLVCI1SR1Z26H', 219, CAST(8039.56 AS Decimal(18, 2)), N'3RA7WZC2JFA6RPHSZB47F8Z814AIOT0IAPGGMS3PAG1TDDA4CQVYMYMUS16RPTDPESW280678FWY66UOT56YY2WB2LNKMBZH2CELG8WBJOP62NOM6HYKNFQCWLZMCLKXFEVUR97L8UFACP8FX1D4DFTNL2PU89ZX3SRNRUVXACBSZGZ6DKOB7FK0L88OJDCZUH6JYKN35GU030N52IHOKOPO8Q2JL6EW0CYI9G8SWL5RKJWKK3M0VNE6RIA7H4IZ2XZQ25VMAORZJY3OTIYIKD1CYRQR51AS36PMK6HF70Q6WENTELDZ5ZFOWNSAE4G8EZWC8G4N1IBKNUG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (778, N'Ms.', N'ILPD0H0GU9BQ48', N'GWQNTAVXGW5RN5ZI9FWZHFW9X07LGBIQ3M4GFP3E1RJ', N'B7A3XD414ZBVWX14U7SKOV8GFEU42OKZ1D9NFMBH7IHV1N5UPX5V', 150, CAST(2472.68 AS Decimal(18, 2)), N'4XDKOBM3R1QWD613JHSWIALXGPYNOV02686HQWK2CSL7Q79UG7061J1UCF3YDZFW0NQ50KCNWQKPOD68F36GUU0M7C4BSLPCDP73H4UWVD9BYB5Y9UJATY15M3XNF1UB08CZ63RA89LHLPOV661X2FJFN1GE66');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (779, N'Dr', N'R3AND6HFCIUYNC04VDKGYVGNUBREIHMWBESLT14J06DV6JC3U5', N'8USXAUS0XZ800HQS3AG4DFN10I3JCHXQWO1389BMIIT3D4GYZBBRAETS6QWRQ9NG2I3BFNJTYTMVMJNW25K155FIV8WHDJW8UC1V15IBRITGRY6N30PKPMAW2', N'WYGZUNJJZYFFBTJNEO7VAD5EDFS9ZE5JOK5ETOLZRY7K1GPTL7B8XZ3IT2LEUAJLTWQRO5UP384C5LCWQZNS2WLPHM', 110, CAST(16731.92 AS Decimal(18, 2)), N'TIXAQZ5R6381JCKJXF1G9ZW9LPXB4MD41TRZOEXW1EVUTDZ23IJY4P7ULOP01UMJP40QKLVIH4FU42F8PU8M3EZBLXDZPXV6SC4PD9HIM0HZADQJ9HB7MZFB4O5M7VSK982RXPUGCP02WZ187TQ8LNKSWTKO4UAQ7XP1AYMJMUUWZCE4MWFD5KYMOAU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (780, N'Mr', N'CJS2VMNS1E3WVWXN8KFAT91FSIL', N'F7R1FFXD09HRUXN8AMCYQX19ECUBJ815TGPBKP2EJDXX5B5RXGCOJ4TI5HN3KLUS', N'Q264HEMQ5PY5GDM4OVQD7QPOVMRIWA191K3MX4MYJU77RT7EGSWUQ9D0DH9UM4', 71, CAST(9010.67 AS Decimal(18, 2)), N'56CHE9UZA0X976LRTOSJEF17FWLNZ3D03HEGHCHQIFUMZ56YY6TZIAPP452IN7Z6NW5QS5AG611YKF79QMOSADITROCCAZ2AFOZ30F6TWCTG9R4PXSR1I6W9DCY4TX57YQIWF49AGVWXK2J0KMEI81S9SPPNH1ZY7LHI889TIGLNAYPBSXK6JNYXY94QFLTEVYQYK1SBDKZRG5YTZDVJHTEJMKJY3IDWN6RC8QRQ58SZN7HTBBQ2Q9W2J6BZHU8U6249DMK9L4E90FVF3QNSSB6D9PS1FR8BZYSL27FOQHGLUN14AVWR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (781, N'Mrs.', N'BYNJC09CICWY6834XAHY8V3JEVN', N'CYE7BNKJYFDZ44362D2WDMOM7622ZTXJ5PSCRKMTR4KPGI1DJWH8RVTP9R05KIK5HTUEBQFIR9591Z6O5PI3BPR9V220KG88JF7MNM1THZGIQKOAKB0V0H', N'UOO3W9Z7K8RTCIHX1FC14E6JR', 133, CAST(6827.27 AS Decimal(18, 2)), N'F2VVQZNTJTTV392NACVAY2AULIMNOQJUH4KVXPC7RU7NNPRDZH0J1G8DR0A7D05SAYEYP7PK0NI3VN7VR8O7Q0T0V73WE5URPECOBTOSRFIEY5H4SEG4BY2A5D3H3T6VSQDGAJKYKWFAHF2QPY3ZOPGRC2JYP6OY9NL7R0U9UIKFIRTQADR4P663AM480L8D7H1TUVYO4U56519L8TNCFJ93HIX5WL98A770QZWFE20U10X9DIZ7YVYO8XCCYTSJKWWYT9U8X8XCJE2GKOREL2AE8J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (782, N'Ms', N'ICAC17H2QJJUML5WNG4K6WIH0M7FU45HD6T52KXYR0EDQN', N'S2LI8OEYA0WPMSJ1INPMB89IBES', N'29GVRCE0CI3QB5HKCLYF0HWK7F93PGH5CP6QQPGFFB6YTB47KJ2LKB5LDWNC3BBW1XDLYQUM4J0PBXQWA1I5EWL0JLDU14C309XWXI9TPFG0BG9F6R11S5I4CD', 231, CAST(6562.31 AS Decimal(18, 2)), N'SNJHKAH944ZF4ORAQYM4UVVRA1DXILIPAH1LDRC124XCK8NQUSKGMEXXRS7JWJRJMA5MM5XYLL2QXJ71D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (783, N'Miss.', N'NQ7WXQ2XMUSBEZ18ME1HFRZT2J5S5H5RD', N'8GD82MFK23T4215HUU2H0AH7BUHJT37UVYPUNNN0DZYEUKJA3RNGCBFYY6X74VQYWY93BAU67140B3CRB7G2', N'CD0L06WP2ZUYSSOGZGKO2CXN92ABURTJJFXGPTFTFR7GCS993PJNSPZZFCBYWLUB6AECU7Q51Q9B5HBGT17475QUGX1DHGXUWW91EWEVYDM2FOUX0V5UDQ30JKWX6DNKSFE87A2WMB5UI', 202, CAST(4408.39 AS Decimal(18, 2)), N'2P022VK4TKKT4ICDP9313OVLU1C6Z8K558G1IK8A2HCCERGKDJTXYCKEUE70ID4L0EOV1BU51SYMCJ63KSTFEM6SO274D7RODRB03LI2OOW5DX2B73FQK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (784, N'Mr', N'KPN77RA87BA8IZQSSZO5WVQETEKAR4P0Y4EB', N'QHKJRWHQFVH90IVAFYSXH9A6EMVT5WWFOJ6HOKKEDFS5MRBLGGW9O4YH6D541NLJZ2KGBEMUDDK1G4KMBADPZN', N'FS23DMB3G6T9HU0GPLP2909LQQS872K9IU43V2018OZ8FYS', 148, CAST(9286.43 AS Decimal(18, 2)), N'6D7V6Z4QST199K760Z9QQQQ1ER0VW9S04OKYS7FIYYV343OH313GGTXGN6GFZ8UI105K08ETJRSSUMWA2IRV6BJBR4BMQ0JP3D13Y4HUNAWP04M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (785, N'Mr', N'F7A77JOIU162DP538DPY9', N'JLPAAFFCPU96K6U92U1VAKW02TITRAVJBB1VM3', N'W5MK4GEFJGDNU3VELJQMPWLMLOTL115RXJC1G041GPKEOD65TKMW75JZKZYFNTEIAMPAQUXLFP6ZC7Y7HNRGE9JS0CHG1PEMB232NWEZM1GIYJMC1R', 208, CAST(16959.95 AS Decimal(18, 2)), N'96CGGZCPHTTWXS2J72PHLTBY1W8WFUBMIACKN3940CM5BLXV7CIXF4FGUEEJRGANI6DMFIV4TLG866MGZDO2BD6DVWQ9OPCK1ZN47AFOGE3UN69NRYKER8B4Z0RJSMF48W77JI9PX0LX9CPPM2HQ5YSTOI46IWWUYZMRZ148PUGRNEUNA2WQ5PY93EJ0E2613RY9QYPLX80AH159OHVGZ6O90CNLI4UMNFNWFKXCCBSWOOS289BX6Q1X2P9EA43TEDM2E9U3JJ3ODSKCJLC8SXGXDPTQBI178ZIA1QNYF8DMMDJ94WUPSU0GXPOOF4R1IWGEA9BTXETKKTBZ5KLEOBFDY1D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (786, N'Mr', N'T60H3MAADLE7DRDXPB2VZCE7DEJWQQP', N'FY0U77XZGG0AVYSGZOO8GWLLFYPV85ZMYILW9QPS4T2DQZ0KIV26XVVJDFE8I2RAGECDDV78ZW4MU7VGY4CD3SO2N2JUBGA22RXCM', N'Z1X312XA', 33, CAST(18962.38 AS Decimal(18, 2)), N'1YIAGC4QX5ZVL1RE1GW3DOJVICC6G2F8WYRYVI38OL20KQTNK1BI59YCFNS3ZY9UPRYM9SIJDNFSMIASJPMFQX2M0EJ8QZ8QB7ATR6DRIS4IU5QWCZKACU3ROCMV9ASDFOHF8H1DBUWYSKSUOMVQFYEH3I4FJII70R35OBOVY7YHX5Z4JS7MF1XGAZBPCMTTCOX1HM5CY0S80WJXJ0VRBVSYTMVPZZIBD4587X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (787, N'Mr', N'B1E47PG28KNKO6CDPAODWDEGRS3P2DJN', N'7MOT61R8O5KY9DPE7NP9PACCXJM2K2AITCXPOAMNBFDEAC7WCNK9MDW', N'CGJQBKNA3VJL8STDS1TGQ4FAREKDZ20QL0M5HQ6EVC957CQ94P803UN719YWZAB1VT086NW2VEKDVA3EOB89UZNRCE4', 50, CAST(7731.89 AS Decimal(18, 2)), N'XMUOE8PFEFE5BQ1IHWZ7URGDYIGUWRAPLDX5H6EP37H9LT6LBMNC8QS65GPWRUJM4OJYSW0BIA3NA7S5BVI93YHVLRZ0GHX9NU4W98SFLCUYM4VYOKLWC9J67OC0X0U0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (788, N'Dr', N'1VBD9Q', N'ABWNFPNMU15X', N'S9FL18AECI2HS65O9ACQ6J8N116V59VRIOALZYCN0O258RTYH22D281RKZ1E83NBZ4WKOAXOQHH3EAKI17RSP4L1J8ECMLGZIXRCS9964DNLQYC9FJ', 62, CAST(4704.20 AS Decimal(18, 2)), N'UZG2VV233OR3J9GW1BWW1WDBYPLVRIKIULS5FVTOIS8LR3OFW4VOY4BXL54696CL399XGBG5I7D9OSJU06ZMMWJPAUJARMECGMIITQYKNP5QQ29TL9536PZ7PJNMR6EVS1S1A00A8FYXQSY8LQOHHB5QNBSA3BTHAAYP97JK8UURQ1GWKE11HXEGW1EZ7Q6XLHMGU9YD738MHD0LUWQOAR0CWHS7TJCIOX59');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (789, N'Miss', N'', N'ZPX12XAXY2KBPPWH1WGF0FDDY8MRQJ97AGDYN7KFLZC8BCPZR4T4OIGKBJ3TBJ6ETC18CXUUB0T0252MIM0', N'1BULVJU0GWK250HKHI8PSXLNBH0BLW5X29FOOBWSY9TAKBHK9DVQ6TK3Q6ADIIEJQMZVLTW5MFRJ4B30ZG280EQ9PBYI1IAFU9J', 218, CAST(6258.63 AS Decimal(18, 2)), N'02AFNUDORZI1S4B0HMUG9KCGRKNQQYK7Q6UTF8MXNO4IA50F1I6ABS5FQUO26MYSFBAMAIL90WTLFT6LK8P8S9VY0E3LKKQ0PC3ZUE5IWXAFYK0WN2IYWQ05FCLVFZOF5SW3Q7Q537BUZGZFD6XH2S4YBYJIS93X8U96OX6GBCVPF66YD6I816DDOXRSN8DT4DL46TRG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (790, N'Mr', N'0MEPTI', N'Q4JR0SM44Q42TXEZAHNTAZTNOFH6HGBOJKOPT97JBPQKWQ64Q2C1Y7BRA', N'BLYFHQ4R10', 120, CAST(19572.68 AS Decimal(18, 2)), N'H6PWFJ5SL5MRUV2GWHQ5ES3Z1K1K1RKE18K0OG9DM023Q2AIJNAB0AMP2QUUILQTL7PLB1SF7CJEQ08ZAI0DH8DRMVYXLFV199IICO7IVU4OR8Z2HVJZKDCCUYYF3UUSGH4GIPMLBIHM4PZEWVGQVWGVW5OEQRF00B793IKR9YO2VP84YJJ7E4XK09KC18VJ2HMSIQBDBOGX8EZ7WJF678LWEM8TY7Q024ZE3FM885VPNZCM9CGHSOBUVPEVIHF4YGU3EL3GX7Y1CW8EALKLR98DS5ID1QPQQRR7487O9ZJKQ9HZGZLWXUDP7HA92PF7H7BL4191EVBRPNNINJW15TSVE2ZNX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (791, N'Mr', N'157G2CGXMXCEMQZV00PNB10FJOHVR0RXAWNX53LJ', N'2KBGNNFFJ99P6094IK88', N'E2', 12, CAST(3844.66 AS Decimal(18, 2)), N'LJKC2IYWVFQJH1JLZJUR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (792, N'Mrs.', N'XPFXBD41QDP4UV05RWDVL', N'Y9CGE49QC8XEX6N7V224H7WV0VBSUOQI134B', N'E2G6ICWP69VE345CPUR6ODHMQAAZ8OCJFQ47YNQ71MFPK3M0MOB5NWM0LUG81WHIXCYCZXE13K42YR2NOADJC7VI43M46I644XS7490OA9', 12, CAST(18109.20 AS Decimal(18, 2)), N'JSD1OEG612M4GAR6CK4KQNHBMBRCS2FT5B1R7AE3HPTD4F1RRFNYP7VWB2FCN4EYMSY480Z16020T476AZLDFG4YG5F5V2FDBVQBHWIQFLSP4U26V81OJ1I5OZO3KU64KPPYDV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (793, N'Dr', N'M6E3Q31PWF62EBKI7BCU0M2TF0MSE77OZQ29J8N1Z1', N'Z8I6', N'3RJ2TRSJQJX5PGF8WAAULE0X1ZUJEAO925SRK0TCEYFK7R2RO13E0EGPQM1TX95GVO3JNONWGYGMYGQ9X2UD798NP30YY0E4TYOIOI3ZD6X2YTQAVRWUER9LFFUKOPYGJCT0R7LEYVZ0C6PV', 191, CAST(16291.06 AS Decimal(18, 2)), N'EGUXTOEUL399M0RUACKNH7F5LFO4F43SZJN7O3PH9520BKJ4TUFMS7861PBD0AEGZGA3CK66M3EC4FU1WKBKPHZSAH5ZRBGYQL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (794, N'Dr.', N'9YSHOK9O2IR504KOPG9BP7I3N9B', N'61BA8TMXMI649QDGFITHWNHFCT2B8VTKYS1VJPNH6W28CX', N'P263JP1P328NJBO8GIL0QIO6HVJR899PY7YNRCZMRAO5CRFKBSWN3UN6E0MN59HTTIOCC1G3IZ9FUITQGZGFDLM4KR8RQCG', 176, CAST(12214.10 AS Decimal(18, 2)), N'UAGR8O8ZPTW1MVAHGZUQHGISVE6EBMFLJEZQFS2VHIAYEFJ4GU0ZWUJESNWUHTO2EAI8WK1NWY9Z6JEGV2YHMFPOVKYSW8DOU8J3WB8WSC3XLJ789GYFV7GZLUCBL9RNKL5YZBJKT1O9BR2BDPJFAYSNSKH2YXBIKGD0E99XWELTI6NUR1YVQBDMSH5ETGMWQ6OVD2W3GLIWCZ5LXMAWZFR92R8W3U4GRP3BISGP4UF5TH9TCKH66QXBEFSMUZZMH24NVT345LR4ZMFLHEJJCXA1RSX2ZUU5VSNQCMXJHD1KYTBRZ64FFFAKS3V3W04BQM96YP9VH02ZWP3YG53TPF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (795, N'Mr', N'Z', N'EXIJPPOSJJWYERAOROL5H', N'TUBT227ACS54L7CV6W66T1G8WKSKSOD6IRLZ7ZOES52KGHICEDKT5AORE3XH9MINFYMUMDO78SDN', 1, CAST(5696.41 AS Decimal(18, 2)), N'FI3X9QUNH8PTCJ4T9W9YFDAN2ZXMQWBLBXTOUR05MCLQ6WREBCTWGH927FV9S8WKX4HEQGYIW3B2SKH68IAE3E4UNRGEWQCEG1T2ECOVDB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (796, N'Mr', N'BUZ5SVNJY75I458L', N'QVBBZL93EZND', N'VRF2', 161, CAST(6051.53 AS Decimal(18, 2)), N'');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (797, N'Mr', N'4YJXKPQR2TF99PE6W6UCP06I2572CV2660FQQ48EPFYPI', N'C3U9ZHBNR8QV8AJQSDPFKTUEDTX9TJF4WXEKQVH', N'5E4J172TL32655NF5HVOP1PCKDX1TIBIFTG3JVXFRSSK51N8ZJQAJDQ4PRYNA102RKRBOJVAKFXW947JQ', 128, CAST(4640.11 AS Decimal(18, 2)), N'56ANYO0AXIGIZNQZ0JL5RXMRQFSWUF0SEROHHSG8Q2GYKA2QLOUUPTM7KJXIW3FIHO48Y9I72DFO6FD1B6K62K5HWYVXBMNXGW6TSB6NRCEXQWCH5US9YALJ3HDJC51T1J7A8J9ZZXFQ67Q0LDSGTEZ6ANQAYMAMAKW7P18LLT91VUCVRDYYDK0NJ1ZLTY1CMSGLBIAJ56VZ4YAFAUJLOC9PK8OO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (798, N'Mr', N'VTQY', N'69YMLFQAPCMMXY5I9GV5J1T8TLZAVYZWWI9BU7SY3NJGWT6YSWB9ZBN4GQSZFGERCPPEOUO1OX2WHCC0F1IZNPXLV5U4ETIN8S363S9X79L28QM3ESKEXE3MS', N'19S1Y12CERW95PSPTLABKFOFP3GTVKJFXLZRAPLQ9C53DAA7', 131, CAST(11298.07 AS Decimal(18, 2)), N'NRNSWE3ERJ92ET6P0JLQKAZFFOAJQ13TMHHE877J71JA9IAI20KP3XHCS7C84JOPGFFWBRHTB1JJRO5XERGQHDQP04M0UYFNCTUU2D6BIRD1DYL42FUC2Y83PQW75HYDMV6XTBU0L57QZOB1IHYF42LELR5BHZ61S0FHSOARKURWQI30EUONII8JARB26JILZ5XZ8T9U77VABOO3O4WNBIIARW70C7K0B5XKK4SLKTFBMY8M28E1MVAGNM7CM8HZMUY5Q3IJBB2H26NSNLX4TIEGVGXXXFYCCGPR02VZPUQASSEGZEO1AC53GIAA6KMWCQ5MHVSLQYEY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (799, N'Mr', N'E8S8IQ2MKJZ3TR8399NGRXFMA1HZ5AECDJ', N'JJZJMUEFNO85XNRKRE4UC5IQQM94PTPHDY9QXOMRNS2XU8UXNDMPIYRD08S0K9QTZRRYD0M3RC6K2KWIRCHB70YF6VQPVM6E29Y3GWJMQJX5R7BFCA88SEMZTCRIAX756SI', N'JAM8F4LKCCUK8HT7GBJP1F4ZJ18AK2ET8PC9X6IHE6XDR50VBVWZRI336NPDWB0AX1CJ4KAAT2BUHQ7E0CZO5F1QM82AH5K25NFQTHQRLM6O68LFFACJBC4HZLXWH0SNH8PU', 24, CAST(2473.92 AS Decimal(18, 2)), N'4N22HYIQX1ZAMBHRKS57TX2NRY3L3ACY6ABV87PL45FO5BVKAT559RZ6KEAIVXNNP13B');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (800, N'Mr', N'YDRXZNINUQB5Y9TMJ', N'MS1VTUKN2SOZJACLDYLNMY9440CTB', N'GLIM82I9DJDNNU6S1QTIYR7KU9LUI7XJR4ZPTW39M7M2J8U6LVGIVBCPDYSYHOR5LUVIVGY4NJWQ540LFE8MRFNFS9CV45RYGGGPCCB5', 162, CAST(5919.21 AS Decimal(18, 2)), N'MID');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (801, N'Ms.', N'IKGS6YG93HA5MPA3APHCNS99KVYWIPCOU9VY757TGQK0DP', N'ZYPISJ8DEYTYW0OSZZLMS77U6OJXRSHRCA', N'BVBFLK8X7I3F', 84, CAST(8281.38 AS Decimal(18, 2)), N'J3NIEHG3IA956OFA5BUW6Q6ISZ47JKOBS1PNBO6WUECMDHJCO1UAOGWTW5QEC8KYLYD4YSZH5X2SDK4AGSJIQDMB5WQ6XRJLUE0F4EDV1C5RE4GC0GYKP277B1Z21TJDDGYYJO51ENGD8UX0GE5HSZWR7S33FBU8TSEX6HSCAX51LUZG3YMNN2KEJ6RRK2L3T7KGGZUYMT6VTV6CSMZHO7LQ7ZE0Q0R8B17E9JZ34N0UVPKN0EYY24FMMT8GLT8L2YJRNR29MVC16RUHFQ0B2T57MLRGAIIAFFRX6S08BPB6RDFVZR1VTWI9SB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (802, N'Dr.', N'MVUZ347FPB67A0KRD4MADTBV5IOWX88WVRC0NQ8JNU6N0', N'P90HSC0JNTN18GB1C8OZSQVC40BLMG', N'E57GPL420HSXAPOB8333PFKB06O3XWMOIB1AHWMP0UADJHAVKMYEZCEZLVFJW153V3EZNDTBHD2V57RJVTIBX7O6W2PLG3SZO6IF2B77SNXL9JUD4WN3IT6NE82LN7VEL37', 158, CAST(15898.79 AS Decimal(18, 2)), N'2ZMY4D2MQZWBMQS0DIZG95WGJHNGIWI5UNY8OQ6TOROW2GF41W5RTVVW36FMPM3TGRHYSJBMB5RHH0E32IELRRCYS14IBK32NUFAZGCHLJGN4DF3RBK77H2PFI6QESAQ1OUMK34L6W07BOUEM1Q0ZWV5SQVG9M3S9PMFJTIO7Y1AHUEQNS3D2AQ4TOTU7NCJT8YL1FUTJ2S1VKOXB4THJPQYYHLVZNGJMHG8VSP8X9TZHP88ZWJ2UU03I0NKTZUWL8FE4G1JFLK9WQH99DW24EPSHCQV54EYEWE8AU4JUZM9AQ7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (803, N'Dr', N'XSV', N'ML8YJYISASNJ0IMAHGR5INB0ZEOCR0EX7R1F0IS2UFE747UTIQU5UAJYA7Z49509DQC8H69ZNOA394WRJVU1693W825TJNSOE4TDULCCGVH506B7LEBZ34NG0E0GF0WMO4AIXXIHKBR', N'PBGKLAJ', 69, CAST(15797.27 AS Decimal(18, 2)), N'IDBG2RS7JNXRP5DA6LUZC9ZE9D74RGHQ5ZDRTYVN46PNWCTPMC2OV8E9EW6PJOG357MQSLG8Q7U6JBHWJIHED');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (804, N'Ms.', N'6', N'WSEZHC2ED', N'92XD7BHJGPGV0U0U8LJKRJ06BVOSG2H79VDCAPDCQBYVMBXUAMBZRZIQ2R1CNP3D78L5HOJI87UGL4J0YTHTQHGACNAJO1P17KOEQSDL2T', 92, CAST(7867.02 AS Decimal(18, 2)), N'UWK3DXR53GPMHPP3X0VUYOD8P2E96061PBCP5O8JGK4EGXUS7GLGJJV6JCEAJHZ2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (805, N'Mr', N'REQSK', N'1PQDLXBZFG9DRJVS9NVTERDPK701Y3YH893LSJCL6LWAOI0U3P2EIJ09B0TDXA1BIR4IGA0PBANTV21176X90K', N'K524X81DT79MPSASTE0U6HT80G495GVRXQV', 96, CAST(17712.77 AS Decimal(18, 2)), N'OW6D0X8SCDDKYRR8M2PFQI5G65SAXZZL15S1NF6ICO76HLLKM1WE9NJ6QP6U4YUCDSITZQK7W621AZZKK7NW3LBELMAY8CEETUSO3RLVGPI3KHVQQL9WAY9SH47DGMYJSO8G7AHSMSFD28T4RJ8M3H3VLZ7YK7FUQYAW9EJF4GAIIVP8A3MXEBGBKCU72I8ECLN3XWUCZSIM6KCQAYOGLIFEIYBXKCCL8V5X7LBE9AXMTT4003X4URTU58LYKXRNFX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (806, N'Mr', N'T', N'P8T', N'AIDAMNWTYYYMF0J71YK2CT4G3R8CBIOZW5HB1P8JLZA2IIT5WOPZ5TTGEW7UFJIF9ZQAI75CP1GCJ1YLY3FMTOT2B0X5ID42HUSISIMOJD93CGXCYMWB3VML5NZHA0T', 118, CAST(9461.21 AS Decimal(18, 2)), N'BEEIONA7BKTLOUBWHF8QG2BSY0CTBI96VFTMLK8HKKI9BNX490A876Y83MJOAHVSBMP80PBW6R6WK1GB37JB80ZPHKIZ0K63OPYOXO4KOD2F01O258L2XKJBN0RF6CWML28U2SEF3ZMVYKOFWGUSZ3535N1WWODCHGUXTUZDT5ZYXOD3CBJQI3MIW4OFQHIEL9EHPQM1HGYT376HAY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (807, N'Mr', N'FAHH2ACINJ3NV2NJNNV7K', N'RQYNWKKSWDHDTPD37W7E9ZR6RCRAXSFAN08YDNQ9BA5OQS4KNGRS1F0SYSWKSAU4X6QTGEQK5X3ZU3GY87NH1M97ZG0KR6H1F1QJ2A48Q6M3B1', N'XEVO9FSFGR3GFPQU3L6WGSYL77D5J4EIJX6XK82ITHVCR65FW4EPTWV5G9H22NVBCKWIJSAUIO3ZXLT01X8FQPPM10HAR0F5LJ', 4, CAST(17158.77 AS Decimal(18, 2)), N'L5NUDTC1P6JMCNKDNAVDLPH815TEPX65SXW9XF0ODPWVXUM5JTI7EKZWNET80YBRZDUERAG897ZVSMB6JOUVFZR7X0MILSNFD5WJ07E8DAX7L4403MOC3GCZMMHROXMHJJHMQR6C9LH42JMTVLEZ3BC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (808, N'Dr.', N'0Y1C4G', N'VBXBLM', N'7ANW4UK65TW8UGG05FGLNV9GIBZ2I8XDDLMQD13K5IJT4SMUBZAQ5XCC06DSVIOXVJU8TPN4BVF4BGCQO4QIY77G8AP6OAPNUMXKYE0MC6E9I80KUM4QR5YOBEZJZGF05R9OISR9346RSYX094C16Y', 213, CAST(15552.90 AS Decimal(18, 2)), N'TWXDPMK1MHACGC2HZ7X20');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (809, N'Ms', N'JWN4CCOKQLE5CVJ0PQ74W3M0KAJGQ5VH42EQ8XB6Z34M6QO', N'2BXIT0E5TZG2JSCXWX3EQUZ6WYH48TUWE1YFLJH3ULDNM9H5JE1EH8N8BRMUI9WZ4KOHUWBCGZK5GCJMHCLUSGE5EP4UX', N'PN88KEHMWQD3QZ', 72, CAST(5668.85 AS Decimal(18, 2)), N'V2IMD77JTTTSMN00GMVK6DB2JR9UYLZUD2RIX12GT2OHINQFHYQB7FGHQG3MXDL7UZEJWH3FJFR4PUJV1UCZVNNYM9RGXGIGHGMJ86IZUARSOCRWX7L30LC7CGX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (810, N'Miss.', N'HCFQTFKLANK2T7ULPX09HSRRF05TZZTTLGYEQ5NPITGKD9D', N'LKODI2LZAM3OYIOIRY80D6O27O6I35SHFTDZG3TH0H1ZQ3IVHWX5MX9', N'21VUNMY7VDGZ9V3EU7VJ09J7UMIA1FU71X2B6BB9QGDU4F7QSBIWVFBSHNZ14N5GJ8YCTS8IWLTJWP3FERHQWXCMM9TIB952BXBV', 49, CAST(4880.07 AS Decimal(18, 2)), N'PMH3WAM970MUBD5KVVAAHVJPUFFV4F6S9W97TOVDPIOWLQSNGRBG5N5U3R8HVR5STULF3XR7ZXKY6M44NREC4PNMQF41FEHYCW3R5CKJ03H826NHN4U3CTO36YONTQS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (811, N'Miss', N'8JW9PFLOKNAT', N'WM6UV3W5TL945O1O5QZV4OB45A167MVHKY3UXYLXLV55TDQSV80VXDA7A1PL2PX7QRK6L7R651A8I6BSK8BZM0', N'VX0300AMRVSKKNC6EJLWBPJYP7MFQ8ZD7XJTHNWX2ZVD0XRMTWWDPZ55E2DSDUWJWEDM3JPRNOUC', 157, CAST(19038.85 AS Decimal(18, 2)), N'FMMAJDYA7VB08FJJRNEAJDLJ8ZK6NXQABWSGKDX96KWGHNURF4W5CH11021JTRMA51OCM3ZDP44ZH41K5SRI0KYTUQFHCEFEXMBGZI5B5IG7D1KV0HE0039K3UIVOH1AOP2UTLLMNFDI3Q');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (812, N'Mrs.', N'RLATQGC9GVK9BROC7E6MDKG3K36V9T2VUFQ75', N'6NVJV90VWYYE1SJ6NGTPW31O4QW0TDYKQ7EJQNWX55EAKR9011NISAN3L6F4DZ2I0EO', N'5YSF0MTBMO8RDFEA3J73BH', 84, CAST(16697.71 AS Decimal(18, 2)), N'S6JGU0FETDQD409NNG6JOZP2FWRDKQQHCEPP40799A8H28GMESP1X7RTGH1X91U3M90PAJIM9W9DR8Z7F4ZR0OJ5MW8NZ907G4UT7RBU92S1XD18HUI4223YPV2EAVN0V1XND6ZOT4IXWI79U055RV5D1W3BOWJEFS5WGEUAUTBXK517OTKAPI8ZWKLH2N0WK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (813, N'Miss.', N'MS0ISNC0DOXCC', N'E0GZKWJROR4CGWZSQGRFKAXJ8RK', N'K4IA75Q05TA93KDD827AQ5VQ4AHJ5M8IOC8BHCL6VN3Y25APQ5Z146UF9S6X', 229, CAST(2836.17 AS Decimal(18, 2)), N'I4DASF5VAXK7SVUWNUC9OWJ5ZWSD86SEDGNXUD145U7BFORQN605JBFLL7AWNSM345UC8X29T83TP7QB42P16NV111BM34HD7469UEHP4QCB7LWDHZRK2LXHASB7LF6PQQML1GGPK0XFAJTF5Y53CWAM7OY13A4PKNKHZBB1I1Z2NH7RZV2NA3CUFZEDHFMAW8VNYCGTM3KAX8YPH7288GEHAQ1ZXYJ3FP5FLJSMF816I1W61OWADE1FTDC7BGWNKHU72I4XEFS0E8Y9TUY829Q1NQM77KBZBDL16O3IKZVXL10LF3DGHNL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (814, N'Dr', N'36W7479M9HZMSOEW0G6GRDMVRSQKPIYXGTROJJ', N'3WA62GL0KNXWRWFU22OG0ASKM9842XQTCDNSHYA0AY72IVOOV2H6335T3QJT7HXNW4KD8MD3RN512Q1QLK90GKQ87UOQEHTT0K5EBAF8ODEGX4QDOT7M8X7CDB5DX', N'6VILSKRC2VWH1E21WNYZSTZN7EHHS1P6OJOSKCALJCOA3K2SRDC5', 43, CAST(10657.00 AS Decimal(18, 2)), N'QTKCWWPT3TO1MX25Q3DSGMP1S46VHOSAAD4RLO91TSCZYH08P1YIXYDXMV3LM8C09BNP0ZU0TCYOAQ2B3Y5FP9DC074QKNELFBQNUB8P6YOLZPNWSRIO3WBZYAOTV4F6XD8Y0FHRPF9RKSDBJ7XS4QIJ0QPJNFU2IINLGPWDARYNNKF5XD9N6N17VPY9QX4AL6814RUUBKHDRUVFBJM956WUHGQRQMNDNO2HBD15IFCM5NG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (815, N'Mr', N'YHZIJI6VNLHNG5WHPK0FCGPXRJ15YXPDGD7ZRV2CLW2Y8U', N'OATC0ILMFA40B25AA34B2L97K2CS0Z52B1P4ML37S1EXH8M473129LK', N'YVDVVED39J06QSIPAHKCCFF4PKMBPPFPKYQOBWPYWH9SN4CRK2HWSSVIF86BR1EK4BMS2UEERLFV5NGL7VRM8JWR2782PE6U3POCHKOQO246CZCSRL3VA', 88, CAST(13232.26 AS Decimal(18, 2)), N'TIY7AU5EADKO133OW4Q2SE3XIGQPUAPTZPX7NG2SIO7XTC4FCNP0XD8FF1PU3GJZOQPC5V0G1XJ47545CBC6LPWMGISMR8O24792NRAHN8YZT479WJIS3DEZU2VM2EPT8HZ0W2IK0UJDQWSCBJQ7QWYRSA8KWNF8I5QC47DU0XR8U18XAIBJNH3CI87LUYODFAUK6G846W6S4QWR1A9DCVL11DTVZRZ29ESJ7NRUA7CRAA8SBFJJOA0JPTJSMC4FW4JPXDKDJF25JTQR51JJ7GEYD8UD4Z7X3XU6RIVYV6Z87V0V2RMKSK7FPKCOJ68K742LYJZM6LO1G5QH8YADCN5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (816, N'Ms.', N'RKB14I4QIS2RZG1XQV372YWQUH', N'1MRY5SMF52O9D1NP0XI07CPCG7LWY3TPHL20T51ZFYRFKCR5GC1C3KWOWFHX7PH29YSRYNVUVIL8KAS4GFGM1HMXPE3EO3SPHP6LK07SG7GKZN3MMCHS9U0SCV1KKG6RQVRV37KG', N'BKEUPVLBPDFKRGY43M60Y5FQE2UGB3AAKCD3', 103, CAST(8466.66 AS Decimal(18, 2)), N'QFH666FOXF12TEWJR0E7W6YJTUGKVV8KZJVJ2TFZ6Z314ONT2RLB8XMJGXCBQUT17G2AJCGYKF0W2XE57MI4AWC2WB34G48C61UNLD9PBNQTWPHII744BPRA40E79BHG6OQ03RKUCTSM5I56UKM9Z40HAJIKZ2GZ5AM7ZGFR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (817, N'Dr.', N'UFDQOW2AKMWLVBNP7', N'N5U02X2AGSBL0FMOE9OYM800OT3V8JFS1JMP6RAXZA4NV6QF56PXVHLE5TB8U71XCJKGTWIMZRYC4C5I3NP2THWJX7KCF12S87BBMAM8O3Y4J9ASOT5', N'NVT5CDQ', 80, CAST(9214.84 AS Decimal(18, 2)), N'ARIW44LV7DOP8G2O9QJ80VADTHVWX7E4UMODIK5EWPRPR9XTKJPPWIMFG42N9PX0ZJVLSP6OL4BA3LLKK1CEHO8B09WDIH47SRQ7EB1VD14R7BCVIH28DIIBAJLISS6304');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (818, N'Mr', N'43VKZC25NETOL6NU', N'HZ3VM0IMC56XO63W1TWT1HEPIR0OWROMWVA93FOLR0WIW1GC6ERUWC50LDCVZUPKGJ1SVUTL5A11KVTHBOII0UQJQAOP2TMXAB2DZNGBK5PMA4FPKVJAB7KLT', N'R8WTNIHPAS65OFM040L340F2V5GRDVMSPYMU', 48, CAST(15977.31 AS Decimal(18, 2)), N'BVE690G0GJH4OW1U0FWT99FXUQI2KU1R3S0Z4BT8WI2RTFWMQY5N3A92GGCIHEGLIQ1VW1PPLOXQ7N3EUWBMPDNSJYJNZAQI2G93E0QP8G2FDIVSDXOL2TW528CXH1PAXEOQE00T6ME8B8F03RA2M5G8K405OS76RRHYT4EC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (819, N'Dr', N'A41EUX6GATA8VF8O1QDSAG0NJ9NGV1PX01CL', N'2L53JBN4Q9TFHN76XV538LUY47ABL3QGJILU6HLDY6D5W5EV259OGP8GR7YC0BINICVZ2D0G9R52', N'NNKSL', 43, CAST(4578.55 AS Decimal(18, 2)), N'UEFENUTTBUQRNOSYG69ZV5DE7HJRG6YCX5');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (820, N'Mr', N'A95P3OJRWRYLZJF92ZU3EVKAQK93D7T3NJRG836RHV', N'O2ZTF8FT2ZU953YI9DMNQNJ9ETP5TFPK6825ZJL32TGD1QW91YZEIEH1IQEMIA0MA92X1TIQRJKX667OWG3VFB2SR0M84ZKSTU3SNZ87F8MYTKVCJPP27', N'J7X979T0CRMMRTTXH2QCF6EGPTR1HC0BIRVVXW9IJUA02BV15P6I29UDTHKDHSJZRB40YX0LT8SKWDDDXQVR6I88WH2FCV0RBA9R7V28OKPUHA', 26, CAST(7270.64 AS Decimal(18, 2)), N'Q0TWA6BCXHF32P0DY4C1P1176A2D5WDTHW1XM9ZTJTGXRDG1GTZ8K42PZMQ03Y613MM6N2RO4JIWK3FS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (821, N'Mr', N'HOVWHAOY1HHREPVYJFF', N'6Z7A607ALRZS3C2E1W7VF6O3Y659PF9HLNN3LDT805NUZ0GJ94OTUBP0A4BZVXK6II7YTO2ZVAJT3XQL0LQGM9YNTH1UC3KGCHTZUAA0QVFEGH0D89XYG1VXI15CM8', N'F46GQWRS92V3GVK9X718L4L62NN2LSERMZNB5E9UKH0OBRMC4BRMF2WAIZE38O63HH893JX6N3', 5, CAST(19176.79 AS Decimal(18, 2)), N'1WCW58CUCYZJZPKMEU5RAEE1A31M54W7Y622U4XE9CA3R55UYA6990IMIAL16QO72');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (822, N'Mr', N'OYVXGSY1ZT3LI92LVOSTP9RM5RCRC4', N'SP3GM4QRPBQQRUJ6BGNL35M0BLVHT4XDH8NPD0D8II7NQB43ZUUVYMJ', N'WUA1AYA0RCK3CS506LWAJ07A44U78O8ES5L541YPWFWRXEVHXIRLRSLWMZW542S235A660W5N6E33FDQ9C9PXNM0KPI44SKTNTOR3PBXMMXLEHS6L6WSS25FJALGHR0VLKG', 99, CAST(6055.65 AS Decimal(18, 2)), N'KSMIRAWRHY3AA4Y6NVYMXXOGJKIW7IN21YKC7GIWCIJKI8ZG202S9FVN46Y7RZJYA09CJMY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (823, N'Mr', N'B2HXJTXFPBMY8DV95', N'335088XKDC8I6TTA3F3LYY9ZHSIYA2FUP0L9VCZ9KMAE3LW51JSJJYO5', N'RMNK1C3BP1L3XBIYVS1KO87S3UFUL2ZT1IFZJCRGZTQIOIJ682ZSJVLIFUG6W9QN1S1EWJFJ1KLVIO3KB9LJ3696WWKOVKKQ32HWH59PMGRZ', 20, CAST(1397.74 AS Decimal(18, 2)), N'C2AEE3XBK1T7FVTL3X71HB4CZKAIYNWG1VF75G919NMP6CJF7N8MEXQ1XXFTTECW4D5KFLGMO6STOF6M1UABFA134EA71F7UBQKS6YZL7MY85WCHQSSY31HUC2G1B8L8YXIYVDG3VP4TCSY71TG8N9QA8PG4HYAY0PA7EELDBP3EWOIJ380IRCLP78Q5WCLWE5SMIQTN73WX5BDJ7X09YS6O4K05NGGZ46ZRWV0DFCBOFNJVV6YZCBYMZ4IXQNZRNXTZCLNCWMTLGI8G15');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (824, N'Miss', N'93UNMPF69RPF7OU5SJ', N'5JGQZ9BWDT58KEQFT0BOVWVVDX', N'QZQQWVMN6JUIVHZZQNG0VRF7736ZWWNFAW6WTXZPX2WJNDLNAPVSAYDYKIISPNQ9VE8ZB25TNR2TUWKUHIP70U5BI8CBE60ABNN84MC7J24JVK', 19, CAST(3476.83 AS Decimal(18, 2)), N'HHHNS7CSSC2MSDJ0IUKJ9JM2PID5GV2WLCI96A0RZTVZT017XHQLGL1YVEXAU6BWA51FVAU8TSJFNM8PG58Y5GGZBKDRCQXSIYONYMCMMIRO2LA858TOYCRTP23AW3V3UQXOYKQUSLBNORWQ94L3W8U57UXWJ1QJMOTBOLAKHZWC044Y5D1RHS6LWSH3MUBQVS00XL2OU0MWCI43PZQ60Y2TH8FV47XMO5G8341KACXG698DNDDN44QX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (825, N'Mr', N'BISX83I2BJ8AH7530SOGRIDK5Q94Y32LB8T3H5MK3M4N0H771', N'9VBRCGGQTJJKCZHQSRXG414PXCGY8OLC2I1', N'NYOA6YJ809WG2QUEHRSH78CPV6HNYQMFX4OCQWTBREMY869HOONR33WFMYF0GWAANHIY2HOKXGPTMDHPX0ZA2UCU89QRHTVV3BBQNAE6Z2TME2S8HP3FX07S4OQSQX34LTPA1Q1', 2, CAST(5281.09 AS Decimal(18, 2)), N'7IP66KM2Z872W0LY6VN0LN7Z18QUAIJFIIWMBD4SAD611BRDRPX92W4JAP5XTSSHOSJD4ZMSQVP7H6YPGD2LK9CLDCBL86');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (826, N'Mr', N'UD339T58SITD47GNY8D1', N'11SR3OXVAGYOD624GGM8RLU0ZII5X6IUYHOQY5DG48FGDSK2LGWLVS9G7SRL5SX4X4QWHC6A364I6DN7XFJH9WY578I5DRABAAJ81NK9ALIPOQAU5JOP8GU15LP9T0WCVS8VTE6AVA6OE9GHYO0T', N'LSA00QG5GI9RQFY34IMYKMF2ZP0KDI6QNGU4P7SE8KC8NCD5VM6J431ZC', 210, CAST(2000.49 AS Decimal(18, 2)), N'ILPD8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (827, N'Mr', N'U64C5EPJNI12C9PH8Z0Y', N'K3UGH3FYBGAO6TWIE0QDDUXA6NV57B4Z29AODFBAQBKUWZ7GKYJN9GPQ6J9U7AQZBAMWI84ZOGM2A2D7FFL8RGPMKKIU5H3FKKILCAXBUKYTTMG352FRPI7UKZCYQAT7C7HPKSU4H9', N'0BPVSXBJ39LTDWQ7Q096FMBVOQCNMKFUSH6HPCREX494K189SXC0P5SEZU71LNXIUQ1VP9HE8V9BD7AMI2VO8E5MPSHV5QTA7Q9U0CKJFYSUWH0SJKJJS', 54, CAST(14159.59 AS Decimal(18, 2)), N'D8S25I77X24RFHGQ6XEFX0RN0JKV7MRTPW349JER5EGA7TSPJSESYTVDG51LYBZBAB2JDBG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (828, N'Mrs.', N'D4QQIW6DJYT0ZZ6ZR4FFO4ZRBRXR5Q9D3CH2D', N'7IWSX4EO32BQ2CO0DYZLKQRHM5QJD7AAG40CO6FUBLQ51HECVRH6HNTGQF6RDVBVR19YCBC6J5AY0MF5RDNLQ4STAJL', N'AFLE6XRM8I2Z4NXGM5IB99MAQ7RPCL69HYGT8M6NRTP9SWDDU3XD1GZ0TANY51ANBSH5637ZZUJFKCITUEV8NT80ZG0YY7IQJ2Y0F76QVYE6XJFHST4Q', 170, CAST(6224.80 AS Decimal(18, 2)), N'IN9IKHG7QUCF7ZUW1QN4HTSUE50VR9B8BQABJCSZOUU3ZK3BG6HNNC5PUF3FHKFHJ43GPJCOXOFNYOVU1OELRNLYLLG49CI3EDKVHMLXTTQYXIQ6K9DS6UPV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (829, N'Mr', N'MHJ64J81DAIHGVKIK84', N'0NGGAUDZ7F0KFAMCCVF4Z1007P4N8FOSP26VPUN68GXBD36FHFGE4HAYNG8LPQQRQ7UD4RNI79WI3OM4JP5TY9O8R789M2HHP5K59SBQSY7VKR', N'10IJH5Q381RCTWIDIEM74DPE23F0I643RJI1GGX1FNMXMT4NX4AFHJ2OB3GEQQL2WOL9EGX1GKRGQRS9YS2DWPL7HTQDZJBP2K0X7U9H78YXRLXJB7FXO7663DS', 104, CAST(2381.15 AS Decimal(18, 2)), N'4V438FK5B9K40CE3HSYXM12U9KZZQXKOOCCRHUKE5TL951KWYOO2RYW3S9TOFLEEOWGN0NLN7JRSFTO8Z3018HXPF8Y81VZKE7K9LWWB31U773NZKKOBLD56ZQ8RPDMBK7E89FM37PY6NPIBLZNG7NY12DAVN4LQFJNZP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (830, N'Miss', N'', N'YT320LXSHILLXIEV4RFT', N'PK1X82E6QU14JL6NROGVW71S4E1UDUUU2ORN71OP6RSH6AE20JFFXWNII9SU0JSWZ', 144, CAST(6733.91 AS Decimal(18, 2)), N'P5YL4WFYJ97X6QP54W8D6V5RF237R32IL59IHMI2M3T0NQYU09FQQC9TZ652S77G7OB0H7OIE6R2244P487HOCR9WFIBGG9EWDTYFYDTLWCKK6RU2FYK0QRVW131PC1XWC6OB5A5UDVRZ7PQNN81IPE6LY1DUC38VEN8Z2JW4SPMUZVPCCD140F7Y03D4XBIAMWLJGQL4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (831, N'Mr', N'RZF7TPGXNH4M5HYWH0GJ9EM8N9ETKR', N'3GVQDF00', N'2UUJFQZQP5EKLTZYTUEFW5184X8TOMYVHZ8K8H3PF67I4XNZV2PYHKAWTLEII6226I2MLFPCQP0PYI47A8YMWZEXOBRM3L7945BLU1EGCD7SKLYAH7897F57', 16, CAST(11508.24 AS Decimal(18, 2)), N'WQ0SBL3C1HY24VZFAZZ6S7G6C7395VMSXS3O75OH9SVTK7I0L46RMYIO9TF4IT65V65BRA84AIW0CNL4O2O1PV6Z9FFDQKZGLQYE269BV2G41ICM8BFF55G0Z51CVUEPIFFLP71ITC5NE2XR2T5E5JBG9YEW5XG1NRLM3QW1AWMSZTLX8A92PZJZ4YBRS4DVW4ZNGBOCW448XIHGCHOUODBN7MH4E585JQVUTYGXLX5LV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (832, N'Dr', N'XD7VH3YAUR4PSEUBDMM28NG4CC6JKBMCV869XM', N'TN0CAFI0GWRC3NN7E8E3235XXVC8CM5XSFPYLK7YC4BI2LZT8IZ7LWYQI2FE3AOTQTJOXPMT0GQYRMVBVIZTNYBWGZGJ5TV2GHS81BVJW57560YV63JKAU6SIN7Y92O7KNIAUMAJNGWHR5P', N'5Y9N295IQKT6IC8UI9JRLD2CG5VCX1OZ4GP24S932AT054YUZEP6LFJRVW7XDSKPVT21M6PPZFPAK27C60DIBIDOXY67LCQ9Q34B1X8SOZ66P87TPVQCF1DDFD3OZI4NPGK', 88, CAST(16741.50 AS Decimal(18, 2)), N'1LHVEBGI7ISBFUTKXQVYP7NMME0R9Q7QSWKWMJRXP1ID2IIL31ZFPWLUYV80AP9GA2JIAWXDZX9NO9K4VEN7RS0VBQYRAQM0S12ZY0B64MGSNY5OB45W11PI1O7KY528A9VN7K5V2G34C88DK9G5LQYQBKXASR8YJ7HE2IHQZ9TLYL5TGUZOPXNKA4BMMV2B74L4RTA1SP6BWDSQE4UXRJ9MKW3Y6U437IDUZ12MKYWZQBNXCL8I14');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (833, N'Mrs.', N'SJPMR5OUUSY06YO09X2I5WEQI5R', N'0KC19ARLAZQD4XATG0KIHN1JSZXTYO1CYRXOQMXAVXZUWXFQ630RK6YCJS8ADYNMYDFCZL3U2ANKO6NVJ7', N'XVA9SLTCB7YPQDIQLDUPQRWOTKS6VJG9NQWTKHKT7117EEXMZE1BLVQ5ZMF8SNHSRP20GP53T0HOQO9F', 127, CAST(19998.77 AS Decimal(18, 2)), N'OUZKUPCUXL24EZXQD27DSNAV986LLMM22XPZ0G7W83YEN69XEUUFTRR1K3BMJQ9BZZ2GAYQWUA5POW82Z96QR69B6OEX5LDHUMEN4SNF4YLIL1COU9MAKIKTQRALKTQ8XOU2HLX6LQMSKQP4CP2WY3WC2L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (834, N'Mr', N'K7LDR6TJ', N'UNARRSL5XDMXXADVII3QLZ6OAJEOC5DR5BSYOLNKEG5GFDPAAA4DGG', N'67GH4NRZQUY1B1KK8GPCX599XILD2FAC0MLF0BM1A0QV72IYX4H8K3P1', 198, CAST(11812.71 AS Decimal(18, 2)), N'DI1VB8CLX7979BTVR8Z159UQT9TR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (835, N'Mrs', N'1OYOICRLAGE67WBU3BV4Z3MEU', N'VHLH8EWSR0VRMIF7WUJC4TQ8WU4E11ZAP9WG23E5HOEFKM2RU37IX3X1RDLEAIQP1K2DLZ4TFDVGFAOARCJYUGDLBVPPI0VZXOEZJO6VZE2J8GLGPAMXYSVK7G1P9EAFHVIRVOQ36NYGDUD', N'7JM2EXBJ', 238, CAST(1729.28 AS Decimal(18, 2)), N'0VOJOJVBK75SX2ISLIE3HADXCDS0KE3R5P9BLRR4YK70U876CY8QEO0QIR7ARUR64DN7T67TRA4X2C235LNL5CDHOISUKGC3S1VHLZD5QEZ4J3N6O356650S05IAED9AX141GLI57IUQD8XLVM5GB6WN13HFG3RD5P7IYLP3LZZOA9FR8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (836, N'Dr', N'N6K8055I884UMKN47PDNCAAIOUXEIY2KU8PK1', N'A808EX15SUS3MGMK3N1', N'1PG4JXTO1WFE1V0MGXY1SWWKHTS0YV2EBL0SISKJEV1SLJ5NMFY0CHS4SVNP5', 226, CAST(10928.49 AS Decimal(18, 2)), N'ER7SYR4H0C42P4QHLN1EM9X2U');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (837, N'Mrs', N'F91PO2Q9OAHUVX16XCW2K57QZA6JZDV33593MNM7RF6MXO2', N'XUK0KIRBTF6C36F0E20KUDY1WNGP1DCPSZXGNZOV6PBDNF0G1L61NHIJVJ4W229G3GK38YCEE4D42LEGMZNF6A2AGDK4VRT', N'P5T02FV74NCEMXV3YXO4EJX22T', 162, CAST(10765.05 AS Decimal(18, 2)), N'68CROQ7JO06CQFEHLCYIAUYTNRPTA5T4XMKV48NEV5GPB8XM05OL4B1CAJ3X0D8I61E3VICCOKN4E8IFT3T5H80LL7LL4QDIXXI9TTQHSBWJOXX11O3XK31Y0SINXR7Y657HP8LZCCD5CHXNAKJGMFYTVK90B2K03XDJPGBT24L8QWLJVUDC8RCR7DL4YKO9RC1E4EYT8QDIUQ3ZYQ5GP7RCLLCBV6VHFBGDU7EHW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (838, N'Mr', N'JNBCNYI91APEW79AFDRPNXKAPOA5ZLSB710C2IF4NZ2', N'FVA6UW728SNI4EHA4N92EU9SEAMUE8IMB9O7A7MQRK7EMK62VA08HQPLLHSKADO0A07UQAZW1JATNV6U3KY3795KK2LTF1FEW63LCCCLB37XGVYPBYGQEKS0VN9NP5HZ3VXGRK', N'VZM5VEL6VZLHPSEBBNYVV9OWP10F', 110, CAST(16541.37 AS Decimal(18, 2)), N'4IDUWHAL67F7KKLOSI1MY1UW2I9P4RBNK529ZRPV190N27QVS5FWF9L3NHRD7KHEWRNFIBO0S6LP07TUSEXYCE8AKZLIZBNGSMRAKBDGHE48NW3GNXLTNI2HJCVIP61HJ5WEGJ9G0GHYAZNNW5V2QUTAJAR8G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (839, N'Dr', N'X8BK5V7KXCIL20NZOCAGHE6V7X8WXM2NV9', N'R7DS4274P4VIHLP0CE3QP2PW5M8TKXIYQI0ROYNJJITNZEEVL2OTSOIHNITDJSMXR0W60KP525J', N'8QY8MZ7HHH01QZ4DGYCZ7MF4YXMBQGTD5ZN8N82S6TT5XT49KJ83NFYLBUAPCWR0OMVRCWQ8VKTESA64SDR68PPP11XTYDFA1SHAXDWOTZ73MKS0N5WZ5KSYW6P', 52, CAST(11573.67 AS Decimal(18, 2)), N'RACMPIZO04N5S6046JP7MKBYROCMU5R1Z5P7LNA4O75QFK2M9F3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (840, N'Dr.', N'GCQZ3D8EUJE91VGFAOLTJ1GC8NAMAAUQ', N'2HMUFOCFAXO00I4649ZRWWWZH8U0CIRM5CE5VZYUG6NUCW6HGJ1S6S96LNC7UB3R51UO4YA4B4BQ91ML1DKSHYGC28K8NR042VOB1IDI9WH1HJXJ0Q5GQB96KHLW', N'YWAH4IC0SV7FG3D8IM2H9W5THG4GZIDRNMPWPPZ47S8SYHI27KGA3811RH0OEV0AHFRUDGISMY9HODU0X29F23OEKN58PBPCRXAJPOOQ1N', 90, CAST(8498.74 AS Decimal(18, 2)), N'J977ZEV06CUUCL5MGTII8KJFEKI6MPCF2JIQYI76R9XBDBEUFF5GWKZYQSSFWPEHZERS3FOYLCRZN8226OQ6JWIIKK05PSA2UGBYKLR0R7UKT0BHPQ87Y8X3W98IEI8S1O46W4IKXQEC1YOK9IFZJ23MJ72AD8L8Y1I4V4LL7OA8TK1XKN9W289YLIMO287P46DZGJO4XUSVSUSZ64PPYP5QSJJDIWJZGK3N61G1Z5Z8GD6QPNIXIIRF0N6X0BM1ATF7Q5S4OOPSQWAF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (841, N'Mr', N'N6MYD729', N'2HJ36NDDBJJZ2JKHEVIA07WLJERLHQJWH46FXYBVK6O6MHOSPP5M3LDUKXJSWRVL0MIYC4KGKMQUJPZ2PZWSLXTVQCV', N'4ZKDDMZQBML7EQC9QBA2B8XPQ2BA9DIDEFKF09RLPKEQ6PWSDE', 30, CAST(2803.61 AS Decimal(18, 2)), N'SOUDLGXTOMIUJ0NJXYMYYZJUD9USYP3DRJ8MRNOCHE2J994O29SYNHFS5ZZCM5VYI530R1RA99HJX0L355QPX5QA4GHRNCQBI30464W1HHPDZVV4EV7GE61DFSVBJ0NWJ51TZGX09P8FFCA8LCCR59XC2NPE8KHGUSTUU15YY67PXMX2HMQ6NVRA8ORCRJRO7RKNJGEJ7ETY17EFPNWLUBTZ0IM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (842, N'Mrs.', N'', N'EJ', N'FRKCV2', 87, CAST(12178.99 AS Decimal(18, 2)), N'AS6FEJH61AI176Y82T909BN4M5TWXLM0T89E8DJIQ8EE4UDNCKW79LWY52S8PL9FOI7ZXK0O9RA1W8ZSS6JCPEQ7CA95KAS5YZPMMEQSK7XIBV1W30GJ1WQ9RZMMAU3ZY52XID5DGRSHG8WH8C2KU9328GVNS3HP3YJ6S4DPV33A48SI35DXSJ5P1ZO2IILC92DIOPO4ZCPQ6SYZNCJMPKWKTU5TFA7CIQ11VAUEH8YGTEI81PF5YYMO5SOTJVPO4C8FRW4CI55GLGQFBWRQU1EJ3CV2L0ULJ9CH6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (843, N'Mr', N'CTN61G6RY9FTFVDRF2M4JONFDOUHXHJKJ', N'T', N'MBAPHX37TZ6X8GKODRU7I', 241, CAST(19035.35 AS Decimal(18, 2)), N'G4K2NTT52P19IN3ZT2YOCF11QHAJXC4988FN5SDKQX960CI7HKF9IIQ13IC6I98QLS197GT1ODYE5V0EZ31DWUQQIDKMF72GPJK8B801QDK5JBW7IX6F7UTQ1ARTV6LHBHPMAS3Q3ZNIAL66HC4I1M8UPT70H66JS3U2MAXPUFC77AGG3LCJ23FO8UWGK29WT3Q7Q4J6FEOL91NEDRWWUNHON6TSDG4R6GE4K8QZ153NFUE77I3T5C16M1KJARTY9WFTMIU51XUPJU9SRMKVDBLTF7IIO6PAB4DIELKOOYS8IBNRRRSN6YLYAMEE0BHV8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (844, N'Mr', N'4JLH953JVHEURQK', N'36ZYQFK4O1GVJAVYH2WU202TN7Z9K21NWJGI04ZJCNWVDZ6101WG2Y8335AIGAKL0TY0UCXC2DHE37GN0Y9J6KKYADEUTH313AVK066N', N'6JXUF3LT3OD6NGB03GMZWWMF5IV27L0VCL4RRMI0LZWHK2T3DCOEKJ49XHOW7IMHOIT1BK8GXMDW04V3PRPUXMASHUT9YLS2DET29RSS47HY678SML7GTRK270JGQYIBTAIMATTXZWQP5BM9L0N', 169, CAST(2378.56 AS Decimal(18, 2)), N'EEGRE62W7FIDA3KQQWE14DJE7S65OCGXZYX8B0DLL9Q6FXBAUAKKG6F0V2JL0W8UYLDC6BFQJSFUMCZAHVBDSWGTJWD8GRLP1W8UJZ4IUU0ORKDI3944LU215KS9Y69S7QSQ44RIRSIXVS1ZJV57MH37U6PY6V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (845, N'Mr', N'R0MVTN57SCMPTHPU9QR', N'JEPGTZWPNHH10FF80PHX3JLAGBSCWMURLGM6VHHDI55ZL03VFB0GPP00SE0I6KT0NQFJT9DJ83FYDLPG7XWLMD1WGLDGGZ7YB5CUKJ16XH8MA1M6PKA9N8E9PJ37VX29WHM89UVOV', N'DB9MTRU88B25P55VPMISRAHW1VXWDAUPA5YH0WTJZLONUKZZ6RKZIVK3UDLXUXUXGCUJ7NVSSYT6LT1GVXQMQV6FKUNNBVP1RR', 213, CAST(1533.82 AS Decimal(18, 2)), N'OL8G0RNDYHMCSB55CITQ2015QMLWXFTBV8UBNB17VH7Q04BVO0CFD5HNK3QD5QGIOAHJHTI1HLULTB4MBP7W3DYQQ6RJKN251O1QNREVIAXRBWU9Z42FJJEBBQSB2ZHTIPJ49DZJBCETF6FUBIKGLMLH9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (846, N'Dr.', N'6YSG00T5', N'N54FLEZ7QWOYA3Q251FUAZEZPTFEXVPLDWK959', N'HPFSIWR6K2EH0B42X777L6FZC07GX9REUMKQF47QYOMD5DMB6TRTJJLBAGGIOB9AA0MERDMS0G9XJ2TYDW94HYUB19GYNO2NEC25R8KS6ZT39OR7NI4R15SC5', 178, CAST(7146.95 AS Decimal(18, 2)), N'EWY3TIT49MCQZL5J475LV4AYZJF18W32UJY2K8IVZBXTHLJYA1IECOU9L0493SVCIAVFM3YWO9LJ7HGD0GQ7EOQ6POGK49S7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (847, N'Mrs.', N'JX4WBQJXNVHDDOXJEPERJK0ZRFS76VTU068EISHQ6XMU9GS9', N'O8O75KY6', N'DIXN4BDMI7ZN75CGXI5R1CH8B5KBM9JQ0FV2VIUHPN6K70AYFK7A6D900OCZR208N9MRAALFNN1E6W0AVLV128JM6U165VQNNXWYDJO5', 33, CAST(16273.02 AS Decimal(18, 2)), N'LA7Q3B73LP22A24JQ8N1OXTKPQYMESFHE3M69NX4J3SZO4EMC0D046SNGN1DDKPTAKO7GX93BIIK5UVKBBADEEC7AYPMMJQYEYO3G65ER9PMN7HLRG11ABEW7GWH7MHRRK666S446VL5OQJ2H4V5HON2JSVZAN64RYU31AFYBXVFP97HWT03RB93X3MDX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (848, N'Mrs', N'XMAEDI', N'H6OT81Q4PRYKAU72KDJHXV3RMMS8FRMWWQ6VDCGWI0K6QNDCYHDTZ09SPHFTVHPX41NJNB', N'SNJCV', 149, CAST(6634.05 AS Decimal(18, 2)), N'UIOHDQWG06OWUKT8CALE3GN3DR6YN1162CQ8VGLGSUFU9OQCSJ2EUL3X15A2IMVOIGH4E4SMNTNJZZHH7B9I4OI44YEF6QCTYS6T7MXNQFQ1XKX2NSU6CDKTYCZFPCGWHUK7SOALDLROXG7K1CSDV5GL8CUUNIYDYUK2ZQ9ZH9TRLVWI5FEDK30BEZZFTGXVNEQ3V4KB2TVMCPZCGCO83KSVT8O0RT51CY364TM1U3AR7EZP0MZHSOR2LVANGJJ8OUAELS7NQND0A1NE8Y04UO9N60L9IYKBJ12D4L37');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (849, N'Dr.', N'X', N'8WMYWBX0Y8FAXETXWGE6VWN01AM1OZUONR4WC1CGSGG', N'4N2456Y6FPZLF8E9SXER9Z1W', 88, CAST(18981.85 AS Decimal(18, 2)), N'BQ5BQSK7VEHJFEZKM7K7Y4R22H8YA9MUSPIX4BF802NK3R4N3SHEJ0G7Z389KLWLRMQPV2GBRC6WH7YBCKVIS8BS9BY135OF51SG0ES0B6M6TKPR4XWZPETJAYGJ3F7LOQQGEHAYRU7LL5YOL6W59OQR7962Y8XVY1I2T9DMNY7U68X5ZRYWJ2C00Y85B7ZJXBMKNWUBT9IAGW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (850, N'Dr', N'5VXBRS2ND7GI1M8NLMY5PBNIB88JFNN9HDMMTV5TSM2L', N'F7RJB4R295TB9MXLPVCYERN59WKU3XDFG2KUJ3QJ8REHYTNQ4RRX4H6OJL9EJWY', N'XQ3AL0AB0XI3RKRH9DY8WJJULX4L4L5S8FVWTOP9EBV50DX2HISIDOUJQQEC7FSWYZB0TUNKOOTKODT7013MTMEKLB539C2ZJY7', 148, CAST(17229.76 AS Decimal(18, 2)), N'ZB136A0CWOI2V18BFYOWVLDI3WM39K2J4E9UA3T8WZQV4TZALY2BRZPEXI09NX2CMYYGSE1C5FZWUHD9XCIBHQS4OUWR3JLZWE96UII6WQ6CZTJF5RCBERUW6TRXH98MU00F86EETBERJG5VAGMC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (851, N'Mr', N'CW02QSV1', N'REV6122L5SQMC57G9TQC5GBYVWAXTB0BS2QJXGP1O6RBRKCEDT5P6M6B3WA5S4SUSET9FNIS4ONZOZ7BKVJ05A56VEG15K8KDXI', N'2W8MU7TPUAVCW6C5C63BKQFHPKACLU1P6S53SGRLTOQBGS62ZXMDVWGBHRXAWH4Z856419CWEHIW030XD7CN7OTABUL1IHOBKQ2AL11QKQYEEKADQ0WP4GSKCWT6NADXS6BA1PBB5M2HPFW', 81, CAST(16836.69 AS Decimal(18, 2)), N'9L4KC00QKPNHKHZS37YCYI3C2DQOWM1NWFLFVVW6DN9MRAYY5279NZ7QHRIZ9BUXNZK4VKX8ARYB8GLRERITFS0X8UX3DXX1SBYRQU2L5YYW1VI16QKIT1IVZNW1MUVDUWJXHT1KOWOHT4VCCWXMCE8RS3S2X1ZA2L15CKJCP0TWC11VRJOQX90FNR4E1YMMXDE82QZSCKWBLCER2XBED8DTKLHLF5BRE6YYNSS1KWDCCPUACCB4N79P0KOG8EC795WEEF4949TGU0HUR682T646X8Y24CS5K');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (852, N'Miss', N'FU8E0IKJ7QJ', N'Q2ZQACLHY7N3PZKXKROI9MD06HNKF3LQGVLHVTQTOO8OQDB6ZBZM9023OYJSP11ULWMTD31R0VUKEPAT5GK44YHGSHSWAX3NND2T', N'K7AIKZ63XHYP8V2AC1M78ZC0PKJIDBVXZ2LF0VC', 81, CAST(8662.80 AS Decimal(18, 2)), N'37SGWX81ZDETUZ3TP159D21QH5H15SGNVOX92BABUR6QS3EZZAMR0AS152ZQG6W7WQX52TREQUFMVAXDRH2U5PNLWV3ZCKVOVZU268W5J805V65V5LZY32162C96PR26ZRQWFV7JLWAXPIPQQ8UQLXKSXNZTYPGR6T54F9F9DFC6R4HKNIGHXBL26XYSVDKVGJRVCKBGSKC5KD1S5F6F9ZTU83XHBME0VHQ8DM8270ODYGITW5NG74MHPWM8MT555CA2NTFI7489AGVSL4L5ZXSQV8IGZZFEUI7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (853, N'Mr', N'1OZLUPH4D381PZC8HOUR8PXRDEUM98EC2NA80GW2E', N'HSWA8LE6HPYOPM9GWQNF61WA4H3R6X0NG2NNOUV', N'Z8CJRL39JS4NTOHLV9SZQMM1P5AM', 89, CAST(7719.51 AS Decimal(18, 2)), N'5F53Q493WD691UNI8058KJ7EAZI7OTER89M5YIFVOPTI19F5BX6UCZ1M8RTQL1E3ZF0R8HJPKAJUPPC0KDWQNJF980X7PO9NAQJM9NWTEGA1G7WJES675OFFZQJ7KC0W1VJY5QQWH2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (854, N'Mr', N'EBM6P', N'2AART7KBU6QNFEKGWL5QIMZKPB8NYLR2U9CVQ4GWXRXZ7D81I7R2O5UGAQ2IZWC8ENS51PQR58TQOZCC364RTPDPFWK01XX', N'HOT70MS94H9YK674BL0KQ2DCBIQXQVYZWINZZGHZ30OI6P5GEWEKA2JEBGWIWVJ9I921J84U30GQDV5MD9ITGEPTZ8NIKZ28GFZWN3W6SJG9M', 248, CAST(15203.29 AS Decimal(18, 2)), N'69DT04DSWI1IMB3MI4O82FE0KOXDO29Q2C96MXI37J4DZDWN237RSTAQVC9C704T8AFA1X0KML1IB016R9BLUIY91IBAO6W7FA5OYLM52M56RRFUB2KXOIZQB68JMQWFOU30UC85N5I7CRHA2GYLMYIWBFDRD2JCQQIXOFZZUEAI0RDKOYG5RATPC6OFZGSKM5HM9KLMGZR8OZWK1T2ELDLGXSKHRK0DLPWUAQA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (855, N'Dr', N'6C2JVRYCQ88FVUV4OVZ1O470SSDCAM47PTGW6VHAPYHS8H7K0', N'FPKKK20THZXGB4RBDQESRLFP92Q44QQ7ATBZESR06BATRXEB59MBJ48U9VAHCVOR9P5ISRWLYEMGALYCOFZV3FO6LHPJI9OANIK1RWIDC1C4ISJOXYTXWTNU1ZWB1D3OPBSS1WKSXLI22JNSX1MKG', N'0GAA5MCQS4K82BKLA4Y89YV9Z9', 157, CAST(6742.43 AS Decimal(18, 2)), N'CUPRIK1DA4D6DEY9K1PHZ4VVZDMY32ABIY1RNUXCQ77N6UZ6RMA81T58YTR4Y3A7U2NFC7LP3DQRW8P5EF7GS19PTTST2SENXZS36KUJ0K5O2DCQ4LQIVTFSSXMJESMBY2TWFLYULNF7VLNFH2PG2WS4J0A9XB58XTP0JFAIMWW8E8X7A72B2592APCFAPWAH6A1WMV1R6U5ZJQB23YQ9U5RKMPU3V8W0MQ7YVBNB0JVB33QZ0C7R61N1IH9X1YWYX5CSID7SAE8A9FHJZU2I05TL36FD1QA2MXEYQXGM4FGRSDR20');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (856, N'Dr', N'MR6NC141R3EL1430P1EYXTDPCPMESAKSB0ZD', N'DTVP0SZ6BZXNF7ZRN0D10ABKRIC4D0QI8YXZW', N'C0WXF75777AUGVPNUBF0LL69BBDK2K1BV90QV640X3DD0AHDJB0XJ9RQTNM4UL5M6ZZ7VZRO7E2I8T91T00RK4RLHAW8KZ6C', 235, CAST(3225.73 AS Decimal(18, 2)), N'X6VDXRBRPCYTQJ35NC0IS1DFELO2SQFCDBS369ZNMZ84OAPWNNPE1HXWSGZB29YZXLFEQ0ZEDDWTT9Q3WRE500AWEWAQ9NK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (857, N'Mr', N'2HES44EW3XDP7R661CTDHAMEP8GIL914P0NJZ6SPZS9S8PLJEM', N'VSSQ9I4F4FT6DL6FR3IAYIFVSB9FFG90UC4L891SGCDWB7M4CT7UHLDDCXXY9P0N6SB1GL6H2PUL4JKLO42M8FJ8ZR8AC2JQCQQIVLN', N'R70B9HK', 138, CAST(15501.04 AS Decimal(18, 2)), N'0862UA6NNB1OL33JPVFAVTZWAJZUP94PTITK3N8MLQHOZMBASR0E89I799SBABYE7BV2AJG1NTP4BAWO7P2X8QHJ0MBTVXBAR2HOQ9Z9BYRFKDVYC34L816GUB1O7N5QHEC8S8XYPSLAZ1ZNQDGSSP1QW1TF7B2OS1X50M5456VGFVHSCEYU6DXRDMCRFIQDQXHY4TM37CMMTLA0J12TD7HF35SEA');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (858, N'Mr', N'N5ZIRUZ2WOVATW9063M6UK4DO1U60MW4YZE', N'MQSRRR9SDBA4NDER932PCV5Z549ET1Q3GBZIM', N'CQ568I0EKATKE228DPK3J478QKGL8QKIF77DLF9RVUZPCRKP4SXKWG08IWFO1F5UQB46', 51, CAST(13320.44 AS Decimal(18, 2)), N'ONFIPIEJOJRUNUQAYRBB8EGX0IF2UY18SSNZ6BWSM0CI1IKNOS712Z6A6IH62BOPIJ2U7R4MVJP71XVIYSE1R06TMCSNUQPABM0IGQFXOL5I9Y99MY7AXNYIC88VYGR4TFWEWD28CHD6UNKN2J1VIECOOI57HKY8T0OU2UC9WZXG9SOPOKSFFVME27QE8UQSI5CTYPL76RZIHVEVUG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (859, N'Mr', N'P', N'H7IFX0RF3YBZ8RIYEQKSMMHVZBK7NBEW4IL', N'OMYGT7P4IVZ0RGFSZLZ7ZVOZ', 91, CAST(3585.93 AS Decimal(18, 2)), N'XSJSXE9RU4Y0195Y4GVQYZK8NW4X6TUKSBS0ZCEEOXR28QX9BX9FZPKY7B519CK0AE8QG5ZS1G117HZWZVM9JEK2RUSN7D4CDQSUI7S6YHEJNJQPB82EPBGWT6YLCBLNBPOHP4ER2GB2Z1F843CYBQM19W1B87TMVQ7YV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (860, N'Mr', N'VOZ3W14HFWZPFFRFF21LTQ0T1', N'7WY48Q0A3UTYKIW9XT5UQ', N'Q5Y1MDUG6Z439A4009YP1RP5YUTXZV2R0YJUDMW09SVHPWVUNIWGIY37BGE0', 137, CAST(16712.27 AS Decimal(18, 2)), N'06UAC9ZDWRRQH9ZMCL2M7T32IUMO78TGDV2541DD1V09KIQJN8EMV8073RRHMB6NYADL6TIB7PKCTUH0431YU6K4UV2C9VQQOCBA54CTQ3E6OOE89QDJ98TRP8QBR51CYTNGJ7V0Q78QREF6HT3II6HGJJKWD12K227V0XP2VCT202ZBTKTX2IUSC7WZMYMP5NOP6K5J31N5DEFHK93T74IJ8FJT1QFXQ4XCE958EAT0VOFXRFFDVSH044HR1BIDLPE9H23A4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (861, N'Mr', N'RRBUH9AO8X7QO396LX6B7GCJJBX3O4O52M9D6', N'GLFKRRKEUQ6NQISGKWM6R5ILM5E4YBDQ4KGCOOY9QOZ2SWREGH988J', N'8081HA5H631DXG9V8F2YZ9GZM82UCJW8WD0RNG8MPDHFU3LHUB30C1N', 65, CAST(15301.62 AS Decimal(18, 2)), N'FXAHOJ0L1LB21YMW79SD72RGE5A6FOC490DKQNGYRF9X2JNGMLUT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (862, N'Mr', N'EPER7T8OEYCM52MQ2BES', N'A3UXMCFGJDFJ61FRWXCG3', N'K8F8', 84, CAST(11933.97 AS Decimal(18, 2)), N'QNC5U3I9T6D96T1K16KTUMSSUDUHTJUTIMID1EVKXOX9WNVQMVLE90N3UJBG80FABJRKANJNA0V5PIV6H4VYYGJIYFIH2FBX9MXDWBGYBX395IDBN5Z45HCVZ9LV52KVOYW3LIA5NWM0CADG16UXF7RR92ENQLT9D8K6MAQ5UTG9VC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (863, N'Mr', N'6C60391O1TW0ZJHXG8IBUWZR1ZMJBKYZDA7', N'FTQE0OH24ILP69UQCWA7GPCDKC0PCBV2R4N077CRZG9XXGV6X5KG5VOQGCTNNRPTMIY1LTJ4KJ8ZGFG4HUR6QFXVFXKUEO37RFBEIUK4MGVLMPA1WP6S0I36L2LO9O', N'B4N6TGJGH8R7F9LS14INKZ0FWVVQ17E0ZEE8U81M11D2BSWS26J4WLNB37AXLTE9UQ81UCXS3WLIMX43Z2NVO94EQ34NY308N48KKVXP8R00Z5P636YJ5', 109, CAST(14171.74 AS Decimal(18, 2)), N'OW4TY8MFH64TI3NF22DM4Q6TQ3MRIWWJQRLRV1QS30IG817ED6HQEXPB2IJJTPN7XYDVTB7BVBN5BA7NV8ECE65S1AOCI7ZDCAJAOBK1Y6U3AKZSAVNKBBSQTLUJNUTOCAT0RXZKNCD8C2IHBV2MJE10ITH3G1E3C6R0Q');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (864, N'Mr', N'7R4K6ZD4GM5I5TM2VHGADFY4MIDHVXNP', N'VF18041LN9NK9JB8QMJYPIA68C4TG8VUXQ05LGAWV3', N'LKMTAR8AT0VDUIPJJ34YMX94FKDYKR4H34INYQK6GYX04LB7GJNVE6WOBIEPD9Q1WEAQZ2', 178, CAST(18934.95 AS Decimal(18, 2)), N'1DW3WYXKER2D7RS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (865, N'Ms.', N'4PO4X4UIUAFT3DIXV3VUWZSS0YNMW8JYG6', N'JCYTM9TV2QQ0D5U0NZ75EDSNJJ5NACM3LYRU9JIKMCT47QM0QGMWNY45KB9235LP3NEED', N'SJXHOZ80T96I0483W7UBGBUT77V3PBK7EXUC8O3HLG6RPXNADJ4Q53AG', 34, CAST(13371.83 AS Decimal(18, 2)), N'4X8SIYFV3MY9V5BHQCUOPGH32YEQ03TMB52TRYF3X0ZA0NO8FLNUX4HNF5PKJPVZSBYP3HPRXRQOG72E95AFGYP6OEDM9VJ840IPPY5YVVX5ES782AADFGJTLR1P33I17HJDPA0BJL1JSV65JYK6TOHO3XXFURCVYW8RJPKZC3WXS2Y5IXJKH1OVY0ARDLGS85LWMFMUDKTPRJV1ZSWW8SEX7DSJFTMRM4PNG1I3BO6W7Z4F49SKOJJGQNP9N2FKY22MU8KX9TLJLIQ78CE60122');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (866, N'Mr', N'3XYXDLRJ4JBJ5UJ0TRVE4WW4ZG7MLRGCWBE0X5I858OFIS', N'Q3HNI2KNFTW5XTPPFNUMAYAFGGR41JC8NQPJF0G2LWVG5Y8RZE7QKQQRT261BFMWHOH736AF6R1D3T9I8Z5MCLOWZYPCTER59ZZHG1NS3RKSPCOZTOTBAZJW0L75HXMS0W43UR16BCJK0V7N9QJ5L', N'4AIOY329WM7Y68YQENGIXGFX13OSENCESJY72R8NMOQO6KYH7Q9GUX6OVLNVFAV8AT5MAQONFSV9QQQH46LODWKVC9CH4C8CTHEDEC7H1M111XY4U6R9P6VE8A90D6J2KJG', 70, CAST(3297.35 AS Decimal(18, 2)), N'8XSC8G89MY5WHLWOVBVYZV7XH1AO8JWZ01LARK1DC9YKKBQRIH5Q73LDPVU75K1316WGZLXAAIMQWND6AJ6QE5RWF8LWQT7R8VIEFASWKUGPHVH2IOXMEAOWEZ0Q00KGAVH04YQ0Q96JP2F');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (867, N'Dr', N'8P7LRX71UYWD5XC2YMTFJ3N9M9N8NFKX', N'V9F2HVUIB65SRT8L41MN0XGYV4DKWQEG6L1UNSA6CT1CF84EFOLHJYFXSH7CHALKRPL5SDXCQFA6W3JMZZ484W', N'CD2RZ4MQUITFB8MXLYMMM043363U3ZHHHPRH3ZALK4JQHTO5KLHLWTMC9YOS0RNV0BYMG5ULO11IGDM9HXAIHWLN3F75BHKTHOQ5V2PFRVWVS3VWBEA', 208, CAST(16698.95 AS Decimal(18, 2)), N'RIE1WLDY6M0F91WJAZELDGYJXXV5457BKFZHMIKPIJTIYBQPCM9POT7AKU4ZP7T1FOUT2FXRFO3TMFKL66SHVINR8OWREL0APS29HXNXOH90PDO49ISJFB6X12KDI5DTOT3UDA48IVSD8M1V0SHV');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (868, N'Mrs', N'9C19Q4E7Z27LUZJB5QTPDT52XYH9Z', N'86326KXO27', N'G4D4QBI0XOA6G80SNGEF8VRMZPUZJBTW7HCCAMFJKOH2KQEJ238V0VULCQ40GIHMVEZZVOH11UUJEP19BBWF2YVCMRZJHE216U66QENEL7T50A6NPVP5L1KXINC4OYJMRTCJJVIWN', 32, CAST(11023.47 AS Decimal(18, 2)), N'GVDM58EC9FJ4GCW9TRYEK0JISPE0PDPOH17YP882PW9G99SA5L61IH8GBUTGUDNVPUMF4YJ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (869, N'Mr', N'FEYYWKBT7HE7J0GNRA4XHPR81F7ZBSM', N'LPNYM2R9Q3N81OXLCI5DFVRCZOAQSTQ8YFITY1D2GV5TLY2D9YK6XU0QYAYXR0HXCE9L63NB42WKPXR1', N'UU4QBBKCULPXG5A8N32JQNO7D7YN4TDSI37PTSB1KC3YXUC79A7EU4S66WC4DX807WFCXLFVS0', 56, CAST(9927.71 AS Decimal(18, 2)), N'JWOOR39IW3V47O50SRMVER8C9EQFND561LHMTKO7LBJQIIN0PLMDBO6ROBFDCTVJXO2M6J772F938ITQQQP1QSVDFQYH5BUSGZSTG1T6EEBWF3J6IONM4TT5TO7GLP2QKHM8P09OWJMBGYXB7R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (870, N'Dr', N'8LNTNW3YZCIBA5A5LA6742WQNQWGDBIFU9ZYCMZV66X', N'XGT8KB4ESVN2FBGD7H6OG65B91UXG00JXBTJOPS247D8Z8OQG7HGKC5QAH', N'DJPAJ', 113, CAST(3303.76 AS Decimal(18, 2)), N'7OM6M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (871, N'Dr', N'6FYW51D0LF06PX6XZNKOU2G15BSZAB0Y4RJ7R0ACYHU', N'IG', N'QDTMZYEB0JWG7NN43R0F09O', 192, CAST(17701.61 AS Decimal(18, 2)), N'RUDKPCLBYGAGHFYQK6HOURV9TQL1CTZ22ZHTJZXZVMZVWBH1QH3FOY50Z3RYQJZ5G8DIX57L9IT7RZCI9KBVPJD4THUF7Z8CNTEOXZ3KAI665X8ZQ9P683GWU9OGARDAAGKXKOKAHQL6D7ZV8UPY924KDIUOAMAJ4WWODAE2OFOHI9JM9S8G1F08CZJ2UWZVG11HBBIXFN9UDM14Z7EIDUHPVNBDRC7SFT1G72BYAB0E56UQYF3MHHHMKCLN0463FHEJLKXXWG72T2KPTLFB9LAYBEVVGNY65XZNRA4DH6Q19FSIRVUFOUTU7G86O1G8I1WV2XYIG2T3U8OVMD3LTIHA35');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (872, N'Mr', N'9T9FG2WJM8A4YXQT9EP9E11XDY5Z', N'YSU444HWPIO3J9TXC0D4H9IKYL5396PALY9LDV4K8KHZRGSWXC5Y5CPP9A5JYENJTEILZ7KGWSVXRJSIS95W0Q589KC2QKLUXX6DY7WQSP2CHSXPINRP8QI289C', N'CMT5ENGMS9NJEE8Y11X2', 221, CAST(12673.48 AS Decimal(18, 2)), N'B2YOGPIJ8JWFUXBYM0QZZRDKBXUEZJLSXHMGIDDDCOGCPY9OHJUAD6GKPDDIV3KOX4HCAVG9MCMAA0VCO6WFOBER12R4ZVI84SEKGXEM2LN1J59OI0UP65ZLQQB74C9RUE6HMAWRSAC3ND8VT2MZ1T1ZTSUQL6HQCW65ZR2743WWSVYDIGE1Q9P1C7OTG65LTLQR6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (873, N'Miss', N'8PC80RC2CI8FGCVGF8UAG2JRK17SB1HXX', N'VHQB70ZTDEJKCF3BOSRGMMK3SVL6E34PUHUAZQ4GS3C336DTM7EGIVS8XMJCFTF99UQVKTBXNAOJAGZMHSJ7P', N'ELDB9FY94UGPYAD48WC2ANX03POI2EZCMCX1GT47ICOF6TF4UTS4KZ8RND8KRF7QV33LCCOES', 246, CAST(5403.64 AS Decimal(18, 2)), N'W10EVYW56XUH84SG0265SR39QYXB36566EKC0BEQ560RYZX0TCLOK1A4YROW1L2ZSOATKFFONGZMQCAR0WHQLGM44GE8NIPK31YAO4FDXX041NDMHXW43CEB16O41615QFIPD02VG4SOFI2G2SRQLLGRMN8IFBCQWVEM5N9GU0NZJQVJ4818EAJ4YQ3PSKG5R1RK4GBFJBVLXH8WRPE7A3CLB9NEKJOAJI7HYAFNXLP3EX7GI7Y259VNP68VSWVZML1F9QXG9Q9OD86D16VDKL4ANKSS1KU0QPGTWR6S9HTFZ69GZVTM1IF1GRSPX5E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (874, N'Mr', N'DJXVX5ERWWHUXP5GYQAOV56LNZKJQB0BI9YCJJAP', N'6ZOMCC7S0ZO2U9GI8TVGS779YGNWUN97JKNQ6YGZPV9PV7M', N'JXZHT99KO9LUSM45D2LKG24YK3QTRI4DBFFAR6KYA7RY40BHH6YMT7OHT1WPJGS547ID6UE7INA9B6UKR9CKJIK4QYHQ9UFTELTWHYANSR45XF5M7CX947MMNEM7DNXN7', 204, CAST(16079.82 AS Decimal(18, 2)), N'V9XOSDHAZ233SPBGABS6R8Z8AED5ZHV423JQ9LOMDINYEC9QFBELC8YNAPDDZCAI7Y0O5K7PN6S8L0TY5MPN29SU5WGJ8BM175RGBLL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (875, N'Ms.', N'P5NAP', N'5ZJQB9WZSFNVOAYDPGI9LPB9CWQXYHDRUWQU4JWA', N'UPCX2TYOSRDE6BTUJXW5P6Z692B3A5UGYGKFA994BFFU888BEI30R2QOQ5OZHUEMXXGPQDKANSTAQ5X0', 247, CAST(5467.03 AS Decimal(18, 2)), N'4PY5FP29VE7DMNFX55I94NHBKR0G9DMK1UIDANFFT6NT39EKP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (876, N'Mr', N'HNV2RM8C7CC7YKU1LV6COQSXEFLT60IBYV3WV88OAWQZ6', N'OYRBLAFWW0FOD4GN9DEIZ1A1V1SJ395J7KXQKYRLB01HY2HS', N'0PR1UPVPWP4L9MH0SWBRI', 169, CAST(7997.79 AS Decimal(18, 2)), N'A52BQH7MKNPMZIRNBS41MIQ3FXZO8BCFQG2HIP415O2RP7751GXMGN6SFZWSHJE9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (877, N'Mr', N'C51NKS3DFQUXOB1E67U092HX6DMH2R0SQ', N'7U6ISPNOPFJIVTNUVHS7P3BMT6ZZS3TJZ8WEZ1FVA2UI73G6EM2LPLL3IJOLQNWLMZIMX8VU1WWM9TEQQSK518UENSWFCT5M68W7KT86Q', N'0YTCY8GXK8N4H5ML28K0UNGPD5C9Y8M8CFOS7IQN9Z5VX55BD7T37IPDI4YTW6ZB', 109, CAST(7020.30 AS Decimal(18, 2)), N'9WIGA4LO2VYFYD8QUMRDQZ29A1JTCKM9SFGBOOQBBYDR7CGLN2MWNWLAT969LSCH9PNJXX16VF1RMA1YLX5AXQLWU6HFIHPJMVIIPXOQ0G07UTOJ78NOM2KJ3QOQFLNEQI5QRJ8N8E9HPE20HY8AT1WKBZFY8XBESMHBNXROZ0G7S2TONN9GDDKOLLES3AEA3UO2XRDK7KATLPR85QALOU1F2SP1IYKOL54XEQRWAO9S2Q');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (878, N'Mr', N'3GRIGQ7KGC2XKXNVPJ5629O4G65MBNQ16L7LNNR3TOL4V9T', N'JSOYTO4YUX3QKE53Z4BGI7RAG1X65XJDEUO1QOY7ADZ8IFNH2GU4VAPB1EHSRYTXDPBQP3DA63548IR1DF4P2FI44C0B75GCK1US3XRZ2KYR4L2INGFBU3V', N'ES1GUDKHXQVHKR800WQEI1UPAA2KXQ3ZTAIC3VJT9L9RUVYDPTVA8W3CXC5', 102, CAST(19019.19 AS Decimal(18, 2)), N'WU6MDZTL8T8041B18ZM8FLTTEZDA0L8CBPT7CC7ORJV45QMVYN0SGINB0C7DMILNKWOF74OWSXGWPOOOCICCKFWS1I604T29X7K917OUY40J2RLBOJ136835ZVDOXOSZU7YI4EM4THEGFDQAXUCKRY2P4EA5TZXAC0PVS26AXWAOUMPM52R2C77V49DQ3GBUK43EOUIUN2NVODUHPN0Q8UY4TTQJOG6GLG4QIBYAKWE9KC6QEW0GGKMQ5ZLU4Y57W79894YDOP6BFOKHN05SGPZ1UEKJQ46MQ7DD2YH9XMRREAAHE473TCR678EVKE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (879, N'Mr', N'T61GMK0TRN29LK9', N'77LC312', N'A0K6NVO98VX5CX5WS2VFBPU3VSRW75FQPZI8124Y7O4TVPXBR6KUHQ8K6GBU4R23G6G', 57, CAST(2943.00 AS Decimal(18, 2)), N'KIJK8A7EOIVVTY8NJ325LW2TDG75TJLPIY68UP266PILXHY8ZLURH91NGQ7S32L5X5CUR0SU1WYWEHVWIZ67OU88WIR3IA344DOS53GYT0QKB59YVB93V');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (880, N'Mr', N'L0QYP282R1', N'NTJ7OYXFN4MHHRZJ9HOQQ4IH6VLWBFW0HX3B1VUPJ0NPHDGG822LDC9IA20SC0387L0JNNIENZ7PHSZTF5O9CAN5OL0YU1CIWFHVCXSKJOYD4K1H27D7CTWXXUV1NJJLMPT1B4GHC3QNB913JIWMN5', N'EXVQYW7ML185VG50LK9YRX2KQ9UFM0CP9KXTATVKJLZ485ZOM1HVWHLGVAZP2R0LOJWAJBQRPPF5YXCL96TKJGSRYGY0T6IR', 75, CAST(18134.14 AS Decimal(18, 2)), N'G2W3X88OBRSTS1T3REI7EO4NXR9T870Z9QWLV167Q4OYSIC75RKVLNYSY865YFF4RSK1487P7AGAZ5VFE1NGN5ELS4MMV19BOJ6ZXB2XKUNA7OSTDQRWRYHMEY90LLU615LGYVH3ZQWSH4E3CT94ACKQ2KLZ22BYZG823CUH9NX01O4AK5OSBQWPKUDD9I1WFXT1VC0ZYRVMEJODGBEWEIN9JIH8Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (881, N'Mr', N'DOJ97DGS4M9FMLETZLII8FTIUIUZRYZPL', N'3IKXI2RX05CQEQZ6YRWU838LOTRH4NWYHKQJR7YFL6PIYIMDKCYURAWZAY9OA9SC8E9U0GFQTG92DQM57EXSP176NQ8SX94CDD9K9RC3W71A1UMJB4HWB0N663697NSK', N'EGP9P5ABP672GHXXEFWXG17Q5B2DQXI7NKKHNBK0J8TALOIY02FQMT4C8Y3E2W', 178, CAST(5727.48 AS Decimal(18, 2)), N'7QM1L3V3E85OTKVAB060XY34IXAKHCUR1IJ4ZDYKIDX6QPO2D97G2YI9NHINTAL2DEMB0RBY2LHK1WES88684EP3ZAGHUAR7RVTC2C1MY9EGGY8Q3QEK4CXYPJCQAT3RUAS631PW6JAV08M11QE4W63EXUNJ0AC45ML652M10IEK21YGXAOKFZVO6D89E6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (882, N'Mr', N'M58EVW5S46BL4DB98H9J3YV0EOIG16MKTDY8KLP', N'WO0G2VF1UVH0X4T4PHTS80DP3D5L2V9EGX45L3981UH4569YC5I6ZR4WBADOQUZYM3JZZOIL7LQDI8JW378XD3FPT8UAQLI7VJH', N'SO0EWXGA2UVE78X5GS3COIRLUF88P86YMN0LLAM1JRCVQFX3BTNLYJX9WEKHO8', 156, CAST(8525.53 AS Decimal(18, 2)), N'V75QDMFVZ3C3DSICWV7LPMSP5RXZSTDNUNIDWBLTHFO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (883, N'Ms.', N'DGBM69DIPIG24OA70', N'MAYOMWYD0QD2RGKIM2KJOU5RT8VM3JHZQHAT8JAH41O2USJ90ZLTYYDR47UE0C9G9DB95RA2R3FM63W1OML4YO0S3IO0OWGSR7THGA49OI1VJQL1BTPEQ5IKCJ5N29DUMMUY9FKEIBFGN5', N'UOXRJ7BK562SW6VUFH5XWKLZ2QRP6Q4DB6H7TNDVZ8HEWQ130K4ZJAPA2XOTGM', 82, CAST(7242.95 AS Decimal(18, 2)), N'3WHVN0BD7K59FGKLPG25PO8Q95GLAD3AXBM991CRIZG9H9XFQZ31CIQENRMHKQ3TGVC3UBBN3BNQ7Z9080UA92XEK7LIFU6RWNSLWULFOGX1V06OIL9KVSJEYXIMQT794VTK6N3DEFMT5WJK0W0TKMW44DNYBYPV8NWZ7MHUHV5G5P92EYMTSDPIZOG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (884, N'Mr', N'DORYJRRQE2ONRM5NN8T5B2RIG43R9AYDLJ9OOC2FH', N'DWMPV721MP94X4G7E568WVMRV8AWEQ1X79SQFKINKL890BNA140BGXCH9VTMW5MWNBXNBQRUMJNBNDRKL0VAPQH9XBGKRVQFYCMOEZYBD6OWA1TW', N'F1PHPOO0R49XN273BPNPML5T0H74VYKEDV1C79BFBJDV9D17VUD3TWRUWVG7HJ4TJUKS1UW1D8D27AKNFZ81LGLG36GBT', 206, CAST(5151.40 AS Decimal(18, 2)), N'042GQRKHZJCEF5COGFZE4LKCCV2UYE0J5OUDTPQD4S2VM7DN101JO2OFKQ3UPQIKJT8R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (885, N'Miss.', N'2MT2QTWH11DVVAW8HF', N'80WAC6WUNQ0972QS8DAR26L2KWI2KZWHKGIVU4L5PTQ8X153X41NJ401EUQFOUAOUJPQKVX4S528GD4IRE4GX8YFFGG0D5HVJ2EECFJ26XVE2SL1P8O9PUQLL9A3FWQNO6PEYP6', N'XSEJBFS961YBPLJPMLBSRHB38293PUEK8AALNOZ5V6T72AR0WEJU01BGGBB85PKCNE2FBY1YM5XLO40YB86AAJJ6YT4CDQZ6MGKO7BOYCL7V4QRCADWWI913UWGHUOLV6RZ7KBR', 63, CAST(9897.22 AS Decimal(18, 2)), N'YVRPM9CIOP5HESXDGU3ZFS2MWNE9IBSYMC259U2SBXV0YCAXL73Z5RV6S5SYV3ZDW6V2PS3LRBOIW2OKDA8TTVHWC414X8XI3RH87S3H7T3C9PH8LEFP43CZKTFZKMDFLDZW348V6QLZS4MNNSJJT8E0FHNED4XLGNRWQK5G5JIDHC6G6SBR3UMCZYHLGUI2T0J5CQW2N3D9Q0I2B77KT5HL1FWR3KZB1GKHT13GV940GCMZGEA9');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (886, N'Mrs.', N'ZH34B28DGYA5ENO0', N'V29ZDJDNVEA5G75PBST25FM978QV273Z1DENKR81WM81MK6G1Z25W46GFZS5THKNAB42TH4KKR6I6LNM19U34X2X7X8LZ37E1LQAG3N', N'K8YOBO282R2ZU2NCEGTBU74O0CODRJSYMWCABCR6T8E2ML143MT3HG5C39OZZPHIZ3DYPD11PNHMS22EAK94QOH6Q061OR64RV2J73EPLRDUYJJ17APFFCSAM77O7ZDYGCUWZI775KJZAM77G4TD1', 186, CAST(3845.43 AS Decimal(18, 2)), N'X8NIX3XT4Y2327AF1993ROJ1H5OSWBPAQO47WYVX5MRA1WE5CJF505U8PL1SF5XT9SDD32I3ECX5X80KQJFCWJAKUWIBW2I0PY19J0191BRN7PAGLH1VPKWPISJ7K76BTWFZ7');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (887, N'Mr', N'PDDAVS9WZQOYRGVNRI5YII0IFFIQVY76ARI41D4PU7', N'VIL4XN9TB54KMHIC86VV9JLGKRGLUC6XMB7MCXZJOE9TZMRJ2E298R9CX4K66NZZZ6YBAW', N'PE3RWZVPILDFDLOM1O3I9VTTZZ00726ZWPNGT', 250, CAST(10021.99 AS Decimal(18, 2)), N'0QH6BKSMD4L1PF0MB41BRQGUOT4FUA9B8UGBDI8CWVFFLIHRB6LBXV0A9MHIFDR2U9TVYO9TVOFVA196BD3NP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (888, N'Mr', N'CKFOHEIN4J1N7DVUF9I00IHN0XRLDEG3A', N'A7B7U9RHXZWJG9WOU1VP7DTC0FAUSOG96DS2WKE26NM6A4IP3H3AE6TWEZ6FYWP9JMD3HTSAMSJKQM2WWLRAL6VZJVOXDY49XDNNRF79PTNLN95RWAJD5ENDRDJL4VWNO9MCYF4GDHKRJ9BAPW0', N'L7BG1XMV9LJU34AJHTKARXZVHGFDJNX7TT2V7TTW74PEGDZ1PD8UVJ8FYLI8CMNB191ECN0O3N8KE4GEO6F3C9DENRV7EYS3Q5CPZA0KT7FTFN0U43', 129, CAST(5795.48 AS Decimal(18, 2)), N'DDU61R1QXJ3DKB');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (889, N'Mr', N'NY0Q1CCA3N83BQ6JOGB6BU2ROJNWAQ3YC1PXTO76OP', N'FQ3IPAVDWM5UWZXDNSTG63ZNUVUH19V7US8X53NOKQKRCQVJCXMW3JXBRFOUGDCMQX03QZ7J55WFJ7B30A53MY4AVX6PES76EX1EQRTDQ2QYNHSJ4LT6880RTQ8TSH5CXQ0M6WD9', N'57KZRWNRKSS95U4T9RRED5U94TKY0R12ADMW66KSBJGR1XAYATR2DP60CAUXCOQT', 41, CAST(6070.28 AS Decimal(18, 2)), N'MTMXSF9G4Z7DB62A4DWWG1SMHR5RVRXHXGPKGPXJ4WP6UDQJU9ZZOF9K0ZF0AHKD1QGUHITEFDRJCLS41LWMRXTH74JHAW9NCB53W');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (890, N'Miss.', N'TEWM0FTPZS4UTV92HOF0CKAQ908QZ', N'SDJ75ND4NLTZ1Y6X9L0J0K8XD1WG6D77KPGUGJN2UO5WCDWSUPWBDQG75MT4QWYAEMFBICGQXXOBFCL04', N'PZR88N26Z2UO386ILN6ZYPL7LJVBNFNSNZ', 4, CAST(18503.55 AS Decimal(18, 2)), N'2CGLKBOP8E6AYOKXL3WZNDYB4I347085IJ66DISH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (891, N'Dr', N'5IMF8DRXNHH03587W1KMQI8P2936CZ62QRNL8EM', N'MHGWTT98OTPJCXQVHPXLAI86DG15RT1TZMAHTISL19NN0EKRLKUV2JU389IDS4HVSWJQN91ZXCJ1VL6ZWAJ6Y5QGR68JZFSXRRU4UU3CJUXQ0T8N3JHIKAWN53YG0H0IJL93', N'YJQ26PVEMBC91OEQ0KUSZDKMPRQJJF213X8ZVLZA3BZV9AUN9OM7T7BKZ3DFYBU69A54FFVFLJPOEPCEX3AUSU8WLNZR8KBRHSLY4P7', 88, CAST(15427.45 AS Decimal(18, 2)), N'4AZYK2EQ17W8PE4G17JI7XH2T50REPE65HT14KJ2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (892, N'Mr', N'BJ0YI', N'25167N370GYXKGGYADGU6YRVNB1UF6EJ5W1DF', N'T7M9HN5ARYHU1ZDE29ISF3607', 112, CAST(17444.62 AS Decimal(18, 2)), N'AFHBXT52PCB9ZN7SW4E1NBBSQ27K2CHOXI0QVBVOPD2X6TM98G416Z3OLVLL0DW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (893, N'Dr', N'H4I2476DHMAWDZ9LLNAEABIMZHEOB6H96', N'CNSF4M0IF0JK88S8K3E6JWL9SU2FSOF2IZ0T2RU4V4V0BUY6QXCYZ8SF1JMAKKQRLH197Z6S89BE1LYXWWOUBG2A7KSI4KJAD3EUTP', N'6M3D97VG1', 20, CAST(13955.44 AS Decimal(18, 2)), N'RAQOS5935YMYPSVEXT30JGIYEB50Q9OBGF5W3XG261V7C5YS07N69W3BRRAH09DWAAHANYBZC1TIKBL9CCZIMH1KCT4BNZ1XOZX2NO51VNT82KRG604N9U9S8WYT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (894, N'Mr', N'SYOAVZWC90BB0N', N'RQJPQ', N'8YEYIP092GPHE6WV6FEQ0L1KGJ6DP9YLYS63VKAP3WYR7P7WHE0G1AKMXUIY', 166, CAST(14861.41 AS Decimal(18, 2)), N'0BDZWULEJLN7YMYOTIR2O5NUDNTP4TQQB6VBG86Q51MEGGA7B3FE6R5UO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (895, N'Mr', N'PYDO325LV3MSH2B51QN', N'DEFLPEOWVF4E', N'MKSI4IM0SZM5PM3NACQC9WA8IJO7J611B6GC5837KWOEEBCNHZMHRM9PAJZKUEGLYKTI6RH', 25, CAST(13197.12 AS Decimal(18, 2)), N'L80V9QVXWRRN8KC0WMI8DXDME1DBJJ10MXMXQASWJJKIGNVU25VICG4OUEH8CJDCQQ0AYEAMUMOUDU5Q5J9DOJO6SY2BSKK067SQNKWOV9OPRAB08Q2T9ZO71TI0BZT92OO52F2KNLIEUYFIN232HQQ6JLOU2VCWGEN2M5XT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (896, N'Dr.', N'AXARAIX2IBNHR2L83L2NMCS687FAYVALDFBSNLDL', N'1M7NNOP10X6346XW3RRCDT6CWF5VDIO9F2NCK2', N'9IRD7VU670QKJJAPXR1M9ID6G2GTHTHPHL88VVHEOTCUOW2FA4LFPVSQ5LX5F1OEI12YA1U19NXF6JHJ01ID82ZMTI39YCYN4YBNT4489J52YCKM3D4EIB5F1G4SYK2WO9B77TPWWA3OWWOG', 196, CAST(10869.64 AS Decimal(18, 2)), N'I5OG9C2E0D8VQSBYHMGQ8IR8MYGBCVH49EZK1P99MG2I40PLC44IH3FZEFUBVR14V3MCTQWSD73RG84M8UY7RYN6YZ6LVXDUEXN0EDSL8B59ZOJ6B821S');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (897, N'Mrs.', N'23KF50FG21FN0KX44J32M4N023BQSKI7HIJ98R26ZUVT', N'10VDH9HK7RZRND1', N'G5L8K5', 228, CAST(18007.25 AS Decimal(18, 2)), N'CWFFDTKAXFU8DIK38V1CZFTE7AGZAMVC2KKRLYZZ1XEPFQA0L706ZFUX3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (898, N'Mr', N'YDVDOJ2', N'8GUR7IUNI8WO2JLC1VQCH2FVY4DQ0WDPEVPBOI68U8CTIN6NQRNPVSRSCCKQ9R80AD5PNP7869LFPLCBXQZ89OTM4XZB', N'SVLDZC9PG9EO0CE9N7I87HI5SOTHE', 63, CAST(1100.40 AS Decimal(18, 2)), N'82DK0AKH6SXTI9V2A113ZHZFE2MODMPNNKQXMHX35XJI2RPQBW4TWZ1Q3X5XNW4K3A5YJYGT3XY2XHCMCWDGHWQOIZUOBZG9SZFSLQ7CGBPZ1ZTLKILRJO36JHFJ4RH4HO9Y2K1MP0056RMJ684TEOQ4W884AN8PULHCPUJ0HY2INX0SUWDVNOPSY52UCWB1RABL99TCP3BFM7GY7G9EAC26VPEKRPOKN0RDMFIL206JC96QO4MVNXRE84PKV9KZFQSLG3CSXNB96JTMINVN2SWP9C4HQXPSG63MHKAKRTXZLH8PB218EWXNT2C4ZU10YITZF75YCAV9UX4R3E6NW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (899, N'Mr', N'IIYGJC1PONIJ86H0OVCGW3S8T54QGD40FXY0', N'FY20CJ5', N'O34IFB8CXJ0E7NIZGM2WX02WLBDGLAJSAZKAJHX21BAY7S9VNS87FIJO17X3YRQM084827FYOZUMP', 136, CAST(9006.73 AS Decimal(18, 2)), N'EJ9FSE86LXRX13O893X3V31NTWYK0KNE4G39Q0EQQ6OYHWV13U42PTMBILMWGN519DTKZFI9P7COE26X1XH6FLOAUSQ4EIA20NO32A1OBVDIGXXFEPVI6ZLOOIQ7OEV7W9NQE3UQVSUK85UXVAQPMRW12ZEJKUZXZ5L6961BU4ND40GIOTBE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (900, N'Miss.', N'TOF0GB6CAMRVUPS7LDFP', N'G01KFJM6C2Q09SJRZQMJJLPQV9QAIED27THQYNU47FSU8BPNFA1LXLYVABP5TBOXPOSGBTTBWHC', N'PT2HTS2BDSFW9CKT4AKOXZO0SFCAIFOXYXI31GYYJPVBT6Y3DUVK216P42PDFSSX3IYBTGSNBM484C7MH9WOJ3VXQSZYRKIQWX7B7MAW188FWYLSV2W6V4E0M1L1HTVR3DB64', 144, CAST(18236.48 AS Decimal(18, 2)), N'6K5DMOEOA50TWL2KONO9EUH3IW1JVVRIK9SLGSNIMMKZNJ8FEY05N59C21VPMVTEEH9MSH3V06MS9IGYOM5WVLVF0GIFXXWRS5K5ALMWV55HIG2JKW1Z');
+
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (901, N'Mr', N'ME7A9BII3B7GF', N'TUHJK3V7DR5LULFNYOBVQU5KI8BMHQOF9U2FT5KQGGJYI7LPD5C76HDYPW0BR8PN2QB0JZTT4LE9A71ANM8BDH8SG4PX48Y7QWVSWL6DCJ3L23NIUQO50E9LHJJF9WOVM7JE', N'EVZ0MAVF0S673PNCU', 220, CAST(10448.01 AS Decimal(18, 2)), N'WJSLTMBYOX29VZ4YBO2081QFEXKEYU1VW1VMRJHZAY7737NGYL97YZHVTD7W2XZTV6DT4I6R73PAUIC7A3GDLUWXK0SECLWDYDBW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (902, N'Mr', N'6XFFRM', N'9E1FUZUDMPDG72EKT7CNAAC2R3FV7ZUK97LBMP5EF7VT6Y2U9BT06Q0Y2ZORJY5NUS70H3X32Y82FIVT1LLW5UEI6M8N1EUG27YDR1D', N'I7O618E7DGCJNFNZO17VI3470SUAQ63', 1, CAST(6249.55 AS Decimal(18, 2)), N'TCFEI0VA71A0ZLYHM819F83PSEL6BBG7GDGR0Y3T1NDZIDCZYWC59MEK8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (903, N'Dr.', N'IJCVL', N'EPX8IXJK3VPYD8HZEOTUV91O3R08JI1Z8FIFW6083OK6OW3TPYY28IA4O94RXB0KTQPXQ138OLR6PUZ7N7IKJYRQ4ERN18BSNZDX763OVQEMR4ETAX3QTG1UZZSBA', N'IINW77UQLEWE3H5RJ41M4ZAE3H68E3H7CK0', 93, CAST(16706.35 AS Decimal(18, 2)), N'M3EOYVK3KM57GN587SV47E2M8FZAXTYVI9BZEDOHEETPTQFO01EMP4J81SFIW96RNAO7C5TU3DQSLCSH0AAVEC5EQ3Y');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (904, N'Mrs', N'CTUJIBV6A7P7ZNU7A', N'6F9ZJQH20H3TOTK4Y00YC45LY7XJY7DREFJZCSLNB7XLMZR79U0SBB329O0BSY3S4CF8AKR6FCM57JYZFQ9', N'RQRG6G937P3JN3RL4GMJ88TP1MCHWP1IH00SCKFNP67DDMKBCW2WYGVIX2EK4R7HOL2M2Y8J1YT11GBF1040M5K05IVA6VJXZQPSKX8ENIUZNUHHQZJ4M7VI02HK3YD5FV2A', 226, CAST(16678.08 AS Decimal(18, 2)), N'Y5L4712J17BV7KICEQNOZXILZACB4AG967VYRLKJA9GSYFOUUTZZG9N0NZ5XORFQQ2O0OKKS53EQHPNJMIGBBHTXKVASGNUJTP1VQN5A87TCUWJXCLA6A4F99RFT9SBI8VWS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (905, N'Mr', N'FFTLA5XO3U4UVFON6O8RP5', N'7KF2CGPOR9UD44HAJIWP3TDZPXUQQ0V2O0KJWDVTV3E6H8022OGXTK0D7GCELZYRDSO4KXD5N2TZE7HGWSN1JY84Z7CG1G8V5NSPKWI5BB9QQ1Y0YWITBW7EJJ4CKW46UYURERW', N'JU4SQC3AKCA1EK7CEASU6RIFOAP5PJRR6P64', 207, CAST(19528.16 AS Decimal(18, 2)), N'RSYD523NG2NBDGVDO8P9SMZ8C1GVB4Y0R9KSBT41BMTOSHWCG4KN6IV5TQ04M8BB3MK3V32V3NX6SAFU54F7KBT8EFYKSZF3AHL5WSGC2OJILPCIB6ZIS4R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (906, N'Miss', N'OWPP8SY1A9SF6UQJOMU702', N'9IP8OIEY8CH5YEK8FD50S5KF73VS77L7ZHJS6ZP15648EZ7GDLB0LV73YA1LMMQ0QA5GUR1FN4VL1B07VFELVKL4AFTVY4FIF3H4TQMLJWCH0M2MATP77555P06EX6HJPC5XUWD4SS2Z834ND7L5F7', N'BWUR7FP6JPD6T0KAFKSCO4FMYL1LJUOD2X2EX3ZBS94LBYVJ6HQ5ESQ7G8TLE4NO104WX6CCLGJFZUAZQHE14IZ9', 111, CAST(5163.21 AS Decimal(18, 2)), N'SCOF4H248TVBP9YCN24VRBMP3F9M0XA5PSDJ418LMFART0T18MUQ0W0HQYBO8G3BIPLWWE7MU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (907, N'Ms.', N'CAJBG5YIU9U5PKFOV4TTL2ZITG5', N'AYCETK7NDETSNG5SEFKEF36XLWJ1QKB4H1VZIHKKK4OKEBG67E6QUTV7SETW06XS3OAML5AXUZTAELIAGCTBEL9O5O73OOJE7VHP0UK2', N'VYOADWOLGKBUYL04DJX9B8MYTVWQLKI1UQ28O18KUTJ9Y4RWDXQY10UMBQHHZYZV1A08ISGCBDEHPCZO30COTJZUVFWXKQKWTN7O4JDKHENNLDXZRSEZLB2IA6C3', 85, CAST(4259.16 AS Decimal(18, 2)), N'9C0UW2M7ED2K5TSVT5PJC5BY93FW5TF8VHNOGV29212P9YKR41K2WB6302LTNP2KYTOO63EY3GGB2MPAINS39CCKAJNE98MCYIRG9VL0MLYGUU1ECAAZXYALH4ENGZPUU4CKV91M1RHNEVPFH92YYMF075Y4HYKMW3M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (908, N'Mr', N'5VXJLFDFPGHVCQY6BO1Y9X', N'9WUZLS6WIFODLEHFMGXY795FF2I4S9MRQ75PFPJV0759V0MHZAEDN4XZQEJJ9239TWMD9SZXW1XZ3WKFF14HV84MA5Y050MY3WFZE987AHHL6XWUU438XLDLSZ33TZRWFYV7', N'IRKTIO14AKJNR6F', 135, CAST(11639.69 AS Decimal(18, 2)), N'IGI39NX5GN7LEY56XQW7OCCQAX537UQA8ZX0QYPAO9JJXCPJSDO67E153SSBIUXLWXCF14FZ0LJESTSX7MAU6K2TXRWX6D');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (909, N'Miss.', N'37', N'K06SX6DRIGC9450WD1IIU7E54DBPK681OEA3XFZE0T9JRUPUR01XDPLDM0OJVO6B7AKPUWYX13I0XUE9OGY', N'C8IIX6SCLAHKPE', 2, CAST(10736.25 AS Decimal(18, 2)), N'UCXN009HOXP5MVMDA0V3WJ3FCUIHA7HTMSO2U6RXX4MWGEGYBEMXAAWA8HA6HS7HGWJT6JI4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (910, N'Mrs.', N'V9A1H00FDYCBJ97ZZEMYHU3T65E7A8XUCCK35', N'4BOZTXHWRGIBNXBGAZZU13V96KFRMEVFQM7WMKWXF26LL6DZJYZOH4I0FES8HPACK', N'6AOZN2U', 239, CAST(18744.64 AS Decimal(18, 2)), N'X5RX7ZYDK6WLKICWEUCVLG5W5GJVNRRVHOD45C0ICSWLBVVE6WSP59NG0USRG2QTE04V48R1TUJSKJL9K4OQZ2P71W4AK919237BR0AY5QVAPVWG9J6BEZTBAWU74HHKSAPGCAHKUQL87EI50N102QU39V0V52TO9AIE5F4Y1MHNDL4VDO7GFGI2FM7G9MERWXZWW30KJ2ZF97POR4HGUD8SSFZI8NPE7PQGL7YANNWDG2T8WJO45XXJO73H4HBVDL7KG92J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (911, N'Dr', N'YHVXD0T05RR9XJG9S', N'L0QETP31EZXAO06F8OF6XL36H8RNGQRT0HLD8449LFPJ35PS11GLXE5ZWKXLXFLO7397FT74J5LIWK2CIZME96WMBL6JB6T1B0VID8UC1RSN3CIL2YT7E17MVTDIX0TEPU82G', N'PVUG7UCT4NLYXUKYBY7786GEVMCC37RTH5TM3PKI9GCX4G0CPPNOUMVIFFKLHZQXVRGS1YVMEPYRTJAFL0MDK3ZU9A7N4Y19PF2CZ7ART1A5N3PV450GCCCRSLIRQ8HFOP1DHYFEQ', 126, CAST(16205.44 AS Decimal(18, 2)), N'7S7GUBQMRLPZK99R7RE3H55C10VU8RNG4YY4Q2UVDUDWLWSCXS9IOFO1MVFUGVDZY9ULB414XJQNS9Q47JWGI5SOAWHVNZFHGDXC271SQ4K4P08D4AMWZXHTG5AEM6HX497ECD10I3QDKNZAO4QCCIIJV4WXWM5JMN0GTT1R8MEV748T50PIG5LLQNI7H43VX6QWMJGU3Y3P4MBRV2RWXN2H2EP5ATA4JIX0DC6LKVEI2VH3BRCEC6Y939U7UAKANZ5LPBEJW6B19KF6XLTJHWRCKNX3HYR9A4U2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (912, N'Mr', N'5GUCLS440IY6O3UCF53JH3060NG0ADD2KKXOTMV2S8ZB1Y2NEL', N'LDJW44TOH36KHCDMMAT8NJUBE1YEX94F51DFNIX2T6B9CDJH137Y87D1I7I26FQ8ZQFFZXY4CQFG8LZ1HGCU166XOBWGZUWDF3AMX4H342LIRWTX8HKP3W6SJIQN1I5IU204AD4DZ8PYLO5SIY7I9', N'KJTT76KBJZYKWD3AJEOJ', 37, CAST(16481.85 AS Decimal(18, 2)), N'VE0CSH6UW0IUNA8G0TR7T11DB1XE2Q5QCH16T7OEKHNNE8TNITAA3VWUDN0QJSS5VSI692NT4CMBEEY38AW9GUMGK6T56XUSPHSMP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (913, N'Dr', N'B68I2GNCYC3TN5VM466IT90R84P51KTMP91WC1V759WQ', N'9JWH2EDU2MX2OPVONVC7QU677VCY42AM8NSH8SAPZ4531I0FWTBC52GEDOA72FP0CBT0XEGUKN7LP26PVX1BRYG66D3JI3NJF5RPOZIIDGRIUUPAHLC4EE8DUN', N'LJUHY1CE5PMQHSTYZEC6FOIG3SOA6F1P6UY0YC848WD9CUFL9BJZCCLW0DD5D17QNXJNTTZN57YIB849D20VV2CU92ZLY3R6OMMFASRGCWU4E2KS84SA1CVLKPDRUEP2GRUPMPZLAJIY87F6H6C', 244, CAST(11377.44 AS Decimal(18, 2)), N'EG5H5Q8LGZOXI9VJP051L28IM7IUMWMCDKVF3ZOW8ZQUG9EKW5SR1B7NVY7EZJDCJXDGGPB8SMCE1CSXXG3UVOJK8G3QOU06G3PG7GP2F8VFZSMI5AHIGIHVET');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (914, N'Dr', N'EB55BYG82A15GAY', N'KAWCH0O6JBG0VEIXB6YBCNT2X', N'AG5BQ1UKE0MY7ROM8V6J57ZHUW', 16, CAST(5451.80 AS Decimal(18, 2)), N'0LLKYL5XXMCQGR0FMT4KFTLLEDHQYLU2D8PHTOWTUUOWTK0QF3U1A8S6005L3FZBR9C72JLYWAQK5PRUCRAVQTS5GJGTIBPEVC4J7SOVHW4ZH70B8B9C44LYH7RJ3SGLLBPTK8MJ2EDUOTN8I4K61CAQR52Z15SPFID5H7Q0OQ9PQQ9NJI0Y7AK91Y1F5MIXMOF6FIQBDJHB2K01VEGI4TH5Y44J5BV27B32A381RPLNS86GY0JQ6ZTS6A7BE751OF3QHYQS6EQE8TCPY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (915, N'Miss.', N'IBEJH4E3ZA2B', N'I51XDV05Y8G3AH6O6Z0KGQWGX6VBHWHUFPIJ', N'C979N1VR0MIYKUE6AXKQGJTYL0SO3GNHUOIA6RYWCZOZPXLPQ0PK96WTG8NN86OJZ04WC3ZJYNEGUT8OE3X3Q38NROTY3BO5', 210, CAST(11984.79 AS Decimal(18, 2)), N'K5S4V8IAV0WWNKJJYD4FZ09RKS9EJDXHDQN09KKV863QVAR6UPUZLIOKV1J3Y3RH2EJXWJAES96SWJVA02JUIYWU12570HW4FLNGQU9BFG6BCWNB592VJWZ3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (916, N'Miss.', N'DK', N'MYLZQGAG7WH5OHT1CBR8KZ6ZPN1RMOKZNIK1FLPALZPAE6TFNT2EQAKMRLA2EJUJCHH5WSLRLHNKAWLIUM3TL58DYY9UAMV256YWOOIU7AT8NZBV0S8SF1X6847YJRGY', N'40PTOCM06LMRGYN0Z859LSVSG4N91FMZ94PTIVPQA2KHLWBP6Y33IWQC4XCKPCYQYMIB8UH3IEYI8E6JTX33CJGCEDOLI51X4TJZE0', 160, CAST(7776.09 AS Decimal(18, 2)), N'OVUE2DBC1DBVEJ6T8F1SKI5ET2RE0KILJY2YEWC3UYAICFQQV2BGYBX5PFL0MXCGUQBGG8EB2YXL8M2DB0JY92N80W9ZBCGXMTOM4A9NN0EZECX2D8PLDE7S23GJYF0QH0YEYG90RVA9NNUNZ6L3NVJ8MWJ0UPO80NIDDI4WYO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (917, N'Miss', N'A2TSJ0QLCDNY0QVRWGNYI77AX261W4AP', N'KF4XOT538LBC0QYMEUIE3N48RNKGKBGTUM2K7XBY2O6FMT8D9C4WYKIXB', N'CGZL4X84QQTQR9UEF65WV5VLCC0DEU75SGRMCYBF59YVPEAO9E4S93L6LE8SXUPVINYAI72HUQQM70V', 3, CAST(5691.01 AS Decimal(18, 2)), N'I3Y4E9SKSTW2MHQS1X86172805GAH2P4Z014OS4Q15WE3LVWNQ2Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (918, N'Mr', N'OVEG57HKS64HF', N'518PJX4HIENDEGIJBFG', N'2C4ZQEWPUK1', 154, CAST(10020.34 AS Decimal(18, 2)), N'HTB1P49TH3P4R3LFL49SI4VAO5E9JNQ0PEH7Q3YNVXK269BHAG1LS77CY0CJPZ9UCPFDLEPH5LXKKS4ETXZ3L47I648PQEYWOP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (919, N'Mr', N'8FAEHPMU3VJUHUPP73X8BVHBR85DQ02THYXLLQSZ3URIWB', N'MYF6776JV9359CRAPD59B5BUQVYOEE93HM97L2HBQKL8AI4', N'PJHBJ2C2GZ6', 115, CAST(10037.72 AS Decimal(18, 2)), N'GUYVWQKG69NS6WYQS0587IW6H5ZQQN1WU1NJV12C1O08JC2TSO6VIHJYYSEQQTPJ8RX48FVQXT6IHOM426Y2G5DDIOL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (920, N'Mr', N'NV2Y1J7SCXYN9', N'P8UX96DGMLGC9I5H0ZOM3JONVTJQJ3J7QWY5KBTA8SL0L527E47BUIY5J61GNNXI28MCJ0WP5DDBYN1QQBBFW7C8YTLD9DMLV2YDJQNE7I5G4M7V5AQBBHMUVDEQEJFSQRGVPO70OX7D2V3', N'BMYICZYLJBPLQQ43R8FX65SA8F34NTG262N3GDDVLGDDUWLTY8A8J8V6UOAWWUXQVNFN20NEVKBPSEGCTA6EI8IX7H9R2GZRINI6HXQXKVCZW5EG8Y3MNJ7M4HGKRWBFLK75W9VWJ9TMVJ0', 98, CAST(10526.39 AS Decimal(18, 2)), N'MCL8ZHZSEYKDTFYPA0H959OKVN23DKLKTS3L7YJZOTQ4LL916O2H7BWDO0CCFVEUC0J0BDHCHHKCJJYAE1WPH4CHWQW6L7KSEVRL18PT6PZQRKT422YEZPC8O14LGARAWRXNSD85B3IR4LQBWS4I86TPIIW044DWYPUZN6BOUS2W7L42ATON581PY759H717PMTERROQGGNG4XIXETPBFPQPN51F026MQV6KRPBJ4Y6OKLL0P8VNIQR0V3RLQ8PE91P8QX5OH66HI142J0PS6J4045POYPSW8SFJVC9S276BK9ITYO2QIX8QWP4L7HPRD99QM');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (921, N'Dr', N'832SQCIW33HAY4G4YFFHII', N'MP8YMBADG4H5CXZO2CQC6B6G2PND98RZ923PAH5FH2FL72ORXJBP5R4AJRVXOW37CHV9TADL6AV3WL901VFQX2UIXT5JL8RKZ88Q7E', N'3SJ4DC4ZFV2ZH65OKXECY9KY363EPKRLHFHYC728F8P07VEC352Y5N2U8K169Q9U4GI2P7BDU5XQJJR7SQAJISGTCNPS5WYPYUWQDCNVUP4ZQCAOSTDJFQCB0PP2HI7X77SON1UF2FPSOG2ZC', 70, CAST(13275.36 AS Decimal(18, 2)), N'77QXQZDSFUNVPAN2DBKOM57OKKHEYA0R7DHU0L68D4AAXCSF3BWX5YY1Z1C5IYU4TWOBTT2R4BAHVXR8S1AME2L8EFUY91PEA5G1NGMA84SUNG6293DHO7PQAGXDZ3I3LV7QHQLCE0DAARK');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (922, N'Dr', N'219A6LNM2JFUROP6Y', N'N5QIVV1', N'ZBIEA8IKPOMLEBI6SJKL1RZYHZ0JMJMQPGJVFSWJ62B5TG0EAIOIFRZ7CKXA7YX51WWXRMQ0M0EYGT40ZL84V4BYGBJUUMB8454XK3MNROWEC0QIFXBMPTAXKYGF3W50O6TBP7FWYKC78WLGK0', 80, CAST(11903.47 AS Decimal(18, 2)), N'8RO5N8Q3FPR7J8B5LP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (923, N'Miss.', N'RSZGQL2B8ZJ7R1QF0QG2CAFGFRI9PF88H9QPOMB', N'XIVVSHD99NDBZ4UZYJB4OCJTNXSL6JZMWF80QDY3MYZ2U2YIAQKBKWPLY28UOR2QOQFKWU9KK8IPDGZKY9AGZN2ZPM1', N'WAPIBV7CMM7KVIVP57FT8IFN4H2OOC0U2G9PZOIGHVS9R0GPC7F9576EV2DTSIOALCHE85QHOZBCP5V30DCGWRP', 242, CAST(5953.18 AS Decimal(18, 2)), N'S9GLJI12NTFGIVY57ECFD54ARZES5P8OKJSOR65NM529088CK33Q89VN46TJ48XYKQWY2AD09PT72UAIQ282LIGBO5KLCMIE83O9CA9AP3HJGNKAVAS2ZVD2AKAWPRNM6EZY516GSYCH1XV0L9Q2TGFDQMYRZCKXFUC1OM4U4C91IV1DP9BG1LTQZM8I2EGFEF27KTBY4VXH6EUULL2P04VU0M22ELSQVTN3TUSWXCB5OBJKRDXGCRF9J86YQ9KJ37MDRR1RT5RNS');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (924, N'Mr', N'7UDO3URE4BOZPWVG', N'53EUV9E3NDMGHZRCE08I3NWFHMQ0OFVASKFGTOU41VXLNTYZW', N'AUUWAONZ7INFJ2G7HYK', 53, CAST(11424.17 AS Decimal(18, 2)), N'5P2HA0OBE3EDKLNT6ORS2GP6T0C5N6ZRGT2HW8YKURTIYD6F3ZZ3V0NPZWNAOIO84NWQJ6XXP7XBN67GTW2O6VVF6DHZKOVC3L');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (925, N'Dr.', N'I1Z3SMSQAQHB0REFSUHXQDKZ45DQ9JLE9', N'LPEJLH7ZD8IEF7ICOWKAIQ54G7QASNOR4XU6V8ZX8', N'WUPP79TF67DUNL4EBT7ZCC56HGKYW5YY6JZF55P0V7SZ5TSXX2VNRLTJPI7QPVI08FN3MO953644J51OOM0U9B7LQFQMXZBZPRQP6OA8SQJLHOZJHJ22UORX81C7YM84', 25, CAST(7876.32 AS Decimal(18, 2)), N'BHFWX11EO3C1SO7GSG019RGK6PXD0BK82SWYD05M4H7CTBOBC83W2J4J0VQ84ODCI4Z0S92RAEXRK4QU0M1R8O5INCXIAXIG3UTPCOI36BLOMDZW4V7HNM4TYGCFBJHDWHOPA0IB4XLW3GWAC0EEP0TGQZQWC2SMT7S5O9M3DWDP17QIJ12A53OVO7YAAMZ15Y2VORM3EA1TN3FJ98CBZH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (926, N'Mr', N'6KCKF8KYS4A23KAJX1EJL4HZZN81GR43', N'BLLNFQ2A51FL7VJ92DRX7PKR', N'4FREBHZBS1JRM41F75EW94', 81, CAST(1256.99 AS Decimal(18, 2)), N'QJWHGBCTQWBJ24VTRFZWV1U8KSF119O1NHCBRA5S1HAWBJDEDFKVZLLOPOWOVBSH89VKSK2H97UDQYW0E1NMOS22VNM2DHWQPTN2OSMTC3MRQ7YQSW9UN5SG7TP4YZ3SB4OXAUCMEU9L5ABNPVAH722J06UU3HVDZUGMI0GYKNFTW7BXH1F2OML81');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (927, N'Ms.', N'NLT27F8CSLFP12TGPLJ0QR13DLR0JH0071FYHHPM56TJ19XKE', N'HCCGFXM1OEKITS08HHNCIQYMM5M6BML0UDXDQUP4SJJGZR9LQPP7XFRREPUABFQ1TJNFUMHNSJJY6HNVV0FMWD3FM6Y1ZFSDTINF3UR372FEV', N'0TH4C3A6HEQC974512Q2M86MXARQHU8L0ERLTCM7IV1CVRS72ZCUI2DRMV62CJON64CUGJBPFIKR7UQ6HJOIHD3X00YY6KVY7D5QFXRJNNEZIMKS50KTU55S1EUFKDIVNLKTOZQKR4VUZ3FEF5S5', 202, CAST(18718.05 AS Decimal(18, 2)), N'X4ZHJXYVLBTP4PECXJM9MTVXD21SPD88LD3CY24IV1LZ4SWQNCO1MSJ3824HV6672K3RL2DUF4DL8VTK5B4CP7MSTZ3WYNNOUEXJO44LYULHEYVC8KBK1TIUYAYMZGWSQTYAV16JDVL4EV4QNEC2N1V2KE6IMIXT0P71EYO9DIFN9UW2H8TIGE1OYVPHVNWVXS3PN2BOP2P4M8TPH30DOFDMNI3J87EPLJQGR7EFW4SDOW2P20ZRNI6HEG14ZSGIOZJ2ICYAOLHKM0YQGDH87M22C82B6AF3NAOP');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (928, N'Mr', N'Q6K2AVJQPMN8TAKFIZMU', N'KW1YEAZ34FF8SNOFNCQ65OU8R19BEUXP', N'', 81, CAST(10542.24 AS Decimal(18, 2)), N'07P2P221MVEHAOLB7A1WGQAAM4E5DWCB9DF5R6IJ01QDNTVLURGZMSWAXFFKOWNPI38W8FK0RIWFZXMT8SBMGCOGG58CRYV3D1UKKYDE7F74VHAZSLBVL186FRG2779TNS1Y3289FXE04JLZV8K5MZICSN4SIA606EH3FCWPC1FON81V6H7YM37NAO5FXGR5QDUQ2IJIBVTKKTPKM9M128D26US');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (929, N'Dr.', N'8', N'UL2011IDPD7ZV13FSF3OPNW1T7C0OOAHQOY2LFMA7TFBN8W06WMEU1U7P06TPIP12P9', N'417CP03CY94ICW2R45901QABTYYG0EKDVLHILBAPGF6LQGRIBO1NWZ0DQWJR2NBJPRNRFJ5SVJJMJPLC7F4BCXGVK3SPSJNT3MVZTZ3RJ9RCFEU0B7KMI06RAR6CRFZCWQIXTMI7CCS35', 179, CAST(3882.70 AS Decimal(18, 2)), N'6HRWAAY9DBTOXPMRAN3GZLSOTQ2H0RK8PSBT3W99VG6BFX3DLLSIQBRLO22J7G8MQLY5DSNEDTKIEH9WMPWEZ1H');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (930, N'Mr', N'XVJYH', N'20TCTSGW7KELABTR2VNPTRCL8SLO4E8XYPY52AL2KYZ4LLJDOXY72KDAO8306RSTCHMKDNPRAK5VS80M9806F1VECNHT6LVS65R4ZYZ076XHFIIG8GRYRLEBM', N'G69RELZ1A3F4O2SQ039FGPVW6POC9673M5B03Z1ECUGFIPXGEMCPTQOQACLPWMR4VBIJQSN01U2L8GEGR7YNTH9VHKQRECHQ3CJ67EQMYBNZN2HUX4XPO3AE2M152WMPCCIW', 51, CAST(14597.39 AS Decimal(18, 2)), N'0Q51TP2F7KKUYXZTXE5XQ966T6XIKUNP4L4NNMKNR5BUXEXOP2GLVKMRJY7NSJVDWUQDTC5BTH5LXC9E98SHD2TKYD4PEXU79XX3OJVDX5RDE1T6OTEKQEZU06FF7GWWNYB0E5PPCFJ8AF5WJX0LI9GVY32I3F5H8UQGPTSI3O8BURJK0IWAFBDDHG1B37LWA2ZGPP7Q4HHU1516JHILJV1X');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (931, N'Mr', N'3N6LXQUF4RJFRR3YWDIZMRYYJMIAN7RX1OMYGNVJPZD82F7G', N'8Q6VLOOCPMGVNA8ZZ84DYU41LPTX0KRGIRP9UBL8T2SWZCTGPSL5789EL4AVVQC4UZDWKZ5OMVKW1819WC88YL89HBNP1PD2QO10YWWQMXIBODCD30ZI', N'89DGBOHUA8F2V', 191, CAST(9990.54 AS Decimal(18, 2)), N'CY9RHFW3C1RS3VAB65XUJCBEVRLP0DF12ZCQYYN2KQP49EFM7ADP33X0NUWPT73YLPQ4IKC7IV9SN75GCZHQZPXY1C342X8CNQIJOB3MX578T4DFPFDTPDZWSR26G85KMW5WOLS0WVSUIP5WYNEMKFNARMRX8W5OZMLWZGR3NCXUK4D2L58TTJ079');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (932, N'Dr', N'YY5FIFBP81A', N'359Q4E8BFMXIH5D61AZGHL02XK4Y9M0PUJMIS9UINE6BLT67Z61PZ21I56TJA92TL7NYJVES', N'9FS2Z153LCKK2OYMAJLXOVJ8CET', 47, CAST(6919.89 AS Decimal(18, 2)), N'52TUSZP4VV38XHWAY7HSPM8PC2OCUGMEN4AOATKX5F9IYC8QX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (933, N'Mr', N'KSWZLD255I9IZ9MDPV3E1IO9LIJ8A88LKA56H8', N'HS3EPH3DXZ3KBQSI4CLFB7DCDPD58N3R99I9X3FPP5CAY8AHVFFITC59FQ103Y59WBB17JK1XWP5U3D4EW', N'SDM262D9KAIUR5N0WRMSVOXVHX4EVJPK8LB7QHD0BP101Q6J7ICLS0O4GQL8XYE0KY', 217, CAST(11012.46 AS Decimal(18, 2)), N'KSPG5JU4IPBCAE9PLS7705MKN9DPQZUXFBVTO6ZRU6AVLS5U99QFJPIE55SV54EIUDXYJF1ETFDUVRYV4JGG8FEQSHNIE4MQSR17V7BT7CM3COJE7XRMNXAFZ751RI0OTM13QQZW8N8WSAD4Y8AGDZ2VHL8O191PBXAPMF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (934, N'Dr', N'24BMGPNG9SY0CXV714NE3TUVWA', N'S8KYW49U62EMRZ3DNX89CVELWMZEBDWM6OC1BCEXYOEYI9Y5RPQ75MXXUZ1A5UIT5SF2N22AJBBNHF2NNTMLMPGKRF7BA4S35KTQUWIPNUA', N'6TFAFDMG6MWUQRK7C74R7W7RZV52DA1F24ZQR8W76KIHJWUGDR1SG6E9', 163, CAST(4706.52 AS Decimal(18, 2)), N'HXUEZODMOT13I7KBTK6M4HBUYLJKUZOHJKTIJL273ZJU06IHRMH5GTKZMZFE4TRO4JKYD1R7HZI5YGUS22S8HJ1P0UWJ5O297UPHLK3QUAOHAE0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (935, N'Mr', N'XO3FWGE1AQV8KX29', N'GEXEMB7X6GCVB8URZEI7HWLCTRAXY61M9HYSDWIGW8DDDYLAUVG9B3SKSLLV1AY0EQMT92D3W1B9I8YU5022QRA5PEZSANFL9DYNCR0SICC9R', N'NAJ8K3VKHRMSUF4AWLNDP830OOL98ZWPP43YDZMGNX248OICXIKKRWWF6I', 105, CAST(8686.12 AS Decimal(18, 2)), N'5NB20J6LIUYJ581SW8X3QC6IY2D7VJFLTQEID09NN4ZRMKKM8VL1GXESGS3Y6ZQYECPFUJFVZAFMDFWEHQZZYE4WBL2KXAHOD1C9V5SPGQ16HSF0WPGFZRZ08S38GUXPTQ8C3NJCYAI8CXEJ61O8U1PM1B022J8MSCDQJ2X854HO8QNAEK2E5OVR1MARMGAE2WF0KN034G2PK0DANQNHHTG3HMPWS5MPU2MCBNQQJY9PM561903WTSX8FCJYY3BYUDVID0Z0ZWYIJRHBFONR2PV25EWY3SSGNBV8AON');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (936, N'Dr.', N'B8VNO332TUD8AFP50PR6C2JYWLG6', N'1KMRP08W9NFG4U2KS9MPZ49AIDZ9KDF0D6DE5JXEDD4B7VN6QXK3N2JWBC8B1YCW8F2XHNF', N'VHLCIVX2QB5XWZ6PS6YSZ69CQEBXT7ORVGRZ1KK9BMS0RLOLK6487PKO79M3JZ9IMD1F', 177, CAST(19477.93 AS Decimal(18, 2)), N'02WWUEOOU8I9GJW4HTCZ40W74HV8V81Q0ERZTZ7RP83V9IZ3ERRGCN4Z6OSCIFTM6S81SWAHLL9VW0YLIST4GKEDART47V99EHPGAXAIG9VQD835P7UPMP5MEVR036APC0GFBIAKHBN7ONZ1OOF01JNPB22E69EAZ5EDRNT6WA7A1YXQWPCFQ9OSCR39GWD7WD7J9LA0U84RCCOD5BIGXZJQHM00JKQZWZENQEHAFBKI5XG02Q44DXAWTH2ML9HAH4UCY0MQT81LF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (937, N'Dr.', N'3G0KDK', N'B7CL0Y2MQTJMTBDBMG3TAMDE173STPO2IARFPXVD9ML8FP2W2QB0JLZPUXKSUAS04H4IKXMOKQKN04ZB57Q2ENIWB1LRD2IYTL4XLKB54MFT1BP', N'7N7MPHCE9K5QPDM3FJ5W2RSYGPBD9DDJ8DDIWMI77AYOHCTMMF7TVJ5GV95Z6Z4V7LICZ37T1XPRS3G4WPRU6JNO8XNMGJ1753HVUHMI7DSXUDNRS12H8', 63, CAST(11819.19 AS Decimal(18, 2)), N'KJ60XTGLLYPHU9CUO5UA0023224DA5VOHSWIGLBNTVJWNG6DEYJWR41KG2XVO3AG3002CTE3T6G4H6GMVRYBMZXCQB1ENGZQL2SMG40KKF3KOW3AMBZX4YU43NB0S0GD7PJEDT5RQER6VDOT8RRCG1MM8OJSS0SKZQCZDPWS587P7N8QZHS183W62X5PADZQM6650PGIUZ68TXEKFSTB7QCWT6WGK6HS8H31H2QA1968XOC5IKAHJOIVUACTSZYNIEZCTD3C2J9XK3Y4UQXZWZ8KY767QWH1BIQJPZB5HXE0EKBQB8Z12ZRI5EEL6VM618M1DFEUFSHYK86');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (938, N'Mr', N'F18KZC2M0SZB62J7', N'Y8NMKPLGZ77JBUBI8LTF02QKVLYS7OU0CVT5FVE3Z', N'ONYU32GKCHWHMPML9E28MSQPTV9VTEGKZVETX0DJ2M1A1DRY57ROEZNVW808SKQX1BIQASO90I6ZRGNG3BQMNS6Z8IWOZ5QHW39QV0NCJINV', 106, CAST(10564.88 AS Decimal(18, 2)), N'WGWHXGZCR7DALPYLB8Y5Y9DVT4M9HSYX80PPZ49L8AA5248PTWNC90FN30OSUPUY9G2L09M6ZDXNZ7TPVXGL5LN7K1MZGGRIFCVL1NOK9GDV3SNV6ZWW99SOTU0YMMQIME7MB8N88VBP8R4SEQSGJU96K7S6MPXMPU9OK1KYBOODY2F1Q8KWU9YS5124FHLJYOZDIF8C6U5U5V7HSRGE41SF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (939, N'Mr', N'239PWQ2NX7QDDOWV1QZH7600WX4M5ZSJ9PH', N'YDCST9BXLFH9PVI2RYRT8AD76G052C7QFD3C83SOGA3FI25XMC4FC', N'N4GKJ4HU4A95IIRWZ9VRP3O7XL', 250, CAST(5623.24 AS Decimal(18, 2)), N'GJIYFIU34F931IA07PZ43MATLBO06EWWKH1WPE');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (940, N'Mr', N'AZIA5W25B9N42F4CJQ3W28SYMGHXE64N6MK', N'EO05MC95U88RUCS5UN62CY6XO3A2IQ7RD8YFC2HFFBFU6R8S5HHG8AUFH2GI16M41GDLECTR6RM1JBRXVHX18RI3EIX9LYD9OATPDMESNP9HNTW6BJMJ8LV9XA6', N'NE344A5KEF3G09MRSZKCIWFJ8R34JF9NY1TG164VDXCGVTVI2BV7C9KRYJVC611Y6GIYG6QMUPYKJZNFWL27J2AOH1HIASOCWDAFBW2VL9DMAZ7ZVGGLYTF45THEP8C21MO6O83ZJ6', 203, CAST(5734.01 AS Decimal(18, 2)), N'CBR0FYDQ85EWBTBSU9OC4UTWQIDIKHEATZNTCLVV7LGVSIL29P6N11MIIUAWLU6RQ43C6HF9DT5IDX48XA9UAR8RC4BI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (941, N'Miss.', N'8OBA4UONA0JPVGZIML716JOPF4Q45ZXGV23VFSR8K5OLXS2', N'EJ57EDC8H1J834DJH1G', N'AONDHTIMTC3D3Y6AIFN6CXALOB1ANDG1R64FHFZK6LIPX9K7IXLJV09C', 102, CAST(19586.28 AS Decimal(18, 2)), N'YACEO4OE8WRAX98W34KQ2YALBGZVBZ16WYFIS3PTFTOEIKCI0V90QS8Z0R385S39VKDZTP4ZFRA99V2R4HVFQ0F4QFI00NPFJY6DOAR9LZIYP4PB4NXOIU498E73YY2MJUC3KQTKOGEGLRPEBPC0P1XOUX493NBNWVEVRLRDUCZ2FONHPSR9L2XIWO9MLJH04RJQCTNQYZ6C1U86ANKAW21UYWY2B4SAVZXO4W4V51BMVKG2F3BX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (942, N'Mr', N'6L0', N'MRY2CT03FJR3FJD3J139GNO90EG47CSWUL8NL3VKD8TXAGSKQ9ZFY64Z3P2XCV', N'2P5R8ZGV1LWTRT2G2ZQEKOEQURPRW6RWR1FPTSYL2UWNNDR4I3S1IYTDBEXHAOZUU01QEDMA15CQSR2GZL8TEQDT71E', 115, CAST(18382.30 AS Decimal(18, 2)), N'642PORG');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (943, N'Mr', N'EIVOZLVZ4JHA22USC42U', N'2RV8UAQIG6IW7TQ', N'VGBDV1TNB1P5GIZDL2LJCGHOG5G4M8IDY8EKTZVQXF5YV3DVQZ85FU2EZMWPKP13JC683EKL6VMWBJTDSLDMZCX45', 128, CAST(15059.23 AS Decimal(18, 2)), N'KET6WH2WK1DJP5URFYEFWN8SVBPUVYG5N0LNHFZ2E5U2XDA1ABAPD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (944, N'Mr', N'ZH1U2RM2T', N'JLWD', N'L', 52, CAST(7325.64 AS Decimal(18, 2)), N'YW60BLR71MK8WOK69ZZB1QS5VH0OKKOQRM2OHG4EA648HOHMH31AP1Z7405UK3NGXUG9LVPSVL0VLJO6ZE6HJE0QMVKHBAT7JOBN870LE8E414MKBZU5X5XJTQMQB7HLRTBX80XREL3AZWPI905CFO9DQRUHLAA6RTC7SOBA12RB2NKW14GA2553JY6H6G63AWJ5JHPKOUBDWYB37XGHTZ4LN8OUHU4LVN153EDJEWL7UR6LN399ZP9ASXIBTV2UQPH9W5ZTJW2XDWRV226EKUL6EQD6W2QITRH4AXOH4GQ3MCWW5M8QOO9W4BV6STXH5K3MFNL4EP944IJ1TG0A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (945, N'Mr', N'JZC', N'DDXNH9KW1Y', N'2668D1FIW4RCFMZK753GTJXZCE46E234TDJ0OEI93AT17CDDWZW4DJ97VZX83U1NI13YVTMTCJ395B7RS1537O00RHIJCV6LM5I59EH3C2STG01KR6F2PXFU', 128, CAST(3298.11 AS Decimal(18, 2)), N'0U5HKZY2HPAI8X29AGH04BZE4SMRTDBSNO5QX5UOM1W0ZLVLHSJ0I9OOUQCSD794DH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (946, N'Mr', N'C7FVTWS40NEJUXAK2J6RE1UTXT8XAMYBP0ILX98X1VHDGJX', N'HCQ6E7Y90RJ9FAW5CQICGIYPDXLC16ME7BEV2JKBNMD6T4HDK375JLRZD1SGML8T4514V13S56PT4SV9G8RXZGUMJFH1R3P1EK1O2DHJ0E0CWXUL5J0DTAU', N'37EA3HHCHM0S2HDJ2Q5W6KRFXR5F3WOPO3673S9LAGYD0SPO1JM6AXUJGYCBB19KXB3YB6FAHJLPLDF52HDK9IEQ8MQ4FXA97EGPOQDV3CPRC5Y3J79UOPAFWCQOFAUK9CI6WPGB3IGXSNE3', 51, CAST(18945.60 AS Decimal(18, 2)), N'JRCB4MTD2FYFIW191TB9DZGV7S2BFSRMHQCT5GED');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (947, N'Mr', N'S8V0SKOBCLY0NU', N'AFKFJ112GNFKQ773Q8XKGIPMLVW72B73PDENS2ZYDXV9I9UX', N'NL7NGKI40TB0OFSH4I0MR6UQXQ58CM9YNZSPNWSRZ2WV5B', 118, CAST(7067.18 AS Decimal(18, 2)), N'VL9VBTVBX7A17IJAG4CJHYANCYSK74KFXKHD7ZVZ6ZHKGK97SIOC1T8XBMJD0B4SMV4N153H8DDIGP6ROLSOG8D3CJ2LGIYVVOY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (948, N'Miss.', N'EP2TUFONT', N'XNLD97SPYTO5TZ4GBUDSJAO8Z7IMG3B0YV5OLQF5MXT8BTJXQT7EH5SMYDD2P69UHN6YUGUKE86MHGW5NKVNWXJT2IQ8CCGGNYQ', N'3NFO4EGXHRHQPF9REKDDPM3U8P8NPAYLMB1KXY4J62BY562BQAHBRYPGKLFF5T76SW3EDPUGFT6MB4O2MWWESMTO', 4, CAST(9503.63 AS Decimal(18, 2)), N'GL6MF73OGPGMFSOFIFCEH0BH3H1QEHMSRKA2E5994PNM3F5NTICGBJ3FAPIX6D9Y2OVUHL0D539SDPDOCDWW56G7GUSPMB3QFOJFJB67HZA89B2LBULSHDTW7ODMTBQT0JDO5Y417OE6');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (949, N'Mr', N'8QIJGCDWJ52QXI5C78CB89623OEP3A3L2QKT', N'ML3AYMZ9Y65IG7F4AMYK3DVBPM81SQYIP8J2HKOAXAUWD7R5XB', N'LZBIPEDU4692OY0G1WYR35FWDS8WSE52FTSPIXQFSS7YFZYYWYRQUWIFJF4X', 207, CAST(3876.61 AS Decimal(18, 2)), N'7X5S7DSQA91VN7VXJE68G8QYDFCQKLTYN00Q8');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (950, N'Mr', N'RW8K34PQNRKOI8GBI1YJGGSYOT82HO7YB6FC3Q45HCG', N'105J9PRLCEXG88MS7OCNQYNNTJYYHU24GKXHKO9CPZBWZTLOQFKGLOF2DHQQQT3IBT0OA58IFZXQMQOZXA82AMIS5U42YIMWWTL5TXDL611LQPGMTQTGK07PA8JG06K', N'H1Q06NV5BX36JYBYHHET90UME8JAD52TS9BQGY8C3TK0OKBX7H2XQ3VG73LY4KS5V9D9NKHI92PGFTYUWL3V243ODUIDC97J0F5E71AMZJONEE1E4R1IGW2Q6OVS146', 116, CAST(6421.03 AS Decimal(18, 2)), N'LXY3Q9BTIR83N98XFZ77ES116OG38M65OPS8ADIGMKWKHGYJQPK0I0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (951, N'Mr', N'T0K2', N'D1US5I60WNV8KW1', N'U', 194, CAST(6178.63 AS Decimal(18, 2)), N'TWWX1T8LVK3EYH0M1HRKTWGJPQXCI16MO9ZBDGGMEZ0ZE101Q3JIRFMXGC7BWV2TEGQPHO8K146UVG5NQVMEINV8N2U095QIW6LYBAK1UYHM9R1Z7JL19NBQKI2FU8BWENXPU7CFAKKK68YV0UTPJO88VVDS847MML8LTC5076QP3RJCJ6EZEMCPFOUZTK66DYX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (952, N'Miss.', N'9KOLAPB3AVAVN8YKMDB', N'DI87P6BVLWULDXK0H58PUNGAKSJX4Z4E632HYC67PZ79OLMZ2VRFOBLQ1XNXMEQMRGEAV224Y10VG7MY6JU', N'G0NKMVBHWIGFAZT48L7P23CF7I5IKVDPS7Y1QK467Z0K9QEWZXVKR53CO7C4QTW05RM20RDOG1I33S5G48JN0TXN4MDJ70FE2ZEI4BW7J74PMZ8W1WZH990CTYY', 75, CAST(8986.91 AS Decimal(18, 2)), N'0C1OPSIDYJ53B182Q8708I65I56M0KC5TYB65Q9M4ZRVJQNSB3F5RWCI6W5JLVDE709CP2XZYKW9RALSIEBW47EWMT08KP08MDOJGA296G6602QVAD17JG90MDQV1OF9KNNEL2C7B2PO07WJ2');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (953, N'Ms.', N'47RWT230V4', N'7PPVHCG0O9KA8KH76B4ZTMGMBP9UAOR2JHF2QJTIM1GPHPMVPFRUFVFK83KR2LPZIHQR5FGNILDS6R5L2D4UXWNO1UTNY1G0BG7ZZVQAZ4BUHMEH', N'EUGGM413DNCTCB3SO714DGHB0X4SZ2O5CISPRN3IY5IEJ65X67NMXU0XC4FO084AY7GTJD104I68X2SUS6MRF27IIUCM', 198, CAST(11062.69 AS Decimal(18, 2)), N'Y6NTP53OW3K67I0XMDFC981UVHRLZEG6TWQ8LQYIAX59M4U7N3LI4QUP5TY8EHPIMEDASSCVFX1C2S8QMKYVSY12202RRQ3T7NM8QKEURQ37OHMCL7LUJUPNCA8SPK3PT85F5Z025332VUEKDP6K499DXZWFBM57MDEGC77L7JOGQNSIWOEZDJKJYSH63KQJYWGHFY86IKDLKTNA6DJN85T2SUHKP1INS5HT6B2YF8HS6ZY446ZP03BS2DOLGH2PSFCT4VBL7ZO0WTVDFJ1SMPUPQSMHHRSZQG7JSB23EFVB41G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (954, N'Mr', N'86F74JC1H48TVU9U3', N'ZPOHV2LU2', N'FIP08GCPCES5MIFNRZACKWUMCVV0YBO1FSP0H8PMF5GRTMTKRUQU2AOJN2NDKCR0PRQUTE6JANWFG2SQ1B83KUY536CEKC13EF22VZRDN7KED82L9X', 38, CAST(18480.34 AS Decimal(18, 2)), N'P28WGA33KN2B9T3F7OAGLCL4GXD7TIKOBRSEJVJFC4Y48R');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (955, N'Mr', N'C7N99H2SRS7LA7571P70T09CT', N'BMSOH5CGPK5L7NUVSKS6EGBQZCRJGEL5W5FN6FUO56O', N'93NGVSKQM2RYXMS100QU2JVGC9KRV3R5N1SZRY69A84AW8MSK72LI28P874M8TVJBMBWTTA2THJUFKJ3MR7N05MKS3QKUK0HDKZ9WQYR', 75, CAST(5961.12 AS Decimal(18, 2)), N'KBG3FR09DH4GIWV922DZH1PWC5V3HDGVP2SWDF4XBHFXEE0IH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (956, N'Mr', N'WEV2J80IJX0ZWX5B', N'RDH1MZ901VA', N'ZR1IE9ON0Z', 141, CAST(18544.55 AS Decimal(18, 2)), N'W2URDIMJRAWWRZ18QG3ZWMXZMRIX4CMNHE1XPAAUNU1EQFW5NKFI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (957, N'Ms.', N'JTWT0NNTKM2', N'A2O5DS0BY0P186PDQ318SE', N'L7I5ZR3P2Q89G2GUK96VTFP1EL2EU2WTKKW61U95M9P7RILGXE3DT3N6HHQEOOVZTEOV6ATQ018JQI9WZ', 10, CAST(1296.36 AS Decimal(18, 2)), N'94E3DWU1T6KA4IN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (958, N'Mr', N'BYBFLLNWP8ZKSO871', N'MUQXH4K', N'GFYJZGWPOJ4VGYDPEDTPANLDDSV3FZ8TF28G09E8ZGM9M5KA604V3ABTTL', 41, CAST(6282.17 AS Decimal(18, 2)), N'TQTO1Z3E997VC9JX4O79NUBDGSUNH4MX8YUTLTWA0ZU4PYPJMM5FADKYEG894GW4NAMDFPBBSX9N07OH3A1UY6MVEVF5KN5K3PGEBB4WBUMD4WY6RQ5UE26GNRZJA6Q5ROKAQ95S64J3K8RHW8DTHB50J0QKBKM44HMFCNGHLDNAI2WF0IM2SWNFJJRQILGMIFZ2LB48SW83OUIG4BJTXJB8T6VTWPZZX1S32TUODDAWNKRO0AL71MOY3R8EFAC2W96N2FEAHVFJ9EK9F6SL3RX');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (959, N'Dr.', N'9UI9PIXUV', N'1VKD3QPBC5DYROGSF9WAXT12V42BNVJ6EWN6OTLM0SP3FG6YEXH78968THHZOENGM6JU094MOAA44YNFX3WQDBY4QFC6BMXM58G8WBX4SVJXZ14VU21KHX2A7F4LWYA2CNZVHE', N'7LTAOBAGDQXP4ZKQT1CR88KXEUCQ4QEMF37M55XYCP6K9BZWIKHRHUYZ1WVTYJBMBA91RXKN4EFJ1ZN3VF7J8N4K58L9A3ZSDK9Z1Y5K0UN3EFX18SYJBRDN5OVJ', 202, CAST(9801.76 AS Decimal(18, 2)), N'CT0BKF8308ZDD4MLWAQ664PO6ZZ8HRY5BVA8E2Q1MCI1F7VBK7OT1R484B5LGZL99U2ITE6UKOJULN9Z3NOA353KR233X5LMR9RK4DH60U8C79MG26HSBA54QHRRA3WF3X3BWOUQ6IA9WRCHFN0RNTBG4NTNMPWWXT9A6AKDCRLT0V7Z59BM35R9MM79U64HMDC3H2A53MEW7HF8GUHCD9TR1ZNJ2BI5N47NJ3H2Y6JGQV247ZS0');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (960, N'Dr', N'88ZLXU7YPKABI', N'L6SXIS05OBHB9KD47561H7C7ULHLB28DGJGEP0KI79GAFN1HYIRPBD1ETK2XBETM23VP4YF7', N'AD1EM5HQO1WANJE016QAK1I4FGL6LTC3L8QGLOR9GAJQ28O8YN4I59R8UWZ6KA4VOSPESYECEGT9HR16SC7YPUXBGHMPPLP55O2', 127, CAST(19271.17 AS Decimal(18, 2)), N'R3CJL1HER2R3983ARPCCFD7PD06XJC3IIGV0U3Y1ZO73SCHMYTFAGN9EWN6LVKVEY9LTD2QADR53X0JJYPWT1V6H46XC6FSS5IRN9WDR');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (961, N'Mr', N'2BTB1CFGRRD7528SIRQWOG8ENXG9HH', N'NT7Q2S7JZMSAJ22I1K4XN7SFT7BRBD03K3NJTNRSVDCS0BJ0S62DB9YG1RXU', N'J9G08R4OFIR2VSE7365UVDYACPNSRN3SPRNIW7PXP8VYQJTX7H2ZI8E6B5OJ4BXSEYD35VBVH84MI0KSVPLAL4AHDH7RI5SDB3JS6PRB66HA3', 160, CAST(6445.16 AS Decimal(18, 2)), N'69I8SQ52BM5I48PNWXARE3YYDYE9VA1C4AVLN9CFRAUSMA0A2ZDY2052BJVTCW61KTDTD3ZMLU0395B2X37WX3945S93DI3U4T8TW6XYZQD801T68SW8P93HJ8OKUV92Q5YGWH6R69W7P144Z3VLMV5UPRANIC43HAIU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (962, N'Dr', N'XC36EOLTJARH87PO5QW2JLMQL', N'F8LMPQFFIPDSC29U0FHOAY5AMSA56I1QXCF5Q5BL4L9HPKY7OL1CF65G2AZXF980NNV0M43U3VJPPOL1T3', N'NBLVNEQM6AOVQOOKDBFQBEHRM5Y94EMZELT', 4, CAST(13716.93 AS Decimal(18, 2)), N'CAQL52GDWRH4JLQ0NGV04R47I8T4SQEJ90MS4ZHTOGS0SIYRD3TUNUYL5J3W8BL6DYVJZXVNZ1BNY4EZ91ROWJWF10NLWKKDVLMUNFSF76VLIBM153N7JWAT2GHYAAQEHYRDHKCT9CHPOAWQELGSXDTZBTR6YT4XFG4JK9JLRTX7FK4RJQKPUYG45S1NS5VF7JA76C541U14FLJROZN79F3H00ER8WSMYI0W9XL6KGNZXCOJ89ZTHN6SFT76XEW52E6XLNHREGMTR4JNBVJYXZ4AB7GGPE86JIWI6RXKS7F10D0B9JV2UY83AVLD712Z');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (963, N'Miss.', N'FO3V6Z98FV2VU3WY7LXZ06Y9BILFZCQDLB9WPN4S70STM9W', N'KBQ6Y2G5D6UD9T2PYKJH68JMGREOX4BSNJYB4TO2NOQPPCGUJCUJX2AGR4Q7OR89U1PPUQK4WHUII', N'5MIDNOW83AZ3NLT5', 207, CAST(8756.99 AS Decimal(18, 2)), N'F9971HKXZ6PJ2AY6565J6CL9S7A5KCQ4FUK4R382A5VSIJ7LN72UWF03NZET7EDMFL38PTF1Y381HTQ90OHDAV80THGROEVWR8CXFZWTR0WT6ZLU95TIW0BKC3E8DNDJ7C98GST0SNLAZEUTVLIILCZRXSKCKOG3NCLTQDDGCSQ8F1KY9KCR5UYVCIAO8GF37HMMS03H826SMQCW7M30BOYSDQH82P8VDM1XEY58HUJ3O69M5EHMDFSJJU82JVFJUAFZPEH9GUIG4U47HV2N8LI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (964, N'Mr', N'5LD0SM28QU', N'X3BJ5L9SVK9IK03HEVGGUNM', N'CG9TT9HGGISNOH4VSEQT13M', 201, CAST(16138.87 AS Decimal(18, 2)), N'UHEJP3PLF09DQ9WRX75');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (965, N'Dr', N'ODU935PAIUZ8JH5R0E4N2M', N'ZSSPMF8SXW7MV4MM0264FB5J1F3Y1109HKJCSJ5', N'8NC6UMILH515J2CD0X664KFTU8U72BS8TRL5XBLT066JFZBQ1CT4WGCO8IBMSAI5CTBRH7BC5YE', 48, CAST(9754.09 AS Decimal(18, 2)), N'WBFOQ0LOTRB8SH580XJC5W03LQH7YAQ0GZ1J1QTOI1SOP1L94NRZOTDZAB2ZJDPI0ARSFL693UU34CEJ472AJRBMM18QNU54C9OE9TTIHHVUZ9VYWIUCBEZ8Z55EDFM9PPRVN0ABDJT1WHNC69T4ZSSXAFF4OF51VM49IZBW8J');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (966, N'Mr', N'9DYPKZ906V', N'CHLNTGLA9TGSGIAOM8O7B9QVWX5AK9UGWQRYQIQLTTP7L8SZAVPKVX33QQQVBBP0ZZVQQCX4H2EIJJ9O460O', N'DVW45QIOBDEWWEZZ', 80, CAST(10285.54 AS Decimal(18, 2)), NULL);
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (967, N'Mr', N'FECQPOWZEY5CUJNU2UM7I1LLV4F4B8TTDG1QF9PFQ28T31', N'9LYMO80RV9I3P8LC28YXL2SJLJ7G1Q5B1GPEW313XCMSWEUAOC1X2QX7SF151KP44728I7', N'PO16LOJ8UW4SJAEAC5GPN4SMOHXCKB2PCBG9CPR6CVBUEVR20MJ9J9DKWEI4Q7OJTFG8U5XND9DSTY8SPUCXRT52XVDY7NG56S0ZEJ8VPWV9WLRX6PEVURSZ9DBYRZFPS7L0X9E6MH7UXW6B', 71, CAST(6469.39 AS Decimal(18, 2)), N'RKXCHHT73MH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (968, N'Mr', N'6X476KOLESRUK9SN54CZDHXFS56HFTRHU08760N8PVNX', N'Z7U08GZM7PWRPP78AJILH1W2DNINPCMSHW2Q7QPRSSUG4S0FXYRPZLYXARMLXBXU23ATMH0KTRTO7GYLN3QR', N'FRH9LBF00P18A3QG5GP0R0XB79CJX2D7ZTB7YG7V6ZWJCYBDHDRFHBDFU61CYV2YCT8HSIIP9TUR3EY8XY2KAYQOGWDRFVXAWY6JQULYU26NGLBG8SEZTIOE3K0V5RADVJU5', 82, CAST(7670.91 AS Decimal(18, 2)), N'WWTK7L6MXES6ACET6YXWGU1CD3XMV81FEC8CPF3B2W1DSQ253Z04PKT2VG74NJRPCDSX424RVLUJTNKM1SJV7XPTJ6G87ZNI4B0FY401U993Q987WL2V0WHFNYEXLWJWXBEHN4NWRI1YNM29X8BMWSI8TKSZQ3FXPD5EURKRX64HUJR1W4ZCKWZ5T6N2CO6O238AE6OKPQN0EASQ3L32DTDZKO3HF90GEQBHK7PTO069HTSDALKKK0QEXG3Q274G');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (969, N'Ms', N'F55XF2PQ1QPZOF0D6', N'WSWX4FG34THVZD1H6SFX6V8SAQUT1YUL6A5AEVI2KHPXBS83X3GBATD1K3MELN16', N'FI3D3Q7R27ULWJMGXHE9SF5TPT3SSRXQ58TAAMQSGM1C6A88NXY2GWEZCAN9NEZAA3FNPC6BQMS6ETMFKU4UTUA9UTX0ZG52MR23UKIBRMBU38LJN7PS94GF', 162, CAST(16765.68 AS Decimal(18, 2)), N'7LNYB5VV9ECM4HRWP7TOFVE0WK44ZQHVQJA75FYFPOALESSYCTDZBSAB7M2Q1RWIXGWL7JRA8DZRKSL4R5R5DHJY8Y0IC7E');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (970, N'Ms.', N'K19ZJ0KG4G4AHUZRC00J0R2QS9J7HLMUIP2WEFL4DY', N'VPP7', N'6TWE5CAGQJNRJKZCT36IG5L7ECRRC', 33, CAST(12506.86 AS Decimal(18, 2)), N'SSOXW7QS22QYTJRE1YZVZQ5FW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (971, N'Dr', N'8MR', N'3A9DCP6AGIIQWYHJACW4QA94HXFJYG3IW7051XGNV', N'HAMAOQLWLA0DCPYS4NPGG09WC08O0TK', 97, CAST(15956.90 AS Decimal(18, 2)), N'C9J9X1Y1YS3O7JEZ3A');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (972, N'Dr', N'U0W20CN5TZI79HDYJT9SSR3DXEW61UT310O7LJ', N'N4VUQ3OFLCS2ZS15WFAMCZEZUPXBIDV89HM48N6BVJURQT784W01D8XNQWZ16CX8GKTH5WW99ZRS5N91HP7LCUV0KZECN45ILMA50Q27ZRSEH4I3', N'4Y1C49W9QWIVI2TV9L841WCG0PXNHXWRQH9EOLNVQGPJIDEA7DEELGH7MKCFB9RS0Q50T', 147, CAST(15126.14 AS Decimal(18, 2)), N'L5P7MHE8IX2M90YVH8T5PZRKYACQFGZMVOBTN2XSISF4W6UN9OXQA41LD48B4OS2XFRKP58FB0MXKMOSGPGRJ9CQN');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (973, N'Mr', N'IUJ9WV8BNZZEEDZG3WJ', N'XKG5BVMPSX6IKL4T86IC31RMZLK2HJFGBOPKODAQOG7SWPF6NK8X', N'7OYDDL6SYMAMG4IH69Z1S398JHPWJR8EHS5QF83V0TLP4OSMAIKW0RN3EQTVW997EW5OZR1Y641YHK3UO2M07CD', 154, CAST(5397.10 AS Decimal(18, 2)), N'FITLNUZD6GE9Y4GHF9I31RFFVF71IO31XZQPMQDSX6G7E6QCB2T27JOO2EQ8MYUHDDCZEQVPWQ6UA81OOVQGU0TDA2M7Z45');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (974, N'Miss.', N'MGH3Z5E59T6DZ7QX8H6IO3862FEQ2KKA2EZ1CFAQG22', N'QKWTT5PBK88HP7WVJ4VWROMTYPA6EEWBIGK4SRU7KF38ZB7HJA3FC181X3V4VIX5BWZ9MR2S9NBCKDUMISN3AGZG7I6PVQC1IXX2CXUR7B6OPWHJ98L2VTVUXI14LDWIB9TMGRALYVWZAAQA1MGN5', N'41CPE7ZRKEA8J4NJGMPWPOMUMZ7UN8Z2IFJXFCJZ', 163, CAST(5303.70 AS Decimal(18, 2)), N'BYT0TRXK646HCT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (975, N'Miss.', N'TLE6M17L', N'6P225TVQ6UENDG3U2HX030XWJMSQ3YW9D034KEMHP7P1KNXA76JYP565S5II15N7X49CCYAOUGAWAVBWOHJWEXJ7TXBEV3GKKI3FDKX9WV', N'AE39VAKF3KLMH0GFH2E053BE8Q4LP342QRFAIKRPNEJOEF0E3HX95YZ62O046YPZFJVPK5WXBPCQJN0SPPI86VWRR98UKMIOPK8VJAUXK0YFL9MFO7FGGHTKM3YAX2DO6O', 247, CAST(10940.12 AS Decimal(18, 2)), N'UC1KQ8EMDJZOC4NPSK8JBE0UWY69QTC0RUYKEQXBGHU2LFJFEW4A1GC6NS14WJ7Y8NCSQ85HMZYJZTCQQAFFW5MBISWMOSFW9WUX3QO6RMO1HS6UFBEM4S1310AYBJTTK193ZFNZL8NAGKTPL26DDSRGVRW2GQU7SVHGI3U0OF0V4RMG6KC9DGFR9S88JKIVEGHL3D6I76PYSVC35GWVDKUCF');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (976, N'Dr.', N'0GJ7B1JRO3P8W', N'8UAVWTMTJMQSZL2IFMVSR0QBSRWI4K90JTADJ2FL99WYUQ3UB1IM02C83Y34X3PZCQ86APZC7AJH3SH2O1721NZHH29KYAN5KXL3HXKM25EQIV4AH1GWWNXOQRO7FEDXMEX66D', N'ZE48EVKN6WH5INT5C7278RO9GCJ0HN98X8M0JY1LWTMN4YFN3X0H4GT8QVS1BJ5JN88A0SLD5GBE404HWVWKMS4GEE9O6Z9CN30WP5NABNBN5E3QQA4GMLWU4RVLJX767YQ0Z7SR8L9YHGBZA', 205, CAST(14893.06 AS Decimal(18, 2)), N'6QVMG3W4HOA0CSDU26RHZEG433OMITL46E7GNKPL2NENT433HJINLYPS9QJDE9MN35TXLX6HH5FCZTBYZL4YBXJ8PF7X1B6S0QKNA6HKC');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (977, N'Mrs.', N'L7PLT7F2L1EDH1730CZJ1XGT1ERZRZCLX9', N'QGK0V98YLXY3XTQ8XZXCP8D6NRH33YY33GPFBM2EIS39GBG3W6Z790UH3ED3S4VN', N'XVUTP266SX91RDG4G6O3QJID71BYDOGVAZ0CBE8OTTFUH6TWHCZ4B7SECHLOR8T3HDQRD', 202, CAST(16844.25 AS Decimal(18, 2)), N'6FIDSGEKET4OC5ML86Q9F5ZMB98NNT3KMAQ3PBMQIHXCOCDE0PXBU3L0GW1I7QWLPK11FJWWJZRY8MYYVUNYVSPIPPMT93JRKBN3ACZHT0RVBMSUX2ND3YPXUJBPW3NFGZDXZUOJV55V0U63XSV6G5NMMP9R09LQDBEB9UV3E3IYTUXZC8R37GZACRB9KWJLJFHOFVT2XRSCNOSRRAFRIIIXC4ZHJLIHKXFED9JHEO6MNOYJIAHR21WKBBVCJC9ASP9EEIQYCTB29PGBI0270SUDHSX8L25U6DUXEK50KIE8PUBLUKTI919ZUVXLKHDAOHVVVIWYU2NHEMOMHBD08M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (978, N'Ms', N'ZXGEEAXUIT', N'U', N'T2YZ9X3OV07FG0OCJ37LZUSJWKZCC3F1IDJX5BXUBOLLHCSSF5UNKR4Z9E3PXRBRK5W2HR676CAB872KS7W79SHQ8JNQ88WKCU0CFPANZMH7HTQ2CIWQU4HSN6TX3FZXGQZD', 190, CAST(18627.55 AS Decimal(18, 2)), N'54U3JMJF254K8ZFQBOVN6DRL87B384C11WPR1FCBBMLCA1FM2L1CDYDRC9UCBF6YT2IB9OOWBKCKSFB6RO1N2ZO2IXESL0ZVFMJ7J4CDW51SMTZXYNKNEJVTDFSCAWBAKH45V3NNBOQXYVGPYGT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (979, N'Mr', N'JH', N'G4AWAWIUX53PBBE7XYQU2L7CX9YMDXGALBZZL9PAQ6XC0O1SEXYO80XVWYZ0YWH0PS30BEMN9G4WOVB8858GYR1LD43MAOBUOXN7K0GZABFSV170MQSSN11XRHN7BZCK4A7Q84O7O95NC9QCX20KWI', N'P53W97NB98FTLDPB6P8C8O9VDJJNJRRUDVNDTULWUHEXE4I19M90Q1Y1V7JPO0RIHLGPQCHC4BIRACH81IDXHR3BXMHMBW8UPVFSOTAX4XVEJ6QJQAN5MU0QI4', 175, CAST(9126.05 AS Decimal(18, 2)), N'FCGWRPT3B030UR84PT1U0XCPTY');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (980, N'Dr.', N'L2D8CANRVJEGGAMOTF8985', N'NWQF2D9NAYUNLTGSH2K4DVDKIRA99ZSOL3JUIOLUFLUPHL5IH9IIBESSI5XB2ZEB561IALATGQOS0O2WMSSZHAC7ARCCQARF7JJBKM7VZO1KP0RT21OA7ETVUU', N'4UV083N2EWPK87GSJVOSQVYV0828UVP9', 224, CAST(8930.72 AS Decimal(18, 2)), N'IZ3DT2DU807E6AJBAKP26NBZ4FZWI0R3TUB37NAXGW');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (981, N'Mr', N'XL932Y03U9F6WZCKZ471W0', N'J9X26Z9KH5RBZKX0S8RH9ZIAPLH8SQNHQFOM1MVLGGANAPPPAE0M2CYKQNCKI1RRHALKWBY6D60TOUZZWRYEP1EDH3VE9A3EOJ6Z44SYGU9VB4VVNDNQ3D1', N'0538WNBV4CN0QFX51GVUB19VZ0Z0F7I7FZ71DKM7CXLIBVAS52TFTF9YW78WOBGXT', 213, CAST(14189.82 AS Decimal(18, 2)), N'4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (982, N'Mr', N'UN', N'V82SFJX23M44OZVRZZXVSJ1C80QWNDBBIP3V1ZJWX6SP0R6NHWQ4G6OC6QKFT0FQATMZVZPZF1XLQBBG', N'LQ8VSHTOHDGQK4P6VCD3DZQ856BQJ1HNPV9JK9ABL5XVI5M36HF3JP2L00QM534FWS1OV5MM12I71VP0J8J1M', 198, CAST(10214.41 AS Decimal(18, 2)), N'FVKGL143VOUN48E3HC894KCYG4NASMAN7IPJEGWYM0Y5GG3EWUZKRUDUJL0HDUA9E7FLJUO1F9N4M6IZ09EYMPWD5V0TFFKSPOQ90HV15Y5H687C31G4FCMOA2UVL0PVEXF9YJEDSOKE6WNNPEYFCC21YY067AC5SBU9XU2XQ1JY4WVK07');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (983, N'Mr', N'TZIB8BFIFN36LSVGJ604POGV9403NXNEGU50KJ', N'3EQM7VB0RPBF33WQ2F747RH6ROE8', N'4ZTNJKJO6I1HYP3Y80UT1H7UJ4AQ3XJ3TJO2V7M22DVZ6JW0WKZI7SBMRY3FATL8YYOF1130ESQOL7NZ7ATIX0V171AW47', 125, CAST(7665.62 AS Decimal(18, 2)), N'719I1VDBZI76IBEMV1DQVB1PBS3X23F5Z453ISSEJJ2EJV1NP90JNH9V0J78RG8W216E5B428Z6C9M6FRG7S3WIIU93YLKM2A6BIPNHE5YAOAXMEDRHB9GT6INJW85C422AOQ4ZSN4MT8XNOKU3ASTD5Z13L6ZHLB5UK3P0CCHSOKPFM8JKML1C8P4OP0DLNM0I233KUTQYA1PLAMHCNFV09TLVZ1BCYW51J6CI5YPSV3170JE2J1X8Q089H8LTIEZEVN139Y7PP356SDUFM8TXYXAJY31XCVAG4M');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (984, N'Mr', N'4QEKPHSJF6GGRUJI4IN24ABUH0OPQNUVZ5VDB4RDGKLW7HVKX', N'LUE3MQMO32YAY4AEKCX1VOW4CLBWKUJG3X5UWBHDA1YC8T9N7S7BH67XY9R0EP48JI70YFH8UKRTPJWICNPSN7YWQ8VNKHYKXPTQL8ORAYHXFE7ED8NRZBLBJBAQKUODL6V0Q5W4ZY', N'9RN18VHYVHZ4E2M0JA370Z3BY2M7ZQ6W70', 63, CAST(17461.68 AS Decimal(18, 2)), N'CHBTKU8INU2G3D679L1GYCI46X9CUTO261IYAF83PFNOWMXK6O0V25DZZ6MNKVOU6ZA2U7WUCXQJPT8KZP65SSZ0NIY4TLJUQSIWCVPYR6J4FU96Y2NUOI2D09EC9S0REWSXBB7408EL9VLT9S5RXO58Q4W2HDPZ5SQI2CVNUJUG3G44OK3HM9TPQJ66E5NMIFGH52RWXIXETO59ZREWA7CVY0RI5O8OW7XO0NZL');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (985, N'Mr', N'0IXHWUEJ2PT2TRCKGMY570R9LJOEM043SF', N'OQ1GB0G9BT7LM4H7AYX7GA4B8J7O7CJR1TWLIUZQ3KDJEL8W8YM52R1ELQ8RSS1ZAFKS7WPFY64W', N'XY6F4QBY0XWHYK1QL0ZRAOC268AY4A3WDLP2DVZ02D1KNMYZLW7968M38VGCUPUZ4DUYDP0J29LY1ML', 107, CAST(9418.75 AS Decimal(18, 2)), N'6K4CEW2EW7MQQCB3KI5B8R898IMQH9CST23N7JK3P48GLX5UMLG4UALFBU4');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (986, N'Miss.', N'CYI81YR22KDRTKN08', N'KXMABG9PDP', N'05P7O4FHF9M40C6DI1GASZLVVO6WNN2MASCP0NB0YDJ42WIQ38FZ', 117, CAST(2003.63 AS Decimal(18, 2)), N'ABXNVUXO9NV0Y1L3ISOACR3VT7XJCDFNTD');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (987, N'Dr.', N'S3ZQNWD5ZX1KQAD40MY', N'SIZRL7XAID9Y1C977VN4G1TMGHBS9WQAZOWXTQ9TDJBYKUM40I6UMO1YYZRGYQ4C8RGZFCDGMTQXPU1MU7SRPWNBNYYTZSUNFYQTDNON4Q7', N'AV1JTB0XITS70U8ZHDVQFCEGHSZ6FTF82GZXB56BA2FKQW21AQLUK9QYHK10CUHPEK4JVAOB6KFDXUPKQXVP7KNTQ1GQ35YGLP56RI6Z19OZTC1MVHAEYSHTWBTTU', 99, CAST(15857.21 AS Decimal(18, 2)), N'KLQ0GLZPF6TOIWJ6TJI71UNWD7KAHLA77VX6XAV546D14VYRT7L4A56QYTM91O8TWLGMZC8IND3VGMSI9THA05W1P773NM4FXK4JEBRGY2HX2B9C13Z77XTQOEWS45U09OXWH94Y11CXOZZEXV1KNW80QEUZEZBS7GNEDCUSZ165LW2OFIU93ACCFX62E4J2PJP7CL0K09LMQ2EUC5KW42OX3BYG6SDUH3G26UCUH98UPQLDIBQ9JMXNUS41MKE8VQ4MMBNISQFUUU7DPLXU14');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (988, N'Mr', N'W6GXOP7RVUZ0VG0BNLAMUWYT1HT3DP', N'X484Y5LRYCNB45CGEKGTZ3HQ4787I4', N'80LYS', 179, CAST(12532.12 AS Decimal(18, 2)), N'V6S8EQB7XVZYYLZR7O8GT72T0KQC0MJ6RF9GT38SGIHZUV9SPUQ6TNHN3Z8UZZ6BBS7JBJX3FGZBP3Y4BYM6VDD4YLCTVESHB6N2OPG6WMQDN6YZ13J0D0FYF2KP6481NIZIGWGLIFA8N0GSNCRSUR3BRPML5Q0SEOP46FJ5MYIYQ7AFMS2TCG7VFORR9VFRFITYABL8SM5V95KKE7ZCO6FYHUPHNSVRIRI7DB5A6U0PABM937C1W');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (989, N'Mr', N'12UPLN22YOL95Y0P9A2HFC', N'ZOUEIPTUU72P3BEP8A89K9ETTNI0QWE8TPNN9RURKPMMWEEFPI0XA', N'OIS7RWNYWOZD0TUMVKIS7BAFPC531NEVKTYCO2N14JX8CGT03L51GZ0C7DIEQKW894S6VIYSXGNND238J4ZGIDEKTL5AJ8BKNPY8NM5LMC3ZCCY599VMKG', 89, CAST(18745.41 AS Decimal(18, 2)), N'282VHFM4K0RDDHMC622O5U5PN57FDGGUVFOA5HTPN290YXY5MQ09Y7X83C7C76Q4KWIXSC7O8D02K4RQ72TNF6VNHG6SAHHHC5G1F0CAJB0L6UNYLG55D3OD1UGB6EERWJQEOPB6PI336AHMT87TCC49G30KK144X9PN48AV5YFUZL6RCTIX7KFJFGXKPQMOEZ5XKTIKXBODW9AVW87RI6WCT58OBP6ECQF0F96JAX0WW1N562OGIV582T3FLU984906TAFM2OGK50FSI2I81PVHK6XM6RXSRN0HBVM1EUEK22DBXIC06FDJLNCT');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (990, N'Miss.', N'J08MW7V3D6AXX1RFOLIBX8MTV0SKTB84O', N'3Q91KU7T4XTUVEOQFG', N'WP8D9DN9P520O4ULWYDT59F8GMZ1ACO06Z1JF9V8Y', 214, CAST(10141.58 AS Decimal(18, 2)), N'AQZWD8SR1QMM0B12Z3V8UTF4OLC9HVOJTK33EOPTLJWRPE63CGLJHKLHBV7SVIA523SF7YNAE1NBXNE9F8X0A518YMRJHWY29RPMLQWDSA4GXAJOGXCML9UW1KHK74TH3L16XSOOCJ7Z1LBN322JKBH0WTK19B6OGMDC9DRO9OA11UUG8TH41AXR319');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (991, N'Mr', N'APC06V2K73U03', N'UNSWF82A7VGXXMXD86ZKRLOS2I0RY3JGU682H54M4JW2CWXSQD79GWX9YZUX8BB4CZ3RDUW22DF7PMG5K', N'ET9CA0FOZN6MKN9ZWNDMYCG2TP2B6M25U2ULZ4CZLLC1TKED9FC8VB41D6ILX4ICK1SHTOZRAE1D0F99AP1QATAIYS8SLQ1H3ZGSSXKLFKYGAQ1XX9A82R2RQ9J1G76JDJ90ZHHC4', 168, CAST(19181.56 AS Decimal(18, 2)), N'7MF1DJJF7ZEPBD9V0FY1Y4SGT2M5OL873NHM88OIBF89ERTO12QN3853UZ7AWDRMR7MOWMNRRFPJVJ119Y4MUK4VHDS91DMYOLH755REEYWNIM8AX51X85S72R6ITDQETRU91UW37Q7VOHCU5IBVBOPJTA4DY8K08HUQRY829XQIXWILEBDB2V251BFQPI5Y56N6MM3799LDX7LXRJZNV9YCEPOGIICQSRDR9CYS851S9P7UQIY6JI3V7ARXXMORWVL6UTNFK6EP753PHUP0J57AOHJZK0VLHAWE31ZWVJMC3DN162F2XO');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (992, N'Ms.', N'IUEVW0EBEEQVEBA2X', N'0LV90X9Y3HB7DT7RPCS6EWG473HPKCJOC0AP92Z5HFQFRU0L0XW3DDU45R2WGJERXNUCJHINCMPZ50CC3VPMGFAZ65KIZ2PX0ZH40N1IF8RQOUY4EPTL', N'APVT77QAVBGSEBXP1IEJ58EE3RH1XGSY3MHDVX1BA5BU3K4Y3AFYYLB1AHPGQPDFJHOSUJT4H280XKAJMI', 23, CAST(6537.01 AS Decimal(18, 2)), N'QNAHCAOUJBS7X9OLGVT4ZJU6ATHSILSOS16QSJMM7O31A6PSHGY73J87T47JSVBYI4EW2YSX87XBGTV43OA2MLK9TZXOC3TBD4I6RTQJN1YWLXQ082F3K8CXJ52314L5DMXBBPD9YRFKNONW8XG9NQQ4SLNLRNIJGTJZZFOJP54TTR9VI6U4OBHNVTIP2SIB9V4U4OWT8WKILXA1BR3KSDV4BW36XZGXMTKYMFQTA1VRRZ1YIGEAOYJV00I8KQV9GNVSDCFW099QI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (993, N'Miss', N'87Q22NEN9C0IYVX42YXC7OBZBXAAGRA55ORWXGSQH', N'SAICV6DX0NAXRY6I8CGT767O', N'N0UZIB', 155, CAST(1763.12 AS Decimal(18, 2)), N'DCU5NGK68O9OXMWI9K5MB439L51I9FOSDWN6DE2FO9E7IOFTZIZPLVS98LKIE2WTZHB1YQ4UHQY1PWQXQ8IRFY7H3DXSUK0LDL71CDU9D57VXRJCVMR6K5D0AUXKTCZXPCN3OPLCD9DAQCKBUKW7ST1887QIF9F0595K351ETAR39Y9MQ9FR5VAFVGY2W4TC4G6Z7DVQ6E0RH4XS8TI6LD49AOK77YHPGEYSR9ECDPLRVJYQJ5U3LNRRCWPJTNJ7WBA2640YF5SVRDERQTO14E3TN6GUKUJQ5EUK8VKF4VNFUV0YIYSZZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (994, N'Mr', N'Q2AVGVY98B4LYKVRQ4D37I1VCA307M56VYX9PF', N'AB7F3A9338OZS5KFLHSXWSL6DDRNL3USKU6IWD0UNQIJF6Z5MRM7RDFFTXWVCGMK', N'3D7KLLRVAMWC4JGAGWCA4P76U7QQEOI5HFGGXWHN819OMAEF6PD350AE60QDU1GM3QUO20DKFP22FIJKTBJPAE', 123, CAST(6352.08 AS Decimal(18, 2)), N'2I7HFZN6EKM2QCJTIU99W9ROYR6IBM2JROBBDQGLRYG2TS5NFPFYQQKTQJJNT5USI2B217GSDOHYSPU5LJ2M73T13IKT7SSL4OJQH3L78NK28M11OD1927LE8AYIMMKLVVT354OIXVEJJRSGHJ5UQIJX34H742LL2Y6DSXWJOJC7T1VHHI');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (995, N'Miss', N'EC6IY0KP705PODD180EI5RX1M', N'0LLH1J7GY9592Q6DL0UGM06FRPYG5I64XEFLDOK7EQS495Q7QHQGR4IZF6PCKRAG21BOBL0XFM1W725MYRQNRQCTVF67Y8NNFC17T2W4HS052MRD03DS0NOCPISVFSY7', N'', 44, CAST(19288.85 AS Decimal(18, 2)), N'3HQUDCW00MHEUASHKKFNJML576B329ZPM1H4C4S0WXVX75HX0KAW2UHGWKN70SXRNRRTSO4GRERMROX1OE2IZ2NRJ07RHL03Z3AGDO5CFU4N2VP8NLJMQFSK3ZARGCZ6EONNEHOZ9Q24XZPNBZ4V1ECJBPCDEDV2UY9E82U6WKC0CNM4AMGH8340B3BO4AKVUZAZQBF84YZH1C7N383SXEURT924Q61MZH5CDMDZ67C94MYYWOKW7SXF5I5H8BIYWCIJ6UAGU3MQ1KN6A382L5E7JQ7UHWQVODCR4ES2D41356EKVY752GDRYA0GMFZYDR2N7V2VB6OH3');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (996, N'Mr', N'YQZMM2AMYR0Z3USLW02XHSHXO8AXCNF4WS2TPKE3E1', N'EGV', N'42AW63S6KNKWFPC5CTOGX7YNG6KJHRBPQDK0QGDBWWIRYN43ZECHPJJW3MGZI9OSBV614BFVFDJ1P6O', 99, CAST(6869.35 AS Decimal(18, 2)), N'1CBNZIPLS80LTTEBFX43QE4QCZWCTWRWNN9N4ZGH9SYTNM29GZQQC0LN8LAZMCRVH3X6KR6GHNUXFB2QXNVT50KM2MFJOHVW02CJOWOPT99O6N7WIK1YHXQGJA4YBNSZSXXCYI11Y60WQVGEEI03FWF2CW0DSQD5HAW8PUYZJ00AWTPOUPJSNOJVIU02IN97SVEGY7PKK0KFV46I6CJ27KISQ0QVUVHVRSH1F9PNZY8M44ZEOH');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (997, N'Mr', N'L19XKPKUXZOO582XDRDAACV2ARZV', N'YSWVM5ZP6R9NS7VUUNSNOIB90OOUT6O6WC2AHXEHPMIRJ7ML2C4QN7BFHNUXH5W033RG5LCX9AY2ZJPT23RG1XIP0MSU2H0JQHNGG5GHZ7HD89FXX1UDEFZ5L1GISIURAEBIW9CWM9HTG4GQ6VW', N'1GJ3FUZ7UOW30DSN7PG3H3YNYG1C', 159, CAST(10625.31 AS Decimal(18, 2)), N'636Z8DLPXHTQOION3M43WMW39CVOM0B7DZ');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (998, N'Mr', N'LYJFDVWFBP7STH574XKNM1B0R5956NTQO', N'MM5BIIVEPXPHDP2UXX1OOYQ4Y5PGKPCXMT5N800EEY7PK0GQ2MS9T8COV1DCSETZLSUKJELXXNAQQ1KYPZDYW23DGHS7MNLZ473S5W6N1VB6YLXTHFNT0V2IOH32MDA91AMIYRSSSQX1RXFUJY', N'H6', 177, CAST(18920.36 AS Decimal(18, 2)), N'RLS9NTJR668J3FGWSJDZJ73QWIW3X5MDP7W2ACGACUQX1SR953JNZZRKI2D5WGU0JUTWIEMF23NPH5P3QNYTLYDQFCJ8YBDWZPD6YVQQH4LWC22CCAF9I1FKH3G6UEGRPQPSSI4VW7BHDHECA7VOV4EY9TPVEKV3NT6LD9KU5JCAQY7ZO4VNISVLCRIZT9HCB8TJASZ0N1JCR47BMP6AO8KVYK8MQK0V20YI4NPW5V0H9JU');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (999, N'Dr', N'B158SD5I216HHUQV5UE8PJMIO', N'70SY84K3NT40NK24NZFVPMU1AY1RR18JON389CD', N'XNY2PLDHVY7G', 5, CAST(17571.55 AS Decimal(18, 2)), N'J7D336N3NYLPKC920N9Q5P6YZA5T82MEQ03J7WSVDUU62ZBSLXHLA32T0E3T1TVLB6YJ9QU3VDDAVZV0YC8AL04NX9ITSYTJZ8UW1SIU3EPWPRX1I3VPKK0A1BLZ81AWJUBM4ZY5TE77B8X6BHAP34YF8KVP6JL13TCVGBWJ4PV6CTZSDFNRRLSFVWDK49YAS53HW2P0KRKE9S2FK2CRVTAI0X0JXBFVQKD6PHWAPN601E53UY01X7FYVLHZ2629BONOEVQ26127N');
+INSERT Books (book_ID, book_title, book_edition, book_author, book_publisher, book_copies, book_costs, book_remarks) VALUES (1000, N'Mr', N'MQ9NWG3B532V57H4ZAU9NFFBHZCFSSENKKQF9E5', N'DO5ZOP9SSV421K5ROA3TCMKKC0HTUAL1I0HVCKOK2Y9CFMLI3IO3AJCIE3D9ZVXH92J03AE3MIQDC75QEZQCMIRZOYH', N'BV1KVU0QLBYIW4YSM7CH05DFQYLBY7IVI9NLZS3N66CBZKSHFO9RUYE5IMTX8PSET2ZNHDST4OBTT1F654W9YR1JU', 49, CAST(13012.58 AS Decimal(18, 2)), N'GLRWPZADYJ5EB40X8JKXOCQZ8YVV57BL4V75G3YYQ4JZJM18SINPM4VB8QRCH2EX3QZ4Q23GYPMMWPFMWN2MKMZ00WXPCMGNQLWTMWIPF6QWH9EJB5FU0SDGRY4T5D4C9ZVASMZZ4C6EV2JQIEE76LMY8F2OSOK21ENHD3QO5GQNLZLOEDBRYX6NCX2CJA7FS4CHF1DENP1QVZC9TD9FDT448Z5F0D5U8AUHN48DZW38VFRCLTJ61S2Z');
diff --git a/StartUpChallenge/Data/BorrowersRecordDetails.sql b/StartUpChallenge/Data/BorrowersRecordDetails.sql
new file mode 100644
index 0000000..6de6204
--- /dev/null
+++ b/StartUpChallenge/Data/BorrowersRecordDetails.sql
@@ -0,0 +1,807 @@
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (1, 364, 727, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (2, 409, 818, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (3, 385, 769, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (4, 280, 559, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (5, 104, 207, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (6, 280, 4, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (7, 454, 907, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (8, 222, 443, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (9, 489, 978, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (10, 137, 274, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (11, 146, 292, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (12, 234, 468, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (13, 317, 633, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (14, 235, 470, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (15, 492, 983, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (16, 16, 31, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (17, 432, 863, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (18, 498, 996, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (19, 339, 678, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (20, 158, 315, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (21, 409, 817, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (22, 425, 849, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (23, 496, 992, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (24, 17, 33, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (25, 350, 700, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (26, 264, 527, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (27, 468, 935, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (28, 344, 688, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (29, 274, 547, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (30, 41, 82, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (31, 94, 188, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (32, 227, 454, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (33, 149, 298, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (34, 495, 989, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (35, 322, 643, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (36, 382, 763, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (37, 16, 16, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (38, 191, 382, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (39, 172, 344, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (40, 479, 958, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (41, 253, 506, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (42, 358, 716, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (43, 60, 119, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (44, 137, 10, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (45, 454, 908, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (46, 398, 795, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (47, 169, 338, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (48, 229, 458, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (49, 74, 147, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (50, 111, 222, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (51, 206, 411, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (52, 360, 719, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (53, 310, 620, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (54, 244, 488, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (55, 98, 195, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (56, 440, 879, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (57, 413, 826, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (58, 368, 736, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (59, 430, 859, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (60, 340, 680, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (61, 313, 625, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (62, 110, 219, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (63, 448, 896, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (64, 449, 897, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (65, 44, 87, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (66, 420, 839, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (67, 86, 171, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (68, 323, 645, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (69, 414, 827, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (70, 110, 220, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (71, 500, 1000, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (72, 241, 482, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (73, 327, 653, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (74, 360, 720, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (75, 405, 810, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (76, 51, 101, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (77, 365, 730, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (78, 360, 52, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (79, 63, 126, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (80, 453, 906, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (81, 95, 190, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (82, 239, 477, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (83, 271, 541, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (84, 163, 326, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (85, 336, 672, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (86, 235, 469, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (87, 417, 834, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (88, 405, 75, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (89, 397, 794, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (90, 383, 765, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (91, 469, 938, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (92, 148, 295, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (93, 262, 523, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (94, 332, 664, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (95, 167, 333, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (96, 144, 287, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (97, 411, 821, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (98, 112, 223, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (99, 94, 187, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (100, 35, 69, 5);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (101, 313, 61, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (102, 347, 694, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (103, 316, 631, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (104, 464, 928, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (105, 111, 50, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (106, 465, 929, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (107, 34, 67, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (108, 451, 901, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (109, 340, 679, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (110, 47, 94, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (111, 75, 150, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (112, 54, 107, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (113, 305, 610, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (114, 477, 954, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (115, 246, 491, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (116, 75, 149, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (117, 339, 19, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (118, 285, 570, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (119, 113, 226, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (120, 310, 619, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (121, 3, 6, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (122, 181, 361, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (123, 426, 851, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (124, 32, 63, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (125, 141, 282, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (126, 353, 705, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (127, 480, 959, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (128, 495, 34, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (129, 194, 388, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (130, 262, 93, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (131, 141, 281, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (132, 254, 507, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (133, 266, 532, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (134, 29, 58, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (135, 141, 131, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (136, 249, 497, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (137, 424, 847, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (138, 307, 614, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (139, 53, 105, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (140, 372, 743, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (141, 201, 402, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (142, 467, 934, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (143, 66, 131, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (144, 350, 25, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (145, 308, 616, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (146, 416, 831, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (147, 343, 686, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (148, 285, 118, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (149, 87, 173, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (150, 93, 185, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (151, 305, 113, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (152, 126, 251, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (153, 499, 998, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (154, 285, 569, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (155, 32, 64, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (156, 132, 264, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (157, 422, 843, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (158, 285, 154, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (159, 323, 646, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (160, 259, 517, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (161, 486, 971, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (162, 39, 78, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (163, 257, 513, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (164, 78, 156, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (165, 407, 814, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (166, 322, 35, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (167, 288, 576, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (168, 277, 553, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (169, 337, 673, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (170, 498, 995, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (171, 151, 302, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (172, 33, 65, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (173, 233, 466, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (174, 242, 484, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (175, 109, 217, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (176, 36, 72, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (177, 116, 231, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (178, 76, 151, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (179, 224, 447, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (180, 226, 452, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (181, 10, 20, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (182, 195, 389, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (183, 409, 21, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (184, 102, 203, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (185, 457, 914, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (186, 15, 30, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (187, 255, 510, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (188, 482, 963, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (189, 497, 994, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (190, 9, 17, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (191, 327, 654, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (192, 140, 279, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (193, 484, 968, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (194, 294, 588, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (195, 387, 773, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (196, 163, 325, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (197, 211, 421, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (198, 488, 975, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (199, 443, 886, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (200, 487, 973, 2);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (201, 128, 256, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (202, 67, 133, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (203, 449, 898, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (204, 90, 179, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (205, 442, 883, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (206, 273, 545, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (207, 393, 786, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (208, 258, 515, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (209, 177, 353, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (210, 496, 23, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (211, 17, 34, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (212, 346, 692, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (213, 61, 122, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (214, 98, 55, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (215, 249, 136, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (216, 291, 582, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (217, 131, 262, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (218, 156, 311, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (219, 122, 243, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (220, 393, 785, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (221, 67, 134, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (222, 307, 613, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (223, 280, 560, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (224, 328, 656, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (225, 171, 342, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (226, 12, 24, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (227, 49, 98, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (228, 439, 878, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (229, 356, 711, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (230, 447, 893, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (231, 326, 652, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (232, 128, 201, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (233, 133, 265, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (234, 238, 475, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (235, 98, 196, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (236, 444, 888, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (237, 246, 492, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (238, 319, 638, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (239, 160, 320, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (240, 185, 369, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (241, 123, 245, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (242, 498, 18, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (243, 306, 611, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (244, 1, 2, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (245, 492, 984, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (246, 481, 962, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (247, 79, 158, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (248, 387, 195, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (249, 46, 92, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (250, 96, 191, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (251, 32, 124, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (252, 56, 111, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (253, 367, 733, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (254, 51, 102, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (255, 420, 840, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (256, 322, 166, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (257, 287, 573, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (258, 121, 242, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (259, 419, 838, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (260, 430, 860, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (261, 224, 448, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (262, 454, 45, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (263, 402, 804, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (264, 231, 461, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (265, 171, 341, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (266, 390, 779, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (267, 214, 427, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (268, 324, 648, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (269, 500, 71, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (270, 305, 609, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (271, 45, 90, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (272, 312, 624, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (273, 496, 991, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (274, 437, 874, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (275, 270, 540, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (276, 69, 138, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (277, 1, 244, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (278, 279, 558, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (279, 337, 169, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (280, 190, 380, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (281, 434, 867, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (282, 163, 84, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (283, 394, 787, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (284, 260, 520, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (285, 415, 830, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (286, 271, 542, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (287, 262, 130, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (288, 82, 163, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (289, 318, 635, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (290, 277, 554, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (291, 158, 20, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (292, 125, 250, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (293, 401, 801, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (294, 231, 264, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (295, 461, 922, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (296, 169, 47, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (297, 97, 193, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (298, 76, 178, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (299, 331, 662, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (300, 103, 206, 2);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (301, 268, 535, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (302, 255, 187, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (303, 387, 774, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (304, 242, 483, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (305, 51, 254, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (306, 220, 439, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (307, 60, 120, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (308, 430, 260, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (309, 282, 563, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (310, 352, 703, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (311, 321, 641, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (312, 8, 16, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (313, 285, 148, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (314, 229, 48, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (315, 497, 189, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (316, 62, 123, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (317, 61, 121, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (318, 142, 284, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (319, 316, 103, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (320, 400, 800, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (321, 128, 232, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (322, 132, 156, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (323, 7, 13, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (324, 223, 446, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (325, 148, 92, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (326, 420, 255, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (327, 412, 824, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (328, 266, 531, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (329, 476, 952, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (330, 102, 184, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (331, 473, 946, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (332, 426, 852, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (333, 449, 64, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (334, 234, 467, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (335, 423, 845, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (336, 179, 357, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (337, 276, 552, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (338, 153, 305, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (339, 210, 419, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (340, 196, 391, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (341, 211, 422, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (342, 332, 663, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (343, 301, 601, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (344, 466, 932, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (345, 457, 913, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (346, 150, 300, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (347, 341, 681, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (348, 172, 343, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (349, 234, 334, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (350, 400, 320, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (351, 109, 175, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (352, 455, 910, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (353, 260, 284, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (354, 432, 17, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (355, 475, 950, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (356, 136, 271, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (357, 249, 215, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (358, 164, 328, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (359, 95, 189, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (360, 131, 217, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (361, 308, 145, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (362, 295, 589, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (363, 455, 909, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (364, 181, 122, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (365, 379, 757, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (366, 395, 789, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (367, 60, 307, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (368, 52, 103, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (369, 307, 138, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (370, 319, 238, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (371, 286, 571, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (372, 409, 183, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (373, 433, 865, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (374, 120, 240, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (375, 189, 378, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (376, 297, 593, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (377, 332, 94, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (378, 41, 81, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (379, 267, 534, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (380, 498, 242, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (381, 80, 160, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (382, 241, 481, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (383, 32, 155, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (384, 77, 153, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (385, 493, 986, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (386, 19, 37, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (387, 167, 95, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (388, 18, 35, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (389, 259, 518, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (390, 287, 574, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (391, 430, 308, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (392, 113, 225, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (393, 59, 117, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (394, 79, 247, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (395, 388, 776, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (396, 417, 833, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (397, 378, 755, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (398, 121, 241, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (399, 88, 176, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (400, 62, 124, 2);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (401, 90, 180, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (402, 289, 578, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (403, 365, 77, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (404, 415, 285, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (405, 115, 229, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (406, 201, 401, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (407, 23, 45, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (408, 141, 135, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (409, 243, 485, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (410, 179, 336, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (411, 304, 608, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (412, 208, 416, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (413, 398, 46, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (414, 97, 297, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (415, 52, 368, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (416, 68, 135, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (417, 263, 526, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (418, 378, 756, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (419, 188, 375, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (420, 361, 721, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (421, 229, 457, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (422, 43, 86, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (423, 293, 586, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (424, 21, 41, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (425, 389, 778, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (426, 174, 347, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (427, 350, 144, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (428, 354, 708, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (429, 233, 465, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (430, 273, 206, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (431, 419, 259, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (432, 212, 424, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (433, 453, 80, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (434, 205, 410, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (435, 408, 816, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (436, 291, 216, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (437, 376, 752, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (438, 118, 235, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (439, 462, 924, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (440, 293, 585, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (441, 496, 210, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (442, 27, 53, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (443, 275, 550, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (444, 81, 161, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (445, 483, 966, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (446, 222, 444, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (447, 216, 431, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (448, 462, 439, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (449, 28, 56, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (450, 321, 311, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (451, 154, 308, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (452, 500, 269, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (453, 433, 866, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (454, 228, 455, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (455, 334, 667, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (456, 48, 95, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (457, 497, 993, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (458, 345, 689, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (459, 26, 52, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (460, 442, 205, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (461, 351, 701, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (462, 169, 296, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (463, 408, 435, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (464, 470, 940, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (465, 260, 519, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (466, 93, 150, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (467, 256, 511, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (468, 193, 385, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (469, 189, 375, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (470, 261, 521, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (471, 192, 384, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (472, 146, 291, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (473, 417, 396, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (474, 396, 791, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (475, 365, 729, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (476, 203, 405, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (477, 268, 536, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (478, 213, 425, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (479, 38, 75, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (480, 168, 335, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (481, 459, 917, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (482, 389, 777, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (483, 327, 73, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (484, 412, 327, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (485, 119, 237, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (486, 420, 66, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (487, 279, 278, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (488, 226, 180, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (489, 372, 140, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (490, 361, 722, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (491, 295, 362, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (492, 32, 251, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (493, 92, 183, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (494, 21, 42, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (495, 442, 884, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (496, 328, 655, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (497, 119, 485, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (498, 305, 151, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (499, 321, 642, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (500, 391, 782, 5);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (501, 467, 142, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (502, 23, 46, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (503, 274, 29, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (504, 268, 301, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (505, 129, 258, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (506, 9, 18, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (507, 84, 167, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (508, 38, 479, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (509, 364, 1, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (510, 131, 360, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (511, 280, 6, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (512, 284, 568, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (513, 308, 615, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (514, 359, 717, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (515, 484, 967, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (516, 463, 925, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (517, 343, 147, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (518, 497, 457, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (519, 352, 704, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (520, 341, 347, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (521, 314, 627, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (522, 30, 60, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (523, 321, 499, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (524, 329, 657, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (525, 467, 933, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (526, 161, 321, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (527, 55, 109, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (528, 396, 474, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (529, 454, 7, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (530, 38, 508, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (531, 85, 169, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (532, 464, 927, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (533, 392, 784, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (534, 147, 293, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (535, 201, 141, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (536, 436, 871, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (537, 116, 177, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (538, 59, 118, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (539, 284, 567, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (540, 110, 70, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (541, 337, 279, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (542, 242, 304, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (543, 363, 726, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (544, 241, 382, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (545, 82, 288, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (546, 11, 21, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (547, 224, 261, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (548, 234, 349, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (549, 38, 530, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (550, 480, 960, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (551, 485, 969, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (552, 122, 244, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (553, 454, 529, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (554, 481, 246, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (555, 78, 164, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (556, 437, 274, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (557, 202, 404, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (558, 445, 890, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (559, 301, 602, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (560, 469, 937, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (561, 455, 352, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (562, 188, 376, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (563, 85, 531, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (564, 326, 231, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (565, 47, 110, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (566, 317, 13, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (567, 393, 220, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (568, 162, 323, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (569, 158, 291, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (570, 48, 96, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (571, 347, 102, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (572, 284, 512, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (573, 214, 267, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (574, 242, 174, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (575, 5, 9, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (576, 72, 144, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (577, 168, 480, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (578, 81, 162, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (579, 247, 494, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (580, 456, 912, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (581, 437, 873, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (582, 321, 523, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (583, 358, 42, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (584, 474, 948, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (585, 53, 106, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (586, 463, 516, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (587, 11, 546, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (588, 412, 823, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (589, 69, 276, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (590, 264, 528, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (591, 234, 12, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (592, 171, 265, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (593, 259, 160, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (594, 315, 630, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (595, 156, 218, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (596, 149, 297, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (597, 158, 569, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (598, 37, 74, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (599, 194, 129, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (600, 266, 328, 4);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (601, 119, 497, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (602, 63, 79, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (603, 76, 152, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (604, 490, 980, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (605, 133, 266, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (606, 201, 535, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (607, 409, 2, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (608, 212, 423, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (609, 477, 114, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (610, 6, 12, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (611, 270, 275, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (612, 122, 219, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (613, 199, 397, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (614, 346, 691, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (615, 32, 383, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (616, 134, 268, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (617, 330, 660, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (618, 111, 105, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (619, 274, 503, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (620, 85, 563, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (621, 307, 222, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (622, 481, 554, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (623, 93, 466, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (624, 394, 788, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (625, 314, 628, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (626, 177, 354, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (627, 26, 459, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (628, 399, 797, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (629, 87, 149, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (630, 356, 712, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (631, 415, 829, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (632, 131, 261, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (633, 387, 303, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (634, 482, 964, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (635, 338, 675, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (636, 374, 748, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (637, 246, 115, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (638, 369, 737, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (639, 341, 682, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (640, 352, 519, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (641, 54, 108, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (642, 299, 598, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (643, 435, 870, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (644, 63, 602, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (645, 495, 128, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (646, 113, 392, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (647, 472, 944, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (648, 413, 57, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (649, 284, 539, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (650, 22, 44, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (651, 319, 637, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (652, 47, 565, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (653, 264, 590, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (654, 110, 540, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (655, 460, 919, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (656, 138, 276, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (657, 471, 942, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (658, 182, 364, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (659, 176, 352, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (660, 456, 580, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (661, 176, 351, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (662, 11, 22, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (663, 126, 152, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (664, 121, 258, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (665, 92, 493, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (666, 140, 280, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (667, 235, 86, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (668, 217, 434, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (669, 9, 190, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (670, 159, 317, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (671, 389, 482, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (672, 462, 448, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (673, 270, 611, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (674, 422, 157, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (675, 31, 62, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (676, 8, 312, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (677, 47, 93, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (678, 30, 522, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (679, 400, 350, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (680, 202, 403, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (681, 205, 434, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (682, 113, 119, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (683, 115, 230, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (684, 65, 130, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (685, 38, 76, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (686, 368, 58, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (687, 367, 734, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (688, 278, 555, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (689, 23, 502, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (690, 200, 400, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (691, 403, 806, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (692, 64, 127, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (693, 193, 468, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (694, 385, 770, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (695, 177, 626, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (696, 43, 422, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (697, 174, 426, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (698, 315, 629, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (699, 472, 943, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (700, 355, 710, 3);
+
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (701, 378, 418, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (702, 256, 467, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (703, 405, 88, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (704, 125, 292, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (705, 134, 616, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (706, 357, 713, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (707, 277, 290, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (708, 343, 685, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (709, 79, 394, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (710, 452, 904, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (711, 92, 665, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (712, 441, 882, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (713, 283, 565, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (714, 475, 949, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (715, 252, 503, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (716, 63, 125, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (717, 396, 792, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (718, 61, 213, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (719, 83, 166, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (720, 224, 547, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (721, 273, 546, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (722, 458, 915, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (723, 194, 599, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (724, 309, 617, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (725, 256, 702, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (726, 325, 650, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (727, 270, 673, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (728, 385, 694, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (729, 245, 489, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (730, 488, 976, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (731, 335, 669, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (732, 233, 429, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (733, 59, 393, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (734, 45, 271, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (735, 324, 268, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (736, 450, 899, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (737, 209, 417, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (738, 490, 604, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (739, 431, 862, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (740, 182, 658, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (741, 91, 182, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (742, 25, 49, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (743, 199, 613, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (744, 72, 143, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (745, 109, 351, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (746, 463, 586, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (747, 281, 562, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (748, 218, 436, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (749, 134, 705, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (750, 115, 683, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (751, 147, 294, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (752, 113, 682, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (753, 232, 463, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (754, 248, 496, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (755, 82, 164, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (756, 421, 842, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (757, 62, 316, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (758, 97, 414, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (759, 370, 740, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (760, 310, 120, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (761, 87, 174, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (762, 392, 533, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (763, 99, 197, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (764, 92, 711, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (765, 118, 438, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (766, 360, 78, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (767, 383, 766, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (768, 238, 234, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (769, 151, 171, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (770, 302, 604, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (771, 355, 709, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (772, 407, 813, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (773, 130, 260, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (774, 402, 803, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (775, 134, 267, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (776, 249, 357, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (777, 260, 465, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (778, 123, 246, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (779, 201, 406, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (780, 294, 587, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (781, 44, 88, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (782, 52, 104, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (783, 252, 715, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (784, 130, 259, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (785, 341, 639, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (786, 222, 8, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (787, 1, 277, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (788, 311, 622, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (789, 464, 532, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (790, 403, 691, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (791, 389, 671, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (792, 112, 224, 1);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (793, 121, 398, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (794, 122, 552, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (795, 95, 81, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (796, 199, 398, 5);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (797, 427, 853, 2);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (798, 108, 215, 3);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (799, 454, 262, 4);
+INSERT BorrowersRecordDetails (details_ID, borrowers_ID, book_ID, detail_numberofcopies) VALUES (800, 249, 498, 5);
\ No newline at end of file
diff --git a/StartUpChallenge/Data/BorrowersRecords.sql b/StartUpChallenge/Data/BorrowersRecords.sql
new file mode 100644
index 0000000..cd4777f
--- /dev/null
+++ b/StartUpChallenge/Data/BorrowersRecords.sql
@@ -0,0 +1,506 @@
+
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (1, 26, 8, CAST(N'2020-06-10T15:05:20.860' AS DateTime), CAST(N'2020-06-24T15:05:20.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (2, 29, 9, CAST(N'2021-08-14T13:28:38.190' AS DateTime), CAST(N'2021-08-28T13:28:38.190' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (3, 27, 8, CAST(N'2022-10-04T04:13:47.520' AS DateTime), CAST(N'2022-10-18T04:13:47.520' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (4, 20, 6, CAST(N'2021-05-19T12:04:50.220' AS DateTime), CAST(N'2021-06-02T12:04:50.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (5, 8, 3, CAST(N'2022-07-15T10:59:39.460' AS DateTime), CAST(N'2022-07-29T10:59:39.460' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (6, 20, 6, CAST(N'2021-12-30T06:19:56.920' AS DateTime), CAST(N'2022-01-13T06:19:56.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (7, 32, 10, CAST(N'2021-06-21T00:30:46.950' AS DateTime), CAST(N'2021-07-05T00:30:46.950' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (8, 16, 5, CAST(N'2022-07-15T23:12:10.470' AS DateTime), CAST(N'2022-07-29T23:12:10.470' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (9, 35, 10, CAST(N'2020-04-11T01:46:07.820' AS DateTime), CAST(N'2020-04-25T01:46:07.820' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (10, 10, 3, CAST(N'2022-05-08T23:26:35.010' AS DateTime), CAST(N'2022-05-22T23:26:35.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (11, 11, 3, CAST(N'2020-06-13T14:56:36.700' AS DateTime), CAST(N'2020-06-27T14:56:36.700' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (12, 17, 5, CAST(N'2021-11-05T07:53:38.130' AS DateTime), CAST(N'2021-11-19T07:53:38.130' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (13, 23, 7, CAST(N'2021-06-25T12:45:21.300' AS DateTime), CAST(N'2021-07-09T12:45:21.300' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (14, 17, 5, CAST(N'2022-12-26T11:12:57.040' AS DateTime), CAST(N'2023-01-09T11:12:57.040' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (15, 35, 10, CAST(N'2020-07-01T16:15:43.960' AS DateTime), CAST(N'2020-07-15T16:15:43.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (16, 2, 1, CAST(N'2022-10-27T23:10:09.090' AS DateTime), CAST(N'2022-11-10T23:10:09.090' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (17, 31, 9, CAST(N'2022-09-28T01:08:27.730' AS DateTime), CAST(N'2022-10-12T01:08:27.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (18, 35, 10, CAST(N'2021-02-11T23:37:49.510' AS DateTime), CAST(N'2021-02-25T23:37:49.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (19, 24, 7, CAST(N'2021-11-30T08:53:56.610' AS DateTime), CAST(N'2021-12-14T08:53:56.610' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (20, 12, 4, CAST(N'2021-05-26T19:23:49.990' AS DateTime), CAST(N'2021-06-09T19:23:49.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (21, 29, 9, CAST(N'2021-05-11T07:15:16.010' AS DateTime), CAST(N'2021-05-25T07:15:16.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (22, 30, 9, CAST(N'2021-06-13T01:50:24.670' AS DateTime), CAST(N'2021-06-27T01:50:24.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (23, 35, 10, CAST(N'2022-03-25T01:35:35.900' AS DateTime), CAST(N'2022-04-08T01:35:35.900' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (24, 2, 1, CAST(N'2020-01-02T12:23:10.140' AS DateTime), CAST(N'2020-01-16T12:23:10.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (25, 25, 7, CAST(N'2021-04-10T18:30:02.450' AS DateTime), CAST(N'2021-04-24T18:30:02.450' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (26, 19, 6, CAST(N'2022-10-19T02:54:33.290' AS DateTime), CAST(N'2022-11-02T02:54:33.290' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (27, 33, 10, CAST(N'2020-05-01T02:42:19.520' AS DateTime), CAST(N'2020-05-15T02:42:19.520' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (28, 25, 7, CAST(N'2021-05-19T09:48:18.930' AS DateTime), CAST(N'2021-06-02T09:48:18.930' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (29, 20, 6, CAST(N'2022-03-25T13:19:30.510' AS DateTime), CAST(N'2022-04-08T13:19:30.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (30, 3, 1, CAST(N'2020-09-30T19:53:56.550' AS DateTime), CAST(N'2020-10-14T19:53:56.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (31, 7, 2, CAST(N'2021-05-04T02:56:54.850' AS DateTime), CAST(N'2021-05-18T02:56:54.850' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (32, 16, 5, CAST(N'2020-06-21T21:22:34.960' AS DateTime), CAST(N'2020-07-05T21:22:34.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (33, 11, 3, CAST(N'2021-10-22T14:59:41.770' AS DateTime), CAST(N'2021-11-05T14:59:41.770' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (34, 35, 10, CAST(N'2022-04-04T13:36:57.940' AS DateTime), CAST(N'2022-04-18T13:36:57.940' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (35, 23, 7, CAST(N'2022-10-10T20:00:28.280' AS DateTime), CAST(N'2022-10-24T20:00:28.280' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (36, 27, 8, CAST(N'2021-03-20T00:22:31.990' AS DateTime), CAST(N'2021-04-03T00:22:31.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (37, 2, 1, CAST(N'2021-04-20T10:46:59.740' AS DateTime), CAST(N'2021-05-04T10:46:59.740' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (38, 14, 4, CAST(N'2022-07-13T21:38:46.000' AS DateTime), CAST(N'2022-07-27T21:38:46.000' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (39, 13, 4, CAST(N'2020-11-29T15:57:13.220' AS DateTime), CAST(N'2020-12-13T15:57:13.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (40, 34, 10, CAST(N'2021-02-22T14:10:09.660' AS DateTime), CAST(N'2021-03-08T14:10:09.660' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (41, 18, 6, CAST(N'2020-11-14T10:29:25.990' AS DateTime), CAST(N'2020-11-28T10:29:25.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (42, 26, 8, CAST(N'2021-07-18T21:24:04.530' AS DateTime), CAST(N'2021-08-01T21:24:04.530' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (43, 5, 2, CAST(N'2021-01-16T08:40:41.590' AS DateTime), CAST(N'2021-01-30T08:40:41.590' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (44, 10, 3, CAST(N'2020-05-25T07:06:21.110' AS DateTime), CAST(N'2020-06-08T07:06:21.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (45, 32, 10, CAST(N'2020-02-21T20:53:12.390' AS DateTime), CAST(N'2020-03-06T20:53:12.390' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (46, 28, 8, CAST(N'2021-08-11T23:04:25.490' AS DateTime), CAST(N'2021-08-25T23:04:25.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (47, 12, 4, CAST(N'2022-09-17T07:53:48.320' AS DateTime), CAST(N'2022-10-01T07:53:48.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (48, 17, 5, CAST(N'2022-01-05T12:35:06.800' AS DateTime), CAST(N'2022-01-19T12:35:06.800' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (49, 6, 2, CAST(N'2021-10-11T16:57:15.070' AS DateTime), CAST(N'2021-10-25T16:57:15.070' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (50, 8, 3, CAST(N'2022-12-13T00:08:02.320' AS DateTime), CAST(N'2022-12-27T00:08:02.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (51, 15, 5, CAST(N'2021-11-20T01:55:47.470' AS DateTime), CAST(N'2021-12-04T01:55:47.470' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (52, 26, 8, CAST(N'2020-06-02T04:16:04.280' AS DateTime), CAST(N'2020-06-16T04:16:04.280' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (53, 22, 7, CAST(N'2021-10-17T20:08:36.470' AS DateTime), CAST(N'2021-10-31T20:08:36.470' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (54, 18, 5, CAST(N'2021-09-10T05:10:21.580' AS DateTime), CAST(N'2021-09-24T05:10:21.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (55, 7, 2, CAST(N'2022-10-22T06:01:18.010' AS DateTime), CAST(N'2022-11-05T06:01:18.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (56, 31, 9, CAST(N'2021-12-28T13:14:56.200' AS DateTime), CAST(N'2022-01-11T13:14:56.200' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (57, 29, 9, CAST(N'2022-05-22T11:53:02.290' AS DateTime), CAST(N'2022-06-05T11:53:02.290' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (58, 26, 8, CAST(N'2022-10-02T15:50:37.380' AS DateTime), CAST(N'2022-10-16T15:50:37.380' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (59, 31, 9, CAST(N'2020-02-08T17:34:47.760' AS DateTime), CAST(N'2020-02-22T17:34:47.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (60, 24, 7, CAST(N'2022-09-26T08:05:06.180' AS DateTime), CAST(N'2022-10-10T08:05:06.180' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (61, 22, 7, CAST(N'2021-08-31T03:37:37.390' AS DateTime), CAST(N'2021-09-14T03:37:37.390' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (62, 8, 3, CAST(N'2020-02-02T14:42:28.010' AS DateTime), CAST(N'2020-02-16T14:42:28.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (63, 32, 9, CAST(N'2020-04-22T09:52:39.950' AS DateTime), CAST(N'2020-05-06T09:52:39.950' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (64, 32, 9, CAST(N'2022-07-11T05:52:11.270' AS DateTime), CAST(N'2022-07-25T05:52:11.270' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (65, 4, 1, CAST(N'2021-01-04T20:29:40.150' AS DateTime), CAST(N'2021-01-18T20:29:40.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (66, 30, 9, CAST(N'2022-12-22T17:34:01.740' AS DateTime), CAST(N'2023-01-05T17:34:01.740' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (67, 6, 2, CAST(N'2020-01-14T16:53:56.350' AS DateTime), CAST(N'2020-01-28T16:53:56.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (68, 23, 7, CAST(N'2022-03-22T23:08:23.370' AS DateTime), CAST(N'2022-04-05T23:08:23.370' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (69, 29, 9, CAST(N'2020-03-17T15:12:28.760' AS DateTime), CAST(N'2020-03-31T15:12:28.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (70, 8, 3, CAST(N'2022-04-13T15:53:11.970' AS DateTime), CAST(N'2022-04-27T15:53:11.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (71, 35, 10, CAST(N'2021-07-09T12:23:09.340' AS DateTime), CAST(N'2021-07-23T12:23:09.340' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (72, 17, 5, CAST(N'2020-03-17T03:29:41.730' AS DateTime), CAST(N'2020-03-31T03:29:41.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (73, 23, 7, CAST(N'2020-03-15T07:40:36.280' AS DateTime), CAST(N'2020-03-29T07:40:36.280' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (74, 26, 8, CAST(N'2020-10-07T18:43:46.940' AS DateTime), CAST(N'2020-10-21T18:43:46.940' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (75, 29, 9, CAST(N'2020-07-12T08:54:24.000' AS DateTime), CAST(N'2020-07-26T08:54:24.000' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (76, 4, 2, CAST(N'2022-10-23T09:51:11.480' AS DateTime), CAST(N'2022-11-06T09:51:11.480' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (77, 26, 8, CAST(N'2020-05-27T17:09:43.070' AS DateTime), CAST(N'2020-06-10T17:09:43.070' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (78, 26, 8, CAST(N'2021-10-30T18:29:14.790' AS DateTime), CAST(N'2021-11-13T18:29:14.790' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (79, 5, 2, CAST(N'2022-11-10T15:29:57.750' AS DateTime), CAST(N'2022-11-24T15:29:57.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (80, 32, 10, CAST(N'2022-08-29T19:25:36.960' AS DateTime), CAST(N'2022-09-12T19:25:36.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (81, 7, 2, CAST(N'2020-02-01T19:00:44.960' AS DateTime), CAST(N'2020-02-15T19:00:44.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (82, 17, 5, CAST(N'2021-04-25T14:07:12.720' AS DateTime), CAST(N'2021-05-09T14:07:12.720' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (83, 19, 6, CAST(N'2022-08-07T16:51:03.860' AS DateTime), CAST(N'2022-08-21T16:51:03.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (84, 12, 4, CAST(N'2022-04-12T13:11:28.190' AS DateTime), CAST(N'2022-04-26T13:11:28.190' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (85, 24, 7, CAST(N'2021-11-10T17:58:09.090' AS DateTime), CAST(N'2021-11-24T17:58:09.090' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (86, 17, 5, CAST(N'2020-12-01T22:40:50.570' AS DateTime), CAST(N'2020-12-15T22:40:50.570' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (87, 30, 9, CAST(N'2021-09-04T01:13:58.500' AS DateTime), CAST(N'2021-09-18T01:13:58.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (88, 29, 9, CAST(N'2020-02-12T09:49:20.190' AS DateTime), CAST(N'2020-02-26T09:49:20.190' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (89, 28, 8, CAST(N'2022-06-13T07:35:39.930' AS DateTime), CAST(N'2022-06-27T07:35:39.930' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (90, 27, 8, CAST(N'2020-10-13T06:45:32.070' AS DateTime), CAST(N'2020-10-27T06:45:32.070' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (91, 33, 10, CAST(N'2021-10-28T12:29:29.710' AS DateTime), CAST(N'2021-11-11T12:29:29.710' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (92, 11, 3, CAST(N'2021-07-18T18:56:22.370' AS DateTime), CAST(N'2021-08-01T18:56:22.370' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (93, 19, 6, CAST(N'2022-06-05T04:03:58.230' AS DateTime), CAST(N'2022-06-19T04:03:58.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (94, 24, 7, CAST(N'2021-03-05T07:52:07.050' AS DateTime), CAST(N'2021-03-19T07:52:07.050' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (95, 12, 4, CAST(N'2022-06-24T10:32:32.280' AS DateTime), CAST(N'2022-07-08T10:32:32.280' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (96, 11, 3, CAST(N'2020-10-12T19:46:57.970' AS DateTime), CAST(N'2020-10-26T19:46:57.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (97, 29, 9, CAST(N'2021-03-28T11:31:24.580' AS DateTime), CAST(N'2021-04-11T11:31:24.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (98, 8, 3, CAST(N'2021-07-08T02:48:30.320' AS DateTime), CAST(N'2021-07-22T02:48:30.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (99, 7, 2, CAST(N'2022-05-20T10:36:40.960' AS DateTime), CAST(N'2022-06-03T10:36:40.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (100, 3, 1, CAST(N'2020-03-01T03:19:10.660' AS DateTime), CAST(N'2020-03-15T03:19:10.660' AS DateTime));
+
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (101, 22, 7, CAST(N'2021-07-29T06:10:29.140' AS DateTime), CAST(N'2021-08-12T06:10:29.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (102, 25, 7, CAST(N'2020-06-27T08:45:24.950' AS DateTime), CAST(N'2020-07-11T08:45:24.950' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (103, 23, 7, CAST(N'2021-10-20T21:22:38.040' AS DateTime), CAST(N'2021-11-03T21:22:38.040' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (104, 33, 10, CAST(N'2022-06-30T01:04:03.100' AS DateTime), CAST(N'2022-07-14T01:04:03.100' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (105, 8, 3, CAST(N'2021-06-05T11:44:52.980' AS DateTime), CAST(N'2021-06-19T11:44:52.980' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (106, 33, 10, CAST(N'2021-09-04T22:26:05.730' AS DateTime), CAST(N'2021-09-18T22:26:05.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (107, 3, 1, CAST(N'2020-03-19T20:35:27.990' AS DateTime), CAST(N'2020-04-02T20:35:27.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (108, 32, 10, CAST(N'2021-01-10T01:24:49.520' AS DateTime), CAST(N'2021-01-24T01:24:49.520' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (109, 24, 7, CAST(N'2021-02-28T20:15:57.580' AS DateTime), CAST(N'2021-03-14T20:15:57.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (110, 4, 1, CAST(N'2022-12-29T20:10:06.530' AS DateTime), CAST(N'2023-01-12T20:10:06.530' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (111, 6, 2, CAST(N'2021-08-02T20:05:13.120' AS DateTime), CAST(N'2021-08-16T20:05:13.120' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (112, 4, 2, CAST(N'2020-07-22T17:23:47.490' AS DateTime), CAST(N'2020-08-05T17:23:47.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (113, 22, 7, CAST(N'2022-11-22T00:20:39.630' AS DateTime), CAST(N'2022-12-06T00:20:39.630' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (114, 34, 10, CAST(N'2020-06-10T22:09:10.800' AS DateTime), CAST(N'2020-06-24T22:09:10.800' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (115, 18, 5, CAST(N'2022-08-25T13:04:21.220' AS DateTime), CAST(N'2022-09-08T13:04:21.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (116, 6, 2, CAST(N'2020-05-07T13:30:24.670' AS DateTime), CAST(N'2020-05-21T13:30:24.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (117, 24, 7, CAST(N'2020-06-26T21:51:24.160' AS DateTime), CAST(N'2020-07-10T21:51:24.160' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (118, 20, 6, CAST(N'2021-01-09T20:41:11.760' AS DateTime), CAST(N'2021-01-23T20:41:11.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (119, 8, 3, CAST(N'2020-08-30T11:54:02.180' AS DateTime), CAST(N'2020-09-13T11:54:02.180' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (120, 22, 7, CAST(N'2020-02-03T21:48:49.580' AS DateTime), CAST(N'2020-02-17T21:48:49.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (121, 1, 1, CAST(N'2021-04-19T16:20:03.230' AS DateTime), CAST(N'2021-05-03T16:20:03.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (122, 13, 4, CAST(N'2022-12-02T07:04:36.170' AS DateTime), CAST(N'2022-12-16T07:04:36.170' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (123, 30, 9, CAST(N'2022-10-09T15:32:43.440' AS DateTime), CAST(N'2022-10-23T15:32:43.440' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (124, 3, 1, CAST(N'2022-06-04T08:26:56.690' AS DateTime), CAST(N'2022-06-18T08:26:56.690' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (125, 10, 3, CAST(N'2020-06-16T03:23:42.260' AS DateTime), CAST(N'2020-06-30T03:23:42.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (126, 25, 8, CAST(N'2022-12-21T17:26:46.970' AS DateTime), CAST(N'2023-01-04T17:26:46.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (127, 34, 10, CAST(N'2020-10-11T23:25:43.500' AS DateTime), CAST(N'2020-10-25T23:25:43.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (128, 35, 10, CAST(N'2022-01-09T23:48:29.240' AS DateTime), CAST(N'2022-01-23T23:48:29.240' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (129, 14, 4, CAST(N'2021-04-15T08:11:14.670' AS DateTime), CAST(N'2021-04-29T08:11:14.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (130, 19, 6, CAST(N'2022-09-29T13:07:26.040' AS DateTime), CAST(N'2022-10-13T13:07:26.040' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (131, 10, 3, CAST(N'2021-07-27T22:19:46.900' AS DateTime), CAST(N'2021-08-10T22:19:46.900' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (132, 18, 6, CAST(N'2021-11-19T14:21:12.760' AS DateTime), CAST(N'2021-12-03T14:21:12.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (133, 19, 6, CAST(N'2022-06-12T07:52:33.840' AS DateTime), CAST(N'2022-06-26T07:52:33.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (134, 2, 1, CAST(N'2022-09-11T12:10:47.090' AS DateTime), CAST(N'2022-09-25T12:10:47.090' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (135, 10, 3, CAST(N'2021-01-31T13:15:07.820' AS DateTime), CAST(N'2021-02-14T13:15:07.820' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (136, 18, 5, CAST(N'2022-08-06T10:15:20.010' AS DateTime), CAST(N'2022-08-20T10:15:20.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (137, 30, 9, CAST(N'2022-07-05T16:44:34.690' AS DateTime), CAST(N'2022-07-19T16:44:34.690' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (138, 22, 7, CAST(N'2020-02-08T15:47:00.750' AS DateTime), CAST(N'2020-02-22T15:47:00.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (139, 4, 2, CAST(N'2020-11-07T01:26:35.210' AS DateTime), CAST(N'2020-11-21T01:26:35.210' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (140, 26, 8, CAST(N'2020-03-07T19:32:03.350' AS DateTime), CAST(N'2020-03-21T19:32:03.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (141, 15, 5, CAST(N'2020-09-14T02:05:22.570' AS DateTime), CAST(N'2020-09-28T02:05:22.570' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (142, 33, 10, CAST(N'2020-08-24T23:49:08.970' AS DateTime), CAST(N'2020-09-07T23:49:08.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (143, 5, 2, CAST(N'2021-12-13T13:33:22.610' AS DateTime), CAST(N'2021-12-27T13:33:22.610' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (144, 25, 7, CAST(N'2022-06-14T11:25:33.410' AS DateTime), CAST(N'2022-06-28T11:25:33.410' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (145, 22, 7, CAST(N'2022-03-12T10:40:18.960' AS DateTime), CAST(N'2022-03-26T10:40:18.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (146, 30, 9, CAST(N'2021-04-07T19:05:42.210' AS DateTime), CAST(N'2021-04-21T19:05:42.210' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (147, 24, 7, CAST(N'2021-08-26T18:35:42.750' AS DateTime), CAST(N'2021-09-09T18:35:42.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (148, 20, 6, CAST(N'2021-12-25T05:54:47.430' AS DateTime), CAST(N'2022-01-08T05:54:47.430' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (149, 7, 2, CAST(N'2021-07-10T18:47:45.840' AS DateTime), CAST(N'2021-07-24T18:47:45.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (150, 7, 2, CAST(N'2022-02-16T21:02:07.600' AS DateTime), CAST(N'2022-03-02T21:02:07.600' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (151, 22, 7, CAST(N'2020-04-17T21:55:33.800' AS DateTime), CAST(N'2020-05-01T21:55:33.800' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (152, 9, 3, CAST(N'2020-03-18T14:50:12.820' AS DateTime), CAST(N'2020-04-01T14:50:12.820' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (153, 35, 10, CAST(N'2020-11-07T14:54:28.140' AS DateTime), CAST(N'2020-11-21T14:54:28.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (154, 20, 6, CAST(N'2022-04-16T12:47:51.370' AS DateTime), CAST(N'2022-04-30T12:47:51.370' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (155, 3, 1, CAST(N'2021-11-11T10:59:07.430' AS DateTime), CAST(N'2021-11-25T10:59:07.430' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (156, 10, 3, CAST(N'2021-08-26T23:05:52.980' AS DateTime), CAST(N'2021-09-09T23:05:52.980' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (157, 30, 9, CAST(N'2020-09-17T17:12:41.510' AS DateTime), CAST(N'2020-10-01T17:12:41.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (158, 20, 6, CAST(N'2022-05-18T12:55:41.350' AS DateTime), CAST(N'2022-06-01T12:55:41.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (159, 23, 7, CAST(N'2022-01-13T21:40:20.840' AS DateTime), CAST(N'2022-01-27T21:40:20.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (160, 19, 6, CAST(N'2021-06-14T18:18:06.020' AS DateTime), CAST(N'2021-06-28T18:18:06.020' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (161, 34, 10, CAST(N'2020-11-23T23:00:22.230' AS DateTime), CAST(N'2020-12-07T23:00:22.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (162, 3, 1, CAST(N'2021-03-09T20:46:58.760' AS DateTime), CAST(N'2021-03-23T20:46:58.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (163, 18, 6, CAST(N'2022-09-26T17:13:34.860' AS DateTime), CAST(N'2022-10-10T17:13:34.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (164, 6, 2, CAST(N'2021-06-01T07:08:31.550' AS DateTime), CAST(N'2021-06-15T07:08:31.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (165, 29, 9, CAST(N'2021-06-03T21:50:19.630' AS DateTime), CAST(N'2021-06-17T21:50:19.630' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (166, 23, 7, CAST(N'2022-09-13T05:44:00.370' AS DateTime), CAST(N'2022-09-27T05:44:00.370' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (167, 21, 6, CAST(N'2021-02-09T09:31:13.660' AS DateTime), CAST(N'2021-02-23T09:31:13.660' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (168, 20, 6, CAST(N'2020-03-12T12:09:52.540' AS DateTime), CAST(N'2020-03-26T12:09:52.540' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (169, 24, 7, CAST(N'2022-05-10T08:54:02.990' AS DateTime), CAST(N'2022-05-24T08:54:02.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (170, 35, 10, CAST(N'2020-01-20T02:49:01.200' AS DateTime), CAST(N'2020-02-03T02:49:01.200' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (171, 11, 4, CAST(N'2020-11-01T20:45:49.980' AS DateTime), CAST(N'2020-11-15T20:45:49.980' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (172, 3, 1, CAST(N'2020-05-19T06:04:23.400' AS DateTime), CAST(N'2020-06-02T06:04:23.400' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (173, 17, 5, CAST(N'2020-03-04T19:14:36.550' AS DateTime), CAST(N'2020-03-18T19:14:36.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (174, 17, 5, CAST(N'2020-06-24T16:21:58.820' AS DateTime), CAST(N'2020-07-08T16:21:58.820' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (175, 8, 3, CAST(N'2022-05-21T19:43:27.020' AS DateTime), CAST(N'2022-06-04T19:43:27.020' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (176, 3, 1, CAST(N'2020-08-25T16:30:54.260' AS DateTime), CAST(N'2020-09-08T16:30:54.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (177, 9, 3, CAST(N'2020-12-19T17:31:13.550' AS DateTime), CAST(N'2021-01-02T17:31:13.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (178, 6, 2, CAST(N'2020-04-27T04:07:10.030' AS DateTime), CAST(N'2020-05-11T04:07:10.030' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (179, 16, 5, CAST(N'2020-03-24T21:46:37.730' AS DateTime), CAST(N'2020-04-07T21:46:37.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (180, 16, 5, CAST(N'2022-03-10T08:18:00.060' AS DateTime), CAST(N'2022-03-24T08:18:00.060' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (181, 1, 1, CAST(N'2021-04-26T22:51:04.220' AS DateTime), CAST(N'2021-05-10T22:51:04.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (182, 14, 4, CAST(N'2021-10-17T17:30:56.080' AS DateTime), CAST(N'2021-10-31T17:30:56.080' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (183, 29, 9, CAST(N'2020-07-02T05:00:43.400' AS DateTime), CAST(N'2020-07-16T05:00:43.400' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (184, 8, 3, CAST(N'2022-02-26T11:09:07.070' AS DateTime), CAST(N'2022-03-12T11:09:07.070' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (185, 32, 10, CAST(N'2022-06-13T15:11:52.230' AS DateTime), CAST(N'2022-06-27T15:11:52.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (186, 2, 1, CAST(N'2021-05-11T07:29:34.080' AS DateTime), CAST(N'2021-05-25T07:29:34.080' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (187, 18, 6, CAST(N'2021-01-11T23:26:44.620' AS DateTime), CAST(N'2021-01-25T23:26:44.620' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (188, 34, 10, CAST(N'2020-02-26T19:04:42.460' AS DateTime), CAST(N'2020-03-11T19:04:42.460' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (189, 35, 10, CAST(N'2020-10-31T01:11:39.650' AS DateTime), CAST(N'2020-11-14T01:11:39.650' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (190, 1, 1, CAST(N'2022-06-06T14:09:14.840' AS DateTime), CAST(N'2022-06-20T14:09:14.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (191, 23, 7, CAST(N'2021-11-18T17:02:38.500' AS DateTime), CAST(N'2021-12-02T17:02:38.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (192, 10, 3, CAST(N'2020-02-18T03:48:53.330' AS DateTime), CAST(N'2020-03-03T03:48:53.330' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (193, 34, 10, CAST(N'2021-01-24T18:06:39.920' AS DateTime), CAST(N'2021-02-07T18:06:39.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (194, 21, 6, CAST(N'2022-05-25T07:08:29.200' AS DateTime), CAST(N'2022-06-08T07:08:29.200' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (195, 28, 8, CAST(N'2022-04-13T20:31:41.130' AS DateTime), CAST(N'2022-04-27T20:31:41.130' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (196, 12, 4, CAST(N'2022-07-07T05:18:23.810' AS DateTime), CAST(N'2022-07-21T05:18:23.810' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (197, 15, 5, CAST(N'2020-11-28T06:35:34.120' AS DateTime), CAST(N'2020-12-12T06:35:34.120' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (198, 35, 10, CAST(N'2020-07-14T06:24:51.060' AS DateTime), CAST(N'2020-07-28T06:24:51.060' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (199, 32, 9, CAST(N'2021-01-10T13:35:13.780' AS DateTime), CAST(N'2021-01-24T13:35:13.780' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (200, 35, 10, CAST(N'2022-06-29T04:56:18.600' AS DateTime), CAST(N'2022-07-13T04:56:18.600' AS DateTime));
+
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (201, 9, 3, CAST(N'2020-02-27T09:34:28.540' AS DateTime), CAST(N'2020-03-12T09:34:28.540' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (202, 5, 2, CAST(N'2021-06-16T06:25:50.210' AS DateTime), CAST(N'2021-06-30T06:25:50.210' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (203, 32, 9, CAST(N'2022-08-16T21:00:44.440' AS DateTime), CAST(N'2022-08-30T21:00:44.440' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (204, 7, 2, CAST(N'2021-06-21T15:58:44.630' AS DateTime), CAST(N'2021-07-05T15:58:44.630' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (205, 31, 9, CAST(N'2021-04-17T00:16:17.620' AS DateTime), CAST(N'2021-05-01T00:16:17.620' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (206, 20, 6, CAST(N'2022-11-29T15:51:10.410' AS DateTime), CAST(N'2022-12-13T15:51:10.410' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (207, 28, 8, CAST(N'2020-01-14T19:35:36.260' AS DateTime), CAST(N'2020-01-28T19:35:36.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (208, 18, 6, CAST(N'2020-05-15T22:32:29.310' AS DateTime), CAST(N'2020-05-29T22:32:29.310' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (209, 13, 4, CAST(N'2022-11-25T17:04:24.350' AS DateTime), CAST(N'2022-12-09T17:04:24.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (210, 35, 10, CAST(N'2021-03-18T18:28:13.170' AS DateTime), CAST(N'2021-04-01T18:28:13.170' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (211, 2, 1, CAST(N'2020-09-07T05:34:39.420' AS DateTime), CAST(N'2020-09-21T05:34:39.420' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (212, 25, 7, CAST(N'2020-05-23T13:05:31.480' AS DateTime), CAST(N'2020-06-06T13:05:31.480' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (213, 5, 2, CAST(N'2022-02-23T15:09:03.620' AS DateTime), CAST(N'2022-03-09T15:09:03.620' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (214, 7, 2, CAST(N'2022-11-05T13:22:20.790' AS DateTime), CAST(N'2022-11-19T13:22:20.790' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (215, 18, 5, CAST(N'2020-02-18T19:27:01.790' AS DateTime), CAST(N'2020-03-03T19:27:01.790' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (216, 21, 6, CAST(N'2022-02-06T05:29:26.150' AS DateTime), CAST(N'2022-02-20T05:29:26.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (217, 10, 3, CAST(N'2020-09-07T15:46:15.360' AS DateTime), CAST(N'2020-09-21T15:46:15.360' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (218, 11, 4, CAST(N'2020-07-31T06:04:27.790' AS DateTime), CAST(N'2020-08-14T06:04:27.790' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (219, 9, 3, CAST(N'2021-12-18T15:56:39.320' AS DateTime), CAST(N'2022-01-01T15:56:39.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (220, 28, 8, CAST(N'2020-01-24T14:20:45.540' AS DateTime), CAST(N'2020-02-07T14:20:45.540' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (221, 5, 2, CAST(N'2021-09-01T06:17:15.750' AS DateTime), CAST(N'2021-09-15T06:17:15.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (222, 22, 7, CAST(N'2020-12-14T14:26:31.200' AS DateTime), CAST(N'2020-12-28T14:26:31.200' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (223, 20, 6, CAST(N'2022-05-12T10:58:12.890' AS DateTime), CAST(N'2022-05-26T10:58:12.890' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (224, 23, 7, CAST(N'2022-12-03T18:44:48.150' AS DateTime), CAST(N'2022-12-17T18:44:48.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (225, 12, 4, CAST(N'2021-03-02T09:46:22.700' AS DateTime), CAST(N'2021-03-16T09:46:22.700' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (226, 1, 1, CAST(N'2020-09-14T16:56:56.650' AS DateTime), CAST(N'2020-09-28T16:56:56.650' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (227, 4, 1, CAST(N'2022-04-24T11:57:43.490' AS DateTime), CAST(N'2022-05-08T11:57:43.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (228, 31, 9, CAST(N'2020-10-10T12:06:07.350' AS DateTime), CAST(N'2020-10-24T12:06:07.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (229, 25, 8, CAST(N'2021-03-12T19:50:17.700' AS DateTime), CAST(N'2021-03-26T19:50:17.700' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (230, 32, 9, CAST(N'2022-11-14T14:25:03.220' AS DateTime), CAST(N'2022-11-28T14:25:03.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (231, 23, 7, CAST(N'2022-09-27T09:55:20.140' AS DateTime), CAST(N'2022-10-11T09:55:20.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (232, 9, 3, CAST(N'2020-06-07T11:06:22.490' AS DateTime), CAST(N'2020-06-21T11:06:22.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (233, 10, 3, CAST(N'2022-04-16T14:31:56.250' AS DateTime), CAST(N'2022-04-30T14:31:56.250' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (234, 17, 5, CAST(N'2020-09-25T16:50:19.140' AS DateTime), CAST(N'2020-10-09T16:50:19.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (235, 7, 2, CAST(N'2022-01-11T22:43:31.510' AS DateTime), CAST(N'2022-01-25T22:43:31.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (236, 32, 9, CAST(N'2022-11-10T16:25:14.010' AS DateTime), CAST(N'2022-11-24T16:25:14.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (237, 18, 5, CAST(N'2022-03-02T20:30:11.640' AS DateTime), CAST(N'2022-03-16T20:30:11.640' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (238, 23, 7, CAST(N'2022-01-10T13:01:58.770' AS DateTime), CAST(N'2022-01-24T13:01:58.770' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (239, 12, 4, CAST(N'2020-11-11T10:52:49.450' AS DateTime), CAST(N'2020-11-25T10:52:49.450' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (240, 13, 4, CAST(N'2022-07-14T23:20:41.830' AS DateTime), CAST(N'2022-07-28T23:20:41.830' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (241, 9, 3, CAST(N'2021-04-27T11:53:57.810' AS DateTime), CAST(N'2021-05-11T11:53:57.810' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (242, 35, 10, CAST(N'2020-08-29T00:54:15.310' AS DateTime), CAST(N'2020-09-12T00:54:15.310' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (243, 22, 7, CAST(N'2020-04-02T02:00:18.110' AS DateTime), CAST(N'2020-04-16T02:00:18.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (244, 1, 1, CAST(N'2022-08-14T06:43:26.490' AS DateTime), CAST(N'2022-08-28T06:43:26.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (245, 35, 10, CAST(N'2021-09-29T08:34:35.410' AS DateTime), CAST(N'2021-10-13T08:34:35.410' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (246, 34, 10, CAST(N'2021-06-28T03:57:07.010' AS DateTime), CAST(N'2021-07-12T03:57:07.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (247, 6, 2, CAST(N'2020-12-24T12:39:49.710' AS DateTime), CAST(N'2021-01-07T12:39:49.710' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (248, 28, 8, CAST(N'2021-03-21T04:44:19.140' AS DateTime), CAST(N'2021-04-04T04:44:19.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (249, 4, 1, CAST(N'2022-04-06T11:41:27.400' AS DateTime), CAST(N'2022-04-20T11:41:27.400' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (250, 7, 2, CAST(N'2020-03-07T15:02:14.970' AS DateTime), CAST(N'2020-03-21T15:02:14.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (251, 3, 1, CAST(N'2021-10-29T13:32:08.450' AS DateTime), CAST(N'2021-11-12T13:32:08.450' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (252, 4, 2, CAST(N'2020-04-30T00:31:06.330' AS DateTime), CAST(N'2020-05-14T00:31:06.330' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (253, 26, 8, CAST(N'2021-07-26T14:28:11.740' AS DateTime), CAST(N'2021-08-09T14:28:11.740' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (254, 4, 2, CAST(N'2020-12-17T23:14:28.230' AS DateTime), CAST(N'2020-12-31T23:14:28.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (255, 30, 9, CAST(N'2020-10-27T22:39:02.840' AS DateTime), CAST(N'2020-11-10T22:39:02.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (256, 23, 7, CAST(N'2022-03-14T19:07:57.350' AS DateTime), CAST(N'2022-03-28T19:07:57.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (257, 21, 6, CAST(N'2022-02-03T19:27:37.320' AS DateTime), CAST(N'2022-02-17T19:27:37.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (258, 9, 3, CAST(N'2022-09-13T02:15:56.290' AS DateTime), CAST(N'2022-09-27T02:15:56.290' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (259, 30, 9, CAST(N'2020-04-21T06:12:21.920' AS DateTime), CAST(N'2020-05-05T06:12:21.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (260, 31, 9, CAST(N'2020-08-02T07:19:20.960' AS DateTime), CAST(N'2020-08-16T07:19:20.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (261, 16, 5, CAST(N'2020-08-07T03:53:26.920' AS DateTime), CAST(N'2020-08-21T03:53:26.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (262, 32, 10, CAST(N'2022-04-05T07:29:28.920' AS DateTime), CAST(N'2022-04-19T07:29:28.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (263, 29, 9, CAST(N'2022-03-05T02:42:11.610' AS DateTime), CAST(N'2022-03-19T02:42:11.610' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (264, 17, 5, CAST(N'2020-01-12T02:39:21.130' AS DateTime), CAST(N'2020-01-26T02:39:21.130' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (265, 12, 4, CAST(N'2021-06-21T08:32:53.030' AS DateTime), CAST(N'2021-07-05T08:32:53.030' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (266, 28, 8, CAST(N'2020-04-01T18:28:16.930' AS DateTime), CAST(N'2020-04-15T18:28:16.930' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (267, 15, 5, CAST(N'2021-02-05T22:33:35.230' AS DateTime), CAST(N'2021-02-19T22:33:35.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (268, 23, 7, CAST(N'2021-05-30T22:18:44.480' AS DateTime), CAST(N'2021-06-13T22:18:44.480' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (269, 35, 10, CAST(N'2020-10-24T14:38:49.270' AS DateTime), CAST(N'2020-11-07T14:38:49.270' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (270, 22, 7, CAST(N'2020-04-09T03:01:47.790' AS DateTime), CAST(N'2020-04-23T03:01:47.790' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (271, 4, 1, CAST(N'2022-12-06T08:59:14.510' AS DateTime), CAST(N'2022-12-20T08:59:14.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (272, 22, 7, CAST(N'2021-08-28T02:44:16.590' AS DateTime), CAST(N'2021-09-11T02:44:16.590' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (273, 35, 10, CAST(N'2022-09-18T19:11:38.340' AS DateTime), CAST(N'2022-10-02T19:11:38.340' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (274, 31, 9, CAST(N'2022-06-05T16:35:57.500' AS DateTime), CAST(N'2022-06-19T16:35:57.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (275, 19, 6, CAST(N'2021-09-28T02:26:47.740' AS DateTime), CAST(N'2021-10-12T02:26:47.740' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (276, 5, 2, CAST(N'2021-01-03T05:23:00.440' AS DateTime), CAST(N'2021-01-17T05:23:00.440' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (277, 1, 1, CAST(N'2020-09-13T12:26:13.080' AS DateTime), CAST(N'2020-09-27T12:26:13.080' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (278, 20, 6, CAST(N'2022-09-28T04:14:46.410' AS DateTime), CAST(N'2022-10-12T04:14:46.410' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (279, 24, 7, CAST(N'2021-03-06T10:10:12.730' AS DateTime), CAST(N'2021-03-20T10:10:12.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (280, 14, 4, CAST(N'2022-09-04T05:49:15.700' AS DateTime), CAST(N'2022-09-18T05:49:15.700' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (281, 31, 9, CAST(N'2022-09-21T04:17:06.940' AS DateTime), CAST(N'2022-10-05T04:17:06.940' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (282, 12, 4, CAST(N'2021-02-03T07:13:24.340' AS DateTime), CAST(N'2021-02-17T07:13:24.340' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (283, 28, 8, CAST(N'2021-07-06T00:24:39.960' AS DateTime), CAST(N'2021-07-20T00:24:39.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (284, 19, 6, CAST(N'2021-01-05T04:48:02.720' AS DateTime), CAST(N'2021-01-19T04:48:02.720' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (285, 30, 9, CAST(N'2021-01-16T00:52:54.760' AS DateTime), CAST(N'2021-01-30T00:52:54.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (286, 19, 6, CAST(N'2022-05-30T09:24:13.810' AS DateTime), CAST(N'2022-06-13T09:24:13.810' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (287, 19, 6, CAST(N'2021-11-11T20:38:10.750' AS DateTime), CAST(N'2021-11-25T20:38:10.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (288, 6, 2, CAST(N'2021-04-29T15:17:28.010' AS DateTime), CAST(N'2021-05-13T15:17:28.010' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (289, 23, 7, CAST(N'2022-11-28T18:11:16.300' AS DateTime), CAST(N'2022-12-12T18:11:16.300' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (290, 20, 6, CAST(N'2022-10-30T03:35:34.170' AS DateTime), CAST(N'2022-11-13T03:35:34.170' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (291, 12, 4, CAST(N'2020-10-06T20:57:36.690' AS DateTime), CAST(N'2020-10-20T20:57:36.690' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (292, 9, 3, CAST(N'2022-06-19T18:14:15.360' AS DateTime), CAST(N'2022-07-03T18:14:15.360' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (293, 29, 9, CAST(N'2021-09-21T06:49:36.840' AS DateTime), CAST(N'2021-10-05T06:49:36.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (294, 17, 5, CAST(N'2020-04-11T03:33:28.480' AS DateTime), CAST(N'2020-04-25T03:33:28.480' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (295, 33, 10, CAST(N'2021-12-07T19:27:14.910' AS DateTime), CAST(N'2021-12-21T19:27:14.910' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (296, 12, 4, CAST(N'2022-01-22T04:24:28.900' AS DateTime), CAST(N'2022-02-05T04:24:28.900' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (297, 7, 2, CAST(N'2021-06-25T22:12:03.700' AS DateTime), CAST(N'2021-07-09T22:12:03.700' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (298, 6, 2, CAST(N'2020-03-21T23:20:56.970' AS DateTime), CAST(N'2020-04-04T23:20:56.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (299, 24, 7, CAST(N'2021-02-22T22:10:33.450' AS DateTime), CAST(N'2021-03-08T22:10:33.450' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (300, 8, 3, CAST(N'2021-06-29T14:06:18.480' AS DateTime), CAST(N'2021-07-13T14:06:18.480' AS DateTime));
+
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (301, 19, 6, CAST(N'2020-05-22T05:23:31.780' AS DateTime), CAST(N'2020-06-05T05:23:31.780' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (302, 18, 6, CAST(N'2022-07-26T14:21:05.230' AS DateTime), CAST(N'2022-08-09T14:21:05.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (303, 28, 8, CAST(N'2020-05-27T14:05:29.870' AS DateTime), CAST(N'2020-06-10T14:05:29.870' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (304, 17, 5, CAST(N'2021-12-28T08:39:39.610' AS DateTime), CAST(N'2022-01-11T08:39:39.610' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (305, 4, 2, CAST(N'2020-04-01T06:03:00.460' AS DateTime), CAST(N'2020-04-15T06:03:00.460' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (306, 16, 5, CAST(N'2020-03-03T10:47:51.850' AS DateTime), CAST(N'2020-03-17T10:47:51.850' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (307, 5, 2, CAST(N'2020-08-11T05:19:27.990' AS DateTime), CAST(N'2020-08-25T05:19:27.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (308, 31, 9, CAST(N'2022-02-19T21:52:14.250' AS DateTime), CAST(N'2022-03-05T21:52:14.250' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (309, 20, 6, CAST(N'2022-03-21T20:47:40.500' AS DateTime), CAST(N'2022-04-04T20:47:40.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (310, 25, 8, CAST(N'2022-10-24T17:16:02.410' AS DateTime), CAST(N'2022-11-07T17:16:02.410' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (311, 23, 7, CAST(N'2021-07-01T06:41:44.260' AS DateTime), CAST(N'2021-07-15T06:41:44.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (312, 1, 1, CAST(N'2022-05-08T15:12:50.920' AS DateTime), CAST(N'2022-05-22T15:12:50.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (313, 20, 6, CAST(N'2021-07-09T16:05:43.550' AS DateTime), CAST(N'2021-07-23T16:05:43.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (314, 17, 5, CAST(N'2020-08-17T00:23:06.230' AS DateTime), CAST(N'2020-08-31T00:23:06.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (315, 35, 10, CAST(N'2020-11-11T03:02:14.020' AS DateTime), CAST(N'2020-11-25T03:02:14.020' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (316, 5, 2, CAST(N'2022-07-03T20:40:02.580' AS DateTime), CAST(N'2022-07-17T20:40:02.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (317, 5, 2, CAST(N'2020-09-30T07:04:48.950' AS DateTime), CAST(N'2020-10-14T07:04:48.950' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (318, 10, 3, CAST(N'2021-02-27T21:54:08.880' AS DateTime), CAST(N'2021-03-13T21:54:08.880' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (319, 23, 7, CAST(N'2021-12-26T01:46:26.380' AS DateTime), CAST(N'2022-01-09T01:46:26.380' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (320, 28, 8, CAST(N'2022-01-21T23:08:39.220' AS DateTime), CAST(N'2022-02-04T23:08:39.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (321, 9, 3, CAST(N'2021-05-20T21:50:06.190' AS DateTime), CAST(N'2021-06-03T21:50:06.190' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (322, 10, 3, CAST(N'2022-10-09T07:16:07.220' AS DateTime), CAST(N'2022-10-23T07:16:07.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (323, 1, 1, CAST(N'2021-07-02T04:07:28.190' AS DateTime), CAST(N'2021-07-16T04:07:28.190' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (324, 16, 5, CAST(N'2020-12-25T11:03:15.110' AS DateTime), CAST(N'2021-01-08T11:03:15.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (325, 11, 3, CAST(N'2022-07-03T06:04:11.100' AS DateTime), CAST(N'2022-07-17T06:04:11.100' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (326, 30, 9, CAST(N'2020-06-18T14:44:59.150' AS DateTime), CAST(N'2020-07-02T14:44:59.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (327, 29, 9, CAST(N'2022-12-06T19:54:39.760' AS DateTime), CAST(N'2022-12-20T19:54:39.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (328, 19, 6, CAST(N'2022-06-09T15:38:09.860' AS DateTime), CAST(N'2022-06-23T15:38:09.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (329, 34, 10, CAST(N'2020-06-28T21:08:42.580' AS DateTime), CAST(N'2020-07-12T21:08:42.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (330, 8, 3, CAST(N'2022-09-05T22:02:18.850' AS DateTime), CAST(N'2022-09-19T22:02:18.850' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (331, 34, 10, CAST(N'2022-07-10T07:10:56.740' AS DateTime), CAST(N'2022-07-24T07:10:56.740' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (332, 30, 9, CAST(N'2020-06-24T13:05:16.110' AS DateTime), CAST(N'2020-07-08T13:05:16.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (333, 32, 9, CAST(N'2021-08-05T06:04:12.960' AS DateTime), CAST(N'2021-08-19T06:04:12.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (334, 17, 5, CAST(N'2022-09-06T20:03:54.260' AS DateTime), CAST(N'2022-09-20T20:03:54.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (335, 30, 9, CAST(N'2022-04-15T00:25:43.920' AS DateTime), CAST(N'2022-04-29T00:25:43.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (336, 13, 4, CAST(N'2020-02-26T13:56:01.710' AS DateTime), CAST(N'2020-03-11T13:56:01.710' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (337, 20, 6, CAST(N'2020-09-08T17:07:54.470' AS DateTime), CAST(N'2020-09-22T17:07:54.470' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (338, 11, 4, CAST(N'2022-07-08T15:45:00.360' AS DateTime), CAST(N'2022-07-22T15:45:00.360' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (339, 15, 5, CAST(N'2020-10-05T22:45:02.250' AS DateTime), CAST(N'2020-10-19T22:45:02.250' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (340, 14, 4, CAST(N'2020-11-14T14:05:02.910' AS DateTime), CAST(N'2020-11-28T14:05:02.910' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (341, 15, 5, CAST(N'2021-10-19T04:04:45.820' AS DateTime), CAST(N'2021-11-02T04:04:45.820' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (342, 24, 7, CAST(N'2022-09-21T22:45:56.500' AS DateTime), CAST(N'2022-10-05T22:45:56.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (343, 22, 7, CAST(N'2022-02-07T18:29:47.520' AS DateTime), CAST(N'2022-02-21T18:29:47.520' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (344, 33, 10, CAST(N'2020-02-05T00:55:13.890' AS DateTime), CAST(N'2020-02-19T00:55:13.890' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (345, 32, 10, CAST(N'2021-04-30T20:53:49.900' AS DateTime), CAST(N'2021-05-14T20:53:49.900' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (346, 11, 3, CAST(N'2021-05-31T05:44:45.780' AS DateTime), CAST(N'2021-06-14T05:44:45.780' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (347, 24, 7, CAST(N'2020-12-11T02:08:31.800' AS DateTime), CAST(N'2020-12-25T02:08:31.800' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (348, 12, 4, CAST(N'2021-02-04T06:26:30.610' AS DateTime), CAST(N'2021-02-18T06:26:30.610' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (349, 17, 5, CAST(N'2022-05-31T00:31:14.470' AS DateTime), CAST(N'2022-06-14T00:31:14.470' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (350, 28, 8, CAST(N'2022-06-05T22:47:12.330' AS DateTime), CAST(N'2022-06-19T22:47:12.330' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (351, 8, 3, CAST(N'2021-04-23T21:19:39.940' AS DateTime), CAST(N'2021-05-07T21:19:39.940' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (352, 32, 10, CAST(N'2020-04-28T00:17:54.810' AS DateTime), CAST(N'2020-05-12T00:17:54.810' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (353, 19, 6, CAST(N'2021-03-26T21:34:30.600' AS DateTime), CAST(N'2021-04-09T21:34:30.600' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (354, 31, 9, CAST(N'2022-01-31T23:01:54.230' AS DateTime), CAST(N'2022-02-14T23:01:54.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (355, 34, 10, CAST(N'2020-02-09T16:16:12.290' AS DateTime), CAST(N'2020-02-23T16:16:12.290' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (356, 10, 3, CAST(N'2020-08-12T22:07:24.560' AS DateTime), CAST(N'2020-08-26T22:07:24.560' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (357, 18, 5, CAST(N'2021-01-24T10:13:37.040' AS DateTime), CAST(N'2021-02-07T10:13:37.040' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (358, 12, 4, CAST(N'2022-06-02T03:02:14.760' AS DateTime), CAST(N'2022-06-16T03:02:14.760' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (359, 7, 2, CAST(N'2022-06-27T02:35:28.510' AS DateTime), CAST(N'2022-07-11T02:35:28.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (360, 10, 3, CAST(N'2022-10-13T15:18:01.320' AS DateTime), CAST(N'2022-10-27T15:18:01.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (361, 22, 7, CAST(N'2020-03-27T14:53:12.100' AS DateTime), CAST(N'2020-04-10T14:53:12.100' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (362, 21, 6, CAST(N'2021-03-03T13:41:18.140' AS DateTime), CAST(N'2021-03-17T13:41:18.140' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (363, 32, 10, CAST(N'2021-08-24T00:43:31.660' AS DateTime), CAST(N'2021-09-07T00:43:31.660' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (364, 13, 4, CAST(N'2022-07-15T22:45:21.660' AS DateTime), CAST(N'2022-07-29T22:45:21.660' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (365, 27, 8, CAST(N'2020-04-16T10:05:05.660' AS DateTime), CAST(N'2020-04-30T10:05:05.660' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (366, 28, 8, CAST(N'2021-01-06T17:36:28.150' AS DateTime), CAST(N'2021-01-20T17:36:28.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (367, 5, 2, CAST(N'2020-10-03T09:08:37.960' AS DateTime), CAST(N'2020-10-17T09:08:37.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (368, 4, 2, CAST(N'2021-11-01T20:01:49.300' AS DateTime), CAST(N'2021-11-15T20:01:49.300' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (369, 22, 7, CAST(N'2021-05-03T23:57:22.320' AS DateTime), CAST(N'2021-05-17T23:57:22.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (370, 23, 7, CAST(N'2020-09-15T13:06:12.310' AS DateTime), CAST(N'2020-09-29T13:06:12.310' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (371, 20, 6, CAST(N'2021-10-25T03:32:08.110' AS DateTime), CAST(N'2021-11-08T03:32:08.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (372, 29, 9, CAST(N'2021-03-24T15:19:48.600' AS DateTime), CAST(N'2021-04-07T15:19:48.600' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (373, 31, 9, CAST(N'2020-05-24T23:09:06.630' AS DateTime), CAST(N'2020-06-07T23:09:06.630' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (374, 9, 3, CAST(N'2021-02-10T11:41:23.460' AS DateTime), CAST(N'2021-02-24T11:41:23.460' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (375, 14, 4, CAST(N'2020-04-04T19:03:53.400' AS DateTime), CAST(N'2020-04-18T19:03:53.400' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (376, 21, 6, CAST(N'2021-08-28T23:04:09.690' AS DateTime), CAST(N'2021-09-11T23:04:09.690' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (377, 24, 7, CAST(N'2020-08-31T12:46:19.700' AS DateTime), CAST(N'2020-09-14T12:46:19.700' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (378, 3, 1, CAST(N'2021-05-28T03:12:14.300' AS DateTime), CAST(N'2021-06-11T03:12:14.300' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (379, 19, 6, CAST(N'2022-08-26T14:09:25.210' AS DateTime), CAST(N'2022-09-09T14:09:25.210' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (380, 35, 10, CAST(N'2021-02-02T00:19:25.320' AS DateTime), CAST(N'2021-02-16T00:19:25.320' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (381, 6, 2, CAST(N'2022-07-08T12:36:27.360' AS DateTime), CAST(N'2022-07-22T12:36:27.360' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (382, 17, 5, CAST(N'2021-11-01T13:28:09.150' AS DateTime), CAST(N'2021-11-15T13:28:09.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (383, 3, 1, CAST(N'2020-01-10T15:06:55.380' AS DateTime), CAST(N'2020-01-24T15:06:55.380' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (384, 6, 2, CAST(N'2021-01-22T22:21:30.260' AS DateTime), CAST(N'2021-02-05T22:21:30.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (385, 35, 10, CAST(N'2021-05-15T00:42:38.900' AS DateTime), CAST(N'2021-05-29T00:42:38.900' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (386, 2, 1, CAST(N'2022-03-14T06:53:01.930' AS DateTime), CAST(N'2022-03-28T06:53:01.930' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (387, 12, 4, CAST(N'2022-03-30T15:30:45.510' AS DateTime), CAST(N'2022-04-13T15:30:45.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (388, 2, 1, CAST(N'2022-07-04T07:02:18.730' AS DateTime), CAST(N'2022-07-18T07:02:18.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (389, 19, 6, CAST(N'2022-07-29T03:47:41.960' AS DateTime), CAST(N'2022-08-12T03:47:41.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (390, 21, 6, CAST(N'2021-09-02T02:18:19.350' AS DateTime), CAST(N'2021-09-16T02:18:19.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (391, 31, 9, CAST(N'2022-02-01T03:42:24.670' AS DateTime), CAST(N'2022-02-15T03:42:24.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (392, 8, 3, CAST(N'2021-04-08T14:05:39.710' AS DateTime), CAST(N'2021-04-22T14:05:39.710' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (393, 5, 2, CAST(N'2020-01-12T13:09:31.840' AS DateTime), CAST(N'2020-01-26T13:09:31.840' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (394, 6, 2, CAST(N'2020-12-23T07:27:00.940' AS DateTime), CAST(N'2021-01-06T07:27:00.940' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (395, 28, 8, CAST(N'2020-08-19T23:11:50.810' AS DateTime), CAST(N'2020-09-02T23:11:50.810' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (396, 30, 9, CAST(N'2020-08-17T14:23:27.680' AS DateTime), CAST(N'2020-08-31T14:23:27.680' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (397, 27, 8, CAST(N'2021-01-28T22:02:24.830' AS DateTime), CAST(N'2021-02-11T22:02:24.830' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (398, 9, 3, CAST(N'2022-07-25T19:44:25.870' AS DateTime), CAST(N'2022-08-08T19:44:25.870' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (399, 7, 2, CAST(N'2022-10-20T14:50:08.230' AS DateTime), CAST(N'2022-11-03T14:50:08.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (400, 5, 2, CAST(N'2020-04-24T03:17:21.750' AS DateTime), CAST(N'2020-05-08T03:17:21.750' AS DateTime));
+
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (401, 7, 2, CAST(N'2020-08-27T20:36:07.810' AS DateTime), CAST(N'2020-09-10T20:36:07.810' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (402, 21, 6, CAST(N'2022-02-08T06:06:42.510' AS DateTime), CAST(N'2022-02-22T06:06:42.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (403, 26, 8, CAST(N'2022-10-03T06:29:08.290' AS DateTime), CAST(N'2022-10-17T06:29:08.290' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (404, 30, 9, CAST(N'2021-09-14T11:25:02.150' AS DateTime), CAST(N'2021-09-28T11:25:02.150' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (405, 9, 3, CAST(N'2020-08-11T19:15:04.220' AS DateTime), CAST(N'2020-08-25T19:15:04.220' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (406, 15, 5, CAST(N'2020-01-31T05:59:51.340' AS DateTime), CAST(N'2020-02-14T05:59:51.340' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (407, 2, 1, CAST(N'2022-12-04T01:08:48.190' AS DateTime), CAST(N'2022-12-18T01:08:48.190' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (408, 10, 3, CAST(N'2020-02-14T09:53:07.130' AS DateTime), CAST(N'2020-02-28T09:53:07.130' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (409, 17, 5, CAST(N'2021-10-29T03:58:00.830' AS DateTime), CAST(N'2021-11-12T03:58:00.830' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (410, 13, 4, CAST(N'2021-06-12T17:12:02.610' AS DateTime), CAST(N'2021-06-26T17:12:02.610' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (411, 22, 7, CAST(N'2022-12-12T09:21:04.860' AS DateTime), CAST(N'2022-12-26T09:21:04.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (412, 15, 5, CAST(N'2022-08-29T07:01:22.750' AS DateTime), CAST(N'2022-09-12T07:01:22.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (413, 28, 8, CAST(N'2022-10-06T12:52:49.560' AS DateTime), CAST(N'2022-10-20T12:52:49.560' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (414, 7, 2, CAST(N'2021-05-25T02:16:03.180' AS DateTime), CAST(N'2021-06-08T02:16:03.180' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (415, 4, 2, CAST(N'2020-04-07T02:41:33.960' AS DateTime), CAST(N'2020-04-21T02:41:33.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (416, 5, 2, CAST(N'2021-05-26T01:25:02.960' AS DateTime), CAST(N'2021-06-09T01:25:02.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (417, 19, 6, CAST(N'2021-02-21T22:34:22.750' AS DateTime), CAST(N'2021-03-07T22:34:22.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (418, 27, 8, CAST(N'2020-08-01T02:22:01.400' AS DateTime), CAST(N'2020-08-15T02:22:01.400' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (419, 14, 4, CAST(N'2021-03-02T22:02:42.750' AS DateTime), CAST(N'2021-03-16T22:02:42.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (420, 26, 8, CAST(N'2021-02-02T03:12:03.730' AS DateTime), CAST(N'2021-02-16T03:12:03.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (421, 16, 5, CAST(N'2021-10-09T02:05:42.640' AS DateTime), CAST(N'2021-10-23T02:05:42.640' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (422, 3, 1, CAST(N'2021-04-01T02:06:19.230' AS DateTime), CAST(N'2021-04-15T02:06:19.230' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (423, 21, 6, CAST(N'2022-04-05T16:14:07.340' AS DateTime), CAST(N'2022-04-19T16:14:07.340' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (424, 2, 1, CAST(N'2022-08-31T21:39:02.970' AS DateTime), CAST(N'2022-09-14T21:39:02.970' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (425, 28, 8, CAST(N'2021-08-14T09:23:47.640' AS DateTime), CAST(N'2021-08-28T09:23:47.640' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (426, 13, 4, CAST(N'2020-07-18T13:26:28.390' AS DateTime), CAST(N'2020-08-01T13:26:28.390' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (427, 25, 7, CAST(N'2021-03-13T02:10:16.750' AS DateTime), CAST(N'2021-03-27T02:10:16.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (428, 25, 8, CAST(N'2022-06-01T15:42:05.690' AS DateTime), CAST(N'2022-06-15T15:42:05.690' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (429, 17, 5, CAST(N'2020-06-23T12:29:32.650' AS DateTime), CAST(N'2020-07-07T12:29:32.650' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (430, 20, 6, CAST(N'2022-08-18T04:40:25.720' AS DateTime), CAST(N'2022-09-01T04:40:25.720' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (431, 30, 9, CAST(N'2020-07-31T01:01:44.850' AS DateTime), CAST(N'2020-08-14T01:01:44.850' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (432, 15, 5, CAST(N'2021-02-05T17:01:53.830' AS DateTime), CAST(N'2021-02-19T17:01:53.830' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (433, 32, 10, CAST(N'2021-08-07T12:22:06.070' AS DateTime), CAST(N'2021-08-21T12:22:06.070' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (434, 15, 5, CAST(N'2022-05-04T10:52:03.450' AS DateTime), CAST(N'2022-05-18T10:52:03.450' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (435, 29, 9, CAST(N'2020-06-07T03:43:17.500' AS DateTime), CAST(N'2020-06-21T03:43:17.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (436, 21, 6, CAST(N'2020-05-30T06:29:44.850' AS DateTime), CAST(N'2020-06-13T06:29:44.850' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (437, 27, 8, CAST(N'2022-01-29T06:59:00.860' AS DateTime), CAST(N'2022-02-12T06:59:00.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (438, 9, 3, CAST(N'2021-04-27T03:41:53.240' AS DateTime), CAST(N'2021-05-11T03:41:53.240' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (439, 33, 10, CAST(N'2020-06-13T03:06:26.030' AS DateTime), CAST(N'2020-06-27T03:06:26.030' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (440, 21, 6, CAST(N'2021-04-14T18:42:47.550' AS DateTime), CAST(N'2021-04-28T18:42:47.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (441, 35, 10, CAST(N'2022-04-10T05:44:13.750' AS DateTime), CAST(N'2022-04-24T05:44:13.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (442, 2, 1, CAST(N'2022-02-14T05:37:38.370' AS DateTime), CAST(N'2022-02-28T05:37:38.370' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (443, 20, 6, CAST(N'2020-09-05T03:04:17.890' AS DateTime), CAST(N'2020-09-19T03:04:17.890' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (444, 6, 2, CAST(N'2021-02-15T10:35:39.350' AS DateTime), CAST(N'2021-03-01T10:35:39.350' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (445, 34, 10, CAST(N'2021-09-20T16:57:14.500' AS DateTime), CAST(N'2021-10-04T16:57:14.500' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (446, 16, 5, CAST(N'2022-06-04T20:41:01.930' AS DateTime), CAST(N'2022-06-18T20:41:01.930' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (447, 16, 5, CAST(N'2021-07-03T01:12:50.160' AS DateTime), CAST(N'2021-07-17T01:12:50.160' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (448, 33, 10, CAST(N'2021-08-19T10:53:28.670' AS DateTime), CAST(N'2021-09-02T10:53:28.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (449, 2, 1, CAST(N'2020-09-17T04:45:26.980' AS DateTime), CAST(N'2020-10-01T04:45:26.980' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (450, 23, 7, CAST(N'2022-03-26T21:46:47.860' AS DateTime), CAST(N'2022-04-09T21:46:47.860' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (451, 11, 4, CAST(N'2022-06-25T15:49:04.940' AS DateTime), CAST(N'2022-07-09T15:49:04.940' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (452, 35, 10, CAST(N'2020-06-29T19:40:23.430' AS DateTime), CAST(N'2020-07-13T19:40:23.430' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (453, 31, 9, CAST(N'2021-05-24T21:41:43.110' AS DateTime), CAST(N'2021-06-07T21:41:43.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (454, 16, 5, CAST(N'2021-09-17T11:38:04.490' AS DateTime), CAST(N'2021-10-01T11:38:04.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (455, 24, 7, CAST(N'2021-07-16T01:11:39.110' AS DateTime), CAST(N'2021-07-30T01:11:39.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (456, 4, 1, CAST(N'2022-05-28T18:29:48.590' AS DateTime), CAST(N'2022-06-11T18:29:48.590' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (457, 35, 10, CAST(N'2022-11-04T13:52:35.170' AS DateTime), CAST(N'2022-11-18T13:52:35.170' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (458, 25, 7, CAST(N'2020-02-02T08:50:05.310' AS DateTime), CAST(N'2020-02-16T08:50:05.310' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (459, 2, 1, CAST(N'2020-02-01T02:01:14.510' AS DateTime), CAST(N'2020-02-15T02:01:14.510' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (460, 31, 9, CAST(N'2020-01-25T05:48:35.830' AS DateTime), CAST(N'2020-02-08T05:48:35.830' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (461, 25, 8, CAST(N'2021-11-19T03:49:34.600' AS DateTime), CAST(N'2021-12-03T03:49:34.600' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (462, 12, 4, CAST(N'2020-07-04T09:26:42.490' AS DateTime), CAST(N'2020-07-18T09:26:42.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (463, 29, 9, CAST(N'2022-08-22T21:23:34.490' AS DateTime), CAST(N'2022-09-05T21:23:34.490' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (464, 33, 10, CAST(N'2022-03-12T23:17:35.110' AS DateTime), CAST(N'2022-03-26T23:17:35.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (465, 19, 6, CAST(N'2020-11-12T16:10:17.750' AS DateTime), CAST(N'2020-11-26T16:10:17.750' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (466, 7, 2, CAST(N'2021-11-05T16:19:11.030' AS DateTime), CAST(N'2021-11-19T16:19:11.030' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (467, 18, 6, CAST(N'2021-01-21T18:39:16.670' AS DateTime), CAST(N'2021-02-04T18:39:16.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (468, 14, 4, CAST(N'2020-06-04T02:00:46.100' AS DateTime), CAST(N'2020-06-18T02:00:46.100' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (469, 14, 4, CAST(N'2020-12-17T22:32:45.670' AS DateTime), CAST(N'2020-12-31T22:32:45.670' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (470, 19, 6, CAST(N'2022-11-07T20:11:49.110' AS DateTime), CAST(N'2022-11-21T20:11:49.110' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (471, 14, 4, CAST(N'2022-04-26T18:26:02.100' AS DateTime), CAST(N'2022-05-10T18:26:02.100' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (472, 11, 3, CAST(N'2022-10-27T18:52:29.520' AS DateTime), CAST(N'2022-11-10T18:52:29.520' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (473, 30, 9, CAST(N'2020-02-18T23:15:35.370' AS DateTime), CAST(N'2020-03-03T23:15:35.370' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (474, 28, 8, CAST(N'2022-11-18T03:19:55.200' AS DateTime), CAST(N'2022-12-02T03:19:55.200' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (475, 26, 8, CAST(N'2021-10-24T21:27:49.990' AS DateTime), CAST(N'2021-11-07T21:27:49.990' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (476, 15, 5, CAST(N'2022-08-24T20:28:04.280' AS DateTime), CAST(N'2022-09-07T20:28:04.280' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (477, 19, 6, CAST(N'2020-07-26T23:02:01.330' AS DateTime), CAST(N'2020-08-09T23:02:01.330' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (478, 15, 5, CAST(N'2021-02-18T05:38:27.980' AS DateTime), CAST(N'2021-03-04T05:38:27.980' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (479, 3, 1, CAST(N'2020-12-11T04:41:48.470' AS DateTime), CAST(N'2020-12-25T04:41:48.470' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (480, 12, 4, CAST(N'2022-03-11T12:42:45.720' AS DateTime), CAST(N'2022-03-25T12:42:45.720' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (481, 33, 10, CAST(N'2022-01-15T12:13:38.240' AS DateTime), CAST(N'2022-01-29T12:13:38.240' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (482, 28, 8, CAST(N'2022-07-24T15:16:48.080' AS DateTime), CAST(N'2022-08-07T15:16:48.080' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (483, 23, 7, CAST(N'2021-09-14T10:56:38.710' AS DateTime), CAST(N'2021-09-28T10:56:38.710' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (484, 29, 9, CAST(N'2021-03-29T14:42:44.800' AS DateTime), CAST(N'2021-04-12T14:42:44.800' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (485, 9, 3, CAST(N'2020-02-23T12:51:20.780' AS DateTime), CAST(N'2020-03-08T12:51:20.780' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (486, 30, 9, CAST(N'2020-02-01T05:21:21.420' AS DateTime), CAST(N'2020-02-15T05:21:21.420' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (487, 20, 6, CAST(N'2022-09-13T19:20:10.720' AS DateTime), CAST(N'2022-09-27T19:20:10.720' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (488, 16, 5, CAST(N'2022-11-20T00:44:01.580' AS DateTime), CAST(N'2022-12-04T00:44:01.580' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (489, 26, 8, CAST(N'2020-10-19T09:40:24.340' AS DateTime), CAST(N'2020-11-02T09:40:24.340' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (490, 26, 8, CAST(N'2021-01-09T09:13:28.920' AS DateTime), CAST(N'2021-01-23T09:13:28.920' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (491, 21, 6, CAST(N'2020-07-25T16:37:09.680' AS DateTime), CAST(N'2020-08-08T16:37:09.680' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (492, 3, 1, CAST(N'2021-12-27T22:08:55.550' AS DateTime), CAST(N'2022-01-10T22:08:55.550' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (493, 7, 2, CAST(N'2021-03-27T01:40:38.730' AS DateTime), CAST(N'2021-04-10T01:40:38.730' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (494, 2, 1, CAST(N'2020-05-19T21:17:50.200' AS DateTime), CAST(N'2020-06-02T21:17:50.200' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (495, 31, 9, CAST(N'2022-05-26T14:53:12.960' AS DateTime), CAST(N'2022-06-09T14:53:12.960' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (496, 23, 7, CAST(N'2021-10-06T20:17:31.260' AS DateTime), CAST(N'2021-10-20T20:17:31.260' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (497, 9, 3, CAST(N'2022-06-24T08:14:03.890' AS DateTime), CAST(N'2022-07-08T08:14:03.890' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (498, 22, 7, CAST(N'2021-06-25T03:46:42.790' AS DateTime), CAST(N'2021-07-09T03:46:42.790' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (499, 23, 7, CAST(N'2020-04-04T18:25:21.600' AS DateTime), CAST(N'2020-04-18T18:25:21.600' AS DateTime));
+INSERT BorrowersRecords (borrowers_ID, member_ID, staff_ID, borrowers_dateborrowed, borrowers_duereturndate) VALUES (500, 28, 8, CAST(N'2022-11-15T00:38:03.470' AS DateTime), CAST(N'2022-11-29T00:38:03.470' AS DateTime));
+
diff --git a/StartUpChallenge/Data/LibraryStaff.sql b/StartUpChallenge/Data/LibraryStaff.sql
new file mode 100644
index 0000000..e171cca
--- /dev/null
+++ b/StartUpChallenge/Data/LibraryStaff.sql
@@ -0,0 +1,10 @@
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (1, N'Jeanine', N'Abbott', N'060-357-0479', N'hjgqk.xthwdgqbuw@qyzcwfj.wtwdul.net', N'L2G2A7K041MTRCP7HEQS75FZU864J8E6H6VB20YYKD8Z2YQTLTK9LDYGNH820FHWMGCLGD5HGS7TWFWVHCJPN5L38FOLSWX4WCDMM5C7O2SS54J7KDKOVR8GU8D1PJP', N'VSNI5N25HREIA1BM', N'Admin');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (2, N'Lester', N'Lam', N'3237875959', N'mjvj71@qsslscnk.rhhika.org', N'V3XK298CZC1LDSY3VG0EB9843WRDSBH4D7X27Z5A48OJQN31A959JA9LUSG5IUJO', N'F4WFBS2H3SECLOLIJW5Q6IPUXCIYBRXPY0ZSK8K0L12UN', N'Admin');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (3, N'Claire', N'Cowan', N'834-6660209', N'exdbrlv.aaejewqr@vj-tpj.org', N'W75VVWWBQA3LOEGTP3I58L2Y', N'W3T0R46VXX', N'FrontDesk');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (4, N'Shannon', N'Bentley', N'276-6711926', N'neakizbq19@wibn.unlrrw.com', N'7EIZS9OZPUFX6ED9XSZ505D0CSR1ILA46JNIECX0ELZK0WJO4WBS2SB20IM0INH4JAQNRVULVZRF6TZG82WMAH2E8LHVPXIR3V1Q5', N'2IY946BVOEKPSXAC555GV65GF4AZS', N'Inventory Manager');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (5, N'Valerie', N'Berger', N'398602-6555', N'udenrkh36@gmphop.com', N'X91PX31VV7J6RFQVT', N'221DIQLQGVQZYDBE12GS0QS', N'Inventory Manager');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (6, N'Ty', N'Keith', N'477-732-0140', N'nsrc60@oypgma.net', N'8CF5DZWYG0BBR8AC5NKKKYDCPACI52081ZHTGRV2SZM0KKFAVE93A9HAZ3G3MESEZ39SQHWERISKBCS4U2MQSXXSH7UDBSFE681GAMJEIVBSGXYNBB8KR1L15HBJNI2Z2DE3ABT8I88WL4', N'JWCIUZVC25CINEFKQEO9PW7R40', N'Admin');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (7, N'Roy', N'Finley', N'740031-2445', N'oapmyl.nawjcgblhk@myqhxab.n--nmb.org', N'J9620JUM4N0ATA0RZTCQ2JVCZH02JTOF16R9GG2G7R9GA00XHG838E80DU2IIS2AYK9MJQAJRWIB9F2ZG3K2LL6NYQWMDJXFOYHPQEE', N'8I0ICAKULD3WH0EWT1TRMNW1M1IRNOLDTWMT1M072KT6MI', N'Admin');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (8, N'Ashley', N'Howard', N'026-417-0740', N'hbufgey.dgiwezcpj@jipxjc.com', N'6OCCVWRYR22E70PDDLOSUO57Y3NBXC81PTWW8', N'9AZEPB9HKMZWARS6XSQ3KDLU61LO1UPE4T9HNAV1', N'FrontDesk');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (9, N'Forrest', N'Rich', N'4512570658', N'ahwaet621@actu.wj-xyc.org', N'R1ZXUBHJ7O94C4QLWHJ4DS', N'E262QPG9EVEWFMWP57OQKFQ', N'Admin');
+INSERT LibraryStaff (staff_ID, staff_firstname, staff_lastname, staff_mobilenumber, staff_email, staff_authsalt, staff_password, staff_category) VALUES (10, N'Ron', N'Martin', N'387-859-5665', N'xylwvd.pwggdca@heqpif.net', N'G0FT0PE3S4ITMSWUUQFVZ1SZ4B3XFD3HZSJWFHGTTKG0TA3TZNPEXW9E8FPOLF01UT90FC9M1ELS5T7AYROPJ3I5OZRS7DW10SG9JZ8C5BUUSF', N'KSHI', N'Inventory Manager');
diff --git a/StartUpChallenge/Data/Members.sql b/StartUpChallenge/Data/Members.sql
new file mode 100644
index 0000000..e1aaf55
--- /dev/null
+++ b/StartUpChallenge/Data/Members.sql
@@ -0,0 +1,36 @@
+
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (1, N'Joyce', N'Greer', CAST(N'1956-08-29' AS Date), N'Female', N'080-0270751', N'iogva@dwlauv.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (2, N'Armando', N'Rose', CAST(N'1975-08-14' AS Date), N'Female', N'631-421-6692', N'eqzr4@hgbqkje.gjpnyv.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (3, N'Rick', N'Hendricks', CAST(N'1974-11-30' AS Date), N'Male', N'191593-0218', N'gkss.bxne@zzauto.nulumg.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (4, N'Chadwick', N'Acosta', CAST(N'1982-01-01' AS Date), N'Female', N'378042-8669', N'lmlfuq.cskrifdcfy@hiuujq.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (5, N'Joan', N'Baker', CAST(N'1976-12-15' AS Date), N'Female', N'334-1677071', N'uqfkwlpl@cvybiw.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (6, N'Clifford', N'Underwood', CAST(N'1973-01-10' AS Date), N'Male', N'102-870-6770', N'rjoosvf6@vvjllz.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (7, N'Joe', N'Ibarra', CAST(N'1958-06-02' AS Date), N'Female', N'8247767002', N'prag9@smouljk.rr-fmt.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (8, N'Ted', N'Peck', CAST(N'1967-07-08' AS Date), N'Female', N'0607415202', N'mdhllqja.zihfd@ryegik.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (9, N'Don', N'Lyons', CAST(N'1975-09-29' AS Date), N'Female', N'387-459-3477', N'kuhu.xpcvmraycc@rjbulo.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (10, N'Jasmine', N'Callahan', CAST(N'2001-05-07' AS Date), N'Male', N'877-9714061', N'uvgxds.bvbfjrb@jqdqtw.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (11, N'Neil', N'Lynch', CAST(N'2000-09-30' AS Date), N'Female', N'473825-5755', N'otbwp6@cjfsuvox.ahkzhi.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (12, N'Keri', N'Gaines', CAST(N'1978-06-07' AS Date), N'Male', N'374-746-6728', N'yaxbyeep.plmip@ykzrwid.p-kcts.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (13, N'Everett', N'Lam', CAST(N'1972-04-28' AS Date), N'Male', N'497-607-5228', N'gupegeeb@luss.pjypka.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (14, N'Kimberly', N'Huerta', CAST(N'1976-06-15' AS Date), N'Female', N'115-761-9023', N'ejetm042@ccuexo.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (15, N'Natalie', N'Wilson', CAST(N'1987-10-02' AS Date), N'Male', N'007-5022909', N'fluhsad3@wkav-h.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (16, N'Jocelyn', N'Horton', CAST(N'2000-01-21' AS Date), N'Female', N'5185288849', N'zwzoes.ptsvzlo@w-kbsm.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (17, N'Ricardo', N'Navarro', CAST(N'1992-09-01' AS Date), N'Male', N'5844511859', N'vdsczep.hilgdab@vr-tkv.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (18, N'Marvin', N'Lamb', CAST(N'1959-06-07' AS Date), N'Female', N'851-7268225', N'ehemhjy52@ocwmeg.hs-jly.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (19, N'Yolanda', N'Collins', CAST(N'1956-11-12' AS Date), N'Male', N'763-4530015', N'kbswusa@ynbulvgdh.cfgpzz.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (20, N'Betty', N'Watson', CAST(N'1975-09-09' AS Date), N'Female', N'668-264-3245', N'ubitouh.qyoucmdh@yooevj.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (21, N'Allen', N'Tate', CAST(N'1981-01-12' AS Date), N'Female', N'225-541-2261', N'vlhuspa.rfyh@lqesua.chdsls.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (22, N'Margarita', N'Vance', CAST(N'1998-09-15' AS Date), N'Male', N'7011470235', N'mjun08@tdnm.wylzbo.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (23, N'Liza', N'Woodard', CAST(N'1995-06-03' AS Date), N'Male', N'208747-2588', N'zgbiy.dhscewetbe@zubwf.ght-sd.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (24, N'Randolph', N'Ramos', CAST(N'1975-08-17' AS Date), N'Female', N'002-2188574', N'sugk228@khesfkv.tqwyjv.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (25, N'Edith', N'Campbell', CAST(N'1959-11-30' AS Date), N'Male', N'3152462388', N'hgcoo.ejmrbfpu@kujbpo.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (26, N'Kara', N'Cardenas', CAST(N'1961-06-10' AS Date), N'Female', N'658-091-1186', N'koew.olmx@xwpy-i.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (27, N'Dustin', N'Torres', CAST(N'1997-07-21' AS Date), N'Female', N'262-0935361', N'tnexx@orrmqdhd.mpcpsr.net');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (28, N'Terence', N'Mc Connell', CAST(N'1973-06-21' AS Date), N'Male', N'820265-3002', N'roflchw.wjhynxney@fgsiusvb.cvmbqr.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (29, N'Lewis', N'Wagner', CAST(N'1973-12-23' AS Date), N'Female', N'069618-7239', N'vmku.gxwizsq@lmakw.qikuf-.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (30, N'Carl', N'Harding', CAST(N'1983-09-13' AS Date), N'Male', N'6399116178', N'fivn.lunpulky@jasb.opgnyd.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (31, N'Sylvia', N'Hunter', CAST(N'1978-08-12' AS Date), N'Female', N'080-938-7364', N'zklf0@ybiqzlqk.rzpkeh.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (32, N'Gabriel', N'Zimmerman', CAST(N'1983-02-20' AS Date), N'Female', N'925-9038402', N'qroa.ivnejgjij@aqsjpd.com');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (33, N'Abigail', N'Lowery', CAST(N'1960-07-04' AS Date), N'Female', N'439-8112565', N'lmdjofde@efxzvl.gdcjpx.org');
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (34, N'Clarence', N'Diaz', CAST(N'1957-10-14' AS Date), N'Male', N'556466-0429', NULL);
+INSERT Members (member_ID, member_firstname, member_lastname, member_dateofbirth, member_gender, member_mobile, member_email) VALUES (35, N'Anna', N'Kline', CAST(N'1955-02-22' AS Date), N'Male', N'435-433-7186', N'rhlanyxi.lzzgbeiab@ttpe.iyhbnl.org');
\ No newline at end of file
diff --git a/StartUpChallenge/startUpChallengeScript.sql b/StartUpChallenge/startUpChallengeScript.sql
new file mode 100644
index 0000000000000000000000000000000000000000..5b1e524e18c4cdebf8ecc668c437dfefa8db94dd
GIT binary patch
literal 13328
zcmeHN+in{-5S`Z+=s)PuE`mCCkfIIH2St}uh$W?#jb4mEkZ-YDTQ*j5g8qElbB3Zx
zYQ@#Aw03P-5LUa(C5OYA;o;1X|Ne6zJ!wcq4y7j7GL$j?N4R?OmkjWBD!XzaN0Q(z
zk-z1md?R1WJL&3uOTP7f6_g&ypJ;Q8mTy3{BKv4}B$p^-A18Re2959V{1#8w=w%Pz
z#&QelLw!C*X@Z({EgzuwOK|j2sgYt2)Dx86pj8F6443TfN7<4c`Ck8D;%NtE+xWea
z*OUKOD5**t|32SaIu^=dU%z+IM@#zBkpql=7jGO{Cm6Y{{R`@J(XIhb`e;?hQwQ%Y
zY2s>NMCrCQls3QzTTwz)$YNKYmy^(ja`=_XnKCu9Gh9)AhmaaI%;%1B&AS=ni@Uao
zr;nm-sa@){XuA_n*M0DKD_5|TQ|S3x&Y1#t!C>qXKKD#(I$M9^~6nolpWF
zqA@g)mMVp$|+>~EId0&1;%MI{X
zomf&wZRt0Z{)DRwduqxHJh3m@PD`I!pwd%Y?P~uVcN1yi@wI+FkTY{@b|z(3(xC>i#C
zGFeId(o?KMhMxU81`b`JKbD5rxh&=wdkL+%2+sI?J4vi@W>s+JdE-fl8;klGt{vy`
zSp8BnzlZV}^FM*Fajtiw)N6SuTuI`-lA}kYAjJ##D#Hn8EK73$KWGeo=nu!a+%ClD
z4QSFIzkn}wuDDqi<>Fo%G1y6v?ME1|v2%LDj3bD)1Mo|IY|9VoZR||6GVQrKTEs%O
zOW=!Idb70g%9EW>EiaZE+KXehZ45K39&>TeEgKh~SComvs^!s!
zF{aId6-6p~Q3K@7&I(7wv-q}=Z}=@cE@nn_IzG1EUMRyp{JdL?)sJ3nkH#~#Z(-y;
ztA{*ZTiCmgjAi(8A$6y>H6lKBL=1O9dUrF7Hu~I+5eF-*XRZ7507Fo@e$vJ>h8yIMiRpYYp3$i~J$&GO<6TY<*SkT5}ahfLiAhw6fob
zUGa=^Nbi%bB8;=MGQe&HiD7g|)nB8EA}J9+q?Tu8avT;x<#uYOEuO0gd0wOOV?tx@
z@|*J$WuAtiSME+$)NsC{p=TF(0;rB3zsF9AG#5A}GXGSGSuM<2hX(elc^1R^6C0RU
zehh45$4xyW!t)wUT)cO{bwf{J6gw?sde831o{P9Ijrdx4c-i|W*Y0bC|Ci0pv#sgu
zb#c3L_A{H-)3+UtuzVXaa=UN4VE+AWYL6qG--@G8nBQa6y%+|CIj}SbM4)+nm1|2z
z1La{)K3OkjNpb1b;SJd{o#ok7-u~R`X8O*yBmWHOV?dg`qog-n%ue!B4&}Fswh@;^
z9*YTEKPBV|Irs4{J!9|Fw&HwH{$*R-Lm&`wHY+n1$DnlPEk6on^~kj=M!Wc$m94Sz
kkSJS@Pt`Kg*@3t{%!>Z=TSU4i+CiM={
+ try {
+ let book = await getDbDataService(
+ `SELECT * FROM borrowersrecords WHERE DATE(borrowers_dateborrowed) >= (DATE(NOW()) - INTERVAL 30 DAY) AND DATE(borrowers_dateborrowed) < DATE(NOW())`
+ );
+ errorHandler(res, book);
+ } catch (err) {
+ console.error(`Error while getting books by this author `, err.message);
+ res.status(400).json({ status: 400, message: err });
+ next(err);
+ }
+}
+
+module.exports = {
+ getBooks,
+ postBooks,
+ getBooksByAuthor,
+ getBooksByPublisher,
+ getBookById,
+ deleteBookById,
+ updateBookById,
+ getBorrowedLast30days,
+};
diff --git a/helper.js b/helper.js
new file mode 100644
index 0000000..08d7457
--- /dev/null
+++ b/helper.js
@@ -0,0 +1,15 @@
+function getOffset(currentPage = 1, listPerPage) {
+ return (currentPage - 1) * [listPerPage];
+ }
+
+ function emptyOrRows(rows) {
+ if (!rows) {
+ return [];
+ }
+ return rows;
+ }
+
+ module.exports = {
+ getOffset,
+ emptyOrRows
+ }
\ No newline at end of file
diff --git a/helper/errorHandler.js b/helper/errorHandler.js
new file mode 100644
index 0000000..d6dccd3
--- /dev/null
+++ b/helper/errorHandler.js
@@ -0,0 +1,14 @@
+const errorHandler = (res, data, type) => {
+ if(data.err || data.errno){
+ res.status(400).json({ status: 400, message: data });
+ } else if(data.length === 0){
+ res.status(404).json({ status: 404, message: "Not found" });
+ } else{
+
+ type==="post"? res.status(201).json({ status: 201, data: data }) : res.status(200).json({ status: 200, data: data });
+ }
+};
+
+module.exports = {
+ errorHandler,
+};
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..2ffb999
--- /dev/null
+++ b/index.js
@@ -0,0 +1,28 @@
+const express = require('express')
+const app = express()
+const port = 3000
+const routes = require('./routes')
+
+app.use(express.json());
+app.use(
+ express.urlencoded({
+ extended: true,
+ })
+);
+
+app.get('/', (req, res) => {
+ res.send('Hello World!')
+})
+
+app.use(routes);
+
+app.use((err, req, res, next) => {
+ const statusCode = err.statusCode || 500;
+ console.error(err.message, err.stack);
+ res.status(statusCode).json({ message: err.message });
+ return;
+});
+
+app.listen(port, () => {
+ console.log(`Example app listening on port ${port}`)
+})
diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime
new file mode 100644
index 0000000..0a62a1b
--- /dev/null
+++ b/node_modules/.bin/mime
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mime/cli.js" "$@"
+else
+ exec node "$basedir/../mime/cli.js" "$@"
+fi
diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd
new file mode 100644
index 0000000..54491f1
--- /dev/null
+++ b/node_modules/.bin/mime.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %*
diff --git a/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1
new file mode 100644
index 0000000..2222f40
--- /dev/null
+++ b/node_modules/.bin/mime.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mime/cli.js" $args
+ } else {
+ & "node$exe" "$basedir/../mime/cli.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_modules/.bin/nodemon b/node_modules/.bin/nodemon
new file mode 100644
index 0000000..4d75661
--- /dev/null
+++ b/node_modules/.bin/nodemon
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../nodemon/bin/nodemon.js" "$@"
+else
+ exec node "$basedir/../nodemon/bin/nodemon.js" "$@"
+fi
diff --git a/node_modules/.bin/nodemon.cmd b/node_modules/.bin/nodemon.cmd
new file mode 100644
index 0000000..55acf8a
--- /dev/null
+++ b/node_modules/.bin/nodemon.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nodemon\bin\nodemon.js" %*
diff --git a/node_modules/.bin/nodemon.ps1 b/node_modules/.bin/nodemon.ps1
new file mode 100644
index 0000000..d4e3f5d
--- /dev/null
+++ b/node_modules/.bin/nodemon.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
+ } else {
+ & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_modules/.bin/nodetouch b/node_modules/.bin/nodetouch
new file mode 100644
index 0000000..03f8b4d
--- /dev/null
+++ b/node_modules/.bin/nodetouch
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../touch/bin/nodetouch.js" "$@"
+else
+ exec node "$basedir/../touch/bin/nodetouch.js" "$@"
+fi
diff --git a/node_modules/.bin/nodetouch.cmd b/node_modules/.bin/nodetouch.cmd
new file mode 100644
index 0000000..8298b91
--- /dev/null
+++ b/node_modules/.bin/nodetouch.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\touch\bin\nodetouch.js" %*
diff --git a/node_modules/.bin/nodetouch.ps1 b/node_modules/.bin/nodetouch.ps1
new file mode 100644
index 0000000..5f68b4c
--- /dev/null
+++ b/node_modules/.bin/nodetouch.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args
+ } else {
+ & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_modules/.bin/nopt b/node_modules/.bin/nopt
new file mode 100644
index 0000000..f1ec43b
--- /dev/null
+++ b/node_modules/.bin/nopt
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../nopt/bin/nopt.js" "$@"
+else
+ exec node "$basedir/../nopt/bin/nopt.js" "$@"
+fi
diff --git a/node_modules/.bin/nopt.cmd b/node_modules/.bin/nopt.cmd
new file mode 100644
index 0000000..a7f38b3
--- /dev/null
+++ b/node_modules/.bin/nopt.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nopt\bin\nopt.js" %*
diff --git a/node_modules/.bin/nopt.ps1 b/node_modules/.bin/nopt.ps1
new file mode 100644
index 0000000..9d6ba56
--- /dev/null
+++ b/node_modules/.bin/nopt.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../nopt/bin/nopt.js" $args
+ } else {
+ & "node$exe" "$basedir/../nopt/bin/nopt.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver
new file mode 100644
index 0000000..86cee84
--- /dev/null
+++ b/node_modules/.bin/semver
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../semver/bin/semver" "$@"
+else
+ exec node "$basedir/../semver/bin/semver" "$@"
+fi
diff --git a/node_modules/.bin/semver.cmd b/node_modules/.bin/semver.cmd
new file mode 100644
index 0000000..22d9286
--- /dev/null
+++ b/node_modules/.bin/semver.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver" %*
diff --git a/node_modules/.bin/semver.ps1 b/node_modules/.bin/semver.ps1
new file mode 100644
index 0000000..98c1b09
--- /dev/null
+++ b/node_modules/.bin/semver.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../semver/bin/semver" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../semver/bin/semver" $args
+ } else {
+ & "node$exe" "$basedir/../semver/bin/semver" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
new file mode 100644
index 0000000..802e5c3
--- /dev/null
+++ b/node_modules/.package-lock.json
@@ -0,0 +1,1198 @@
+{
+ "name": "microsoft-shecluded",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+ "dependencies": {
+ "follow-redirects": "^1.14.9",
+ "form-data": "^4.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz",
+ "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/denque": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+ "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.0",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.10.3",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "dependencies": {
+ "is-property": "^1.0.2"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+ "dev": true
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+ },
+ "node_modules/long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/mysql2": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz",
+ "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==",
+ "dependencies": {
+ "denque": "^2.0.1",
+ "generate-function": "^2.3.1",
+ "iconv-lite": "^0.6.3",
+ "long": "^4.0.0",
+ "lru-cache": "^6.0.0",
+ "named-placeholders": "^1.1.2",
+ "seq-queue": "^0.0.5",
+ "sqlstring": "^2.3.2"
+ },
+ "engines": {
+ "node": ">= 8.0"
+ }
+ },
+ "node_modules/mysql2/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/named-placeholders": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
+ "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
+ "dependencies": {
+ "lru-cache": "^4.1.3"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/named-placeholders/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/named-placeholders/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "3.2.10",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz",
+ "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==",
+ "dependencies": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz",
+ "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^3.2.7",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^5.7.1",
+ "simple-update-notifier": "^1.0.7",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
+ },
+ "node_modules/pstree.remy": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
+ "dev": true
+ },
+ "node_modules/qs": {
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/seq-queue": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/simple-update-notifier": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
+ "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
+ "dev": true,
+ "dependencies": {
+ "semver": "~7.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/simple-update-notifier/node_modules/semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+ "dev": true,
+ "dependencies": {
+ "nopt": "~1.0.10"
+ },
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
+ "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+}
diff --git a/node_modules/abbrev/LICENSE b/node_modules/abbrev/LICENSE
new file mode 100644
index 0000000..9bcfa9d
--- /dev/null
+++ b/node_modules/abbrev/LICENSE
@@ -0,0 +1,46 @@
+This software is dual-licensed under the ISC and MIT licenses.
+You may use this software under EITHER of the following licenses.
+
+----------
+
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----------
+
+Copyright Isaac Z. Schlueter and Contributors
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/abbrev/README.md b/node_modules/abbrev/README.md
new file mode 100644
index 0000000..99746fe
--- /dev/null
+++ b/node_modules/abbrev/README.md
@@ -0,0 +1,23 @@
+# abbrev-js
+
+Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).
+
+Usage:
+
+ var abbrev = require("abbrev");
+ abbrev("foo", "fool", "folding", "flop");
+
+ // returns:
+ { fl: 'flop'
+ , flo: 'flop'
+ , flop: 'flop'
+ , fol: 'folding'
+ , fold: 'folding'
+ , foldi: 'folding'
+ , foldin: 'folding'
+ , folding: 'folding'
+ , foo: 'foo'
+ , fool: 'fool'
+ }
+
+This is handy for command-line scripts, or other cases where you want to be able to accept shorthands.
diff --git a/node_modules/abbrev/abbrev.js b/node_modules/abbrev/abbrev.js
new file mode 100644
index 0000000..7b1dc5d
--- /dev/null
+++ b/node_modules/abbrev/abbrev.js
@@ -0,0 +1,61 @@
+module.exports = exports = abbrev.abbrev = abbrev
+
+abbrev.monkeyPatch = monkeyPatch
+
+function monkeyPatch () {
+ Object.defineProperty(Array.prototype, 'abbrev', {
+ value: function () { return abbrev(this) },
+ enumerable: false, configurable: true, writable: true
+ })
+
+ Object.defineProperty(Object.prototype, 'abbrev', {
+ value: function () { return abbrev(Object.keys(this)) },
+ enumerable: false, configurable: true, writable: true
+ })
+}
+
+function abbrev (list) {
+ if (arguments.length !== 1 || !Array.isArray(list)) {
+ list = Array.prototype.slice.call(arguments, 0)
+ }
+ for (var i = 0, l = list.length, args = [] ; i < l ; i ++) {
+ args[i] = typeof list[i] === "string" ? list[i] : String(list[i])
+ }
+
+ // sort them lexicographically, so that they're next to their nearest kin
+ args = args.sort(lexSort)
+
+ // walk through each, seeing how much it has in common with the next and previous
+ var abbrevs = {}
+ , prev = ""
+ for (var i = 0, l = args.length ; i < l ; i ++) {
+ var current = args[i]
+ , next = args[i + 1] || ""
+ , nextMatches = true
+ , prevMatches = true
+ if (current === next) continue
+ for (var j = 0, cl = current.length ; j < cl ; j ++) {
+ var curChar = current.charAt(j)
+ nextMatches = nextMatches && curChar === next.charAt(j)
+ prevMatches = prevMatches && curChar === prev.charAt(j)
+ if (!nextMatches && !prevMatches) {
+ j ++
+ break
+ }
+ }
+ prev = current
+ if (j === cl) {
+ abbrevs[current] = current
+ continue
+ }
+ for (var a = current.substr(0, j) ; j <= cl ; j ++) {
+ abbrevs[a] = current
+ a += current.charAt(j)
+ }
+ }
+ return abbrevs
+}
+
+function lexSort (a, b) {
+ return a === b ? 0 : a > b ? 1 : -1
+}
diff --git a/node_modules/abbrev/package.json b/node_modules/abbrev/package.json
new file mode 100644
index 0000000..bf4e801
--- /dev/null
+++ b/node_modules/abbrev/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "abbrev",
+ "version": "1.1.1",
+ "description": "Like ruby's abbrev module, but in js",
+ "author": "Isaac Z. Schlueter ",
+ "main": "abbrev.js",
+ "scripts": {
+ "test": "tap test.js --100",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "postpublish": "git push origin --all; git push origin --tags"
+ },
+ "repository": "http://github.com/isaacs/abbrev-js",
+ "license": "ISC",
+ "devDependencies": {
+ "tap": "^10.1"
+ },
+ "files": [
+ "abbrev.js"
+ ]
+}
diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md
new file mode 100644
index 0000000..cb5990c
--- /dev/null
+++ b/node_modules/accepts/HISTORY.md
@@ -0,0 +1,243 @@
+1.3.8 / 2022-02-02
+==================
+
+ * deps: mime-types@~2.1.34
+ - deps: mime-db@~1.51.0
+ * deps: negotiator@0.6.3
+
+1.3.7 / 2019-04-29
+==================
+
+ * deps: negotiator@0.6.2
+ - Fix sorting charset, encoding, and language with extra parameters
+
+1.3.6 / 2019-04-28
+==================
+
+ * deps: mime-types@~2.1.24
+ - deps: mime-db@~1.40.0
+
+1.3.5 / 2018-02-28
+==================
+
+ * deps: mime-types@~2.1.18
+ - deps: mime-db@~1.33.0
+
+1.3.4 / 2017-08-22
+==================
+
+ * deps: mime-types@~2.1.16
+ - deps: mime-db@~1.29.0
+
+1.3.3 / 2016-05-02
+==================
+
+ * deps: mime-types@~2.1.11
+ - deps: mime-db@~1.23.0
+ * deps: negotiator@0.6.1
+ - perf: improve `Accept` parsing speed
+ - perf: improve `Accept-Charset` parsing speed
+ - perf: improve `Accept-Encoding` parsing speed
+ - perf: improve `Accept-Language` parsing speed
+
+1.3.2 / 2016-03-08
+==================
+
+ * deps: mime-types@~2.1.10
+ - Fix extension of `application/dash+xml`
+ - Update primary extension for `audio/mp4`
+ - deps: mime-db@~1.22.0
+
+1.3.1 / 2016-01-19
+==================
+
+ * deps: mime-types@~2.1.9
+ - deps: mime-db@~1.21.0
+
+1.3.0 / 2015-09-29
+==================
+
+ * deps: mime-types@~2.1.7
+ - deps: mime-db@~1.19.0
+ * deps: negotiator@0.6.0
+ - Fix including type extensions in parameters in `Accept` parsing
+ - Fix parsing `Accept` parameters with quoted equals
+ - Fix parsing `Accept` parameters with quoted semicolons
+ - Lazy-load modules from main entry point
+ - perf: delay type concatenation until needed
+ - perf: enable strict mode
+ - perf: hoist regular expressions
+ - perf: remove closures getting spec properties
+ - perf: remove a closure from media type parsing
+ - perf: remove property delete from media type parsing
+
+1.2.13 / 2015-09-06
+===================
+
+ * deps: mime-types@~2.1.6
+ - deps: mime-db@~1.18.0
+
+1.2.12 / 2015-07-30
+===================
+
+ * deps: mime-types@~2.1.4
+ - deps: mime-db@~1.16.0
+
+1.2.11 / 2015-07-16
+===================
+
+ * deps: mime-types@~2.1.3
+ - deps: mime-db@~1.15.0
+
+1.2.10 / 2015-07-01
+===================
+
+ * deps: mime-types@~2.1.2
+ - deps: mime-db@~1.14.0
+
+1.2.9 / 2015-06-08
+==================
+
+ * deps: mime-types@~2.1.1
+ - perf: fix deopt during mapping
+
+1.2.8 / 2015-06-07
+==================
+
+ * deps: mime-types@~2.1.0
+ - deps: mime-db@~1.13.0
+ * perf: avoid argument reassignment & argument slice
+ * perf: avoid negotiator recursive construction
+ * perf: enable strict mode
+ * perf: remove unnecessary bitwise operator
+
+1.2.7 / 2015-05-10
+==================
+
+ * deps: negotiator@0.5.3
+ - Fix media type parameter matching to be case-insensitive
+
+1.2.6 / 2015-05-07
+==================
+
+ * deps: mime-types@~2.0.11
+ - deps: mime-db@~1.9.1
+ * deps: negotiator@0.5.2
+ - Fix comparing media types with quoted values
+ - Fix splitting media types with quoted commas
+
+1.2.5 / 2015-03-13
+==================
+
+ * deps: mime-types@~2.0.10
+ - deps: mime-db@~1.8.0
+
+1.2.4 / 2015-02-14
+==================
+
+ * Support Node.js 0.6
+ * deps: mime-types@~2.0.9
+ - deps: mime-db@~1.7.0
+ * deps: negotiator@0.5.1
+ - Fix preference sorting to be stable for long acceptable lists
+
+1.2.3 / 2015-01-31
+==================
+
+ * deps: mime-types@~2.0.8
+ - deps: mime-db@~1.6.0
+
+1.2.2 / 2014-12-30
+==================
+
+ * deps: mime-types@~2.0.7
+ - deps: mime-db@~1.5.0
+
+1.2.1 / 2014-12-30
+==================
+
+ * deps: mime-types@~2.0.5
+ - deps: mime-db@~1.3.1
+
+1.2.0 / 2014-12-19
+==================
+
+ * deps: negotiator@0.5.0
+ - Fix list return order when large accepted list
+ - Fix missing identity encoding when q=0 exists
+ - Remove dynamic building of Negotiator class
+
+1.1.4 / 2014-12-10
+==================
+
+ * deps: mime-types@~2.0.4
+ - deps: mime-db@~1.3.0
+
+1.1.3 / 2014-11-09
+==================
+
+ * deps: mime-types@~2.0.3
+ - deps: mime-db@~1.2.0
+
+1.1.2 / 2014-10-14
+==================
+
+ * deps: negotiator@0.4.9
+ - Fix error when media type has invalid parameter
+
+1.1.1 / 2014-09-28
+==================
+
+ * deps: mime-types@~2.0.2
+ - deps: mime-db@~1.1.0
+ * deps: negotiator@0.4.8
+ - Fix all negotiations to be case-insensitive
+ - Stable sort preferences of same quality according to client order
+
+1.1.0 / 2014-09-02
+==================
+
+ * update `mime-types`
+
+1.0.7 / 2014-07-04
+==================
+
+ * Fix wrong type returned from `type` when match after unknown extension
+
+1.0.6 / 2014-06-24
+==================
+
+ * deps: negotiator@0.4.7
+
+1.0.5 / 2014-06-20
+==================
+
+ * fix crash when unknown extension given
+
+1.0.4 / 2014-06-19
+==================
+
+ * use `mime-types`
+
+1.0.3 / 2014-06-11
+==================
+
+ * deps: negotiator@0.4.6
+ - Order by specificity when quality is the same
+
+1.0.2 / 2014-05-29
+==================
+
+ * Fix interpretation when header not in request
+ * deps: pin negotiator@0.4.5
+
+1.0.1 / 2014-01-18
+==================
+
+ * Identity encoding isn't always acceptable
+ * deps: negotiator@~0.4.0
+
+1.0.0 / 2013-12-27
+==================
+
+ * Genesis
diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE
new file mode 100644
index 0000000..0616607
--- /dev/null
+++ b/node_modules/accepts/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong
+Copyright (c) 2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/accepts/README.md b/node_modules/accepts/README.md
new file mode 100644
index 0000000..82680c5
--- /dev/null
+++ b/node_modules/accepts/README.md
@@ -0,0 +1,140 @@
+# accepts
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][github-actions-ci-image]][github-actions-ci-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
+Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
+
+In addition to negotiator, it allows:
+
+- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
+ as well as `('text/html', 'application/json')`.
+- Allows type shorthands such as `json`.
+- Returns `false` when no types match
+- Treats non-existent headers as `*`
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install accepts
+```
+
+## API
+
+```js
+var accepts = require('accepts')
+```
+
+### accepts(req)
+
+Create a new `Accepts` object for the given `req`.
+
+#### .charset(charsets)
+
+Return the first accepted charset. If nothing in `charsets` is accepted,
+then `false` is returned.
+
+#### .charsets()
+
+Return the charsets that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .encoding(encodings)
+
+Return the first accepted encoding. If nothing in `encodings` is accepted,
+then `false` is returned.
+
+#### .encodings()
+
+Return the encodings that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .language(languages)
+
+Return the first accepted language. If nothing in `languages` is accepted,
+then `false` is returned.
+
+#### .languages()
+
+Return the languages that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .type(types)
+
+Return the first accepted type (and it is returned as the same text as what
+appears in the `types` array). If nothing in `types` is accepted, then `false`
+is returned.
+
+The `types` array can contain full MIME types or file extensions. Any value
+that is not a full MIME types is passed to `require('mime-types').lookup`.
+
+#### .types()
+
+Return the types that the request accepts, in the order of the client's
+preference (most preferred first).
+
+## Examples
+
+### Simple type negotiation
+
+This simple example shows how to use `accepts` to return a different typed
+respond body based on what the client wants to accept. The server lists it's
+preferences in order and will get back the best match between the client and
+server.
+
+```js
+var accepts = require('accepts')
+var http = require('http')
+
+function app (req, res) {
+ var accept = accepts(req)
+
+ // the order of this list is significant; should be server preferred order
+ switch (accept.type(['json', 'html'])) {
+ case 'json':
+ res.setHeader('Content-Type', 'application/json')
+ res.write('{"hello":"world!"}')
+ break
+ case 'html':
+ res.setHeader('Content-Type', 'text/html')
+ res.write('hello, world!')
+ break
+ default:
+ // the fallback is text/plain, so no need to specify it above
+ res.setHeader('Content-Type', 'text/plain')
+ res.write('hello, world!')
+ break
+ }
+
+ res.end()
+}
+
+http.createServer(app).listen(3000)
+```
+
+You can test this out with the cURL program:
+```sh
+curl -I -H'Accept: text/html' http://localhost:3000/
+```
+
+## License
+
+[MIT](LICENSE)
+
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
+[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
+[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
+[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
+[node-version-image]: https://badgen.net/npm/node/accepts
+[node-version-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/accepts
+[npm-url]: https://npmjs.org/package/accepts
+[npm-version-image]: https://badgen.net/npm/v/accepts
diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js
new file mode 100644
index 0000000..e9b2f63
--- /dev/null
+++ b/node_modules/accepts/index.js
@@ -0,0 +1,238 @@
+/*!
+ * accepts
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var Negotiator = require('negotiator')
+var mime = require('mime-types')
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = Accepts
+
+/**
+ * Create a new Accepts object for the given req.
+ *
+ * @param {object} req
+ * @public
+ */
+
+function Accepts (req) {
+ if (!(this instanceof Accepts)) {
+ return new Accepts(req)
+ }
+
+ this.headers = req.headers
+ this.negotiator = new Negotiator(req)
+}
+
+/**
+ * Check if the given `type(s)` is acceptable, returning
+ * the best match when true, otherwise `undefined`, in which
+ * case you should respond with 406 "Not Acceptable".
+ *
+ * The `type` value may be a single mime type string
+ * such as "application/json", the extension name
+ * such as "json" or an array `["json", "html", "text/plain"]`. When a list
+ * or array is given the _best_ match, if any is returned.
+ *
+ * Examples:
+ *
+ * // Accept: text/html
+ * this.types('html');
+ * // => "html"
+ *
+ * // Accept: text/*, application/json
+ * this.types('html');
+ * // => "html"
+ * this.types('text/html');
+ * // => "text/html"
+ * this.types('json', 'text');
+ * // => "json"
+ * this.types('application/json');
+ * // => "application/json"
+ *
+ * // Accept: text/*, application/json
+ * this.types('image/png');
+ * this.types('png');
+ * // => undefined
+ *
+ * // Accept: text/*;q=.5, application/json
+ * this.types(['html', 'json']);
+ * this.types('html', 'json');
+ * // => "json"
+ *
+ * @param {String|Array} types...
+ * @return {String|Array|Boolean}
+ * @public
+ */
+
+Accepts.prototype.type =
+Accepts.prototype.types = function (types_) {
+ var types = types_
+
+ // support flattened arguments
+ if (types && !Array.isArray(types)) {
+ types = new Array(arguments.length)
+ for (var i = 0; i < types.length; i++) {
+ types[i] = arguments[i]
+ }
+ }
+
+ // no types, return all requested types
+ if (!types || types.length === 0) {
+ return this.negotiator.mediaTypes()
+ }
+
+ // no accept header, return first given type
+ if (!this.headers.accept) {
+ return types[0]
+ }
+
+ var mimes = types.map(extToMime)
+ var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
+ var first = accepts[0]
+
+ return first
+ ? types[mimes.indexOf(first)]
+ : false
+}
+
+/**
+ * Return accepted encodings or best fit based on `encodings`.
+ *
+ * Given `Accept-Encoding: gzip, deflate`
+ * an array sorted by quality is returned:
+ *
+ * ['gzip', 'deflate']
+ *
+ * @param {String|Array} encodings...
+ * @return {String|Array}
+ * @public
+ */
+
+Accepts.prototype.encoding =
+Accepts.prototype.encodings = function (encodings_) {
+ var encodings = encodings_
+
+ // support flattened arguments
+ if (encodings && !Array.isArray(encodings)) {
+ encodings = new Array(arguments.length)
+ for (var i = 0; i < encodings.length; i++) {
+ encodings[i] = arguments[i]
+ }
+ }
+
+ // no encodings, return all requested encodings
+ if (!encodings || encodings.length === 0) {
+ return this.negotiator.encodings()
+ }
+
+ return this.negotiator.encodings(encodings)[0] || false
+}
+
+/**
+ * Return accepted charsets or best fit based on `charsets`.
+ *
+ * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
+ * an array sorted by quality is returned:
+ *
+ * ['utf-8', 'utf-7', 'iso-8859-1']
+ *
+ * @param {String|Array} charsets...
+ * @return {String|Array}
+ * @public
+ */
+
+Accepts.prototype.charset =
+Accepts.prototype.charsets = function (charsets_) {
+ var charsets = charsets_
+
+ // support flattened arguments
+ if (charsets && !Array.isArray(charsets)) {
+ charsets = new Array(arguments.length)
+ for (var i = 0; i < charsets.length; i++) {
+ charsets[i] = arguments[i]
+ }
+ }
+
+ // no charsets, return all requested charsets
+ if (!charsets || charsets.length === 0) {
+ return this.negotiator.charsets()
+ }
+
+ return this.negotiator.charsets(charsets)[0] || false
+}
+
+/**
+ * Return accepted languages or best fit based on `langs`.
+ *
+ * Given `Accept-Language: en;q=0.8, es, pt`
+ * an array sorted by quality is returned:
+ *
+ * ['es', 'pt', 'en']
+ *
+ * @param {String|Array} langs...
+ * @return {Array|String}
+ * @public
+ */
+
+Accepts.prototype.lang =
+Accepts.prototype.langs =
+Accepts.prototype.language =
+Accepts.prototype.languages = function (languages_) {
+ var languages = languages_
+
+ // support flattened arguments
+ if (languages && !Array.isArray(languages)) {
+ languages = new Array(arguments.length)
+ for (var i = 0; i < languages.length; i++) {
+ languages[i] = arguments[i]
+ }
+ }
+
+ // no languages, return all requested languages
+ if (!languages || languages.length === 0) {
+ return this.negotiator.languages()
+ }
+
+ return this.negotiator.languages(languages)[0] || false
+}
+
+/**
+ * Convert extnames to mime.
+ *
+ * @param {String} type
+ * @return {String}
+ * @private
+ */
+
+function extToMime (type) {
+ return type.indexOf('/') === -1
+ ? mime.lookup(type)
+ : type
+}
+
+/**
+ * Check if mime is valid.
+ *
+ * @param {String} type
+ * @return {String}
+ * @private
+ */
+
+function validMime (type) {
+ return typeof type === 'string'
+}
diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json
new file mode 100644
index 0000000..0f2d15d
--- /dev/null
+++ b/node_modules/accepts/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "accepts",
+ "description": "Higher-level content negotiation",
+ "version": "1.3.8",
+ "contributors": [
+ "Douglas Christopher Wilson ",
+ "Jonathan Ong (http://jongleberry.com)"
+ ],
+ "license": "MIT",
+ "repository": "jshttp/accepts",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "devDependencies": {
+ "deep-equal": "1.0.1",
+ "eslint": "7.32.0",
+ "eslint-config-standard": "14.1.1",
+ "eslint-plugin-import": "2.25.4",
+ "eslint-plugin-markdown": "2.2.1",
+ "eslint-plugin-node": "11.1.0",
+ "eslint-plugin-promise": "4.3.1",
+ "eslint-plugin-standard": "4.1.0",
+ "mocha": "9.2.0",
+ "nyc": "15.1.0"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --reporter spec --check-leaks --bail test/",
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test"
+ },
+ "keywords": [
+ "content",
+ "negotiation",
+ "accept",
+ "accepts"
+ ]
+}
diff --git a/node_modules/anymatch/LICENSE b/node_modules/anymatch/LICENSE
new file mode 100644
index 0000000..491766c
--- /dev/null
+++ b/node_modules/anymatch/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com)
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/anymatch/README.md b/node_modules/anymatch/README.md
new file mode 100644
index 0000000..1dd67f5
--- /dev/null
+++ b/node_modules/anymatch/README.md
@@ -0,0 +1,87 @@
+anymatch [](https://travis-ci.org/micromatch/anymatch) [](https://coveralls.io/r/micromatch/anymatch?branch=master)
+======
+Javascript module to match a string against a regular expression, glob, string,
+or function that takes the string as an argument and returns a truthy or falsy
+value. The matcher can also be an array of any or all of these. Useful for
+allowing a very flexible user-defined config to define things like file paths.
+
+__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__
+
+
+Usage
+-----
+```sh
+npm install anymatch
+```
+
+#### anymatch(matchers, testString, [returnIndex], [options])
+* __matchers__: (_Array|String|RegExp|Function_)
+String to be directly matched, string with glob patterns, regular expression
+test, function that takes the testString as an argument and returns a truthy
+value if it should be matched, or an array of any number and mix of these types.
+* __testString__: (_String|Array_) The string to test against the matchers. If
+passed as an array, the first element of the array will be used as the
+`testString` for non-function matchers, while the entire array will be applied
+as the arguments for function matchers.
+* __options__: (_Object_ [optional]_) Any of the [picomatch](https://github.com/micromatch/picomatch#options) options.
+ * __returnIndex__: (_Boolean [optional]_) If true, return the array index of
+the first matcher that that testString matched, or -1 if no match, instead of a
+boolean result.
+
+```js
+const anymatch = require('anymatch');
+
+const matchers = [ 'path/to/file.js', 'path/anyjs/**/*.js', /foo.js$/, string => string.includes('bar') && string.length > 10 ] ;
+
+anymatch(matchers, 'path/to/file.js'); // true
+anymatch(matchers, 'path/anyjs/baz.js'); // true
+anymatch(matchers, 'path/to/foo.js'); // true
+anymatch(matchers, 'path/to/bar.js'); // true
+anymatch(matchers, 'bar.js'); // false
+
+// returnIndex = true
+anymatch(matchers, 'foo.js', {returnIndex: true}); // 2
+anymatch(matchers, 'path/anyjs/foo.js', {returnIndex: true}); // 1
+
+// any picomatc
+
+// using globs to match directories and their children
+anymatch('node_modules', 'node_modules'); // true
+anymatch('node_modules', 'node_modules/somelib/index.js'); // false
+anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true
+anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false
+anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true
+
+const matcher = anymatch(matchers);
+['foo.js', 'bar.js'].filter(matcher); // [ 'foo.js' ]
+anymatch master* ❯
+
+```
+
+#### anymatch(matchers)
+You can also pass in only your matcher(s) to get a curried function that has
+already been bound to the provided matching criteria. This can be used as an
+`Array#filter` callback.
+
+```js
+var matcher = anymatch(matchers);
+
+matcher('path/to/file.js'); // true
+matcher('path/anyjs/baz.js', true); // 1
+
+['foo.js', 'bar.js'].filter(matcher); // ['foo.js']
+```
+
+Changelog
+----------
+[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases)
+
+- **v3.0:** Removed `startIndex` and `endIndex` arguments. Node 8.x-only.
+- **v2.0:** [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information).
+- **v1.2:** anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch)
+for glob pattern matching. Issues with glob pattern matching should be
+reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues).
+
+License
+-------
+[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE)
diff --git a/node_modules/anymatch/index.d.ts b/node_modules/anymatch/index.d.ts
new file mode 100644
index 0000000..196d061
--- /dev/null
+++ b/node_modules/anymatch/index.d.ts
@@ -0,0 +1,19 @@
+type AnymatchFn = (testString: string) => boolean;
+type AnymatchPattern = string|RegExp|AnymatchFn;
+type AnymatchMatcher = AnymatchPattern|AnymatchPattern[]
+type AnymatchTester = {
+ (testString: string|any[], returnIndex: true): number;
+ (testString: string|any[]): boolean;
+}
+
+type PicomatchOptions = {dot: boolean};
+
+declare const anymatch: {
+ (matchers: AnymatchMatcher): AnymatchTester;
+ (matchers: AnymatchMatcher, testString: string|any[], returnIndex: true | PicomatchOptions): number;
+ (matchers: AnymatchMatcher, testString: string|any[]): boolean;
+}
+
+export {AnymatchMatcher as Matcher}
+export {AnymatchTester as Tester}
+export default anymatch
diff --git a/node_modules/anymatch/index.js b/node_modules/anymatch/index.js
new file mode 100644
index 0000000..9fb3ebb
--- /dev/null
+++ b/node_modules/anymatch/index.js
@@ -0,0 +1,104 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", { value: true });
+
+const picomatch = require('picomatch');
+const normalizePath = require('normalize-path');
+
+/**
+ * @typedef {(testString: string) => boolean} AnymatchFn
+ * @typedef {string|RegExp|AnymatchFn} AnymatchPattern
+ * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
+ */
+const BANG = '!';
+const DEFAULT_OPTIONS = {returnIndex: false};
+const arrify = (item) => Array.isArray(item) ? item : [item];
+
+/**
+ * @param {AnymatchPattern} matcher
+ * @param {object} options
+ * @returns {AnymatchFn}
+ */
+const createPattern = (matcher, options) => {
+ if (typeof matcher === 'function') {
+ return matcher;
+ }
+ if (typeof matcher === 'string') {
+ const glob = picomatch(matcher, options);
+ return (string) => matcher === string || glob(string);
+ }
+ if (matcher instanceof RegExp) {
+ return (string) => matcher.test(string);
+ }
+ return (string) => false;
+};
+
+/**
+ * @param {Array} patterns
+ * @param {Array} negPatterns
+ * @param {String|Array} args
+ * @param {Boolean} returnIndex
+ * @returns {boolean|number}
+ */
+const matchPatterns = (patterns, negPatterns, args, returnIndex) => {
+ const isList = Array.isArray(args);
+ const _path = isList ? args[0] : args;
+ if (!isList && typeof _path !== 'string') {
+ throw new TypeError('anymatch: second argument must be a string: got ' +
+ Object.prototype.toString.call(_path))
+ }
+ const path = normalizePath(_path);
+
+ for (let index = 0; index < negPatterns.length; index++) {
+ const nglob = negPatterns[index];
+ if (nglob(path)) {
+ return returnIndex ? -1 : false;
+ }
+ }
+
+ const applied = isList && [path].concat(args.slice(1));
+ for (let index = 0; index < patterns.length; index++) {
+ const pattern = patterns[index];
+ if (isList ? pattern(...applied) : pattern(path)) {
+ return returnIndex ? index : true;
+ }
+ }
+
+ return returnIndex ? -1 : false;
+};
+
+/**
+ * @param {AnymatchMatcher} matchers
+ * @param {Array|string} testString
+ * @param {object} options
+ * @returns {boolean|number|Function}
+ */
+const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {
+ if (matchers == null) {
+ throw new TypeError('anymatch: specify first argument');
+ }
+ const opts = typeof options === 'boolean' ? {returnIndex: options} : options;
+ const returnIndex = opts.returnIndex || false;
+
+ // Early cache for matchers.
+ const mtchers = arrify(matchers);
+ const negatedGlobs = mtchers
+ .filter(item => typeof item === 'string' && item.charAt(0) === BANG)
+ .map(item => item.slice(1))
+ .map(item => picomatch(item, opts));
+ const patterns = mtchers
+ .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))
+ .map(matcher => createPattern(matcher, opts));
+
+ if (testString == null) {
+ return (testString, ri = false) => {
+ const returnIndex = typeof ri === 'boolean' ? ri : false;
+ return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
+ }
+ }
+
+ return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
+};
+
+anymatch.default = anymatch;
+module.exports = anymatch;
diff --git a/node_modules/anymatch/package.json b/node_modules/anymatch/package.json
new file mode 100644
index 0000000..f9b5284
--- /dev/null
+++ b/node_modules/anymatch/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "anymatch",
+ "version": "3.1.2",
+ "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions",
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "author": {
+ "name": "Elan Shanker",
+ "url": "https://github.com/es128"
+ },
+ "license": "ISC",
+ "homepage": "https://github.com/micromatch/anymatch",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/micromatch/anymatch"
+ },
+ "keywords": [
+ "match",
+ "any",
+ "string",
+ "file",
+ "fs",
+ "list",
+ "glob",
+ "regex",
+ "regexp",
+ "regular",
+ "expression",
+ "function"
+ ],
+ "scripts": {
+ "test": "nyc mocha",
+ "mocha": "mocha"
+ },
+ "devDependencies": {
+ "mocha": "^6.1.3",
+ "nyc": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+}
diff --git a/node_modules/array-flatten/LICENSE b/node_modules/array-flatten/LICENSE
new file mode 100644
index 0000000..983fbe8
--- /dev/null
+++ b/node_modules/array-flatten/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/array-flatten/README.md b/node_modules/array-flatten/README.md
new file mode 100644
index 0000000..91fa5b6
--- /dev/null
+++ b/node_modules/array-flatten/README.md
@@ -0,0 +1,43 @@
+# Array Flatten
+
+[![NPM version][npm-image]][npm-url]
+[![NPM downloads][downloads-image]][downloads-url]
+[![Build status][travis-image]][travis-url]
+[![Test coverage][coveralls-image]][coveralls-url]
+
+> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
+
+## Installation
+
+```
+npm install array-flatten --save
+```
+
+## Usage
+
+```javascript
+var flatten = require('array-flatten')
+
+flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
+//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
+//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
+
+(function () {
+ flatten(arguments) //=> [1, 2, 3]
+})(1, [2, 3])
+```
+
+## License
+
+MIT
+
+[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
+[npm-url]: https://npmjs.org/package/array-flatten
+[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
+[downloads-url]: https://npmjs.org/package/array-flatten
+[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
+[travis-url]: https://travis-ci.org/blakeembrey/array-flatten
+[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
+[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master
diff --git a/node_modules/array-flatten/array-flatten.js b/node_modules/array-flatten/array-flatten.js
new file mode 100644
index 0000000..089117b
--- /dev/null
+++ b/node_modules/array-flatten/array-flatten.js
@@ -0,0 +1,64 @@
+'use strict'
+
+/**
+ * Expose `arrayFlatten`.
+ */
+module.exports = arrayFlatten
+
+/**
+ * Recursive flatten function with depth.
+ *
+ * @param {Array} array
+ * @param {Array} result
+ * @param {Number} depth
+ * @return {Array}
+ */
+function flattenWithDepth (array, result, depth) {
+ for (var i = 0; i < array.length; i++) {
+ var value = array[i]
+
+ if (depth > 0 && Array.isArray(value)) {
+ flattenWithDepth(value, result, depth - 1)
+ } else {
+ result.push(value)
+ }
+ }
+
+ return result
+}
+
+/**
+ * Recursive flatten function. Omitting depth is slightly faster.
+ *
+ * @param {Array} array
+ * @param {Array} result
+ * @return {Array}
+ */
+function flattenForever (array, result) {
+ for (var i = 0; i < array.length; i++) {
+ var value = array[i]
+
+ if (Array.isArray(value)) {
+ flattenForever(value, result)
+ } else {
+ result.push(value)
+ }
+ }
+
+ return result
+}
+
+/**
+ * Flatten an array, with the ability to define a depth.
+ *
+ * @param {Array} array
+ * @param {Number} depth
+ * @return {Array}
+ */
+function arrayFlatten (array, depth) {
+ if (depth == null) {
+ return flattenForever(array, [])
+ }
+
+ return flattenWithDepth(array, [], depth)
+}
diff --git a/node_modules/array-flatten/package.json b/node_modules/array-flatten/package.json
new file mode 100644
index 0000000..1a24e2a
--- /dev/null
+++ b/node_modules/array-flatten/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "array-flatten",
+ "version": "1.1.1",
+ "description": "Flatten an array of nested arrays into a single flat array",
+ "main": "array-flatten.js",
+ "files": [
+ "array-flatten.js",
+ "LICENSE"
+ ],
+ "scripts": {
+ "test": "istanbul cover _mocha -- -R spec"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blakeembrey/array-flatten.git"
+ },
+ "keywords": [
+ "array",
+ "flatten",
+ "arguments",
+ "depth"
+ ],
+ "author": {
+ "name": "Blake Embrey",
+ "email": "hello@blakeembrey.com",
+ "url": "http://blakeembrey.me"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/blakeembrey/array-flatten/issues"
+ },
+ "homepage": "https://github.com/blakeembrey/array-flatten",
+ "devDependencies": {
+ "istanbul": "^0.3.13",
+ "mocha": "^2.2.4",
+ "pre-commit": "^1.0.7",
+ "standard": "^3.7.3"
+ }
+}
diff --git a/node_modules/asynckit/LICENSE b/node_modules/asynckit/LICENSE
new file mode 100644
index 0000000..c9eca5d
--- /dev/null
+++ b/node_modules/asynckit/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Alex Indigo
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/asynckit/README.md b/node_modules/asynckit/README.md
new file mode 100644
index 0000000..ddcc7e6
--- /dev/null
+++ b/node_modules/asynckit/README.md
@@ -0,0 +1,233 @@
+# asynckit [](https://www.npmjs.com/package/asynckit)
+
+Minimal async jobs utility library, with streams support.
+
+[](https://travis-ci.org/alexindigo/asynckit)
+[](https://travis-ci.org/alexindigo/asynckit)
+[](https://ci.appveyor.com/project/alexindigo/asynckit)
+
+[](https://coveralls.io/github/alexindigo/asynckit?branch=master)
+[](https://david-dm.org/alexindigo/asynckit)
+[](https://www.bithound.io/github/alexindigo/asynckit)
+
+
+
+AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects.
+Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method.
+
+It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators.
+
+| compression | size |
+| :----------------- | -------: |
+| asynckit.js | 12.34 kB |
+| asynckit.min.js | 4.11 kB |
+| asynckit.min.js.gz | 1.47 kB |
+
+
+## Install
+
+```sh
+$ npm install --save asynckit
+```
+
+## Examples
+
+### Parallel Jobs
+
+Runs iterator over provided array in parallel. Stores output in the `result` array,
+on the matching positions. In unlikely event of an error from one of the jobs,
+will terminate rest of the active jobs (if abort function is provided)
+and return error along with salvaged data to the main callback function.
+
+#### Input Array
+
+```javascript
+var parallel = require('asynckit').parallel
+ , assert = require('assert')
+ ;
+
+var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
+ , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
+ , target = []
+ ;
+
+parallel(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+});
+
+// async job accepts one element from the array
+// and a callback function
+function asyncJob(item, cb)
+{
+ // different delays (in ms) per item
+ var delay = item * 25;
+
+ // pretend different jobs take different time to finish
+ // and not in consequential order
+ var timeoutId = setTimeout(function() {
+ target.push(item);
+ cb(null, item * 2);
+ }, delay);
+
+ // allow to cancel "leftover" jobs upon error
+ // return function, invoking of which will abort this job
+ return clearTimeout.bind(null, timeoutId);
+}
+```
+
+More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js).
+
+#### Input Object
+
+Also it supports named jobs, listed via object.
+
+```javascript
+var parallel = require('asynckit/parallel')
+ , assert = require('assert')
+ ;
+
+var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
+ , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
+ , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
+ , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ]
+ , target = []
+ , keys = []
+ ;
+
+parallel(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+ assert.deepEqual(keys, expectedKeys);
+});
+
+// supports full value, key, callback (shortcut) interface
+function asyncJob(item, key, cb)
+{
+ // different delays (in ms) per item
+ var delay = item * 25;
+
+ // pretend different jobs take different time to finish
+ // and not in consequential order
+ var timeoutId = setTimeout(function() {
+ keys.push(key);
+ target.push(item);
+ cb(null, item * 2);
+ }, delay);
+
+ // allow to cancel "leftover" jobs upon error
+ // return function, invoking of which will abort this job
+ return clearTimeout.bind(null, timeoutId);
+}
+```
+
+More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js).
+
+### Serial Jobs
+
+Runs iterator over provided array sequentially. Stores output in the `result` array,
+on the matching positions. In unlikely event of an error from one of the jobs,
+will not proceed to the rest of the items in the list
+and return error along with salvaged data to the main callback function.
+
+#### Input Array
+
+```javascript
+var serial = require('asynckit/serial')
+ , assert = require('assert')
+ ;
+
+var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
+ , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
+ , target = []
+ ;
+
+serial(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+});
+
+// extended interface (item, key, callback)
+// also supported for arrays
+function asyncJob(item, key, cb)
+{
+ target.push(key);
+
+ // it will be automatically made async
+ // even it iterator "returns" in the same event loop
+ cb(null, item * 2);
+}
+```
+
+More examples could be found in [test/test-serial-array.js](test/test-serial-array.js).
+
+#### Input Object
+
+Also it supports named jobs, listed via object.
+
+```javascript
+var serial = require('asynckit').serial
+ , assert = require('assert')
+ ;
+
+var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
+ , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
+ , target = []
+ ;
+
+var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
+ , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
+ , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
+ , target = []
+ ;
+
+
+serial(source, asyncJob, function(err, result)
+{
+ assert.deepEqual(result, expectedResult);
+ assert.deepEqual(target, expectedTarget);
+});
+
+// shortcut interface (item, callback)
+// works for object as well as for the arrays
+function asyncJob(item, cb)
+{
+ target.push(item);
+
+ // it will be automatically made async
+ // even it iterator "returns" in the same event loop
+ cb(null, item * 2);
+}
+```
+
+More examples could be found in [test/test-serial-object.js](test/test-serial-object.js).
+
+_Note: Since _object_ is an _unordered_ collection of properties,
+it may produce unexpected results with sequential iterations.
+Whenever order of the jobs' execution is important please use `serialOrdered` method._
+
+### Ordered Serial Iterations
+
+TBD
+
+For example [compare-property](compare-property) package.
+
+### Streaming interface
+
+TBD
+
+## Want to Know More?
+
+More examples can be found in [test folder](test/).
+
+Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions.
+
+## License
+
+AsyncKit is licensed under the MIT license.
diff --git a/node_modules/asynckit/bench.js b/node_modules/asynckit/bench.js
new file mode 100644
index 0000000..c612f1a
--- /dev/null
+++ b/node_modules/asynckit/bench.js
@@ -0,0 +1,76 @@
+/* eslint no-console: "off" */
+
+var asynckit = require('./')
+ , async = require('async')
+ , assert = require('assert')
+ , expected = 0
+ ;
+
+var Benchmark = require('benchmark');
+var suite = new Benchmark.Suite;
+
+var source = [];
+for (var z = 1; z < 100; z++)
+{
+ source.push(z);
+ expected += z;
+}
+
+suite
+// add tests
+
+.add('async.map', function(deferred)
+{
+ var total = 0;
+
+ async.map(source,
+ function(i, cb)
+ {
+ setImmediate(function()
+ {
+ total += i;
+ cb(null, total);
+ });
+ },
+ function(err, result)
+ {
+ assert.ifError(err);
+ assert.equal(result[result.length - 1], expected);
+ deferred.resolve();
+ });
+}, {'defer': true})
+
+
+.add('asynckit.parallel', function(deferred)
+{
+ var total = 0;
+
+ asynckit.parallel(source,
+ function(i, cb)
+ {
+ setImmediate(function()
+ {
+ total += i;
+ cb(null, total);
+ });
+ },
+ function(err, result)
+ {
+ assert.ifError(err);
+ assert.equal(result[result.length - 1], expected);
+ deferred.resolve();
+ });
+}, {'defer': true})
+
+
+// add listeners
+.on('cycle', function(ev)
+{
+ console.log(String(ev.target));
+})
+.on('complete', function()
+{
+ console.log('Fastest is ' + this.filter('fastest').map('name'));
+})
+// run async
+.run({ 'async': true });
diff --git a/node_modules/asynckit/index.js b/node_modules/asynckit/index.js
new file mode 100644
index 0000000..455f945
--- /dev/null
+++ b/node_modules/asynckit/index.js
@@ -0,0 +1,6 @@
+module.exports =
+{
+ parallel : require('./parallel.js'),
+ serial : require('./serial.js'),
+ serialOrdered : require('./serialOrdered.js')
+};
diff --git a/node_modules/asynckit/lib/abort.js b/node_modules/asynckit/lib/abort.js
new file mode 100644
index 0000000..114367e
--- /dev/null
+++ b/node_modules/asynckit/lib/abort.js
@@ -0,0 +1,29 @@
+// API
+module.exports = abort;
+
+/**
+ * Aborts leftover active jobs
+ *
+ * @param {object} state - current state object
+ */
+function abort(state)
+{
+ Object.keys(state.jobs).forEach(clean.bind(state));
+
+ // reset leftover jobs
+ state.jobs = {};
+}
+
+/**
+ * Cleans up leftover job by invoking abort function for the provided job id
+ *
+ * @this state
+ * @param {string|number} key - job id to abort
+ */
+function clean(key)
+{
+ if (typeof this.jobs[key] == 'function')
+ {
+ this.jobs[key]();
+ }
+}
diff --git a/node_modules/asynckit/lib/async.js b/node_modules/asynckit/lib/async.js
new file mode 100644
index 0000000..7f1288a
--- /dev/null
+++ b/node_modules/asynckit/lib/async.js
@@ -0,0 +1,34 @@
+var defer = require('./defer.js');
+
+// API
+module.exports = async;
+
+/**
+ * Runs provided callback asynchronously
+ * even if callback itself is not
+ *
+ * @param {function} callback - callback to invoke
+ * @returns {function} - augmented callback
+ */
+function async(callback)
+{
+ var isAsync = false;
+
+ // check if async happened
+ defer(function() { isAsync = true; });
+
+ return function async_callback(err, result)
+ {
+ if (isAsync)
+ {
+ callback(err, result);
+ }
+ else
+ {
+ defer(function nextTick_callback()
+ {
+ callback(err, result);
+ });
+ }
+ };
+}
diff --git a/node_modules/asynckit/lib/defer.js b/node_modules/asynckit/lib/defer.js
new file mode 100644
index 0000000..b67110c
--- /dev/null
+++ b/node_modules/asynckit/lib/defer.js
@@ -0,0 +1,26 @@
+module.exports = defer;
+
+/**
+ * Runs provided function on next iteration of the event loop
+ *
+ * @param {function} fn - function to run
+ */
+function defer(fn)
+{
+ var nextTick = typeof setImmediate == 'function'
+ ? setImmediate
+ : (
+ typeof process == 'object' && typeof process.nextTick == 'function'
+ ? process.nextTick
+ : null
+ );
+
+ if (nextTick)
+ {
+ nextTick(fn);
+ }
+ else
+ {
+ setTimeout(fn, 0);
+ }
+}
diff --git a/node_modules/asynckit/lib/iterate.js b/node_modules/asynckit/lib/iterate.js
new file mode 100644
index 0000000..5d2839a
--- /dev/null
+++ b/node_modules/asynckit/lib/iterate.js
@@ -0,0 +1,75 @@
+var async = require('./async.js')
+ , abort = require('./abort.js')
+ ;
+
+// API
+module.exports = iterate;
+
+/**
+ * Iterates over each job object
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {object} state - current job status
+ * @param {function} callback - invoked when all elements processed
+ */
+function iterate(list, iterator, state, callback)
+{
+ // store current index
+ var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;
+
+ state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
+ {
+ // don't repeat yourself
+ // skip secondary callbacks
+ if (!(key in state.jobs))
+ {
+ return;
+ }
+
+ // clean up jobs
+ delete state.jobs[key];
+
+ if (error)
+ {
+ // don't process rest of the results
+ // stop still active jobs
+ // and reset the list
+ abort(state);
+ }
+ else
+ {
+ state.results[key] = output;
+ }
+
+ // return salvaged results
+ callback(error, state.results);
+ });
+}
+
+/**
+ * Runs iterator over provided job element
+ *
+ * @param {function} iterator - iterator to invoke
+ * @param {string|number} key - key/index of the element in the list of jobs
+ * @param {mixed} item - job description
+ * @param {function} callback - invoked after iterator is done with the job
+ * @returns {function|mixed} - job abort function or something else
+ */
+function runJob(iterator, key, item, callback)
+{
+ var aborter;
+
+ // allow shortcut if iterator expects only two arguments
+ if (iterator.length == 2)
+ {
+ aborter = iterator(item, async(callback));
+ }
+ // otherwise go with full three arguments
+ else
+ {
+ aborter = iterator(item, key, async(callback));
+ }
+
+ return aborter;
+}
diff --git a/node_modules/asynckit/lib/readable_asynckit.js b/node_modules/asynckit/lib/readable_asynckit.js
new file mode 100644
index 0000000..78ad240
--- /dev/null
+++ b/node_modules/asynckit/lib/readable_asynckit.js
@@ -0,0 +1,91 @@
+var streamify = require('./streamify.js')
+ , defer = require('./defer.js')
+ ;
+
+// API
+module.exports = ReadableAsyncKit;
+
+/**
+ * Base constructor for all streams
+ * used to hold properties/methods
+ */
+function ReadableAsyncKit()
+{
+ ReadableAsyncKit.super_.apply(this, arguments);
+
+ // list of active jobs
+ this.jobs = {};
+
+ // add stream methods
+ this.destroy = destroy;
+ this._start = _start;
+ this._read = _read;
+}
+
+/**
+ * Destroys readable stream,
+ * by aborting outstanding jobs
+ *
+ * @returns {void}
+ */
+function destroy()
+{
+ if (this.destroyed)
+ {
+ return;
+ }
+
+ this.destroyed = true;
+
+ if (typeof this.terminator == 'function')
+ {
+ this.terminator();
+ }
+}
+
+/**
+ * Starts provided jobs in async manner
+ *
+ * @private
+ */
+function _start()
+{
+ // first argument – runner function
+ var runner = arguments[0]
+ // take away first argument
+ , args = Array.prototype.slice.call(arguments, 1)
+ // second argument - input data
+ , input = args[0]
+ // last argument - result callback
+ , endCb = streamify.callback.call(this, args[args.length - 1])
+ ;
+
+ args[args.length - 1] = endCb;
+ // third argument - iterator
+ args[1] = streamify.iterator.call(this, args[1]);
+
+ // allow time for proper setup
+ defer(function()
+ {
+ if (!this.destroyed)
+ {
+ this.terminator = runner.apply(null, args);
+ }
+ else
+ {
+ endCb(null, Array.isArray(input) ? [] : {});
+ }
+ }.bind(this));
+}
+
+
+/**
+ * Implement _read to comply with Readable streams
+ * Doesn't really make sense for flowing object mode
+ *
+ * @private
+ */
+function _read()
+{
+
+}
diff --git a/node_modules/asynckit/lib/readable_parallel.js b/node_modules/asynckit/lib/readable_parallel.js
new file mode 100644
index 0000000..5d2929f
--- /dev/null
+++ b/node_modules/asynckit/lib/readable_parallel.js
@@ -0,0 +1,25 @@
+var parallel = require('../parallel.js');
+
+// API
+module.exports = ReadableParallel;
+
+/**
+ * Streaming wrapper to `asynckit.parallel`
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {stream.Readable#}
+ */
+function ReadableParallel(list, iterator, callback)
+{
+ if (!(this instanceof ReadableParallel))
+ {
+ return new ReadableParallel(list, iterator, callback);
+ }
+
+ // turn on object mode
+ ReadableParallel.super_.call(this, {objectMode: true});
+
+ this._start(parallel, list, iterator, callback);
+}
diff --git a/node_modules/asynckit/lib/readable_serial.js b/node_modules/asynckit/lib/readable_serial.js
new file mode 100644
index 0000000..7822698
--- /dev/null
+++ b/node_modules/asynckit/lib/readable_serial.js
@@ -0,0 +1,25 @@
+var serial = require('../serial.js');
+
+// API
+module.exports = ReadableSerial;
+
+/**
+ * Streaming wrapper to `asynckit.serial`
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {stream.Readable#}
+ */
+function ReadableSerial(list, iterator, callback)
+{
+ if (!(this instanceof ReadableSerial))
+ {
+ return new ReadableSerial(list, iterator, callback);
+ }
+
+ // turn on object mode
+ ReadableSerial.super_.call(this, {objectMode: true});
+
+ this._start(serial, list, iterator, callback);
+}
diff --git a/node_modules/asynckit/lib/readable_serial_ordered.js b/node_modules/asynckit/lib/readable_serial_ordered.js
new file mode 100644
index 0000000..3de89c4
--- /dev/null
+++ b/node_modules/asynckit/lib/readable_serial_ordered.js
@@ -0,0 +1,29 @@
+var serialOrdered = require('../serialOrdered.js');
+
+// API
+module.exports = ReadableSerialOrdered;
+// expose sort helpers
+module.exports.ascending = serialOrdered.ascending;
+module.exports.descending = serialOrdered.descending;
+
+/**
+ * Streaming wrapper to `asynckit.serialOrdered`
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} sortMethod - custom sort function
+ * @param {function} callback - invoked when all elements processed
+ * @returns {stream.Readable#}
+ */
+function ReadableSerialOrdered(list, iterator, sortMethod, callback)
+{
+ if (!(this instanceof ReadableSerialOrdered))
+ {
+ return new ReadableSerialOrdered(list, iterator, sortMethod, callback);
+ }
+
+ // turn on object mode
+ ReadableSerialOrdered.super_.call(this, {objectMode: true});
+
+ this._start(serialOrdered, list, iterator, sortMethod, callback);
+}
diff --git a/node_modules/asynckit/lib/state.js b/node_modules/asynckit/lib/state.js
new file mode 100644
index 0000000..cbea7ad
--- /dev/null
+++ b/node_modules/asynckit/lib/state.js
@@ -0,0 +1,37 @@
+// API
+module.exports = state;
+
+/**
+ * Creates initial state object
+ * for iteration over list
+ *
+ * @param {array|object} list - list to iterate over
+ * @param {function|null} sortMethod - function to use for keys sort,
+ * or `null` to keep them as is
+ * @returns {object} - initial state object
+ */
+function state(list, sortMethod)
+{
+ var isNamedList = !Array.isArray(list)
+ , initState =
+ {
+ index : 0,
+ keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
+ jobs : {},
+ results : isNamedList ? {} : [],
+ size : isNamedList ? Object.keys(list).length : list.length
+ }
+ ;
+
+ if (sortMethod)
+ {
+ // sort array keys based on it's values
+ // sort object's keys just on own merit
+ initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
+ {
+ return sortMethod(list[a], list[b]);
+ });
+ }
+
+ return initState;
+}
diff --git a/node_modules/asynckit/lib/streamify.js b/node_modules/asynckit/lib/streamify.js
new file mode 100644
index 0000000..f56a1c9
--- /dev/null
+++ b/node_modules/asynckit/lib/streamify.js
@@ -0,0 +1,141 @@
+var async = require('./async.js');
+
+// API
+module.exports = {
+ iterator: wrapIterator,
+ callback: wrapCallback
+};
+
+/**
+ * Wraps iterators with long signature
+ *
+ * @this ReadableAsyncKit#
+ * @param {function} iterator - function to wrap
+ * @returns {function} - wrapped function
+ */
+function wrapIterator(iterator)
+{
+ var stream = this;
+
+ return function(item, key, cb)
+ {
+ var aborter
+ , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key))
+ ;
+
+ stream.jobs[key] = wrappedCb;
+
+ // it's either shortcut (item, cb)
+ if (iterator.length == 2)
+ {
+ aborter = iterator(item, wrappedCb);
+ }
+ // or long format (item, key, cb)
+ else
+ {
+ aborter = iterator(item, key, wrappedCb);
+ }
+
+ return aborter;
+ };
+}
+
+/**
+ * Wraps provided callback function
+ * allowing to execute snitch function before
+ * real callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {function} callback - function to wrap
+ * @returns {function} - wrapped function
+ */
+function wrapCallback(callback)
+{
+ var stream = this;
+
+ var wrapped = function(error, result)
+ {
+ return finisher.call(stream, error, result, callback);
+ };
+
+ return wrapped;
+}
+
+/**
+ * Wraps provided iterator callback function
+ * makes sure snitch only called once,
+ * but passes secondary calls to the original callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {function} callback - callback to wrap
+ * @param {number|string} key - iteration key
+ * @returns {function} wrapped callback
+ */
+function wrapIteratorCallback(callback, key)
+{
+ var stream = this;
+
+ return function(error, output)
+ {
+ // don't repeat yourself
+ if (!(key in stream.jobs))
+ {
+ callback(error, output);
+ return;
+ }
+
+ // clean up jobs
+ delete stream.jobs[key];
+
+ return streamer.call(stream, error, {key: key, value: output}, callback);
+ };
+}
+
+/**
+ * Stream wrapper for iterator callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {mixed} error - error response
+ * @param {mixed} output - iterator output
+ * @param {function} callback - callback that expects iterator results
+ */
+function streamer(error, output, callback)
+{
+ if (error && !this.error)
+ {
+ this.error = error;
+ this.pause();
+ this.emit('error', error);
+ // send back value only, as expected
+ callback(error, output && output.value);
+ return;
+ }
+
+ // stream stuff
+ this.push(output);
+
+ // back to original track
+ // send back value only, as expected
+ callback(error, output && output.value);
+}
+
+/**
+ * Stream wrapper for finishing callback
+ *
+ * @this ReadableAsyncKit#
+ * @param {mixed} error - error response
+ * @param {mixed} output - iterator output
+ * @param {function} callback - callback that expects final results
+ */
+function finisher(error, output, callback)
+{
+ // signal end of the stream
+ // only for successfully finished streams
+ if (!error)
+ {
+ this.push(null);
+ }
+
+ // back to original track
+ callback(error, output);
+}
diff --git a/node_modules/asynckit/lib/terminator.js b/node_modules/asynckit/lib/terminator.js
new file mode 100644
index 0000000..d6eb992
--- /dev/null
+++ b/node_modules/asynckit/lib/terminator.js
@@ -0,0 +1,29 @@
+var abort = require('./abort.js')
+ , async = require('./async.js')
+ ;
+
+// API
+module.exports = terminator;
+
+/**
+ * Terminates jobs in the attached state context
+ *
+ * @this AsyncKitState#
+ * @param {function} callback - final callback to invoke after termination
+ */
+function terminator(callback)
+{
+ if (!Object.keys(this.jobs).length)
+ {
+ return;
+ }
+
+ // fast forward iteration index
+ this.index = this.size;
+
+ // abort jobs
+ abort(this);
+
+ // send back results we have so far
+ async(callback)(null, this.results);
+}
diff --git a/node_modules/asynckit/package.json b/node_modules/asynckit/package.json
new file mode 100644
index 0000000..51147d6
--- /dev/null
+++ b/node_modules/asynckit/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "asynckit",
+ "version": "0.4.0",
+ "description": "Minimal async jobs utility library, with streams support",
+ "main": "index.js",
+ "scripts": {
+ "clean": "rimraf coverage",
+ "lint": "eslint *.js lib/*.js test/*.js",
+ "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec",
+ "win-test": "tape test/test-*.js",
+ "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec",
+ "report": "istanbul report",
+ "size": "browserify index.js | size-table asynckit",
+ "debug": "tape test/test-*.js"
+ },
+ "pre-commit": [
+ "clean",
+ "lint",
+ "test",
+ "browser",
+ "report",
+ "size"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/alexindigo/asynckit.git"
+ },
+ "keywords": [
+ "async",
+ "jobs",
+ "parallel",
+ "serial",
+ "iterator",
+ "array",
+ "object",
+ "stream",
+ "destroy",
+ "terminate",
+ "abort"
+ ],
+ "author": "Alex Indigo ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/alexindigo/asynckit/issues"
+ },
+ "homepage": "https://github.com/alexindigo/asynckit#readme",
+ "devDependencies": {
+ "browserify": "^13.0.0",
+ "browserify-istanbul": "^2.0.0",
+ "coveralls": "^2.11.9",
+ "eslint": "^2.9.0",
+ "istanbul": "^0.4.3",
+ "obake": "^0.1.2",
+ "phantomjs-prebuilt": "^2.1.7",
+ "pre-commit": "^1.1.3",
+ "reamde": "^1.1.0",
+ "rimraf": "^2.5.2",
+ "size-table": "^0.2.0",
+ "tap-spec": "^4.1.1",
+ "tape": "^4.5.1"
+ },
+ "dependencies": {}
+}
diff --git a/node_modules/asynckit/parallel.js b/node_modules/asynckit/parallel.js
new file mode 100644
index 0000000..3c50344
--- /dev/null
+++ b/node_modules/asynckit/parallel.js
@@ -0,0 +1,43 @@
+var iterate = require('./lib/iterate.js')
+ , initState = require('./lib/state.js')
+ , terminator = require('./lib/terminator.js')
+ ;
+
+// Public API
+module.exports = parallel;
+
+/**
+ * Runs iterator over provided array elements in parallel
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function parallel(list, iterator, callback)
+{
+ var state = initState(list);
+
+ while (state.index < (state['keyedList'] || list).length)
+ {
+ iterate(list, iterator, state, function(error, result)
+ {
+ if (error)
+ {
+ callback(error, result);
+ return;
+ }
+
+ // looks like it's the last one
+ if (Object.keys(state.jobs).length === 0)
+ {
+ callback(null, state.results);
+ return;
+ }
+ });
+
+ state.index++;
+ }
+
+ return terminator.bind(state, callback);
+}
diff --git a/node_modules/asynckit/serial.js b/node_modules/asynckit/serial.js
new file mode 100644
index 0000000..6cd949a
--- /dev/null
+++ b/node_modules/asynckit/serial.js
@@ -0,0 +1,17 @@
+var serialOrdered = require('./serialOrdered.js');
+
+// Public API
+module.exports = serial;
+
+/**
+ * Runs iterator over provided array elements in series
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function serial(list, iterator, callback)
+{
+ return serialOrdered(list, iterator, null, callback);
+}
diff --git a/node_modules/asynckit/serialOrdered.js b/node_modules/asynckit/serialOrdered.js
new file mode 100644
index 0000000..607eafe
--- /dev/null
+++ b/node_modules/asynckit/serialOrdered.js
@@ -0,0 +1,75 @@
+var iterate = require('./lib/iterate.js')
+ , initState = require('./lib/state.js')
+ , terminator = require('./lib/terminator.js')
+ ;
+
+// Public API
+module.exports = serialOrdered;
+// sorting helpers
+module.exports.ascending = ascending;
+module.exports.descending = descending;
+
+/**
+ * Runs iterator over provided sorted array elements in series
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} sortMethod - custom sort function
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function serialOrdered(list, iterator, sortMethod, callback)
+{
+ var state = initState(list, sortMethod);
+
+ iterate(list, iterator, state, function iteratorHandler(error, result)
+ {
+ if (error)
+ {
+ callback(error, result);
+ return;
+ }
+
+ state.index++;
+
+ // are we there yet?
+ if (state.index < (state['keyedList'] || list).length)
+ {
+ iterate(list, iterator, state, iteratorHandler);
+ return;
+ }
+
+ // done here
+ callback(null, state.results);
+ });
+
+ return terminator.bind(state, callback);
+}
+
+/*
+ * -- Sort methods
+ */
+
+/**
+ * sort helper to sort array elements in ascending order
+ *
+ * @param {mixed} a - an item to compare
+ * @param {mixed} b - an item to compare
+ * @returns {number} - comparison result
+ */
+function ascending(a, b)
+{
+ return a < b ? -1 : a > b ? 1 : 0;
+}
+
+/**
+ * sort helper to sort array elements in descending order
+ *
+ * @param {mixed} a - an item to compare
+ * @param {mixed} b - an item to compare
+ * @returns {number} - comparison result
+ */
+function descending(a, b)
+{
+ return -1 * ascending(a, b);
+}
diff --git a/node_modules/asynckit/stream.js b/node_modules/asynckit/stream.js
new file mode 100644
index 0000000..d43465f
--- /dev/null
+++ b/node_modules/asynckit/stream.js
@@ -0,0 +1,21 @@
+var inherits = require('util').inherits
+ , Readable = require('stream').Readable
+ , ReadableAsyncKit = require('./lib/readable_asynckit.js')
+ , ReadableParallel = require('./lib/readable_parallel.js')
+ , ReadableSerial = require('./lib/readable_serial.js')
+ , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js')
+ ;
+
+// API
+module.exports =
+{
+ parallel : ReadableParallel,
+ serial : ReadableSerial,
+ serialOrdered : ReadableSerialOrdered,
+};
+
+inherits(ReadableAsyncKit, Readable);
+
+inherits(ReadableParallel, ReadableAsyncKit);
+inherits(ReadableSerial, ReadableAsyncKit);
+inherits(ReadableSerialOrdered, ReadableAsyncKit);
diff --git a/node_modules/axios/CHANGELOG.md b/node_modules/axios/CHANGELOG.md
new file mode 100644
index 0000000..c199599
--- /dev/null
+++ b/node_modules/axios/CHANGELOG.md
@@ -0,0 +1,943 @@
+# Changelog
+
+### 0.27.2 (April 27, 2022)
+
+Fixes and Functionality:
+- Fixed FormData posting in browser environment by reverting #3785 ([#4640](https://github.com/axios/axios/pull/4640))
+- Enhanced protocol parsing implementation ([#4639](https://github.com/axios/axios/pull/4639))
+- Fixed bundle size
+
+### 0.27.1 (April 26, 2022)
+
+Fixes and Functionality:
+- Removed import of url module in browser build due to huge size overhead and builds being broken ([#4594](https://github.com/axios/axios/pull/4594))
+- Bumped follow-redirects to ^1.14.9 ([#4615](https://github.com/axios/axios/pull/4615))
+
+### 0.27.0 (April 25, 2022)
+
+Breaking changes:
+- New toFormData helper function that allows the implementor to pass an object and allow axios to convert it to FormData ([#3757](https://github.com/axios/axios/pull/3757))
+- Removed functionality that removed the the `Content-Type` request header when passing FormData ([#3785](https://github.com/axios/axios/pull/3785))
+- **(*)** Refactored error handling implementing AxiosError as a constructor, this is a large change to error handling on the whole ([#3645](https://github.com/axios/axios/pull/3645))
+- Separated responsibility for FormData instantiation between `transformRequest` and `toFormData` ([#4470](https://github.com/axios/axios/pull/4470))
+- **(*)** Improved and fixed multiple issues with FormData support ([#4448](https://github.com/axios/axios/pull/4448))
+
+QOL and DevX improvements:
+- Added a multipart/form-data testing playground allowing contributors to debug changes easily ([#4465](https://github.com/axios/axios/pull/4465))
+
+Fixes and Functionality:
+- Refactored project file structure to avoid circular imports ([#4515](https://github.com/axios/axios/pull/4516)) & ([#4516](https://github.com/axios/axios/pull/4516))
+- Bumped follow-redirects to ^1.14.9 ([#4562](https://github.com/axios/axios/pull/4562))
+
+Internal and Tests:
+- Updated dev dependencies to latest version
+
+Documentation:
+- Fixing incorrect link in changelog ([#4551](https://github.com/axios/axios/pull/4551))
+
+Notes:
+- **(*)** Please read these pull requests before updating, these changes are very impactful and far reaching.
+
+### 0.26.1 (March 9, 2022)
+
+Fixes and Functionality:
+- Refactored project file structure to avoid circular imports ([#4220](https://github.com/axios/axios/pull/4220))
+
+### 0.26.0 (February 13, 2022)
+
+Fixes and Functionality:
+- Fixed The timeoutErrorMessage property in config not work with Node.js ([#3581](https://github.com/axios/axios/pull/3581))
+- Added errors to be displayed when the query parsing process itself fails ([#3961](https://github.com/axios/axios/pull/3961))
+- Fix/remove url required ([#4426](https://github.com/axios/axios/pull/4426))
+- Update follow-redirects dependency due to Vulnerability ([#4462](https://github.com/axios/axios/pull/4462))
+- Bump karma from 6.3.11 to 6.3.14 ([#4461](https://github.com/axios/axios/pull/4461))
+- Bump follow-redirects from 1.14.7 to 1.14.8 ([#4473](https://github.com/axios/axios/pull/4473))
+
+### 0.25.0 (January 18, 2022)
+
+Breaking changes:
+- Fixing maxBodyLength enforcement ([#3786](https://github.com/axios/axios/pull/3786))
+- Don't rely on strict mode behavior for arguments ([#3470](https://github.com/axios/axios/pull/3470))
+- Adding error handling when missing url ([#3791](https://github.com/axios/axios/pull/3791))
+- Update isAbsoluteURL.js removing escaping of non-special characters ([#3809](https://github.com/axios/axios/pull/3809))
+- Use native Array.isArray() in utils.js ([#3836](https://github.com/axios/axios/pull/3836))
+- Adding error handling inside stream end callback ([#3967](https://github.com/axios/axios/pull/3967))
+
+Fixes and Functionality:
+- Added aborted even handler ([#3916](https://github.com/axios/axios/pull/3916))
+- Header types expanded allowing `boolean` and `number` types ([#4144](https://github.com/axios/axios/pull/4144))
+- Fix cancel signature allowing cancel message to be `undefined` ([#3153](https://github.com/axios/axios/pull/3153))
+- Updated type checks to be formulated better ([#3342](https://github.com/axios/axios/pull/3342))
+- Avoid unnecessary buffer allocations ([#3321](https://github.com/axios/axios/pull/3321))
+- Adding a socket handler to keep TCP connection live when processing long living requests ([#3422](https://github.com/axios/axios/pull/3422))
+- Added toFormData helper function ([#3757](https://github.com/axios/axios/pull/3757))
+- Adding responseEncoding prop type in AxiosRequestConfig ([#3918](https://github.com/axios/axios/pull/3918))
+
+Internal and Tests:
+- Adding axios-test-instance to ecosystem ([#3496](https://github.com/axios/axios/pull/3496))
+- Optimize the logic of isAxiosError ([#3546](https://github.com/axios/axios/pull/3546))
+- Add tests and documentation to display how multiple inceptors work ([#3564](https://github.com/axios/axios/pull/3564))
+- Updating follow-redirects to version 1.14.7 ([#4379](https://github.com/axios/axios/pull/4379))
+
+Documentation:
+- Fixing changelog to show correct pull request ([#4219](https://github.com/axios/axios/pull/4219))
+- Update upgrade guide for https proxy setting ([#3604](https://github.com/axios/axios/pull/3604))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Rijk van Zanten](https://github.com/rijkvanzanten)
+- [Kohta Ito](https://github.com/koh110)
+- [Brandon Faulkner](https://github.com/bfaulk96)
+- [Stefano Magni](https://github.com/NoriSte)
+- [enofan](https://github.com/fanguangyi)
+- [Andrey Pechkurov](https://github.com/puzpuzpuz)
+- [Doowonee](https://github.com/doowonee)
+- [Emil Broman](https://github.com/emilbroman-eqt)
+- [Remco Haszing](https://github.com/remcohaszing)
+- [Black-Hole](https://github.com/BlackHole1)
+- [Wolfram Kriesing](https://github.com/wolframkriesing)
+- [Andrew Ovens](https://github.com/repl-andrew-ovens)
+- [Paulo Renato](https://github.com/PauloRSF)
+- [Ben Carp](https://github.com/carpben)
+- [Hirotaka Tagawa](https://github.com/wafuwafu13)
+- [狼族小狈](https://github.com/lzxb)
+- [C. Lewis](https://github.com/ctjlewis)
+- [Felipe Carvalho](https://github.com/FCarvalhoVII)
+- [Daniel](https://github.com/djs113)
+- [Gustavo Sales](https://github.com/gussalesdev)
+
+### 0.24.0 (October 25, 2021)
+
+Breaking changes:
+- Revert: change type of AxiosResponse to any, please read lengthy discussion here: ([#4141](https://github.com/axios/axios/issues/4141)) pull request: ([#4186](https://github.com/axios/axios/pull/4186))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Rodry](https://github.com/ImRodry)
+- [Remco Haszing](https://github.com/remcohaszing)
+- [Isaiah Thomason](https://github.com/ITenthusiasm)
+
+### 0.23.0 (October 12, 2021)
+
+Breaking changes:
+- Distinguish request and response data types ([#4116](https://github.com/axios/axios/pull/4116))
+- Change never type to unknown ([#4142](https://github.com/axios/axios/pull/4142))
+- Fixed TransitionalOptions typings ([#4147](https://github.com/axios/axios/pull/4147))
+
+Fixes and Functionality:
+- Adding globalObject: 'this' to webpack config ([#3176](https://github.com/axios/axios/pull/3176))
+- Adding insecureHTTPParser type to AxiosRequestConfig ([#4066](https://github.com/axios/axios/pull/4066))
+- Fix missing semicolon in typings ([#4115](https://github.com/axios/axios/pull/4115))
+- Fix response headers types ([#4136](https://github.com/axios/axios/pull/4136))
+
+Internal and Tests:
+- Improve timeout error when timeout is browser default ([#3209](https://github.com/axios/axios/pull/3209))
+- Fix node version on CI ([#4069](https://github.com/axios/axios/pull/4069))
+- Added testing to TypeScript portion of project ([#4140](https://github.com/axios/axios/pull/4140))
+
+Documentation:
+- Rename Angular to AngularJS ([#4114](https://github.com/axios/axios/pull/4114))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Evan-Finkelstein](https://github.com/Evan-Finkelstein)
+- [Paweł Szymański](https://github.com/Jezorko)
+- [Dobes Vandermeer](https://github.com/dobesv)
+- [Claas Augner](https://github.com/caugner)
+- [Remco Haszing](https://github.com/remcohaszing)
+- [Evgeniy](https://github.com/egmen)
+- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
+
+### 0.22.0 (October 01, 2021)
+
+Fixes and Functionality:
+- Caseless header comparing in HTTP adapter ([#2880](https://github.com/axios/axios/pull/2880))
+- Avoid package.json import fixing issues and warnings related to this ([#4041](https://github.com/axios/axios/pull/4041)), ([#4065](https://github.com/axios/axios/pull/4065))
+- Fixed cancelToken leakage and added AbortController support ([#3305](https://github.com/axios/axios/pull/3305))
+- Updating CI to run on release branches
+- Bump follow redirects version
+- Fixed default transitional config for custom Axios instance; ([#4052](https://github.com/axios/axios/pull/4052))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Matt R. Wilson](https://github.com/mastermatt)
+- [Xianming Zhong](https://github.com/chinesedfan)
+- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
+
+### 0.21.4 (September 6, 2021)
+
+Fixes and Functionality:
+- Fixing JSON transform when data is stringified. Providing backward compatibility and complying to the JSON RFC standard ([#4020](https://github.com/axios/axios/pull/4020))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Guillaume Fortaine](https://github.com/gfortaine)
+- [Yusuke Kawasaki](https://github.com/kawanet)
+- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
+
+### 0.21.3 (September 4, 2021)
+
+Fixes and Functionality:
+- Fixing response interceptor not being called when request interceptor is attached ([#4013](https://github.com/axios/axios/pull/4013))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Julian Hollmann](https://github.com/nerdbeere)
+
+### 0.21.2 (September 4, 2021)
+
+Fixes and Functionality:
+
+- Updating axios requests to be delayed by pre-emptive promise creation ([#2702](https://github.com/axios/axios/pull/2702))
+- Adding "synchronous" and "runWhen" options to interceptors api ([#2702](https://github.com/axios/axios/pull/2702))
+- Updating of transformResponse ([#3377](https://github.com/axios/axios/pull/3377))
+- Adding ability to omit User-Agent header ([#3703](https://github.com/axios/axios/pull/3703))
+- Adding multiple JSON improvements ([#3688](https://github.com/axios/axios/pull/3688), [#3763](https://github.com/axios/axios/pull/3763))
+- Fixing quadratic runtime and extra memory usage when setting a maxContentLength ([#3738](https://github.com/axios/axios/pull/3738))
+- Adding parseInt to config.timeout ([#3781](https://github.com/axios/axios/pull/3781))
+- Adding custom return type support to interceptor ([#3783](https://github.com/axios/axios/pull/3783))
+- Adding security fix for ReDoS vulnerability ([#3980](https://github.com/axios/axios/pull/3980))
+
+Internal and Tests:
+
+- Updating build dev dependencies ([#3401](https://github.com/axios/axios/pull/3401))
+- Fixing builds running on Travis CI ([#3538](https://github.com/axios/axios/pull/3538))
+- Updating follow redirect version ([#3694](https://github.com/axios/axios/pull/3694), [#3771](https://github.com/axios/axios/pull/3771))
+- Updating karma sauce launcher to fix failing sauce tests ([#3712](https://github.com/axios/axios/pull/3712), [#3717](https://github.com/axios/axios/pull/3717))
+- Updating content-type header for application/json to not contain charset field, according do RFC 8259 ([#2154](https://github.com/axios/axios/pull/2154))
+- Fixing tests by bumping karma-sauce-launcher version ([#3813](https://github.com/axios/axios/pull/3813))
+- Changing testing process from Travis CI to GitHub Actions ([#3938](https://github.com/axios/axios/pull/3938))
+
+Documentation:
+
+- Updating documentation around the use of `AUTH_TOKEN` with multiple domain endpoints ([#3539](https://github.com/axios/axios/pull/3539))
+- Remove duplication of item in changelog ([#3523](https://github.com/axios/axios/pull/3523))
+- Fixing grammatical errors ([#2642](https://github.com/axios/axios/pull/2642))
+- Fixing spelling error ([#3567](https://github.com/axios/axios/pull/3567))
+- Moving gitpod mention ([#2637](https://github.com/axios/axios/pull/2637))
+- Adding new axios documentation website link ([#3681](https://github.com/axios/axios/pull/3681), [#3707](https://github.com/axios/axios/pull/3707))
+- Updating documentation around dispatching requests ([#3772](https://github.com/axios/axios/pull/3772))
+- Adding documentation for the type guard isAxiosError ([#3767](https://github.com/axios/axios/pull/3767))
+- Adding explanation of cancel token ([#3803](https://github.com/axios/axios/pull/3803))
+- Updating CI status badge ([#3953](https://github.com/axios/axios/pull/3953))
+- Fixing errors with JSON documentation ([#3936](https://github.com/axios/axios/pull/3936))
+- Fixing README typo under Request Config ([#3825](https://github.com/axios/axios/pull/3825))
+- Adding axios-multi-api to the ecosystem file ([#3817](https://github.com/axios/axios/pull/3817))
+- Adding SECURITY.md to properly disclose security vulnerabilities ([#3981](https://github.com/axios/axios/pull/3981))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- [Jay](mailto:jasonsaayman@gmail.com)
+- [Sasha Korotkov](https://github.com/SashaKoro)
+- [Daniel Lopretto](https://github.com/timemachine3030)
+- [Mike Bishop](https://github.com/MikeBishop)
+- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS)
+- [Mark](https://github.com/bimbiltu)
+- [Philipe Gouveia Paixão](https://github.com/piiih)
+- [hippo](https://github.com/hippo2cat)
+- [ready-research](https://github.com/ready-research)
+- [Xianming Zhong](https://github.com/chinesedfan)
+- [Christopher Chrapka](https://github.com/OJezu)
+- [Brian Anglin](https://github.com/anglinb)
+- [Kohta Ito](https://github.com/koh110)
+- [Ali Clark](https://github.com/aliclark)
+- [caikan](https://github.com/caikan)
+- [Elina Gorshkova](https://github.com/elinagorshkova)
+- [Ryota Ikezawa](https://github.com/paveg)
+- [Nisar Hassan Naqvi](https://github.com/nisarhassan12)
+- [Jake](https://github.com/codemaster138)
+- [TagawaHirotaka](https://github.com/wafuwafu13)
+- [Johannes Jarbratt](https://github.com/johachi)
+- [Mo Sattler](https://github.com/MoSattler)
+- [Sam Carlton](https://github.com/ThatGuySam)
+- [Matt Czapliński](https://github.com/MattCCC)
+- [Ziding Zhang](https://github.com/zidingz)
+
+### 0.21.1 (December 21, 2020)
+
+Fixes and Functionality:
+
+- Hotfix: Prevent SSRF ([#3410](https://github.com/axios/axios/pull/3410))
+- Protocol not parsed when setting proxy config from env vars ([#3070](https://github.com/axios/axios/pull/3070))
+- Updating axios in types to be lower case ([#2797](https://github.com/axios/axios/pull/2797))
+- Adding a type guard for `AxiosError` ([#2949](https://github.com/axios/axios/pull/2949))
+
+Internal and Tests:
+
+- Remove the skipping of the `socket` http test ([#3364](https://github.com/axios/axios/pull/3364))
+- Use different socket for Win32 test ([#3375](https://github.com/axios/axios/pull/3375))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- Daniel Lopretto
+- Jason Kwok
+- Jay
+- Jonathan Foster
+- Remco Haszing
+- Xianming Zhong
+
+### 0.21.0 (October 23, 2020)
+
+Fixes and Functionality:
+
+- Fixing requestHeaders.Authorization ([#3287](https://github.com/axios/axios/pull/3287))
+- Fixing node types ([#3237](https://github.com/axios/axios/pull/3237))
+- Fixing axios.delete ignores config.data ([#3282](https://github.com/axios/axios/pull/3282))
+- Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" ([#3289](https://github.com/axios/axios/pull/3289))
+- Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled ([#3200](https://github.com/axios/axios/pull/3200))
+
+Internal and Tests:
+
+- Lock travis to not use node v15 ([#3361](https://github.com/axios/axios/pull/3361))
+
+Documentation:
+
+- Fixing simple typo, existent -> existent ([#3252](https://github.com/axios/axios/pull/3252))
+- Fixing typos ([#3309](https://github.com/axios/axios/pull/3309))
+
+Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
+
+- Allan Cruz <57270969+Allanbcruz@users.noreply.github.com>
+- George Cheng
+- Jay
+- Kevin Kirsche
+- Remco Haszing
+- Taemin Shin
+- Tim Gates
+- Xianming Zhong
+
+### 0.20.0 (August 20, 2020)
+
+Release of 0.20.0-pre as a full release with no other changes.
+
+### 0.20.0-pre (July 15, 2020)
+
+Fixes and Functionality:
+
+- Fixing response with utf-8 BOM can not parse to json ([#2419](https://github.com/axios/axios/pull/2419))
+ - fix: remove byte order marker (UTF-8 BOM) when transform response
+ - fix: remove BOM only utf-8
+ - test: utf-8 BOM
+ - fix: incorrect param name
+- Refactor mergeConfig without utils.deepMerge ([#2844](https://github.com/axios/axios/pull/2844))
+ - Adding failing test
+ - Fixing #2587 default custom config persisting
+ - Adding Concat keys and filter duplicates
+ - Fixed value from CPE
+ - update for review feedbacks
+ - no deepMerge
+ - only merge between plain objects
+ - fix rename
+ - always merge config by mergeConfig
+ - extract function mergeDeepProperties
+ - refactor mergeConfig with all keys, and add special logic for validateStatus
+ - add test for resetting headers
+ - add lots of tests and fix a bug
+ - should not inherit `data`
+ - use simple toString
+- Fixing overwrite Blob/File type as Content-Type in browser. ([#1773](https://github.com/axios/axios/pull/1773))
+- Fixing an issue that type 'null' is not assignable to validateStatus ([#2773](https://github.com/axios/axios/pull/2773))
+- Fixing special char encoding ([#1671](https://github.com/axios/axios/pull/1671))
+ - removing @ character from replacement list since it is a reserved character
+ - Updating buildURL test to not include the @ character
+ - Removing console logs
+- Fixing password encoding with special characters in basic authentication ([#1492](https://github.com/axios/axios/pull/1492))
+ - Fixing password encoding with special characters in basic authentication
+ - Adding test to check if password with non-Latin1 characters pass
+- Fixing 'Network Error' in react native android ([#1487](https://github.com/axios/axios/pull/1487))
+ There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug.
+- Fixing Cookie Helper with Async Components ([#1105](https://github.com/axios/axios/pull/1105)) ([#1107](https://github.com/axios/axios/pull/1107))
+- Fixing 'progressEvent' type ([#2851](https://github.com/axios/axios/pull/2851))
+ - Fix 'progressEvent' type
+ - Update axios.ts
+- Fixing getting local files (file://) failed ([#2470](https://github.com/axios/axios/pull/2470))
+ - fix issue #2416, #2396
+ - fix Eslint warn
+ - Modify judgment conditions
+ - add unit test
+ - update unit test
+ - update unit test
+- Allow PURGE method in typings ([#2191](https://github.com/axios/axios/pull/2191))
+- Adding option to disable automatic decompression ([#2661](https://github.com/axios/axios/pull/2661))
+ - Adding ability to disable auto decompression
+ - Updating decompress documentation in README
+ - Fixing test\unit\adapters\http.js lint errors
+ - Adding test for disabling auto decompression
+ - Removing changes that fixed lint errors in tests
+ - Removing formatting change to unit test
+- Add independent `maxBodyLength` option ([#2781](https://github.com/axios/axios/pull/2781))
+ - Add independent option to set the maximum size of the request body
+ - Remove maxBodyLength check
+ - Update README
+ - Assert for error code and message
+- Adding responseEncoding to mergeConfig ([#1745](https://github.com/axios/axios/pull/1745))
+- Compatible with follow-redirect aborts the request ([#2689](https://github.com/axios/axios/pull/2689))
+ - Compatible with follow-redirect aborts the request
+ - Use the error code
+- Fix merging of params ([#2656](https://github.com/axios/axios/pull/2656))
+ - Name function to avoid ESLint func-names warning
+ - Switch params config to merge list and update tests
+ - Restore testing of both false and null
+ - Restore test cases for keys without defaults
+ - Include test for non-object values that aren't false-y.
+- Revert `finally` as `then` ([#2683](https://github.com/axios/axios/pull/2683))
+
+Internal and Tests:
+
+- Fix stale bot config ([#3049](https://github.com/axios/axios/pull/3049))
+ - fix stale bot config
+ - fix multiple lines
+- Add days and change name to work ([#3035](https://github.com/axios/axios/pull/3035))
+- Update close-issues.yml ([#3031](https://github.com/axios/axios/pull/3031))
+ - Update close-issues.yml
+ Update close message to read better 😄
+ - Fix use of quotations
+ Use single quotes as per other .yml files
+ - Remove user name form message
+- Add GitHub actions to close stale issues/prs ([#3029](https://github.com/axios/axios/pull/3029))
+ - prepare stale actions
+ - update messages
+ - Add exempt labels and lighten up comments
+- Add GitHub actions to close invalid issues ([#3022](https://github.com/axios/axios/pull/3022))
+ - add close actions
+ - fix with checkout
+ - update issue templates
+ - add reminder
+ - update close message
+- Add test with Node.js 12 ([#2860](https://github.com/axios/axios/pull/2860))
+ - test with Node.js 12
+ - test with latest
+- Adding console log on sandbox server startup ([#2210](https://github.com/axios/axios/pull/2210))
+ - Adding console log on sandbox server startup
+ - Update server.js
+ Add server error handling
+ - Update server.js
+ Better error message, remove retry.
+- Adding tests for method `options` type definitions ([#1996](https://github.com/axios/axios/pull/1996))
+ Update tests.
+- Add test for redirecting with too large response ([#2695](https://github.com/axios/axios/pull/2695))
+- Fixing unit test failure in Windows OS ([#2601](https://github.com/axios/axios/pull/2601))
+- Fixing issue for HEAD method and gzipped response ([#2666](https://github.com/axios/axios/pull/2666))
+- Fix tests in browsers ([#2748](https://github.com/axios/axios/pull/2748))
+- chore: add `jsdelivr` and `unpkg` support ([#2443](https://github.com/axios/axios/pull/2443))
+
+Documentation:
+
+- Adding support for URLSearchParams in node ([#1900](https://github.com/axios/axios/pull/1900))
+ - Adding support for URLSearchParams in node
+ - Remove un-needed code
+ - Update utils.js
+ - Make changes as suggested
+- Adding table of content (preview) ([#3050](https://github.com/axios/axios/pull/3050))
+ - add toc (preview)
+ - remove toc in toc
+ Signed-off-by: Moni
+ - fix sublinks
+ - fix indentation
+ - remove redundant table links
+ - update caps and indent
+ - remove axios
+- Replace 'blacklist' with 'blocklist' ([#3006](https://github.com/axios/axios/pull/3006))
+- docs(): Detailed config options environment. ([#2088](https://github.com/axios/axios/pull/2088))
+ - docs(): Detailed config options environment.
+ - Update README.md
+- Include axios-data-unpacker in ECOSYSTEM.md ([#2080](https://github.com/axios/axios/pull/2080))
+- Allow opening examples in Gitpod ([#1958](https://github.com/axios/axios/pull/1958))
+- Remove axios.all() and axios.spread() from Readme.md ([#2727](https://github.com/axios/axios/pull/2727))
+ - remove axios.all(), axios.spread()
+ - replace example
+ - axios.all() -> Promise.all()
+ - axios.spread(function (acct, perms)) -> function (acct, perms)
+ - add deprecated mark
+- Update README.md ([#2887](https://github.com/axios/axios/pull/2887))
+ Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE.
+- Include swagger-taxos-codegen in ECOSYSTEM.md ([#2162](https://github.com/axios/axios/pull/2162))
+- Add CDNJS version badge in README.md ([#878](https://github.com/axios/axios/pull/878))
+ This badge will show the version on CDNJS!
+- Documentation update to clear up ambiguity in code examples ([#2928](https://github.com/axios/axios/pull/2928))
+ - Made an adjustment to the documentation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side.
+- Update README.md about validateStatus ([#2912](https://github.com/axios/axios/pull/2912))
+ Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500"
+- Updating documentation for usage form-data ([#2805](https://github.com/axios/axios/pull/2805))
+ Closes #2049
+- Fixing CHANGELOG.md issue link ([#2784](https://github.com/axios/axios/pull/2784))
+- Include axios-hooks in ECOSYSTEM.md ([#2003](https://github.com/axios/axios/pull/2003))
+- Added Response header access instructions ([#1901](https://github.com/axios/axios/pull/1901))
+ - Added Response header access instructions
+ - Added note about using bracket notation
+- Add `onUploadProgress` and `onDownloadProgress` are browser only ([#2763](https://github.com/axios/axios/pull/2763))
+ Saw in #928 and #1966 that `onUploadProgress` and `onDownloadProgress` only work in the browser and was missing that from the README.
+- Update ' sign to ` in proxy spec ([#2778](https://github.com/axios/axios/pull/2778))
+- Adding jsDelivr link in README ([#1110](https://github.com/axios/axios/pull/1110))
+ - Adding jsDelivr link
+ - Add SRI
+ - Remove SRI
+
+Huge thanks to everyone who contributed to this release via code (authors listed
+below) or via reviews and triaging on GitHub:
+
+- Alan Wang
+- Alexandru Ungureanu
+- Anubhav Srivastava
+- Benny Neugebauer
+- Cr <631807682@qq.com>
+- David
+- David Ko
+- David Tanner
+- Emily Morehouse
+- Felipe Martins
+- Fonger <5862369+Fonger@users.noreply.github.com>
+- Frostack
+- George Cheng
+- grumblerchester
+- Gustavo López
+- hexaez <45806662+hexaez@users.noreply.github.com>
+- huangzuizui
+- Ian Wijma
+- Jay
+- jeffjing
+- jennynju <46782518+jennynju@users.noreply.github.com>
+- Jimmy Liao <52391190+jimmy-liao-gogoro@users.noreply.github.com>
+- Jonathan Sharpe
+- JounQin
+- Justin Beckwith
+- Kamil Posiadała <3dcreator.pl@gmail.com>
+- Lukas Drgon
+- marcinx
+- Martti Laine
+- Michał Zarach
+- Moni
+- Motonori Iwata <121048+iwata@users.noreply.github.com>
+- Nikita Galkin
+- Petr Mares
+- Philippe Recto
+- Remco Haszing
+- rockcs1992
+- Ryan Bown
+- Samina Fu
+- Simone Busoli
+- Spencer von der Ohe
+- Sven Efftinge
+- Taegyeoung Oh
+- Taemin Shin
+- Thibault Ehrhart <1208424+ehrhart@users.noreply.github.com>
+- Xianming Zhong
+- Yasu Flores
+- Zac Delventhal
+
+### 0.19.2 (Jan 20, 2020)
+
+- Remove unnecessary XSS check ([#2679](https://github.com/axios/axios/pull/2679)) (see ([#2646](https://github.com/axios/axios/issues/2646)) for discussion)
+
+### 0.19.1 (Jan 7, 2020)
+
+Fixes and Functionality:
+
+- Fixing invalid agent issue ([#1904](https://github.com/axios/axios/pull/1904))
+- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582))
+- Delete useless default to hash ([#2458](https://github.com/axios/axios/pull/2458))
+- Fix HTTP/HTTPs agents passing to follow-redirect ([#1904](https://github.com/axios/axios/pull/1904))
+- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582))
+- Fix CI build failure ([#2570](https://github.com/axios/axios/pull/2570))
+- Remove dependency on is-buffer from package.json ([#1816](https://github.com/axios/axios/pull/1816))
+- Adding options typings ([#2341](https://github.com/axios/axios/pull/2341))
+- Adding Typescript HTTP method definition for LINK and UNLINK. ([#2444](https://github.com/axios/axios/pull/2444))
+- Update dist with newest changes, fixes Custom Attributes issue
+- Change syntax to see if build passes ([#2488](https://github.com/axios/axios/pull/2488))
+- Update Webpack + deps, remove now unnecessary polyfills ([#2410](https://github.com/axios/axios/pull/2410))
+- Fix to prevent XSS, throw an error when the URL contains a JS script ([#2464](https://github.com/axios/axios/pull/2464))
+- Add custom timeout error copy in config ([#2275](https://github.com/axios/axios/pull/2275))
+- Add error toJSON example ([#2466](https://github.com/axios/axios/pull/2466))
+- Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… ([#2451](https://github.com/axios/axios/pull/2451))
+- Fixing subdomain handling on no_proxy ([#2442](https://github.com/axios/axios/pull/2442))
+- Make redirection from HTTP to HTTPS work ([#2426](https://github.com/axios/axios/pull/2426)) and ([#2547](https://github.com/axios/axios/pull/2547))
+- Add toJSON property to AxiosError type ([#2427](https://github.com/axios/axios/pull/2427))
+- Fixing socket hang up error on node side for slow response. ([#1752](https://github.com/axios/axios/pull/1752))
+- Alternative syntax to send data into the body ([#2317](https://github.com/axios/axios/pull/2317))
+- Fixing custom config options ([#2207](https://github.com/axios/axios/pull/2207))
+- Fixing set `config.method` after mergeConfig for Axios.prototype.request ([#2383](https://github.com/axios/axios/pull/2383))
+- Axios create url bug ([#2290](https://github.com/axios/axios/pull/2290))
+- Do not modify config.url when using a relative baseURL (resolves [#1628](https://github.com/axios/axios/issues/1098)) ([#2391](https://github.com/axios/axios/pull/2391))
+
+Internal:
+
+- Revert "Update Webpack + deps, remove now unnecessary polyfills" ([#2479](https://github.com/axios/axios/pull/2479))
+- Order of if/else blocks is causing unit tests mocking XHR. ([#2201](https://github.com/axios/axios/pull/2201))
+- Add license badge ([#2446](https://github.com/axios/axios/pull/2446))
+- Fix travis CI build [#2386](https://github.com/axios/axios/pull/2386)
+- Fix cancellation error on build master. #2290 #2207 ([#2407](https://github.com/axios/axios/pull/2407))
+
+Documentation:
+
+- Fixing typo in CHANGELOG.md: s/Functionallity/Functionality ([#2639](https://github.com/axios/axios/pull/2639))
+- Fix badge, use master branch ([#2538](https://github.com/axios/axios/pull/2538))
+- Fix typo in changelog [#2193](https://github.com/axios/axios/pull/2193)
+- Document fix ([#2514](https://github.com/axios/axios/pull/2514))
+- Update docs with no_proxy change, issue #2484 ([#2513](https://github.com/axios/axios/pull/2513))
+- Fixing missing words in docs template ([#2259](https://github.com/axios/axios/pull/2259))
+- 🐛Fix request finally documentation in README ([#2189](https://github.com/axios/axios/pull/2189))
+- updating spelling and adding link to docs ([#2212](https://github.com/axios/axios/pull/2212))
+- docs: minor tweak ([#2404](https://github.com/axios/axios/pull/2404))
+- Update response interceptor docs ([#2399](https://github.com/axios/axios/pull/2399))
+- Update README.md ([#2504](https://github.com/axios/axios/pull/2504))
+- Fix word 'sintaxe' to 'syntax' in README.md ([#2432](https://github.com/axios/axios/pull/2432))
+- updating README: notes on CommonJS autocomplete ([#2256](https://github.com/axios/axios/pull/2256))
+- Fix grammar in README.md ([#2271](https://github.com/axios/axios/pull/2271))
+- Doc fixes, minor examples cleanup ([#2198](https://github.com/axios/axios/pull/2198))
+
+### 0.19.0 (May 30, 2019)
+
+Fixes and Functionality:
+
+- Added support for no_proxy env variable ([#1693](https://github.com/axios/axios/pull/1693/files)) - Chance Dickson
+- Unzip response body only for statuses != 204 ([#1129](https://github.com/axios/axios/pull/1129)) - drawski
+- Destroy stream on exceeding maxContentLength (fixes [#1098](https://github.com/axios/axios/issues/1098)) ([#1485](https://github.com/axios/axios/pull/1485)) - Gadzhi Gadzhiev
+- Makes Axios error generic to use AxiosResponse ([#1738](https://github.com/axios/axios/pull/1738)) - Suman Lama
+- Fixing Mocha tests by locking follow-redirects version to 1.5.10 ([#1993](https://github.com/axios/axios/pull/1993)) - grumblerchester
+- Allow uppercase methods in typings. ([#1781](https://github.com/axios/axios/pull/1781)) - Ken Powers
+- Fixing building url with hash mark ([#1771](https://github.com/axios/axios/pull/1771)) - Anatoly Ryabov
+- This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after `#`, because client cut everything after `#`
+- Preserve HTTP method when following redirect ([#1758](https://github.com/axios/axios/pull/1758)) - Rikki Gibson
+- Add `getUri` signature to TypeScript definition. ([#1736](https://github.com/axios/axios/pull/1736)) - Alexander Trauzzi
+- Adding isAxiosError flag to errors thrown by axios ([#1419](https://github.com/axios/axios/pull/1419)) - Ayush Gupta
+
+Internal:
+
+- Fixing .eslintrc without extension ([#1789](https://github.com/axios/axios/pull/1789)) - Manoel
+- Fix failing SauceLabs tests by updating configuration - Emily Morehouse
+- Add issue templates - Emily Morehouse
+
+Documentation:
+
+- Consistent coding style in README ([#1787](https://github.com/axios/axios/pull/1787)) - Ali Servet Donmez
+- Add information about auth parameter to README ([#2166](https://github.com/axios/axios/pull/2166)) - xlaguna
+- Add DELETE to list of methods that allow data as a config option ([#2169](https://github.com/axios/axios/pull/2169)) - Daniela Borges Matos de Carvalho
+- Update ECOSYSTEM.md - Add Axios Endpoints ([#2176](https://github.com/axios/axios/pull/2176)) - Renan
+- Add r2curl in ECOSYSTEM ([#2141](https://github.com/axios/axios/pull/2141)) - 유용우 / CX
+- Update README.md - Add instructions for installing with yarn ([#2036](https://github.com/axios/axios/pull/2036)) - Victor Hermes
+- Fixing spacing for README.md ([#2066](https://github.com/axios/axios/pull/2066)) - Josh McCarty
+- Update README.md. - Change `.then` to `.finally` in example code ([#2090](https://github.com/axios/axios/pull/2090)) - Omar Cai
+- Clarify what values responseType can have in Node ([#2121](https://github.com/axios/axios/pull/2121)) - Tyler Breisacher
+- docs(ECOSYSTEM): add axios-api-versioning ([#2020](https://github.com/axios/axios/pull/2020)) - Weffe
+- It seems that `responseType: 'blob'` doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser
+- Update README.md. - Add Querystring library note ([#1896](https://github.com/axios/axios/pull/1896)) - Dmitriy Eroshenko
+- Add react-hooks-axios to Libraries section of ECOSYSTEM.md ([#1925](https://github.com/axios/axios/pull/1925)) - Cody Chan
+- Clarify in README that default timeout is 0 (no timeout) ([#1750](https://github.com/axios/axios/pull/1750)) - Ben Standefer
+
+### 0.19.0-beta.1 (Aug 9, 2018)
+
+**NOTE:** This is a beta version of this release. There may be functionality that is broken in
+certain browsers, though we suspect that builds are hanging and not erroring. See
+https://saucelabs.com/u/axios for the most up-to-date information.
+
+New Functionality:
+
+- Add getUri method ([#1712](https://github.com/axios/axios/issues/1712))
+- Add support for no_proxy env variable ([#1693](https://github.com/axios/axios/issues/1693))
+- Add toJSON to decorated Axios errors to facilitate serialization ([#1625](https://github.com/axios/axios/issues/1625))
+- Add second then on axios call ([#1623](https://github.com/axios/axios/issues/1623))
+- Typings: allow custom return types
+- Add option to specify character set in responses (with http adapter)
+
+Fixes:
+
+- Fix Keep defaults local to instance ([#385](https://github.com/axios/axios/issues/385))
+- Correctly catch exception in http test ([#1475](https://github.com/axios/axios/issues/1475))
+- Fix accept header normalization ([#1698](https://github.com/axios/axios/issues/1698))
+- Fix http adapter to allow HTTPS connections via HTTP ([#959](https://github.com/axios/axios/issues/959))
+- Fix Removes usage of deprecated Buffer constructor. ([#1555](https://github.com/axios/axios/issues/1555), [#1622](https://github.com/axios/axios/issues/1622))
+- Fix defaults to use httpAdapter if available ([#1285](https://github.com/axios/axios/issues/1285))
+ - Fixing defaults to use httpAdapter if available
+ - Use a safer, cross-platform method to detect the Node environment
+- Fix Reject promise if request is cancelled by the browser ([#537](https://github.com/axios/axios/issues/537))
+- [Typescript] Fix missing type parameters on delete/head methods
+- [NS]: Send `false` flag isStandardBrowserEnv for Nativescript
+- Fix missing type parameters on delete/head
+- Fix Default method for an instance always overwritten by get
+- Fix type error when socketPath option in AxiosRequestConfig
+- Capture errors on request data streams
+- Decorate resolve and reject to clear timeout in all cases
+
+Huge thanks to everyone who contributed to this release via code (authors listed
+below) or via reviews and triaging on GitHub:
+
+- Andrew Scott
+- Anthony Gauthier
+- arpit
+- ascott18
+- Benedikt Rötsch
+- Chance Dickson
+- Dave Stewart
+- Deric Cain
+- Guillaume Briday
+- Jacob Wejendorp
+- Jim Lynch
+- johntron
+- Justin Beckwith
+- Justin Beckwith
+- Khaled Garbaya
+- Lim Jing Rong
+- Mark van den Broek
+- Martti Laine
+- mattridley
+- mattridley
+- Nicolas Del Valle
+- Nilegfx
+- pbarbiero
+- Rikki Gibson
+- Sako Hartounian
+- Shane Fitzpatrick
+- Stephan Schneider
+- Steven
+- Tim Garthwaite
+- Tim Johns
+- Yutaro Miyazaki
+
+### 0.18.0 (Feb 19, 2018)
+
+- Adding support for UNIX Sockets when running with Node.js ([#1070](https://github.com/axios/axios/pull/1070))
+- Fixing typings ([#1177](https://github.com/axios/axios/pull/1177)):
+ - AxiosRequestConfig.proxy: allows type false
+ - AxiosProxyConfig: added auth field
+- Adding function signature in AxiosInstance interface so AxiosInstance can be invoked ([#1192](https://github.com/axios/axios/pull/1192), [#1254](https://github.com/axios/axios/pull/1254))
+- Allowing maxContentLength to pass through to redirected calls as maxBodyLength in follow-redirects config ([#1287](https://github.com/axios/axios/pull/1287))
+- Fixing configuration when using an instance - method can now be set ([#1342](https://github.com/axios/axios/pull/1342))
+
+### 0.17.1 (Nov 11, 2017)
+
+- Fixing issue with web workers ([#1160](https://github.com/axios/axios/pull/1160))
+- Allowing overriding transport ([#1080](https://github.com/axios/axios/pull/1080))
+- Updating TypeScript typings ([#1165](https://github.com/axios/axios/pull/1165), [#1125](https://github.com/axios/axios/pull/1125), [#1131](https://github.com/axios/axios/pull/1131))
+
+### 0.17.0 (Oct 21, 2017)
+
+- **BREAKING** Fixing issue with `baseURL` and interceptors ([#950](https://github.com/axios/axios/pull/950))
+- **BREAKING** Improving handing of duplicate headers ([#874](https://github.com/axios/axios/pull/874))
+- Adding support for disabling proxies ([#691](https://github.com/axios/axios/pull/691))
+- Updating TypeScript typings with generic type parameters ([#1061](https://github.com/axios/axios/pull/1061))
+
+### 0.16.2 (Jun 3, 2017)
+
+- Fixing issue with including `buffer` in bundle ([#887](https://github.com/axios/axios/pull/887))
+- Including underlying request in errors ([#830](https://github.com/axios/axios/pull/830))
+- Convert `method` to lowercase ([#930](https://github.com/axios/axios/pull/930))
+
+### 0.16.1 (Apr 8, 2017)
+
+- Improving HTTP adapter to return last request in case of redirects ([#828](https://github.com/axios/axios/pull/828))
+- Updating `follow-redirects` dependency ([#829](https://github.com/axios/axios/pull/829))
+- Adding support for passing `Buffer` in node ([#773](https://github.com/axios/axios/pull/773))
+
+### 0.16.0 (Mar 31, 2017)
+
+- **BREAKING** Removing `Promise` from axios typings in favor of built-in type declarations ([#480](https://github.com/axios/axios/issues/480))
+- Adding `options` shortcut method ([#461](https://github.com/axios/axios/pull/461))
+- Fixing issue with using `responseType: 'json'` in browsers incompatible with XHR Level 2 ([#654](https://github.com/axios/axios/pull/654))
+- Improving React Native detection ([#731](https://github.com/axios/axios/pull/731))
+- Fixing `combineURLs` to support empty `relativeURL` ([#581](https://github.com/axios/axios/pull/581))
+- Removing `PROTECTION_PREFIX` support ([#561](https://github.com/axios/axios/pull/561))
+
+### 0.15.3 (Nov 27, 2016)
+
+- Fixing issue with custom instances and global defaults ([#443](https://github.com/axios/axios/issues/443))
+- Renaming `axios.d.ts` to `index.d.ts` ([#519](https://github.com/axios/axios/issues/519))
+- Adding `get`, `head`, and `delete` to `defaults.headers` ([#509](https://github.com/axios/axios/issues/509))
+- Fixing issue with `btoa` and IE ([#507](https://github.com/axios/axios/issues/507))
+- Adding support for proxy authentication ([#483](https://github.com/axios/axios/pull/483))
+- Improving HTTP adapter to use `http` protocol by default ([#493](https://github.com/axios/axios/pull/493))
+- Fixing proxy issues ([#491](https://github.com/axios/axios/pull/491))
+
+### 0.15.2 (Oct 17, 2016)
+
+- Fixing issue with calling `cancel` after response has been received ([#482](https://github.com/axios/axios/issues/482))
+
+### 0.15.1 (Oct 14, 2016)
+
+- Fixing issue with UMD ([#485](https://github.com/axios/axios/issues/485))
+
+### 0.15.0 (Oct 10, 2016)
+
+- Adding cancellation support ([#452](https://github.com/axios/axios/pull/452))
+- Moving default adapter to global defaults ([#437](https://github.com/axios/axios/pull/437))
+- Fixing issue with `file` URI scheme ([#440](https://github.com/axios/axios/pull/440))
+- Fixing issue with `params` objects that have no prototype ([#445](https://github.com/axios/axios/pull/445))
+
+### 0.14.0 (Aug 27, 2016)
+
+- **BREAKING** Updating TypeScript definitions ([#419](https://github.com/axios/axios/pull/419))
+- **BREAKING** Replacing `agent` option with `httpAgent` and `httpsAgent` ([#387](https://github.com/axios/axios/pull/387))
+- **BREAKING** Splitting `progress` event handlers into `onUploadProgress` and `onDownloadProgress` ([#423](https://github.com/axios/axios/pull/423))
+- Adding support for `http_proxy` and `https_proxy` environment variables ([#366](https://github.com/axios/axios/pull/366))
+- Fixing issue with `auth` config option and `Authorization` header ([#397](https://github.com/axios/axios/pull/397))
+- Don't set XSRF header if `xsrfCookieName` is `null` ([#406](https://github.com/axios/axios/pull/406))
+
+### 0.13.1 (Jul 16, 2016)
+
+- Fixing issue with response data not being transformed on error ([#378](https://github.com/axios/axios/issues/378))
+
+### 0.13.0 (Jul 13, 2016)
+
+- **BREAKING** Improved error handling ([#345](https://github.com/axios/axios/pull/345))
+- **BREAKING** Response transformer now invoked in dispatcher not adapter ([10eb238](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e))
+- **BREAKING** Request adapters now return a `Promise` ([157efd5](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a))
+- Fixing issue with `withCredentials` not being overwritten ([#343](https://github.com/axios/axios/issues/343))
+- Fixing regression with request transformer being called before request interceptor ([#352](https://github.com/axios/axios/issues/352))
+- Fixing custom instance defaults ([#341](https://github.com/axios/axios/issues/341))
+- Fixing instances created from `axios.create` to have same API as default axios ([#217](https://github.com/axios/axios/issues/217))
+
+### 0.12.0 (May 31, 2016)
+
+- Adding support for `URLSearchParams` ([#317](https://github.com/axios/axios/pull/317))
+- Adding `maxRedirects` option ([#307](https://github.com/axios/axios/pull/307))
+
+### 0.11.1 (May 17, 2016)
+
+- Fixing IE CORS support ([#313](https://github.com/axios/axios/pull/313))
+- Fixing detection of `FormData` ([#325](https://github.com/axios/axios/pull/325))
+- Adding `Axios` class to exports ([#321](https://github.com/axios/axios/pull/321))
+
+### 0.11.0 (Apr 26, 2016)
+
+- Adding support for Stream with HTTP adapter ([#296](https://github.com/axios/axios/pull/296))
+- Adding support for custom HTTP status code error ranges ([#308](https://github.com/axios/axios/pull/308))
+- Fixing issue with ArrayBuffer ([#299](https://github.com/axios/axios/pull/299))
+
+### 0.10.0 (Apr 20, 2016)
+
+- Fixing issue with some requests sending `undefined` instead of `null` ([#250](https://github.com/axios/axios/pull/250))
+- Fixing basic auth for HTTP adapter ([#252](https://github.com/axios/axios/pull/252))
+- Fixing request timeout for XHR adapter ([#227](https://github.com/axios/axios/pull/227))
+- Fixing IE8 support by using `onreadystatechange` instead of `onload` ([#249](https://github.com/axios/axios/pull/249))
+- Fixing IE9 cross domain requests ([#251](https://github.com/axios/axios/pull/251))
+- Adding `maxContentLength` option ([#275](https://github.com/axios/axios/pull/275))
+- Fixing XHR support for WebWorker environment ([#279](https://github.com/axios/axios/pull/279))
+- Adding request instance to response ([#200](https://github.com/axios/axios/pull/200))
+
+### 0.9.1 (Jan 24, 2016)
+
+- Improving handling of request timeout in node ([#124](https://github.com/axios/axios/issues/124))
+- Fixing network errors not rejecting ([#205](https://github.com/axios/axios/pull/205))
+- Fixing issue with IE rejecting on HTTP 204 ([#201](https://github.com/axios/axios/issues/201))
+- Fixing host/port when following redirects ([#198](https://github.com/axios/axios/pull/198))
+
+### 0.9.0 (Jan 18, 2016)
+
+- Adding support for custom adapters
+- Fixing Content-Type header being removed when data is false ([#195](https://github.com/axios/axios/pull/195))
+- Improving XDomainRequest implementation ([#185](https://github.com/axios/axios/pull/185))
+- Improving config merging and order of precedence ([#183](https://github.com/axios/axios/pull/183))
+- Fixing XDomainRequest support for only <= IE9 ([#182](https://github.com/axios/axios/pull/182))
+
+### 0.8.1 (Dec 14, 2015)
+
+- Adding support for passing XSRF token for cross domain requests when using `withCredentials` ([#168](https://github.com/axios/axios/pull/168))
+- Fixing error with format of basic auth header ([#178](https://github.com/axios/axios/pull/173))
+- Fixing error with JSON payloads throwing `InvalidStateError` in some cases ([#174](https://github.com/axios/axios/pull/174))
+
+### 0.8.0 (Dec 11, 2015)
+
+- Adding support for creating instances of axios ([#123](https://github.com/axios/axios/pull/123))
+- Fixing http adapter to use `Buffer` instead of `String` in case of `responseType === 'arraybuffer'` ([#128](https://github.com/axios/axios/pull/128))
+- Adding support for using custom parameter serializer with `paramsSerializer` option ([#121](https://github.com/axios/axios/pull/121))
+- Fixing issue in IE8 caused by `forEach` on `arguments` ([#127](https://github.com/axios/axios/pull/127))
+- Adding support for following redirects in node ([#146](https://github.com/axios/axios/pull/146))
+- Adding support for transparent decompression if `content-encoding` is set ([#149](https://github.com/axios/axios/pull/149))
+- Adding support for transparent XDomainRequest to handle cross domain requests in IE9 ([#140](https://github.com/axios/axios/pull/140))
+- Adding support for HTTP basic auth via Authorization header ([#167](https://github.com/axios/axios/pull/167))
+- Adding support for baseURL option ([#160](https://github.com/axios/axios/pull/160))
+
+### 0.7.0 (Sep 29, 2015)
+
+- Fixing issue with minified bundle in IE8 ([#87](https://github.com/axios/axios/pull/87))
+- Adding support for passing agent in node ([#102](https://github.com/axios/axios/pull/102))
+- Adding support for returning result from `axios.spread` for chaining ([#106](https://github.com/axios/axios/pull/106))
+- Fixing typescript definition ([#105](https://github.com/axios/axios/pull/105))
+- Fixing default timeout config for node ([#112](https://github.com/axios/axios/pull/112))
+- Adding support for use in web workers, and react-native ([#70](https://github.com/axios/axios/issue/70)), ([#98](https://github.com/axios/axios/pull/98))
+- Adding support for fetch like API `axios(url[, config])` ([#116](https://github.com/axios/axios/issues/116))
+
+### 0.6.0 (Sep 21, 2015)
+
+- Removing deprecated success/error aliases
+- Fixing issue with array params not being properly encoded ([#49](https://github.com/axios/axios/pull/49))
+- Fixing issue with User-Agent getting overridden ([#69](https://github.com/axios/axios/issues/69))
+- Adding support for timeout config ([#56](https://github.com/axios/axios/issues/56))
+- Removing es6-promise dependency
+- Fixing issue preventing `length` to be used as a parameter ([#91](https://github.com/axios/axios/pull/91))
+- Fixing issue with IE8 ([#85](https://github.com/axios/axios/pull/85))
+- Converting build to UMD
+
+### 0.5.4 (Apr 08, 2015)
+
+- Fixing issue with FormData not being sent ([#53](https://github.com/axios/axios/issues/53))
+
+### 0.5.3 (Apr 07, 2015)
+
+- Using JSON.parse unconditionally when transforming response string ([#55](https://github.com/axios/axios/issues/55))
+
+### 0.5.2 (Mar 13, 2015)
+
+- Adding support for `statusText` in response ([#46](https://github.com/axios/axios/issues/46))
+
+### 0.5.1 (Mar 10, 2015)
+
+- Fixing issue using strict mode ([#45](https://github.com/axios/axios/issues/45))
+- Fixing issue with standalone build ([#47](https://github.com/axios/axios/issues/47))
+
+### 0.5.0 (Jan 23, 2015)
+
+- Adding support for intercepetors ([#14](https://github.com/axios/axios/issues/14))
+- Updating es6-promise dependency
+
+### 0.4.2 (Dec 10, 2014)
+
+- Fixing issue with `Content-Type` when using `FormData` ([#22](https://github.com/axios/axios/issues/22))
+- Adding support for TypeScript ([#25](https://github.com/axios/axios/issues/25))
+- Fixing issue with standalone build ([#29](https://github.com/axios/axios/issues/29))
+- Fixing issue with verbs needing to be capitalized in some browsers ([#30](https://github.com/axios/axios/issues/30))
+
+### 0.4.1 (Oct 15, 2014)
+
+- Adding error handling to request for node.js ([#18](https://github.com/axios/axios/issues/18))
+
+### 0.4.0 (Oct 03, 2014)
+
+- Adding support for `ArrayBuffer` and `ArrayBufferView` ([#10](https://github.com/axios/axios/issues/10))
+- Adding support for utf-8 for node.js ([#13](https://github.com/axios/axios/issues/13))
+- Adding support for SSL for node.js ([#12](https://github.com/axios/axios/issues/12))
+- Fixing incorrect `Content-Type` header ([#9](https://github.com/axios/axios/issues/9))
+- Adding standalone build without bundled es6-promise ([#11](https://github.com/axios/axios/issues/11))
+- Deprecating `success`/`error` in favor of `then`/`catch`
+
+### 0.3.1 (Sep 16, 2014)
+
+- Fixing missing post body when using node.js ([#3](https://github.com/axios/axios/issues/3))
+
+### 0.3.0 (Sep 16, 2014)
+
+- Fixing `success` and `error` to properly receive response data as individual arguments ([#8](https://github.com/axios/axios/issues/8))
+- Updating `then` and `catch` to receive response data as a single object ([#6](https://github.com/axios/axios/issues/6))
+- Fixing issue with `all` not working ([#7](https://github.com/axios/axios/issues/7))
+
+### 0.2.2 (Sep 14, 2014)
+
+- Fixing bundling with browserify ([#4](https://github.com/axios/axios/issues/4))
+
+### 0.2.1 (Sep 12, 2014)
+
+- Fixing build problem causing ridiculous file sizes
+
+### 0.2.0 (Sep 12, 2014)
+
+- Adding support for `all` and `spread`
+- Adding support for node.js ([#1](https://github.com/axios/axios/issues/1))
+
+### 0.1.0 (Aug 29, 2014)
+
+- Initial release
diff --git a/node_modules/axios/LICENSE b/node_modules/axios/LICENSE
new file mode 100644
index 0000000..d36c80e
--- /dev/null
+++ b/node_modules/axios/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014-present Matt Zabriskie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/axios/README.md b/node_modules/axios/README.md
new file mode 100644
index 0000000..66906d8
--- /dev/null
+++ b/node_modules/axios/README.md
@@ -0,0 +1,991 @@
+# axios
+
+[](https://www.npmjs.org/package/axios)
+[](https://cdnjs.com/libraries/axios)
+
+[](https://gitpod.io/#https://github.com/axios/axios)
+[](https://coveralls.io/r/mzabriskie/axios)
+[](https://packagephobia.now.sh/result?p=axios)
+[](http://npm-stat.com/charts.html?package=axios)
+[](https://gitter.im/mzabriskie/axios)
+[](https://www.codetriage.com/axios/axios)
+[](https://snyk.io/test/npm/axios)
+
+Promise based HTTP client for the browser and node.js
+
+> New axios docs website: [click here](https://axios-http.com/)
+
+## Table of Contents
+
+ - [Features](#features)
+ - [Browser Support](#browser-support)
+ - [Installing](#installing)
+ - [Example](#example)
+ - [Axios API](#axios-api)
+ - [Request method aliases](#request-method-aliases)
+ - [Concurrency 👎](#concurrency-deprecated)
+ - [Creating an instance](#creating-an-instance)
+ - [Instance methods](#instance-methods)
+ - [Request Config](#request-config)
+ - [Response Schema](#response-schema)
+ - [Config Defaults](#config-defaults)
+ - [Global axios defaults](#global-axios-defaults)
+ - [Custom instance defaults](#custom-instance-defaults)
+ - [Config order of precedence](#config-order-of-precedence)
+ - [Interceptors](#interceptors)
+ - [Multiple Interceptors](#multiple-interceptors)
+ - [Handling Errors](#handling-errors)
+ - [Cancellation](#cancellation)
+ - [AbortController](#abortcontroller)
+ - [CancelToken 👎](#canceltoken-deprecated)
+ - [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format)
+ - [Browser](#browser)
+ - [Node.js](#nodejs)
+ - [Query string](#query-string)
+ - [Form data](#form-data)
+ - [Automatic serialization](#-automatic-serialization)
+ - [Manual FormData passing](#manual-formdata-passing)
+ - [Semver](#semver)
+ - [Promises](#promises)
+ - [TypeScript](#typescript)
+ - [Resources](#resources)
+ - [Credits](#credits)
+ - [License](#license)
+
+## Features
+
+- Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser
+- Make [http](http://nodejs.org/api/http.html) requests from node.js
+- Supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API
+- Intercept request and response
+- Transform request and response data
+- Cancel requests
+- Automatic transforms for JSON data
+- Client side support for protecting against [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
+
+## Browser Support
+
+ |  |  |  |  |  |
+--- | --- | --- | --- | --- | --- |
+Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 11 ✔ |
+
+[](https://saucelabs.com/u/axios)
+
+## Installing
+
+Using npm:
+
+```bash
+$ npm install axios
+```
+
+Using bower:
+
+```bash
+$ bower install axios
+```
+
+Using yarn:
+
+```bash
+$ yarn add axios
+```
+
+Using jsDelivr CDN:
+
+```html
+
+```
+
+Using unpkg CDN:
+
+```html
+
+```
+
+## Example
+
+### note: CommonJS usage
+In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with `require()` use the following approach:
+
+```js
+const axios = require('axios').default;
+
+// axios. will now provide autocomplete and parameter typings
+```
+
+Performing a `GET` request
+
+```js
+const axios = require('axios').default;
+
+// Make a request for a user with a given ID
+axios.get('/user?ID=12345')
+ .then(function (response) {
+ // handle success
+ console.log(response);
+ })
+ .catch(function (error) {
+ // handle error
+ console.log(error);
+ })
+ .then(function () {
+ // always executed
+ });
+
+// Optionally the request above could also be done as
+axios.get('/user', {
+ params: {
+ ID: 12345
+ }
+ })
+ .then(function (response) {
+ console.log(response);
+ })
+ .catch(function (error) {
+ console.log(error);
+ })
+ .then(function () {
+ // always executed
+ });
+
+// Want to use async/await? Add the `async` keyword to your outer function/method.
+async function getUser() {
+ try {
+ const response = await axios.get('/user?ID=12345');
+ console.log(response);
+ } catch (error) {
+ console.error(error);
+ }
+}
+```
+
+> **NOTE:** `async/await` is part of ECMAScript 2017 and is not supported in Internet
+> Explorer and older browsers, so use with caution.
+
+Performing a `POST` request
+
+```js
+axios.post('/user', {
+ firstName: 'Fred',
+ lastName: 'Flintstone'
+ })
+ .then(function (response) {
+ console.log(response);
+ })
+ .catch(function (error) {
+ console.log(error);
+ });
+```
+
+Performing multiple concurrent requests
+
+```js
+function getUserAccount() {
+ return axios.get('/user/12345');
+}
+
+function getUserPermissions() {
+ return axios.get('/user/12345/permissions');
+}
+
+Promise.all([getUserAccount(), getUserPermissions()])
+ .then(function (results) {
+ const acct = results[0];
+ const perm = results[1];
+ });
+```
+
+## axios API
+
+Requests can be made by passing the relevant config to `axios`.
+
+##### axios(config)
+
+```js
+// Send a POST request
+axios({
+ method: 'post',
+ url: '/user/12345',
+ data: {
+ firstName: 'Fred',
+ lastName: 'Flintstone'
+ }
+});
+```
+
+```js
+// GET request for remote image in node.js
+axios({
+ method: 'get',
+ url: 'http://bit.ly/2mTM3nY',
+ responseType: 'stream'
+})
+ .then(function (response) {
+ response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
+ });
+```
+
+##### axios(url[, config])
+
+```js
+// Send a GET request (default method)
+axios('/user/12345');
+```
+
+### Request method aliases
+
+For convenience, aliases have been provided for all common request methods.
+
+##### axios.request(config)
+##### axios.get(url[, config])
+##### axios.delete(url[, config])
+##### axios.head(url[, config])
+##### axios.options(url[, config])
+##### axios.post(url[, data[, config]])
+##### axios.put(url[, data[, config]])
+##### axios.patch(url[, data[, config]])
+
+###### NOTE
+When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config.
+
+### Concurrency (Deprecated)
+Please use `Promise.all` to replace the below functions.
+
+Helper functions for dealing with concurrent requests.
+
+axios.all(iterable)
+axios.spread(callback)
+
+### Creating an instance
+
+You can create a new instance of axios with a custom config.
+
+##### axios.create([config])
+
+```js
+const instance = axios.create({
+ baseURL: 'https://some-domain.com/api/',
+ timeout: 1000,
+ headers: {'X-Custom-Header': 'foobar'}
+});
+```
+
+### Instance methods
+
+The available instance methods are listed below. The specified config will be merged with the instance config.
+
+##### axios#request(config)
+##### axios#get(url[, config])
+##### axios#delete(url[, config])
+##### axios#head(url[, config])
+##### axios#options(url[, config])
+##### axios#post(url[, data[, config]])
+##### axios#put(url[, data[, config]])
+##### axios#patch(url[, data[, config]])
+##### axios#getUri([config])
+
+## Request Config
+
+These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified.
+
+```js
+{
+ // `url` is the server URL that will be used for the request
+ url: '/user',
+
+ // `method` is the request method to be used when making the request
+ method: 'get', // default
+
+ // `baseURL` will be prepended to `url` unless `url` is absolute.
+ // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
+ // to methods of that instance.
+ baseURL: 'https://some-domain.com/api/',
+
+ // `transformRequest` allows changes to the request data before it is sent to the server
+ // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE'
+ // The last function in the array must return a string or an instance of Buffer, ArrayBuffer,
+ // FormData or Stream
+ // You may modify the headers object.
+ transformRequest: [function (data, headers) {
+ // Do whatever you want to transform the data
+
+ return data;
+ }],
+
+ // `transformResponse` allows changes to the response data to be made before
+ // it is passed to then/catch
+ transformResponse: [function (data) {
+ // Do whatever you want to transform the data
+
+ return data;
+ }],
+
+ // `headers` are custom headers to be sent
+ headers: {'X-Requested-With': 'XMLHttpRequest'},
+
+ // `params` are the URL parameters to be sent with the request
+ // Must be a plain object or a URLSearchParams object
+ params: {
+ ID: 12345
+ },
+
+ // `paramsSerializer` is an optional function in charge of serializing `params`
+ // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
+ paramsSerializer: function (params) {
+ return Qs.stringify(params, {arrayFormat: 'brackets'})
+ },
+
+ // `data` is the data to be sent as the request body
+ // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH'
+ // When no `transformRequest` is set, must be of one of the following types:
+ // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
+ // - Browser only: FormData, File, Blob
+ // - Node only: Stream, Buffer
+ data: {
+ firstName: 'Fred'
+ },
+
+ // syntax alternative to send data into the body
+ // method post
+ // only the value is sent, not the key
+ data: 'Country=Brasil&City=Belo Horizonte',
+
+ // `timeout` specifies the number of milliseconds before the request times out.
+ // If the request takes longer than `timeout`, the request will be aborted.
+ timeout: 1000, // default is `0` (no timeout)
+
+ // `withCredentials` indicates whether or not cross-site Access-Control requests
+ // should be made using credentials
+ withCredentials: false, // default
+
+ // `adapter` allows custom handling of requests which makes testing easier.
+ // Return a promise and supply a valid response (see lib/adapters/README.md).
+ adapter: function (config) {
+ /* ... */
+ },
+
+ // `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
+ // This will set an `Authorization` header, overwriting any existing
+ // `Authorization` custom headers you have set using `headers`.
+ // Please note that only HTTP Basic auth is configurable through this parameter.
+ // For Bearer tokens and such, use `Authorization` custom headers instead.
+ auth: {
+ username: 'janedoe',
+ password: 's00pers3cret'
+ },
+
+ // `responseType` indicates the type of data that the server will respond with
+ // options are: 'arraybuffer', 'document', 'json', 'text', 'stream'
+ // browser only: 'blob'
+ responseType: 'json', // default
+
+ // `responseEncoding` indicates encoding to use for decoding responses (Node.js only)
+ // Note: Ignored for `responseType` of 'stream' or client-side requests
+ responseEncoding: 'utf8', // default
+
+ // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
+ xsrfCookieName: 'XSRF-TOKEN', // default
+
+ // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
+ xsrfHeaderName: 'X-XSRF-TOKEN', // default
+
+ // `onUploadProgress` allows handling of progress events for uploads
+ // browser only
+ onUploadProgress: function (progressEvent) {
+ // Do whatever you want with the native progress event
+ },
+
+ // `onDownloadProgress` allows handling of progress events for downloads
+ // browser only
+ onDownloadProgress: function (progressEvent) {
+ // Do whatever you want with the native progress event
+ },
+
+ // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js
+ maxContentLength: 2000,
+
+ // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed
+ maxBodyLength: 2000,
+
+ // `validateStatus` defines whether to resolve or reject the promise for a given
+ // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
+ // or `undefined`), the promise will be resolved; otherwise, the promise will be
+ // rejected.
+ validateStatus: function (status) {
+ return status >= 200 && status < 300; // default
+ },
+
+ // `maxRedirects` defines the maximum number of redirects to follow in node.js.
+ // If set to 0, no redirects will be followed.
+ maxRedirects: 21, // default
+
+ // `beforeRedirect` defines a function that will be called before redirect.
+ // Use this to adjust the request options upon redirecting,
+ // to inspect the latest response headers,
+ // or to cancel the request by throwing an error
+ // If maxRedirects is set to 0, `beforeRedirect` is not used.
+ beforeRedirect: (options, { headers }) => {
+ if (options.hostname === "example.com") {
+ options.auth = "user:password";
+ }
+ };
+
+ // `socketPath` defines a UNIX Socket to be used in node.js.
+ // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
+ // Only either `socketPath` or `proxy` can be specified.
+ // If both are specified, `socketPath` is used.
+ socketPath: null, // default
+
+ // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
+ // and https requests, respectively, in node.js. This allows options to be added like
+ // `keepAlive` that are not enabled by default.
+ httpAgent: new http.Agent({ keepAlive: true }),
+ httpsAgent: new https.Agent({ keepAlive: true }),
+
+ // `proxy` defines the hostname, port, and protocol of the proxy server.
+ // You can also define your proxy using the conventional `http_proxy` and
+ // `https_proxy` environment variables. If you are using environment variables
+ // for your proxy configuration, you can also define a `no_proxy` environment
+ // variable as a comma-separated list of domains that should not be proxied.
+ // Use `false` to disable proxies, ignoring environment variables.
+ // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
+ // supplies credentials.
+ // This will set an `Proxy-Authorization` header, overwriting any existing
+ // `Proxy-Authorization` custom headers you have set using `headers`.
+ // If the proxy server uses HTTPS, then you must set the protocol to `https`.
+ proxy: {
+ protocol: 'https',
+ host: '127.0.0.1',
+ port: 9000,
+ auth: {
+ username: 'mikeymike',
+ password: 'rapunz3l'
+ }
+ },
+
+ // `cancelToken` specifies a cancel token that can be used to cancel the request
+ // (see Cancellation section below for details)
+ cancelToken: new CancelToken(function (cancel) {
+ }),
+
+ // an alternative way to cancel Axios requests using AbortController
+ signal: new AbortController().signal,
+
+ // `decompress` indicates whether or not the response body should be decompressed
+ // automatically. If set to `true` will also remove the 'content-encoding' header
+ // from the responses objects of all decompressed responses
+ // - Node only (XHR cannot turn off decompression)
+ decompress: true // default
+
+ // `insecureHTTPParser` boolean.
+ // Indicates where to use an insecure HTTP parser that accepts invalid HTTP headers.
+ // This may allow interoperability with non-conformant HTTP implementations.
+ // Using the insecure parser should be avoided.
+ // see options https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_url_options_callback
+ // see also https://nodejs.org/en/blog/vulnerability/february-2020-security-releases/#strict-http-header-parsing-none
+ insecureHTTPParser: undefined // default
+
+ // transitional options for backward compatibility that may be removed in the newer versions
+ transitional: {
+ // silent JSON parsing mode
+ // `true` - ignore JSON parsing errors and set response.data to null if parsing failed (old behaviour)
+ // `false` - throw SyntaxError if JSON parsing failed (Note: responseType must be set to 'json')
+ silentJSONParsing: true, // default value for the current Axios version
+
+ // try to parse the response string as JSON even if `responseType` is not 'json'
+ forcedJSONParsing: true,
+
+ // throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts
+ clarifyTimeoutError: false,
+ },
+
+ env: {
+ // The FormData class to be used to automatically serialize the payload into a FormData object
+ FormData: window?.FormData || global?.FormData
+ }
+}
+```
+
+## Response Schema
+
+The response for a request contains the following information.
+
+```js
+{
+ // `data` is the response that was provided by the server
+ data: {},
+
+ // `status` is the HTTP status code from the server response
+ status: 200,
+
+ // `statusText` is the HTTP status message from the server response
+ statusText: 'OK',
+
+ // `headers` the HTTP headers that the server responded with
+ // All header names are lower cased and can be accessed using the bracket notation.
+ // Example: `response.headers['content-type']`
+ headers: {},
+
+ // `config` is the config that was provided to `axios` for the request
+ config: {},
+
+ // `request` is the request that generated this response
+ // It is the last ClientRequest instance in node.js (in redirects)
+ // and an XMLHttpRequest instance in the browser
+ request: {}
+}
+```
+
+When using `then`, you will receive the response as follows:
+
+```js
+axios.get('/user/12345')
+ .then(function (response) {
+ console.log(response.data);
+ console.log(response.status);
+ console.log(response.statusText);
+ console.log(response.headers);
+ console.log(response.config);
+ });
+```
+
+When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section.
+
+## Config Defaults
+
+You can specify config defaults that will be applied to every request.
+
+### Global axios defaults
+
+```js
+axios.defaults.baseURL = 'https://api.example.com';
+
+// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them.
+// See below for an example using Custom instance defaults instead.
+axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
+
+axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
+```
+
+### Custom instance defaults
+
+```js
+// Set config defaults when creating the instance
+const instance = axios.create({
+ baseURL: 'https://api.example.com'
+});
+
+// Alter defaults after instance has been created
+instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
+```
+
+### Config order of precedence
+
+Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults.js](https://github.com/axios/axios/blob/master/lib/defaults.js#L28), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example.
+
+```js
+// Create an instance using the config defaults provided by the library
+// At this point the timeout config value is `0` as is the default for the library
+const instance = axios.create();
+
+// Override timeout default for the library
+// Now all requests using this instance will wait 2.5 seconds before timing out
+instance.defaults.timeout = 2500;
+
+// Override timeout for this request as it's known to take a long time
+instance.get('/longRequest', {
+ timeout: 5000
+});
+```
+
+## Interceptors
+
+You can intercept requests or responses before they are handled by `then` or `catch`.
+
+```js
+// Add a request interceptor
+axios.interceptors.request.use(function (config) {
+ // Do something before request is sent
+ return config;
+ }, function (error) {
+ // Do something with request error
+ return Promise.reject(error);
+ });
+
+// Add a response interceptor
+axios.interceptors.response.use(function (response) {
+ // Any status code that lie within the range of 2xx cause this function to trigger
+ // Do something with response data
+ return response;
+ }, function (error) {
+ // Any status codes that falls outside the range of 2xx cause this function to trigger
+ // Do something with response error
+ return Promise.reject(error);
+ });
+```
+
+If you need to remove an interceptor later you can.
+
+```js
+const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
+axios.interceptors.request.eject(myInterceptor);
+```
+
+You can add interceptors to a custom instance of axios.
+
+```js
+const instance = axios.create();
+instance.interceptors.request.use(function () {/*...*/});
+```
+
+When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay
+in the execution of your axios request when the main thread is blocked (a promise is created under the hood for
+the interceptor and your request gets put on the bottom of the call stack). If your request interceptors are synchronous you can add a flag
+to the options object that will tell axios to run the code synchronously and avoid any delays in request execution.
+
+```js
+axios.interceptors.request.use(function (config) {
+ config.headers.test = 'I am only a header!';
+ return config;
+}, null, { synchronous: true });
+```
+
+If you want to execute a particular interceptor based on a runtime check,
+you can add a `runWhen` function to the options object. The interceptor will not be executed **if and only if** the return
+of `runWhen` is `false`. The function will be called with the config
+object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an
+asynchronous request interceptor that only needs to run at certain times.
+
+```js
+function onGetCall(config) {
+ return config.method === 'get';
+}
+axios.interceptors.request.use(function (config) {
+ config.headers.test = 'special get headers';
+ return config;
+}, null, { runWhen: onGetCall });
+```
+
+### Multiple Interceptors
+
+Given you add multiple response interceptors
+and when the response was fulfilled
+- then each interceptor is executed
+- then they are executed in the order they were added
+- then only the last interceptor's result is returned
+- then every interceptor receives the result of it's predecessor
+- and when the fulfillment-interceptor throws
+ - then the following fulfillment-interceptor is not called
+ - then the following rejection-interceptor is called
+ - once caught, another following fulfill-interceptor is called again (just like in a promise chain).
+
+Read [the interceptor tests](./test/specs/interceptors.spec.js) for seeing all this in code.
+
+## Handling Errors
+
+```js
+axios.get('/user/12345')
+ .catch(function (error) {
+ if (error.response) {
+ // The request was made and the server responded with a status code
+ // that falls out of the range of 2xx
+ console.log(error.response.data);
+ console.log(error.response.status);
+ console.log(error.response.headers);
+ } else if (error.request) {
+ // The request was made but no response was received
+ // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
+ // http.ClientRequest in node.js
+ console.log(error.request);
+ } else {
+ // Something happened in setting up the request that triggered an Error
+ console.log('Error', error.message);
+ }
+ console.log(error.config);
+ });
+```
+
+Using the `validateStatus` config option, you can define HTTP code(s) that should throw an error.
+
+```js
+axios.get('/user/12345', {
+ validateStatus: function (status) {
+ return status < 500; // Resolve only if the status code is less than 500
+ }
+})
+```
+
+Using `toJSON` you get an object with more information about the HTTP error.
+
+```js
+axios.get('/user/12345')
+ .catch(function (error) {
+ console.log(error.toJSON());
+ });
+```
+
+## Cancellation
+
+### AbortController
+
+Starting from `v0.22.0` Axios supports AbortController to cancel requests in fetch API way:
+
+```js
+const controller = new AbortController();
+
+axios.get('/foo/bar', {
+ signal: controller.signal
+}).then(function(response) {
+ //...
+});
+// cancel the request
+controller.abort()
+```
+
+### CancelToken `👎deprecated`
+
+You can also cancel a request using a *CancelToken*.
+
+> The axios cancel token API is based on the withdrawn [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises).
+
+> This API is deprecated since v0.22.0 and shouldn't be used in new projects
+
+You can create a cancel token using the `CancelToken.source` factory as shown below:
+
+```js
+const CancelToken = axios.CancelToken;
+const source = CancelToken.source();
+
+axios.get('/user/12345', {
+ cancelToken: source.token
+}).catch(function (thrown) {
+ if (axios.isCancel(thrown)) {
+ console.log('Request canceled', thrown.message);
+ } else {
+ // handle error
+ }
+});
+
+axios.post('/user/12345', {
+ name: 'new name'
+}, {
+ cancelToken: source.token
+})
+
+// cancel the request (the message parameter is optional)
+source.cancel('Operation canceled by the user.');
+```
+
+You can also create a cancel token by passing an executor function to the `CancelToken` constructor:
+
+```js
+const CancelToken = axios.CancelToken;
+let cancel;
+
+axios.get('/user/12345', {
+ cancelToken: new CancelToken(function executor(c) {
+ // An executor function receives a cancel function as a parameter
+ cancel = c;
+ })
+});
+
+// cancel the request
+cancel();
+```
+
+> Note: you can cancel several requests with the same cancel token/abort controller.
+> If a cancellation token is already cancelled at the moment of starting an Axios request, then the request is cancelled immediately, without any attempts to make real request.
+
+> During the transition period, you can use both cancellation APIs, even for the same request:
+
+## Using application/x-www-form-urlencoded format
+
+By default, axios serializes JavaScript objects to `JSON`. To send data in the `application/x-www-form-urlencoded` format instead, you can use one of the following options.
+
+### Browser
+
+In a browser, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API as follows:
+
+```js
+const params = new URLSearchParams();
+params.append('param1', 'value1');
+params.append('param2', 'value2');
+axios.post('/foo', params);
+```
+
+> Note that `URLSearchParams` is not supported by all browsers (see [caniuse.com](http://www.caniuse.com/#feat=urlsearchparams)), but there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment).
+
+Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library:
+
+```js
+const qs = require('qs');
+axios.post('/foo', qs.stringify({ 'bar': 123 }));
+```
+
+Or in another way (ES6),
+
+```js
+import qs from 'qs';
+const data = { 'bar': 123 };
+const options = {
+ method: 'POST',
+ headers: { 'content-type': 'application/x-www-form-urlencoded' },
+ data: qs.stringify(data),
+ url,
+};
+axios(options);
+```
+
+### Node.js
+
+#### Query string
+
+In node.js, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows:
+
+```js
+const querystring = require('querystring');
+axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
+```
+
+or ['URLSearchParams'](https://nodejs.org/api/url.html#url_class_urlsearchparams) from ['url module'](https://nodejs.org/api/url.html) as follows:
+
+```js
+const url = require('url');
+const params = new url.URLSearchParams({ foo: 'bar' });
+axios.post('http://something.com/', params.toString());
+```
+
+You can also use the [`qs`](https://github.com/ljharb/qs) library.
+
+> NOTE:
+> The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case.
+
+#### Form data
+
+##### 🆕 Automatic serialization
+
+Starting from `v0.27.0`, Axios supports automatic object serialization to a FormData object if the request `Content-Type`
+header is set to `multipart/form-data`.
+
+The following request will submit the data in a FormData format (Browser & Node.js):
+
+```js
+import axios from 'axios';
+
+axios.post('https://httpbin.org/post', {x: 1}, {
+ headers: {
+ 'Content-Type': 'multipart/form-data'
+ }
+}).then(({data})=> console.log(data));
+```
+
+In the `node.js` build, the ([`form-data`](https://github.com/form-data/form-data)) polyfill is used by default.
+
+You can overload the FormData class by setting the `env.FormData` config variable,
+but you probably won't need it in most cases:
+
+```js
+const axios= require('axios');
+var FormData = require('form-data');
+
+axios.post('https://httpbin.org/post', {x: 1, buf: new Buffer(10)}, {
+ headers: {
+ 'Content-Type': 'multipart/form-data'
+ }
+}).then(({data})=> console.log(data));
+```
+
+Axios FormData serializer supports some special endings to perform the following operations:
+
+- `{}` - serialize the value with JSON.stringify
+- `[]` - unwrap the array like object as separate fields with the same key
+
+```js
+const axios= require('axios');
+
+axios.post('https://httpbin.org/post', {
+ 'myObj{}': {x: 1, s: "foo"},
+ 'files[]': document.querySelector('#fileInput').files
+}, {
+ headers: {
+ 'Content-Type': 'multipart/form-data'
+ }
+}).then(({data})=> console.log(data));
+```
+
+Axios supports the following shortcut methods: `postForm`, `putForm`, `patchForm`
+which are just the corresponding http methods with a header preset: `Content-Type`: `multipart/form-data`.
+
+FileList object can be passed directly:
+
+```js
+await axios.postForm('https://httpbin.org/post', document.querySelector('#fileInput').files)
+```
+
+All files will be sent with the same field names: `files[]`;
+
+##### Manual FormData passing
+
+In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows:
+
+```js
+const FormData = require('form-data');
+
+const form = new FormData();
+form.append('my_field', 'my value');
+form.append('my_buffer', new Buffer(10));
+form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
+
+axios.post('https://example.com', form)
+```
+
+## Semver
+
+Until axios reaches a `1.0` release, breaking changes will be released with a new minor version. For example `0.5.1`, and `0.5.4` will have the same API, but `0.6.0` will have breaking changes.
+
+## Promises
+
+axios depends on a native ES6 Promise implementation to be [supported](http://caniuse.com/promises).
+If your environment doesn't support ES6 Promises, you can [polyfill](https://github.com/jakearchibald/es6-promise).
+
+## TypeScript
+
+axios includes [TypeScript](http://typescriptlang.org) definitions and a type guard for axios errors.
+
+```typescript
+let user: User = null;
+try {
+ const { data } = await axios.get('/user?ID=12345');
+ user = data.userDetails;
+} catch (error) {
+ if (axios.isAxiosError(error)) {
+ handleAxiosError(error);
+ } else {
+ handleUnexpectedError(error);
+ }
+}
+```
+
+## Online one-click setup
+
+You can use Gitpod an online IDE(which is free for Open Source) for contributing or running the examples online.
+
+[](https://gitpod.io/#https://github.com/axios/axios/blob/master/examples/server.js)
+
+
+## Resources
+
+* [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
+* [Upgrade Guide](https://github.com/axios/axios/blob/master/UPGRADE_GUIDE.md)
+* [Ecosystem](https://github.com/axios/axios/blob/master/ECOSYSTEM.md)
+* [Contributing Guide](https://github.com/axios/axios/blob/master/CONTRIBUTING.md)
+* [Code of Conduct](https://github.com/axios/axios/blob/master/CODE_OF_CONDUCT.md)
+
+## Credits
+
+axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [AngularJS](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of AngularJS.
+
+## License
+
+[MIT](LICENSE)
diff --git a/node_modules/axios/SECURITY.md b/node_modules/axios/SECURITY.md
new file mode 100644
index 0000000..353df9a
--- /dev/null
+++ b/node_modules/axios/SECURITY.md
@@ -0,0 +1,5 @@
+# Security Policy
+
+## Reporting a Vulnerability
+
+Please report security issues to jasonsaayman@gmail.com
diff --git a/node_modules/axios/UPGRADE_GUIDE.md b/node_modules/axios/UPGRADE_GUIDE.md
new file mode 100644
index 0000000..fdcff1a
--- /dev/null
+++ b/node_modules/axios/UPGRADE_GUIDE.md
@@ -0,0 +1,168 @@
+# Upgrade Guide
+
+### 0.18.x -> 0.19.0
+
+#### HTTPS Proxies
+
+Routing through an https proxy now requires setting the `protocol` attribute of the proxy configuration to `https`
+
+### 0.15.x -> 0.16.0
+
+#### `Promise` Type Declarations
+
+The `Promise` type declarations have been removed from the axios typings in favor of the built-in type declarations. If you use axios in a TypeScript project that targets `ES5`, please make sure to include the `es2015.promise` lib. Please see [this post](https://blog.mariusschulz.com/2016/11/25/typescript-2-0-built-in-type-declarations) for details.
+
+### 0.13.x -> 0.14.0
+
+#### TypeScript Definitions
+
+The axios TypeScript definitions have been updated to match the axios API and use the ES2015 module syntax.
+
+Please use the following `import` statement to import axios in TypeScript:
+
+```typescript
+import axios from 'axios';
+
+axios.get('/foo')
+ .then(response => console.log(response))
+ .catch(error => console.log(error));
+```
+
+#### `agent` Config Option
+
+The `agent` config option has been replaced with two new options: `httpAgent` and `httpsAgent`. Please use them instead.
+
+```js
+{
+ // Define a custom agent for HTTP
+ httpAgent: new http.Agent({ keepAlive: true }),
+ // Define a custom agent for HTTPS
+ httpsAgent: new https.Agent({ keepAlive: true })
+}
+```
+
+#### `progress` Config Option
+
+The `progress` config option has been replaced with the `onUploadProgress` and `onDownloadProgress` options.
+
+```js
+{
+ // Define a handler for upload progress events
+ onUploadProgress: function (progressEvent) {
+ // ...
+ },
+
+ // Define a handler for download progress events
+ onDownloadProgress: function (progressEvent) {
+ // ...
+ }
+}
+```
+
+### 0.12.x -> 0.13.0
+
+The `0.13.0` release contains several changes to custom adapters and error handling.
+
+#### Error Handling
+
+Previous to this release an error could either be a server response with bad status code or an actual `Error`. With this release Promise will always reject with an `Error`. In the case that a response was received, the `Error` will also include the response.
+
+```js
+axios.get('/user/12345')
+ .catch((error) => {
+ console.log(error.message);
+ console.log(error.code); // Not always specified
+ console.log(error.config); // The config that was used to make the request
+ console.log(error.response); // Only available if response was received from the server
+ });
+```
+
+#### Request Adapters
+
+This release changes a few things about how request adapters work. Please take note if you are using your own custom adapter.
+
+1. Response transformer is now called outside of adapter.
+2. Request adapter returns a `Promise`.
+
+This means that you no longer need to invoke `transformData` on response data. You will also no longer receive `resolve` and `reject` as arguments in your adapter.
+
+Previous code:
+
+```js
+function myAdapter(resolve, reject, config) {
+ var response = {
+ data: transformData(
+ responseData,
+ responseHeaders,
+ config.transformResponse
+ ),
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders
+ };
+ settle(resolve, reject, response);
+}
+```
+
+New code:
+
+```js
+function myAdapter(config) {
+ return new Promise(function (resolve, reject) {
+ var response = {
+ data: responseData,
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders
+ };
+ settle(resolve, reject, response);
+ });
+}
+```
+
+See the related commits for more details:
+- [Response transformers](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e)
+- [Request adapter Promise](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a)
+
+### 0.5.x -> 0.6.0
+
+The `0.6.0` release contains mostly bug fixes, but there are a couple things to be aware of when upgrading.
+
+#### ES6 Promise Polyfill
+
+Up until the `0.6.0` release ES6 `Promise` was being polyfilled using [es6-promise](https://github.com/jakearchibald/es6-promise). With this release, the polyfill has been removed, and you will need to supply it yourself if your environment needs it.
+
+```js
+require('es6-promise').polyfill();
+var axios = require('axios');
+```
+
+This will polyfill the global environment, and only needs to be done once.
+
+#### `axios.success`/`axios.error`
+
+The `success`, and `error` aliases were deprecated in [0.4.0](https://github.com/axios/axios/blob/master/CHANGELOG.md#040-oct-03-2014). As of this release they have been removed entirely. Instead please use `axios.then`, and `axios.catch` respectively.
+
+```js
+axios.get('some/url')
+ .then(function (res) {
+ /* ... */
+ })
+ .catch(function (err) {
+ /* ... */
+ });
+```
+
+#### UMD
+
+Previous versions of axios shipped with an AMD, CommonJS, and Global build. This has all been rolled into a single UMD build.
+
+```js
+// AMD
+require(['bower_components/axios/dist/axios'], function (axios) {
+ /* ... */
+});
+
+// CommonJS
+var axios = require('axios/dist/axios');
+```
diff --git a/node_modules/axios/dist/axios.js b/node_modules/axios/dist/axios.js
new file mode 100644
index 0000000..7c0b76b
--- /dev/null
+++ b/node_modules/axios/dist/axios.js
@@ -0,0 +1,2595 @@
+/* axios v0.27.2 | (c) 2022 by Matt Zabriskie */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["axios"] = factory();
+ else
+ root["axios"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./index.js");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./index.js":
+/*!******************!*\
+ !*** ./index.js ***!
+ \******************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(/*! ./lib/axios */ "./lib/axios.js");
+
+/***/ }),
+
+/***/ "./lib/adapters/xhr.js":
+/*!*****************************!*\
+ !*** ./lib/adapters/xhr.js ***!
+ \*****************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+var settle = __webpack_require__(/*! ./../core/settle */ "./lib/core/settle.js");
+var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./lib/helpers/cookies.js");
+var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./lib/helpers/buildURL.js");
+var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./lib/core/buildFullPath.js");
+var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./lib/helpers/parseHeaders.js");
+var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./lib/helpers/isURLSameOrigin.js");
+var transitionalDefaults = __webpack_require__(/*! ../defaults/transitional */ "./lib/defaults/transitional.js");
+var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
+var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ "./lib/cancel/CanceledError.js");
+var parseProtocol = __webpack_require__(/*! ../helpers/parseProtocol */ "./lib/helpers/parseProtocol.js");
+
+module.exports = function xhrAdapter(config) {
+ return new Promise(function dispatchXhrRequest(resolve, reject) {
+ var requestData = config.data;
+ var requestHeaders = config.headers;
+ var responseType = config.responseType;
+ var onCanceled;
+ function done() {
+ if (config.cancelToken) {
+ config.cancelToken.unsubscribe(onCanceled);
+ }
+
+ if (config.signal) {
+ config.signal.removeEventListener('abort', onCanceled);
+ }
+ }
+
+ if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
+ delete requestHeaders['Content-Type']; // Let the browser set it
+ }
+
+ var request = new XMLHttpRequest();
+
+ // HTTP basic authentication
+ if (config.auth) {
+ var username = config.auth.username || '';
+ var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
+ requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
+ }
+
+ var fullPath = buildFullPath(config.baseURL, config.url);
+
+ request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
+
+ // Set the request timeout in MS
+ request.timeout = config.timeout;
+
+ function onloadend() {
+ if (!request) {
+ return;
+ }
+ // Prepare the response
+ var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
+ var responseData = !responseType || responseType === 'text' || responseType === 'json' ?
+ request.responseText : request.response;
+ var response = {
+ data: responseData,
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders,
+ config: config,
+ request: request
+ };
+
+ settle(function _resolve(value) {
+ resolve(value);
+ done();
+ }, function _reject(err) {
+ reject(err);
+ done();
+ }, response);
+
+ // Clean up request
+ request = null;
+ }
+
+ if ('onloadend' in request) {
+ // Use onloadend if available
+ request.onloadend = onloadend;
+ } else {
+ // Listen for ready state to emulate onloadend
+ request.onreadystatechange = function handleLoad() {
+ if (!request || request.readyState !== 4) {
+ return;
+ }
+
+ // The request errored out and we didn't get a response, this will be
+ // handled by onerror instead
+ // With one exception: request that using file: protocol, most browsers
+ // will return status as 0 even though it's a successful request
+ if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
+ return;
+ }
+ // readystate handler is calling before onerror or ontimeout handlers,
+ // so we should call onloadend on the next 'tick'
+ setTimeout(onloadend);
+ };
+ }
+
+ // Handle browser request cancellation (as opposed to a manual cancellation)
+ request.onabort = function handleAbort() {
+ if (!request) {
+ return;
+ }
+
+ reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle low level network errors
+ request.onerror = function handleError() {
+ // Real errors are hidden from us by the browser
+ // onerror should only fire if it's a network error
+ reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle timeout
+ request.ontimeout = function handleTimeout() {
+ var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
+ var transitional = config.transitional || transitionalDefaults;
+ if (config.timeoutErrorMessage) {
+ timeoutErrorMessage = config.timeoutErrorMessage;
+ }
+ reject(new AxiosError(
+ timeoutErrorMessage,
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
+ config,
+ request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Add xsrf header
+ // This is only done if running in a standard browser environment.
+ // Specifically not if we're in a web worker, or react-native.
+ if (utils.isStandardBrowserEnv()) {
+ // Add xsrf header
+ var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
+ cookies.read(config.xsrfCookieName) :
+ undefined;
+
+ if (xsrfValue) {
+ requestHeaders[config.xsrfHeaderName] = xsrfValue;
+ }
+ }
+
+ // Add headers to the request
+ if ('setRequestHeader' in request) {
+ utils.forEach(requestHeaders, function setRequestHeader(val, key) {
+ if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
+ // Remove Content-Type if data is undefined
+ delete requestHeaders[key];
+ } else {
+ // Otherwise add header to the request
+ request.setRequestHeader(key, val);
+ }
+ });
+ }
+
+ // Add withCredentials to request if needed
+ if (!utils.isUndefined(config.withCredentials)) {
+ request.withCredentials = !!config.withCredentials;
+ }
+
+ // Add responseType to request if needed
+ if (responseType && responseType !== 'json') {
+ request.responseType = config.responseType;
+ }
+
+ // Handle progress if needed
+ if (typeof config.onDownloadProgress === 'function') {
+ request.addEventListener('progress', config.onDownloadProgress);
+ }
+
+ // Not all browsers support upload events
+ if (typeof config.onUploadProgress === 'function' && request.upload) {
+ request.upload.addEventListener('progress', config.onUploadProgress);
+ }
+
+ if (config.cancelToken || config.signal) {
+ // Handle cancellation
+ // eslint-disable-next-line func-names
+ onCanceled = function(cancel) {
+ if (!request) {
+ return;
+ }
+ reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
+ request.abort();
+ request = null;
+ };
+
+ config.cancelToken && config.cancelToken.subscribe(onCanceled);
+ if (config.signal) {
+ config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
+ }
+ }
+
+ if (!requestData) {
+ requestData = null;
+ }
+
+ var protocol = parseProtocol(fullPath);
+
+ if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {
+ reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
+ return;
+ }
+
+
+ // Send the request
+ request.send(requestData);
+ });
+};
+
+
+/***/ }),
+
+/***/ "./lib/axios.js":
+/*!**********************!*\
+ !*** ./lib/axios.js ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./utils */ "./lib/utils.js");
+var bind = __webpack_require__(/*! ./helpers/bind */ "./lib/helpers/bind.js");
+var Axios = __webpack_require__(/*! ./core/Axios */ "./lib/core/Axios.js");
+var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./lib/core/mergeConfig.js");
+var defaults = __webpack_require__(/*! ./defaults */ "./lib/defaults/index.js");
+
+/**
+ * Create an instance of Axios
+ *
+ * @param {Object} defaultConfig The default config for the instance
+ * @return {Axios} A new instance of Axios
+ */
+function createInstance(defaultConfig) {
+ var context = new Axios(defaultConfig);
+ var instance = bind(Axios.prototype.request, context);
+
+ // Copy axios.prototype to instance
+ utils.extend(instance, Axios.prototype, context);
+
+ // Copy context to instance
+ utils.extend(instance, context);
+
+ // Factory for creating new instances
+ instance.create = function create(instanceConfig) {
+ return createInstance(mergeConfig(defaultConfig, instanceConfig));
+ };
+
+ return instance;
+}
+
+// Create the default instance to be exported
+var axios = createInstance(defaults);
+
+// Expose Axios class to allow class inheritance
+axios.Axios = Axios;
+
+// Expose Cancel & CancelToken
+axios.CanceledError = __webpack_require__(/*! ./cancel/CanceledError */ "./lib/cancel/CanceledError.js");
+axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./lib/cancel/CancelToken.js");
+axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./lib/cancel/isCancel.js");
+axios.VERSION = __webpack_require__(/*! ./env/data */ "./lib/env/data.js").version;
+axios.toFormData = __webpack_require__(/*! ./helpers/toFormData */ "./lib/helpers/toFormData.js");
+
+// Expose AxiosError class
+axios.AxiosError = __webpack_require__(/*! ../lib/core/AxiosError */ "./lib/core/AxiosError.js");
+
+// alias for CanceledError for backward compatibility
+axios.Cancel = axios.CanceledError;
+
+// Expose all/spread
+axios.all = function all(promises) {
+ return Promise.all(promises);
+};
+axios.spread = __webpack_require__(/*! ./helpers/spread */ "./lib/helpers/spread.js");
+
+// Expose isAxiosError
+axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./lib/helpers/isAxiosError.js");
+
+module.exports = axios;
+
+// Allow use of default import syntax in TypeScript
+module.exports.default = axios;
+
+
+/***/ }),
+
+/***/ "./lib/cancel/CancelToken.js":
+/*!***********************************!*\
+ !*** ./lib/cancel/CancelToken.js ***!
+ \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var CanceledError = __webpack_require__(/*! ./CanceledError */ "./lib/cancel/CanceledError.js");
+
+/**
+ * A `CancelToken` is an object that can be used to request cancellation of an operation.
+ *
+ * @class
+ * @param {Function} executor The executor function.
+ */
+function CancelToken(executor) {
+ if (typeof executor !== 'function') {
+ throw new TypeError('executor must be a function.');
+ }
+
+ var resolvePromise;
+
+ this.promise = new Promise(function promiseExecutor(resolve) {
+ resolvePromise = resolve;
+ });
+
+ var token = this;
+
+ // eslint-disable-next-line func-names
+ this.promise.then(function(cancel) {
+ if (!token._listeners) return;
+
+ var i;
+ var l = token._listeners.length;
+
+ for (i = 0; i < l; i++) {
+ token._listeners[i](cancel);
+ }
+ token._listeners = null;
+ });
+
+ // eslint-disable-next-line func-names
+ this.promise.then = function(onfulfilled) {
+ var _resolve;
+ // eslint-disable-next-line func-names
+ var promise = new Promise(function(resolve) {
+ token.subscribe(resolve);
+ _resolve = resolve;
+ }).then(onfulfilled);
+
+ promise.cancel = function reject() {
+ token.unsubscribe(_resolve);
+ };
+
+ return promise;
+ };
+
+ executor(function cancel(message) {
+ if (token.reason) {
+ // Cancellation has already been requested
+ return;
+ }
+
+ token.reason = new CanceledError(message);
+ resolvePromise(token.reason);
+ });
+}
+
+/**
+ * Throws a `CanceledError` if cancellation has been requested.
+ */
+CancelToken.prototype.throwIfRequested = function throwIfRequested() {
+ if (this.reason) {
+ throw this.reason;
+ }
+};
+
+/**
+ * Subscribe to the cancel signal
+ */
+
+CancelToken.prototype.subscribe = function subscribe(listener) {
+ if (this.reason) {
+ listener(this.reason);
+ return;
+ }
+
+ if (this._listeners) {
+ this._listeners.push(listener);
+ } else {
+ this._listeners = [listener];
+ }
+};
+
+/**
+ * Unsubscribe from the cancel signal
+ */
+
+CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
+ if (!this._listeners) {
+ return;
+ }
+ var index = this._listeners.indexOf(listener);
+ if (index !== -1) {
+ this._listeners.splice(index, 1);
+ }
+};
+
+/**
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
+ * cancels the `CancelToken`.
+ */
+CancelToken.source = function source() {
+ var cancel;
+ var token = new CancelToken(function executor(c) {
+ cancel = c;
+ });
+ return {
+ token: token,
+ cancel: cancel
+ };
+};
+
+module.exports = CancelToken;
+
+
+/***/ }),
+
+/***/ "./lib/cancel/CanceledError.js":
+/*!*************************************!*\
+ !*** ./lib/cancel/CanceledError.js ***!
+ \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
+var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
+
+/**
+ * A `CanceledError` is an object that is thrown when an operation is canceled.
+ *
+ * @class
+ * @param {string=} message The message.
+ */
+function CanceledError(message) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);
+ this.name = 'CanceledError';
+}
+
+utils.inherits(CanceledError, AxiosError, {
+ __CANCEL__: true
+});
+
+module.exports = CanceledError;
+
+
+/***/ }),
+
+/***/ "./lib/cancel/isCancel.js":
+/*!********************************!*\
+ !*** ./lib/cancel/isCancel.js ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function isCancel(value) {
+ return !!(value && value.__CANCEL__);
+};
+
+
+/***/ }),
+
+/***/ "./lib/core/Axios.js":
+/*!***************************!*\
+ !*** ./lib/core/Axios.js ***!
+ \***************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./lib/helpers/buildURL.js");
+var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./lib/core/InterceptorManager.js");
+var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./lib/core/dispatchRequest.js");
+var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./lib/core/mergeConfig.js");
+var buildFullPath = __webpack_require__(/*! ./buildFullPath */ "./lib/core/buildFullPath.js");
+var validator = __webpack_require__(/*! ../helpers/validator */ "./lib/helpers/validator.js");
+
+var validators = validator.validators;
+/**
+ * Create a new instance of Axios
+ *
+ * @param {Object} instanceConfig The default config for the instance
+ */
+function Axios(instanceConfig) {
+ this.defaults = instanceConfig;
+ this.interceptors = {
+ request: new InterceptorManager(),
+ response: new InterceptorManager()
+ };
+}
+
+/**
+ * Dispatch a request
+ *
+ * @param {Object} config The config specific for this request (merged with this.defaults)
+ */
+Axios.prototype.request = function request(configOrUrl, config) {
+ /*eslint no-param-reassign:0*/
+ // Allow for axios('example/url'[, config]) a la fetch API
+ if (typeof configOrUrl === 'string') {
+ config = config || {};
+ config.url = configOrUrl;
+ } else {
+ config = configOrUrl || {};
+ }
+
+ config = mergeConfig(this.defaults, config);
+
+ // Set config.method
+ if (config.method) {
+ config.method = config.method.toLowerCase();
+ } else if (this.defaults.method) {
+ config.method = this.defaults.method.toLowerCase();
+ } else {
+ config.method = 'get';
+ }
+
+ var transitional = config.transitional;
+
+ if (transitional !== undefined) {
+ validator.assertOptions(transitional, {
+ silentJSONParsing: validators.transitional(validators.boolean),
+ forcedJSONParsing: validators.transitional(validators.boolean),
+ clarifyTimeoutError: validators.transitional(validators.boolean)
+ }, false);
+ }
+
+ // filter out skipped interceptors
+ var requestInterceptorChain = [];
+ var synchronousRequestInterceptors = true;
+ this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+ if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
+ return;
+ }
+
+ synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
+
+ requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
+ });
+
+ var responseInterceptorChain = [];
+ this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+ responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
+ });
+
+ var promise;
+
+ if (!synchronousRequestInterceptors) {
+ var chain = [dispatchRequest, undefined];
+
+ Array.prototype.unshift.apply(chain, requestInterceptorChain);
+ chain = chain.concat(responseInterceptorChain);
+
+ promise = Promise.resolve(config);
+ while (chain.length) {
+ promise = promise.then(chain.shift(), chain.shift());
+ }
+
+ return promise;
+ }
+
+
+ var newConfig = config;
+ while (requestInterceptorChain.length) {
+ var onFulfilled = requestInterceptorChain.shift();
+ var onRejected = requestInterceptorChain.shift();
+ try {
+ newConfig = onFulfilled(newConfig);
+ } catch (error) {
+ onRejected(error);
+ break;
+ }
+ }
+
+ try {
+ promise = dispatchRequest(newConfig);
+ } catch (error) {
+ return Promise.reject(error);
+ }
+
+ while (responseInterceptorChain.length) {
+ promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
+ }
+
+ return promise;
+};
+
+Axios.prototype.getUri = function getUri(config) {
+ config = mergeConfig(this.defaults, config);
+ var fullPath = buildFullPath(config.baseURL, config.url);
+ return buildURL(fullPath, config.params, config.paramsSerializer);
+};
+
+// Provide aliases for supported request methods
+utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
+ /*eslint func-names:0*/
+ Axios.prototype[method] = function(url, config) {
+ return this.request(mergeConfig(config || {}, {
+ method: method,
+ url: url,
+ data: (config || {}).data
+ }));
+ };
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+ /*eslint func-names:0*/
+
+ function generateHTTPMethod(isForm) {
+ return function httpMethod(url, data, config) {
+ return this.request(mergeConfig(config || {}, {
+ method: method,
+ headers: isForm ? {
+ 'Content-Type': 'multipart/form-data'
+ } : {},
+ url: url,
+ data: data
+ }));
+ };
+ }
+
+ Axios.prototype[method] = generateHTTPMethod();
+
+ Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
+});
+
+module.exports = Axios;
+
+
+/***/ }),
+
+/***/ "./lib/core/AxiosError.js":
+/*!********************************!*\
+ !*** ./lib/core/AxiosError.js ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
+
+/**
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [config] The config.
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The created error.
+ */
+function AxiosError(message, code, config, request, response) {
+ Error.call(this);
+ this.message = message;
+ this.name = 'AxiosError';
+ code && (this.code = code);
+ config && (this.config = config);
+ request && (this.request = request);
+ response && (this.response = response);
+}
+
+utils.inherits(AxiosError, Error, {
+ toJSON: function toJSON() {
+ return {
+ // Standard
+ message: this.message,
+ name: this.name,
+ // Microsoft
+ description: this.description,
+ number: this.number,
+ // Mozilla
+ fileName: this.fileName,
+ lineNumber: this.lineNumber,
+ columnNumber: this.columnNumber,
+ stack: this.stack,
+ // Axios
+ config: this.config,
+ code: this.code,
+ status: this.response && this.response.status ? this.response.status : null
+ };
+ }
+});
+
+var prototype = AxiosError.prototype;
+var descriptors = {};
+
+[
+ 'ERR_BAD_OPTION_VALUE',
+ 'ERR_BAD_OPTION',
+ 'ECONNABORTED',
+ 'ETIMEDOUT',
+ 'ERR_NETWORK',
+ 'ERR_FR_TOO_MANY_REDIRECTS',
+ 'ERR_DEPRECATED',
+ 'ERR_BAD_RESPONSE',
+ 'ERR_BAD_REQUEST',
+ 'ERR_CANCELED'
+// eslint-disable-next-line func-names
+].forEach(function(code) {
+ descriptors[code] = {value: code};
+});
+
+Object.defineProperties(AxiosError, descriptors);
+Object.defineProperty(prototype, 'isAxiosError', {value: true});
+
+// eslint-disable-next-line func-names
+AxiosError.from = function(error, code, config, request, response, customProps) {
+ var axiosError = Object.create(prototype);
+
+ utils.toFlatObject(error, axiosError, function filter(obj) {
+ return obj !== Error.prototype;
+ });
+
+ AxiosError.call(axiosError, error.message, code, config, request, response);
+
+ axiosError.name = error.name;
+
+ customProps && Object.assign(axiosError, customProps);
+
+ return axiosError;
+};
+
+module.exports = AxiosError;
+
+
+/***/ }),
+
+/***/ "./lib/core/InterceptorManager.js":
+/*!****************************************!*\
+ !*** ./lib/core/InterceptorManager.js ***!
+ \****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+
+function InterceptorManager() {
+ this.handlers = [];
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
+ this.handlers.push({
+ fulfilled: fulfilled,
+ rejected: rejected,
+ synchronous: options ? options.synchronous : false,
+ runWhen: options ? options.runWhen : null
+ });
+ return this.handlers.length - 1;
+};
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+ if (this.handlers[id]) {
+ this.handlers[id] = null;
+ }
+};
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+ utils.forEach(this.handlers, function forEachHandler(h) {
+ if (h !== null) {
+ fn(h);
+ }
+ });
+};
+
+module.exports = InterceptorManager;
+
+
+/***/ }),
+
+/***/ "./lib/core/buildFullPath.js":
+/*!***********************************!*\
+ !*** ./lib/core/buildFullPath.js ***!
+ \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./lib/helpers/isAbsoluteURL.js");
+var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./lib/helpers/combineURLs.js");
+
+/**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ * @returns {string} The combined full path
+ */
+module.exports = function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL);
+ }
+ return requestedURL;
+};
+
+
+/***/ }),
+
+/***/ "./lib/core/dispatchRequest.js":
+/*!*************************************!*\
+ !*** ./lib/core/dispatchRequest.js ***!
+ \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+var transformData = __webpack_require__(/*! ./transformData */ "./lib/core/transformData.js");
+var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./lib/cancel/isCancel.js");
+var defaults = __webpack_require__(/*! ../defaults */ "./lib/defaults/index.js");
+var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ "./lib/cancel/CanceledError.js");
+
+/**
+ * Throws a `CanceledError` if cancellation has been requested.
+ */
+function throwIfCancellationRequested(config) {
+ if (config.cancelToken) {
+ config.cancelToken.throwIfRequested();
+ }
+
+ if (config.signal && config.signal.aborted) {
+ throw new CanceledError();
+ }
+}
+
+/**
+ * Dispatch a request to the server using the configured adapter.
+ *
+ * @param {object} config The config that is to be used for the request
+ * @returns {Promise} The Promise to be fulfilled
+ */
+module.exports = function dispatchRequest(config) {
+ throwIfCancellationRequested(config);
+
+ // Ensure headers exist
+ config.headers = config.headers || {};
+
+ // Transform request data
+ config.data = transformData.call(
+ config,
+ config.data,
+ config.headers,
+ config.transformRequest
+ );
+
+ // Flatten headers
+ config.headers = utils.merge(
+ config.headers.common || {},
+ config.headers[config.method] || {},
+ config.headers
+ );
+
+ utils.forEach(
+ ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
+ function cleanHeaderConfig(method) {
+ delete config.headers[method];
+ }
+ );
+
+ var adapter = config.adapter || defaults.adapter;
+
+ return adapter(config).then(function onAdapterResolution(response) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ response.data = transformData.call(
+ config,
+ response.data,
+ response.headers,
+ config.transformResponse
+ );
+
+ return response;
+ }, function onAdapterRejection(reason) {
+ if (!isCancel(reason)) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ if (reason && reason.response) {
+ reason.response.data = transformData.call(
+ config,
+ reason.response.data,
+ reason.response.headers,
+ config.transformResponse
+ );
+ }
+ }
+
+ return Promise.reject(reason);
+ });
+};
+
+
+/***/ }),
+
+/***/ "./lib/core/mergeConfig.js":
+/*!*********************************!*\
+ !*** ./lib/core/mergeConfig.js ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
+
+/**
+ * Config-specific merge-function which creates a new config-object
+ * by merging two configuration objects together.
+ *
+ * @param {Object} config1
+ * @param {Object} config2
+ * @returns {Object} New object resulting from merging config2 to config1
+ */
+module.exports = function mergeConfig(config1, config2) {
+ // eslint-disable-next-line no-param-reassign
+ config2 = config2 || {};
+ var config = {};
+
+ function getMergedValue(target, source) {
+ if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
+ return utils.merge(target, source);
+ } else if (utils.isPlainObject(source)) {
+ return utils.merge({}, source);
+ } else if (utils.isArray(source)) {
+ return source.slice();
+ }
+ return source;
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDeepProperties(prop) {
+ if (!utils.isUndefined(config2[prop])) {
+ return getMergedValue(config1[prop], config2[prop]);
+ } else if (!utils.isUndefined(config1[prop])) {
+ return getMergedValue(undefined, config1[prop]);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function valueFromConfig2(prop) {
+ if (!utils.isUndefined(config2[prop])) {
+ return getMergedValue(undefined, config2[prop]);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function defaultToConfig2(prop) {
+ if (!utils.isUndefined(config2[prop])) {
+ return getMergedValue(undefined, config2[prop]);
+ } else if (!utils.isUndefined(config1[prop])) {
+ return getMergedValue(undefined, config1[prop]);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDirectKeys(prop) {
+ if (prop in config2) {
+ return getMergedValue(config1[prop], config2[prop]);
+ } else if (prop in config1) {
+ return getMergedValue(undefined, config1[prop]);
+ }
+ }
+
+ var mergeMap = {
+ 'url': valueFromConfig2,
+ 'method': valueFromConfig2,
+ 'data': valueFromConfig2,
+ 'baseURL': defaultToConfig2,
+ 'transformRequest': defaultToConfig2,
+ 'transformResponse': defaultToConfig2,
+ 'paramsSerializer': defaultToConfig2,
+ 'timeout': defaultToConfig2,
+ 'timeoutMessage': defaultToConfig2,
+ 'withCredentials': defaultToConfig2,
+ 'adapter': defaultToConfig2,
+ 'responseType': defaultToConfig2,
+ 'xsrfCookieName': defaultToConfig2,
+ 'xsrfHeaderName': defaultToConfig2,
+ 'onUploadProgress': defaultToConfig2,
+ 'onDownloadProgress': defaultToConfig2,
+ 'decompress': defaultToConfig2,
+ 'maxContentLength': defaultToConfig2,
+ 'maxBodyLength': defaultToConfig2,
+ 'beforeRedirect': defaultToConfig2,
+ 'transport': defaultToConfig2,
+ 'httpAgent': defaultToConfig2,
+ 'httpsAgent': defaultToConfig2,
+ 'cancelToken': defaultToConfig2,
+ 'socketPath': defaultToConfig2,
+ 'responseEncoding': defaultToConfig2,
+ 'validateStatus': mergeDirectKeys
+ };
+
+ utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
+ var merge = mergeMap[prop] || mergeDeepProperties;
+ var configValue = merge(prop);
+ (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
+ });
+
+ return config;
+};
+
+
+/***/ }),
+
+/***/ "./lib/core/settle.js":
+/*!****************************!*\
+ !*** ./lib/core/settle.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var AxiosError = __webpack_require__(/*! ./AxiosError */ "./lib/core/AxiosError.js");
+
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+module.exports = function settle(resolve, reject, response) {
+ var validateStatus = response.config.validateStatus;
+ if (!response.status || !validateStatus || validateStatus(response.status)) {
+ resolve(response);
+ } else {
+ reject(new AxiosError(
+ 'Request failed with status code ' + response.status,
+ [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
+ response.config,
+ response.request,
+ response
+ ));
+ }
+};
+
+
+/***/ }),
+
+/***/ "./lib/core/transformData.js":
+/*!***********************************!*\
+ !*** ./lib/core/transformData.js ***!
+ \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+var defaults = __webpack_require__(/*! ../defaults */ "./lib/defaults/index.js");
+
+/**
+ * Transform the data for a request or a response
+ *
+ * @param {Object|String} data The data to be transformed
+ * @param {Array} headers The headers for the request or response
+ * @param {Array|Function} fns A single function or Array of functions
+ * @returns {*} The resulting transformed data
+ */
+module.exports = function transformData(data, headers, fns) {
+ var context = this || defaults;
+ /*eslint no-param-reassign:0*/
+ utils.forEach(fns, function transform(fn) {
+ data = fn.call(context, data, headers);
+ });
+
+ return data;
+};
+
+
+/***/ }),
+
+/***/ "./lib/defaults/index.js":
+/*!*******************************!*\
+ !*** ./lib/defaults/index.js ***!
+ \*******************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
+var normalizeHeaderName = __webpack_require__(/*! ../helpers/normalizeHeaderName */ "./lib/helpers/normalizeHeaderName.js");
+var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
+var transitionalDefaults = __webpack_require__(/*! ./transitional */ "./lib/defaults/transitional.js");
+var toFormData = __webpack_require__(/*! ../helpers/toFormData */ "./lib/helpers/toFormData.js");
+
+var DEFAULT_CONTENT_TYPE = {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+};
+
+function setContentTypeIfUnset(headers, value) {
+ if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
+ headers['Content-Type'] = value;
+ }
+}
+
+function getDefaultAdapter() {
+ var adapter;
+ if (typeof XMLHttpRequest !== 'undefined') {
+ // For browsers use XHR adapter
+ adapter = __webpack_require__(/*! ../adapters/xhr */ "./lib/adapters/xhr.js");
+ } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
+ // For node use HTTP adapter
+ adapter = __webpack_require__(/*! ../adapters/http */ "./lib/adapters/xhr.js");
+ }
+ return adapter;
+}
+
+function stringifySafely(rawValue, parser, encoder) {
+ if (utils.isString(rawValue)) {
+ try {
+ (parser || JSON.parse)(rawValue);
+ return utils.trim(rawValue);
+ } catch (e) {
+ if (e.name !== 'SyntaxError') {
+ throw e;
+ }
+ }
+ }
+
+ return (encoder || JSON.stringify)(rawValue);
+}
+
+var defaults = {
+
+ transitional: transitionalDefaults,
+
+ adapter: getDefaultAdapter(),
+
+ transformRequest: [function transformRequest(data, headers) {
+ normalizeHeaderName(headers, 'Accept');
+ normalizeHeaderName(headers, 'Content-Type');
+
+ if (utils.isFormData(data) ||
+ utils.isArrayBuffer(data) ||
+ utils.isBuffer(data) ||
+ utils.isStream(data) ||
+ utils.isFile(data) ||
+ utils.isBlob(data)
+ ) {
+ return data;
+ }
+ if (utils.isArrayBufferView(data)) {
+ return data.buffer;
+ }
+ if (utils.isURLSearchParams(data)) {
+ setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
+ return data.toString();
+ }
+
+ var isObjectPayload = utils.isObject(data);
+ var contentType = headers && headers['Content-Type'];
+
+ var isFileList;
+
+ if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
+ var _FormData = this.env && this.env.FormData;
+ return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
+ } else if (isObjectPayload || contentType === 'application/json') {
+ setContentTypeIfUnset(headers, 'application/json');
+ return stringifySafely(data);
+ }
+
+ return data;
+ }],
+
+ transformResponse: [function transformResponse(data) {
+ var transitional = this.transitional || defaults.transitional;
+ var silentJSONParsing = transitional && transitional.silentJSONParsing;
+ var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
+ var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
+
+ if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
+ try {
+ return JSON.parse(data);
+ } catch (e) {
+ if (strictJSONParsing) {
+ if (e.name === 'SyntaxError') {
+ throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
+ }
+ throw e;
+ }
+ }
+ }
+
+ return data;
+ }],
+
+ /**
+ * A timeout in milliseconds to abort a request. If set to 0 (default) a
+ * timeout is not created.
+ */
+ timeout: 0,
+
+ xsrfCookieName: 'XSRF-TOKEN',
+ xsrfHeaderName: 'X-XSRF-TOKEN',
+
+ maxContentLength: -1,
+ maxBodyLength: -1,
+
+ env: {
+ FormData: __webpack_require__(/*! ./env/FormData */ "./lib/helpers/null.js")
+ },
+
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300;
+ },
+
+ headers: {
+ common: {
+ 'Accept': 'application/json, text/plain, */*'
+ }
+ }
+};
+
+utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
+ defaults.headers[method] = {};
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+ defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
+});
+
+module.exports = defaults;
+
+
+/***/ }),
+
+/***/ "./lib/defaults/transitional.js":
+/*!**************************************!*\
+ !*** ./lib/defaults/transitional.js ***!
+ \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = {
+ silentJSONParsing: true,
+ forcedJSONParsing: true,
+ clarifyTimeoutError: false
+};
+
+
+/***/ }),
+
+/***/ "./lib/env/data.js":
+/*!*************************!*\
+ !*** ./lib/env/data.js ***!
+ \*************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "version": "0.27.2"
+};
+
+/***/ }),
+
+/***/ "./lib/helpers/bind.js":
+/*!*****************************!*\
+ !*** ./lib/helpers/bind.js ***!
+ \*****************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function bind(fn, thisArg) {
+ return function wrap() {
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i];
+ }
+ return fn.apply(thisArg, args);
+ };
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/buildURL.js":
+/*!*********************************!*\
+ !*** ./lib/helpers/buildURL.js ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+
+function encode(val) {
+ return encodeURIComponent(val).
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%20/g, '+').
+ replace(/%5B/gi, '[').
+ replace(/%5D/gi, ']');
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+module.exports = function buildURL(url, params, paramsSerializer) {
+ /*eslint no-param-reassign:0*/
+ if (!params) {
+ return url;
+ }
+
+ var serializedParams;
+ if (paramsSerializer) {
+ serializedParams = paramsSerializer(params);
+ } else if (utils.isURLSearchParams(params)) {
+ serializedParams = params.toString();
+ } else {
+ var parts = [];
+
+ utils.forEach(params, function serialize(val, key) {
+ if (val === null || typeof val === 'undefined') {
+ return;
+ }
+
+ if (utils.isArray(val)) {
+ key = key + '[]';
+ } else {
+ val = [val];
+ }
+
+ utils.forEach(val, function parseValue(v) {
+ if (utils.isDate(v)) {
+ v = v.toISOString();
+ } else if (utils.isObject(v)) {
+ v = JSON.stringify(v);
+ }
+ parts.push(encode(key) + '=' + encode(v));
+ });
+ });
+
+ serializedParams = parts.join('&');
+ }
+
+ if (serializedParams) {
+ var hashmarkIndex = url.indexOf('#');
+ if (hashmarkIndex !== -1) {
+ url = url.slice(0, hashmarkIndex);
+ }
+
+ url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
+ }
+
+ return url;
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/combineURLs.js":
+/*!************************************!*\
+ !*** ./lib/helpers/combineURLs.js ***!
+ \************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+module.exports = function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+ : baseURL;
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/cookies.js":
+/*!********************************!*\
+ !*** ./lib/helpers/cookies.js ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+
+module.exports = (
+ utils.isStandardBrowserEnv() ?
+
+ // Standard browser envs support document.cookie
+ (function standardBrowserEnv() {
+ return {
+ write: function write(name, value, expires, path, domain, secure) {
+ var cookie = [];
+ cookie.push(name + '=' + encodeURIComponent(value));
+
+ if (utils.isNumber(expires)) {
+ cookie.push('expires=' + new Date(expires).toGMTString());
+ }
+
+ if (utils.isString(path)) {
+ cookie.push('path=' + path);
+ }
+
+ if (utils.isString(domain)) {
+ cookie.push('domain=' + domain);
+ }
+
+ if (secure === true) {
+ cookie.push('secure');
+ }
+
+ document.cookie = cookie.join('; ');
+ },
+
+ read: function read(name) {
+ var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
+ return (match ? decodeURIComponent(match[3]) : null);
+ },
+
+ remove: function remove(name) {
+ this.write(name, '', Date.now() - 86400000);
+ }
+ };
+ })() :
+
+ // Non standard browser env (web workers, react-native) lack needed support.
+ (function nonStandardBrowserEnv() {
+ return {
+ write: function write() {},
+ read: function read() { return null; },
+ remove: function remove() {}
+ };
+ })()
+);
+
+
+/***/ }),
+
+/***/ "./lib/helpers/isAbsoluteURL.js":
+/*!**************************************!*\
+ !*** ./lib/helpers/isAbsoluteURL.js ***!
+ \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+module.exports = function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
+ // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+ // by any combination of letters, digits, plus, period, or hyphen.
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/isAxiosError.js":
+/*!*************************************!*\
+ !*** ./lib/helpers/isAxiosError.js ***!
+ \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+
+/**
+ * Determines whether the payload is an error thrown by Axios
+ *
+ * @param {*} payload The value to test
+ * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
+ */
+module.exports = function isAxiosError(payload) {
+ return utils.isObject(payload) && (payload.isAxiosError === true);
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/isURLSameOrigin.js":
+/*!****************************************!*\
+ !*** ./lib/helpers/isURLSameOrigin.js ***!
+ \****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+
+module.exports = (
+ utils.isStandardBrowserEnv() ?
+
+ // Standard browser envs have full support of the APIs needed to test
+ // whether the request URL is of the same origin as current location.
+ (function standardBrowserEnv() {
+ var msie = /(msie|trident)/i.test(navigator.userAgent);
+ var urlParsingNode = document.createElement('a');
+ var originURL;
+
+ /**
+ * Parse a URL to discover it's components
+ *
+ * @param {String} url The URL to be parsed
+ * @returns {Object}
+ */
+ function resolveURL(url) {
+ var href = url;
+
+ if (msie) {
+ // IE needs attribute set twice to normalize properties
+ urlParsingNode.setAttribute('href', href);
+ href = urlParsingNode.href;
+ }
+
+ urlParsingNode.setAttribute('href', href);
+
+ // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+ return {
+ href: urlParsingNode.href,
+ protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+ host: urlParsingNode.host,
+ search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+ hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+ hostname: urlParsingNode.hostname,
+ port: urlParsingNode.port,
+ pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
+ urlParsingNode.pathname :
+ '/' + urlParsingNode.pathname
+ };
+ }
+
+ originURL = resolveURL(window.location.href);
+
+ /**
+ * Determine if a URL shares the same origin as the current location
+ *
+ * @param {String} requestURL The URL to test
+ * @returns {boolean} True if URL shares the same origin, otherwise false
+ */
+ return function isURLSameOrigin(requestURL) {
+ var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
+ return (parsed.protocol === originURL.protocol &&
+ parsed.host === originURL.host);
+ };
+ })() :
+
+ // Non standard browser envs (web workers, react-native) lack needed support.
+ (function nonStandardBrowserEnv() {
+ return function isURLSameOrigin() {
+ return true;
+ };
+ })()
+);
+
+
+/***/ }),
+
+/***/ "./lib/helpers/normalizeHeaderName.js":
+/*!********************************************!*\
+ !*** ./lib/helpers/normalizeHeaderName.js ***!
+ \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
+
+module.exports = function normalizeHeaderName(headers, normalizedName) {
+ utils.forEach(headers, function processHeader(value, name) {
+ if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
+ headers[normalizedName] = value;
+ delete headers[name];
+ }
+ });
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/null.js":
+/*!*****************************!*\
+ !*** ./lib/helpers/null.js ***!
+ \*****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+// eslint-disable-next-line strict
+module.exports = null;
+
+
+/***/ }),
+
+/***/ "./lib/helpers/parseHeaders.js":
+/*!*************************************!*\
+ !*** ./lib/helpers/parseHeaders.js ***!
+ \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
+
+// Headers whose duplicates are ignored by node
+// c.f. https://nodejs.org/api/http.html#http_message_headers
+var ignoreDuplicateOf = [
+ 'age', 'authorization', 'content-length', 'content-type', 'etag',
+ 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
+ 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
+ 'referer', 'retry-after', 'user-agent'
+];
+
+/**
+ * Parse headers into an object
+ *
+ * ```
+ * Date: Wed, 27 Aug 2014 08:58:49 GMT
+ * Content-Type: application/json
+ * Connection: keep-alive
+ * Transfer-Encoding: chunked
+ * ```
+ *
+ * @param {String} headers Headers needing to be parsed
+ * @returns {Object} Headers parsed into an object
+ */
+module.exports = function parseHeaders(headers) {
+ var parsed = {};
+ var key;
+ var val;
+ var i;
+
+ if (!headers) { return parsed; }
+
+ utils.forEach(headers.split('\n'), function parser(line) {
+ i = line.indexOf(':');
+ key = utils.trim(line.substr(0, i)).toLowerCase();
+ val = utils.trim(line.substr(i + 1));
+
+ if (key) {
+ if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
+ return;
+ }
+ if (key === 'set-cookie') {
+ parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
+ } else {
+ parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+ }
+ }
+ });
+
+ return parsed;
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/parseProtocol.js":
+/*!**************************************!*\
+ !*** ./lib/helpers/parseProtocol.js ***!
+ \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function parseProtocol(url) {
+ var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
+ return match && match[1] || '';
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/spread.js":
+/*!*******************************!*\
+ !*** ./lib/helpers/spread.js ***!
+ \*******************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Syntactic sugar for invoking a function and expanding an array for arguments.
+ *
+ * Common use case would be to use `Function.prototype.apply`.
+ *
+ * ```js
+ * function f(x, y, z) {}
+ * var args = [1, 2, 3];
+ * f.apply(null, args);
+ * ```
+ *
+ * With `spread` this example can be re-written.
+ *
+ * ```js
+ * spread(function(x, y, z) {})([1, 2, 3]);
+ * ```
+ *
+ * @param {Function} callback
+ * @returns {Function}
+ */
+module.exports = function spread(callback) {
+ return function wrap(arr) {
+ return callback.apply(null, arr);
+ };
+};
+
+
+/***/ }),
+
+/***/ "./lib/helpers/toFormData.js":
+/*!***********************************!*\
+ !*** ./lib/helpers/toFormData.js ***!
+ \***********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
+
+/**
+ * Convert a data object to FormData
+ * @param {Object} obj
+ * @param {?Object} [formData]
+ * @returns {Object}
+ **/
+
+function toFormData(obj, formData) {
+ // eslint-disable-next-line no-param-reassign
+ formData = formData || new FormData();
+
+ var stack = [];
+
+ function convertValue(value) {
+ if (value === null) return '';
+
+ if (utils.isDate(value)) {
+ return value.toISOString();
+ }
+
+ if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
+ return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
+ }
+
+ return value;
+ }
+
+ function build(data, parentKey) {
+ if (utils.isPlainObject(data) || utils.isArray(data)) {
+ if (stack.indexOf(data) !== -1) {
+ throw Error('Circular reference detected in ' + parentKey);
+ }
+
+ stack.push(data);
+
+ utils.forEach(data, function each(value, key) {
+ if (utils.isUndefined(value)) return;
+ var fullKey = parentKey ? parentKey + '.' + key : key;
+ var arr;
+
+ if (value && !parentKey && typeof value === 'object') {
+ if (utils.endsWith(key, '{}')) {
+ // eslint-disable-next-line no-param-reassign
+ value = JSON.stringify(value);
+ } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
+ // eslint-disable-next-line func-names
+ arr.forEach(function(el) {
+ !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
+ });
+ return;
+ }
+ }
+
+ build(value, fullKey);
+ });
+
+ stack.pop();
+ } else {
+ formData.append(parentKey, convertValue(data));
+ }
+ }
+
+ build(obj);
+
+ return formData;
+}
+
+module.exports = toFormData;
+
+
+/***/ }),
+
+/***/ "./lib/helpers/validator.js":
+/*!**********************************!*\
+ !*** ./lib/helpers/validator.js ***!
+ \**********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var VERSION = __webpack_require__(/*! ../env/data */ "./lib/env/data.js").version;
+var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
+
+var validators = {};
+
+// eslint-disable-next-line func-names
+['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
+ validators[type] = function validator(thing) {
+ return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
+ };
+});
+
+var deprecatedWarnings = {};
+
+/**
+ * Transitional option validator
+ * @param {function|boolean?} validator - set to false if the transitional option has been removed
+ * @param {string?} version - deprecated version / removed since version
+ * @param {string?} message - some message with additional info
+ * @returns {function}
+ */
+validators.transitional = function transitional(validator, version, message) {
+ function formatMessage(opt, desc) {
+ return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
+ }
+
+ // eslint-disable-next-line func-names
+ return function(value, opt, opts) {
+ if (validator === false) {
+ throw new AxiosError(
+ formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
+ AxiosError.ERR_DEPRECATED
+ );
+ }
+
+ if (version && !deprecatedWarnings[opt]) {
+ deprecatedWarnings[opt] = true;
+ // eslint-disable-next-line no-console
+ console.warn(
+ formatMessage(
+ opt,
+ ' has been deprecated since v' + version + ' and will be removed in the near future'
+ )
+ );
+ }
+
+ return validator ? validator(value, opt, opts) : true;
+ };
+};
+
+/**
+ * Assert object's properties type
+ * @param {object} options
+ * @param {object} schema
+ * @param {boolean?} allowUnknown
+ */
+
+function assertOptions(options, schema, allowUnknown) {
+ if (typeof options !== 'object') {
+ throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
+ }
+ var keys = Object.keys(options);
+ var i = keys.length;
+ while (i-- > 0) {
+ var opt = keys[i];
+ var validator = schema[opt];
+ if (validator) {
+ var value = options[opt];
+ var result = value === undefined || validator(value, opt, options);
+ if (result !== true) {
+ throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
+ }
+ continue;
+ }
+ if (allowUnknown !== true) {
+ throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
+ }
+ }
+}
+
+module.exports = {
+ assertOptions: assertOptions,
+ validators: validators
+};
+
+
+/***/ }),
+
+/***/ "./lib/utils.js":
+/*!**********************!*\
+ !*** ./lib/utils.js ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var bind = __webpack_require__(/*! ./helpers/bind */ "./lib/helpers/bind.js");
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString;
+
+// eslint-disable-next-line func-names
+var kindOf = (function(cache) {
+ // eslint-disable-next-line func-names
+ return function(thing) {
+ var str = toString.call(thing);
+ return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
+ };
+})(Object.create(null));
+
+function kindOfTest(type) {
+ type = type.toLowerCase();
+ return function isKindOf(thing) {
+ return kindOf(thing) === type;
+ };
+}
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+function isArray(val) {
+ return Array.isArray(val);
+}
+
+/**
+ * Determine if a value is undefined
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if the value is undefined, otherwise false
+ */
+function isUndefined(val) {
+ return typeof val === 'undefined';
+}
+
+/**
+ * Determine if a value is a Buffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Buffer, otherwise false
+ */
+function isBuffer(val) {
+ return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
+ && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
+}
+
+/**
+ * Determine if a value is an ArrayBuffer
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an ArrayBuffer, otherwise false
+ */
+var isArrayBuffer = kindOfTest('ArrayBuffer');
+
+
+/**
+ * Determine if a value is a view on an ArrayBuffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
+ */
+function isArrayBufferView(val) {
+ var result;
+ if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
+ result = ArrayBuffer.isView(val);
+ } else {
+ result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
+ }
+ return result;
+}
+
+/**
+ * Determine if a value is a String
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a String, otherwise false
+ */
+function isString(val) {
+ return typeof val === 'string';
+}
+
+/**
+ * Determine if a value is a Number
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Number, otherwise false
+ */
+function isNumber(val) {
+ return typeof val === 'number';
+}
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+function isObject(val) {
+ return val !== null && typeof val === 'object';
+}
+
+/**
+ * Determine if a value is a plain Object
+ *
+ * @param {Object} val The value to test
+ * @return {boolean} True if value is a plain Object, otherwise false
+ */
+function isPlainObject(val) {
+ if (kindOf(val) !== 'object') {
+ return false;
+ }
+
+ var prototype = Object.getPrototypeOf(val);
+ return prototype === null || prototype === Object.prototype;
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+var isDate = kindOfTest('Date');
+
+/**
+ * Determine if a value is a File
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+var isFile = kindOfTest('File');
+
+/**
+ * Determine if a value is a Blob
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Blob, otherwise false
+ */
+var isBlob = kindOfTest('Blob');
+
+/**
+ * Determine if a value is a FileList
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+var isFileList = kindOfTest('FileList');
+
+/**
+ * Determine if a value is a Function
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Function, otherwise false
+ */
+function isFunction(val) {
+ return toString.call(val) === '[object Function]';
+}
+
+/**
+ * Determine if a value is a Stream
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Stream, otherwise false
+ */
+function isStream(val) {
+ return isObject(val) && isFunction(val.pipe);
+}
+
+/**
+ * Determine if a value is a FormData
+ *
+ * @param {Object} thing The value to test
+ * @returns {boolean} True if value is an FormData, otherwise false
+ */
+function isFormData(thing) {
+ var pattern = '[object FormData]';
+ return thing && (
+ (typeof FormData === 'function' && thing instanceof FormData) ||
+ toString.call(thing) === pattern ||
+ (isFunction(thing.toString) && thing.toString() === pattern)
+ );
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+var isURLSearchParams = kindOfTest('URLSearchParams');
+
+/**
+ * Trim excess whitespace off the beginning and end of a string
+ *
+ * @param {String} str The String to trim
+ * @returns {String} The String freed of excess whitespace
+ */
+function trim(str) {
+ return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
+}
+
+/**
+ * Determine if we're running in a standard browser environment
+ *
+ * This allows axios to run in a web worker, and react-native.
+ * Both environments support XMLHttpRequest, but not fully standard globals.
+ *
+ * web workers:
+ * typeof window -> undefined
+ * typeof document -> undefined
+ *
+ * react-native:
+ * navigator.product -> 'ReactNative'
+ * nativescript
+ * navigator.product -> 'NativeScript' or 'NS'
+ */
+function isStandardBrowserEnv() {
+ if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
+ navigator.product === 'NativeScript' ||
+ navigator.product === 'NS')) {
+ return false;
+ }
+ return (
+ typeof window !== 'undefined' &&
+ typeof document !== 'undefined'
+ );
+}
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+function forEach(obj, fn) {
+ // Don't bother if no value provided
+ if (obj === null || typeof obj === 'undefined') {
+ return;
+ }
+
+ // Force an array if not already something iterable
+ if (typeof obj !== 'object') {
+ /*eslint no-param-reassign:0*/
+ obj = [obj];
+ }
+
+ if (isArray(obj)) {
+ // Iterate over array values
+ for (var i = 0, l = obj.length; i < l; i++) {
+ fn.call(null, obj[i], i, obj);
+ }
+ } else {
+ // Iterate over object keys
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ fn.call(null, obj[key], key, obj);
+ }
+ }
+ }
+}
+
+/**
+ * Accepts varargs expecting each argument to be an object, then
+ * immutably merges the properties of each object and returns result.
+ *
+ * When multiple objects contain the same key the later object in
+ * the arguments list will take precedence.
+ *
+ * Example:
+ *
+ * ```js
+ * var result = merge({foo: 123}, {foo: 456});
+ * console.log(result.foo); // outputs 456
+ * ```
+ *
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+function merge(/* obj1, obj2, obj3, ... */) {
+ var result = {};
+ function assignValue(val, key) {
+ if (isPlainObject(result[key]) && isPlainObject(val)) {
+ result[key] = merge(result[key], val);
+ } else if (isPlainObject(val)) {
+ result[key] = merge({}, val);
+ } else if (isArray(val)) {
+ result[key] = val.slice();
+ } else {
+ result[key] = val;
+ }
+ }
+
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ forEach(arguments[i], assignValue);
+ }
+ return result;
+}
+
+/**
+ * Extends object a by mutably adding to it the properties of object b.
+ *
+ * @param {Object} a The object to be extended
+ * @param {Object} b The object to copy properties from
+ * @param {Object} thisArg The object to bind function to
+ * @return {Object} The resulting value of object a
+ */
+function extend(a, b, thisArg) {
+ forEach(b, function assignValue(val, key) {
+ if (thisArg && typeof val === 'function') {
+ a[key] = bind(val, thisArg);
+ } else {
+ a[key] = val;
+ }
+ });
+ return a;
+}
+
+/**
+ * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+ *
+ * @param {string} content with BOM
+ * @return {string} content value without BOM
+ */
+function stripBOM(content) {
+ if (content.charCodeAt(0) === 0xFEFF) {
+ content = content.slice(1);
+ }
+ return content;
+}
+
+/**
+ * Inherit the prototype methods from one constructor into another
+ * @param {function} constructor
+ * @param {function} superConstructor
+ * @param {object} [props]
+ * @param {object} [descriptors]
+ */
+
+function inherits(constructor, superConstructor, props, descriptors) {
+ constructor.prototype = Object.create(superConstructor.prototype, descriptors);
+ constructor.prototype.constructor = constructor;
+ props && Object.assign(constructor.prototype, props);
+}
+
+/**
+ * Resolve object with deep prototype chain to a flat object
+ * @param {Object} sourceObj source object
+ * @param {Object} [destObj]
+ * @param {Function} [filter]
+ * @returns {Object}
+ */
+
+function toFlatObject(sourceObj, destObj, filter) {
+ var props;
+ var i;
+ var prop;
+ var merged = {};
+
+ destObj = destObj || {};
+
+ do {
+ props = Object.getOwnPropertyNames(sourceObj);
+ i = props.length;
+ while (i-- > 0) {
+ prop = props[i];
+ if (!merged[prop]) {
+ destObj[prop] = sourceObj[prop];
+ merged[prop] = true;
+ }
+ }
+ sourceObj = Object.getPrototypeOf(sourceObj);
+ } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
+
+ return destObj;
+}
+
+/*
+ * determines whether a string ends with the characters of a specified string
+ * @param {String} str
+ * @param {String} searchString
+ * @param {Number} [position= 0]
+ * @returns {boolean}
+ */
+function endsWith(str, searchString, position) {
+ str = String(str);
+ if (position === undefined || position > str.length) {
+ position = str.length;
+ }
+ position -= searchString.length;
+ var lastIndex = str.indexOf(searchString, position);
+ return lastIndex !== -1 && lastIndex === position;
+}
+
+
+/**
+ * Returns new array from array like object
+ * @param {*} [thing]
+ * @returns {Array}
+ */
+function toArray(thing) {
+ if (!thing) return null;
+ var i = thing.length;
+ if (isUndefined(i)) return null;
+ var arr = new Array(i);
+ while (i-- > 0) {
+ arr[i] = thing[i];
+ }
+ return arr;
+}
+
+// eslint-disable-next-line func-names
+var isTypedArray = (function(TypedArray) {
+ // eslint-disable-next-line func-names
+ return function(thing) {
+ return TypedArray && thing instanceof TypedArray;
+ };
+})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));
+
+module.exports = {
+ isArray: isArray,
+ isArrayBuffer: isArrayBuffer,
+ isBuffer: isBuffer,
+ isFormData: isFormData,
+ isArrayBufferView: isArrayBufferView,
+ isString: isString,
+ isNumber: isNumber,
+ isObject: isObject,
+ isPlainObject: isPlainObject,
+ isUndefined: isUndefined,
+ isDate: isDate,
+ isFile: isFile,
+ isBlob: isBlob,
+ isFunction: isFunction,
+ isStream: isStream,
+ isURLSearchParams: isURLSearchParams,
+ isStandardBrowserEnv: isStandardBrowserEnv,
+ forEach: forEach,
+ merge: merge,
+ extend: extend,
+ trim: trim,
+ stripBOM: stripBOM,
+ inherits: inherits,
+ toFlatObject: toFlatObject,
+ kindOf: kindOf,
+ kindOfTest: kindOfTest,
+ endsWith: endsWith,
+ toArray: toArray,
+ isTypedArray: isTypedArray,
+ isFileList: isFileList
+};
+
+
+/***/ })
+
+/******/ });
+});
+//# sourceMappingURL=axios.map
\ No newline at end of file
diff --git a/node_modules/axios/dist/axios.map b/node_modules/axios/dist/axios.map
new file mode 100644
index 0000000..5c24df5
--- /dev/null
+++ b/node_modules/axios/dist/axios.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://axios/webpack/universalModuleDefinition","webpack://axios/webpack/bootstrap","webpack://axios/./index.js","webpack://axios/./lib/adapters/xhr.js","webpack://axios/./lib/axios.js","webpack://axios/./lib/cancel/CancelToken.js","webpack://axios/./lib/cancel/CanceledError.js","webpack://axios/./lib/cancel/isCancel.js","webpack://axios/./lib/core/Axios.js","webpack://axios/./lib/core/AxiosError.js","webpack://axios/./lib/core/InterceptorManager.js","webpack://axios/./lib/core/buildFullPath.js","webpack://axios/./lib/core/dispatchRequest.js","webpack://axios/./lib/core/mergeConfig.js","webpack://axios/./lib/core/settle.js","webpack://axios/./lib/core/transformData.js","webpack://axios/./lib/defaults/index.js","webpack://axios/./lib/defaults/transitional.js","webpack://axios/./lib/env/data.js","webpack://axios/./lib/helpers/bind.js","webpack://axios/./lib/helpers/buildURL.js","webpack://axios/./lib/helpers/combineURLs.js","webpack://axios/./lib/helpers/cookies.js","webpack://axios/./lib/helpers/isAbsoluteURL.js","webpack://axios/./lib/helpers/isAxiosError.js","webpack://axios/./lib/helpers/isURLSameOrigin.js","webpack://axios/./lib/helpers/normalizeHeaderName.js","webpack://axios/./lib/helpers/null.js","webpack://axios/./lib/helpers/parseHeaders.js","webpack://axios/./lib/helpers/parseProtocol.js","webpack://axios/./lib/helpers/spread.js","webpack://axios/./lib/helpers/toFormData.js","webpack://axios/./lib/helpers/validator.js","webpack://axios/./lib/utils.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA,iBAAiB,mBAAO,CAAC,mCAAa,E;;;;;;;;;;;;ACAzB;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,aAAa,mBAAO,CAAC,8CAAkB;AACvC,cAAc,mBAAO,CAAC,sDAAsB;AAC5C,eAAe,mBAAO,CAAC,wDAAuB;AAC9C,oBAAoB,mBAAO,CAAC,0DAAuB;AACnD,mBAAmB,mBAAO,CAAC,gEAA2B;AACtD,sBAAsB,mBAAO,CAAC,sEAA8B;AAC5D,2BAA2B,mBAAO,CAAC,gEAA0B;AAC7D,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,oBAAoB,mBAAO,CAAC,8DAAyB;AACrD,oBAAoB,mBAAO,CAAC,gEAA0B;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;AC7Na;;AAEb,YAAY,mBAAO,CAAC,+BAAS;AAC7B,WAAW,mBAAO,CAAC,6CAAgB;AACnC,YAAY,mBAAO,CAAC,yCAAc;AAClC,kBAAkB,mBAAO,CAAC,qDAAoB;AAC9C,eAAe,mBAAO,CAAC,2CAAY;;AAEnC;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,mBAAO,CAAC,6DAAwB;AACtD,oBAAoB,mBAAO,CAAC,yDAAsB;AAClD,iBAAiB,mBAAO,CAAC,mDAAmB;AAC5C,gBAAgB,mBAAO,CAAC,qCAAY;AACpC,mBAAmB,mBAAO,CAAC,yDAAsB;;AAEjD;AACA,mBAAmB,mBAAO,CAAC,wDAAwB;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,iDAAkB;;AAEzC;AACA,qBAAqB,mBAAO,CAAC,6DAAwB;;AAErD;;AAEA;AACA;;;;;;;;;;;;;AC/Da;;AAEb,oBAAoB,mBAAO,CAAC,sDAAiB;;AAE7C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACtHa;;AAEb,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;ACrBa;;AAEb;AACA;AACA;;;;;;;;;;;;;ACJa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,eAAe,mBAAO,CAAC,sDAAqB;AAC5C,yBAAyB,mBAAO,CAAC,8DAAsB;AACvD,sBAAsB,mBAAO,CAAC,wDAAmB;AACjD,kBAAkB,mBAAO,CAAC,gDAAe;AACzC,oBAAoB,mBAAO,CAAC,oDAAiB;AAC7C,gBAAgB,mBAAO,CAAC,wDAAsB;;AAE9C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,SAAS,KAAK;AACd;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;;;AC/Ja;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,CAAC;;AAED;AACA,kDAAkD,YAAY;;AAE9D;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACrFa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;;;;;;;ACrDa;;AAEb,oBAAoB,mBAAO,CAAC,gEAA0B;AACtD,kBAAkB,mBAAO,CAAC,4DAAwB;;AAElD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnBa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,oBAAoB,mBAAO,CAAC,oDAAiB;AAC7C,eAAe,mBAAO,CAAC,oDAAoB;AAC3C,eAAe,mBAAO,CAAC,4CAAa;AACpC,oBAAoB,mBAAO,CAAC,8DAAyB;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,uCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;ACtFa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACnGa;;AAEb,iBAAiB,mBAAO,CAAC,8CAAc;;AAEvC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxBa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,eAAe,mBAAO,CAAC,4CAAa;;AAEpC;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACrBa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;AAC9B,0BAA0B,mBAAO,CAAC,4EAAgC;AAClE,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,2BAA2B,mBAAO,CAAC,sDAAgB;AACnD,iBAAiB,mBAAO,CAAC,0DAAuB;;AAEhD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,8CAAiB;AACvC,GAAG;AACH;AACA,cAAc,mBAAO,CAAC,+CAAkB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,sCAAsC,gBAAgB;AACtD,KAAK;AACL;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,mBAAO,CAAC,6CAAgB;AACtC,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;ACjJa;;AAEb;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA,E;;;;;;;;;;;;ACFa;;AAEb;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACVa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACrEa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0CAA0C;AAC1C,SAAS;;AAET;AACA,4DAA4D,wBAAwB;AACpF;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,kCAAkC;AAClC,+BAA+B,aAAa,EAAE;AAC9C;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACpDa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;;;;;;;;;;;;ACZa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACnEa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACXA;AACA;;;;;;;;;;;;;ACDa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACpDa;;AAEb;AACA,wBAAwB,KAAK;AAC7B;AACA;;;;;;;;;;;;;ACLa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ba;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACvEa;;AAEb,cAAc,mBAAO,CAAC,sCAAa;AACnC,iBAAiB,mBAAO,CAAC,oDAAoB;;AAE7C;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrFa;;AAEb,WAAW,mBAAO,CAAC,6CAAgB;;AAEnC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;;AAGA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,2BAA2B;AAC3B;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4BAA4B;AAC5B,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"axios.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./index.js\");\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/axios/dist/axios.min.js b/node_modules/axios/dist/axios.min.js
new file mode 100644
index 0000000..e8e4fc1
--- /dev/null
+++ b/node_modules/axios/dist/axios.min.js
@@ -0,0 +1,3 @@
+/* axios v0.27.2 | (c) 2022 by Matt Zabriskie */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t,n){"use strict";var r,o=n(4),i=Object.prototype.toString,s=(r=Object.create(null),function(e){var t=i.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function a(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function u(e){return Array.isArray(e)}function c(e){return void 0===e}var f=a("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var d=a("Date"),h=a("File"),m=a("Blob"),v=a("FileList");function y(e){return"[object Function]"===i.call(e)}var g=a("URLSearchParams");function E(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),u(e))for(var n=0,r=e.length;n0;)s[i=r[o]]||(t[i]=e[i],s[i]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:O,isFileList:v}},function(e,t,n){"use strict";var r=n(0);function o(e,t,n,r,o){Error.call(this),this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}r.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var i=o.prototype,s={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){s[e]={value:e}})),Object.defineProperties(o,s),Object.defineProperty(i,"isAxiosError",{value:!0}),o.from=function(e,t,n,s,a,u){var c=Object.create(i);return r.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,n,s,a),c.name=e.name,u&&Object.assign(c,u),c},e.exports=o},function(e,t,n){"use strict";var r=n(1);function o(e){r.call(this,null==e?"canceled":e,r.ERR_CANCELED),this.name="CanceledError"}n(0).inherits(o,r,{__CANCEL__:!0}),e.exports=o},function(e,t,n){"use strict";var r=n(0),o=n(19),i=n(1),s=n(6),a=n(7),u={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var f,l={transitional:s,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(f=n(8)),f),transformRequest:[function(e,t){if(o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var n,i=r.isObject(e),s=t&&t["Content-Type"];if((n=r.isFileList(e))||i&&"multipart/form-data"===s){var u=this.env&&this.env.FormData;return a(n?{"files[]":e}:e,u&&new u)}return i||"application/json"===s?(c(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(t||JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||l.transitional,n=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,s=!n&&"json"===this.responseType;if(s||o&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw i.from(e,i.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(27)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){l.headers[e]=r.merge(u)})),e.exports=l},function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([n]):s[t]?s[t]+", "+n:n}})),s):s}},function(e,t,n){"use strict";var r=n(0);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},function(e,t){e.exports=null},function(e,t,n){"use strict";var r=n(12).version,o=n(1),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new o(i(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[r]&&(s[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),i=r.length;i-- >0;){var s=r[i],a=t[s];if(a){var u=e[s],c=void 0===u||a(u,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},function(e,t,n){"use strict";var r=n(2);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/axios/index.d.ts b/node_modules/axios/index.d.ts
new file mode 100644
index 0000000..0b9e1d3
--- /dev/null
+++ b/node_modules/axios/index.d.ts
@@ -0,0 +1,254 @@
+// TypeScript Version: 3.0
+export type AxiosRequestHeaders = Record;
+
+export type AxiosResponseHeaders = Record & {
+ "set-cookie"?: string[]
+};
+
+export interface AxiosRequestTransformer {
+ (data: any, headers?: AxiosRequestHeaders): any;
+}
+
+export interface AxiosResponseTransformer {
+ (data: any, headers?: AxiosResponseHeaders): any;
+}
+
+export interface AxiosAdapter {
+ (config: AxiosRequestConfig): AxiosPromise;
+}
+
+export interface AxiosBasicCredentials {
+ username: string;
+ password: string;
+}
+
+export interface AxiosProxyConfig {
+ host: string;
+ port: number;
+ auth?: {
+ username: string;
+ password: string;
+ };
+ protocol?: string;
+}
+
+export type Method =
+ | 'get' | 'GET'
+ | 'delete' | 'DELETE'
+ | 'head' | 'HEAD'
+ | 'options' | 'OPTIONS'
+ | 'post' | 'POST'
+ | 'put' | 'PUT'
+ | 'patch' | 'PATCH'
+ | 'purge' | 'PURGE'
+ | 'link' | 'LINK'
+ | 'unlink' | 'UNLINK';
+
+export type ResponseType =
+ | 'arraybuffer'
+ | 'blob'
+ | 'document'
+ | 'json'
+ | 'text'
+ | 'stream';
+
+ export type responseEncoding =
+ | 'ascii' | 'ASCII'
+ | 'ansi' | 'ANSI'
+ | 'binary' | 'BINARY'
+ | 'base64' | 'BASE64'
+ | 'base64url' | 'BASE64URL'
+ | 'hex' | 'HEX'
+ | 'latin1' | 'LATIN1'
+ | 'ucs-2' | 'UCS-2'
+ | 'ucs2' | 'UCS2'
+ | 'utf-8' | 'UTF-8'
+ | 'utf8' | 'UTF8'
+ | 'utf16le' | 'UTF16LE';
+
+export interface TransitionalOptions {
+ silentJSONParsing?: boolean;
+ forcedJSONParsing?: boolean;
+ clarifyTimeoutError?: boolean;
+}
+
+export interface AxiosRequestConfig {
+ url?: string;
+ method?: Method | string;
+ baseURL?: string;
+ transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[];
+ transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[];
+ headers?: AxiosRequestHeaders;
+ params?: any;
+ paramsSerializer?: (params: any) => string;
+ data?: D;
+ timeout?: number;
+ timeoutErrorMessage?: string;
+ withCredentials?: boolean;
+ adapter?: AxiosAdapter;
+ auth?: AxiosBasicCredentials;
+ responseType?: ResponseType;
+ responseEncoding?: responseEncoding | string;
+ xsrfCookieName?: string;
+ xsrfHeaderName?: string;
+ onUploadProgress?: (progressEvent: any) => void;
+ onDownloadProgress?: (progressEvent: any) => void;
+ maxContentLength?: number;
+ validateStatus?: ((status: number) => boolean) | null;
+ maxBodyLength?: number;
+ maxRedirects?: number;
+ beforeRedirect?: (options: Record, responseDetails: {headers: Record}) => void;
+ socketPath?: string | null;
+ httpAgent?: any;
+ httpsAgent?: any;
+ proxy?: AxiosProxyConfig | false;
+ cancelToken?: CancelToken;
+ decompress?: boolean;
+ transitional?: TransitionalOptions;
+ signal?: AbortSignal;
+ insecureHTTPParser?: boolean;
+ env?: {
+ FormData?: new (...args: any[]) => object;
+ };
+}
+
+export interface HeadersDefaults {
+ common: AxiosRequestHeaders;
+ delete: AxiosRequestHeaders;
+ get: AxiosRequestHeaders;
+ head: AxiosRequestHeaders;
+ post: AxiosRequestHeaders;
+ put: AxiosRequestHeaders;
+ patch: AxiosRequestHeaders;
+ options?: AxiosRequestHeaders;
+ purge?: AxiosRequestHeaders;
+ link?: AxiosRequestHeaders;
+ unlink?: AxiosRequestHeaders;
+}
+
+export interface AxiosDefaults extends Omit, 'headers'> {
+ headers: HeadersDefaults;
+}
+
+export interface AxiosResponse {
+ data: T;
+ status: number;
+ statusText: string;
+ headers: AxiosResponseHeaders;
+ config: AxiosRequestConfig;
+ request?: any;
+}
+
+export class AxiosError extends Error {
+ constructor(
+ message?: string,
+ code?: string,
+ config?: AxiosRequestConfig,
+ request?: any,
+ response?: AxiosResponse
+ );
+
+ config: AxiosRequestConfig;
+ code?: string;
+ request?: any;
+ response?: AxiosResponse;
+ isAxiosError: boolean;
+ status?: string;
+ toJSON: () => object;
+ static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS";
+ static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE";
+ static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION";
+ static readonly ERR_NETWORK = "ERR_NETWORK";
+ static readonly ERR_DEPRECATED = "ERR_DEPRECATED";
+ static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE";
+ static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST";
+ static readonly ERR_CANCELED = "ERR_CANCELED";
+ static readonly ECONNABORTED = "ECONNABORTED";
+ static readonly ETIMEDOUT = "ETIMEDOUT";
+}
+
+export class CanceledError extends AxiosError {
+}
+
+export interface AxiosPromise extends Promise> {
+}
+
+export interface CancelStatic {
+ new (message?: string): Cancel;
+}
+
+export interface Cancel {
+ message: string | undefined;
+}
+
+export interface Canceler {
+ (message?: string): void;
+}
+
+export interface CancelTokenStatic {
+ new (executor: (cancel: Canceler) => void): CancelToken;
+ source(): CancelTokenSource;
+}
+
+export interface CancelToken {
+ promise: Promise;
+ reason?: Cancel;
+ throwIfRequested(): void;
+}
+
+export interface CancelTokenSource {
+ token: CancelToken;
+ cancel: Canceler;
+}
+
+export interface AxiosInterceptorOptions {
+ synchronous?: boolean;
+ runWhen?: (config: AxiosRequestConfig) => boolean;
+}
+
+export interface AxiosInterceptorManager {
+ use(onFulfilled?: (value: V) => T | Promise, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions): number;
+ eject(id: number): void;
+}
+
+export class Axios {
+ constructor(config?: AxiosRequestConfig);
+ defaults: AxiosDefaults;
+ interceptors: {
+ request: AxiosInterceptorManager;
+ response: AxiosInterceptorManager;
+ };
+ getUri(config?: AxiosRequestConfig): string;
+ request, D = any>(config: AxiosRequestConfig): Promise;
+ get, D = any>(url: string, config?: AxiosRequestConfig): Promise;
+ delete, D = any>(url: string, config?: AxiosRequestConfig): Promise;
+ head, D = any>(url: string, config?: AxiosRequestConfig): Promise;
+ options, D = any>(url: string, config?: AxiosRequestConfig): Promise;
+ post, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise;
+ put, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise;
+ patch, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise;
+ postForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise;
+ putForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise;
+ patchForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise;
+}
+
+export interface AxiosInstance extends Axios {
+ (config: AxiosRequestConfig): AxiosPromise;
+ (url: string, config?: AxiosRequestConfig): AxiosPromise;
+}
+
+export interface AxiosStatic extends AxiosInstance {
+ create(config?: AxiosRequestConfig): AxiosInstance;
+ Cancel: CancelStatic;
+ CancelToken: CancelTokenStatic;
+ Axios: typeof Axios;
+ readonly VERSION: string;
+ isCancel(value: any): boolean;
+ all(values: Array>): Promise;
+ spread(callback: (...args: T[]) => R): (array: T[]) => R;
+ isAxiosError(payload: any): payload is AxiosError;
+}
+
+declare const axios: AxiosStatic;
+
+export default axios;
diff --git a/node_modules/axios/index.js b/node_modules/axios/index.js
new file mode 100644
index 0000000..79dfd09
--- /dev/null
+++ b/node_modules/axios/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/axios');
\ No newline at end of file
diff --git a/node_modules/axios/lib/adapters/README.md b/node_modules/axios/lib/adapters/README.md
new file mode 100644
index 0000000..68f1118
--- /dev/null
+++ b/node_modules/axios/lib/adapters/README.md
@@ -0,0 +1,37 @@
+# axios // adapters
+
+The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received.
+
+## Example
+
+```js
+var settle = require('./../core/settle');
+
+module.exports = function myAdapter(config) {
+ // At this point:
+ // - config has been merged with defaults
+ // - request transformers have already run
+ // - request interceptors have already run
+
+ // Make the request using config provided
+ // Upon response settle the Promise
+
+ return new Promise(function(resolve, reject) {
+
+ var response = {
+ data: responseData,
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders,
+ config: config,
+ request: request
+ };
+
+ settle(resolve, reject, response);
+
+ // From here:
+ // - response transformers will run
+ // - response interceptors will run
+ });
+}
+```
diff --git a/node_modules/axios/lib/adapters/http.js b/node_modules/axios/lib/adapters/http.js
new file mode 100644
index 0000000..04a9aac
--- /dev/null
+++ b/node_modules/axios/lib/adapters/http.js
@@ -0,0 +1,424 @@
+'use strict';
+
+var utils = require('./../utils');
+var settle = require('./../core/settle');
+var buildFullPath = require('../core/buildFullPath');
+var buildURL = require('./../helpers/buildURL');
+var http = require('http');
+var https = require('https');
+var httpFollow = require('follow-redirects').http;
+var httpsFollow = require('follow-redirects').https;
+var url = require('url');
+var zlib = require('zlib');
+var VERSION = require('./../env/data').version;
+var transitionalDefaults = require('../defaults/transitional');
+var AxiosError = require('../core/AxiosError');
+var CanceledError = require('../cancel/CanceledError');
+
+var isHttps = /https:?/;
+
+var supportedProtocols = [ 'http:', 'https:', 'file:' ];
+
+/**
+ *
+ * @param {http.ClientRequestArgs} options
+ * @param {AxiosProxyConfig} proxy
+ * @param {string} location
+ */
+function setProxy(options, proxy, location) {
+ options.hostname = proxy.host;
+ options.host = proxy.host;
+ options.port = proxy.port;
+ options.path = location;
+
+ // Basic proxy authorization
+ if (proxy.auth) {
+ var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');
+ options.headers['Proxy-Authorization'] = 'Basic ' + base64;
+ }
+
+ // If a proxy is used, any redirects must also pass through the proxy
+ options.beforeRedirect = function beforeRedirect(redirection) {
+ redirection.headers.host = redirection.host;
+ setProxy(redirection, proxy, redirection.href);
+ };
+}
+
+/*eslint consistent-return:0*/
+module.exports = function httpAdapter(config) {
+ return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {
+ var onCanceled;
+ function done() {
+ if (config.cancelToken) {
+ config.cancelToken.unsubscribe(onCanceled);
+ }
+
+ if (config.signal) {
+ config.signal.removeEventListener('abort', onCanceled);
+ }
+ }
+ var resolve = function resolve(value) {
+ done();
+ resolvePromise(value);
+ };
+ var rejected = false;
+ var reject = function reject(value) {
+ done();
+ rejected = true;
+ rejectPromise(value);
+ };
+ var data = config.data;
+ var headers = config.headers;
+ var headerNames = {};
+
+ Object.keys(headers).forEach(function storeLowerName(name) {
+ headerNames[name.toLowerCase()] = name;
+ });
+
+ // Set User-Agent (required by some servers)
+ // See https://github.com/axios/axios/issues/69
+ if ('user-agent' in headerNames) {
+ // User-Agent is specified; handle case where no UA header is desired
+ if (!headers[headerNames['user-agent']]) {
+ delete headers[headerNames['user-agent']];
+ }
+ // Otherwise, use specified value
+ } else {
+ // Only set header if it hasn't been set in config
+ headers['User-Agent'] = 'axios/' + VERSION;
+ }
+
+ // support for https://www.npmjs.com/package/form-data api
+ if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {
+ Object.assign(headers, data.getHeaders());
+ } else if (data && !utils.isStream(data)) {
+ if (Buffer.isBuffer(data)) {
+ // Nothing to do...
+ } else if (utils.isArrayBuffer(data)) {
+ data = Buffer.from(new Uint8Array(data));
+ } else if (utils.isString(data)) {
+ data = Buffer.from(data, 'utf-8');
+ } else {
+ return reject(new AxiosError(
+ 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
+
+ if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {
+ return reject(new AxiosError(
+ 'Request body larger than maxBodyLength limit',
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
+
+ // Add Content-Length header if data exists
+ if (!headerNames['content-length']) {
+ headers['Content-Length'] = data.length;
+ }
+ }
+
+ // HTTP basic authentication
+ var auth = undefined;
+ if (config.auth) {
+ var username = config.auth.username || '';
+ var password = config.auth.password || '';
+ auth = username + ':' + password;
+ }
+
+ // Parse url
+ var fullPath = buildFullPath(config.baseURL, config.url);
+ var parsed = url.parse(fullPath);
+ var protocol = parsed.protocol || supportedProtocols[0];
+
+ if (supportedProtocols.indexOf(protocol) === -1) {
+ return reject(new AxiosError(
+ 'Unsupported protocol ' + protocol,
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
+
+ if (!auth && parsed.auth) {
+ var urlAuth = parsed.auth.split(':');
+ var urlUsername = urlAuth[0] || '';
+ var urlPassword = urlAuth[1] || '';
+ auth = urlUsername + ':' + urlPassword;
+ }
+
+ if (auth && headerNames.authorization) {
+ delete headers[headerNames.authorization];
+ }
+
+ var isHttpsRequest = isHttps.test(protocol);
+ var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
+
+ try {
+ buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, '');
+ } catch (err) {
+ var customErr = new Error(err.message);
+ customErr.config = config;
+ customErr.url = config.url;
+ customErr.exists = true;
+ reject(customErr);
+ }
+
+ var options = {
+ path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''),
+ method: config.method.toUpperCase(),
+ headers: headers,
+ agent: agent,
+ agents: { http: config.httpAgent, https: config.httpsAgent },
+ auth: auth
+ };
+
+ if (config.socketPath) {
+ options.socketPath = config.socketPath;
+ } else {
+ options.hostname = parsed.hostname;
+ options.port = parsed.port;
+ }
+
+ var proxy = config.proxy;
+ if (!proxy && proxy !== false) {
+ var proxyEnv = protocol.slice(0, -1) + '_proxy';
+ var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];
+ if (proxyUrl) {
+ var parsedProxyUrl = url.parse(proxyUrl);
+ var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;
+ var shouldProxy = true;
+
+ if (noProxyEnv) {
+ var noProxy = noProxyEnv.split(',').map(function trim(s) {
+ return s.trim();
+ });
+
+ shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {
+ if (!proxyElement) {
+ return false;
+ }
+ if (proxyElement === '*') {
+ return true;
+ }
+ if (proxyElement[0] === '.' &&
+ parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {
+ return true;
+ }
+
+ return parsed.hostname === proxyElement;
+ });
+ }
+
+ if (shouldProxy) {
+ proxy = {
+ host: parsedProxyUrl.hostname,
+ port: parsedProxyUrl.port,
+ protocol: parsedProxyUrl.protocol
+ };
+
+ if (parsedProxyUrl.auth) {
+ var proxyUrlAuth = parsedProxyUrl.auth.split(':');
+ proxy.auth = {
+ username: proxyUrlAuth[0],
+ password: proxyUrlAuth[1]
+ };
+ }
+ }
+ }
+ }
+
+ if (proxy) {
+ options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');
+ setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);
+ }
+
+ var transport;
+ var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);
+ if (config.transport) {
+ transport = config.transport;
+ } else if (config.maxRedirects === 0) {
+ transport = isHttpsProxy ? https : http;
+ } else {
+ if (config.maxRedirects) {
+ options.maxRedirects = config.maxRedirects;
+ }
+ if (config.beforeRedirect) {
+ options.beforeRedirect = config.beforeRedirect;
+ }
+ transport = isHttpsProxy ? httpsFollow : httpFollow;
+ }
+
+ if (config.maxBodyLength > -1) {
+ options.maxBodyLength = config.maxBodyLength;
+ }
+
+ if (config.insecureHTTPParser) {
+ options.insecureHTTPParser = config.insecureHTTPParser;
+ }
+
+ // Create the request
+ var req = transport.request(options, function handleResponse(res) {
+ if (req.aborted) return;
+
+ // uncompress the response body transparently if required
+ var stream = res;
+
+ // return the last request in case of redirects
+ var lastRequest = res.req || req;
+
+
+ // if no content, is HEAD request or decompress disabled we should not decompress
+ if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {
+ switch (res.headers['content-encoding']) {
+ /*eslint default-case:0*/
+ case 'gzip':
+ case 'compress':
+ case 'deflate':
+ // add the unzipper to the body stream processing pipeline
+ stream = stream.pipe(zlib.createUnzip());
+
+ // remove the content-encoding in order to not confuse downstream operations
+ delete res.headers['content-encoding'];
+ break;
+ }
+ }
+
+ var response = {
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: res.headers,
+ config: config,
+ request: lastRequest
+ };
+
+ if (config.responseType === 'stream') {
+ response.data = stream;
+ settle(resolve, reject, response);
+ } else {
+ var responseBuffer = [];
+ var totalResponseBytes = 0;
+ stream.on('data', function handleStreamData(chunk) {
+ responseBuffer.push(chunk);
+ totalResponseBytes += chunk.length;
+
+ // make sure the content length is not over the maxContentLength if specified
+ if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {
+ // stream.destoy() emit aborted event before calling reject() on Node.js v16
+ rejected = true;
+ stream.destroy();
+ reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
+ AxiosError.ERR_BAD_RESPONSE, config, lastRequest));
+ }
+ });
+
+ stream.on('aborted', function handlerStreamAborted() {
+ if (rejected) {
+ return;
+ }
+ stream.destroy();
+ reject(new AxiosError(
+ 'maxContentLength size of ' + config.maxContentLength + ' exceeded',
+ AxiosError.ERR_BAD_RESPONSE,
+ config,
+ lastRequest
+ ));
+ });
+
+ stream.on('error', function handleStreamError(err) {
+ if (req.aborted) return;
+ reject(AxiosError.from(err, null, config, lastRequest));
+ });
+
+ stream.on('end', function handleStreamEnd() {
+ try {
+ var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
+ if (config.responseType !== 'arraybuffer') {
+ responseData = responseData.toString(config.responseEncoding);
+ if (!config.responseEncoding || config.responseEncoding === 'utf8') {
+ responseData = utils.stripBOM(responseData);
+ }
+ }
+ response.data = responseData;
+ } catch (err) {
+ reject(AxiosError.from(err, null, config, response.request, response));
+ }
+ settle(resolve, reject, response);
+ });
+ }
+ });
+
+ // Handle errors
+ req.on('error', function handleRequestError(err) {
+ // @todo remove
+ // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;
+ reject(AxiosError.from(err, null, config, req));
+ });
+
+ // set tcp keep alive to prevent drop connection by peer
+ req.on('socket', function handleRequestSocket(socket) {
+ // default interval of sending ack packet is 1 minute
+ socket.setKeepAlive(true, 1000 * 60);
+ });
+
+ // Handle request timeout
+ if (config.timeout) {
+ // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.
+ var timeout = parseInt(config.timeout, 10);
+
+ if (isNaN(timeout)) {
+ reject(new AxiosError(
+ 'error trying to parse `config.timeout` to int',
+ AxiosError.ERR_BAD_OPTION_VALUE,
+ config,
+ req
+ ));
+
+ return;
+ }
+
+ // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.
+ // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET.
+ // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.
+ // And then these socket which be hang up will devoring CPU little by little.
+ // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.
+ req.setTimeout(timeout, function handleRequestTimeout() {
+ req.abort();
+ var transitional = config.transitional || transitionalDefaults;
+ reject(new AxiosError(
+ 'timeout of ' + timeout + 'ms exceeded',
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
+ config,
+ req
+ ));
+ });
+ }
+
+ if (config.cancelToken || config.signal) {
+ // Handle cancellation
+ // eslint-disable-next-line func-names
+ onCanceled = function(cancel) {
+ if (req.aborted) return;
+
+ req.abort();
+ reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
+ };
+
+ config.cancelToken && config.cancelToken.subscribe(onCanceled);
+ if (config.signal) {
+ config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
+ }
+ }
+
+
+ // Send the request
+ if (utils.isStream(data)) {
+ data.on('error', function handleStreamError(err) {
+ reject(AxiosError.from(err, config, null, req));
+ }).pipe(req);
+ } else {
+ req.end(data);
+ }
+ });
+};
diff --git a/node_modules/axios/lib/adapters/xhr.js b/node_modules/axios/lib/adapters/xhr.js
new file mode 100644
index 0000000..76d7e7a
--- /dev/null
+++ b/node_modules/axios/lib/adapters/xhr.js
@@ -0,0 +1,222 @@
+'use strict';
+
+var utils = require('./../utils');
+var settle = require('./../core/settle');
+var cookies = require('./../helpers/cookies');
+var buildURL = require('./../helpers/buildURL');
+var buildFullPath = require('../core/buildFullPath');
+var parseHeaders = require('./../helpers/parseHeaders');
+var isURLSameOrigin = require('./../helpers/isURLSameOrigin');
+var transitionalDefaults = require('../defaults/transitional');
+var AxiosError = require('../core/AxiosError');
+var CanceledError = require('../cancel/CanceledError');
+var parseProtocol = require('../helpers/parseProtocol');
+
+module.exports = function xhrAdapter(config) {
+ return new Promise(function dispatchXhrRequest(resolve, reject) {
+ var requestData = config.data;
+ var requestHeaders = config.headers;
+ var responseType = config.responseType;
+ var onCanceled;
+ function done() {
+ if (config.cancelToken) {
+ config.cancelToken.unsubscribe(onCanceled);
+ }
+
+ if (config.signal) {
+ config.signal.removeEventListener('abort', onCanceled);
+ }
+ }
+
+ if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
+ delete requestHeaders['Content-Type']; // Let the browser set it
+ }
+
+ var request = new XMLHttpRequest();
+
+ // HTTP basic authentication
+ if (config.auth) {
+ var username = config.auth.username || '';
+ var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
+ requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
+ }
+
+ var fullPath = buildFullPath(config.baseURL, config.url);
+
+ request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
+
+ // Set the request timeout in MS
+ request.timeout = config.timeout;
+
+ function onloadend() {
+ if (!request) {
+ return;
+ }
+ // Prepare the response
+ var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
+ var responseData = !responseType || responseType === 'text' || responseType === 'json' ?
+ request.responseText : request.response;
+ var response = {
+ data: responseData,
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders,
+ config: config,
+ request: request
+ };
+
+ settle(function _resolve(value) {
+ resolve(value);
+ done();
+ }, function _reject(err) {
+ reject(err);
+ done();
+ }, response);
+
+ // Clean up request
+ request = null;
+ }
+
+ if ('onloadend' in request) {
+ // Use onloadend if available
+ request.onloadend = onloadend;
+ } else {
+ // Listen for ready state to emulate onloadend
+ request.onreadystatechange = function handleLoad() {
+ if (!request || request.readyState !== 4) {
+ return;
+ }
+
+ // The request errored out and we didn't get a response, this will be
+ // handled by onerror instead
+ // With one exception: request that using file: protocol, most browsers
+ // will return status as 0 even though it's a successful request
+ if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
+ return;
+ }
+ // readystate handler is calling before onerror or ontimeout handlers,
+ // so we should call onloadend on the next 'tick'
+ setTimeout(onloadend);
+ };
+ }
+
+ // Handle browser request cancellation (as opposed to a manual cancellation)
+ request.onabort = function handleAbort() {
+ if (!request) {
+ return;
+ }
+
+ reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle low level network errors
+ request.onerror = function handleError() {
+ // Real errors are hidden from us by the browser
+ // onerror should only fire if it's a network error
+ reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle timeout
+ request.ontimeout = function handleTimeout() {
+ var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
+ var transitional = config.transitional || transitionalDefaults;
+ if (config.timeoutErrorMessage) {
+ timeoutErrorMessage = config.timeoutErrorMessage;
+ }
+ reject(new AxiosError(
+ timeoutErrorMessage,
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
+ config,
+ request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Add xsrf header
+ // This is only done if running in a standard browser environment.
+ // Specifically not if we're in a web worker, or react-native.
+ if (utils.isStandardBrowserEnv()) {
+ // Add xsrf header
+ var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
+ cookies.read(config.xsrfCookieName) :
+ undefined;
+
+ if (xsrfValue) {
+ requestHeaders[config.xsrfHeaderName] = xsrfValue;
+ }
+ }
+
+ // Add headers to the request
+ if ('setRequestHeader' in request) {
+ utils.forEach(requestHeaders, function setRequestHeader(val, key) {
+ if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
+ // Remove Content-Type if data is undefined
+ delete requestHeaders[key];
+ } else {
+ // Otherwise add header to the request
+ request.setRequestHeader(key, val);
+ }
+ });
+ }
+
+ // Add withCredentials to request if needed
+ if (!utils.isUndefined(config.withCredentials)) {
+ request.withCredentials = !!config.withCredentials;
+ }
+
+ // Add responseType to request if needed
+ if (responseType && responseType !== 'json') {
+ request.responseType = config.responseType;
+ }
+
+ // Handle progress if needed
+ if (typeof config.onDownloadProgress === 'function') {
+ request.addEventListener('progress', config.onDownloadProgress);
+ }
+
+ // Not all browsers support upload events
+ if (typeof config.onUploadProgress === 'function' && request.upload) {
+ request.upload.addEventListener('progress', config.onUploadProgress);
+ }
+
+ if (config.cancelToken || config.signal) {
+ // Handle cancellation
+ // eslint-disable-next-line func-names
+ onCanceled = function(cancel) {
+ if (!request) {
+ return;
+ }
+ reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
+ request.abort();
+ request = null;
+ };
+
+ config.cancelToken && config.cancelToken.subscribe(onCanceled);
+ if (config.signal) {
+ config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
+ }
+ }
+
+ if (!requestData) {
+ requestData = null;
+ }
+
+ var protocol = parseProtocol(fullPath);
+
+ if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {
+ reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
+ return;
+ }
+
+
+ // Send the request
+ request.send(requestData);
+ });
+};
diff --git a/node_modules/axios/lib/axios.js b/node_modules/axios/lib/axios.js
new file mode 100644
index 0000000..cf6583c
--- /dev/null
+++ b/node_modules/axios/lib/axios.js
@@ -0,0 +1,64 @@
+'use strict';
+
+var utils = require('./utils');
+var bind = require('./helpers/bind');
+var Axios = require('./core/Axios');
+var mergeConfig = require('./core/mergeConfig');
+var defaults = require('./defaults');
+
+/**
+ * Create an instance of Axios
+ *
+ * @param {Object} defaultConfig The default config for the instance
+ * @return {Axios} A new instance of Axios
+ */
+function createInstance(defaultConfig) {
+ var context = new Axios(defaultConfig);
+ var instance = bind(Axios.prototype.request, context);
+
+ // Copy axios.prototype to instance
+ utils.extend(instance, Axios.prototype, context);
+
+ // Copy context to instance
+ utils.extend(instance, context);
+
+ // Factory for creating new instances
+ instance.create = function create(instanceConfig) {
+ return createInstance(mergeConfig(defaultConfig, instanceConfig));
+ };
+
+ return instance;
+}
+
+// Create the default instance to be exported
+var axios = createInstance(defaults);
+
+// Expose Axios class to allow class inheritance
+axios.Axios = Axios;
+
+// Expose Cancel & CancelToken
+axios.CanceledError = require('./cancel/CanceledError');
+axios.CancelToken = require('./cancel/CancelToken');
+axios.isCancel = require('./cancel/isCancel');
+axios.VERSION = require('./env/data').version;
+axios.toFormData = require('./helpers/toFormData');
+
+// Expose AxiosError class
+axios.AxiosError = require('../lib/core/AxiosError');
+
+// alias for CanceledError for backward compatibility
+axios.Cancel = axios.CanceledError;
+
+// Expose all/spread
+axios.all = function all(promises) {
+ return Promise.all(promises);
+};
+axios.spread = require('./helpers/spread');
+
+// Expose isAxiosError
+axios.isAxiosError = require('./helpers/isAxiosError');
+
+module.exports = axios;
+
+// Allow use of default import syntax in TypeScript
+module.exports.default = axios;
diff --git a/node_modules/axios/lib/cancel/CancelToken.js b/node_modules/axios/lib/cancel/CancelToken.js
new file mode 100644
index 0000000..ee7989f
--- /dev/null
+++ b/node_modules/axios/lib/cancel/CancelToken.js
@@ -0,0 +1,119 @@
+'use strict';
+
+var CanceledError = require('./CanceledError');
+
+/**
+ * A `CancelToken` is an object that can be used to request cancellation of an operation.
+ *
+ * @class
+ * @param {Function} executor The executor function.
+ */
+function CancelToken(executor) {
+ if (typeof executor !== 'function') {
+ throw new TypeError('executor must be a function.');
+ }
+
+ var resolvePromise;
+
+ this.promise = new Promise(function promiseExecutor(resolve) {
+ resolvePromise = resolve;
+ });
+
+ var token = this;
+
+ // eslint-disable-next-line func-names
+ this.promise.then(function(cancel) {
+ if (!token._listeners) return;
+
+ var i;
+ var l = token._listeners.length;
+
+ for (i = 0; i < l; i++) {
+ token._listeners[i](cancel);
+ }
+ token._listeners = null;
+ });
+
+ // eslint-disable-next-line func-names
+ this.promise.then = function(onfulfilled) {
+ var _resolve;
+ // eslint-disable-next-line func-names
+ var promise = new Promise(function(resolve) {
+ token.subscribe(resolve);
+ _resolve = resolve;
+ }).then(onfulfilled);
+
+ promise.cancel = function reject() {
+ token.unsubscribe(_resolve);
+ };
+
+ return promise;
+ };
+
+ executor(function cancel(message) {
+ if (token.reason) {
+ // Cancellation has already been requested
+ return;
+ }
+
+ token.reason = new CanceledError(message);
+ resolvePromise(token.reason);
+ });
+}
+
+/**
+ * Throws a `CanceledError` if cancellation has been requested.
+ */
+CancelToken.prototype.throwIfRequested = function throwIfRequested() {
+ if (this.reason) {
+ throw this.reason;
+ }
+};
+
+/**
+ * Subscribe to the cancel signal
+ */
+
+CancelToken.prototype.subscribe = function subscribe(listener) {
+ if (this.reason) {
+ listener(this.reason);
+ return;
+ }
+
+ if (this._listeners) {
+ this._listeners.push(listener);
+ } else {
+ this._listeners = [listener];
+ }
+};
+
+/**
+ * Unsubscribe from the cancel signal
+ */
+
+CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
+ if (!this._listeners) {
+ return;
+ }
+ var index = this._listeners.indexOf(listener);
+ if (index !== -1) {
+ this._listeners.splice(index, 1);
+ }
+};
+
+/**
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
+ * cancels the `CancelToken`.
+ */
+CancelToken.source = function source() {
+ var cancel;
+ var token = new CancelToken(function executor(c) {
+ cancel = c;
+ });
+ return {
+ token: token,
+ cancel: cancel
+ };
+};
+
+module.exports = CancelToken;
diff --git a/node_modules/axios/lib/cancel/CanceledError.js b/node_modules/axios/lib/cancel/CanceledError.js
new file mode 100644
index 0000000..b7ceb02
--- /dev/null
+++ b/node_modules/axios/lib/cancel/CanceledError.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var AxiosError = require('../core/AxiosError');
+var utils = require('../utils');
+
+/**
+ * A `CanceledError` is an object that is thrown when an operation is canceled.
+ *
+ * @class
+ * @param {string=} message The message.
+ */
+function CanceledError(message) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);
+ this.name = 'CanceledError';
+}
+
+utils.inherits(CanceledError, AxiosError, {
+ __CANCEL__: true
+});
+
+module.exports = CanceledError;
diff --git a/node_modules/axios/lib/cancel/isCancel.js b/node_modules/axios/lib/cancel/isCancel.js
new file mode 100644
index 0000000..051f3ae
--- /dev/null
+++ b/node_modules/axios/lib/cancel/isCancel.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isCancel(value) {
+ return !!(value && value.__CANCEL__);
+};
diff --git a/node_modules/axios/lib/core/Axios.js b/node_modules/axios/lib/core/Axios.js
new file mode 100644
index 0000000..3a79171
--- /dev/null
+++ b/node_modules/axios/lib/core/Axios.js
@@ -0,0 +1,160 @@
+'use strict';
+
+var utils = require('./../utils');
+var buildURL = require('../helpers/buildURL');
+var InterceptorManager = require('./InterceptorManager');
+var dispatchRequest = require('./dispatchRequest');
+var mergeConfig = require('./mergeConfig');
+var buildFullPath = require('./buildFullPath');
+var validator = require('../helpers/validator');
+
+var validators = validator.validators;
+/**
+ * Create a new instance of Axios
+ *
+ * @param {Object} instanceConfig The default config for the instance
+ */
+function Axios(instanceConfig) {
+ this.defaults = instanceConfig;
+ this.interceptors = {
+ request: new InterceptorManager(),
+ response: new InterceptorManager()
+ };
+}
+
+/**
+ * Dispatch a request
+ *
+ * @param {Object} config The config specific for this request (merged with this.defaults)
+ */
+Axios.prototype.request = function request(configOrUrl, config) {
+ /*eslint no-param-reassign:0*/
+ // Allow for axios('example/url'[, config]) a la fetch API
+ if (typeof configOrUrl === 'string') {
+ config = config || {};
+ config.url = configOrUrl;
+ } else {
+ config = configOrUrl || {};
+ }
+
+ config = mergeConfig(this.defaults, config);
+
+ // Set config.method
+ if (config.method) {
+ config.method = config.method.toLowerCase();
+ } else if (this.defaults.method) {
+ config.method = this.defaults.method.toLowerCase();
+ } else {
+ config.method = 'get';
+ }
+
+ var transitional = config.transitional;
+
+ if (transitional !== undefined) {
+ validator.assertOptions(transitional, {
+ silentJSONParsing: validators.transitional(validators.boolean),
+ forcedJSONParsing: validators.transitional(validators.boolean),
+ clarifyTimeoutError: validators.transitional(validators.boolean)
+ }, false);
+ }
+
+ // filter out skipped interceptors
+ var requestInterceptorChain = [];
+ var synchronousRequestInterceptors = true;
+ this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+ if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
+ return;
+ }
+
+ synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
+
+ requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
+ });
+
+ var responseInterceptorChain = [];
+ this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+ responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
+ });
+
+ var promise;
+
+ if (!synchronousRequestInterceptors) {
+ var chain = [dispatchRequest, undefined];
+
+ Array.prototype.unshift.apply(chain, requestInterceptorChain);
+ chain = chain.concat(responseInterceptorChain);
+
+ promise = Promise.resolve(config);
+ while (chain.length) {
+ promise = promise.then(chain.shift(), chain.shift());
+ }
+
+ return promise;
+ }
+
+
+ var newConfig = config;
+ while (requestInterceptorChain.length) {
+ var onFulfilled = requestInterceptorChain.shift();
+ var onRejected = requestInterceptorChain.shift();
+ try {
+ newConfig = onFulfilled(newConfig);
+ } catch (error) {
+ onRejected(error);
+ break;
+ }
+ }
+
+ try {
+ promise = dispatchRequest(newConfig);
+ } catch (error) {
+ return Promise.reject(error);
+ }
+
+ while (responseInterceptorChain.length) {
+ promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
+ }
+
+ return promise;
+};
+
+Axios.prototype.getUri = function getUri(config) {
+ config = mergeConfig(this.defaults, config);
+ var fullPath = buildFullPath(config.baseURL, config.url);
+ return buildURL(fullPath, config.params, config.paramsSerializer);
+};
+
+// Provide aliases for supported request methods
+utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
+ /*eslint func-names:0*/
+ Axios.prototype[method] = function(url, config) {
+ return this.request(mergeConfig(config || {}, {
+ method: method,
+ url: url,
+ data: (config || {}).data
+ }));
+ };
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+ /*eslint func-names:0*/
+
+ function generateHTTPMethod(isForm) {
+ return function httpMethod(url, data, config) {
+ return this.request(mergeConfig(config || {}, {
+ method: method,
+ headers: isForm ? {
+ 'Content-Type': 'multipart/form-data'
+ } : {},
+ url: url,
+ data: data
+ }));
+ };
+ }
+
+ Axios.prototype[method] = generateHTTPMethod();
+
+ Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
+});
+
+module.exports = Axios;
diff --git a/node_modules/axios/lib/core/AxiosError.js b/node_modules/axios/lib/core/AxiosError.js
new file mode 100644
index 0000000..52c806a
--- /dev/null
+++ b/node_modules/axios/lib/core/AxiosError.js
@@ -0,0 +1,86 @@
+'use strict';
+
+var utils = require('../utils');
+
+/**
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [config] The config.
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The created error.
+ */
+function AxiosError(message, code, config, request, response) {
+ Error.call(this);
+ this.message = message;
+ this.name = 'AxiosError';
+ code && (this.code = code);
+ config && (this.config = config);
+ request && (this.request = request);
+ response && (this.response = response);
+}
+
+utils.inherits(AxiosError, Error, {
+ toJSON: function toJSON() {
+ return {
+ // Standard
+ message: this.message,
+ name: this.name,
+ // Microsoft
+ description: this.description,
+ number: this.number,
+ // Mozilla
+ fileName: this.fileName,
+ lineNumber: this.lineNumber,
+ columnNumber: this.columnNumber,
+ stack: this.stack,
+ // Axios
+ config: this.config,
+ code: this.code,
+ status: this.response && this.response.status ? this.response.status : null
+ };
+ }
+});
+
+var prototype = AxiosError.prototype;
+var descriptors = {};
+
+[
+ 'ERR_BAD_OPTION_VALUE',
+ 'ERR_BAD_OPTION',
+ 'ECONNABORTED',
+ 'ETIMEDOUT',
+ 'ERR_NETWORK',
+ 'ERR_FR_TOO_MANY_REDIRECTS',
+ 'ERR_DEPRECATED',
+ 'ERR_BAD_RESPONSE',
+ 'ERR_BAD_REQUEST',
+ 'ERR_CANCELED'
+// eslint-disable-next-line func-names
+].forEach(function(code) {
+ descriptors[code] = {value: code};
+});
+
+Object.defineProperties(AxiosError, descriptors);
+Object.defineProperty(prototype, 'isAxiosError', {value: true});
+
+// eslint-disable-next-line func-names
+AxiosError.from = function(error, code, config, request, response, customProps) {
+ var axiosError = Object.create(prototype);
+
+ utils.toFlatObject(error, axiosError, function filter(obj) {
+ return obj !== Error.prototype;
+ });
+
+ AxiosError.call(axiosError, error.message, code, config, request, response);
+
+ axiosError.name = error.name;
+
+ customProps && Object.assign(axiosError, customProps);
+
+ return axiosError;
+};
+
+module.exports = AxiosError;
diff --git a/node_modules/axios/lib/core/InterceptorManager.js b/node_modules/axios/lib/core/InterceptorManager.js
new file mode 100644
index 0000000..900f448
--- /dev/null
+++ b/node_modules/axios/lib/core/InterceptorManager.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var utils = require('./../utils');
+
+function InterceptorManager() {
+ this.handlers = [];
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
+ this.handlers.push({
+ fulfilled: fulfilled,
+ rejected: rejected,
+ synchronous: options ? options.synchronous : false,
+ runWhen: options ? options.runWhen : null
+ });
+ return this.handlers.length - 1;
+};
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+ if (this.handlers[id]) {
+ this.handlers[id] = null;
+ }
+};
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+ utils.forEach(this.handlers, function forEachHandler(h) {
+ if (h !== null) {
+ fn(h);
+ }
+ });
+};
+
+module.exports = InterceptorManager;
diff --git a/node_modules/axios/lib/core/README.md b/node_modules/axios/lib/core/README.md
new file mode 100644
index 0000000..84559ce
--- /dev/null
+++ b/node_modules/axios/lib/core/README.md
@@ -0,0 +1,8 @@
+# axios // core
+
+The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are:
+
+- Dispatching requests
+ - Requests sent via `adapters/` (see lib/adapters/README.md)
+- Managing interceptors
+- Handling config
diff --git a/node_modules/axios/lib/core/buildFullPath.js b/node_modules/axios/lib/core/buildFullPath.js
new file mode 100644
index 0000000..00b2b05
--- /dev/null
+++ b/node_modules/axios/lib/core/buildFullPath.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var isAbsoluteURL = require('../helpers/isAbsoluteURL');
+var combineURLs = require('../helpers/combineURLs');
+
+/**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ * @returns {string} The combined full path
+ */
+module.exports = function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL);
+ }
+ return requestedURL;
+};
diff --git a/node_modules/axios/lib/core/dispatchRequest.js b/node_modules/axios/lib/core/dispatchRequest.js
new file mode 100644
index 0000000..fa1ad95
--- /dev/null
+++ b/node_modules/axios/lib/core/dispatchRequest.js
@@ -0,0 +1,87 @@
+'use strict';
+
+var utils = require('./../utils');
+var transformData = require('./transformData');
+var isCancel = require('../cancel/isCancel');
+var defaults = require('../defaults');
+var CanceledError = require('../cancel/CanceledError');
+
+/**
+ * Throws a `CanceledError` if cancellation has been requested.
+ */
+function throwIfCancellationRequested(config) {
+ if (config.cancelToken) {
+ config.cancelToken.throwIfRequested();
+ }
+
+ if (config.signal && config.signal.aborted) {
+ throw new CanceledError();
+ }
+}
+
+/**
+ * Dispatch a request to the server using the configured adapter.
+ *
+ * @param {object} config The config that is to be used for the request
+ * @returns {Promise} The Promise to be fulfilled
+ */
+module.exports = function dispatchRequest(config) {
+ throwIfCancellationRequested(config);
+
+ // Ensure headers exist
+ config.headers = config.headers || {};
+
+ // Transform request data
+ config.data = transformData.call(
+ config,
+ config.data,
+ config.headers,
+ config.transformRequest
+ );
+
+ // Flatten headers
+ config.headers = utils.merge(
+ config.headers.common || {},
+ config.headers[config.method] || {},
+ config.headers
+ );
+
+ utils.forEach(
+ ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
+ function cleanHeaderConfig(method) {
+ delete config.headers[method];
+ }
+ );
+
+ var adapter = config.adapter || defaults.adapter;
+
+ return adapter(config).then(function onAdapterResolution(response) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ response.data = transformData.call(
+ config,
+ response.data,
+ response.headers,
+ config.transformResponse
+ );
+
+ return response;
+ }, function onAdapterRejection(reason) {
+ if (!isCancel(reason)) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ if (reason && reason.response) {
+ reason.response.data = transformData.call(
+ config,
+ reason.response.data,
+ reason.response.headers,
+ config.transformResponse
+ );
+ }
+ }
+
+ return Promise.reject(reason);
+ });
+};
diff --git a/node_modules/axios/lib/core/mergeConfig.js b/node_modules/axios/lib/core/mergeConfig.js
new file mode 100644
index 0000000..eb7aa39
--- /dev/null
+++ b/node_modules/axios/lib/core/mergeConfig.js
@@ -0,0 +1,100 @@
+'use strict';
+
+var utils = require('../utils');
+
+/**
+ * Config-specific merge-function which creates a new config-object
+ * by merging two configuration objects together.
+ *
+ * @param {Object} config1
+ * @param {Object} config2
+ * @returns {Object} New object resulting from merging config2 to config1
+ */
+module.exports = function mergeConfig(config1, config2) {
+ // eslint-disable-next-line no-param-reassign
+ config2 = config2 || {};
+ var config = {};
+
+ function getMergedValue(target, source) {
+ if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
+ return utils.merge(target, source);
+ } else if (utils.isPlainObject(source)) {
+ return utils.merge({}, source);
+ } else if (utils.isArray(source)) {
+ return source.slice();
+ }
+ return source;
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDeepProperties(prop) {
+ if (!utils.isUndefined(config2[prop])) {
+ return getMergedValue(config1[prop], config2[prop]);
+ } else if (!utils.isUndefined(config1[prop])) {
+ return getMergedValue(undefined, config1[prop]);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function valueFromConfig2(prop) {
+ if (!utils.isUndefined(config2[prop])) {
+ return getMergedValue(undefined, config2[prop]);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function defaultToConfig2(prop) {
+ if (!utils.isUndefined(config2[prop])) {
+ return getMergedValue(undefined, config2[prop]);
+ } else if (!utils.isUndefined(config1[prop])) {
+ return getMergedValue(undefined, config1[prop]);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDirectKeys(prop) {
+ if (prop in config2) {
+ return getMergedValue(config1[prop], config2[prop]);
+ } else if (prop in config1) {
+ return getMergedValue(undefined, config1[prop]);
+ }
+ }
+
+ var mergeMap = {
+ 'url': valueFromConfig2,
+ 'method': valueFromConfig2,
+ 'data': valueFromConfig2,
+ 'baseURL': defaultToConfig2,
+ 'transformRequest': defaultToConfig2,
+ 'transformResponse': defaultToConfig2,
+ 'paramsSerializer': defaultToConfig2,
+ 'timeout': defaultToConfig2,
+ 'timeoutMessage': defaultToConfig2,
+ 'withCredentials': defaultToConfig2,
+ 'adapter': defaultToConfig2,
+ 'responseType': defaultToConfig2,
+ 'xsrfCookieName': defaultToConfig2,
+ 'xsrfHeaderName': defaultToConfig2,
+ 'onUploadProgress': defaultToConfig2,
+ 'onDownloadProgress': defaultToConfig2,
+ 'decompress': defaultToConfig2,
+ 'maxContentLength': defaultToConfig2,
+ 'maxBodyLength': defaultToConfig2,
+ 'beforeRedirect': defaultToConfig2,
+ 'transport': defaultToConfig2,
+ 'httpAgent': defaultToConfig2,
+ 'httpsAgent': defaultToConfig2,
+ 'cancelToken': defaultToConfig2,
+ 'socketPath': defaultToConfig2,
+ 'responseEncoding': defaultToConfig2,
+ 'validateStatus': mergeDirectKeys
+ };
+
+ utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
+ var merge = mergeMap[prop] || mergeDeepProperties;
+ var configValue = merge(prop);
+ (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
+ });
+
+ return config;
+};
diff --git a/node_modules/axios/lib/core/settle.js b/node_modules/axios/lib/core/settle.js
new file mode 100644
index 0000000..bbb9afa
--- /dev/null
+++ b/node_modules/axios/lib/core/settle.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var AxiosError = require('./AxiosError');
+
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+module.exports = function settle(resolve, reject, response) {
+ var validateStatus = response.config.validateStatus;
+ if (!response.status || !validateStatus || validateStatus(response.status)) {
+ resolve(response);
+ } else {
+ reject(new AxiosError(
+ 'Request failed with status code ' + response.status,
+ [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
+ response.config,
+ response.request,
+ response
+ ));
+ }
+};
diff --git a/node_modules/axios/lib/core/transformData.js b/node_modules/axios/lib/core/transformData.js
new file mode 100644
index 0000000..82ee7dd
--- /dev/null
+++ b/node_modules/axios/lib/core/transformData.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var utils = require('./../utils');
+var defaults = require('../defaults');
+
+/**
+ * Transform the data for a request or a response
+ *
+ * @param {Object|String} data The data to be transformed
+ * @param {Array} headers The headers for the request or response
+ * @param {Array|Function} fns A single function or Array of functions
+ * @returns {*} The resulting transformed data
+ */
+module.exports = function transformData(data, headers, fns) {
+ var context = this || defaults;
+ /*eslint no-param-reassign:0*/
+ utils.forEach(fns, function transform(fn) {
+ data = fn.call(context, data, headers);
+ });
+
+ return data;
+};
diff --git a/node_modules/axios/lib/defaults/env/FormData.js b/node_modules/axios/lib/defaults/env/FormData.js
new file mode 100644
index 0000000..a8e6bdf
--- /dev/null
+++ b/node_modules/axios/lib/defaults/env/FormData.js
@@ -0,0 +1,2 @@
+// eslint-disable-next-line strict
+module.exports = require('form-data');
diff --git a/node_modules/axios/lib/defaults/index.js b/node_modules/axios/lib/defaults/index.js
new file mode 100644
index 0000000..9199818
--- /dev/null
+++ b/node_modules/axios/lib/defaults/index.js
@@ -0,0 +1,146 @@
+'use strict';
+
+var utils = require('../utils');
+var normalizeHeaderName = require('../helpers/normalizeHeaderName');
+var AxiosError = require('../core/AxiosError');
+var transitionalDefaults = require('./transitional');
+var toFormData = require('../helpers/toFormData');
+
+var DEFAULT_CONTENT_TYPE = {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+};
+
+function setContentTypeIfUnset(headers, value) {
+ if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
+ headers['Content-Type'] = value;
+ }
+}
+
+function getDefaultAdapter() {
+ var adapter;
+ if (typeof XMLHttpRequest !== 'undefined') {
+ // For browsers use XHR adapter
+ adapter = require('../adapters/xhr');
+ } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
+ // For node use HTTP adapter
+ adapter = require('../adapters/http');
+ }
+ return adapter;
+}
+
+function stringifySafely(rawValue, parser, encoder) {
+ if (utils.isString(rawValue)) {
+ try {
+ (parser || JSON.parse)(rawValue);
+ return utils.trim(rawValue);
+ } catch (e) {
+ if (e.name !== 'SyntaxError') {
+ throw e;
+ }
+ }
+ }
+
+ return (encoder || JSON.stringify)(rawValue);
+}
+
+var defaults = {
+
+ transitional: transitionalDefaults,
+
+ adapter: getDefaultAdapter(),
+
+ transformRequest: [function transformRequest(data, headers) {
+ normalizeHeaderName(headers, 'Accept');
+ normalizeHeaderName(headers, 'Content-Type');
+
+ if (utils.isFormData(data) ||
+ utils.isArrayBuffer(data) ||
+ utils.isBuffer(data) ||
+ utils.isStream(data) ||
+ utils.isFile(data) ||
+ utils.isBlob(data)
+ ) {
+ return data;
+ }
+ if (utils.isArrayBufferView(data)) {
+ return data.buffer;
+ }
+ if (utils.isURLSearchParams(data)) {
+ setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
+ return data.toString();
+ }
+
+ var isObjectPayload = utils.isObject(data);
+ var contentType = headers && headers['Content-Type'];
+
+ var isFileList;
+
+ if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
+ var _FormData = this.env && this.env.FormData;
+ return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
+ } else if (isObjectPayload || contentType === 'application/json') {
+ setContentTypeIfUnset(headers, 'application/json');
+ return stringifySafely(data);
+ }
+
+ return data;
+ }],
+
+ transformResponse: [function transformResponse(data) {
+ var transitional = this.transitional || defaults.transitional;
+ var silentJSONParsing = transitional && transitional.silentJSONParsing;
+ var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
+ var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
+
+ if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
+ try {
+ return JSON.parse(data);
+ } catch (e) {
+ if (strictJSONParsing) {
+ if (e.name === 'SyntaxError') {
+ throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
+ }
+ throw e;
+ }
+ }
+ }
+
+ return data;
+ }],
+
+ /**
+ * A timeout in milliseconds to abort a request. If set to 0 (default) a
+ * timeout is not created.
+ */
+ timeout: 0,
+
+ xsrfCookieName: 'XSRF-TOKEN',
+ xsrfHeaderName: 'X-XSRF-TOKEN',
+
+ maxContentLength: -1,
+ maxBodyLength: -1,
+
+ env: {
+ FormData: require('./env/FormData')
+ },
+
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300;
+ },
+
+ headers: {
+ common: {
+ 'Accept': 'application/json, text/plain, */*'
+ }
+ }
+};
+
+utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
+ defaults.headers[method] = {};
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+ defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
+});
+
+module.exports = defaults;
diff --git a/node_modules/axios/lib/defaults/transitional.js b/node_modules/axios/lib/defaults/transitional.js
new file mode 100644
index 0000000..601dd7e
--- /dev/null
+++ b/node_modules/axios/lib/defaults/transitional.js
@@ -0,0 +1,7 @@
+'use strict';
+
+module.exports = {
+ silentJSONParsing: true,
+ forcedJSONParsing: true,
+ clarifyTimeoutError: false
+};
diff --git a/node_modules/axios/lib/env/README.md b/node_modules/axios/lib/env/README.md
new file mode 100644
index 0000000..b41baff
--- /dev/null
+++ b/node_modules/axios/lib/env/README.md
@@ -0,0 +1,3 @@
+# axios // env
+
+The `data.js` file is updated automatically when the package version is upgrading. Please do not edit it manually.
diff --git a/node_modules/axios/lib/env/data.js b/node_modules/axios/lib/env/data.js
new file mode 100644
index 0000000..62f7a0e
--- /dev/null
+++ b/node_modules/axios/lib/env/data.js
@@ -0,0 +1,3 @@
+module.exports = {
+ "version": "0.27.2"
+};
\ No newline at end of file
diff --git a/node_modules/axios/lib/helpers/README.md b/node_modules/axios/lib/helpers/README.md
new file mode 100644
index 0000000..4ae3419
--- /dev/null
+++ b/node_modules/axios/lib/helpers/README.md
@@ -0,0 +1,7 @@
+# axios // helpers
+
+The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like:
+
+- Browser polyfills
+- Managing cookies
+- Parsing HTTP headers
diff --git a/node_modules/axios/lib/helpers/bind.js b/node_modules/axios/lib/helpers/bind.js
new file mode 100644
index 0000000..6147c60
--- /dev/null
+++ b/node_modules/axios/lib/helpers/bind.js
@@ -0,0 +1,11 @@
+'use strict';
+
+module.exports = function bind(fn, thisArg) {
+ return function wrap() {
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i];
+ }
+ return fn.apply(thisArg, args);
+ };
+};
diff --git a/node_modules/axios/lib/helpers/buildURL.js b/node_modules/axios/lib/helpers/buildURL.js
new file mode 100644
index 0000000..31595c3
--- /dev/null
+++ b/node_modules/axios/lib/helpers/buildURL.js
@@ -0,0 +1,70 @@
+'use strict';
+
+var utils = require('./../utils');
+
+function encode(val) {
+ return encodeURIComponent(val).
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%20/g, '+').
+ replace(/%5B/gi, '[').
+ replace(/%5D/gi, ']');
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+module.exports = function buildURL(url, params, paramsSerializer) {
+ /*eslint no-param-reassign:0*/
+ if (!params) {
+ return url;
+ }
+
+ var serializedParams;
+ if (paramsSerializer) {
+ serializedParams = paramsSerializer(params);
+ } else if (utils.isURLSearchParams(params)) {
+ serializedParams = params.toString();
+ } else {
+ var parts = [];
+
+ utils.forEach(params, function serialize(val, key) {
+ if (val === null || typeof val === 'undefined') {
+ return;
+ }
+
+ if (utils.isArray(val)) {
+ key = key + '[]';
+ } else {
+ val = [val];
+ }
+
+ utils.forEach(val, function parseValue(v) {
+ if (utils.isDate(v)) {
+ v = v.toISOString();
+ } else if (utils.isObject(v)) {
+ v = JSON.stringify(v);
+ }
+ parts.push(encode(key) + '=' + encode(v));
+ });
+ });
+
+ serializedParams = parts.join('&');
+ }
+
+ if (serializedParams) {
+ var hashmarkIndex = url.indexOf('#');
+ if (hashmarkIndex !== -1) {
+ url = url.slice(0, hashmarkIndex);
+ }
+
+ url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
+ }
+
+ return url;
+};
diff --git a/node_modules/axios/lib/helpers/combineURLs.js b/node_modules/axios/lib/helpers/combineURLs.js
new file mode 100644
index 0000000..f1b58a5
--- /dev/null
+++ b/node_modules/axios/lib/helpers/combineURLs.js
@@ -0,0 +1,14 @@
+'use strict';
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+module.exports = function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+ : baseURL;
+};
diff --git a/node_modules/axios/lib/helpers/cookies.js b/node_modules/axios/lib/helpers/cookies.js
new file mode 100644
index 0000000..5a8a666
--- /dev/null
+++ b/node_modules/axios/lib/helpers/cookies.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var utils = require('./../utils');
+
+module.exports = (
+ utils.isStandardBrowserEnv() ?
+
+ // Standard browser envs support document.cookie
+ (function standardBrowserEnv() {
+ return {
+ write: function write(name, value, expires, path, domain, secure) {
+ var cookie = [];
+ cookie.push(name + '=' + encodeURIComponent(value));
+
+ if (utils.isNumber(expires)) {
+ cookie.push('expires=' + new Date(expires).toGMTString());
+ }
+
+ if (utils.isString(path)) {
+ cookie.push('path=' + path);
+ }
+
+ if (utils.isString(domain)) {
+ cookie.push('domain=' + domain);
+ }
+
+ if (secure === true) {
+ cookie.push('secure');
+ }
+
+ document.cookie = cookie.join('; ');
+ },
+
+ read: function read(name) {
+ var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
+ return (match ? decodeURIComponent(match[3]) : null);
+ },
+
+ remove: function remove(name) {
+ this.write(name, '', Date.now() - 86400000);
+ }
+ };
+ })() :
+
+ // Non standard browser env (web workers, react-native) lack needed support.
+ (function nonStandardBrowserEnv() {
+ return {
+ write: function write() {},
+ read: function read() { return null; },
+ remove: function remove() {}
+ };
+ })()
+);
diff --git a/node_modules/axios/lib/helpers/deprecatedMethod.js b/node_modules/axios/lib/helpers/deprecatedMethod.js
new file mode 100644
index 0000000..ed40965
--- /dev/null
+++ b/node_modules/axios/lib/helpers/deprecatedMethod.js
@@ -0,0 +1,24 @@
+'use strict';
+
+/*eslint no-console:0*/
+
+/**
+ * Supply a warning to the developer that a method they are using
+ * has been deprecated.
+ *
+ * @param {string} method The name of the deprecated method
+ * @param {string} [instead] The alternate method to use if applicable
+ * @param {string} [docs] The documentation URL to get further details
+ */
+module.exports = function deprecatedMethod(method, instead, docs) {
+ try {
+ console.warn(
+ 'DEPRECATED method `' + method + '`.' +
+ (instead ? ' Use `' + instead + '` instead.' : '') +
+ ' This method will be removed in a future release.');
+
+ if (docs) {
+ console.warn('For more information about usage see ' + docs);
+ }
+ } catch (e) { /* Ignore */ }
+};
diff --git a/node_modules/axios/lib/helpers/isAbsoluteURL.js b/node_modules/axios/lib/helpers/isAbsoluteURL.js
new file mode 100644
index 0000000..43fea78
--- /dev/null
+++ b/node_modules/axios/lib/helpers/isAbsoluteURL.js
@@ -0,0 +1,14 @@
+'use strict';
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+module.exports = function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
+ // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+ // by any combination of letters, digits, plus, period, or hyphen.
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
+};
diff --git a/node_modules/axios/lib/helpers/isAxiosError.js b/node_modules/axios/lib/helpers/isAxiosError.js
new file mode 100644
index 0000000..a037bec
--- /dev/null
+++ b/node_modules/axios/lib/helpers/isAxiosError.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var utils = require('./../utils');
+
+/**
+ * Determines whether the payload is an error thrown by Axios
+ *
+ * @param {*} payload The value to test
+ * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
+ */
+module.exports = function isAxiosError(payload) {
+ return utils.isObject(payload) && (payload.isAxiosError === true);
+};
diff --git a/node_modules/axios/lib/helpers/isURLSameOrigin.js b/node_modules/axios/lib/helpers/isURLSameOrigin.js
new file mode 100644
index 0000000..f1d89ad
--- /dev/null
+++ b/node_modules/axios/lib/helpers/isURLSameOrigin.js
@@ -0,0 +1,68 @@
+'use strict';
+
+var utils = require('./../utils');
+
+module.exports = (
+ utils.isStandardBrowserEnv() ?
+
+ // Standard browser envs have full support of the APIs needed to test
+ // whether the request URL is of the same origin as current location.
+ (function standardBrowserEnv() {
+ var msie = /(msie|trident)/i.test(navigator.userAgent);
+ var urlParsingNode = document.createElement('a');
+ var originURL;
+
+ /**
+ * Parse a URL to discover it's components
+ *
+ * @param {String} url The URL to be parsed
+ * @returns {Object}
+ */
+ function resolveURL(url) {
+ var href = url;
+
+ if (msie) {
+ // IE needs attribute set twice to normalize properties
+ urlParsingNode.setAttribute('href', href);
+ href = urlParsingNode.href;
+ }
+
+ urlParsingNode.setAttribute('href', href);
+
+ // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+ return {
+ href: urlParsingNode.href,
+ protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+ host: urlParsingNode.host,
+ search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+ hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+ hostname: urlParsingNode.hostname,
+ port: urlParsingNode.port,
+ pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
+ urlParsingNode.pathname :
+ '/' + urlParsingNode.pathname
+ };
+ }
+
+ originURL = resolveURL(window.location.href);
+
+ /**
+ * Determine if a URL shares the same origin as the current location
+ *
+ * @param {String} requestURL The URL to test
+ * @returns {boolean} True if URL shares the same origin, otherwise false
+ */
+ return function isURLSameOrigin(requestURL) {
+ var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
+ return (parsed.protocol === originURL.protocol &&
+ parsed.host === originURL.host);
+ };
+ })() :
+
+ // Non standard browser envs (web workers, react-native) lack needed support.
+ (function nonStandardBrowserEnv() {
+ return function isURLSameOrigin() {
+ return true;
+ };
+ })()
+);
diff --git a/node_modules/axios/lib/helpers/normalizeHeaderName.js b/node_modules/axios/lib/helpers/normalizeHeaderName.js
new file mode 100644
index 0000000..738c9fe
--- /dev/null
+++ b/node_modules/axios/lib/helpers/normalizeHeaderName.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var utils = require('../utils');
+
+module.exports = function normalizeHeaderName(headers, normalizedName) {
+ utils.forEach(headers, function processHeader(value, name) {
+ if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
+ headers[normalizedName] = value;
+ delete headers[name];
+ }
+ });
+};
diff --git a/node_modules/axios/lib/helpers/null.js b/node_modules/axios/lib/helpers/null.js
new file mode 100644
index 0000000..859bace
--- /dev/null
+++ b/node_modules/axios/lib/helpers/null.js
@@ -0,0 +1,2 @@
+// eslint-disable-next-line strict
+module.exports = null;
diff --git a/node_modules/axios/lib/helpers/parseHeaders.js b/node_modules/axios/lib/helpers/parseHeaders.js
new file mode 100644
index 0000000..8af2cc7
--- /dev/null
+++ b/node_modules/axios/lib/helpers/parseHeaders.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var utils = require('./../utils');
+
+// Headers whose duplicates are ignored by node
+// c.f. https://nodejs.org/api/http.html#http_message_headers
+var ignoreDuplicateOf = [
+ 'age', 'authorization', 'content-length', 'content-type', 'etag',
+ 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
+ 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
+ 'referer', 'retry-after', 'user-agent'
+];
+
+/**
+ * Parse headers into an object
+ *
+ * ```
+ * Date: Wed, 27 Aug 2014 08:58:49 GMT
+ * Content-Type: application/json
+ * Connection: keep-alive
+ * Transfer-Encoding: chunked
+ * ```
+ *
+ * @param {String} headers Headers needing to be parsed
+ * @returns {Object} Headers parsed into an object
+ */
+module.exports = function parseHeaders(headers) {
+ var parsed = {};
+ var key;
+ var val;
+ var i;
+
+ if (!headers) { return parsed; }
+
+ utils.forEach(headers.split('\n'), function parser(line) {
+ i = line.indexOf(':');
+ key = utils.trim(line.substr(0, i)).toLowerCase();
+ val = utils.trim(line.substr(i + 1));
+
+ if (key) {
+ if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
+ return;
+ }
+ if (key === 'set-cookie') {
+ parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
+ } else {
+ parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+ }
+ }
+ });
+
+ return parsed;
+};
diff --git a/node_modules/axios/lib/helpers/parseProtocol.js b/node_modules/axios/lib/helpers/parseProtocol.js
new file mode 100644
index 0000000..10f3f02
--- /dev/null
+++ b/node_modules/axios/lib/helpers/parseProtocol.js
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = function parseProtocol(url) {
+ var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
+ return match && match[1] || '';
+};
diff --git a/node_modules/axios/lib/helpers/spread.js b/node_modules/axios/lib/helpers/spread.js
new file mode 100644
index 0000000..25e3cdd
--- /dev/null
+++ b/node_modules/axios/lib/helpers/spread.js
@@ -0,0 +1,27 @@
+'use strict';
+
+/**
+ * Syntactic sugar for invoking a function and expanding an array for arguments.
+ *
+ * Common use case would be to use `Function.prototype.apply`.
+ *
+ * ```js
+ * function f(x, y, z) {}
+ * var args = [1, 2, 3];
+ * f.apply(null, args);
+ * ```
+ *
+ * With `spread` this example can be re-written.
+ *
+ * ```js
+ * spread(function(x, y, z) {})([1, 2, 3]);
+ * ```
+ *
+ * @param {Function} callback
+ * @returns {Function}
+ */
+module.exports = function spread(callback) {
+ return function wrap(arr) {
+ return callback.apply(null, arr);
+ };
+};
diff --git a/node_modules/axios/lib/helpers/toFormData.js b/node_modules/axios/lib/helpers/toFormData.js
new file mode 100644
index 0000000..5e3cc0f
--- /dev/null
+++ b/node_modules/axios/lib/helpers/toFormData.js
@@ -0,0 +1,72 @@
+'use strict';
+
+var utils = require('../utils');
+
+/**
+ * Convert a data object to FormData
+ * @param {Object} obj
+ * @param {?Object} [formData]
+ * @returns {Object}
+ **/
+
+function toFormData(obj, formData) {
+ // eslint-disable-next-line no-param-reassign
+ formData = formData || new FormData();
+
+ var stack = [];
+
+ function convertValue(value) {
+ if (value === null) return '';
+
+ if (utils.isDate(value)) {
+ return value.toISOString();
+ }
+
+ if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
+ return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
+ }
+
+ return value;
+ }
+
+ function build(data, parentKey) {
+ if (utils.isPlainObject(data) || utils.isArray(data)) {
+ if (stack.indexOf(data) !== -1) {
+ throw Error('Circular reference detected in ' + parentKey);
+ }
+
+ stack.push(data);
+
+ utils.forEach(data, function each(value, key) {
+ if (utils.isUndefined(value)) return;
+ var fullKey = parentKey ? parentKey + '.' + key : key;
+ var arr;
+
+ if (value && !parentKey && typeof value === 'object') {
+ if (utils.endsWith(key, '{}')) {
+ // eslint-disable-next-line no-param-reassign
+ value = JSON.stringify(value);
+ } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
+ // eslint-disable-next-line func-names
+ arr.forEach(function(el) {
+ !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
+ });
+ return;
+ }
+ }
+
+ build(value, fullKey);
+ });
+
+ stack.pop();
+ } else {
+ formData.append(parentKey, convertValue(data));
+ }
+ }
+
+ build(obj);
+
+ return formData;
+}
+
+module.exports = toFormData;
diff --git a/node_modules/axios/lib/helpers/validator.js b/node_modules/axios/lib/helpers/validator.js
new file mode 100644
index 0000000..8095b90
--- /dev/null
+++ b/node_modules/axios/lib/helpers/validator.js
@@ -0,0 +1,86 @@
+'use strict';
+
+var VERSION = require('../env/data').version;
+var AxiosError = require('../core/AxiosError');
+
+var validators = {};
+
+// eslint-disable-next-line func-names
+['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
+ validators[type] = function validator(thing) {
+ return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
+ };
+});
+
+var deprecatedWarnings = {};
+
+/**
+ * Transitional option validator
+ * @param {function|boolean?} validator - set to false if the transitional option has been removed
+ * @param {string?} version - deprecated version / removed since version
+ * @param {string?} message - some message with additional info
+ * @returns {function}
+ */
+validators.transitional = function transitional(validator, version, message) {
+ function formatMessage(opt, desc) {
+ return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
+ }
+
+ // eslint-disable-next-line func-names
+ return function(value, opt, opts) {
+ if (validator === false) {
+ throw new AxiosError(
+ formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
+ AxiosError.ERR_DEPRECATED
+ );
+ }
+
+ if (version && !deprecatedWarnings[opt]) {
+ deprecatedWarnings[opt] = true;
+ // eslint-disable-next-line no-console
+ console.warn(
+ formatMessage(
+ opt,
+ ' has been deprecated since v' + version + ' and will be removed in the near future'
+ )
+ );
+ }
+
+ return validator ? validator(value, opt, opts) : true;
+ };
+};
+
+/**
+ * Assert object's properties type
+ * @param {object} options
+ * @param {object} schema
+ * @param {boolean?} allowUnknown
+ */
+
+function assertOptions(options, schema, allowUnknown) {
+ if (typeof options !== 'object') {
+ throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
+ }
+ var keys = Object.keys(options);
+ var i = keys.length;
+ while (i-- > 0) {
+ var opt = keys[i];
+ var validator = schema[opt];
+ if (validator) {
+ var value = options[opt];
+ var result = value === undefined || validator(value, opt, options);
+ if (result !== true) {
+ throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
+ }
+ continue;
+ }
+ if (allowUnknown !== true) {
+ throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
+ }
+ }
+}
+
+module.exports = {
+ assertOptions: assertOptions,
+ validators: validators
+};
diff --git a/node_modules/axios/lib/utils.js b/node_modules/axios/lib/utils.js
new file mode 100644
index 0000000..18de154
--- /dev/null
+++ b/node_modules/axios/lib/utils.js
@@ -0,0 +1,470 @@
+'use strict';
+
+var bind = require('./helpers/bind');
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString;
+
+// eslint-disable-next-line func-names
+var kindOf = (function(cache) {
+ // eslint-disable-next-line func-names
+ return function(thing) {
+ var str = toString.call(thing);
+ return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
+ };
+})(Object.create(null));
+
+function kindOfTest(type) {
+ type = type.toLowerCase();
+ return function isKindOf(thing) {
+ return kindOf(thing) === type;
+ };
+}
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+function isArray(val) {
+ return Array.isArray(val);
+}
+
+/**
+ * Determine if a value is undefined
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if the value is undefined, otherwise false
+ */
+function isUndefined(val) {
+ return typeof val === 'undefined';
+}
+
+/**
+ * Determine if a value is a Buffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Buffer, otherwise false
+ */
+function isBuffer(val) {
+ return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
+ && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
+}
+
+/**
+ * Determine if a value is an ArrayBuffer
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an ArrayBuffer, otherwise false
+ */
+var isArrayBuffer = kindOfTest('ArrayBuffer');
+
+
+/**
+ * Determine if a value is a view on an ArrayBuffer
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
+ */
+function isArrayBufferView(val) {
+ var result;
+ if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
+ result = ArrayBuffer.isView(val);
+ } else {
+ result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
+ }
+ return result;
+}
+
+/**
+ * Determine if a value is a String
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a String, otherwise false
+ */
+function isString(val) {
+ return typeof val === 'string';
+}
+
+/**
+ * Determine if a value is a Number
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Number, otherwise false
+ */
+function isNumber(val) {
+ return typeof val === 'number';
+}
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+function isObject(val) {
+ return val !== null && typeof val === 'object';
+}
+
+/**
+ * Determine if a value is a plain Object
+ *
+ * @param {Object} val The value to test
+ * @return {boolean} True if value is a plain Object, otherwise false
+ */
+function isPlainObject(val) {
+ if (kindOf(val) !== 'object') {
+ return false;
+ }
+
+ var prototype = Object.getPrototypeOf(val);
+ return prototype === null || prototype === Object.prototype;
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+var isDate = kindOfTest('Date');
+
+/**
+ * Determine if a value is a File
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+var isFile = kindOfTest('File');
+
+/**
+ * Determine if a value is a Blob
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Blob, otherwise false
+ */
+var isBlob = kindOfTest('Blob');
+
+/**
+ * Determine if a value is a FileList
+ *
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+var isFileList = kindOfTest('FileList');
+
+/**
+ * Determine if a value is a Function
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Function, otherwise false
+ */
+function isFunction(val) {
+ return toString.call(val) === '[object Function]';
+}
+
+/**
+ * Determine if a value is a Stream
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Stream, otherwise false
+ */
+function isStream(val) {
+ return isObject(val) && isFunction(val.pipe);
+}
+
+/**
+ * Determine if a value is a FormData
+ *
+ * @param {Object} thing The value to test
+ * @returns {boolean} True if value is an FormData, otherwise false
+ */
+function isFormData(thing) {
+ var pattern = '[object FormData]';
+ return thing && (
+ (typeof FormData === 'function' && thing instanceof FormData) ||
+ toString.call(thing) === pattern ||
+ (isFunction(thing.toString) && thing.toString() === pattern)
+ );
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ * @function
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+var isURLSearchParams = kindOfTest('URLSearchParams');
+
+/**
+ * Trim excess whitespace off the beginning and end of a string
+ *
+ * @param {String} str The String to trim
+ * @returns {String} The String freed of excess whitespace
+ */
+function trim(str) {
+ return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
+}
+
+/**
+ * Determine if we're running in a standard browser environment
+ *
+ * This allows axios to run in a web worker, and react-native.
+ * Both environments support XMLHttpRequest, but not fully standard globals.
+ *
+ * web workers:
+ * typeof window -> undefined
+ * typeof document -> undefined
+ *
+ * react-native:
+ * navigator.product -> 'ReactNative'
+ * nativescript
+ * navigator.product -> 'NativeScript' or 'NS'
+ */
+function isStandardBrowserEnv() {
+ if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
+ navigator.product === 'NativeScript' ||
+ navigator.product === 'NS')) {
+ return false;
+ }
+ return (
+ typeof window !== 'undefined' &&
+ typeof document !== 'undefined'
+ );
+}
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+function forEach(obj, fn) {
+ // Don't bother if no value provided
+ if (obj === null || typeof obj === 'undefined') {
+ return;
+ }
+
+ // Force an array if not already something iterable
+ if (typeof obj !== 'object') {
+ /*eslint no-param-reassign:0*/
+ obj = [obj];
+ }
+
+ if (isArray(obj)) {
+ // Iterate over array values
+ for (var i = 0, l = obj.length; i < l; i++) {
+ fn.call(null, obj[i], i, obj);
+ }
+ } else {
+ // Iterate over object keys
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ fn.call(null, obj[key], key, obj);
+ }
+ }
+ }
+}
+
+/**
+ * Accepts varargs expecting each argument to be an object, then
+ * immutably merges the properties of each object and returns result.
+ *
+ * When multiple objects contain the same key the later object in
+ * the arguments list will take precedence.
+ *
+ * Example:
+ *
+ * ```js
+ * var result = merge({foo: 123}, {foo: 456});
+ * console.log(result.foo); // outputs 456
+ * ```
+ *
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+function merge(/* obj1, obj2, obj3, ... */) {
+ var result = {};
+ function assignValue(val, key) {
+ if (isPlainObject(result[key]) && isPlainObject(val)) {
+ result[key] = merge(result[key], val);
+ } else if (isPlainObject(val)) {
+ result[key] = merge({}, val);
+ } else if (isArray(val)) {
+ result[key] = val.slice();
+ } else {
+ result[key] = val;
+ }
+ }
+
+ for (var i = 0, l = arguments.length; i < l; i++) {
+ forEach(arguments[i], assignValue);
+ }
+ return result;
+}
+
+/**
+ * Extends object a by mutably adding to it the properties of object b.
+ *
+ * @param {Object} a The object to be extended
+ * @param {Object} b The object to copy properties from
+ * @param {Object} thisArg The object to bind function to
+ * @return {Object} The resulting value of object a
+ */
+function extend(a, b, thisArg) {
+ forEach(b, function assignValue(val, key) {
+ if (thisArg && typeof val === 'function') {
+ a[key] = bind(val, thisArg);
+ } else {
+ a[key] = val;
+ }
+ });
+ return a;
+}
+
+/**
+ * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+ *
+ * @param {string} content with BOM
+ * @return {string} content value without BOM
+ */
+function stripBOM(content) {
+ if (content.charCodeAt(0) === 0xFEFF) {
+ content = content.slice(1);
+ }
+ return content;
+}
+
+/**
+ * Inherit the prototype methods from one constructor into another
+ * @param {function} constructor
+ * @param {function} superConstructor
+ * @param {object} [props]
+ * @param {object} [descriptors]
+ */
+
+function inherits(constructor, superConstructor, props, descriptors) {
+ constructor.prototype = Object.create(superConstructor.prototype, descriptors);
+ constructor.prototype.constructor = constructor;
+ props && Object.assign(constructor.prototype, props);
+}
+
+/**
+ * Resolve object with deep prototype chain to a flat object
+ * @param {Object} sourceObj source object
+ * @param {Object} [destObj]
+ * @param {Function} [filter]
+ * @returns {Object}
+ */
+
+function toFlatObject(sourceObj, destObj, filter) {
+ var props;
+ var i;
+ var prop;
+ var merged = {};
+
+ destObj = destObj || {};
+
+ do {
+ props = Object.getOwnPropertyNames(sourceObj);
+ i = props.length;
+ while (i-- > 0) {
+ prop = props[i];
+ if (!merged[prop]) {
+ destObj[prop] = sourceObj[prop];
+ merged[prop] = true;
+ }
+ }
+ sourceObj = Object.getPrototypeOf(sourceObj);
+ } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
+
+ return destObj;
+}
+
+/*
+ * determines whether a string ends with the characters of a specified string
+ * @param {String} str
+ * @param {String} searchString
+ * @param {Number} [position= 0]
+ * @returns {boolean}
+ */
+function endsWith(str, searchString, position) {
+ str = String(str);
+ if (position === undefined || position > str.length) {
+ position = str.length;
+ }
+ position -= searchString.length;
+ var lastIndex = str.indexOf(searchString, position);
+ return lastIndex !== -1 && lastIndex === position;
+}
+
+
+/**
+ * Returns new array from array like object
+ * @param {*} [thing]
+ * @returns {Array}
+ */
+function toArray(thing) {
+ if (!thing) return null;
+ var i = thing.length;
+ if (isUndefined(i)) return null;
+ var arr = new Array(i);
+ while (i-- > 0) {
+ arr[i] = thing[i];
+ }
+ return arr;
+}
+
+// eslint-disable-next-line func-names
+var isTypedArray = (function(TypedArray) {
+ // eslint-disable-next-line func-names
+ return function(thing) {
+ return TypedArray && thing instanceof TypedArray;
+ };
+})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));
+
+module.exports = {
+ isArray: isArray,
+ isArrayBuffer: isArrayBuffer,
+ isBuffer: isBuffer,
+ isFormData: isFormData,
+ isArrayBufferView: isArrayBufferView,
+ isString: isString,
+ isNumber: isNumber,
+ isObject: isObject,
+ isPlainObject: isPlainObject,
+ isUndefined: isUndefined,
+ isDate: isDate,
+ isFile: isFile,
+ isBlob: isBlob,
+ isFunction: isFunction,
+ isStream: isStream,
+ isURLSearchParams: isURLSearchParams,
+ isStandardBrowserEnv: isStandardBrowserEnv,
+ forEach: forEach,
+ merge: merge,
+ extend: extend,
+ trim: trim,
+ stripBOM: stripBOM,
+ inherits: inherits,
+ toFlatObject: toFlatObject,
+ kindOf: kindOf,
+ kindOfTest: kindOfTest,
+ endsWith: endsWith,
+ toArray: toArray,
+ isTypedArray: isTypedArray,
+ isFileList: isFileList
+};
diff --git a/node_modules/axios/package.json b/node_modules/axios/package.json
new file mode 100644
index 0000000..ffd98e6
--- /dev/null
+++ b/node_modules/axios/package.json
@@ -0,0 +1,87 @@
+{
+ "name": "axios",
+ "version": "0.27.2",
+ "description": "Promise based HTTP client for the browser and node.js",
+ "main": "index.js",
+ "types": "index.d.ts",
+ "scripts": {
+ "test": "grunt test && dtslint",
+ "start": "node ./sandbox/server.js",
+ "preversion": "grunt version && npm test",
+ "build": "NODE_ENV=production grunt build",
+ "examples": "node ./examples/server.js",
+ "coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
+ "fix": "eslint --fix lib/**/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/axios/axios.git"
+ },
+ "keywords": [
+ "xhr",
+ "http",
+ "ajax",
+ "promise",
+ "node"
+ ],
+ "author": "Matt Zabriskie",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/axios/axios/issues"
+ },
+ "homepage": "https://axios-http.com",
+ "devDependencies": {
+ "abortcontroller-polyfill": "^1.7.3",
+ "coveralls": "^3.1.1",
+ "dtslint": "^4.2.1",
+ "es6-promise": "^4.2.8",
+ "formidable": "^2.0.1",
+ "grunt": "^1.4.1",
+ "grunt-banner": "^0.6.0",
+ "grunt-cli": "^1.4.3",
+ "grunt-contrib-clean": "^2.0.0",
+ "grunt-contrib-watch": "^1.1.0",
+ "grunt-eslint": "^24.0.0",
+ "grunt-karma": "^4.0.2",
+ "grunt-mocha-test": "^0.13.3",
+ "grunt-webpack": "^5.0.0",
+ "istanbul-instrumenter-loader": "^3.0.1",
+ "jasmine-core": "^2.4.1",
+ "karma": "^6.3.17",
+ "karma-chrome-launcher": "^3.1.1",
+ "karma-firefox-launcher": "^2.1.2",
+ "karma-jasmine": "^1.1.1",
+ "karma-jasmine-ajax": "^0.1.13",
+ "karma-safari-launcher": "^1.0.0",
+ "karma-sauce-launcher": "^4.3.6",
+ "karma-sinon": "^1.0.5",
+ "karma-sourcemap-loader": "^0.3.8",
+ "karma-webpack": "^4.0.2",
+ "load-grunt-tasks": "^5.1.0",
+ "minimist": "^1.2.6",
+ "mocha": "^8.2.1",
+ "sinon": "^4.5.0",
+ "terser-webpack-plugin": "^4.2.3",
+ "typescript": "^4.6.3",
+ "url-search-params": "^0.10.0",
+ "webpack": "^4.44.2",
+ "webpack-dev-server": "^3.11.0"
+ },
+ "browser": {
+ "./lib/adapters/http.js": "./lib/adapters/xhr.js",
+ "./lib/defaults/env/FormData.js": "./lib/helpers/null.js"
+ },
+ "jsdelivr": "dist/axios.min.js",
+ "unpkg": "dist/axios.min.js",
+ "typings": "./index.d.ts",
+ "dependencies": {
+ "follow-redirects": "^1.14.9",
+ "form-data": "^4.0.0"
+ },
+ "bundlesize": [
+ {
+ "path": "./dist/axios.min.js",
+ "threshold": "5kB"
+ }
+ ]
+}
diff --git a/node_modules/axios/tsconfig.json b/node_modules/axios/tsconfig.json
new file mode 100644
index 0000000..6665188
--- /dev/null
+++ b/node_modules/axios/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "module": "es2015",
+ "lib": ["dom", "es2015"],
+ "types": [],
+ "moduleResolution": "node",
+ "strict": true,
+ "noEmit": true,
+ "baseUrl": ".",
+ "paths": {
+ "axios": ["."]
+ }
+ }
+}
diff --git a/node_modules/axios/tslint.json b/node_modules/axios/tslint.json
new file mode 100644
index 0000000..3ec44a7
--- /dev/null
+++ b/node_modules/axios/tslint.json
@@ -0,0 +1,6 @@
+{
+ "extends": "dtslint/dtslint.json",
+ "rules": {
+ "no-unnecessary-generics": false
+ }
+}
diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml
new file mode 100644
index 0000000..cea8b16
--- /dev/null
+++ b/node_modules/balanced-match/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+tidelift: "npm/balanced-match"
+patreon: juliangruber
diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md
new file mode 100644
index 0000000..2cdc8e4
--- /dev/null
+++ b/node_modules/balanced-match/LICENSE.md
@@ -0,0 +1,21 @@
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md
new file mode 100644
index 0000000..d2a48b6
--- /dev/null
+++ b/node_modules/balanced-match/README.md
@@ -0,0 +1,97 @@
+# balanced-match
+
+Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well!
+
+[](http://travis-ci.org/juliangruber/balanced-match)
+[](https://www.npmjs.org/package/balanced-match)
+
+[](https://ci.testling.com/juliangruber/balanced-match)
+
+## Example
+
+Get the first matching pair of braces:
+
+```js
+var balanced = require('balanced-match');
+
+console.log(balanced('{', '}', 'pre{in{nested}}post'));
+console.log(balanced('{', '}', 'pre{first}between{second}post'));
+console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
+```
+
+The matches are:
+
+```bash
+$ node example.js
+{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
+{ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: 'first',
+ post: 'between{second}post' }
+{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
+```
+
+## API
+
+### var m = balanced(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+object with those keys:
+
+* **start** the index of the first match of `a`
+* **end** the index of the matching `b`
+* **pre** the preamble, `a` and `b` not included
+* **body** the match, `a` and `b` not included
+* **post** the postscript, `a` and `b` not included
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
+
+### var r = balanced.range(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+array with indexes: `[ , ]`.
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install balanced-match
+```
+
+## Security contact information
+
+To report a security vulnerability, please use the
+[Tidelift security contact](https://tidelift.com/security).
+Tidelift will coordinate the fix and disclosure.
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js
new file mode 100644
index 0000000..c67a646
--- /dev/null
+++ b/node_modules/balanced-match/index.js
@@ -0,0 +1,62 @@
+'use strict';
+module.exports = balanced;
+function balanced(a, b, str) {
+ if (a instanceof RegExp) a = maybeMatch(a, str);
+ if (b instanceof RegExp) b = maybeMatch(b, str);
+
+ var r = range(a, b, str);
+
+ return r && {
+ start: r[0],
+ end: r[1],
+ pre: str.slice(0, r[0]),
+ body: str.slice(r[0] + a.length, r[1]),
+ post: str.slice(r[1] + b.length)
+ };
+}
+
+function maybeMatch(reg, str) {
+ var m = str.match(reg);
+ return m ? m[0] : null;
+}
+
+balanced.range = range;
+function range(a, b, str) {
+ var begs, beg, left, right, result;
+ var ai = str.indexOf(a);
+ var bi = str.indexOf(b, ai + 1);
+ var i = ai;
+
+ if (ai >= 0 && bi > 0) {
+ if(a===b) {
+ return [ai, bi];
+ }
+ begs = [];
+ left = str.length;
+
+ while (i >= 0 && !result) {
+ if (i == ai) {
+ begs.push(i);
+ ai = str.indexOf(a, i + 1);
+ } else if (begs.length == 1) {
+ result = [ begs.pop(), bi ];
+ } else {
+ beg = begs.pop();
+ if (beg < left) {
+ left = beg;
+ right = bi;
+ }
+
+ bi = str.indexOf(b, i + 1);
+ }
+
+ i = ai < bi && ai >= 0 ? ai : bi;
+ }
+
+ if (begs.length) {
+ result = [ left, right ];
+ }
+ }
+
+ return result;
+}
diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json
new file mode 100644
index 0000000..ce6073e
--- /dev/null
+++ b/node_modules/balanced-match/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "balanced-match",
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
+ "version": "1.0.2",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "homepage": "https://github.com/juliangruber/balanced-match",
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/test.js",
+ "bench": "matcha test/bench.js"
+ },
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "keywords": [
+ "match",
+ "regexp",
+ "test",
+ "balanced",
+ "parse"
+ ],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ }
+}
diff --git a/node_modules/binary-extensions/binary-extensions.json b/node_modules/binary-extensions/binary-extensions.json
new file mode 100644
index 0000000..4aab383
--- /dev/null
+++ b/node_modules/binary-extensions/binary-extensions.json
@@ -0,0 +1,260 @@
+[
+ "3dm",
+ "3ds",
+ "3g2",
+ "3gp",
+ "7z",
+ "a",
+ "aac",
+ "adp",
+ "ai",
+ "aif",
+ "aiff",
+ "alz",
+ "ape",
+ "apk",
+ "appimage",
+ "ar",
+ "arj",
+ "asf",
+ "au",
+ "avi",
+ "bak",
+ "baml",
+ "bh",
+ "bin",
+ "bk",
+ "bmp",
+ "btif",
+ "bz2",
+ "bzip2",
+ "cab",
+ "caf",
+ "cgm",
+ "class",
+ "cmx",
+ "cpio",
+ "cr2",
+ "cur",
+ "dat",
+ "dcm",
+ "deb",
+ "dex",
+ "djvu",
+ "dll",
+ "dmg",
+ "dng",
+ "doc",
+ "docm",
+ "docx",
+ "dot",
+ "dotm",
+ "dra",
+ "DS_Store",
+ "dsk",
+ "dts",
+ "dtshd",
+ "dvb",
+ "dwg",
+ "dxf",
+ "ecelp4800",
+ "ecelp7470",
+ "ecelp9600",
+ "egg",
+ "eol",
+ "eot",
+ "epub",
+ "exe",
+ "f4v",
+ "fbs",
+ "fh",
+ "fla",
+ "flac",
+ "flatpak",
+ "fli",
+ "flv",
+ "fpx",
+ "fst",
+ "fvt",
+ "g3",
+ "gh",
+ "gif",
+ "graffle",
+ "gz",
+ "gzip",
+ "h261",
+ "h263",
+ "h264",
+ "icns",
+ "ico",
+ "ief",
+ "img",
+ "ipa",
+ "iso",
+ "jar",
+ "jpeg",
+ "jpg",
+ "jpgv",
+ "jpm",
+ "jxr",
+ "key",
+ "ktx",
+ "lha",
+ "lib",
+ "lvp",
+ "lz",
+ "lzh",
+ "lzma",
+ "lzo",
+ "m3u",
+ "m4a",
+ "m4v",
+ "mar",
+ "mdi",
+ "mht",
+ "mid",
+ "midi",
+ "mj2",
+ "mka",
+ "mkv",
+ "mmr",
+ "mng",
+ "mobi",
+ "mov",
+ "movie",
+ "mp3",
+ "mp4",
+ "mp4a",
+ "mpeg",
+ "mpg",
+ "mpga",
+ "mxu",
+ "nef",
+ "npx",
+ "numbers",
+ "nupkg",
+ "o",
+ "odp",
+ "ods",
+ "odt",
+ "oga",
+ "ogg",
+ "ogv",
+ "otf",
+ "ott",
+ "pages",
+ "pbm",
+ "pcx",
+ "pdb",
+ "pdf",
+ "pea",
+ "pgm",
+ "pic",
+ "png",
+ "pnm",
+ "pot",
+ "potm",
+ "potx",
+ "ppa",
+ "ppam",
+ "ppm",
+ "pps",
+ "ppsm",
+ "ppsx",
+ "ppt",
+ "pptm",
+ "pptx",
+ "psd",
+ "pya",
+ "pyc",
+ "pyo",
+ "pyv",
+ "qt",
+ "rar",
+ "ras",
+ "raw",
+ "resources",
+ "rgb",
+ "rip",
+ "rlc",
+ "rmf",
+ "rmvb",
+ "rpm",
+ "rtf",
+ "rz",
+ "s3m",
+ "s7z",
+ "scpt",
+ "sgi",
+ "shar",
+ "snap",
+ "sil",
+ "sketch",
+ "slk",
+ "smv",
+ "snk",
+ "so",
+ "stl",
+ "suo",
+ "sub",
+ "swf",
+ "tar",
+ "tbz",
+ "tbz2",
+ "tga",
+ "tgz",
+ "thmx",
+ "tif",
+ "tiff",
+ "tlz",
+ "ttc",
+ "ttf",
+ "txz",
+ "udf",
+ "uvh",
+ "uvi",
+ "uvm",
+ "uvp",
+ "uvs",
+ "uvu",
+ "viv",
+ "vob",
+ "war",
+ "wav",
+ "wax",
+ "wbmp",
+ "wdp",
+ "weba",
+ "webm",
+ "webp",
+ "whl",
+ "wim",
+ "wm",
+ "wma",
+ "wmv",
+ "wmx",
+ "woff",
+ "woff2",
+ "wrm",
+ "wvx",
+ "xbm",
+ "xif",
+ "xla",
+ "xlam",
+ "xls",
+ "xlsb",
+ "xlsm",
+ "xlsx",
+ "xlt",
+ "xltm",
+ "xltx",
+ "xm",
+ "xmind",
+ "xpi",
+ "xpm",
+ "xwd",
+ "xz",
+ "z",
+ "zip",
+ "zipx"
+]
diff --git a/node_modules/binary-extensions/binary-extensions.json.d.ts b/node_modules/binary-extensions/binary-extensions.json.d.ts
new file mode 100644
index 0000000..94a248c
--- /dev/null
+++ b/node_modules/binary-extensions/binary-extensions.json.d.ts
@@ -0,0 +1,3 @@
+declare const binaryExtensionsJson: readonly string[];
+
+export = binaryExtensionsJson;
diff --git a/node_modules/binary-extensions/index.d.ts b/node_modules/binary-extensions/index.d.ts
new file mode 100644
index 0000000..f469ac5
--- /dev/null
+++ b/node_modules/binary-extensions/index.d.ts
@@ -0,0 +1,14 @@
+/**
+List of binary file extensions.
+
+@example
+```
+import binaryExtensions = require('binary-extensions');
+
+console.log(binaryExtensions);
+//=> ['3ds', '3g2', …]
+```
+*/
+declare const binaryExtensions: readonly string[];
+
+export = binaryExtensions;
diff --git a/node_modules/binary-extensions/index.js b/node_modules/binary-extensions/index.js
new file mode 100644
index 0000000..d46e468
--- /dev/null
+++ b/node_modules/binary-extensions/index.js
@@ -0,0 +1 @@
+module.exports = require('./binary-extensions.json');
diff --git a/node_modules/binary-extensions/license b/node_modules/binary-extensions/license
new file mode 100644
index 0000000..401b1c7
--- /dev/null
+++ b/node_modules/binary-extensions/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2019 Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/binary-extensions/package.json b/node_modules/binary-extensions/package.json
new file mode 100644
index 0000000..c4d3641
--- /dev/null
+++ b/node_modules/binary-extensions/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "binary-extensions",
+ "version": "2.2.0",
+ "description": "List of binary file extensions",
+ "license": "MIT",
+ "repository": "sindresorhus/binary-extensions",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts",
+ "binary-extensions.json",
+ "binary-extensions.json.d.ts"
+ ],
+ "keywords": [
+ "binary",
+ "extensions",
+ "extension",
+ "file",
+ "json",
+ "list",
+ "array"
+ ],
+ "devDependencies": {
+ "ava": "^1.4.1",
+ "tsd": "^0.7.2",
+ "xo": "^0.24.0"
+ }
+}
diff --git a/node_modules/binary-extensions/readme.md b/node_modules/binary-extensions/readme.md
new file mode 100644
index 0000000..3e25dd8
--- /dev/null
+++ b/node_modules/binary-extensions/readme.md
@@ -0,0 +1,41 @@
+# binary-extensions
+
+> List of binary file extensions
+
+The list is just a [JSON file](binary-extensions.json) and can be used anywhere.
+
+
+## Install
+
+```
+$ npm install binary-extensions
+```
+
+
+## Usage
+
+```js
+const binaryExtensions = require('binary-extensions');
+
+console.log(binaryExtensions);
+//=> ['3ds', '3g2', …]
+```
+
+
+## Related
+
+- [is-binary-path](https://github.com/sindresorhus/is-binary-path) - Check if a filepath is a binary file
+- [text-extensions](https://github.com/sindresorhus/text-extensions) - List of text file extensions
+
+
+---
+
+
diff --git a/node_modules/body-parser/HISTORY.md b/node_modules/body-parser/HISTORY.md
new file mode 100644
index 0000000..e114f6a
--- /dev/null
+++ b/node_modules/body-parser/HISTORY.md
@@ -0,0 +1,651 @@
+1.20.0 / 2022-04-02
+===================
+
+ * Fix error message for json parse whitespace in `strict`
+ * Fix internal error when inflated body exceeds limit
+ * Prevent loss of async hooks context
+ * Prevent hanging when request already read
+ * deps: depd@2.0.0
+ - Replace internal `eval` usage with `Function` constructor
+ - Use instance methods on `process` to check for listeners
+ * deps: http-errors@2.0.0
+ - deps: depd@2.0.0
+ - deps: statuses@2.0.1
+ * deps: on-finished@2.4.1
+ * deps: qs@6.10.3
+ * deps: raw-body@2.5.1
+ - deps: http-errors@2.0.0
+
+1.19.2 / 2022-02-15
+===================
+
+ * deps: bytes@3.1.2
+ * deps: qs@6.9.7
+ * Fix handling of `__proto__` keys
+ * deps: raw-body@2.4.3
+ - deps: bytes@3.1.2
+
+1.19.1 / 2021-12-10
+===================
+
+ * deps: bytes@3.1.1
+ * deps: http-errors@1.8.1
+ - deps: inherits@2.0.4
+ - deps: toidentifier@1.0.1
+ - deps: setprototypeof@1.2.0
+ * deps: qs@6.9.6
+ * deps: raw-body@2.4.2
+ - deps: bytes@3.1.1
+ - deps: http-errors@1.8.1
+ * deps: safe-buffer@5.2.1
+ * deps: type-is@~1.6.18
+
+1.19.0 / 2019-04-25
+===================
+
+ * deps: bytes@3.1.0
+ - Add petabyte (`pb`) support
+ * deps: http-errors@1.7.2
+ - Set constructor name when possible
+ - deps: setprototypeof@1.1.1
+ - deps: statuses@'>= 1.5.0 < 2'
+ * deps: iconv-lite@0.4.24
+ - Added encoding MIK
+ * deps: qs@6.7.0
+ - Fix parsing array brackets after index
+ * deps: raw-body@2.4.0
+ - deps: bytes@3.1.0
+ - deps: http-errors@1.7.2
+ - deps: iconv-lite@0.4.24
+ * deps: type-is@~1.6.17
+ - deps: mime-types@~2.1.24
+ - perf: prevent internal `throw` on invalid type
+
+1.18.3 / 2018-05-14
+===================
+
+ * Fix stack trace for strict json parse error
+ * deps: depd@~1.1.2
+ - perf: remove argument reassignment
+ * deps: http-errors@~1.6.3
+ - deps: depd@~1.1.2
+ - deps: setprototypeof@1.1.0
+ - deps: statuses@'>= 1.3.1 < 2'
+ * deps: iconv-lite@0.4.23
+ - Fix loading encoding with year appended
+ - Fix deprecation warnings on Node.js 10+
+ * deps: qs@6.5.2
+ * deps: raw-body@2.3.3
+ - deps: http-errors@1.6.3
+ - deps: iconv-lite@0.4.23
+ * deps: type-is@~1.6.16
+ - deps: mime-types@~2.1.18
+
+1.18.2 / 2017-09-22
+===================
+
+ * deps: debug@2.6.9
+ * perf: remove argument reassignment
+
+1.18.1 / 2017-09-12
+===================
+
+ * deps: content-type@~1.0.4
+ - perf: remove argument reassignment
+ - perf: skip parameter parsing when no parameters
+ * deps: iconv-lite@0.4.19
+ - Fix ISO-8859-1 regression
+ - Update Windows-1255
+ * deps: qs@6.5.1
+ - Fix parsing & compacting very deep objects
+ * deps: raw-body@2.3.2
+ - deps: iconv-lite@0.4.19
+
+1.18.0 / 2017-09-08
+===================
+
+ * Fix JSON strict violation error to match native parse error
+ * Include the `body` property on verify errors
+ * Include the `type` property on all generated errors
+ * Use `http-errors` to set status code on errors
+ * deps: bytes@3.0.0
+ * deps: debug@2.6.8
+ * deps: depd@~1.1.1
+ - Remove unnecessary `Buffer` loading
+ * deps: http-errors@~1.6.2
+ - deps: depd@1.1.1
+ * deps: iconv-lite@0.4.18
+ - Add support for React Native
+ - Add a warning if not loaded as utf-8
+ - Fix CESU-8 decoding in Node.js 8
+ - Improve speed of ISO-8859-1 encoding
+ * deps: qs@6.5.0
+ * deps: raw-body@2.3.1
+ - Use `http-errors` for standard emitted errors
+ - deps: bytes@3.0.0
+ - deps: iconv-lite@0.4.18
+ - perf: skip buffer decoding on overage chunk
+ * perf: prevent internal `throw` when missing charset
+
+1.17.2 / 2017-05-17
+===================
+
+ * deps: debug@2.6.7
+ - Fix `DEBUG_MAX_ARRAY_LENGTH`
+ - deps: ms@2.0.0
+ * deps: type-is@~1.6.15
+ - deps: mime-types@~2.1.15
+
+1.17.1 / 2017-03-06
+===================
+
+ * deps: qs@6.4.0
+ - Fix regression parsing keys starting with `[`
+
+1.17.0 / 2017-03-01
+===================
+
+ * deps: http-errors@~1.6.1
+ - Make `message` property enumerable for `HttpError`s
+ - deps: setprototypeof@1.0.3
+ * deps: qs@6.3.1
+ - Fix compacting nested arrays
+
+1.16.1 / 2017-02-10
+===================
+
+ * deps: debug@2.6.1
+ - Fix deprecation messages in WebStorm and other editors
+ - Undeprecate `DEBUG_FD` set to `1` or `2`
+
+1.16.0 / 2017-01-17
+===================
+
+ * deps: debug@2.6.0
+ - Allow colors in workers
+ - Deprecated `DEBUG_FD` environment variable
+ - Fix error when running under React Native
+ - Use same color for same namespace
+ - deps: ms@0.7.2
+ * deps: http-errors@~1.5.1
+ - deps: inherits@2.0.3
+ - deps: setprototypeof@1.0.2
+ - deps: statuses@'>= 1.3.1 < 2'
+ * deps: iconv-lite@0.4.15
+ - Added encoding MS-31J
+ - Added encoding MS-932
+ - Added encoding MS-936
+ - Added encoding MS-949
+ - Added encoding MS-950
+ - Fix GBK/GB18030 handling of Euro character
+ * deps: qs@6.2.1
+ - Fix array parsing from skipping empty values
+ * deps: raw-body@~2.2.0
+ - deps: iconv-lite@0.4.15
+ * deps: type-is@~1.6.14
+ - deps: mime-types@~2.1.13
+
+1.15.2 / 2016-06-19
+===================
+
+ * deps: bytes@2.4.0
+ * deps: content-type@~1.0.2
+ - perf: enable strict mode
+ * deps: http-errors@~1.5.0
+ - Use `setprototypeof` module to replace `__proto__` setting
+ - deps: statuses@'>= 1.3.0 < 2'
+ - perf: enable strict mode
+ * deps: qs@6.2.0
+ * deps: raw-body@~2.1.7
+ - deps: bytes@2.4.0
+ - perf: remove double-cleanup on happy path
+ * deps: type-is@~1.6.13
+ - deps: mime-types@~2.1.11
+
+1.15.1 / 2016-05-05
+===================
+
+ * deps: bytes@2.3.0
+ - Drop partial bytes on all parsed units
+ - Fix parsing byte string that looks like hex
+ * deps: raw-body@~2.1.6
+ - deps: bytes@2.3.0
+ * deps: type-is@~1.6.12
+ - deps: mime-types@~2.1.10
+
+1.15.0 / 2016-02-10
+===================
+
+ * deps: http-errors@~1.4.0
+ - Add `HttpError` export, for `err instanceof createError.HttpError`
+ - deps: inherits@2.0.1
+ - deps: statuses@'>= 1.2.1 < 2'
+ * deps: qs@6.1.0
+ * deps: type-is@~1.6.11
+ - deps: mime-types@~2.1.9
+
+1.14.2 / 2015-12-16
+===================
+
+ * deps: bytes@2.2.0
+ * deps: iconv-lite@0.4.13
+ * deps: qs@5.2.0
+ * deps: raw-body@~2.1.5
+ - deps: bytes@2.2.0
+ - deps: iconv-lite@0.4.13
+ * deps: type-is@~1.6.10
+ - deps: mime-types@~2.1.8
+
+1.14.1 / 2015-09-27
+===================
+
+ * Fix issue where invalid charset results in 400 when `verify` used
+ * deps: iconv-lite@0.4.12
+ - Fix CESU-8 decoding in Node.js 4.x
+ * deps: raw-body@~2.1.4
+ - Fix masking critical errors from `iconv-lite`
+ - deps: iconv-lite@0.4.12
+ * deps: type-is@~1.6.9
+ - deps: mime-types@~2.1.7
+
+1.14.0 / 2015-09-16
+===================
+
+ * Fix JSON strict parse error to match syntax errors
+ * Provide static `require` analysis in `urlencoded` parser
+ * deps: depd@~1.1.0
+ - Support web browser loading
+ * deps: qs@5.1.0
+ * deps: raw-body@~2.1.3
+ - Fix sync callback when attaching data listener causes sync read
+ * deps: type-is@~1.6.8
+ - Fix type error when given invalid type to match against
+ - deps: mime-types@~2.1.6
+
+1.13.3 / 2015-07-31
+===================
+
+ * deps: type-is@~1.6.6
+ - deps: mime-types@~2.1.4
+
+1.13.2 / 2015-07-05
+===================
+
+ * deps: iconv-lite@0.4.11
+ * deps: qs@4.0.0
+ - Fix dropping parameters like `hasOwnProperty`
+ - Fix user-visible incompatibilities from 3.1.0
+ - Fix various parsing edge cases
+ * deps: raw-body@~2.1.2
+ - Fix error stack traces to skip `makeError`
+ - deps: iconv-lite@0.4.11
+ * deps: type-is@~1.6.4
+ - deps: mime-types@~2.1.2
+ - perf: enable strict mode
+ - perf: remove argument reassignment
+
+1.13.1 / 2015-06-16
+===================
+
+ * deps: qs@2.4.2
+ - Downgraded from 3.1.0 because of user-visible incompatibilities
+
+1.13.0 / 2015-06-14
+===================
+
+ * Add `statusCode` property on `Error`s, in addition to `status`
+ * Change `type` default to `application/json` for JSON parser
+ * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
+ * Provide static `require` analysis
+ * Use the `http-errors` module to generate errors
+ * deps: bytes@2.1.0
+ - Slight optimizations
+ * deps: iconv-lite@0.4.10
+ - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
+ - Leading BOM is now removed when decoding
+ * deps: on-finished@~2.3.0
+ - Add defined behavior for HTTP `CONNECT` requests
+ - Add defined behavior for HTTP `Upgrade` requests
+ - deps: ee-first@1.1.1
+ * deps: qs@3.1.0
+ - Fix dropping parameters like `hasOwnProperty`
+ - Fix various parsing edge cases
+ - Parsed object now has `null` prototype
+ * deps: raw-body@~2.1.1
+ - Use `unpipe` module for unpiping requests
+ - deps: iconv-lite@0.4.10
+ * deps: type-is@~1.6.3
+ - deps: mime-types@~2.1.1
+ - perf: reduce try block size
+ - perf: remove bitwise operations
+ * perf: enable strict mode
+ * perf: remove argument reassignment
+ * perf: remove delete call
+
+1.12.4 / 2015-05-10
+===================
+
+ * deps: debug@~2.2.0
+ * deps: qs@2.4.2
+ - Fix allowing parameters like `constructor`
+ * deps: on-finished@~2.2.1
+ * deps: raw-body@~2.0.1
+ - Fix a false-positive when unpiping in Node.js 0.8
+ - deps: bytes@2.0.1
+ * deps: type-is@~1.6.2
+ - deps: mime-types@~2.0.11
+
+1.12.3 / 2015-04-15
+===================
+
+ * Slight efficiency improvement when not debugging
+ * deps: depd@~1.0.1
+ * deps: iconv-lite@0.4.8
+ - Add encoding alias UNICODE-1-1-UTF-7
+ * deps: raw-body@1.3.4
+ - Fix hanging callback if request aborts during read
+ - deps: iconv-lite@0.4.8
+
+1.12.2 / 2015-03-16
+===================
+
+ * deps: qs@2.4.1
+ - Fix error when parameter `hasOwnProperty` is present
+
+1.12.1 / 2015-03-15
+===================
+
+ * deps: debug@~2.1.3
+ - Fix high intensity foreground color for bold
+ - deps: ms@0.7.0
+ * deps: type-is@~1.6.1
+ - deps: mime-types@~2.0.10
+
+1.12.0 / 2015-02-13
+===================
+
+ * add `debug` messages
+ * accept a function for the `type` option
+ * use `content-type` to parse `Content-Type` headers
+ * deps: iconv-lite@0.4.7
+ - Gracefully support enumerables on `Object.prototype`
+ * deps: raw-body@1.3.3
+ - deps: iconv-lite@0.4.7
+ * deps: type-is@~1.6.0
+ - fix argument reassignment
+ - fix false-positives in `hasBody` `Transfer-Encoding` check
+ - support wildcard for both type and subtype (`*/*`)
+ - deps: mime-types@~2.0.9
+
+1.11.0 / 2015-01-30
+===================
+
+ * make internal `extended: true` depth limit infinity
+ * deps: type-is@~1.5.6
+ - deps: mime-types@~2.0.8
+
+1.10.2 / 2015-01-20
+===================
+
+ * deps: iconv-lite@0.4.6
+ - Fix rare aliases of single-byte encodings
+ * deps: raw-body@1.3.2
+ - deps: iconv-lite@0.4.6
+
+1.10.1 / 2015-01-01
+===================
+
+ * deps: on-finished@~2.2.0
+ * deps: type-is@~1.5.5
+ - deps: mime-types@~2.0.7
+
+1.10.0 / 2014-12-02
+===================
+
+ * make internal `extended: true` array limit dynamic
+
+1.9.3 / 2014-11-21
+==================
+
+ * deps: iconv-lite@0.4.5
+ - Fix Windows-31J and X-SJIS encoding support
+ * deps: qs@2.3.3
+ - Fix `arrayLimit` behavior
+ * deps: raw-body@1.3.1
+ - deps: iconv-lite@0.4.5
+ * deps: type-is@~1.5.3
+ - deps: mime-types@~2.0.3
+
+1.9.2 / 2014-10-27
+==================
+
+ * deps: qs@2.3.2
+ - Fix parsing of mixed objects and values
+
+1.9.1 / 2014-10-22
+==================
+
+ * deps: on-finished@~2.1.1
+ - Fix handling of pipelined requests
+ * deps: qs@2.3.0
+ - Fix parsing of mixed implicit and explicit arrays
+ * deps: type-is@~1.5.2
+ - deps: mime-types@~2.0.2
+
+1.9.0 / 2014-09-24
+==================
+
+ * include the charset in "unsupported charset" error message
+ * include the encoding in "unsupported content encoding" error message
+ * deps: depd@~1.0.0
+
+1.8.4 / 2014-09-23
+==================
+
+ * fix content encoding to be case-insensitive
+
+1.8.3 / 2014-09-19
+==================
+
+ * deps: qs@2.2.4
+ - Fix issue with object keys starting with numbers truncated
+
+1.8.2 / 2014-09-15
+==================
+
+ * deps: depd@0.4.5
+
+1.8.1 / 2014-09-07
+==================
+
+ * deps: media-typer@0.3.0
+ * deps: type-is@~1.5.1
+
+1.8.0 / 2014-09-05
+==================
+
+ * make empty-body-handling consistent between chunked requests
+ - empty `json` produces `{}`
+ - empty `raw` produces `new Buffer(0)`
+ - empty `text` produces `''`
+ - empty `urlencoded` produces `{}`
+ * deps: qs@2.2.3
+ - Fix issue where first empty value in array is discarded
+ * deps: type-is@~1.5.0
+ - fix `hasbody` to be true for `content-length: 0`
+
+1.7.0 / 2014-09-01
+==================
+
+ * add `parameterLimit` option to `urlencoded` parser
+ * change `urlencoded` extended array limit to 100
+ * respond with 413 when over `parameterLimit` in `urlencoded`
+
+1.6.7 / 2014-08-29
+==================
+
+ * deps: qs@2.2.2
+ - Remove unnecessary cloning
+
+1.6.6 / 2014-08-27
+==================
+
+ * deps: qs@2.2.0
+ - Array parsing fix
+ - Performance improvements
+
+1.6.5 / 2014-08-16
+==================
+
+ * deps: on-finished@2.1.0
+
+1.6.4 / 2014-08-14
+==================
+
+ * deps: qs@1.2.2
+
+1.6.3 / 2014-08-10
+==================
+
+ * deps: qs@1.2.1
+
+1.6.2 / 2014-08-07
+==================
+
+ * deps: qs@1.2.0
+ - Fix parsing array of objects
+
+1.6.1 / 2014-08-06
+==================
+
+ * deps: qs@1.1.0
+ - Accept urlencoded square brackets
+ - Accept empty values in implicit array notation
+
+1.6.0 / 2014-08-05
+==================
+
+ * deps: qs@1.0.2
+ - Complete rewrite
+ - Limits array length to 20
+ - Limits object depth to 5
+ - Limits parameters to 1,000
+
+1.5.2 / 2014-07-27
+==================
+
+ * deps: depd@0.4.4
+ - Work-around v8 generating empty stack traces
+
+1.5.1 / 2014-07-26
+==================
+
+ * deps: depd@0.4.3
+ - Fix exception when global `Error.stackTraceLimit` is too low
+
+1.5.0 / 2014-07-20
+==================
+
+ * deps: depd@0.4.2
+ - Add `TRACE_DEPRECATION` environment variable
+ - Remove non-standard grey color from color output
+ - Support `--no-deprecation` argument
+ - Support `--trace-deprecation` argument
+ * deps: iconv-lite@0.4.4
+ - Added encoding UTF-7
+ * deps: raw-body@1.3.0
+ - deps: iconv-lite@0.4.4
+ - Added encoding UTF-7
+ - Fix `Cannot switch to old mode now` error on Node.js 0.10+
+ * deps: type-is@~1.3.2
+
+1.4.3 / 2014-06-19
+==================
+
+ * deps: type-is@1.3.1
+ - fix global variable leak
+
+1.4.2 / 2014-06-19
+==================
+
+ * deps: type-is@1.3.0
+ - improve type parsing
+
+1.4.1 / 2014-06-19
+==================
+
+ * fix urlencoded extended deprecation message
+
+1.4.0 / 2014-06-19
+==================
+
+ * add `text` parser
+ * add `raw` parser
+ * check accepted charset in content-type (accepts utf-8)
+ * check accepted encoding in content-encoding (accepts identity)
+ * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
+ * deprecate `urlencoded()` without provided `extended` option
+ * lazy-load urlencoded parsers
+ * parsers split into files for reduced mem usage
+ * support gzip and deflate bodies
+ - set `inflate: false` to turn off
+ * deps: raw-body@1.2.2
+ - Support all encodings from `iconv-lite`
+
+1.3.1 / 2014-06-11
+==================
+
+ * deps: type-is@1.2.1
+ - Switch dependency from mime to mime-types@1.0.0
+
+1.3.0 / 2014-05-31
+==================
+
+ * add `extended` option to urlencoded parser
+
+1.2.2 / 2014-05-27
+==================
+
+ * deps: raw-body@1.1.6
+ - assert stream encoding on node.js 0.8
+ - assert stream encoding on node.js < 0.10.6
+ - deps: bytes@1
+
+1.2.1 / 2014-05-26
+==================
+
+ * invoke `next(err)` after request fully read
+ - prevents hung responses and socket hang ups
+
+1.2.0 / 2014-05-11
+==================
+
+ * add `verify` option
+ * deps: type-is@1.2.0
+ - support suffix matching
+
+1.1.2 / 2014-05-11
+==================
+
+ * improve json parser speed
+
+1.1.1 / 2014-05-11
+==================
+
+ * fix repeated limit parsing with every request
+
+1.1.0 / 2014-05-10
+==================
+
+ * add `type` option
+ * deps: pin for safety and consistency
+
+1.0.2 / 2014-04-14
+==================
+
+ * use `type-is` module
+
+1.0.1 / 2014-03-20
+==================
+
+ * lower default limits to 100kb
diff --git a/node_modules/body-parser/LICENSE b/node_modules/body-parser/LICENSE
new file mode 100644
index 0000000..386b7b6
--- /dev/null
+++ b/node_modules/body-parser/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong
+Copyright (c) 2014-2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/body-parser/README.md b/node_modules/body-parser/README.md
new file mode 100644
index 0000000..1149aff
--- /dev/null
+++ b/node_modules/body-parser/README.md
@@ -0,0 +1,464 @@
+# body-parser
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][github-actions-ci-image]][github-actions-ci-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Node.js body parsing middleware.
+
+Parse incoming request bodies in a middleware before your handlers, available
+under the `req.body` property.
+
+**Note** As `req.body`'s shape is based on user-controlled input, all
+properties and values in this object are untrusted and should be validated
+before trusting. For example, `req.body.foo.toString()` may fail in multiple
+ways, for example the `foo` property may not be there or may not be a string,
+and `toString` may not be a function and instead a string or other user input.
+
+[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
+
+_This does not handle multipart bodies_, due to their complex and typically
+large nature. For multipart bodies, you may be interested in the following
+modules:
+
+ * [busboy](https://www.npmjs.org/package/busboy#readme) and
+ [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
+ * [multiparty](https://www.npmjs.org/package/multiparty#readme) and
+ [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
+ * [formidable](https://www.npmjs.org/package/formidable#readme)
+ * [multer](https://www.npmjs.org/package/multer#readme)
+
+This module provides the following parsers:
+
+ * [JSON body parser](#bodyparserjsonoptions)
+ * [Raw body parser](#bodyparserrawoptions)
+ * [Text body parser](#bodyparsertextoptions)
+ * [URL-encoded form body parser](#bodyparserurlencodedoptions)
+
+Other body parsers you might be interested in:
+
+- [body](https://www.npmjs.org/package/body#readme)
+- [co-body](https://www.npmjs.org/package/co-body#readme)
+
+## Installation
+
+```sh
+$ npm install body-parser
+```
+
+## API
+
+```js
+var bodyParser = require('body-parser')
+```
+
+The `bodyParser` object exposes various factories to create middlewares. All
+middlewares will populate the `req.body` property with the parsed body when
+the `Content-Type` request header matches the `type` option, or an empty
+object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
+or an error occurred.
+
+The various errors returned by this module are described in the
+[errors section](#errors).
+
+### bodyParser.json([options])
+
+Returns middleware that only parses `json` and only looks at requests where
+the `Content-Type` header matches the `type` option. This parser accepts any
+Unicode encoding of the body and supports automatic inflation of `gzip` and
+`deflate` encodings.
+
+A new `body` object containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`).
+
+#### Options
+
+The `json` function takes an optional `options` object that may contain any of
+the following keys:
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### reviver
+
+The `reviver` option is passed directly to `JSON.parse` as the second
+argument. You can find more information on this argument
+[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).
+
+##### strict
+
+When set to `true`, will only accept arrays and objects; when `false` will
+accept anything `JSON.parse` accepts. Defaults to `true`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a string, array of strings, or a function. If not a
+function, `type` option is passed directly to the
+[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
+be an extension name (like `json`), a mime type (like `application/json`), or
+a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
+option is called as `fn(req)` and the request is parsed if it returns a truthy
+value. Defaults to `application/json`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+### bodyParser.raw([options])
+
+Returns middleware that parses all bodies as a `Buffer` and only looks at
+requests where the `Content-Type` header matches the `type` option. This
+parser supports automatic inflation of `gzip` and `deflate` encodings.
+
+A new `body` object containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`). This will be a `Buffer` object
+of the body.
+
+#### Options
+
+The `raw` function takes an optional `options` object that may contain any of
+the following keys:
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a string, array of strings, or a function.
+If not a function, `type` option is passed directly to the
+[type-is](https://www.npmjs.org/package/type-is#readme) library and this
+can be an extension name (like `bin`), a mime type (like
+`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
+`application/*`). If a function, the `type` option is called as `fn(req)`
+and the request is parsed if it returns a truthy value. Defaults to
+`application/octet-stream`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+### bodyParser.text([options])
+
+Returns middleware that parses all bodies as a string and only looks at
+requests where the `Content-Type` header matches the `type` option. This
+parser supports automatic inflation of `gzip` and `deflate` encodings.
+
+A new `body` string containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`). This will be a string of the
+body.
+
+#### Options
+
+The `text` function takes an optional `options` object that may contain any of
+the following keys:
+
+##### defaultCharset
+
+Specify the default character set for the text content if the charset is not
+specified in the `Content-Type` header of the request. Defaults to `utf-8`.
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a string, array of strings, or a function. If not
+a function, `type` option is passed directly to the
+[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
+be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
+type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
+option is called as `fn(req)` and the request is parsed if it returns a
+truthy value. Defaults to `text/plain`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+### bodyParser.urlencoded([options])
+
+Returns middleware that only parses `urlencoded` bodies and only looks at
+requests where the `Content-Type` header matches the `type` option. This
+parser accepts only UTF-8 encoding of the body and supports automatic
+inflation of `gzip` and `deflate` encodings.
+
+A new `body` object containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`). This object will contain
+key-value pairs, where the value can be a string or array (when `extended` is
+`false`), or any type (when `extended` is `true`).
+
+#### Options
+
+The `urlencoded` function takes an optional `options` object that may contain
+any of the following keys:
+
+##### extended
+
+The `extended` option allows to choose between parsing the URL-encoded data
+with the `querystring` library (when `false`) or the `qs` library (when
+`true`). The "extended" syntax allows for rich objects and arrays to be
+encoded into the URL-encoded format, allowing for a JSON-like experience
+with URL-encoded. For more information, please
+[see the qs library](https://www.npmjs.org/package/qs#readme).
+
+Defaults to `true`, but using the default has been deprecated. Please
+research into the difference between `qs` and `querystring` and choose the
+appropriate setting.
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### parameterLimit
+
+The `parameterLimit` option controls the maximum number of parameters that
+are allowed in the URL-encoded data. If a request contains more parameters
+than this value, a 413 will be returned to the client. Defaults to `1000`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a string, array of strings, or a function. If not
+a function, `type` option is passed directly to the
+[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
+be an extension name (like `urlencoded`), a mime type (like
+`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
+`*/x-www-form-urlencoded`). If a function, the `type` option is called as
+`fn(req)` and the request is parsed if it returns a truthy value. Defaults
+to `application/x-www-form-urlencoded`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+## Errors
+
+The middlewares provided by this module create errors using the
+[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
+will typically have a `status`/`statusCode` property that contains the suggested
+HTTP response code, an `expose` property to determine if the `message` property
+should be displayed to the client, a `type` property to determine the type of
+error without matching against the `message`, and a `body` property containing
+the read body, if available.
+
+The following are the common errors created, though any error can come through
+for various reasons.
+
+### content encoding unsupported
+
+This error will occur when the request had a `Content-Encoding` header that
+contained an encoding but the "inflation" option was set to `false`. The
+`status` property is set to `415`, the `type` property is set to
+`'encoding.unsupported'`, and the `charset` property will be set to the
+encoding that is unsupported.
+
+### entity parse failed
+
+This error will occur when the request contained an entity that could not be
+parsed by the middleware. The `status` property is set to `400`, the `type`
+property is set to `'entity.parse.failed'`, and the `body` property is set to
+the entity value that failed parsing.
+
+### entity verify failed
+
+This error will occur when the request contained an entity that could not be
+failed verification by the defined `verify` option. The `status` property is
+set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
+`body` property is set to the entity value that failed verification.
+
+### request aborted
+
+This error will occur when the request is aborted by the client before reading
+the body has finished. The `received` property will be set to the number of
+bytes received before the request was aborted and the `expected` property is
+set to the number of expected bytes. The `status` property is set to `400`
+and `type` property is set to `'request.aborted'`.
+
+### request entity too large
+
+This error will occur when the request body's size is larger than the "limit"
+option. The `limit` property will be set to the byte limit and the `length`
+property will be set to the request body's length. The `status` property is
+set to `413` and the `type` property is set to `'entity.too.large'`.
+
+### request size did not match content length
+
+This error will occur when the request's length did not match the length from
+the `Content-Length` header. This typically occurs when the request is malformed,
+typically when the `Content-Length` header was calculated based on characters
+instead of bytes. The `status` property is set to `400` and the `type` property
+is set to `'request.size.invalid'`.
+
+### stream encoding should not be set
+
+This error will occur when something called the `req.setEncoding` method prior
+to this middleware. This module operates directly on bytes only and you cannot
+call `req.setEncoding` when using this module. The `status` property is set to
+`500` and the `type` property is set to `'stream.encoding.set'`.
+
+### stream is not readable
+
+This error will occur when the request is no longer readable when this middleware
+attempts to read it. This typically means something other than a middleware from
+this module read the reqest body already and the middleware was also configured to
+read the same request. The `status` property is set to `500` and the `type`
+property is set to `'stream.not.readable'`.
+
+### too many parameters
+
+This error will occur when the content of the request exceeds the configured
+`parameterLimit` for the `urlencoded` parser. The `status` property is set to
+`413` and the `type` property is set to `'parameters.too.many'`.
+
+### unsupported charset "BOGUS"
+
+This error will occur when the request had a charset parameter in the
+`Content-Type` header, but the `iconv-lite` module does not support it OR the
+parser does not support it. The charset is contained in the message as well
+as in the `charset` property. The `status` property is set to `415`, the
+`type` property is set to `'charset.unsupported'`, and the `charset` property
+is set to the charset that is unsupported.
+
+### unsupported content encoding "bogus"
+
+This error will occur when the request had a `Content-Encoding` header that
+contained an unsupported encoding. The encoding is contained in the message
+as well as in the `encoding` property. The `status` property is set to `415`,
+the `type` property is set to `'encoding.unsupported'`, and the `encoding`
+property is set to the encoding that is unsupported.
+
+## Examples
+
+### Express/Connect top-level generic
+
+This example demonstrates adding a generic JSON and URL-encoded parser as a
+top-level middleware, which will parse the bodies of all incoming requests.
+This is the simplest setup.
+
+```js
+var express = require('express')
+var bodyParser = require('body-parser')
+
+var app = express()
+
+// parse application/x-www-form-urlencoded
+app.use(bodyParser.urlencoded({ extended: false }))
+
+// parse application/json
+app.use(bodyParser.json())
+
+app.use(function (req, res) {
+ res.setHeader('Content-Type', 'text/plain')
+ res.write('you posted:\n')
+ res.end(JSON.stringify(req.body, null, 2))
+})
+```
+
+### Express route-specific
+
+This example demonstrates adding body parsers specifically to the routes that
+need them. In general, this is the most recommended way to use body-parser with
+Express.
+
+```js
+var express = require('express')
+var bodyParser = require('body-parser')
+
+var app = express()
+
+// create application/json parser
+var jsonParser = bodyParser.json()
+
+// create application/x-www-form-urlencoded parser
+var urlencodedParser = bodyParser.urlencoded({ extended: false })
+
+// POST /login gets urlencoded bodies
+app.post('/login', urlencodedParser, function (req, res) {
+ res.send('welcome, ' + req.body.username)
+})
+
+// POST /api/users gets JSON bodies
+app.post('/api/users', jsonParser, function (req, res) {
+ // create user in req.body
+})
+```
+
+### Change accepted type for parsers
+
+All the parsers accept a `type` option which allows you to change the
+`Content-Type` that the middleware will parse.
+
+```js
+var express = require('express')
+var bodyParser = require('body-parser')
+
+var app = express()
+
+// parse various different custom JSON types as JSON
+app.use(bodyParser.json({ type: 'application/*+json' }))
+
+// parse some custom thing into a Buffer
+app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
+
+// parse an HTML body into a string
+app.use(bodyParser.text({ type: 'text/html' }))
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/body-parser.svg
+[npm-url]: https://npmjs.org/package/body-parser
+[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg
+[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg
+[downloads-url]: https://npmjs.org/package/body-parser
+[github-actions-ci-image]: https://img.shields.io/github/workflow/status/expressjs/body-parser/ci/master?label=ci
+[github-actions-ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
diff --git a/node_modules/body-parser/SECURITY.md b/node_modules/body-parser/SECURITY.md
new file mode 100644
index 0000000..9694d42
--- /dev/null
+++ b/node_modules/body-parser/SECURITY.md
@@ -0,0 +1,25 @@
+# Security Policies and Procedures
+
+## Reporting a Bug
+
+The Express team and community take all security bugs seriously. Thank you
+for improving the security of Express. We appreciate your efforts and
+responsible disclosure and will make every effort to acknowledge your
+contributions.
+
+Report security bugs by emailing the current owner(s) of `body-parser`. This
+information can be found in the npm registry using the command
+`npm owner ls body-parser`.
+If unsure or unable to get the information from the above, open an issue
+in the [project issue tracker](https://github.com/expressjs/body-parser/issues)
+asking for the current contact information.
+
+To ensure the timely response to your report, please ensure that the entirety
+of the report is contained within the email body and not solely behind a web
+link or an attachment.
+
+At least one owner will acknowledge your email within 48 hours, and will send a
+more detailed response within 48 hours indicating the next steps in handling
+your report. After the initial reply to your report, the owners will
+endeavor to keep you informed of the progress towards a fix and full
+announcement, and may ask for additional information or guidance.
diff --git a/node_modules/body-parser/index.js b/node_modules/body-parser/index.js
new file mode 100644
index 0000000..93c3a1f
--- /dev/null
+++ b/node_modules/body-parser/index.js
@@ -0,0 +1,157 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var deprecate = require('depd')('body-parser')
+
+/**
+ * Cache of loaded parsers.
+ * @private
+ */
+
+var parsers = Object.create(null)
+
+/**
+ * @typedef Parsers
+ * @type {function}
+ * @property {function} json
+ * @property {function} raw
+ * @property {function} text
+ * @property {function} urlencoded
+ */
+
+/**
+ * Module exports.
+ * @type {Parsers}
+ */
+
+exports = module.exports = deprecate.function(bodyParser,
+ 'bodyParser: use individual json/urlencoded middlewares')
+
+/**
+ * JSON parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'json', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('json')
+})
+
+/**
+ * Raw parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'raw', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('raw')
+})
+
+/**
+ * Text parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'text', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('text')
+})
+
+/**
+ * URL-encoded parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'urlencoded', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('urlencoded')
+})
+
+/**
+ * Create a middleware to parse json and urlencoded bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @deprecated
+ * @public
+ */
+
+function bodyParser (options) {
+ var opts = {}
+
+ // exclude type option
+ if (options) {
+ for (var prop in options) {
+ if (prop !== 'type') {
+ opts[prop] = options[prop]
+ }
+ }
+ }
+
+ var _urlencoded = exports.urlencoded(opts)
+ var _json = exports.json(opts)
+
+ return function bodyParser (req, res, next) {
+ _json(req, res, function (err) {
+ if (err) return next(err)
+ _urlencoded(req, res, next)
+ })
+ }
+}
+
+/**
+ * Create a getter for loading a parser.
+ * @private
+ */
+
+function createParserGetter (name) {
+ return function get () {
+ return loadParser(name)
+ }
+}
+
+/**
+ * Load a parser module.
+ * @private
+ */
+
+function loadParser (parserName) {
+ var parser = parsers[parserName]
+
+ if (parser !== undefined) {
+ return parser
+ }
+
+ // this uses a switch for static require analysis
+ switch (parserName) {
+ case 'json':
+ parser = require('./lib/types/json')
+ break
+ case 'raw':
+ parser = require('./lib/types/raw')
+ break
+ case 'text':
+ parser = require('./lib/types/text')
+ break
+ case 'urlencoded':
+ parser = require('./lib/types/urlencoded')
+ break
+ }
+
+ // store to prevent invoking require()
+ return (parsers[parserName] = parser)
+}
diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js
new file mode 100644
index 0000000..fce6283
--- /dev/null
+++ b/node_modules/body-parser/lib/read.js
@@ -0,0 +1,205 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var createError = require('http-errors')
+var destroy = require('destroy')
+var getBody = require('raw-body')
+var iconv = require('iconv-lite')
+var onFinished = require('on-finished')
+var unpipe = require('unpipe')
+var zlib = require('zlib')
+
+/**
+ * Module exports.
+ */
+
+module.exports = read
+
+/**
+ * Read a request into a buffer and parse.
+ *
+ * @param {object} req
+ * @param {object} res
+ * @param {function} next
+ * @param {function} parse
+ * @param {function} debug
+ * @param {object} options
+ * @private
+ */
+
+function read (req, res, next, parse, debug, options) {
+ var length
+ var opts = options
+ var stream
+
+ // flag as parsed
+ req._body = true
+
+ // read options
+ var encoding = opts.encoding !== null
+ ? opts.encoding
+ : null
+ var verify = opts.verify
+
+ try {
+ // get the content stream
+ stream = contentstream(req, debug, opts.inflate)
+ length = stream.length
+ stream.length = undefined
+ } catch (err) {
+ return next(err)
+ }
+
+ // set raw-body options
+ opts.length = length
+ opts.encoding = verify
+ ? null
+ : encoding
+
+ // assert charset is supported
+ if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
+ return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
+ charset: encoding.toLowerCase(),
+ type: 'charset.unsupported'
+ }))
+ }
+
+ // read body
+ debug('read body')
+ getBody(stream, opts, function (error, body) {
+ if (error) {
+ var _error
+
+ if (error.type === 'encoding.unsupported') {
+ // echo back charset
+ _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
+ charset: encoding.toLowerCase(),
+ type: 'charset.unsupported'
+ })
+ } else {
+ // set status code on error
+ _error = createError(400, error)
+ }
+
+ // unpipe from stream and destroy
+ if (stream !== req) {
+ unpipe(req)
+ destroy(stream, true)
+ }
+
+ // read off entire request
+ dump(req, function onfinished () {
+ next(createError(400, _error))
+ })
+ return
+ }
+
+ // verify
+ if (verify) {
+ try {
+ debug('verify body')
+ verify(req, res, body, encoding)
+ } catch (err) {
+ next(createError(403, err, {
+ body: body,
+ type: err.type || 'entity.verify.failed'
+ }))
+ return
+ }
+ }
+
+ // parse
+ var str = body
+ try {
+ debug('parse body')
+ str = typeof body !== 'string' && encoding !== null
+ ? iconv.decode(body, encoding)
+ : body
+ req.body = parse(str)
+ } catch (err) {
+ next(createError(400, err, {
+ body: str,
+ type: err.type || 'entity.parse.failed'
+ }))
+ return
+ }
+
+ next()
+ })
+}
+
+/**
+ * Get the content stream of the request.
+ *
+ * @param {object} req
+ * @param {function} debug
+ * @param {boolean} [inflate=true]
+ * @return {object}
+ * @api private
+ */
+
+function contentstream (req, debug, inflate) {
+ var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
+ var length = req.headers['content-length']
+ var stream
+
+ debug('content-encoding "%s"', encoding)
+
+ if (inflate === false && encoding !== 'identity') {
+ throw createError(415, 'content encoding unsupported', {
+ encoding: encoding,
+ type: 'encoding.unsupported'
+ })
+ }
+
+ switch (encoding) {
+ case 'deflate':
+ stream = zlib.createInflate()
+ debug('inflate body')
+ req.pipe(stream)
+ break
+ case 'gzip':
+ stream = zlib.createGunzip()
+ debug('gunzip body')
+ req.pipe(stream)
+ break
+ case 'identity':
+ stream = req
+ stream.length = length
+ break
+ default:
+ throw createError(415, 'unsupported content encoding "' + encoding + '"', {
+ encoding: encoding,
+ type: 'encoding.unsupported'
+ })
+ }
+
+ return stream
+}
+
+/**
+ * Dump the contents of a request.
+ *
+ * @param {object} req
+ * @param {function} callback
+ * @api private
+ */
+
+function dump (req, callback) {
+ if (onFinished.isFinished(req)) {
+ callback(null)
+ } else {
+ onFinished(req, callback)
+ req.resume()
+ }
+}
diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js
new file mode 100644
index 0000000..c2745be
--- /dev/null
+++ b/node_modules/body-parser/lib/types/json.js
@@ -0,0 +1,236 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var bytes = require('bytes')
+var contentType = require('content-type')
+var createError = require('http-errors')
+var debug = require('debug')('body-parser:json')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = json
+
+/**
+ * RegExp to match the first non-space in a string.
+ *
+ * Allowed whitespace is defined in RFC 7159:
+ *
+ * ws = *(
+ * %x20 / ; Space
+ * %x09 / ; Horizontal tab
+ * %x0A / ; Line feed or New line
+ * %x0D ) ; Carriage return
+ */
+
+var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex
+
+/**
+ * Create a middleware to parse JSON bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @public
+ */
+
+function json (options) {
+ var opts = options || {}
+
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var inflate = opts.inflate !== false
+ var reviver = opts.reviver
+ var strict = opts.strict !== false
+ var type = opts.type || 'application/json'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (body) {
+ if (body.length === 0) {
+ // special-case empty json body, as it's a common client-side mistake
+ // TODO: maybe make this configurable or part of "strict" option
+ return {}
+ }
+
+ if (strict) {
+ var first = firstchar(body)
+
+ if (first !== '{' && first !== '[') {
+ debug('strict violation')
+ throw createStrictSyntaxError(body, first)
+ }
+ }
+
+ try {
+ debug('parse json')
+ return JSON.parse(body, reviver)
+ } catch (e) {
+ throw normalizeJsonSyntaxError(e, {
+ message: e.message,
+ stack: e.stack
+ })
+ }
+ }
+
+ return function jsonParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // assert charset per RFC 7159 sec 8.1
+ var charset = getCharset(req) || 'utf-8'
+ if (charset.slice(0, 4) !== 'utf-') {
+ debug('invalid charset')
+ next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
+ charset: charset,
+ type: 'charset.unsupported'
+ }))
+ return
+ }
+
+ // read
+ read(req, res, next, parse, debug, {
+ encoding: charset,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Create strict violation syntax error matching native error.
+ *
+ * @param {string} str
+ * @param {string} char
+ * @return {Error}
+ * @private
+ */
+
+function createStrictSyntaxError (str, char) {
+ var index = str.indexOf(char)
+ var partial = index !== -1
+ ? str.substring(0, index) + '#'
+ : ''
+
+ try {
+ JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')
+ } catch (e) {
+ return normalizeJsonSyntaxError(e, {
+ message: e.message.replace('#', char),
+ stack: e.stack
+ })
+ }
+}
+
+/**
+ * Get the first non-whitespace character in a string.
+ *
+ * @param {string} str
+ * @return {function}
+ * @private
+ */
+
+function firstchar (str) {
+ var match = FIRST_CHAR_REGEXP.exec(str)
+
+ return match
+ ? match[1]
+ : undefined
+}
+
+/**
+ * Get the charset of a request.
+ *
+ * @param {object} req
+ * @api private
+ */
+
+function getCharset (req) {
+ try {
+ return (contentType.parse(req).parameters.charset || '').toLowerCase()
+ } catch (e) {
+ return undefined
+ }
+}
+
+/**
+ * Normalize a SyntaxError for JSON.parse.
+ *
+ * @param {SyntaxError} error
+ * @param {object} obj
+ * @return {SyntaxError}
+ */
+
+function normalizeJsonSyntaxError (error, obj) {
+ var keys = Object.getOwnPropertyNames(error)
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i]
+ if (key !== 'stack' && key !== 'message') {
+ delete error[key]
+ }
+ }
+
+ // replace stack before message for Node.js 0.10 and below
+ error.stack = obj.stack.replace(error.message, obj.message)
+ error.message = obj.message
+
+ return error
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/lib/types/raw.js b/node_modules/body-parser/lib/types/raw.js
new file mode 100644
index 0000000..f5d1b67
--- /dev/null
+++ b/node_modules/body-parser/lib/types/raw.js
@@ -0,0 +1,101 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ */
+
+var bytes = require('bytes')
+var debug = require('debug')('body-parser:raw')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = raw
+
+/**
+ * Create a middleware to parse raw bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @api public
+ */
+
+function raw (options) {
+ var opts = options || {}
+
+ var inflate = opts.inflate !== false
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var type = opts.type || 'application/octet-stream'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (buf) {
+ return buf
+ }
+
+ return function rawParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // read
+ read(req, res, next, parse, debug, {
+ encoding: null,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/lib/types/text.js b/node_modules/body-parser/lib/types/text.js
new file mode 100644
index 0000000..083a009
--- /dev/null
+++ b/node_modules/body-parser/lib/types/text.js
@@ -0,0 +1,121 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ */
+
+var bytes = require('bytes')
+var contentType = require('content-type')
+var debug = require('debug')('body-parser:text')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = text
+
+/**
+ * Create a middleware to parse text bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @api public
+ */
+
+function text (options) {
+ var opts = options || {}
+
+ var defaultCharset = opts.defaultCharset || 'utf-8'
+ var inflate = opts.inflate !== false
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var type = opts.type || 'text/plain'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (buf) {
+ return buf
+ }
+
+ return function textParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // get charset
+ var charset = getCharset(req) || defaultCharset
+
+ // read
+ read(req, res, next, parse, debug, {
+ encoding: charset,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the charset of a request.
+ *
+ * @param {object} req
+ * @api private
+ */
+
+function getCharset (req) {
+ try {
+ return (contentType.parse(req).parameters.charset || '').toLowerCase()
+ } catch (e) {
+ return undefined
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/lib/types/urlencoded.js b/node_modules/body-parser/lib/types/urlencoded.js
new file mode 100644
index 0000000..b2ca8f1
--- /dev/null
+++ b/node_modules/body-parser/lib/types/urlencoded.js
@@ -0,0 +1,284 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var bytes = require('bytes')
+var contentType = require('content-type')
+var createError = require('http-errors')
+var debug = require('debug')('body-parser:urlencoded')
+var deprecate = require('depd')('body-parser')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = urlencoded
+
+/**
+ * Cache of parser modules.
+ */
+
+var parsers = Object.create(null)
+
+/**
+ * Create a middleware to parse urlencoded bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @public
+ */
+
+function urlencoded (options) {
+ var opts = options || {}
+
+ // notice because option default will flip in next major
+ if (opts.extended === undefined) {
+ deprecate('undefined extended: provide extended option')
+ }
+
+ var extended = opts.extended !== false
+ var inflate = opts.inflate !== false
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var type = opts.type || 'application/x-www-form-urlencoded'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate query parser
+ var queryparse = extended
+ ? extendedparser(opts)
+ : simpleparser(opts)
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (body) {
+ return body.length
+ ? queryparse(body)
+ : {}
+ }
+
+ return function urlencodedParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // assert charset
+ var charset = getCharset(req) || 'utf-8'
+ if (charset !== 'utf-8') {
+ debug('invalid charset')
+ next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
+ charset: charset,
+ type: 'charset.unsupported'
+ }))
+ return
+ }
+
+ // read
+ read(req, res, next, parse, debug, {
+ debug: debug,
+ encoding: charset,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the extended query parser.
+ *
+ * @param {object} options
+ */
+
+function extendedparser (options) {
+ var parameterLimit = options.parameterLimit !== undefined
+ ? options.parameterLimit
+ : 1000
+ var parse = parser('qs')
+
+ if (isNaN(parameterLimit) || parameterLimit < 1) {
+ throw new TypeError('option parameterLimit must be a positive number')
+ }
+
+ if (isFinite(parameterLimit)) {
+ parameterLimit = parameterLimit | 0
+ }
+
+ return function queryparse (body) {
+ var paramCount = parameterCount(body, parameterLimit)
+
+ if (paramCount === undefined) {
+ debug('too many parameters')
+ throw createError(413, 'too many parameters', {
+ type: 'parameters.too.many'
+ })
+ }
+
+ var arrayLimit = Math.max(100, paramCount)
+
+ debug('parse extended urlencoding')
+ return parse(body, {
+ allowPrototypes: true,
+ arrayLimit: arrayLimit,
+ depth: Infinity,
+ parameterLimit: parameterLimit
+ })
+ }
+}
+
+/**
+ * Get the charset of a request.
+ *
+ * @param {object} req
+ * @api private
+ */
+
+function getCharset (req) {
+ try {
+ return (contentType.parse(req).parameters.charset || '').toLowerCase()
+ } catch (e) {
+ return undefined
+ }
+}
+
+/**
+ * Count the number of parameters, stopping once limit reached
+ *
+ * @param {string} body
+ * @param {number} limit
+ * @api private
+ */
+
+function parameterCount (body, limit) {
+ var count = 0
+ var index = 0
+
+ while ((index = body.indexOf('&', index)) !== -1) {
+ count++
+ index++
+
+ if (count === limit) {
+ return undefined
+ }
+ }
+
+ return count
+}
+
+/**
+ * Get parser for module name dynamically.
+ *
+ * @param {string} name
+ * @return {function}
+ * @api private
+ */
+
+function parser (name) {
+ var mod = parsers[name]
+
+ if (mod !== undefined) {
+ return mod.parse
+ }
+
+ // this uses a switch for static require analysis
+ switch (name) {
+ case 'qs':
+ mod = require('qs')
+ break
+ case 'querystring':
+ mod = require('querystring')
+ break
+ }
+
+ // store to prevent invoking require()
+ parsers[name] = mod
+
+ return mod.parse
+}
+
+/**
+ * Get the simple query parser.
+ *
+ * @param {object} options
+ */
+
+function simpleparser (options) {
+ var parameterLimit = options.parameterLimit !== undefined
+ ? options.parameterLimit
+ : 1000
+ var parse = parser('querystring')
+
+ if (isNaN(parameterLimit) || parameterLimit < 1) {
+ throw new TypeError('option parameterLimit must be a positive number')
+ }
+
+ if (isFinite(parameterLimit)) {
+ parameterLimit = parameterLimit | 0
+ }
+
+ return function queryparse (body) {
+ var paramCount = parameterCount(body, parameterLimit)
+
+ if (paramCount === undefined) {
+ debug('too many parameters')
+ throw createError(413, 'too many parameters', {
+ type: 'parameters.too.many'
+ })
+ }
+
+ debug('parse urlencoding')
+ return parse(body, undefined, undefined, { maxKeys: parameterLimit })
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json
new file mode 100644
index 0000000..9a03357
--- /dev/null
+++ b/node_modules/body-parser/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "body-parser",
+ "description": "Node.js body parsing middleware",
+ "version": "1.20.0",
+ "contributors": [
+ "Douglas Christopher Wilson ",
+ "Jonathan Ong (http://jongleberry.com)"
+ ],
+ "license": "MIT",
+ "repository": "expressjs/body-parser",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "devDependencies": {
+ "eslint": "7.32.0",
+ "eslint-config-standard": "14.1.1",
+ "eslint-plugin-import": "2.25.4",
+ "eslint-plugin-markdown": "2.2.1",
+ "eslint-plugin-node": "11.1.0",
+ "eslint-plugin-promise": "5.2.0",
+ "eslint-plugin-standard": "4.1.0",
+ "methods": "1.1.2",
+ "mocha": "9.2.2",
+ "nyc": "15.1.0",
+ "safe-buffer": "5.2.1",
+ "supertest": "6.2.2"
+ },
+ "files": [
+ "lib/",
+ "LICENSE",
+ "HISTORY.md",
+ "SECURITY.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/",
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test"
+ }
+}
diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE
new file mode 100644
index 0000000..de32266
--- /dev/null
+++ b/node_modules/brace-expansion/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md
new file mode 100644
index 0000000..6b4e0e1
--- /dev/null
+++ b/node_modules/brace-expansion/README.md
@@ -0,0 +1,129 @@
+# brace-expansion
+
+[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
+as known from sh/bash, in JavaScript.
+
+[](http://travis-ci.org/juliangruber/brace-expansion)
+[](https://www.npmjs.org/package/brace-expansion)
+[](https://greenkeeper.io/)
+
+[](https://ci.testling.com/juliangruber/brace-expansion)
+
+## Example
+
+```js
+var expand = require('brace-expansion');
+
+expand('file-{a,b,c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('-v{,,}')
+// => ['-v', '-v', '-v']
+
+expand('file{0..2}.jpg')
+// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
+
+expand('file-{a..c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('file{2..0}.jpg')
+// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
+
+expand('file{0..4..2}.jpg')
+// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
+
+expand('file-{a..e..2}.jpg')
+// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
+
+expand('file{00..10..5}.jpg')
+// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
+
+expand('{{A..C},{a..c}}')
+// => ['A', 'B', 'C', 'a', 'b', 'c']
+
+expand('ppp{,config,oe{,conf}}')
+// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
+```
+
+## API
+
+```js
+var expand = require('brace-expansion');
+```
+
+### var expanded = expand(str)
+
+Return an array of all possible and valid expansions of `str`. If none are
+found, `[str]` is returned.
+
+Valid expansions are:
+
+```js
+/^(.*,)+(.+)?$/
+// {a,b,...}
+```
+
+A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+A numeric sequence from `x` to `y` inclusive, with optional increment.
+If `x` or `y` start with a leading `0`, all the numbers will be padded
+to have equal length. Negative numbers and backwards iteration work too.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+An alphabetic sequence from `x` to `y` inclusive, with optional increment.
+`x` and `y` must be exactly one character, and if given, `incr` must be a
+number.
+
+For compatibility reasons, the string `${` is not eligible for brace expansion.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install brace-expansion
+```
+
+## Contributors
+
+- [Julian Gruber](https://github.com/juliangruber)
+- [Isaac Z. Schlueter](https://github.com/isaacs)
+
+## Sponsors
+
+This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)!
+
+Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js
new file mode 100644
index 0000000..0478be8
--- /dev/null
+++ b/node_modules/brace-expansion/index.js
@@ -0,0 +1,201 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ // I don't know why Bash 4.3 does this, but it does.
+ // Anything starting with {} will have the first two bytes preserved
+ // but *only* at the top level, so {},a}b will not expand to anything,
+ // but a{},b}c will be expanded to [a}c,abc].
+ // One could argue that this is a bug in Bash, but since the goal of
+ // this module is to match Bash's rules, we escape a leading {}
+ if (str.substr(0, 2) === '{}') {
+ str = '\\{\\}' + str.substr(2);
+ }
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = m.body.indexOf(',') >= 0;
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*\}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json
new file mode 100644
index 0000000..a18faa8
--- /dev/null
+++ b/node_modules/brace-expansion/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "brace-expansion",
+ "description": "Brace expansion as known from sh/bash",
+ "version": "1.1.11",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
+ },
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/*.js",
+ "gentest": "bash test/generate.sh",
+ "bench": "matcha test/perf/bench.js"
+ },
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "keywords": [],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ }
+}
diff --git a/node_modules/braces/CHANGELOG.md b/node_modules/braces/CHANGELOG.md
new file mode 100644
index 0000000..36f798b
--- /dev/null
+++ b/node_modules/braces/CHANGELOG.md
@@ -0,0 +1,184 @@
+# Release history
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+
+ Guiding Principles
+
+- Changelogs are for humans, not machines.
+- There should be an entry for every single version.
+- The same types of changes should be grouped.
+- Versions and sections should be linkable.
+- The latest version comes first.
+- The release date of each versions is displayed.
+- Mention whether you follow Semantic Versioning.
+
+
+
+
+ Types of changes
+
+Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):
+
+- `Added` for new features.
+- `Changed` for changes in existing functionality.
+- `Deprecated` for soon-to-be removed features.
+- `Removed` for now removed features.
+- `Fixed` for any bug fixes.
+- `Security` in case of vulnerabilities.
+
+
+
+## [3.0.0] - 2018-04-08
+
+v3.0 is a complete refactor, resulting in a faster, smaller codebase, with fewer deps, and a more accurate parser and compiler.
+
+**Breaking Changes**
+
+- The undocumented `.makeRe` method was removed
+
+**Non-breaking changes**
+
+- Caching was removed
+
+## [2.3.2] - 2018-04-08
+
+- start refactoring
+- cover sets
+- better range handling
+
+## [2.3.1] - 2018-02-17
+
+- Remove unnecessary escape in Regex. (#14)
+
+## [2.3.0] - 2017-10-19
+
+- minor code reorganization
+- optimize regex
+- expose `maxLength` option
+
+## [2.2.1] - 2017-05-30
+
+- don't condense when braces contain extglobs
+
+## [2.2.0] - 2017-05-28
+
+- ensure word boundaries are preserved
+- fixes edge case where extglob characters precede a brace pattern
+
+## [2.1.1] - 2017-04-27
+
+- use snapdragon-node
+- handle edge case
+- optimizations, lint
+
+## [2.0.4] - 2017-04-11
+
+- pass opts to compiler
+- minor optimization in create method
+- re-write parser handlers to remove negation regex
+
+## [2.0.3] - 2016-12-10
+
+- use split-string
+- clear queue at the end
+- adds sequences example
+- add unit tests
+
+## [2.0.2] - 2016-10-21
+
+- fix comma handling in nested extglobs
+
+## [2.0.1] - 2016-10-20
+
+- add comments
+- more tests, ensure quotes are stripped
+
+## [2.0.0] - 2016-10-19
+
+- don't expand braces inside character classes
+- add quantifier pattern
+
+## [1.8.5] - 2016-05-21
+
+- Refactor (#10)
+
+## [1.8.4] - 2016-04-20
+
+- fixes https://github.com/jonschlinkert/micromatch/issues/66
+
+## [1.8.0] - 2015-03-18
+
+- adds exponent examples, tests
+- fixes the first example in https://github.com/jonschlinkert/micromatch/issues/38
+
+## [1.6.0] - 2015-01-30
+
+- optimizations, `bash` mode:
+- improve path escaping
+
+## [1.5.0] - 2015-01-28
+
+- Merge pull request #5 from eush77/lib-files
+
+## [1.4.0] - 2015-01-24
+
+- add extglob tests
+- externalize exponent function
+- better whitespace handling
+
+## [1.3.0] - 2015-01-24
+
+- make regex patterns explicity
+
+## [1.1.0] - 2015-01-11
+
+- don't create a match group with `makeRe`
+
+## [1.0.0] - 2014-12-23
+
+- Merge commit '97b05f5544f8348736a8efaecf5c32bbe3e2ad6e'
+- support empty brace syntax
+- better bash coverage
+- better support for regex strings
+
+## [0.1.4] - 2014-11-14
+
+- improve recognition of bad args, recognize mismatched argument types
+- support escaping
+- remove pathname-expansion
+- support whitespace in patterns
+
+## [0.1.0]
+
+- first commit
+
+[2.3.2]: https://github.com/micromatch/braces/compare/2.3.1...2.3.2
+[2.3.1]: https://github.com/micromatch/braces/compare/2.3.0...2.3.1
+[2.3.0]: https://github.com/micromatch/braces/compare/2.2.1...2.3.0
+[2.2.1]: https://github.com/micromatch/braces/compare/2.2.0...2.2.1
+[2.2.0]: https://github.com/micromatch/braces/compare/2.1.1...2.2.0
+[2.1.1]: https://github.com/micromatch/braces/compare/2.1.0...2.1.1
+[2.1.0]: https://github.com/micromatch/braces/compare/2.0.4...2.1.0
+[2.0.4]: https://github.com/micromatch/braces/compare/2.0.3...2.0.4
+[2.0.3]: https://github.com/micromatch/braces/compare/2.0.2...2.0.3
+[2.0.2]: https://github.com/micromatch/braces/compare/2.0.1...2.0.2
+[2.0.1]: https://github.com/micromatch/braces/compare/2.0.0...2.0.1
+[2.0.0]: https://github.com/micromatch/braces/compare/1.8.5...2.0.0
+[1.8.5]: https://github.com/micromatch/braces/compare/1.8.4...1.8.5
+[1.8.4]: https://github.com/micromatch/braces/compare/1.8.0...1.8.4
+[1.8.0]: https://github.com/micromatch/braces/compare/1.6.0...1.8.0
+[1.6.0]: https://github.com/micromatch/braces/compare/1.5.0...1.6.0
+[1.5.0]: https://github.com/micromatch/braces/compare/1.4.0...1.5.0
+[1.4.0]: https://github.com/micromatch/braces/compare/1.3.0...1.4.0
+[1.3.0]: https://github.com/micromatch/braces/compare/1.2.0...1.3.0
+[1.2.0]: https://github.com/micromatch/braces/compare/1.1.0...1.2.0
+[1.1.0]: https://github.com/micromatch/braces/compare/1.0.0...1.1.0
+[1.0.0]: https://github.com/micromatch/braces/compare/0.1.4...1.0.0
+[0.1.4]: https://github.com/micromatch/braces/compare/0.1.0...0.1.4
+
+[Unreleased]: https://github.com/micromatch/braces/compare/0.1.0...HEAD
+[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog
\ No newline at end of file
diff --git a/node_modules/braces/LICENSE b/node_modules/braces/LICENSE
new file mode 100644
index 0000000..d32ab44
--- /dev/null
+++ b/node_modules/braces/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2018, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/braces/README.md b/node_modules/braces/README.md
new file mode 100644
index 0000000..cba2f60
--- /dev/null
+++ b/node_modules/braces/README.md
@@ -0,0 +1,593 @@
+# braces [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [](https://www.npmjs.com/package/braces) [](https://npmjs.org/package/braces) [](https://npmjs.org/package/braces) [](https://travis-ci.org/micromatch/braces)
+
+> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save braces
+```
+
+## v3.0.0 Released!!
+
+See the [changelog](CHANGELOG.md) for details.
+
+## Why use braces?
+
+Brace patterns make globs more powerful by adding the ability to match specific ranges and sequences of characters.
+
+* **Accurate** - complete support for the [Bash 4.3 Brace Expansion](www.gnu.org/software/bash/) specification (passes all of the Bash braces tests)
+* **[fast and performant](#benchmarks)** - Starts fast, runs fast and [scales well](#performance) as patterns increase in complexity.
+* **Organized code base** - The parser and compiler are easy to maintain and update when edge cases crop up.
+* **Well-tested** - Thousands of test assertions, and passes all of the Bash, minimatch, and [brace-expansion](https://github.com/juliangruber/brace-expansion) unit tests (as of the date this was written).
+* **Safer** - You shouldn't have to worry about users defining aggressive or malicious brace patterns that can break your application. Braces takes measures to prevent malicious regex that can be used for DDoS attacks (see [catastrophic backtracking](https://www.regular-expressions.info/catastrophic.html)).
+* [Supports lists](#lists) - (aka "sets") `a/{b,c}/d` => `['a/b/d', 'a/c/d']`
+* [Supports sequences](#sequences) - (aka "ranges") `{01..03}` => `['01', '02', '03']`
+* [Supports steps](#steps) - (aka "increments") `{2..10..2}` => `['2', '4', '6', '8', '10']`
+* [Supports escaping](#escaping) - To prevent evaluation of special characters.
+
+## Usage
+
+The main export is a function that takes one or more brace `patterns` and `options`.
+
+```js
+const braces = require('braces');
+// braces(patterns[, options]);
+
+console.log(braces(['{01..05}', '{a..e}']));
+//=> ['(0[1-5])', '([a-e])']
+
+console.log(braces(['{01..05}', '{a..e}'], { expand: true }));
+//=> ['01', '02', '03', '04', '05', 'a', 'b', 'c', 'd', 'e']
+```
+
+### Brace Expansion vs. Compilation
+
+By default, brace patterns are compiled into strings that are optimized for creating regular expressions and matching.
+
+**Compiled**
+
+```js
+console.log(braces('a/{x,y,z}/b'));
+//=> ['a/(x|y|z)/b']
+console.log(braces(['a/{01..20}/b', 'a/{1..5}/b']));
+//=> [ 'a/(0[1-9]|1[0-9]|20)/b', 'a/([1-5])/b' ]
+```
+
+**Expanded**
+
+Enable brace expansion by setting the `expand` option to true, or by using [braces.expand()](#expand) (returns an array similar to what you'd expect from Bash, or `echo {1..5}`, or [minimatch](https://github.com/isaacs/minimatch)):
+
+```js
+console.log(braces('a/{x,y,z}/b', { expand: true }));
+//=> ['a/x/b', 'a/y/b', 'a/z/b']
+
+console.log(braces.expand('{01..10}'));
+//=> ['01','02','03','04','05','06','07','08','09','10']
+```
+
+### Lists
+
+Expand lists (like Bash "sets"):
+
+```js
+console.log(braces('a/{foo,bar,baz}/*.js'));
+//=> ['a/(foo|bar|baz)/*.js']
+
+console.log(braces.expand('a/{foo,bar,baz}/*.js'));
+//=> ['a/foo/*.js', 'a/bar/*.js', 'a/baz/*.js']
+```
+
+### Sequences
+
+Expand ranges of characters (like Bash "sequences"):
+
+```js
+console.log(braces.expand('{1..3}')); // ['1', '2', '3']
+console.log(braces.expand('a/{1..3}/b')); // ['a/1/b', 'a/2/b', 'a/3/b']
+console.log(braces('{a..c}', { expand: true })); // ['a', 'b', 'c']
+console.log(braces('foo/{a..c}', { expand: true })); // ['foo/a', 'foo/b', 'foo/c']
+
+// supports zero-padded ranges
+console.log(braces('a/{01..03}/b')); //=> ['a/(0[1-3])/b']
+console.log(braces('a/{001..300}/b')); //=> ['a/(0{2}[1-9]|0[1-9][0-9]|[12][0-9]{2}|300)/b']
+```
+
+See [fill-range](https://github.com/jonschlinkert/fill-range) for all available range-expansion options.
+
+### Steppped ranges
+
+Steps, or increments, may be used with ranges:
+
+```js
+console.log(braces.expand('{2..10..2}'));
+//=> ['2', '4', '6', '8', '10']
+
+console.log(braces('{2..10..2}'));
+//=> ['(2|4|6|8|10)']
+```
+
+When the [.optimize](#optimize) method is used, or [options.optimize](#optionsoptimize) is set to true, sequences are passed to [to-regex-range](https://github.com/jonschlinkert/to-regex-range) for expansion.
+
+### Nesting
+
+Brace patterns may be nested. The results of each expanded string are not sorted, and left to right order is preserved.
+
+**"Expanded" braces**
+
+```js
+console.log(braces.expand('a{b,c,/{x,y}}/e'));
+//=> ['ab/e', 'ac/e', 'a/x/e', 'a/y/e']
+
+console.log(braces.expand('a/{x,{1..5},y}/c'));
+//=> ['a/x/c', 'a/1/c', 'a/2/c', 'a/3/c', 'a/4/c', 'a/5/c', 'a/y/c']
+```
+
+**"Optimized" braces**
+
+```js
+console.log(braces('a{b,c,/{x,y}}/e'));
+//=> ['a(b|c|/(x|y))/e']
+
+console.log(braces('a/{x,{1..5},y}/c'));
+//=> ['a/(x|([1-5])|y)/c']
+```
+
+### Escaping
+
+**Escaping braces**
+
+A brace pattern will not be expanded or evaluted if _either the opening or closing brace is escaped_:
+
+```js
+console.log(braces.expand('a\\{d,c,b}e'));
+//=> ['a{d,c,b}e']
+
+console.log(braces.expand('a{d,c,b\\}e'));
+//=> ['a{d,c,b}e']
+```
+
+**Escaping commas**
+
+Commas inside braces may also be escaped:
+
+```js
+console.log(braces.expand('a{b\\,c}d'));
+//=> ['a{b,c}d']
+
+console.log(braces.expand('a{d\\,c,b}e'));
+//=> ['ad,ce', 'abe']
+```
+
+**Single items**
+
+Following bash conventions, a brace pattern is also not expanded when it contains a single character:
+
+```js
+console.log(braces.expand('a{b}c'));
+//=> ['a{b}c']
+```
+
+## Options
+
+### options.maxLength
+
+**Type**: `Number`
+
+**Default**: `65,536`
+
+**Description**: Limit the length of the input string. Useful when the input string is generated or your application allows users to pass a string, et cetera.
+
+```js
+console.log(braces('a/{b,c}/d', { maxLength: 3 })); //=> throws an error
+```
+
+### options.expand
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Description**: Generate an "expanded" brace pattern (alternatively you can use the `braces.expand()` method, which does the same thing).
+
+```js
+console.log(braces('a/{b,c}/d', { expand: true }));
+//=> [ 'a/b/d', 'a/c/d' ]
+```
+
+### options.nodupes
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Description**: Remove duplicates from the returned array.
+
+### options.rangeLimit
+
+**Type**: `Number`
+
+**Default**: `1000`
+
+**Description**: To prevent malicious patterns from being passed by users, an error is thrown when `braces.expand()` is used or `options.expand` is true and the generated range will exceed the `rangeLimit`.
+
+You can customize `options.rangeLimit` or set it to `Inifinity` to disable this altogether.
+
+**Examples**
+
+```js
+// pattern exceeds the "rangeLimit", so it's optimized automatically
+console.log(braces.expand('{1..1000}'));
+//=> ['([1-9]|[1-9][0-9]{1,2}|1000)']
+
+// pattern does not exceed "rangeLimit", so it's NOT optimized
+console.log(braces.expand('{1..100}'));
+//=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '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', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100']
+```
+
+### options.transform
+
+**Type**: `Function`
+
+**Default**: `undefined`
+
+**Description**: Customize range expansion.
+
+**Example: Transforming non-numeric values**
+
+```js
+const alpha = braces.expand('x/{a..e}/y', {
+ transform(value, index) {
+ // When non-numeric values are passed, "value" is a character code.
+ return 'foo/' + String.fromCharCode(value) + '-' + index;
+ }
+});
+console.log(alpha);
+//=> [ 'x/foo/a-0/y', 'x/foo/b-1/y', 'x/foo/c-2/y', 'x/foo/d-3/y', 'x/foo/e-4/y' ]
+```
+
+**Example: Transforming numeric values**
+
+```js
+const numeric = braces.expand('{1..5}', {
+ transform(value) {
+ // when numeric values are passed, "value" is a number
+ return 'foo/' + value * 2;
+ }
+});
+console.log(numeric);
+//=> [ 'foo/2', 'foo/4', 'foo/6', 'foo/8', 'foo/10' ]
+```
+
+### options.quantifiers
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Description**: In regular expressions, quanitifiers can be used to specify how many times a token can be repeated. For example, `a{1,3}` will match the letter `a` one to three times.
+
+Unfortunately, regex quantifiers happen to share the same syntax as [Bash lists](#lists)
+
+The `quantifiers` option tells braces to detect when [regex quantifiers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#quantifiers) are defined in the given pattern, and not to try to expand them as lists.
+
+**Examples**
+
+```js
+const braces = require('braces');
+console.log(braces('a/b{1,3}/{x,y,z}'));
+//=> [ 'a/b(1|3)/(x|y|z)' ]
+console.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true}));
+//=> [ 'a/b{1,3}/(x|y|z)' ]
+console.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true, expand: true}));
+//=> [ 'a/b{1,3}/x', 'a/b{1,3}/y', 'a/b{1,3}/z' ]
+```
+
+### options.unescape
+
+**Type**: `Boolean`
+
+**Default**: `undefined`
+
+**Description**: Strip backslashes that were used for escaping from the result.
+
+## What is "brace expansion"?
+
+Brace expansion is a type of parameter expansion that was made popular by unix shells for generating lists of strings, as well as regex-like matching when used alongside wildcards (globs).
+
+In addition to "expansion", braces are also used for matching. In other words:
+
+* [brace expansion](#brace-expansion) is for generating new lists
+* [brace matching](#brace-matching) is for filtering existing lists
+
+
+More about brace expansion (click to expand)
+
+There are two main types of brace expansion:
+
+1. **lists**: which are defined using comma-separated values inside curly braces: `{a,b,c}`
+2. **sequences**: which are defined using a starting value and an ending value, separated by two dots: `a{1..3}b`. Optionally, a third argument may be passed to define a "step" or increment to use: `a{1..100..10}b`. These are also sometimes referred to as "ranges".
+
+Here are some example brace patterns to illustrate how they work:
+
+**Sets**
+
+```
+{a,b,c} => a b c
+{a,b,c}{1,2} => a1 a2 b1 b2 c1 c2
+```
+
+**Sequences**
+
+```
+{1..9} => 1 2 3 4 5 6 7 8 9
+{4..-4} => 4 3 2 1 0 -1 -2 -3 -4
+{1..20..3} => 1 4 7 10 13 16 19
+{a..j} => a b c d e f g h i j
+{j..a} => j i h g f e d c b a
+{a..z..3} => a d g j m p s v y
+```
+
+**Combination**
+
+Sets and sequences can be mixed together or used along with any other strings.
+
+```
+{a,b,c}{1..3} => a1 a2 a3 b1 b2 b3 c1 c2 c3
+foo/{a,b,c}/bar => foo/a/bar foo/b/bar foo/c/bar
+```
+
+The fact that braces can be "expanded" from relatively simple patterns makes them ideal for quickly generating test fixtures, file paths, and similar use cases.
+
+## Brace matching
+
+In addition to _expansion_, brace patterns are also useful for performing regular-expression-like matching.
+
+For example, the pattern `foo/{1..3}/bar` would match any of following strings:
+
+```
+foo/1/bar
+foo/2/bar
+foo/3/bar
+```
+
+But not:
+
+```
+baz/1/qux
+baz/2/qux
+baz/3/qux
+```
+
+Braces can also be combined with [glob patterns](https://github.com/jonschlinkert/micromatch) to perform more advanced wildcard matching. For example, the pattern `*/{1..3}/*` would match any of following strings:
+
+```
+foo/1/bar
+foo/2/bar
+foo/3/bar
+baz/1/qux
+baz/2/qux
+baz/3/qux
+```
+
+## Brace matching pitfalls
+
+Although brace patterns offer a user-friendly way of matching ranges or sets of strings, there are also some major disadvantages and potential risks you should be aware of.
+
+### tldr
+
+**"brace bombs"**
+
+* brace expansion can eat up a huge amount of processing resources
+* as brace patterns increase _linearly in size_, the system resources required to expand the pattern increase exponentially
+* users can accidentally (or intentially) exhaust your system's resources resulting in the equivalent of a DoS attack (bonus: no programming knowledge is required!)
+
+For a more detailed explanation with examples, see the [geometric complexity](#geometric-complexity) section.
+
+### The solution
+
+Jump to the [performance section](#performance) to see how Braces solves this problem in comparison to other libraries.
+
+### Geometric complexity
+
+At minimum, brace patterns with sets limited to two elements have quadradic or `O(n^2)` complexity. But the complexity of the algorithm increases exponentially as the number of sets, _and elements per set_, increases, which is `O(n^c)`.
+
+For example, the following sets demonstrate quadratic (`O(n^2)`) complexity:
+
+```
+{1,2}{3,4} => (2X2) => 13 14 23 24
+{1,2}{3,4}{5,6} => (2X2X2) => 135 136 145 146 235 236 245 246
+```
+
+But add an element to a set, and we get a n-fold Cartesian product with `O(n^c)` complexity:
+
+```
+{1,2,3}{4,5,6}{7,8,9} => (3X3X3) => 147 148 149 157 158 159 167 168 169 247 248
+ 249 257 258 259 267 268 269 347 348 349 357
+ 358 359 367 368 369
+```
+
+Now, imagine how this complexity grows given that each element is a n-tuple:
+
+```
+{1..100}{1..100} => (100X100) => 10,000 elements (38.4 kB)
+{1..100}{1..100}{1..100} => (100X100X100) => 1,000,000 elements (5.76 MB)
+```
+
+Although these examples are clearly contrived, they demonstrate how brace patterns can quickly grow out of control.
+
+**More information**
+
+Interested in learning more about brace expansion?
+
+* [linuxjournal/bash-brace-expansion](http://www.linuxjournal.com/content/bash-brace-expansion)
+* [rosettacode/Brace_expansion](https://rosettacode.org/wiki/Brace_expansion)
+* [cartesian product](https://en.wikipedia.org/wiki/Cartesian_product)
+
+
+
+## Performance
+
+Braces is not only screaming fast, it's also more accurate the other brace expansion libraries.
+
+### Better algorithms
+
+Fortunately there is a solution to the ["brace bomb" problem](#brace-matching-pitfalls): _don't expand brace patterns into an array when they're used for matching_.
+
+Instead, convert the pattern into an optimized regular expression. This is easier said than done, and braces is the only library that does this currently.
+
+**The proof is in the numbers**
+
+Minimatch gets exponentially slower as patterns increase in complexity, braces does not. The following results were generated using `braces()` and `minimatch.braceExpand()`, respectively.
+
+| **Pattern** | **braces** | **[minimatch][]** |
+| --- | --- | --- |
+| `{1..9007199254740991}`[^1] | `298 B` (5ms 459μs)| N/A (freezes) |
+| `{1..1000000000000000}` | `41 B` (1ms 15μs) | N/A (freezes) |
+| `{1..100000000000000}` | `40 B` (890μs) | N/A (freezes) |
+| `{1..10000000000000}` | `39 B` (2ms 49μs) | N/A (freezes) |
+| `{1..1000000000000}` | `38 B` (608μs) | N/A (freezes) |
+| `{1..100000000000}` | `37 B` (397μs) | N/A (freezes) |
+| `{1..10000000000}` | `35 B` (983μs) | N/A (freezes) |
+| `{1..1000000000}` | `34 B` (798μs) | N/A (freezes) |
+| `{1..100000000}` | `33 B` (733μs) | N/A (freezes) |
+| `{1..10000000}` | `32 B` (5ms 632μs) | `78.89 MB` (16s 388ms 569μs) |
+| `{1..1000000}` | `31 B` (1ms 381μs) | `6.89 MB` (1s 496ms 887μs) |
+| `{1..100000}` | `30 B` (950μs) | `588.89 kB` (146ms 921μs) |
+| `{1..10000}` | `29 B` (1ms 114μs) | `48.89 kB` (14ms 187μs) |
+| `{1..1000}` | `28 B` (760μs) | `3.89 kB` (1ms 453μs) |
+| `{1..100}` | `22 B` (345μs) | `291 B` (196μs) |
+| `{1..10}` | `10 B` (533μs) | `20 B` (37μs) |
+| `{1..3}` | `7 B` (190μs) | `5 B` (27μs) |
+
+### Faster algorithms
+
+When you need expansion, braces is still much faster.
+
+_(the following results were generated using `braces.expand()` and `minimatch.braceExpand()`, respectively)_
+
+| **Pattern** | **braces** | **[minimatch][]** |
+| --- | --- | --- |
+| `{1..10000000}` | `78.89 MB` (2s 698ms 642μs) | `78.89 MB` (18s 601ms 974μs) |
+| `{1..1000000}` | `6.89 MB` (458ms 576μs) | `6.89 MB` (1s 491ms 621μs) |
+| `{1..100000}` | `588.89 kB` (20ms 728μs) | `588.89 kB` (156ms 919μs) |
+| `{1..10000}` | `48.89 kB` (2ms 202μs) | `48.89 kB` (13ms 641μs) |
+| `{1..1000}` | `3.89 kB` (1ms 796μs) | `3.89 kB` (1ms 958μs) |
+| `{1..100}` | `291 B` (424μs) | `291 B` (211μs) |
+| `{1..10}` | `20 B` (487μs) | `20 B` (72μs) |
+| `{1..3}` | `5 B` (166μs) | `5 B` (27μs) |
+
+If you'd like to run these comparisons yourself, see [test/support/generate.js](test/support/generate.js).
+
+## Benchmarks
+
+### Running benchmarks
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm benchmark
+```
+
+### Latest results
+
+Braces is more accurate, without sacrificing performance.
+
+```bash
+# range (expanded)
+ braces x 29,040 ops/sec ±3.69% (91 runs sampled))
+ minimatch x 4,735 ops/sec ±1.28% (90 runs sampled)
+
+# range (optimized for regex)
+ braces x 382,878 ops/sec ±0.56% (94 runs sampled)
+ minimatch x 1,040 ops/sec ±0.44% (93 runs sampled)
+
+# nested ranges (expanded)
+ braces x 19,744 ops/sec ±2.27% (92 runs sampled))
+ minimatch x 4,579 ops/sec ±0.50% (93 runs sampled)
+
+# nested ranges (optimized for regex)
+ braces x 246,019 ops/sec ±2.02% (93 runs sampled)
+ minimatch x 1,028 ops/sec ±0.39% (94 runs sampled)
+
+# set (expanded)
+ braces x 138,641 ops/sec ±0.53% (95 runs sampled)
+ minimatch x 219,582 ops/sec ±0.98% (94 runs sampled)
+
+# set (optimized for regex)
+ braces x 388,408 ops/sec ±0.41% (95 runs sampled)
+ minimatch x 44,724 ops/sec ±0.91% (89 runs sampled)
+
+# nested sets (expanded)
+ braces x 84,966 ops/sec ±0.48% (94 runs sampled)
+ minimatch x 140,720 ops/sec ±0.37% (95 runs sampled)
+
+# nested sets (optimized for regex)
+ braces x 263,340 ops/sec ±2.06% (92 runs sampled)
+ minimatch x 28,714 ops/sec ±0.40% (90 runs sampled)
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 197 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 4 | [doowb](https://github.com/doowb) |
+| 1 | [es128](https://github.com/es128) |
+| 1 | [eush77](https://github.com/eush77) |
+| 1 | [hemanth](https://github.com/hemanth) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [GitHub Profile](https://github.com/jonschlinkert)
+* [Twitter Profile](https://twitter.com/jonschlinkert)
+* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
+
+### License
+
+Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 08, 2019._
\ No newline at end of file
diff --git a/node_modules/braces/index.js b/node_modules/braces/index.js
new file mode 100644
index 0000000..0eee0f5
--- /dev/null
+++ b/node_modules/braces/index.js
@@ -0,0 +1,170 @@
+'use strict';
+
+const stringify = require('./lib/stringify');
+const compile = require('./lib/compile');
+const expand = require('./lib/expand');
+const parse = require('./lib/parse');
+
+/**
+ * Expand the given pattern or create a regex-compatible string.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
+ * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+const braces = (input, options = {}) => {
+ let output = [];
+
+ if (Array.isArray(input)) {
+ for (let pattern of input) {
+ let result = braces.create(pattern, options);
+ if (Array.isArray(result)) {
+ output.push(...result);
+ } else {
+ output.push(result);
+ }
+ }
+ } else {
+ output = [].concat(braces.create(input, options));
+ }
+
+ if (options && options.expand === true && options.nodupes === true) {
+ output = [...new Set(output)];
+ }
+ return output;
+};
+
+/**
+ * Parse the given `str` with the given `options`.
+ *
+ * ```js
+ * // braces.parse(pattern, [, options]);
+ * const ast = braces.parse('a/{b,c}/d');
+ * console.log(ast);
+ * ```
+ * @param {String} pattern Brace pattern to parse
+ * @param {Object} options
+ * @return {Object} Returns an AST
+ * @api public
+ */
+
+braces.parse = (input, options = {}) => parse(input, options);
+
+/**
+ * Creates a braces string from an AST, or an AST node.
+ *
+ * ```js
+ * const braces = require('braces');
+ * let ast = braces.parse('foo/{a,b}/bar');
+ * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
+ * ```
+ * @param {String} `input` Brace pattern or AST.
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.stringify = (input, options = {}) => {
+ if (typeof input === 'string') {
+ return stringify(braces.parse(input, options), options);
+ }
+ return stringify(input, options);
+};
+
+/**
+ * Compiles a brace pattern into a regex-compatible, optimized string.
+ * This method is called by the main [braces](#braces) function by default.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces.compile('a/{b,c}/d'));
+ * //=> ['a/(b|c)/d']
+ * ```
+ * @param {String} `input` Brace pattern or AST.
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.compile = (input, options = {}) => {
+ if (typeof input === 'string') {
+ input = braces.parse(input, options);
+ }
+ return compile(input, options);
+};
+
+/**
+ * Expands a brace pattern into an array. This method is called by the
+ * main [braces](#braces) function when `options.expand` is true. Before
+ * using this method it's recommended that you read the [performance notes](#performance))
+ * and advantages of using [.compile](#compile) instead.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces.expand('a/{b,c}/d'));
+ * //=> ['a/b/d', 'a/c/d'];
+ * ```
+ * @param {String} `pattern` Brace pattern
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.expand = (input, options = {}) => {
+ if (typeof input === 'string') {
+ input = braces.parse(input, options);
+ }
+
+ let result = expand(input, options);
+
+ // filter out empty strings if specified
+ if (options.noempty === true) {
+ result = result.filter(Boolean);
+ }
+
+ // filter out duplicates if specified
+ if (options.nodupes === true) {
+ result = [...new Set(result)];
+ }
+
+ return result;
+};
+
+/**
+ * Processes a brace pattern and returns either an expanded array
+ * (if `options.expand` is true), a highly optimized regex-compatible string.
+ * This method is called by the main [braces](#braces) function.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
+ * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
+ * ```
+ * @param {String} `pattern` Brace pattern
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.create = (input, options = {}) => {
+ if (input === '' || input.length < 3) {
+ return [input];
+ }
+
+ return options.expand !== true
+ ? braces.compile(input, options)
+ : braces.expand(input, options);
+};
+
+/**
+ * Expose "braces"
+ */
+
+module.exports = braces;
diff --git a/node_modules/braces/lib/compile.js b/node_modules/braces/lib/compile.js
new file mode 100644
index 0000000..3e984a4
--- /dev/null
+++ b/node_modules/braces/lib/compile.js
@@ -0,0 +1,57 @@
+'use strict';
+
+const fill = require('fill-range');
+const utils = require('./utils');
+
+const compile = (ast, options = {}) => {
+ let walk = (node, parent = {}) => {
+ let invalidBlock = utils.isInvalidBrace(parent);
+ let invalidNode = node.invalid === true && options.escapeInvalid === true;
+ let invalid = invalidBlock === true || invalidNode === true;
+ let prefix = options.escapeInvalid === true ? '\\' : '';
+ let output = '';
+
+ if (node.isOpen === true) {
+ return prefix + node.value;
+ }
+ if (node.isClose === true) {
+ return prefix + node.value;
+ }
+
+ if (node.type === 'open') {
+ return invalid ? (prefix + node.value) : '(';
+ }
+
+ if (node.type === 'close') {
+ return invalid ? (prefix + node.value) : ')';
+ }
+
+ if (node.type === 'comma') {
+ return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
+ }
+
+ if (node.value) {
+ return node.value;
+ }
+
+ if (node.nodes && node.ranges > 0) {
+ let args = utils.reduce(node.nodes);
+ let range = fill(...args, { ...options, wrap: false, toRegex: true });
+
+ if (range.length !== 0) {
+ return args.length > 1 && range.length > 1 ? `(${range})` : range;
+ }
+ }
+
+ if (node.nodes) {
+ for (let child of node.nodes) {
+ output += walk(child, node);
+ }
+ }
+ return output;
+ };
+
+ return walk(ast);
+};
+
+module.exports = compile;
diff --git a/node_modules/braces/lib/constants.js b/node_modules/braces/lib/constants.js
new file mode 100644
index 0000000..a937943
--- /dev/null
+++ b/node_modules/braces/lib/constants.js
@@ -0,0 +1,57 @@
+'use strict';
+
+module.exports = {
+ MAX_LENGTH: 1024 * 64,
+
+ // Digits
+ CHAR_0: '0', /* 0 */
+ CHAR_9: '9', /* 9 */
+
+ // Alphabet chars.
+ CHAR_UPPERCASE_A: 'A', /* A */
+ CHAR_LOWERCASE_A: 'a', /* a */
+ CHAR_UPPERCASE_Z: 'Z', /* Z */
+ CHAR_LOWERCASE_Z: 'z', /* z */
+
+ CHAR_LEFT_PARENTHESES: '(', /* ( */
+ CHAR_RIGHT_PARENTHESES: ')', /* ) */
+
+ CHAR_ASTERISK: '*', /* * */
+
+ // Non-alphabetic chars.
+ CHAR_AMPERSAND: '&', /* & */
+ CHAR_AT: '@', /* @ */
+ CHAR_BACKSLASH: '\\', /* \ */
+ CHAR_BACKTICK: '`', /* ` */
+ CHAR_CARRIAGE_RETURN: '\r', /* \r */
+ CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
+ CHAR_COLON: ':', /* : */
+ CHAR_COMMA: ',', /* , */
+ CHAR_DOLLAR: '$', /* . */
+ CHAR_DOT: '.', /* . */
+ CHAR_DOUBLE_QUOTE: '"', /* " */
+ CHAR_EQUAL: '=', /* = */
+ CHAR_EXCLAMATION_MARK: '!', /* ! */
+ CHAR_FORM_FEED: '\f', /* \f */
+ CHAR_FORWARD_SLASH: '/', /* / */
+ CHAR_HASH: '#', /* # */
+ CHAR_HYPHEN_MINUS: '-', /* - */
+ CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
+ CHAR_LEFT_CURLY_BRACE: '{', /* { */
+ CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
+ CHAR_LINE_FEED: '\n', /* \n */
+ CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
+ CHAR_PERCENT: '%', /* % */
+ CHAR_PLUS: '+', /* + */
+ CHAR_QUESTION_MARK: '?', /* ? */
+ CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
+ CHAR_RIGHT_CURLY_BRACE: '}', /* } */
+ CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
+ CHAR_SEMICOLON: ';', /* ; */
+ CHAR_SINGLE_QUOTE: '\'', /* ' */
+ CHAR_SPACE: ' ', /* */
+ CHAR_TAB: '\t', /* \t */
+ CHAR_UNDERSCORE: '_', /* _ */
+ CHAR_VERTICAL_LINE: '|', /* | */
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
+};
diff --git a/node_modules/braces/lib/expand.js b/node_modules/braces/lib/expand.js
new file mode 100644
index 0000000..376c748
--- /dev/null
+++ b/node_modules/braces/lib/expand.js
@@ -0,0 +1,113 @@
+'use strict';
+
+const fill = require('fill-range');
+const stringify = require('./stringify');
+const utils = require('./utils');
+
+const append = (queue = '', stash = '', enclose = false) => {
+ let result = [];
+
+ queue = [].concat(queue);
+ stash = [].concat(stash);
+
+ if (!stash.length) return queue;
+ if (!queue.length) {
+ return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
+ }
+
+ for (let item of queue) {
+ if (Array.isArray(item)) {
+ for (let value of item) {
+ result.push(append(value, stash, enclose));
+ }
+ } else {
+ for (let ele of stash) {
+ if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
+ result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
+ }
+ }
+ }
+ return utils.flatten(result);
+};
+
+const expand = (ast, options = {}) => {
+ let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
+
+ let walk = (node, parent = {}) => {
+ node.queue = [];
+
+ let p = parent;
+ let q = parent.queue;
+
+ while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
+ p = p.parent;
+ q = p.queue;
+ }
+
+ if (node.invalid || node.dollar) {
+ q.push(append(q.pop(), stringify(node, options)));
+ return;
+ }
+
+ if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
+ q.push(append(q.pop(), ['{}']));
+ return;
+ }
+
+ if (node.nodes && node.ranges > 0) {
+ let args = utils.reduce(node.nodes);
+
+ if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
+ throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
+ }
+
+ let range = fill(...args, options);
+ if (range.length === 0) {
+ range = stringify(node, options);
+ }
+
+ q.push(append(q.pop(), range));
+ node.nodes = [];
+ return;
+ }
+
+ let enclose = utils.encloseBrace(node);
+ let queue = node.queue;
+ let block = node;
+
+ while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
+ block = block.parent;
+ queue = block.queue;
+ }
+
+ for (let i = 0; i < node.nodes.length; i++) {
+ let child = node.nodes[i];
+
+ if (child.type === 'comma' && node.type === 'brace') {
+ if (i === 1) queue.push('');
+ queue.push('');
+ continue;
+ }
+
+ if (child.type === 'close') {
+ q.push(append(q.pop(), queue, enclose));
+ continue;
+ }
+
+ if (child.value && child.type !== 'open') {
+ queue.push(append(queue.pop(), child.value));
+ continue;
+ }
+
+ if (child.nodes) {
+ walk(child, node);
+ }
+ }
+
+ return queue;
+ };
+
+ return utils.flatten(walk(ast));
+};
+
+module.exports = expand;
diff --git a/node_modules/braces/lib/parse.js b/node_modules/braces/lib/parse.js
new file mode 100644
index 0000000..145ea26
--- /dev/null
+++ b/node_modules/braces/lib/parse.js
@@ -0,0 +1,333 @@
+'use strict';
+
+const stringify = require('./stringify');
+
+/**
+ * Constants
+ */
+
+const {
+ MAX_LENGTH,
+ CHAR_BACKSLASH, /* \ */
+ CHAR_BACKTICK, /* ` */
+ CHAR_COMMA, /* , */
+ CHAR_DOT, /* . */
+ CHAR_LEFT_PARENTHESES, /* ( */
+ CHAR_RIGHT_PARENTHESES, /* ) */
+ CHAR_LEFT_CURLY_BRACE, /* { */
+ CHAR_RIGHT_CURLY_BRACE, /* } */
+ CHAR_LEFT_SQUARE_BRACKET, /* [ */
+ CHAR_RIGHT_SQUARE_BRACKET, /* ] */
+ CHAR_DOUBLE_QUOTE, /* " */
+ CHAR_SINGLE_QUOTE, /* ' */
+ CHAR_NO_BREAK_SPACE,
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE
+} = require('./constants');
+
+/**
+ * parse
+ */
+
+const parse = (input, options = {}) => {
+ if (typeof input !== 'string') {
+ throw new TypeError('Expected a string');
+ }
+
+ let opts = options || {};
+ let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+ if (input.length > max) {
+ throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
+ }
+
+ let ast = { type: 'root', input, nodes: [] };
+ let stack = [ast];
+ let block = ast;
+ let prev = ast;
+ let brackets = 0;
+ let length = input.length;
+ let index = 0;
+ let depth = 0;
+ let value;
+ let memo = {};
+
+ /**
+ * Helpers
+ */
+
+ const advance = () => input[index++];
+ const push = node => {
+ if (node.type === 'text' && prev.type === 'dot') {
+ prev.type = 'text';
+ }
+
+ if (prev && prev.type === 'text' && node.type === 'text') {
+ prev.value += node.value;
+ return;
+ }
+
+ block.nodes.push(node);
+ node.parent = block;
+ node.prev = prev;
+ prev = node;
+ return node;
+ };
+
+ push({ type: 'bos' });
+
+ while (index < length) {
+ block = stack[stack.length - 1];
+ value = advance();
+
+ /**
+ * Invalid chars
+ */
+
+ if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
+ continue;
+ }
+
+ /**
+ * Escaped chars
+ */
+
+ if (value === CHAR_BACKSLASH) {
+ push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
+ continue;
+ }
+
+ /**
+ * Right square bracket (literal): ']'
+ */
+
+ if (value === CHAR_RIGHT_SQUARE_BRACKET) {
+ push({ type: 'text', value: '\\' + value });
+ continue;
+ }
+
+ /**
+ * Left square bracket: '['
+ */
+
+ if (value === CHAR_LEFT_SQUARE_BRACKET) {
+ brackets++;
+
+ let closed = true;
+ let next;
+
+ while (index < length && (next = advance())) {
+ value += next;
+
+ if (next === CHAR_LEFT_SQUARE_BRACKET) {
+ brackets++;
+ continue;
+ }
+
+ if (next === CHAR_BACKSLASH) {
+ value += advance();
+ continue;
+ }
+
+ if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+ brackets--;
+
+ if (brackets === 0) {
+ break;
+ }
+ }
+ }
+
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Parentheses
+ */
+
+ if (value === CHAR_LEFT_PARENTHESES) {
+ block = push({ type: 'paren', nodes: [] });
+ stack.push(block);
+ push({ type: 'text', value });
+ continue;
+ }
+
+ if (value === CHAR_RIGHT_PARENTHESES) {
+ if (block.type !== 'paren') {
+ push({ type: 'text', value });
+ continue;
+ }
+ block = stack.pop();
+ push({ type: 'text', value });
+ block = stack[stack.length - 1];
+ continue;
+ }
+
+ /**
+ * Quotes: '|"|`
+ */
+
+ if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
+ let open = value;
+ let next;
+
+ if (options.keepQuotes !== true) {
+ value = '';
+ }
+
+ while (index < length && (next = advance())) {
+ if (next === CHAR_BACKSLASH) {
+ value += next + advance();
+ continue;
+ }
+
+ if (next === open) {
+ if (options.keepQuotes === true) value += next;
+ break;
+ }
+
+ value += next;
+ }
+
+ push({ type: 'text', value });
+ continue;
+ }
+
+ /**
+ * Left curly brace: '{'
+ */
+
+ if (value === CHAR_LEFT_CURLY_BRACE) {
+ depth++;
+
+ let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
+ let brace = {
+ type: 'brace',
+ open: true,
+ close: false,
+ dollar,
+ depth,
+ commas: 0,
+ ranges: 0,
+ nodes: []
+ };
+
+ block = push(brace);
+ stack.push(block);
+ push({ type: 'open', value });
+ continue;
+ }
+
+ /**
+ * Right curly brace: '}'
+ */
+
+ if (value === CHAR_RIGHT_CURLY_BRACE) {
+ if (block.type !== 'brace') {
+ push({ type: 'text', value });
+ continue;
+ }
+
+ let type = 'close';
+ block = stack.pop();
+ block.close = true;
+
+ push({ type, value });
+ depth--;
+
+ block = stack[stack.length - 1];
+ continue;
+ }
+
+ /**
+ * Comma: ','
+ */
+
+ if (value === CHAR_COMMA && depth > 0) {
+ if (block.ranges > 0) {
+ block.ranges = 0;
+ let open = block.nodes.shift();
+ block.nodes = [open, { type: 'text', value: stringify(block) }];
+ }
+
+ push({ type: 'comma', value });
+ block.commas++;
+ continue;
+ }
+
+ /**
+ * Dot: '.'
+ */
+
+ if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
+ let siblings = block.nodes;
+
+ if (depth === 0 || siblings.length === 0) {
+ push({ type: 'text', value });
+ continue;
+ }
+
+ if (prev.type === 'dot') {
+ block.range = [];
+ prev.value += value;
+ prev.type = 'range';
+
+ if (block.nodes.length !== 3 && block.nodes.length !== 5) {
+ block.invalid = true;
+ block.ranges = 0;
+ prev.type = 'text';
+ continue;
+ }
+
+ block.ranges++;
+ block.args = [];
+ continue;
+ }
+
+ if (prev.type === 'range') {
+ siblings.pop();
+
+ let before = siblings[siblings.length - 1];
+ before.value += prev.value + value;
+ prev = before;
+ block.ranges--;
+ continue;
+ }
+
+ push({ type: 'dot', value });
+ continue;
+ }
+
+ /**
+ * Text
+ */
+
+ push({ type: 'text', value });
+ }
+
+ // Mark imbalanced braces and brackets as invalid
+ do {
+ block = stack.pop();
+
+ if (block.type !== 'root') {
+ block.nodes.forEach(node => {
+ if (!node.nodes) {
+ if (node.type === 'open') node.isOpen = true;
+ if (node.type === 'close') node.isClose = true;
+ if (!node.nodes) node.type = 'text';
+ node.invalid = true;
+ }
+ });
+
+ // get the location of the block on parent.nodes (block's siblings)
+ let parent = stack[stack.length - 1];
+ let index = parent.nodes.indexOf(block);
+ // replace the (invalid) block with it's nodes
+ parent.nodes.splice(index, 1, ...block.nodes);
+ }
+ } while (stack.length > 0);
+
+ push({ type: 'eos' });
+ return ast;
+};
+
+module.exports = parse;
diff --git a/node_modules/braces/lib/stringify.js b/node_modules/braces/lib/stringify.js
new file mode 100644
index 0000000..414b7bc
--- /dev/null
+++ b/node_modules/braces/lib/stringify.js
@@ -0,0 +1,32 @@
+'use strict';
+
+const utils = require('./utils');
+
+module.exports = (ast, options = {}) => {
+ let stringify = (node, parent = {}) => {
+ let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
+ let invalidNode = node.invalid === true && options.escapeInvalid === true;
+ let output = '';
+
+ if (node.value) {
+ if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
+ return '\\' + node.value;
+ }
+ return node.value;
+ }
+
+ if (node.value) {
+ return node.value;
+ }
+
+ if (node.nodes) {
+ for (let child of node.nodes) {
+ output += stringify(child);
+ }
+ }
+ return output;
+ };
+
+ return stringify(ast);
+};
+
diff --git a/node_modules/braces/lib/utils.js b/node_modules/braces/lib/utils.js
new file mode 100644
index 0000000..e3551a6
--- /dev/null
+++ b/node_modules/braces/lib/utils.js
@@ -0,0 +1,112 @@
+'use strict';
+
+exports.isInteger = num => {
+ if (typeof num === 'number') {
+ return Number.isInteger(num);
+ }
+ if (typeof num === 'string' && num.trim() !== '') {
+ return Number.isInteger(Number(num));
+ }
+ return false;
+};
+
+/**
+ * Find a node of the given type
+ */
+
+exports.find = (node, type) => node.nodes.find(node => node.type === type);
+
+/**
+ * Find a node of the given type
+ */
+
+exports.exceedsLimit = (min, max, step = 1, limit) => {
+ if (limit === false) return false;
+ if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
+ return ((Number(max) - Number(min)) / Number(step)) >= limit;
+};
+
+/**
+ * Escape the given node with '\\' before node.value
+ */
+
+exports.escapeNode = (block, n = 0, type) => {
+ let node = block.nodes[n];
+ if (!node) return;
+
+ if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
+ if (node.escaped !== true) {
+ node.value = '\\' + node.value;
+ node.escaped = true;
+ }
+ }
+};
+
+/**
+ * Returns true if the given brace node should be enclosed in literal braces
+ */
+
+exports.encloseBrace = node => {
+ if (node.type !== 'brace') return false;
+ if ((node.commas >> 0 + node.ranges >> 0) === 0) {
+ node.invalid = true;
+ return true;
+ }
+ return false;
+};
+
+/**
+ * Returns true if a brace node is invalid.
+ */
+
+exports.isInvalidBrace = block => {
+ if (block.type !== 'brace') return false;
+ if (block.invalid === true || block.dollar) return true;
+ if ((block.commas >> 0 + block.ranges >> 0) === 0) {
+ block.invalid = true;
+ return true;
+ }
+ if (block.open !== true || block.close !== true) {
+ block.invalid = true;
+ return true;
+ }
+ return false;
+};
+
+/**
+ * Returns true if a node is an open or close node
+ */
+
+exports.isOpenOrClose = node => {
+ if (node.type === 'open' || node.type === 'close') {
+ return true;
+ }
+ return node.open === true || node.close === true;
+};
+
+/**
+ * Reduce an array of text nodes.
+ */
+
+exports.reduce = nodes => nodes.reduce((acc, node) => {
+ if (node.type === 'text') acc.push(node.value);
+ if (node.type === 'range') node.type = 'text';
+ return acc;
+}, []);
+
+/**
+ * Flatten an array
+ */
+
+exports.flatten = (...args) => {
+ const result = [];
+ const flat = arr => {
+ for (let i = 0; i < arr.length; i++) {
+ let ele = arr[i];
+ Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
+ }
+ return result;
+ };
+ flat(args);
+ return result;
+};
diff --git a/node_modules/braces/package.json b/node_modules/braces/package.json
new file mode 100644
index 0000000..3f52e34
--- /dev/null
+++ b/node_modules/braces/package.json
@@ -0,0 +1,77 @@
+{
+ "name": "braces",
+ "description": "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.",
+ "version": "3.0.2",
+ "homepage": "https://github.com/micromatch/braces",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Elan Shanker (https://github.com/es128)",
+ "Eugene Sharygin (https://github.com/eush77)",
+ "hemanth.hm (http://h3manth.com)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "micromatch/braces",
+ "bugs": {
+ "url": "https://github.com/micromatch/braces/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "mocha",
+ "benchmark": "node benchmark"
+ },
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "devDependencies": {
+ "ansi-colors": "^3.2.4",
+ "bash-path": "^2.0.1",
+ "gulp-format-md": "^2.0.0",
+ "mocha": "^6.1.1"
+ },
+ "keywords": [
+ "alpha",
+ "alphabetical",
+ "bash",
+ "brace",
+ "braces",
+ "expand",
+ "expansion",
+ "filepath",
+ "fill",
+ "fs",
+ "glob",
+ "globbing",
+ "letter",
+ "match",
+ "matches",
+ "matching",
+ "number",
+ "numerical",
+ "path",
+ "range",
+ "ranges",
+ "sh"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "plugins": [
+ "gulp-format-md"
+ ]
+ }
+}
diff --git a/node_modules/bytes/History.md b/node_modules/bytes/History.md
new file mode 100644
index 0000000..d60ce0e
--- /dev/null
+++ b/node_modules/bytes/History.md
@@ -0,0 +1,97 @@
+3.1.2 / 2022-01-27
+==================
+
+ * Fix return value for un-parsable strings
+
+3.1.1 / 2021-11-15
+==================
+
+ * Fix "thousandsSeparator" incorrecting formatting fractional part
+
+3.1.0 / 2019-01-22
+==================
+
+ * Add petabyte (`pb`) support
+
+3.0.0 / 2017-08-31
+==================
+
+ * Change "kB" to "KB" in format output
+ * Remove support for Node.js 0.6
+ * Remove support for ComponentJS
+
+2.5.0 / 2017-03-24
+==================
+
+ * Add option "unit"
+
+2.4.0 / 2016-06-01
+==================
+
+ * Add option "unitSeparator"
+
+2.3.0 / 2016-02-15
+==================
+
+ * Drop partial bytes on all parsed units
+ * Fix non-finite numbers to `.format` to return `null`
+ * Fix parsing byte string that looks like hex
+ * perf: hoist regular expressions
+
+2.2.0 / 2015-11-13
+==================
+
+ * add option "decimalPlaces"
+ * add option "fixedDecimals"
+
+2.1.0 / 2015-05-21
+==================
+
+ * add `.format` export
+ * add `.parse` export
+
+2.0.2 / 2015-05-20
+==================
+
+ * remove map recreation
+ * remove unnecessary object construction
+
+2.0.1 / 2015-05-07
+==================
+
+ * fix browserify require
+ * remove node.extend dependency
+
+2.0.0 / 2015-04-12
+==================
+
+ * add option "case"
+ * add option "thousandsSeparator"
+ * return "null" on invalid parse input
+ * support proper round-trip: bytes(bytes(num)) === num
+ * units no longer case sensitive when parsing
+
+1.0.0 / 2014-05-05
+==================
+
+ * add negative support. fixes #6
+
+0.3.0 / 2014-03-19
+==================
+
+ * added terabyte support
+
+0.2.1 / 2013-04-01
+==================
+
+ * add .component
+
+0.2.0 / 2012-10-28
+==================
+
+ * bytes(200).should.eql('200b')
+
+0.1.0 / 2012-07-04
+==================
+
+ * add bytes to string conversion [yields]
diff --git a/node_modules/bytes/LICENSE b/node_modules/bytes/LICENSE
new file mode 100644
index 0000000..63e95a9
--- /dev/null
+++ b/node_modules/bytes/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2012-2014 TJ Holowaychuk
+Copyright (c) 2015 Jed Watson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/bytes/Readme.md b/node_modules/bytes/Readme.md
new file mode 100644
index 0000000..5790e23
--- /dev/null
+++ b/node_modules/bytes/Readme.md
@@ -0,0 +1,152 @@
+# Bytes utility
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][ci-image]][ci-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```bash
+$ npm install bytes
+```
+
+## Usage
+
+```js
+var bytes = require('bytes');
+```
+
+#### bytes(number|string value, [options]): number|string|null
+
+Default export function. Delegates to either `bytes.format` or `bytes.parse` based on the type of `value`.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------|----------|--------------------|
+| value | `number`|`string` | Number value to format or string value to parse |
+| options | `Object` | Conversion options for `format` |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|------------------|-------------------------------------------------|
+| results | `string`|`number`|`null` | Return null upon error. Numeric value in bytes, or string value otherwise. |
+
+**Example**
+
+```js
+bytes(1024);
+// output: '1KB'
+
+bytes('1KB');
+// output: 1024
+```
+
+#### bytes.format(number value, [options]): string|null
+
+Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is
+ rounded.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------|----------|--------------------|
+| value | `number` | Value in bytes |
+| options | `Object` | Conversion options |
+
+**Options**
+
+| Property | Type | Description |
+|-------------------|--------|-----------------------------------------------------------------------------------------|
+| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. |
+| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` |
+| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `'.'`... Default value to `''`. |
+| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). |
+| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|------------------|-------------------------------------------------|
+| results | `string`|`null` | Return null upon error. String value otherwise. |
+
+**Example**
+
+```js
+bytes.format(1024);
+// output: '1KB'
+
+bytes.format(1000);
+// output: '1000B'
+
+bytes.format(1000, {thousandsSeparator: ' '});
+// output: '1 000B'
+
+bytes.format(1024 * 1.7, {decimalPlaces: 0});
+// output: '2KB'
+
+bytes.format(1024, {unitSeparator: ' '});
+// output: '1 KB'
+```
+
+#### bytes.parse(string|number value): number|null
+
+Parse the string value into an integer in bytes. If no unit is given, or `value`
+is a number, it is assumed the value is in bytes.
+
+Supported units and abbreviations are as follows and are case-insensitive:
+
+ * `b` for bytes
+ * `kb` for kilobytes
+ * `mb` for megabytes
+ * `gb` for gigabytes
+ * `tb` for terabytes
+ * `pb` for petabytes
+
+The units are in powers of two, not ten. This means 1kb = 1024b according to this parser.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------------|--------|--------------------|
+| value | `string`|`number` | String to parse, or number in bytes. |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|-------------|-------------------------|
+| results | `number`|`null` | Return null upon error. Value in bytes otherwise. |
+
+**Example**
+
+```js
+bytes.parse('1KB');
+// output: 1024
+
+bytes.parse('1024');
+// output: 1024
+
+bytes.parse(1024);
+// output: 1024
+```
+
+## License
+
+[MIT](LICENSE)
+
+[ci-image]: https://badgen.net/github/checks/visionmedia/bytes.js/master?label=ci
+[ci-url]: https://github.com/visionmedia/bytes.js/actions?query=workflow%3Aci
+[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master
+[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master
+[downloads-image]: https://badgen.net/npm/dm/bytes
+[downloads-url]: https://npmjs.org/package/bytes
+[npm-image]: https://badgen.net/npm/v/bytes
+[npm-url]: https://npmjs.org/package/bytes
diff --git a/node_modules/bytes/index.js b/node_modules/bytes/index.js
new file mode 100644
index 0000000..6f2d0f8
--- /dev/null
+++ b/node_modules/bytes/index.js
@@ -0,0 +1,170 @@
+/*!
+ * bytes
+ * Copyright(c) 2012-2014 TJ Holowaychuk
+ * Copyright(c) 2015 Jed Watson
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = bytes;
+module.exports.format = format;
+module.exports.parse = parse;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
+
+var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
+
+var map = {
+ b: 1,
+ kb: 1 << 10,
+ mb: 1 << 20,
+ gb: 1 << 30,
+ tb: Math.pow(1024, 4),
+ pb: Math.pow(1024, 5),
+};
+
+var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;
+
+/**
+ * Convert the given value in bytes into a string or parse to string to an integer in bytes.
+ *
+ * @param {string|number} value
+ * @param {{
+ * case: [string],
+ * decimalPlaces: [number]
+ * fixedDecimals: [boolean]
+ * thousandsSeparator: [string]
+ * unitSeparator: [string]
+ * }} [options] bytes options.
+ *
+ * @returns {string|number|null}
+ */
+
+function bytes(value, options) {
+ if (typeof value === 'string') {
+ return parse(value);
+ }
+
+ if (typeof value === 'number') {
+ return format(value, options);
+ }
+
+ return null;
+}
+
+/**
+ * Format the given value in bytes into a string.
+ *
+ * If the value is negative, it is kept as such. If it is a float,
+ * it is rounded.
+ *
+ * @param {number} value
+ * @param {object} [options]
+ * @param {number} [options.decimalPlaces=2]
+ * @param {number} [options.fixedDecimals=false]
+ * @param {string} [options.thousandsSeparator=]
+ * @param {string} [options.unit=]
+ * @param {string} [options.unitSeparator=]
+ *
+ * @returns {string|null}
+ * @public
+ */
+
+function format(value, options) {
+ if (!Number.isFinite(value)) {
+ return null;
+ }
+
+ var mag = Math.abs(value);
+ var thousandsSeparator = (options && options.thousandsSeparator) || '';
+ var unitSeparator = (options && options.unitSeparator) || '';
+ var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
+ var fixedDecimals = Boolean(options && options.fixedDecimals);
+ var unit = (options && options.unit) || '';
+
+ if (!unit || !map[unit.toLowerCase()]) {
+ if (mag >= map.pb) {
+ unit = 'PB';
+ } else if (mag >= map.tb) {
+ unit = 'TB';
+ } else if (mag >= map.gb) {
+ unit = 'GB';
+ } else if (mag >= map.mb) {
+ unit = 'MB';
+ } else if (mag >= map.kb) {
+ unit = 'KB';
+ } else {
+ unit = 'B';
+ }
+ }
+
+ var val = value / map[unit.toLowerCase()];
+ var str = val.toFixed(decimalPlaces);
+
+ if (!fixedDecimals) {
+ str = str.replace(formatDecimalsRegExp, '$1');
+ }
+
+ if (thousandsSeparator) {
+ str = str.split('.').map(function (s, i) {
+ return i === 0
+ ? s.replace(formatThousandsRegExp, thousandsSeparator)
+ : s
+ }).join('.');
+ }
+
+ return str + unitSeparator + unit;
+}
+
+/**
+ * Parse the string value into an integer in bytes.
+ *
+ * If no unit is given, it is assumed the value is in bytes.
+ *
+ * @param {number|string} val
+ *
+ * @returns {number|null}
+ * @public
+ */
+
+function parse(val) {
+ if (typeof val === 'number' && !isNaN(val)) {
+ return val;
+ }
+
+ if (typeof val !== 'string') {
+ return null;
+ }
+
+ // Test if the string passed is valid
+ var results = parseRegExp.exec(val);
+ var floatValue;
+ var unit = 'b';
+
+ if (!results) {
+ // Nothing could be extracted from the given string
+ floatValue = parseInt(val, 10);
+ unit = 'b'
+ } else {
+ // Retrieve the value and the unit
+ floatValue = parseFloat(results[1]);
+ unit = results[4].toLowerCase();
+ }
+
+ if (isNaN(floatValue)) {
+ return null;
+ }
+
+ return Math.floor(map[unit] * floatValue);
+}
diff --git a/node_modules/bytes/package.json b/node_modules/bytes/package.json
new file mode 100644
index 0000000..f2b6a8b
--- /dev/null
+++ b/node_modules/bytes/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "bytes",
+ "description": "Utility to parse a string bytes to bytes and vice-versa",
+ "version": "3.1.2",
+ "author": "TJ Holowaychuk (http://tjholowaychuk.com)",
+ "contributors": [
+ "Jed Watson ",
+ "Théo FIDRY "
+ ],
+ "license": "MIT",
+ "keywords": [
+ "byte",
+ "bytes",
+ "utility",
+ "parse",
+ "parser",
+ "convert",
+ "converter"
+ ],
+ "repository": "visionmedia/bytes.js",
+ "devDependencies": {
+ "eslint": "7.32.0",
+ "eslint-plugin-markdown": "2.2.1",
+ "mocha": "9.2.0",
+ "nyc": "15.1.0"
+ },
+ "files": [
+ "History.md",
+ "LICENSE",
+ "Readme.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --check-leaks --reporter spec",
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test"
+ }
+}
diff --git a/node_modules/call-bind/.eslintignore b/node_modules/call-bind/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/call-bind/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/call-bind/.eslintrc b/node_modules/call-bind/.eslintrc
new file mode 100644
index 0000000..e5d3c9a
--- /dev/null
+++ b/node_modules/call-bind/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "func-name-matching": 0,
+ "id-length": 0,
+ "new-cap": [2, {
+ "capIsNewExceptions": [
+ "GetIntrinsic",
+ ],
+ }],
+ "no-magic-numbers": 0,
+ "operator-linebreak": [2, "before"],
+ },
+}
diff --git a/node_modules/call-bind/.github/FUNDING.yml b/node_modules/call-bind/.github/FUNDING.yml
new file mode 100644
index 0000000..c70c2ec
--- /dev/null
+++ b/node_modules/call-bind/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/call-bind
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/call-bind/.nycrc b/node_modules/call-bind/.nycrc
new file mode 100644
index 0000000..1826526
--- /dev/null
+++ b/node_modules/call-bind/.nycrc
@@ -0,0 +1,13 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/call-bind/CHANGELOG.md b/node_modules/call-bind/CHANGELOG.md
new file mode 100644
index 0000000..62a3727
--- /dev/null
+++ b/node_modules/call-bind/CHANGELOG.md
@@ -0,0 +1,42 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.0.2](https://github.com/ljharb/call-bind/compare/v1.0.1...v1.0.2) - 2021-01-11
+
+### Commits
+
+- [Fix] properly include the receiver in the bound length [`dbae7bc`](https://github.com/ljharb/call-bind/commit/dbae7bc676c079a0d33c0a43e9ef92cb7b01345d)
+
+## [v1.0.1](https://github.com/ljharb/call-bind/compare/v1.0.0...v1.0.1) - 2021-01-08
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`b6db284`](https://github.com/ljharb/call-bind/commit/b6db284c36f8ccd195b88a6764fe84b7223a0da1)
+- [meta] do not publish github action workflow files [`ec7fe46`](https://github.com/ljharb/call-bind/commit/ec7fe46e60cfa4764ee943d2755f5e5a366e578e)
+- [Fix] preserve original function’s length when possible [`adbceaa`](https://github.com/ljharb/call-bind/commit/adbceaa3cac4b41ea78bb19d7ccdbaaf7e0bdadb)
+- [Tests] gather coverage data on every job [`d69e23c`](https://github.com/ljharb/call-bind/commit/d69e23cc65f101ba1d4c19bb07fa8eb0ec624be8)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`2fd3586`](https://github.com/ljharb/call-bind/commit/2fd3586c5d47b335364c14293114c6b625ae1f71)
+- [Deps] update `get-intrinsic` [`f23e931`](https://github.com/ljharb/call-bind/commit/f23e9318cc271c2add8bb38cfded85ee7baf8eee)
+- [Deps] update `get-intrinsic` [`72d9f44`](https://github.com/ljharb/call-bind/commit/72d9f44e184465ba8dd3fb48260bbcff234985f2)
+- [meta] fix FUNDING.yml [`e723573`](https://github.com/ljharb/call-bind/commit/e723573438c5a68dcec31fb5d96ea6b7e4a93be8)
+- [eslint] ignore coverage output [`15e76d2`](https://github.com/ljharb/call-bind/commit/15e76d28a5f43e504696401e5b31ebb78ee1b532)
+- [meta] add Automatic Rebase and Require Allow Edits workflows [`8fa4dab`](https://github.com/ljharb/call-bind/commit/8fa4dabb23ba3dd7bb92c9571c1241c08b56e4b6)
+
+## v1.0.0 - 2020-10-30
+
+### Commits
+
+- Initial commit [`306cf98`](https://github.com/ljharb/call-bind/commit/306cf98c7ec9e7ef66b653ec152277ac1381eb50)
+- Tests [`e10d0bb`](https://github.com/ljharb/call-bind/commit/e10d0bbdadc7a10ecedc9a1c035112d3e368b8df)
+- Implementation [`43852ed`](https://github.com/ljharb/call-bind/commit/43852eda0f187327b7fad2423ca972149a52bd65)
+- npm init [`408f860`](https://github.com/ljharb/call-bind/commit/408f860b773a2f610805fd3613d0d71bac1b6249)
+- [meta] add Automatic Rebase and Require Allow Edits workflows [`fb349b2`](https://github.com/ljharb/call-bind/commit/fb349b2e48defbec8b5ec8a8395cc8f69f220b13)
+- [meta] add `auto-changelog` [`c4001fc`](https://github.com/ljharb/call-bind/commit/c4001fc43031799ef908211c98d3b0fb2b60fde4)
+- [meta] add "funding"; create `FUNDING.yml` [`d4d6d29`](https://github.com/ljharb/call-bind/commit/d4d6d2974a14bc2e98830468eda7fe6d6a776717)
+- [Tests] add `npm run lint` [`dedfb98`](https://github.com/ljharb/call-bind/commit/dedfb98bd0ecefb08ddb9a94061bd10cde4332af)
+- Only apps should have lockfiles [`54ac776`](https://github.com/ljharb/call-bind/commit/54ac77653db45a7361dc153d2f478e743f110650)
+- [meta] add `safe-publish-latest` [`9ea8e43`](https://github.com/ljharb/call-bind/commit/9ea8e435b950ce9b705559cd651039f9bf40140f)
diff --git a/node_modules/call-bind/LICENSE b/node_modules/call-bind/LICENSE
new file mode 100644
index 0000000..48f05d0
--- /dev/null
+++ b/node_modules/call-bind/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Jordan Harband
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/call-bind/README.md b/node_modules/call-bind/README.md
new file mode 100644
index 0000000..53649eb
--- /dev/null
+++ b/node_modules/call-bind/README.md
@@ -0,0 +1,2 @@
+# call-bind
+Robustly `.call.bind()` a function.
diff --git a/node_modules/call-bind/callBound.js b/node_modules/call-bind/callBound.js
new file mode 100644
index 0000000..8374adf
--- /dev/null
+++ b/node_modules/call-bind/callBound.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var callBind = require('./');
+
+var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
+
+module.exports = function callBoundIntrinsic(name, allowMissing) {
+ var intrinsic = GetIntrinsic(name, !!allowMissing);
+ if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
+ return callBind(intrinsic);
+ }
+ return intrinsic;
+};
diff --git a/node_modules/call-bind/index.js b/node_modules/call-bind/index.js
new file mode 100644
index 0000000..6fa3e4a
--- /dev/null
+++ b/node_modules/call-bind/index.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var bind = require('function-bind');
+var GetIntrinsic = require('get-intrinsic');
+
+var $apply = GetIntrinsic('%Function.prototype.apply%');
+var $call = GetIntrinsic('%Function.prototype.call%');
+var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
+
+var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+var $max = GetIntrinsic('%Math.max%');
+
+if ($defineProperty) {
+ try {
+ $defineProperty({}, 'a', { value: 1 });
+ } catch (e) {
+ // IE 8 has a broken defineProperty
+ $defineProperty = null;
+ }
+}
+
+module.exports = function callBind(originalFunction) {
+ var func = $reflectApply(bind, $call, arguments);
+ if ($gOPD && $defineProperty) {
+ var desc = $gOPD(func, 'length');
+ if (desc.configurable) {
+ // original length, plus the receiver, minus any additional arguments (after the receiver)
+ $defineProperty(
+ func,
+ 'length',
+ { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }
+ );
+ }
+ }
+ return func;
+};
+
+var applyBind = function applyBind() {
+ return $reflectApply(bind, $apply, arguments);
+};
+
+if ($defineProperty) {
+ $defineProperty(module.exports, 'apply', { value: applyBind });
+} else {
+ module.exports.apply = applyBind;
+}
diff --git a/node_modules/call-bind/package.json b/node_modules/call-bind/package.json
new file mode 100644
index 0000000..4360556
--- /dev/null
+++ b/node_modules/call-bind/package.json
@@ -0,0 +1,80 @@
+{
+ "name": "call-bind",
+ "version": "1.0.2",
+ "description": "Robustly `.call.bind()` a function",
+ "main": "index.js",
+ "exports": {
+ ".": [
+ {
+ "default": "./index.js"
+ },
+ "./index.js"
+ ],
+ "./callBound": [
+ {
+ "default": "./callBound.js"
+ },
+ "./callBound.js"
+ ],
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "prepublish": "safe-publish-latest",
+ "lint": "eslint --ext=.js,.mjs .",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/*'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ljharb/call-bind.git"
+ },
+ "keywords": [
+ "javascript",
+ "ecmascript",
+ "es",
+ "js",
+ "callbind",
+ "callbound",
+ "call",
+ "bind",
+ "bound",
+ "call-bind",
+ "call-bound",
+ "function",
+ "es-abstract"
+ ],
+ "author": "Jordan Harband ",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/ljharb/call-bind/issues"
+ },
+ "homepage": "https://github.com/ljharb/call-bind#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.3.0",
+ "aud": "^1.1.3",
+ "auto-changelog": "^2.2.1",
+ "eslint": "^7.17.0",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.1.1"
+ },
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/call-bind/test/callBound.js b/node_modules/call-bind/test/callBound.js
new file mode 100644
index 0000000..209ce3c
--- /dev/null
+++ b/node_modules/call-bind/test/callBound.js
@@ -0,0 +1,55 @@
+'use strict';
+
+var test = require('tape');
+
+var callBound = require('../callBound');
+
+test('callBound', function (t) {
+ // static primitive
+ t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself');
+ t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself');
+
+ // static non-function object
+ t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself');
+ t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself');
+ t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself');
+ t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself');
+
+ // static function
+ t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself');
+ t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself');
+
+ // prototype primitive
+ t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself');
+ t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself');
+
+ // prototype function
+ t.notEqual(callBound('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString does not yield itself');
+ t.notEqual(callBound('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% does not yield itself');
+ t.equal(callBound('Object.prototype.toString')(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original');
+ t.equal(callBound('%Object.prototype.toString%')(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original');
+
+ t['throws'](
+ function () { callBound('does not exist'); },
+ SyntaxError,
+ 'nonexistent intrinsic throws'
+ );
+ t['throws'](
+ function () { callBound('does not exist', true); },
+ SyntaxError,
+ 'allowMissing arg still throws for unknown intrinsic'
+ );
+
+ /* globals WeakRef: false */
+ t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) {
+ st['throws'](
+ function () { callBound('WeakRef'); },
+ TypeError,
+ 'real but absent intrinsic throws'
+ );
+ st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception');
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/call-bind/test/index.js b/node_modules/call-bind/test/index.js
new file mode 100644
index 0000000..bf6769c
--- /dev/null
+++ b/node_modules/call-bind/test/index.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var callBind = require('../');
+var bind = require('function-bind');
+
+var test = require('tape');
+
+/*
+ * older engines have length nonconfigurable
+ * in io.js v3, it is configurable except on bound functions, hence the .bind()
+ */
+var functionsHaveConfigurableLengths = !!(
+ Object.getOwnPropertyDescriptor
+ && Object.getOwnPropertyDescriptor(bind.call(function () {}), 'length').configurable
+);
+
+test('callBind', function (t) {
+ var sentinel = { sentinel: true };
+ var func = function (a, b) {
+ // eslint-disable-next-line no-invalid-this
+ return [this, a, b];
+ };
+ t.equal(func.length, 2, 'original function length is 2');
+ t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args');
+ t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args');
+ t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args');
+
+ var bound = callBind(func);
+ t.equal(bound.length, func.length + 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });
+ t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with too few args');
+ t.deepEqual(bound(1, 2), [1, 2, undefined], 'bound func with right args');
+ t.deepEqual(bound(1, 2, 3), [1, 2, 3], 'bound func with too many args');
+
+ var boundR = callBind(func, sentinel);
+ t.equal(boundR.length, func.length, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });
+ t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args');
+ t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args');
+ t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args');
+
+ var boundArg = callBind(func, sentinel, 1);
+ t.equal(boundArg.length, func.length - 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });
+ t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args');
+ t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg');
+ t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args');
+
+ t.test('callBind.apply', function (st) {
+ var aBound = callBind.apply(func);
+ st.deepEqual(aBound(sentinel), [sentinel, undefined, undefined], 'apply-bound func with no args');
+ st.deepEqual(aBound(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args');
+ st.deepEqual(aBound(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args');
+
+ var aBoundArg = callBind.apply(func);
+ st.deepEqual(aBoundArg(sentinel, [1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with too many args');
+ st.deepEqual(aBoundArg(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args');
+ st.deepEqual(aBoundArg(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args');
+
+ var aBoundR = callBind.apply(func, sentinel);
+ st.deepEqual(aBoundR([1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with receiver and too many args');
+ st.deepEqual(aBoundR([1, 2], 4), [sentinel, 1, 2], 'apply-bound func with receiver and right args');
+ st.deepEqual(aBoundR([1], 4), [sentinel, 1, undefined], 'apply-bound func with receiver and too few args');
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/chokidar/LICENSE b/node_modules/chokidar/LICENSE
new file mode 100644
index 0000000..fa9162b
--- /dev/null
+++ b/node_modules/chokidar/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the “Software”), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/chokidar/README.md b/node_modules/chokidar/README.md
new file mode 100644
index 0000000..d6a57fd
--- /dev/null
+++ b/node_modules/chokidar/README.md
@@ -0,0 +1,308 @@
+# Chokidar [](https://github.com/paulmillr/chokidar) [](https://github.com/paulmillr/chokidar)
+
+> Minimal and efficient cross-platform file watching library
+
+[](https://www.npmjs.com/package/chokidar)
+
+## Why?
+
+Node.js `fs.watch`:
+
+* Doesn't report filenames on MacOS.
+* Doesn't report events at all when using editors like Sublime on MacOS.
+* Often reports events twice.
+* Emits most changes as `rename`.
+* Does not provide an easy way to recursively watch file trees.
+* Does not support recursive watching on Linux.
+
+Node.js `fs.watchFile`:
+
+* Almost as bad at event handling.
+* Also does not provide any recursive watching.
+* Results in high CPU utilization.
+
+Chokidar resolves these problems.
+
+Initially made for **[Brunch](https://brunch.io/)** (an ultra-swift web app build tool), it is now used in
+[Microsoft's Visual Studio Code](https://github.com/microsoft/vscode),
+[gulp](https://github.com/gulpjs/gulp/),
+[karma](https://karma-runner.github.io/),
+[PM2](https://github.com/Unitech/PM2),
+[browserify](http://browserify.org/),
+[webpack](https://webpack.github.io/),
+[BrowserSync](https://www.browsersync.io/),
+and [many others](https://www.npmjs.com/browse/depended/chokidar).
+It has proven itself in production environments.
+
+Version 3 is out! Check out our blog post about it: [Chokidar 3: How to save 32TB of traffic every week](https://paulmillr.com/posts/chokidar-3-save-32tb-of-traffic/)
+
+## How?
+
+Chokidar does still rely on the Node.js core `fs` module, but when using
+`fs.watch` and `fs.watchFile` for watching, it normalizes the events it
+receives, often checking for truth by getting file stats and/or dir contents.
+
+On MacOS, chokidar by default uses a native extension exposing the Darwin
+`FSEvents` API. This provides very efficient recursive watching compared with
+implementations like `kqueue` available on most \*nix platforms. Chokidar still
+does have to do some work to normalize the events received that way as well.
+
+On most other platforms, the `fs.watch`-based implementation is the default, which
+avoids polling and keeps CPU usage down. Be advised that chokidar will initiate
+watchers recursively for everything within scope of the paths that have been
+specified, so be judicious about not wasting system resources by watching much
+more than needed.
+
+## Getting started
+
+Install with npm:
+
+```sh
+npm install chokidar
+```
+
+Then `require` and use it in your code:
+
+```javascript
+const chokidar = require('chokidar');
+
+// One-liner for current directory
+chokidar.watch('.').on('all', (event, path) => {
+ console.log(event, path);
+});
+```
+
+## API
+
+```javascript
+// Example of a more typical implementation structure
+
+// Initialize watcher.
+const watcher = chokidar.watch('file, dir, glob, or array', {
+ ignored: /(^|[\/\\])\../, // ignore dotfiles
+ persistent: true
+});
+
+// Something to use when events are received.
+const log = console.log.bind(console);
+// Add event listeners.
+watcher
+ .on('add', path => log(`File ${path} has been added`))
+ .on('change', path => log(`File ${path} has been changed`))
+ .on('unlink', path => log(`File ${path} has been removed`));
+
+// More possible events.
+watcher
+ .on('addDir', path => log(`Directory ${path} has been added`))
+ .on('unlinkDir', path => log(`Directory ${path} has been removed`))
+ .on('error', error => log(`Watcher error: ${error}`))
+ .on('ready', () => log('Initial scan complete. Ready for changes'))
+ .on('raw', (event, path, details) => { // internal
+ log('Raw event info:', event, path, details);
+ });
+
+// 'add', 'addDir' and 'change' events also receive stat() results as second
+// argument when available: https://nodejs.org/api/fs.html#fs_class_fs_stats
+watcher.on('change', (path, stats) => {
+ if (stats) console.log(`File ${path} changed size to ${stats.size}`);
+});
+
+// Watch new files.
+watcher.add('new-file');
+watcher.add(['new-file-2', 'new-file-3', '**/other-file*']);
+
+// Get list of actual paths being watched on the filesystem
+var watchedPaths = watcher.getWatched();
+
+// Un-watch some files.
+await watcher.unwatch('new-file*');
+
+// Stop watching.
+// The method is async!
+watcher.close().then(() => console.log('closed'));
+
+// Full list of options. See below for descriptions.
+// Do not use this example!
+chokidar.watch('file', {
+ persistent: true,
+
+ ignored: '*.txt',
+ ignoreInitial: false,
+ followSymlinks: true,
+ cwd: '.',
+ disableGlobbing: false,
+
+ usePolling: false,
+ interval: 100,
+ binaryInterval: 300,
+ alwaysStat: false,
+ depth: 99,
+ awaitWriteFinish: {
+ stabilityThreshold: 2000,
+ pollInterval: 100
+ },
+
+ ignorePermissionErrors: false,
+ atomic: true // or a custom 'atomicity delay', in milliseconds (default 100)
+});
+
+```
+
+`chokidar.watch(paths, [options])`
+
+* `paths` (string or array of strings). Paths to files, dirs to be watched
+recursively, or glob patterns.
+ - Note: globs must not contain windows separators (`\`),
+ because that's how they work by the standard —
+ you'll need to replace them with forward slashes (`/`).
+ - Note 2: for additional glob documentation, check out low-level
+ library: [picomatch](https://github.com/micromatch/picomatch).
+* `options` (object) Options object as defined below:
+
+#### Persistence
+
+* `persistent` (default: `true`). Indicates whether the process
+should continue to run as long as files are being watched. If set to
+`false` when using `fsevents` to watch, no more events will be emitted
+after `ready`, even if the process continues to run.
+
+#### Path filtering
+
+* `ignored` ([anymatch](https://github.com/es128/anymatch)-compatible definition)
+Defines files/paths to be ignored. The whole relative or absolute path is
+tested, not just filename. If a function with two arguments is provided, it
+gets called twice per path - once with a single argument (the path), second
+time with two arguments (the path and the
+[`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats)
+object of that path).
+* `ignoreInitial` (default: `false`). If set to `false` then `add`/`addDir` events are also emitted for matching paths while
+instantiating the watching as chokidar discovers these file paths (before the `ready` event).
+* `followSymlinks` (default: `true`). When `false`, only the
+symlinks themselves will be watched for changes instead of following
+the link references and bubbling events through the link's path.
+* `cwd` (no default). The base directory from which watch `paths` are to be
+derived. Paths emitted with events will be relative to this.
+* `disableGlobbing` (default: `false`). If set to `true` then the strings passed to `.watch()` and `.add()` are treated as
+literal path names, even if they look like globs.
+
+#### Performance
+
+* `usePolling` (default: `false`).
+Whether to use fs.watchFile (backed by polling), or fs.watch. If polling
+leads to high CPU utilization, consider setting this to `false`. It is
+typically necessary to **set this to `true` to successfully watch files over
+a network**, and it may be necessary to successfully watch files in other
+non-standard situations. Setting to `true` explicitly on MacOS overrides the
+`useFsEvents` default. You may also set the CHOKIDAR_USEPOLLING env variable
+to true (1) or false (0) in order to override this option.
+* _Polling-specific settings_ (effective when `usePolling: true`)
+ * `interval` (default: `100`). Interval of file system polling, in milliseconds. You may also
+ set the CHOKIDAR_INTERVAL env variable to override this option.
+ * `binaryInterval` (default: `300`). Interval of file system
+ polling for binary files.
+ ([see list of binary extensions](https://github.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))
+* `useFsEvents` (default: `true` on MacOS). Whether to use the
+`fsevents` watching interface if available. When set to `true` explicitly
+and `fsevents` is available this supercedes the `usePolling` setting. When
+set to `false` on MacOS, `usePolling: true` becomes the default.
+* `alwaysStat` (default: `false`). If relying upon the
+[`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats)
+object that may get passed with `add`, `addDir`, and `change` events, set
+this to `true` to ensure it is provided even in cases where it wasn't
+already available from the underlying watch events.
+* `depth` (default: `undefined`). If set, limits how many levels of
+subdirectories will be traversed.
+* `awaitWriteFinish` (default: `false`).
+By default, the `add` event will fire when a file first appears on disk, before
+the entire file has been written. Furthermore, in some cases some `change`
+events will be emitted while the file is being written. In some cases,
+especially when watching for large files there will be a need to wait for the
+write operation to finish before responding to a file creation or modification.
+Setting `awaitWriteFinish` to `true` (or a truthy value) will poll file size,
+holding its `add` and `change` events until the size does not change for a
+configurable amount of time. The appropriate duration setting is heavily
+dependent on the OS and hardware. For accurate detection this parameter should
+be relatively high, making file watching much less responsive.
+Use with caution.
+ * *`options.awaitWriteFinish` can be set to an object in order to adjust
+ timing params:*
+ * `awaitWriteFinish.stabilityThreshold` (default: 2000). Amount of time in
+ milliseconds for a file size to remain constant before emitting its event.
+ * `awaitWriteFinish.pollInterval` (default: 100). File size polling interval, in milliseconds.
+
+#### Errors
+
+* `ignorePermissionErrors` (default: `false`). Indicates whether to watch files
+that don't have read permissions if possible. If watching fails due to `EPERM`
+or `EACCES` with this set to `true`, the errors will be suppressed silently.
+* `atomic` (default: `true` if `useFsEvents` and `usePolling` are `false`).
+Automatically filters out artifacts that occur when using editors that use
+"atomic writes" instead of writing directly to the source file. If a file is
+re-added within 100 ms of being deleted, Chokidar emits a `change` event
+rather than `unlink` then `add`. If the default of 100 ms does not work well
+for you, you can override it by setting `atomic` to a custom value, in
+milliseconds.
+
+### Methods & Events
+
+`chokidar.watch()` produces an instance of `FSWatcher`. Methods of `FSWatcher`:
+
+* `.add(path / paths)`: Add files, directories, or glob patterns for tracking.
+Takes an array of strings or just one string.
+* `.on(event, callback)`: Listen for an FS event.
+Available events: `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `ready`,
+`raw`, `error`.
+Additionally `all` is available which gets emitted with the underlying event
+name and path for every event other than `ready`, `raw`, and `error`. `raw` is internal, use it carefully.
+* `.unwatch(path / paths)`: Stop watching files, directories, or glob patterns.
+Takes an array of strings or just one string.
+* `.close()`: **async** Removes all listeners from watched files. Asynchronous, returns Promise. Use with `await` to ensure bugs don't happen.
+* `.getWatched()`: Returns an object representing all the paths on the file
+system being watched by this `FSWatcher` instance. The object's keys are all the
+directories (using absolute paths unless the `cwd` option was used), and the
+values are arrays of the names of the items contained in each directory.
+
+## CLI
+
+If you need a CLI interface for your file watching, check out
+[chokidar-cli](https://github.com/open-cli-tools/chokidar-cli), allowing you to
+execute a command on each change, or get a stdio stream of change events.
+
+## Install Troubleshooting
+
+* `npm WARN optional dep failed, continuing fsevents@n.n.n`
+ * This message is normal part of how `npm` handles optional dependencies and is
+ not indicative of a problem. Even if accompanied by other related error messages,
+ Chokidar should function properly.
+
+* `TypeError: fsevents is not a constructor`
+ * Update chokidar by doing `rm -rf node_modules package-lock.json yarn.lock && npm install`, or update your dependency that uses chokidar.
+
+* Chokidar is producing `ENOSP` error on Linux, like this:
+ * `bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell`
+ `Error: watch /home/ ENOSPC`
+ * This means Chokidar ran out of file handles and you'll need to increase their count by executing the following command in Terminal:
+ `echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p`
+
+## Changelog
+
+For more detailed changelog, see [`full_changelog.md`](.github/full_changelog.md).
+- **v3.5 (Jan 6, 2021):** Support for ARM Macs with Apple Silicon. Fixes for deleted symlinks.
+- **v3.4 (Apr 26, 2020):** Support for directory-based symlinks. Fixes for macos file replacement.
+- **v3.3 (Nov 2, 2019):** `FSWatcher#close()` method became async. That fixes IO race conditions related to close method.
+- **v3.2 (Oct 1, 2019):** Improve Linux RAM usage by 50%. Race condition fixes. Windows glob fixes. Improve stability by using tight range of dependency versions.
+- **v3.1 (Sep 16, 2019):** dotfiles are no longer filtered out by default. Use `ignored` option if needed. Improve initial Linux scan time by 50%.
+- **v3 (Apr 30, 2019):** massive CPU & RAM consumption improvements; reduces deps / package size by a factor of 17x and bumps Node.js requirement to v8.16 and higher.
+- **v2 (Dec 29, 2017):** Globs are now posix-style-only; without windows support. Tons of bugfixes.
+- **v1 (Apr 7, 2015):** Glob support, symlink support, tons of bugfixes. Node 0.8+ is supported
+- **v0.1 (Apr 20, 2012):** Initial release, extracted from [Brunch](https://github.com/brunch/brunch/blob/9847a065aea300da99bd0753f90354cde9de1261/src/helpers.coffee#L66)
+
+## Also
+
+Why was chokidar named this way? What's the meaning behind it?
+
+>Chowkidar is a transliteration of a Hindi word meaning 'watchman, gatekeeper', चौकीदार. This ultimately comes from Sanskrit _ चतुष्क_ (crossway, quadrangle, consisting-of-four).
+
+## License
+
+MIT (c) Paul Miller (), see [LICENSE](LICENSE) file.
diff --git a/node_modules/chokidar/index.js b/node_modules/chokidar/index.js
new file mode 100644
index 0000000..ed4b6d5
--- /dev/null
+++ b/node_modules/chokidar/index.js
@@ -0,0 +1,973 @@
+'use strict';
+
+const { EventEmitter } = require('events');
+const fs = require('fs');
+const sysPath = require('path');
+const { promisify } = require('util');
+const readdirp = require('readdirp');
+const anymatch = require('anymatch').default;
+const globParent = require('glob-parent');
+const isGlob = require('is-glob');
+const braces = require('braces');
+const normalizePath = require('normalize-path');
+
+const NodeFsHandler = require('./lib/nodefs-handler');
+const FsEventsHandler = require('./lib/fsevents-handler');
+const {
+ EV_ALL,
+ EV_READY,
+ EV_ADD,
+ EV_CHANGE,
+ EV_UNLINK,
+ EV_ADD_DIR,
+ EV_UNLINK_DIR,
+ EV_RAW,
+ EV_ERROR,
+
+ STR_CLOSE,
+ STR_END,
+
+ BACK_SLASH_RE,
+ DOUBLE_SLASH_RE,
+ SLASH_OR_BACK_SLASH_RE,
+ DOT_RE,
+ REPLACER_RE,
+
+ SLASH,
+ SLASH_SLASH,
+ BRACE_START,
+ BANG,
+ ONE_DOT,
+ TWO_DOTS,
+ GLOBSTAR,
+ SLASH_GLOBSTAR,
+ ANYMATCH_OPTS,
+ STRING_TYPE,
+ FUNCTION_TYPE,
+ EMPTY_STR,
+ EMPTY_FN,
+
+ isWindows,
+ isMacos,
+ isIBMi
+} = require('./lib/constants');
+
+const stat = promisify(fs.stat);
+const readdir = promisify(fs.readdir);
+
+/**
+ * @typedef {String} Path
+ * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName
+ * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType
+ */
+
+/**
+ *
+ * @typedef {Object} WatchHelpers
+ * @property {Boolean} followSymlinks
+ * @property {'stat'|'lstat'} statMethod
+ * @property {Path} path
+ * @property {Path} watchPath
+ * @property {Function} entryPath
+ * @property {Boolean} hasGlob
+ * @property {Object} globFilter
+ * @property {Function} filterPath
+ * @property {Function} filterDir
+ */
+
+const arrify = (value = []) => Array.isArray(value) ? value : [value];
+const flatten = (list, result = []) => {
+ list.forEach(item => {
+ if (Array.isArray(item)) {
+ flatten(item, result);
+ } else {
+ result.push(item);
+ }
+ });
+ return result;
+};
+
+const unifyPaths = (paths_) => {
+ /**
+ * @type {Array}
+ */
+ const paths = flatten(arrify(paths_));
+ if (!paths.every(p => typeof p === STRING_TYPE)) {
+ throw new TypeError(`Non-string provided as watch path: ${paths}`);
+ }
+ return paths.map(normalizePathToUnix);
+};
+
+// If SLASH_SLASH occurs at the beginning of path, it is not replaced
+// because "//StoragePC/DrivePool/Movies" is a valid network path
+const toUnix = (string) => {
+ let str = string.replace(BACK_SLASH_RE, SLASH);
+ let prepend = false;
+ if (str.startsWith(SLASH_SLASH)) {
+ prepend = true;
+ }
+ while (str.match(DOUBLE_SLASH_RE)) {
+ str = str.replace(DOUBLE_SLASH_RE, SLASH);
+ }
+ if (prepend) {
+ str = SLASH + str;
+ }
+ return str;
+};
+
+// Our version of upath.normalize
+// TODO: this is not equal to path-normalize module - investigate why
+const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));
+
+const normalizeIgnored = (cwd = EMPTY_STR) => (path) => {
+ if (typeof path !== STRING_TYPE) return path;
+ return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));
+};
+
+const getAbsolutePath = (path, cwd) => {
+ if (sysPath.isAbsolute(path)) {
+ return path;
+ }
+ if (path.startsWith(BANG)) {
+ return BANG + sysPath.join(cwd, path.slice(1));
+ }
+ return sysPath.join(cwd, path);
+};
+
+const undef = (opts, key) => opts[key] === undefined;
+
+/**
+ * Directory entry.
+ * @property {Path} path
+ * @property {Set} items
+ */
+class DirEntry {
+ /**
+ * @param {Path} dir
+ * @param {Function} removeWatcher
+ */
+ constructor(dir, removeWatcher) {
+ this.path = dir;
+ this._removeWatcher = removeWatcher;
+ /** @type {Set} */
+ this.items = new Set();
+ }
+
+ add(item) {
+ const {items} = this;
+ if (!items) return;
+ if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);
+ }
+
+ async remove(item) {
+ const {items} = this;
+ if (!items) return;
+ items.delete(item);
+ if (items.size > 0) return;
+
+ const dir = this.path;
+ try {
+ await readdir(dir);
+ } catch (err) {
+ if (this._removeWatcher) {
+ this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));
+ }
+ }
+ }
+
+ has(item) {
+ const {items} = this;
+ if (!items) return;
+ return items.has(item);
+ }
+
+ /**
+ * @returns {Array}
+ */
+ getChildren() {
+ const {items} = this;
+ if (!items) return;
+ return [...items.values()];
+ }
+
+ dispose() {
+ this.items.clear();
+ delete this.path;
+ delete this._removeWatcher;
+ delete this.items;
+ Object.freeze(this);
+ }
+}
+
+const STAT_METHOD_F = 'stat';
+const STAT_METHOD_L = 'lstat';
+class WatchHelper {
+ constructor(path, watchPath, follow, fsw) {
+ this.fsw = fsw;
+ this.path = path = path.replace(REPLACER_RE, EMPTY_STR);
+ this.watchPath = watchPath;
+ this.fullWatchPath = sysPath.resolve(watchPath);
+ this.hasGlob = watchPath !== path;
+ /** @type {object|boolean} */
+ if (path === EMPTY_STR) this.hasGlob = false;
+ this.globSymlink = this.hasGlob && follow ? undefined : false;
+ this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;
+ this.dirParts = this.getDirParts(path);
+ this.dirParts.forEach((parts) => {
+ if (parts.length > 1) parts.pop();
+ });
+ this.followSymlinks = follow;
+ this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;
+ }
+
+ checkGlobSymlink(entry) {
+ // only need to resolve once
+ // first entry should always have entry.parentDir === EMPTY_STR
+ if (this.globSymlink === undefined) {
+ this.globSymlink = entry.fullParentDir === this.fullWatchPath ?
+ false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};
+ }
+
+ if (this.globSymlink) {
+ return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);
+ }
+
+ return entry.fullPath;
+ }
+
+ entryPath(entry) {
+ return sysPath.join(this.watchPath,
+ sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))
+ );
+ }
+
+ filterPath(entry) {
+ const {stats} = entry;
+ if (stats && stats.isSymbolicLink()) return this.filterDir(entry);
+ const resolvedPath = this.entryPath(entry);
+ const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?
+ this.globFilter(resolvedPath) : true;
+ return matchesGlob &&
+ this.fsw._isntIgnored(resolvedPath, stats) &&
+ this.fsw._hasReadPermissions(stats);
+ }
+
+ getDirParts(path) {
+ if (!this.hasGlob) return [];
+ const parts = [];
+ const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];
+ expandedPath.forEach((path) => {
+ parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));
+ });
+ return parts;
+ }
+
+ filterDir(entry) {
+ if (this.hasGlob) {
+ const entryParts = this.getDirParts(this.checkGlobSymlink(entry));
+ let globstar = false;
+ this.unmatchedGlob = !this.dirParts.some((parts) => {
+ return parts.every((part, i) => {
+ if (part === GLOBSTAR) globstar = true;
+ return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);
+ });
+ });
+ }
+ return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);
+ }
+}
+
+/**
+ * Watches files & directories for changes. Emitted events:
+ * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`
+ *
+ * new FSWatcher()
+ * .add(directories)
+ * .on('add', path => log('File', path, 'was added'))
+ */
+class FSWatcher extends EventEmitter {
+// Not indenting methods for history sake; for now.
+constructor(_opts) {
+ super();
+
+ const opts = {};
+ if (_opts) Object.assign(opts, _opts); // for frozen objects
+
+ /** @type {Map} */
+ this._watched = new Map();
+ /** @type {Map} */
+ this._closers = new Map();
+ /** @type {Set} */
+ this._ignoredPaths = new Set();
+
+ /** @type {Map} */
+ this._throttled = new Map();
+
+ /** @type {Map} */
+ this._symlinkPaths = new Map();
+
+ this._streams = new Set();
+ this.closed = false;
+
+ // Set up default options.
+ if (undef(opts, 'persistent')) opts.persistent = true;
+ if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;
+ if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;
+ if (undef(opts, 'interval')) opts.interval = 100;
+ if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;
+ if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;
+ opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;
+
+ // Enable fsevents on OS X when polling isn't explicitly enabled.
+ if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;
+
+ // If we can't use fsevents, ensure the options reflect it's disabled.
+ const canUseFsEvents = FsEventsHandler.canUse();
+ if (!canUseFsEvents) opts.useFsEvents = false;
+
+ // Use polling on Mac if not using fsevents.
+ // Other platforms use non-polling fs_watch.
+ if (undef(opts, 'usePolling') && !opts.useFsEvents) {
+ opts.usePolling = isMacos;
+ }
+
+ // Always default to polling on IBM i because fs.watch() is not available on IBM i.
+ if(isIBMi) {
+ opts.usePolling = true;
+ }
+
+ // Global override (useful for end-developers that need to force polling for all
+ // instances of chokidar, regardless of usage/dependency depth)
+ const envPoll = process.env.CHOKIDAR_USEPOLLING;
+ if (envPoll !== undefined) {
+ const envLower = envPoll.toLowerCase();
+
+ if (envLower === 'false' || envLower === '0') {
+ opts.usePolling = false;
+ } else if (envLower === 'true' || envLower === '1') {
+ opts.usePolling = true;
+ } else {
+ opts.usePolling = !!envLower;
+ }
+ }
+ const envInterval = process.env.CHOKIDAR_INTERVAL;
+ if (envInterval) {
+ opts.interval = Number.parseInt(envInterval, 10);
+ }
+
+ // Editor atomic write normalization enabled by default with fs.watch
+ if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;
+ if (opts.atomic) this._pendingUnlinks = new Map();
+
+ if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;
+
+ if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;
+ if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};
+ const awf = opts.awaitWriteFinish;
+ if (awf) {
+ if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;
+ if (!awf.pollInterval) awf.pollInterval = 100;
+ this._pendingWrites = new Map();
+ }
+ if (opts.ignored) opts.ignored = arrify(opts.ignored);
+
+ let readyCalls = 0;
+ this._emitReady = () => {
+ readyCalls++;
+ if (readyCalls >= this._readyCount) {
+ this._emitReady = EMPTY_FN;
+ this._readyEmitted = true;
+ // use process.nextTick to allow time for listener to be bound
+ process.nextTick(() => this.emit(EV_READY));
+ }
+ };
+ this._emitRaw = (...args) => this.emit(EV_RAW, ...args);
+ this._readyEmitted = false;
+ this.options = opts;
+
+ // Initialize with proper watcher.
+ if (opts.useFsEvents) {
+ this._fsEventsHandler = new FsEventsHandler(this);
+ } else {
+ this._nodeFsHandler = new NodeFsHandler(this);
+ }
+
+ // You’re frozen when your heart’s not open.
+ Object.freeze(opts);
+}
+
+// Public methods
+
+/**
+ * Adds paths to be watched on an existing FSWatcher instance
+ * @param {Path|Array} paths_
+ * @param {String=} _origAdd private; for handling non-existent paths to be watched
+ * @param {Boolean=} _internal private; indicates a non-user add
+ * @returns {FSWatcher} for chaining
+ */
+add(paths_, _origAdd, _internal) {
+ const {cwd, disableGlobbing} = this.options;
+ this.closed = false;
+ let paths = unifyPaths(paths_);
+ if (cwd) {
+ paths = paths.map((path) => {
+ const absPath = getAbsolutePath(path, cwd);
+
+ // Check `path` instead of `absPath` because the cwd portion can't be a glob
+ if (disableGlobbing || !isGlob(path)) {
+ return absPath;
+ }
+ return normalizePath(absPath);
+ });
+ }
+
+ // set aside negated glob strings
+ paths = paths.filter((path) => {
+ if (path.startsWith(BANG)) {
+ this._ignoredPaths.add(path.slice(1));
+ return false;
+ }
+
+ // if a path is being added that was previously ignored, stop ignoring it
+ this._ignoredPaths.delete(path);
+ this._ignoredPaths.delete(path + SLASH_GLOBSTAR);
+
+ // reset the cached userIgnored anymatch fn
+ // to make ignoredPaths changes effective
+ this._userIgnored = undefined;
+
+ return true;
+ });
+
+ if (this.options.useFsEvents && this._fsEventsHandler) {
+ if (!this._readyCount) this._readyCount = paths.length;
+ if (this.options.persistent) this._readyCount *= 2;
+ paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));
+ } else {
+ if (!this._readyCount) this._readyCount = 0;
+ this._readyCount += paths.length;
+ Promise.all(
+ paths.map(async path => {
+ const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);
+ if (res) this._emitReady();
+ return res;
+ })
+ ).then(results => {
+ if (this.closed) return;
+ results.filter(item => item).forEach(item => {
+ this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));
+ });
+ });
+ }
+
+ return this;
+}
+
+/**
+ * Close watchers or start ignoring events from specified paths.
+ * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs
+ * @returns {FSWatcher} for chaining
+*/
+unwatch(paths_) {
+ if (this.closed) return this;
+ const paths = unifyPaths(paths_);
+ const {cwd} = this.options;
+
+ paths.forEach((path) => {
+ // convert to absolute path unless relative path already matches
+ if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {
+ if (cwd) path = sysPath.join(cwd, path);
+ path = sysPath.resolve(path);
+ }
+
+ this._closePath(path);
+
+ this._ignoredPaths.add(path);
+ if (this._watched.has(path)) {
+ this._ignoredPaths.add(path + SLASH_GLOBSTAR);
+ }
+
+ // reset the cached userIgnored anymatch fn
+ // to make ignoredPaths changes effective
+ this._userIgnored = undefined;
+ });
+
+ return this;
+}
+
+/**
+ * Close watchers and remove all listeners from watched paths.
+ * @returns {Promise}.
+*/
+close() {
+ if (this.closed) return this._closePromise;
+ this.closed = true;
+
+ // Memory management.
+ this.removeAllListeners();
+ const closers = [];
+ this._closers.forEach(closerList => closerList.forEach(closer => {
+ const promise = closer();
+ if (promise instanceof Promise) closers.push(promise);
+ }));
+ this._streams.forEach(stream => stream.destroy());
+ this._userIgnored = undefined;
+ this._readyCount = 0;
+ this._readyEmitted = false;
+ this._watched.forEach(dirent => dirent.dispose());
+ ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {
+ this[`_${key}`].clear();
+ });
+
+ this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();
+ return this._closePromise;
+}
+
+/**
+ * Expose list of watched paths
+ * @returns {Object} for chaining
+*/
+getWatched() {
+ const watchList = {};
+ this._watched.forEach((entry, dir) => {
+ const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;
+ watchList[key || ONE_DOT] = entry.getChildren().sort();
+ });
+ return watchList;
+}
+
+emitWithAll(event, args) {
+ this.emit(...args);
+ if (event !== EV_ERROR) this.emit(EV_ALL, ...args);
+}
+
+// Common helpers
+// --------------
+
+/**
+ * Normalize and emit events.
+ * Calling _emit DOES NOT MEAN emit() would be called!
+ * @param {EventName} event Type of event
+ * @param {Path} path File or directory path
+ * @param {*=} val1 arguments to be passed with event
+ * @param {*=} val2
+ * @param {*=} val3
+ * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag
+ */
+async _emit(event, path, val1, val2, val3) {
+ if (this.closed) return;
+
+ const opts = this.options;
+ if (isWindows) path = sysPath.normalize(path);
+ if (opts.cwd) path = sysPath.relative(opts.cwd, path);
+ /** @type Array */
+ const args = [event, path];
+ if (val3 !== undefined) args.push(val1, val2, val3);
+ else if (val2 !== undefined) args.push(val1, val2);
+ else if (val1 !== undefined) args.push(val1);
+
+ const awf = opts.awaitWriteFinish;
+ let pw;
+ if (awf && (pw = this._pendingWrites.get(path))) {
+ pw.lastChange = new Date();
+ return this;
+ }
+
+ if (opts.atomic) {
+ if (event === EV_UNLINK) {
+ this._pendingUnlinks.set(path, args);
+ setTimeout(() => {
+ this._pendingUnlinks.forEach((entry, path) => {
+ this.emit(...entry);
+ this.emit(EV_ALL, ...entry);
+ this._pendingUnlinks.delete(path);
+ });
+ }, typeof opts.atomic === 'number' ? opts.atomic : 100);
+ return this;
+ }
+ if (event === EV_ADD && this._pendingUnlinks.has(path)) {
+ event = args[0] = EV_CHANGE;
+ this._pendingUnlinks.delete(path);
+ }
+ }
+
+ if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {
+ const awfEmit = (err, stats) => {
+ if (err) {
+ event = args[0] = EV_ERROR;
+ args[1] = err;
+ this.emitWithAll(event, args);
+ } else if (stats) {
+ // if stats doesn't exist the file must have been deleted
+ if (args.length > 2) {
+ args[2] = stats;
+ } else {
+ args.push(stats);
+ }
+ this.emitWithAll(event, args);
+ }
+ };
+
+ this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
+ return this;
+ }
+
+ if (event === EV_CHANGE) {
+ const isThrottled = !this._throttle(EV_CHANGE, path, 50);
+ if (isThrottled) return this;
+ }
+
+ if (opts.alwaysStat && val1 === undefined &&
+ (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)
+ ) {
+ const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;
+ let stats;
+ try {
+ stats = await stat(fullPath);
+ } catch (err) {}
+ // Suppress event when fs_stat fails, to avoid sending undefined 'stat'
+ if (!stats || this.closed) return;
+ args.push(stats);
+ }
+ this.emitWithAll(event, args);
+
+ return this;
+}
+
+/**
+ * Common handler for errors
+ * @param {Error} error
+ * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag
+ */
+_handleError(error) {
+ const code = error && error.code;
+ if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&
+ (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))
+ ) {
+ this.emit(EV_ERROR, error);
+ }
+ return error || this.closed;
+}
+
+/**
+ * Helper utility for throttling
+ * @param {ThrottleType} actionType type being throttled
+ * @param {Path} path being acted upon
+ * @param {Number} timeout duration of time to suppress duplicate actions
+ * @returns {Object|false} tracking object or false if action should be suppressed
+ */
+_throttle(actionType, path, timeout) {
+ if (!this._throttled.has(actionType)) {
+ this._throttled.set(actionType, new Map());
+ }
+
+ /** @type {Map} */
+ const action = this._throttled.get(actionType);
+ /** @type {Object} */
+ const actionPath = action.get(path);
+
+ if (actionPath) {
+ actionPath.count++;
+ return false;
+ }
+
+ let timeoutObject;
+ const clear = () => {
+ const item = action.get(path);
+ const count = item ? item.count : 0;
+ action.delete(path);
+ clearTimeout(timeoutObject);
+ if (item) clearTimeout(item.timeoutObject);
+ return count;
+ };
+ timeoutObject = setTimeout(clear, timeout);
+ const thr = {timeoutObject, clear, count: 0};
+ action.set(path, thr);
+ return thr;
+}
+
+_incrReadyCount() {
+ return this._readyCount++;
+}
+
+/**
+ * Awaits write operation to finish.
+ * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.
+ * @param {Path} path being acted upon
+ * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished
+ * @param {EventName} event
+ * @param {Function} awfEmit Callback to be called when ready for event to be emitted.
+ */
+_awaitWriteFinish(path, threshold, event, awfEmit) {
+ let timeoutHandler;
+
+ let fullPath = path;
+ if (this.options.cwd && !sysPath.isAbsolute(path)) {
+ fullPath = sysPath.join(this.options.cwd, path);
+ }
+
+ const now = new Date();
+
+ const awaitWriteFinish = (prevStat) => {
+ fs.stat(fullPath, (err, curStat) => {
+ if (err || !this._pendingWrites.has(path)) {
+ if (err && err.code !== 'ENOENT') awfEmit(err);
+ return;
+ }
+
+ const now = Number(new Date());
+
+ if (prevStat && curStat.size !== prevStat.size) {
+ this._pendingWrites.get(path).lastChange = now;
+ }
+ const pw = this._pendingWrites.get(path);
+ const df = now - pw.lastChange;
+
+ if (df >= threshold) {
+ this._pendingWrites.delete(path);
+ awfEmit(undefined, curStat);
+ } else {
+ timeoutHandler = setTimeout(
+ awaitWriteFinish,
+ this.options.awaitWriteFinish.pollInterval,
+ curStat
+ );
+ }
+ });
+ };
+
+ if (!this._pendingWrites.has(path)) {
+ this._pendingWrites.set(path, {
+ lastChange: now,
+ cancelWait: () => {
+ this._pendingWrites.delete(path);
+ clearTimeout(timeoutHandler);
+ return event;
+ }
+ });
+ timeoutHandler = setTimeout(
+ awaitWriteFinish,
+ this.options.awaitWriteFinish.pollInterval
+ );
+ }
+}
+
+_getGlobIgnored() {
+ return [...this._ignoredPaths.values()];
+}
+
+/**
+ * Determines whether user has asked to ignore this path.
+ * @param {Path} path filepath or dir
+ * @param {fs.Stats=} stats result of fs.stat
+ * @returns {Boolean}
+ */
+_isIgnored(path, stats) {
+ if (this.options.atomic && DOT_RE.test(path)) return true;
+ if (!this._userIgnored) {
+ const {cwd} = this.options;
+ const ign = this.options.ignored;
+
+ const ignored = ign && ign.map(normalizeIgnored(cwd));
+ const paths = arrify(ignored)
+ .filter((path) => typeof path === STRING_TYPE && !isGlob(path))
+ .map((path) => path + SLASH_GLOBSTAR);
+ const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);
+ this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);
+ }
+
+ return this._userIgnored([path, stats]);
+}
+
+_isntIgnored(path, stat) {
+ return !this._isIgnored(path, stat);
+}
+
+/**
+ * Provides a set of common helpers and properties relating to symlink and glob handling.
+ * @param {Path} path file, directory, or glob pattern being watched
+ * @param {Number=} depth at any depth > 0, this isn't a glob
+ * @returns {WatchHelper} object containing helpers for this path
+ */
+_getWatchHelpers(path, depth) {
+ const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);
+ const follow = this.options.followSymlinks;
+
+ return new WatchHelper(path, watchPath, follow, this);
+}
+
+// Directory helpers
+// -----------------
+
+/**
+ * Provides directory tracking objects
+ * @param {String} directory path of the directory
+ * @returns {DirEntry} the directory's tracking object
+ */
+_getWatchedDir(directory) {
+ if (!this._boundRemove) this._boundRemove = this._remove.bind(this);
+ const dir = sysPath.resolve(directory);
+ if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));
+ return this._watched.get(dir);
+}
+
+// File helpers
+// ------------
+
+/**
+ * Check for read permissions.
+ * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405
+ * @param {fs.Stats} stats - object, result of fs_stat
+ * @returns {Boolean} indicates whether the file can be read
+*/
+_hasReadPermissions(stats) {
+ if (this.options.ignorePermissionErrors) return true;
+
+ // stats.mode may be bigint
+ const md = stats && Number.parseInt(stats.mode, 10);
+ const st = md & 0o777;
+ const it = Number.parseInt(st.toString(8)[0], 10);
+ return Boolean(4 & it);
+}
+
+/**
+ * Handles emitting unlink events for
+ * files and directories, and via recursion, for
+ * files and directories within directories that are unlinked
+ * @param {String} directory within which the following item is located
+ * @param {String} item base path of item/directory
+ * @returns {void}
+*/
+_remove(directory, item, isDirectory) {
+ // if what is being deleted is a directory, get that directory's paths
+ // for recursive deleting and cleaning of watched object
+ // if it is not a directory, nestedDirectoryChildren will be empty array
+ const path = sysPath.join(directory, item);
+ const fullPath = sysPath.resolve(path);
+ isDirectory = isDirectory != null
+ ? isDirectory
+ : this._watched.has(path) || this._watched.has(fullPath);
+
+ // prevent duplicate handling in case of arriving here nearly simultaneously
+ // via multiple paths (such as _handleFile and _handleDir)
+ if (!this._throttle('remove', path, 100)) return;
+
+ // if the only watched file is removed, watch for its return
+ if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {
+ this.add(directory, item, true);
+ }
+
+ // This will create a new entry in the watched object in either case
+ // so we got to do the directory check beforehand
+ const wp = this._getWatchedDir(path);
+ const nestedDirectoryChildren = wp.getChildren();
+
+ // Recursively remove children directories / files.
+ nestedDirectoryChildren.forEach(nested => this._remove(path, nested));
+
+ // Check if item was on the watched list and remove it
+ const parent = this._getWatchedDir(directory);
+ const wasTracked = parent.has(item);
+ parent.remove(item);
+
+ // Fixes issue #1042 -> Relative paths were detected and added as symlinks
+ // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),
+ // but never removed from the map in case the path was deleted.
+ // This leads to an incorrect state if the path was recreated:
+ // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553
+ if (this._symlinkPaths.has(fullPath)) {
+ this._symlinkPaths.delete(fullPath);
+ }
+
+ // If we wait for this file to be fully written, cancel the wait.
+ let relPath = path;
+ if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);
+ if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {
+ const event = this._pendingWrites.get(relPath).cancelWait();
+ if (event === EV_ADD) return;
+ }
+
+ // The Entry will either be a directory that just got removed
+ // or a bogus entry to a file, in either case we have to remove it
+ this._watched.delete(path);
+ this._watched.delete(fullPath);
+ const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;
+ if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);
+
+ // Avoid conflicts if we later create another file with the same name
+ if (!this.options.useFsEvents) {
+ this._closePath(path);
+ }
+}
+
+/**
+ * Closes all watchers for a path
+ * @param {Path} path
+ */
+_closePath(path) {
+ this._closeFile(path)
+ const dir = sysPath.dirname(path);
+ this._getWatchedDir(dir).remove(sysPath.basename(path));
+}
+
+/**
+ * Closes only file-specific watchers
+ * @param {Path} path
+ */
+_closeFile(path) {
+ const closers = this._closers.get(path);
+ if (!closers) return;
+ closers.forEach(closer => closer());
+ this._closers.delete(path);
+}
+
+/**
+ *
+ * @param {Path} path
+ * @param {Function} closer
+ */
+_addPathCloser(path, closer) {
+ if (!closer) return;
+ let list = this._closers.get(path);
+ if (!list) {
+ list = [];
+ this._closers.set(path, list);
+ }
+ list.push(closer);
+}
+
+_readdirp(root, opts) {
+ if (this.closed) return;
+ const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};
+ let stream = readdirp(root, options);
+ this._streams.add(stream);
+ stream.once(STR_CLOSE, () => {
+ stream = undefined;
+ });
+ stream.once(STR_END, () => {
+ if (stream) {
+ this._streams.delete(stream);
+ stream = undefined;
+ }
+ });
+ return stream;
+}
+
+}
+
+// Export FSWatcher class
+exports.FSWatcher = FSWatcher;
+
+/**
+ * Instantiates watcher with paths to be tracked.
+ * @param {String|Array} paths file/directory paths and/or globs
+ * @param {Object=} options chokidar opts
+ * @returns an instance of FSWatcher for chaining.
+ */
+const watch = (paths, options) => {
+ const watcher = new FSWatcher(options);
+ watcher.add(paths);
+ return watcher;
+};
+
+exports.watch = watch;
diff --git a/node_modules/chokidar/lib/constants.js b/node_modules/chokidar/lib/constants.js
new file mode 100644
index 0000000..1454f85
--- /dev/null
+++ b/node_modules/chokidar/lib/constants.js
@@ -0,0 +1,65 @@
+'use strict';
+
+const {sep} = require('path');
+const {platform} = process;
+const os = require('os');
+
+exports.EV_ALL = 'all';
+exports.EV_READY = 'ready';
+exports.EV_ADD = 'add';
+exports.EV_CHANGE = 'change';
+exports.EV_ADD_DIR = 'addDir';
+exports.EV_UNLINK = 'unlink';
+exports.EV_UNLINK_DIR = 'unlinkDir';
+exports.EV_RAW = 'raw';
+exports.EV_ERROR = 'error';
+
+exports.STR_DATA = 'data';
+exports.STR_END = 'end';
+exports.STR_CLOSE = 'close';
+
+exports.FSEVENT_CREATED = 'created';
+exports.FSEVENT_MODIFIED = 'modified';
+exports.FSEVENT_DELETED = 'deleted';
+exports.FSEVENT_MOVED = 'moved';
+exports.FSEVENT_CLONED = 'cloned';
+exports.FSEVENT_UNKNOWN = 'unknown';
+exports.FSEVENT_TYPE_FILE = 'file';
+exports.FSEVENT_TYPE_DIRECTORY = 'directory';
+exports.FSEVENT_TYPE_SYMLINK = 'symlink';
+
+exports.KEY_LISTENERS = 'listeners';
+exports.KEY_ERR = 'errHandlers';
+exports.KEY_RAW = 'rawEmitters';
+exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];
+
+exports.DOT_SLASH = `.${sep}`;
+
+exports.BACK_SLASH_RE = /\\/g;
+exports.DOUBLE_SLASH_RE = /\/\//;
+exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/;
+exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/;
+exports.REPLACER_RE = /^\.[/\\]/;
+
+exports.SLASH = '/';
+exports.SLASH_SLASH = '//';
+exports.BRACE_START = '{';
+exports.BANG = '!';
+exports.ONE_DOT = '.';
+exports.TWO_DOTS = '..';
+exports.STAR = '*';
+exports.GLOBSTAR = '**';
+exports.ROOT_GLOBSTAR = '/**/*';
+exports.SLASH_GLOBSTAR = '/**';
+exports.DIR_SUFFIX = 'Dir';
+exports.ANYMATCH_OPTS = {dot: true};
+exports.STRING_TYPE = 'string';
+exports.FUNCTION_TYPE = 'function';
+exports.EMPTY_STR = '';
+exports.EMPTY_FN = () => {};
+exports.IDENTITY_FN = val => val;
+
+exports.isWindows = platform === 'win32';
+exports.isMacos = platform === 'darwin';
+exports.isLinux = platform === 'linux';
+exports.isIBMi = os.type() === 'OS400';
diff --git a/node_modules/chokidar/lib/fsevents-handler.js b/node_modules/chokidar/lib/fsevents-handler.js
new file mode 100644
index 0000000..0f7f2cb
--- /dev/null
+++ b/node_modules/chokidar/lib/fsevents-handler.js
@@ -0,0 +1,524 @@
+'use strict';
+
+const fs = require('fs');
+const sysPath = require('path');
+const { promisify } = require('util');
+
+let fsevents;
+try {
+ fsevents = require('fsevents');
+} catch (error) {
+ if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);
+}
+
+if (fsevents) {
+ // TODO: real check
+ const mtch = process.version.match(/v(\d+)\.(\d+)/);
+ if (mtch && mtch[1] && mtch[2]) {
+ const maj = Number.parseInt(mtch[1], 10);
+ const min = Number.parseInt(mtch[2], 10);
+ if (maj === 8 && min < 16) {
+ fsevents = undefined;
+ }
+ }
+}
+
+const {
+ EV_ADD,
+ EV_CHANGE,
+ EV_ADD_DIR,
+ EV_UNLINK,
+ EV_ERROR,
+ STR_DATA,
+ STR_END,
+ FSEVENT_CREATED,
+ FSEVENT_MODIFIED,
+ FSEVENT_DELETED,
+ FSEVENT_MOVED,
+ // FSEVENT_CLONED,
+ FSEVENT_UNKNOWN,
+ FSEVENT_TYPE_FILE,
+ FSEVENT_TYPE_DIRECTORY,
+ FSEVENT_TYPE_SYMLINK,
+
+ ROOT_GLOBSTAR,
+ DIR_SUFFIX,
+ DOT_SLASH,
+ FUNCTION_TYPE,
+ EMPTY_FN,
+ IDENTITY_FN
+} = require('./constants');
+
+const Depth = (value) => isNaN(value) ? {} : {depth: value};
+
+const stat = promisify(fs.stat);
+const lstat = promisify(fs.lstat);
+const realpath = promisify(fs.realpath);
+
+const statMethods = { stat, lstat };
+
+/**
+ * @typedef {String} Path
+ */
+
+/**
+ * @typedef {Object} FsEventsWatchContainer
+ * @property {Set} listeners
+ * @property {Function} rawEmitter
+ * @property {{stop: Function}} watcher
+ */
+
+// fsevents instance helper functions
+/**
+ * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)
+ * @type {Map}
+ */
+const FSEventsWatchers = new Map();
+
+// Threshold of duplicate path prefixes at which to start
+// consolidating going forward
+const consolidateThreshhold = 10;
+
+const wrongEventFlags = new Set([
+ 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
+]);
+
+/**
+ * Instantiates the fsevents interface
+ * @param {Path} path path to be watched
+ * @param {Function} callback called when fsevents is bound and ready
+ * @returns {{stop: Function}} new fsevents instance
+ */
+const createFSEventsInstance = (path, callback) => {
+ const stop = fsevents.watch(path, callback);
+ return {stop};
+};
+
+/**
+ * Instantiates the fsevents interface or binds listeners to an existing one covering
+ * the same file tree.
+ * @param {Path} path - to be watched
+ * @param {Path} realPath - real path for symlinks
+ * @param {Function} listener - called when fsevents emits events
+ * @param {Function} rawEmitter - passes data to listeners of the 'raw' event
+ * @returns {Function} closer
+ */
+function setFSEventsListener(path, realPath, listener, rawEmitter) {
+ let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;
+
+ const parentPath = sysPath.dirname(watchPath);
+ let cont = FSEventsWatchers.get(watchPath);
+
+ // If we've accumulated a substantial number of paths that
+ // could have been consolidated by watching one directory
+ // above the current one, create a watcher on the parent
+ // path instead, so that we do consolidate going forward.
+ if (couldConsolidate(parentPath)) {
+ watchPath = parentPath;
+ }
+
+ const resolvedPath = sysPath.resolve(path);
+ const hasSymlink = resolvedPath !== realPath;
+
+ const filteredListener = (fullPath, flags, info) => {
+ if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);
+ if (
+ fullPath === resolvedPath ||
+ !fullPath.indexOf(resolvedPath + sysPath.sep)
+ ) listener(fullPath, flags, info);
+ };
+
+ // check if there is already a watcher on a parent path
+ // modifies `watchPath` to the parent path when it finds a match
+ let watchedParent = false;
+ for (const watchedPath of FSEventsWatchers.keys()) {
+ if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {
+ watchPath = watchedPath;
+ cont = FSEventsWatchers.get(watchPath);
+ watchedParent = true;
+ break;
+ }
+ }
+
+ if (cont || watchedParent) {
+ cont.listeners.add(filteredListener);
+ } else {
+ cont = {
+ listeners: new Set([filteredListener]),
+ rawEmitter,
+ watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {
+ if (!cont.listeners.size) return;
+ const info = fsevents.getInfo(fullPath, flags);
+ cont.listeners.forEach(list => {
+ list(fullPath, flags, info);
+ });
+
+ cont.rawEmitter(info.event, fullPath, info);
+ })
+ };
+ FSEventsWatchers.set(watchPath, cont);
+ }
+
+ // removes this instance's listeners and closes the underlying fsevents
+ // instance if there are no more listeners left
+ return () => {
+ const lst = cont.listeners;
+
+ lst.delete(filteredListener);
+ if (!lst.size) {
+ FSEventsWatchers.delete(watchPath);
+ if (cont.watcher) return cont.watcher.stop().then(() => {
+ cont.rawEmitter = cont.watcher = undefined;
+ Object.freeze(cont);
+ });
+ }
+ };
+}
+
+// Decide whether or not we should start a new higher-level
+// parent watcher
+const couldConsolidate = (path) => {
+ let count = 0;
+ for (const watchPath of FSEventsWatchers.keys()) {
+ if (watchPath.indexOf(path) === 0) {
+ count++;
+ if (count >= consolidateThreshhold) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+};
+
+// returns boolean indicating whether fsevents can be used
+const canUse = () => fsevents && FSEventsWatchers.size < 128;
+
+// determines subdirectory traversal levels from root to path
+const calcDepth = (path, root) => {
+ let i = 0;
+ while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;
+ return i;
+};
+
+// returns boolean indicating whether the fsevents' event info has the same type
+// as the one returned by fs.stat
+const sameTypes = (info, stats) => (
+ info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||
+ info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||
+ info.type === FSEVENT_TYPE_FILE && stats.isFile()
+)
+
+/**
+ * @mixin
+ */
+class FsEventsHandler {
+
+/**
+ * @param {import('../index').FSWatcher} fsw
+ */
+constructor(fsw) {
+ this.fsw = fsw;
+}
+checkIgnored(path, stats) {
+ const ipaths = this.fsw._ignoredPaths;
+ if (this.fsw._isIgnored(path, stats)) {
+ ipaths.add(path);
+ if (stats && stats.isDirectory()) {
+ ipaths.add(path + ROOT_GLOBSTAR);
+ }
+ return true;
+ }
+
+ ipaths.delete(path);
+ ipaths.delete(path + ROOT_GLOBSTAR);
+}
+
+addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+ const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;
+ this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+}
+
+async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+ try {
+ const stats = await stat(path)
+ if (this.fsw.closed) return;
+ if (sameTypes(info, stats)) {
+ this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ } else {
+ this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ }
+ } catch (error) {
+ if (error.code === 'EACCES') {
+ this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ } else {
+ this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ }
+ }
+}
+
+handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+ if (this.fsw.closed || this.checkIgnored(path)) return;
+
+ if (event === EV_UNLINK) {
+ const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY
+ // suppress unlink events on never before seen files
+ if (isDirectory || watchedDir.has(item)) {
+ this.fsw._remove(parent, item, isDirectory);
+ }
+ } else {
+ if (event === EV_ADD) {
+ // track new directories
+ if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);
+
+ if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {
+ // push symlinks back to the top of the stack to get handled
+ const curDepth = opts.depth === undefined ?
+ undefined : calcDepth(fullPath, realPath) + 1;
+ return this._addToFsEvents(path, false, true, curDepth);
+ }
+
+ // track new paths
+ // (other than symlinks being followed, which will be tracked soon)
+ this.fsw._getWatchedDir(parent).add(item);
+ }
+ /**
+ * @type {'add'|'addDir'|'unlink'|'unlinkDir'}
+ */
+ const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;
+ this.fsw._emit(eventName, path);
+ if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);
+ }
+}
+
+/**
+ * Handle symlinks encountered during directory scan
+ * @param {String} watchPath - file/dir path to be watched with fsevents
+ * @param {String} realPath - real path (in case of symlinks)
+ * @param {Function} transform - path transformer
+ * @param {Function} globFilter - path filter in case a glob pattern was provided
+ * @returns {Function} closer for the watcher instance
+*/
+_watchWithFsEvents(watchPath, realPath, transform, globFilter) {
+ if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;
+ const opts = this.fsw.options;
+ const watchCallback = async (fullPath, flags, info) => {
+ if (this.fsw.closed) return;
+ if (
+ opts.depth !== undefined &&
+ calcDepth(fullPath, realPath) > opts.depth
+ ) return;
+ const path = transform(sysPath.join(
+ watchPath, sysPath.relative(watchPath, fullPath)
+ ));
+ if (globFilter && !globFilter(path)) return;
+ // ensure directories are tracked
+ const parent = sysPath.dirname(path);
+ const item = sysPath.basename(path);
+ const watchedDir = this.fsw._getWatchedDir(
+ info.type === FSEVENT_TYPE_DIRECTORY ? path : parent
+ );
+
+ // correct for wrong events emitted
+ if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {
+ if (typeof opts.ignored === FUNCTION_TYPE) {
+ let stats;
+ try {
+ stats = await stat(path);
+ } catch (error) {}
+ if (this.fsw.closed) return;
+ if (this.checkIgnored(path, stats)) return;
+ if (sameTypes(info, stats)) {
+ this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ } else {
+ this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ }
+ } else {
+ this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ }
+ } else {
+ switch (info.event) {
+ case FSEVENT_CREATED:
+ case FSEVENT_MODIFIED:
+ return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ case FSEVENT_DELETED:
+ case FSEVENT_MOVED:
+ return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+ }
+ }
+ };
+
+ const closer = setFSEventsListener(
+ watchPath,
+ realPath,
+ watchCallback,
+ this.fsw._emitRaw
+ );
+
+ this.fsw._emitReady();
+ return closer;
+}
+
+/**
+ * Handle symlinks encountered during directory scan
+ * @param {String} linkPath path to symlink
+ * @param {String} fullPath absolute path to the symlink
+ * @param {Function} transform pre-existing path transformer
+ * @param {Number} curDepth level of subdirectories traversed to where symlink is
+ * @returns {Promise}
+ */
+async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {
+ // don't follow the same symlink more than once
+ if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;
+
+ this.fsw._symlinkPaths.set(fullPath, true);
+ this.fsw._incrReadyCount();
+
+ try {
+ const linkTarget = await realpath(linkPath);
+ if (this.fsw.closed) return;
+ if (this.fsw._isIgnored(linkTarget)) {
+ return this.fsw._emitReady();
+ }
+
+ this.fsw._incrReadyCount();
+
+ // add the linkTarget for watching with a wrapper for transform
+ // that causes emitted paths to incorporate the link's path
+ this._addToFsEvents(linkTarget || linkPath, (path) => {
+ let aliasedPath = linkPath;
+ if (linkTarget && linkTarget !== DOT_SLASH) {
+ aliasedPath = path.replace(linkTarget, linkPath);
+ } else if (path !== DOT_SLASH) {
+ aliasedPath = sysPath.join(linkPath, path);
+ }
+ return transform(aliasedPath);
+ }, false, curDepth);
+ } catch(error) {
+ if (this.fsw._handleError(error)) {
+ return this.fsw._emitReady();
+ }
+ }
+}
+
+/**
+ *
+ * @param {Path} newPath
+ * @param {fs.Stats} stats
+ */
+emitAdd(newPath, stats, processPath, opts, forceAdd) {
+ const pp = processPath(newPath);
+ const isDir = stats.isDirectory();
+ const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));
+ const base = sysPath.basename(pp);
+
+ // ensure empty dirs get tracked
+ if (isDir) this.fsw._getWatchedDir(pp);
+ if (dirObj.has(base)) return;
+ dirObj.add(base);
+
+ if (!opts.ignoreInitial || forceAdd === true) {
+ this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);
+ }
+}
+
+initWatch(realPath, path, wh, processPath) {
+ if (this.fsw.closed) return;
+ const closer = this._watchWithFsEvents(
+ wh.watchPath,
+ sysPath.resolve(realPath || wh.watchPath),
+ processPath,
+ wh.globFilter
+ );
+ this.fsw._addPathCloser(path, closer);
+}
+
+/**
+ * Handle added path with fsevents
+ * @param {String} path file/dir path or glob pattern
+ * @param {Function|Boolean=} transform converts working path to what the user expects
+ * @param {Boolean=} forceAdd ensure add is emitted
+ * @param {Number=} priorDepth Level of subdirectories already traversed.
+ * @returns {Promise}
+ */
+async _addToFsEvents(path, transform, forceAdd, priorDepth) {
+ if (this.fsw.closed) {
+ return;
+ }
+ const opts = this.fsw.options;
+ const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;
+
+ const wh = this.fsw._getWatchHelpers(path);
+
+ // evaluate what is at the path we're being asked to watch
+ try {
+ const stats = await statMethods[wh.statMethod](wh.watchPath);
+ if (this.fsw.closed) return;
+ if (this.fsw._isIgnored(wh.watchPath, stats)) {
+ throw null;
+ }
+ if (stats.isDirectory()) {
+ // emit addDir unless this is a glob parent
+ if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);
+
+ // don't recurse further if it would exceed depth setting
+ if (priorDepth && priorDepth > opts.depth) return;
+
+ // scan the contents of the dir
+ this.fsw._readdirp(wh.watchPath, {
+ fileFilter: entry => wh.filterPath(entry),
+ directoryFilter: entry => wh.filterDir(entry),
+ ...Depth(opts.depth - (priorDepth || 0))
+ }).on(STR_DATA, (entry) => {
+ // need to check filterPath on dirs b/c filterDir is less restrictive
+ if (this.fsw.closed) {
+ return;
+ }
+ if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;
+
+ const joinedPath = sysPath.join(wh.watchPath, entry.path);
+ const {fullPath} = entry;
+
+ if (wh.followSymlinks && entry.stats.isSymbolicLink()) {
+ // preserve the current depth here since it can't be derived from
+ // real paths past the symlink
+ const curDepth = opts.depth === undefined ?
+ undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;
+
+ this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);
+ } else {
+ this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);
+ }
+ }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {
+ this.fsw._emitReady();
+ });
+ } else {
+ this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);
+ this.fsw._emitReady();
+ }
+ } catch (error) {
+ if (!error || this.fsw._handleError(error)) {
+ // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__-
+ this.fsw._emitReady();
+ this.fsw._emitReady();
+ }
+ }
+
+ if (opts.persistent && forceAdd !== true) {
+ if (typeof transform === FUNCTION_TYPE) {
+ // realpath has already been resolved
+ this.initWatch(undefined, path, wh, processPath);
+ } else {
+ let realPath;
+ try {
+ realPath = await realpath(wh.watchPath);
+ } catch (e) {}
+ this.initWatch(realPath, path, wh, processPath);
+ }
+ }
+}
+
+}
+
+module.exports = FsEventsHandler;
+module.exports.canUse = canUse;
diff --git a/node_modules/chokidar/lib/nodefs-handler.js b/node_modules/chokidar/lib/nodefs-handler.js
new file mode 100644
index 0000000..199cfe9
--- /dev/null
+++ b/node_modules/chokidar/lib/nodefs-handler.js
@@ -0,0 +1,654 @@
+'use strict';
+
+const fs = require('fs');
+const sysPath = require('path');
+const { promisify } = require('util');
+const isBinaryPath = require('is-binary-path');
+const {
+ isWindows,
+ isLinux,
+ EMPTY_FN,
+ EMPTY_STR,
+ KEY_LISTENERS,
+ KEY_ERR,
+ KEY_RAW,
+ HANDLER_KEYS,
+ EV_CHANGE,
+ EV_ADD,
+ EV_ADD_DIR,
+ EV_ERROR,
+ STR_DATA,
+ STR_END,
+ BRACE_START,
+ STAR
+} = require('./constants');
+
+const THROTTLE_MODE_WATCH = 'watch';
+
+const open = promisify(fs.open);
+const stat = promisify(fs.stat);
+const lstat = promisify(fs.lstat);
+const close = promisify(fs.close);
+const fsrealpath = promisify(fs.realpath);
+
+const statMethods = { lstat, stat };
+
+// TODO: emit errors properly. Example: EMFILE on Macos.
+const foreach = (val, fn) => {
+ if (val instanceof Set) {
+ val.forEach(fn);
+ } else {
+ fn(val);
+ }
+};
+
+const addAndConvert = (main, prop, item) => {
+ let container = main[prop];
+ if (!(container instanceof Set)) {
+ main[prop] = container = new Set([container]);
+ }
+ container.add(item);
+};
+
+const clearItem = cont => key => {
+ const set = cont[key];
+ if (set instanceof Set) {
+ set.clear();
+ } else {
+ delete cont[key];
+ }
+};
+
+const delFromSet = (main, prop, item) => {
+ const container = main[prop];
+ if (container instanceof Set) {
+ container.delete(item);
+ } else if (container === item) {
+ delete main[prop];
+ }
+};
+
+const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;
+
+/**
+ * @typedef {String} Path
+ */
+
+// fs_watch helpers
+
+// object to hold per-process fs_watch instances
+// (may be shared across chokidar FSWatcher instances)
+
+/**
+ * @typedef {Object} FsWatchContainer
+ * @property {Set} listeners
+ * @property {Set} errHandlers
+ * @property {Set} rawEmitters
+ * @property {fs.FSWatcher=} watcher
+ * @property {Boolean=} watcherUnusable
+ */
+
+/**
+ * @type {Map}
+ */
+const FsWatchInstances = new Map();
+
+/**
+ * Instantiates the fs_watch interface
+ * @param {String} path to be watched
+ * @param {Object} options to be passed to fs_watch
+ * @param {Function} listener main event handler
+ * @param {Function} errHandler emits info about errors
+ * @param {Function} emitRaw emits raw event data
+ * @returns {fs.FSWatcher} new fsevents instance
+ */
+function createFsWatchInstance(path, options, listener, errHandler, emitRaw) {
+ const handleEvent = (rawEvent, evPath) => {
+ listener(path);
+ emitRaw(rawEvent, evPath, {watchedPath: path});
+
+ // emit based on events occurring for files from a directory's watcher in
+ // case the file's watcher misses it (and rely on throttling to de-dupe)
+ if (evPath && path !== evPath) {
+ fsWatchBroadcast(
+ sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)
+ );
+ }
+ };
+ try {
+ return fs.watch(path, options, handleEvent);
+ } catch (error) {
+ errHandler(error);
+ }
+}
+
+/**
+ * Helper for passing fs_watch event data to a collection of listeners
+ * @param {Path} fullPath absolute path bound to fs_watch instance
+ * @param {String} type listener type
+ * @param {*=} val1 arguments to be passed to listeners
+ * @param {*=} val2
+ * @param {*=} val3
+ */
+const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {
+ const cont = FsWatchInstances.get(fullPath);
+ if (!cont) return;
+ foreach(cont[type], (listener) => {
+ listener(val1, val2, val3);
+ });
+};
+
+/**
+ * Instantiates the fs_watch interface or binds listeners
+ * to an existing one covering the same file system entry
+ * @param {String} path
+ * @param {String} fullPath absolute path
+ * @param {Object} options to be passed to fs_watch
+ * @param {Object} handlers container for event listener functions
+ */
+const setFsWatchListener = (path, fullPath, options, handlers) => {
+ const {listener, errHandler, rawEmitter} = handlers;
+ let cont = FsWatchInstances.get(fullPath);
+
+ /** @type {fs.FSWatcher=} */
+ let watcher;
+ if (!options.persistent) {
+ watcher = createFsWatchInstance(
+ path, options, listener, errHandler, rawEmitter
+ );
+ return watcher.close.bind(watcher);
+ }
+ if (cont) {
+ addAndConvert(cont, KEY_LISTENERS, listener);
+ addAndConvert(cont, KEY_ERR, errHandler);
+ addAndConvert(cont, KEY_RAW, rawEmitter);
+ } else {
+ watcher = createFsWatchInstance(
+ path,
+ options,
+ fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),
+ errHandler, // no need to use broadcast here
+ fsWatchBroadcast.bind(null, fullPath, KEY_RAW)
+ );
+ if (!watcher) return;
+ watcher.on(EV_ERROR, async (error) => {
+ const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);
+ cont.watcherUnusable = true; // documented since Node 10.4.1
+ // Workaround for https://github.com/joyent/node/issues/4337
+ if (isWindows && error.code === 'EPERM') {
+ try {
+ const fd = await open(path, 'r');
+ await close(fd);
+ broadcastErr(error);
+ } catch (err) {}
+ } else {
+ broadcastErr(error);
+ }
+ });
+ cont = {
+ listeners: listener,
+ errHandlers: errHandler,
+ rawEmitters: rawEmitter,
+ watcher
+ };
+ FsWatchInstances.set(fullPath, cont);
+ }
+ // const index = cont.listeners.indexOf(listener);
+
+ // removes this instance's listeners and closes the underlying fs_watch
+ // instance if there are no more listeners left
+ return () => {
+ delFromSet(cont, KEY_LISTENERS, listener);
+ delFromSet(cont, KEY_ERR, errHandler);
+ delFromSet(cont, KEY_RAW, rawEmitter);
+ if (isEmptySet(cont.listeners)) {
+ // Check to protect against issue gh-730.
+ // if (cont.watcherUnusable) {
+ cont.watcher.close();
+ // }
+ FsWatchInstances.delete(fullPath);
+ HANDLER_KEYS.forEach(clearItem(cont));
+ cont.watcher = undefined;
+ Object.freeze(cont);
+ }
+ };
+};
+
+// fs_watchFile helpers
+
+// object to hold per-process fs_watchFile instances
+// (may be shared across chokidar FSWatcher instances)
+const FsWatchFileInstances = new Map();
+
+/**
+ * Instantiates the fs_watchFile interface or binds listeners
+ * to an existing one covering the same file system entry
+ * @param {String} path to be watched
+ * @param {String} fullPath absolute path
+ * @param {Object} options options to be passed to fs_watchFile
+ * @param {Object} handlers container for event listener functions
+ * @returns {Function} closer
+ */
+const setFsWatchFileListener = (path, fullPath, options, handlers) => {
+ const {listener, rawEmitter} = handlers;
+ let cont = FsWatchFileInstances.get(fullPath);
+
+ /* eslint-disable no-unused-vars, prefer-destructuring */
+ let listeners = new Set();
+ let rawEmitters = new Set();
+
+ const copts = cont && cont.options;
+ if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {
+ // "Upgrade" the watcher to persistence or a quicker interval.
+ // This creates some unlikely edge case issues if the user mixes
+ // settings in a very weird way, but solving for those cases
+ // doesn't seem worthwhile for the added complexity.
+ listeners = cont.listeners;
+ rawEmitters = cont.rawEmitters;
+ fs.unwatchFile(fullPath);
+ cont = undefined;
+ }
+
+ /* eslint-enable no-unused-vars, prefer-destructuring */
+
+ if (cont) {
+ addAndConvert(cont, KEY_LISTENERS, listener);
+ addAndConvert(cont, KEY_RAW, rawEmitter);
+ } else {
+ // TODO
+ // listeners.add(listener);
+ // rawEmitters.add(rawEmitter);
+ cont = {
+ listeners: listener,
+ rawEmitters: rawEmitter,
+ options,
+ watcher: fs.watchFile(fullPath, options, (curr, prev) => {
+ foreach(cont.rawEmitters, (rawEmitter) => {
+ rawEmitter(EV_CHANGE, fullPath, {curr, prev});
+ });
+ const currmtime = curr.mtimeMs;
+ if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {
+ foreach(cont.listeners, (listener) => listener(path, curr));
+ }
+ })
+ };
+ FsWatchFileInstances.set(fullPath, cont);
+ }
+ // const index = cont.listeners.indexOf(listener);
+
+ // Removes this instance's listeners and closes the underlying fs_watchFile
+ // instance if there are no more listeners left.
+ return () => {
+ delFromSet(cont, KEY_LISTENERS, listener);
+ delFromSet(cont, KEY_RAW, rawEmitter);
+ if (isEmptySet(cont.listeners)) {
+ FsWatchFileInstances.delete(fullPath);
+ fs.unwatchFile(fullPath);
+ cont.options = cont.watcher = undefined;
+ Object.freeze(cont);
+ }
+ };
+};
+
+/**
+ * @mixin
+ */
+class NodeFsHandler {
+
+/**
+ * @param {import("../index").FSWatcher} fsW
+ */
+constructor(fsW) {
+ this.fsw = fsW;
+ this._boundHandleError = (error) => fsW._handleError(error);
+}
+
+/**
+ * Watch file for changes with fs_watchFile or fs_watch.
+ * @param {String} path to file or dir
+ * @param {Function} listener on fs change
+ * @returns {Function} closer for the watcher instance
+ */
+_watchWithNodeFs(path, listener) {
+ const opts = this.fsw.options;
+ const directory = sysPath.dirname(path);
+ const basename = sysPath.basename(path);
+ const parent = this.fsw._getWatchedDir(directory);
+ parent.add(basename);
+ const absolutePath = sysPath.resolve(path);
+ const options = {persistent: opts.persistent};
+ if (!listener) listener = EMPTY_FN;
+
+ let closer;
+ if (opts.usePolling) {
+ options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?
+ opts.binaryInterval : opts.interval;
+ closer = setFsWatchFileListener(path, absolutePath, options, {
+ listener,
+ rawEmitter: this.fsw._emitRaw
+ });
+ } else {
+ closer = setFsWatchListener(path, absolutePath, options, {
+ listener,
+ errHandler: this._boundHandleError,
+ rawEmitter: this.fsw._emitRaw
+ });
+ }
+ return closer;
+}
+
+/**
+ * Watch a file and emit add event if warranted.
+ * @param {Path} file Path
+ * @param {fs.Stats} stats result of fs_stat
+ * @param {Boolean} initialAdd was the file added at watch instantiation?
+ * @returns {Function} closer for the watcher instance
+ */
+_handleFile(file, stats, initialAdd) {
+ if (this.fsw.closed) {
+ return;
+ }
+ const dirname = sysPath.dirname(file);
+ const basename = sysPath.basename(file);
+ const parent = this.fsw._getWatchedDir(dirname);
+ // stats is always present
+ let prevStats = stats;
+
+ // if the file is already being watched, do nothing
+ if (parent.has(basename)) return;
+
+ const listener = async (path, newStats) => {
+ if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;
+ if (!newStats || newStats.mtimeMs === 0) {
+ try {
+ const newStats = await stat(file);
+ if (this.fsw.closed) return;
+ // Check that change event was not fired because of changed only accessTime.
+ const at = newStats.atimeMs;
+ const mt = newStats.mtimeMs;
+ if (!at || at <= mt || mt !== prevStats.mtimeMs) {
+ this.fsw._emit(EV_CHANGE, file, newStats);
+ }
+ if (isLinux && prevStats.ino !== newStats.ino) {
+ this.fsw._closeFile(path)
+ prevStats = newStats;
+ this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));
+ } else {
+ prevStats = newStats;
+ }
+ } catch (error) {
+ // Fix issues where mtime is null but file is still present
+ this.fsw._remove(dirname, basename);
+ }
+ // add is about to be emitted if file not already tracked in parent
+ } else if (parent.has(basename)) {
+ // Check that change event was not fired because of changed only accessTime.
+ const at = newStats.atimeMs;
+ const mt = newStats.mtimeMs;
+ if (!at || at <= mt || mt !== prevStats.mtimeMs) {
+ this.fsw._emit(EV_CHANGE, file, newStats);
+ }
+ prevStats = newStats;
+ }
+ }
+ // kick off the watcher
+ const closer = this._watchWithNodeFs(file, listener);
+
+ // emit an add event if we're supposed to
+ if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {
+ if (!this.fsw._throttle(EV_ADD, file, 0)) return;
+ this.fsw._emit(EV_ADD, file, stats);
+ }
+
+ return closer;
+}
+
+/**
+ * Handle symlinks encountered while reading a dir.
+ * @param {Object} entry returned by readdirp
+ * @param {String} directory path of dir being read
+ * @param {String} path of this item
+ * @param {String} item basename of this item
+ * @returns {Promise} true if no more processing is needed for this entry.
+ */
+async _handleSymlink(entry, directory, path, item) {
+ if (this.fsw.closed) {
+ return;
+ }
+ const full = entry.fullPath;
+ const dir = this.fsw._getWatchedDir(directory);
+
+ if (!this.fsw.options.followSymlinks) {
+ // watch symlink directly (don't follow) and detect changes
+ this.fsw._incrReadyCount();
+
+ let linkPath;
+ try {
+ linkPath = await fsrealpath(path);
+ } catch (e) {
+ this.fsw._emitReady();
+ return true;
+ }
+
+ if (this.fsw.closed) return;
+ if (dir.has(item)) {
+ if (this.fsw._symlinkPaths.get(full) !== linkPath) {
+ this.fsw._symlinkPaths.set(full, linkPath);
+ this.fsw._emit(EV_CHANGE, path, entry.stats);
+ }
+ } else {
+ dir.add(item);
+ this.fsw._symlinkPaths.set(full, linkPath);
+ this.fsw._emit(EV_ADD, path, entry.stats);
+ }
+ this.fsw._emitReady();
+ return true;
+ }
+
+ // don't follow the same symlink more than once
+ if (this.fsw._symlinkPaths.has(full)) {
+ return true;
+ }
+
+ this.fsw._symlinkPaths.set(full, true);
+}
+
+_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {
+ // Normalize the directory name on Windows
+ directory = sysPath.join(directory, EMPTY_STR);
+
+ if (!wh.hasGlob) {
+ throttler = this.fsw._throttle('readdir', directory, 1000);
+ if (!throttler) return;
+ }
+
+ const previous = this.fsw._getWatchedDir(wh.path);
+ const current = new Set();
+
+ let stream = this.fsw._readdirp(directory, {
+ fileFilter: entry => wh.filterPath(entry),
+ directoryFilter: entry => wh.filterDir(entry),
+ depth: 0
+ }).on(STR_DATA, async (entry) => {
+ if (this.fsw.closed) {
+ stream = undefined;
+ return;
+ }
+ const item = entry.path;
+ let path = sysPath.join(directory, item);
+ current.add(item);
+
+ if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {
+ return;
+ }
+
+ if (this.fsw.closed) {
+ stream = undefined;
+ return;
+ }
+ // Files that present in current directory snapshot
+ // but absent in previous are added to watch list and
+ // emit `add` event.
+ if (item === target || !target && !previous.has(item)) {
+ this.fsw._incrReadyCount();
+
+ // ensure relativeness of path is preserved in case of watcher reuse
+ path = sysPath.join(dir, sysPath.relative(dir, path));
+
+ this._addToNodeFs(path, initialAdd, wh, depth + 1);
+ }
+ }).on(EV_ERROR, this._boundHandleError);
+
+ return new Promise(resolve =>
+ stream.once(STR_END, () => {
+ if (this.fsw.closed) {
+ stream = undefined;
+ return;
+ }
+ const wasThrottled = throttler ? throttler.clear() : false;
+
+ resolve();
+
+ // Files that absent in current directory snapshot
+ // but present in previous emit `remove` event
+ // and are removed from @watched[directory].
+ previous.getChildren().filter((item) => {
+ return item !== directory &&
+ !current.has(item) &&
+ // in case of intersecting globs;
+ // a path may have been filtered out of this readdir, but
+ // shouldn't be removed because it matches a different glob
+ (!wh.hasGlob || wh.filterPath({
+ fullPath: sysPath.resolve(directory, item)
+ }));
+ }).forEach((item) => {
+ this.fsw._remove(directory, item);
+ });
+
+ stream = undefined;
+
+ // one more time for any missed in case changes came in extremely quickly
+ if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);
+ })
+ );
+}
+
+/**
+ * Read directory to add / remove files from `@watched` list and re-read it on change.
+ * @param {String} dir fs path
+ * @param {fs.Stats} stats
+ * @param {Boolean} initialAdd
+ * @param {Number} depth relative to user-supplied path
+ * @param {String} target child path targeted for watch
+ * @param {Object} wh Common watch helpers for this path
+ * @param {String} realpath
+ * @returns {Promise} closer for the watcher instance.
+ */
+async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {
+ const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));
+ const tracked = parentDir.has(sysPath.basename(dir));
+ if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {
+ if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);
+ }
+
+ // ensure dir is tracked (harmless if redundant)
+ parentDir.add(sysPath.basename(dir));
+ this.fsw._getWatchedDir(dir);
+ let throttler;
+ let closer;
+
+ const oDepth = this.fsw.options.depth;
+ if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {
+ if (!target) {
+ await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);
+ if (this.fsw.closed) return;
+ }
+
+ closer = this._watchWithNodeFs(dir, (dirPath, stats) => {
+ // if current directory is removed, do nothing
+ if (stats && stats.mtimeMs === 0) return;
+
+ this._handleRead(dirPath, false, wh, target, dir, depth, throttler);
+ });
+ }
+ return closer;
+}
+
+/**
+ * Handle added file, directory, or glob pattern.
+ * Delegates call to _handleFile / _handleDir after checks.
+ * @param {String} path to file or ir
+ * @param {Boolean} initialAdd was the file added at watch instantiation?
+ * @param {Object} priorWh depth relative to user-supplied path
+ * @param {Number} depth Child path actually targeted for watch
+ * @param {String=} target Child path actually targeted for watch
+ * @returns {Promise}
+ */
+async _addToNodeFs(path, initialAdd, priorWh, depth, target) {
+ const ready = this.fsw._emitReady;
+ if (this.fsw._isIgnored(path) || this.fsw.closed) {
+ ready();
+ return false;
+ }
+
+ const wh = this.fsw._getWatchHelpers(path, depth);
+ if (!wh.hasGlob && priorWh) {
+ wh.hasGlob = priorWh.hasGlob;
+ wh.globFilter = priorWh.globFilter;
+ wh.filterPath = entry => priorWh.filterPath(entry);
+ wh.filterDir = entry => priorWh.filterDir(entry);
+ }
+
+ // evaluate what is at the path we're being asked to watch
+ try {
+ const stats = await statMethods[wh.statMethod](wh.watchPath);
+ if (this.fsw.closed) return;
+ if (this.fsw._isIgnored(wh.watchPath, stats)) {
+ ready();
+ return false;
+ }
+
+ const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);
+ let closer;
+ if (stats.isDirectory()) {
+ const absPath = sysPath.resolve(path);
+ const targetPath = follow ? await fsrealpath(path) : path;
+ if (this.fsw.closed) return;
+ closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);
+ if (this.fsw.closed) return;
+ // preserve this symlink's target path
+ if (absPath !== targetPath && targetPath !== undefined) {
+ this.fsw._symlinkPaths.set(absPath, targetPath);
+ }
+ } else if (stats.isSymbolicLink()) {
+ const targetPath = follow ? await fsrealpath(path) : path;
+ if (this.fsw.closed) return;
+ const parent = sysPath.dirname(wh.watchPath);
+ this.fsw._getWatchedDir(parent).add(wh.watchPath);
+ this.fsw._emit(EV_ADD, wh.watchPath, stats);
+ closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);
+ if (this.fsw.closed) return;
+
+ // preserve this symlink's target path
+ if (targetPath !== undefined) {
+ this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);
+ }
+ } else {
+ closer = this._handleFile(wh.watchPath, stats, initialAdd);
+ }
+ ready();
+
+ this.fsw._addPathCloser(path, closer);
+ return false;
+
+ } catch (error) {
+ if (this.fsw._handleError(error)) {
+ ready();
+ return path;
+ }
+ }
+}
+
+}
+
+module.exports = NodeFsHandler;
diff --git a/node_modules/chokidar/package.json b/node_modules/chokidar/package.json
new file mode 100644
index 0000000..6c3cd27
--- /dev/null
+++ b/node_modules/chokidar/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "chokidar",
+ "description": "Minimal and efficient cross-platform file watching library",
+ "version": "3.5.3",
+ "homepage": "https://github.com/paulmillr/chokidar",
+ "author": "Paul Miller (https://paulmillr.com)",
+ "contributors": [
+ "Paul Miller (https://paulmillr.com)",
+ "Elan Shanker"
+ ],
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "main": "index.js",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "devDependencies": {
+ "@types/node": "^14",
+ "chai": "^4.3",
+ "dtslint": "^3.3.0",
+ "eslint": "^7.0.0",
+ "mocha": "^7.0.0",
+ "nyc": "^15.0.0",
+ "rimraf": "^3.0.0",
+ "sinon": "^9.0.1",
+ "sinon-chai": "^3.3.0",
+ "typescript": "~4.4.3",
+ "upath": "^1.2.0"
+ },
+ "files": [
+ "index.js",
+ "lib/*.js",
+ "types/index.d.ts"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/paulmillr/chokidar.git"
+ },
+ "bugs": {
+ "url": "https://github.com/paulmillr/chokidar/issues"
+ },
+ "license": "MIT",
+ "scripts": {
+ "dtslint": "dtslint types",
+ "lint": "eslint --report-unused-disable-directives --ignore-path .gitignore .",
+ "mocha": "mocha --exit --timeout 90000",
+ "test": "npm run lint && npm run mocha"
+ },
+ "keywords": [
+ "fs",
+ "watch",
+ "watchFile",
+ "watcher",
+ "watching",
+ "file",
+ "fsevents"
+ ],
+ "types": "./types/index.d.ts",
+ "nyc": {
+ "include": [
+ "index.js",
+ "lib/*.js"
+ ],
+ "reporter": [
+ "html",
+ "text"
+ ]
+ },
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
+}
diff --git a/node_modules/chokidar/types/index.d.ts b/node_modules/chokidar/types/index.d.ts
new file mode 100644
index 0000000..aab8e33
--- /dev/null
+++ b/node_modules/chokidar/types/index.d.ts
@@ -0,0 +1,188 @@
+// TypeScript Version: 3.0
+
+///
+
+import * as fs from "fs";
+import { EventEmitter } from "events";
+import { Matcher } from 'anymatch';
+
+export class FSWatcher extends EventEmitter implements fs.FSWatcher {
+ options: WatchOptions;
+
+ /**
+ * Constructs a new FSWatcher instance with optional WatchOptions parameter.
+ */
+ constructor(options?: WatchOptions);
+
+ /**
+ * Add files, directories, or glob patterns for tracking. Takes an array of strings or just one
+ * string.
+ */
+ add(paths: string | ReadonlyArray): this;
+
+ /**
+ * Stop watching files, directories, or glob patterns. Takes an array of strings or just one
+ * string.
+ */
+ unwatch(paths: string | ReadonlyArray): this;
+
+ /**
+ * Returns an object representing all the paths on the file system being watched by this
+ * `FSWatcher` instance. The object's keys are all the directories (using absolute paths unless
+ * the `cwd` option was used), and the values are arrays of the names of the items contained in
+ * each directory.
+ */
+ getWatched(): {
+ [directory: string]: string[];
+ };
+
+ /**
+ * Removes all listeners from watched files.
+ */
+ close(): Promise;
+
+ on(event: 'add'|'addDir'|'change', listener: (path: string, stats?: fs.Stats) => void): this;
+
+ on(event: 'all', listener: (eventName: 'add'|'addDir'|'change'|'unlink'|'unlinkDir', path: string, stats?: fs.Stats) => void): this;
+
+ /**
+ * Error occurred
+ */
+ on(event: 'error', listener: (error: Error) => void): this;
+
+ /**
+ * Exposes the native Node `fs.FSWatcher events`
+ */
+ on(event: 'raw', listener: (eventName: string, path: string, details: any) => void): this;
+
+ /**
+ * Fires when the initial scan is complete
+ */
+ on(event: 'ready', listener: () => void): this;
+
+ on(event: 'unlink'|'unlinkDir', listener: (path: string) => void): this;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+}
+
+export interface WatchOptions {
+ /**
+ * Indicates whether the process should continue to run as long as files are being watched. If
+ * set to `false` when using `fsevents` to watch, no more events will be emitted after `ready`,
+ * even if the process continues to run.
+ */
+ persistent?: boolean;
+
+ /**
+ * ([anymatch](https://github.com/micromatch/anymatch)-compatible definition) Defines files/paths to
+ * be ignored. The whole relative or absolute path is tested, not just filename. If a function
+ * with two arguments is provided, it gets called twice per path - once with a single argument
+ * (the path), second time with two arguments (the path and the
+ * [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object of that path).
+ */
+ ignored?: Matcher;
+
+ /**
+ * If set to `false` then `add`/`addDir` events are also emitted for matching paths while
+ * instantiating the watching as chokidar discovers these file paths (before the `ready` event).
+ */
+ ignoreInitial?: boolean;
+
+ /**
+ * When `false`, only the symlinks themselves will be watched for changes instead of following
+ * the link references and bubbling events through the link's path.
+ */
+ followSymlinks?: boolean;
+
+ /**
+ * The base directory from which watch `paths` are to be derived. Paths emitted with events will
+ * be relative to this.
+ */
+ cwd?: string;
+
+ /**
+ * If set to true then the strings passed to .watch() and .add() are treated as literal path
+ * names, even if they look like globs. Default: false.
+ */
+ disableGlobbing?: boolean;
+
+ /**
+ * Whether to use fs.watchFile (backed by polling), or fs.watch. If polling leads to high CPU
+ * utilization, consider setting this to `false`. It is typically necessary to **set this to
+ * `true` to successfully watch files over a network**, and it may be necessary to successfully
+ * watch files in other non-standard situations. Setting to `true` explicitly on OS X overrides
+ * the `useFsEvents` default.
+ */
+ usePolling?: boolean;
+
+ /**
+ * Whether to use the `fsevents` watching interface if available. When set to `true` explicitly
+ * and `fsevents` is available this supercedes the `usePolling` setting. When set to `false` on
+ * OS X, `usePolling: true` becomes the default.
+ */
+ useFsEvents?: boolean;
+
+ /**
+ * If relying upon the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that
+ * may get passed with `add`, `addDir`, and `change` events, set this to `true` to ensure it is
+ * provided even in cases where it wasn't already available from the underlying watch events.
+ */
+ alwaysStat?: boolean;
+
+ /**
+ * If set, limits how many levels of subdirectories will be traversed.
+ */
+ depth?: number;
+
+ /**
+ * Interval of file system polling.
+ */
+ interval?: number;
+
+ /**
+ * Interval of file system polling for binary files. ([see list of binary extensions](https://gi
+ * thub.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))
+ */
+ binaryInterval?: number;
+
+ /**
+ * Indicates whether to watch files that don't have read permissions if possible. If watching
+ * fails due to `EPERM` or `EACCES` with this set to `true`, the errors will be suppressed
+ * silently.
+ */
+ ignorePermissionErrors?: boolean;
+
+ /**
+ * `true` if `useFsEvents` and `usePolling` are `false`). Automatically filters out artifacts
+ * that occur when using editors that use "atomic writes" instead of writing directly to the
+ * source file. If a file is re-added within 100 ms of being deleted, Chokidar emits a `change`
+ * event rather than `unlink` then `add`. If the default of 100 ms does not work well for you,
+ * you can override it by setting `atomic` to a custom value, in milliseconds.
+ */
+ atomic?: boolean | number;
+
+ /**
+ * can be set to an object in order to adjust timing params:
+ */
+ awaitWriteFinish?: AwaitWriteFinishOptions | boolean;
+}
+
+export interface AwaitWriteFinishOptions {
+ /**
+ * Amount of time in milliseconds for a file size to remain constant before emitting its event.
+ */
+ stabilityThreshold?: number;
+
+ /**
+ * File size polling interval.
+ */
+ pollInterval?: number;
+}
+
+/**
+ * produces an instance of `FSWatcher`.
+ */
+export function watch(
+ paths: string | ReadonlyArray,
+ options?: WatchOptions
+): FSWatcher;
diff --git a/node_modules/combined-stream/License b/node_modules/combined-stream/License
new file mode 100644
index 0000000..4804b7a
--- /dev/null
+++ b/node_modules/combined-stream/License
@@ -0,0 +1,19 @@
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/combined-stream/Readme.md b/node_modules/combined-stream/Readme.md
new file mode 100644
index 0000000..9e367b5
--- /dev/null
+++ b/node_modules/combined-stream/Readme.md
@@ -0,0 +1,138 @@
+# combined-stream
+
+A stream that emits multiple other streams one after another.
+
+**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`.
+
+- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module.
+
+- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another.
+
+## Installation
+
+``` bash
+npm install combined-stream
+```
+
+## Usage
+
+Here is a simple example that shows how you can use combined-stream to combine
+two files into one:
+
+``` javascript
+var CombinedStream = require('combined-stream');
+var fs = require('fs');
+
+var combinedStream = CombinedStream.create();
+combinedStream.append(fs.createReadStream('file1.txt'));
+combinedStream.append(fs.createReadStream('file2.txt'));
+
+combinedStream.pipe(fs.createWriteStream('combined.txt'));
+```
+
+While the example above works great, it will pause all source streams until
+they are needed. If you don't want that to happen, you can set `pauseStreams`
+to `false`:
+
+``` javascript
+var CombinedStream = require('combined-stream');
+var fs = require('fs');
+
+var combinedStream = CombinedStream.create({pauseStreams: false});
+combinedStream.append(fs.createReadStream('file1.txt'));
+combinedStream.append(fs.createReadStream('file2.txt'));
+
+combinedStream.pipe(fs.createWriteStream('combined.txt'));
+```
+
+However, what if you don't have all the source streams yet, or you don't want
+to allocate the resources (file descriptors, memory, etc.) for them right away?
+Well, in that case you can simply provide a callback that supplies the stream
+by calling a `next()` function:
+
+``` javascript
+var CombinedStream = require('combined-stream');
+var fs = require('fs');
+
+var combinedStream = CombinedStream.create();
+combinedStream.append(function(next) {
+ next(fs.createReadStream('file1.txt'));
+});
+combinedStream.append(function(next) {
+ next(fs.createReadStream('file2.txt'));
+});
+
+combinedStream.pipe(fs.createWriteStream('combined.txt'));
+```
+
+## API
+
+### CombinedStream.create([options])
+
+Returns a new combined stream object. Available options are:
+
+* `maxDataSize`
+* `pauseStreams`
+
+The effect of those options is described below.
+
+### combinedStream.pauseStreams = `true`
+
+Whether to apply back pressure to the underlaying streams. If set to `false`,
+the underlaying streams will never be paused. If set to `true`, the
+underlaying streams will be paused right after being appended, as well as when
+`delayedStream.pipe()` wants to throttle.
+
+### combinedStream.maxDataSize = `2 * 1024 * 1024`
+
+The maximum amount of bytes (or characters) to buffer for all source streams.
+If this value is exceeded, `combinedStream` emits an `'error'` event.
+
+### combinedStream.dataSize = `0`
+
+The amount of bytes (or characters) currently buffered by `combinedStream`.
+
+### combinedStream.append(stream)
+
+Appends the given `stream` to the combinedStream object. If `pauseStreams` is
+set to `true, this stream will also be paused right away.
+
+`streams` can also be a function that takes one parameter called `next`. `next`
+is a function that must be invoked in order to provide the `next` stream, see
+example above.
+
+Regardless of how the `stream` is appended, combined-stream always attaches an
+`'error'` listener to it, so you don't have to do that manually.
+
+Special case: `stream` can also be a String or Buffer.
+
+### combinedStream.write(data)
+
+You should not call this, `combinedStream` takes care of piping the appended
+streams into itself for you.
+
+### combinedStream.resume()
+
+Causes `combinedStream` to start drain the streams it manages. The function is
+idempotent, and also emits a `'resume'` event each time which usually goes to
+the stream that is currently being drained.
+
+### combinedStream.pause();
+
+If `combinedStream.pauseStreams` is set to `false`, this does nothing.
+Otherwise a `'pause'` event is emitted, this goes to the stream that is
+currently being drained, so you can use it to apply back pressure.
+
+### combinedStream.end();
+
+Sets `combinedStream.writable` to false, emits an `'end'` event, and removes
+all streams from the queue.
+
+### combinedStream.destroy();
+
+Same as `combinedStream.end()`, except it emits a `'close'` event instead of
+`'end'`.
+
+## License
+
+combined-stream is licensed under the MIT license.
diff --git a/node_modules/combined-stream/lib/combined_stream.js b/node_modules/combined-stream/lib/combined_stream.js
new file mode 100644
index 0000000..125f097
--- /dev/null
+++ b/node_modules/combined-stream/lib/combined_stream.js
@@ -0,0 +1,208 @@
+var util = require('util');
+var Stream = require('stream').Stream;
+var DelayedStream = require('delayed-stream');
+
+module.exports = CombinedStream;
+function CombinedStream() {
+ this.writable = false;
+ this.readable = true;
+ this.dataSize = 0;
+ this.maxDataSize = 2 * 1024 * 1024;
+ this.pauseStreams = true;
+
+ this._released = false;
+ this._streams = [];
+ this._currentStream = null;
+ this._insideLoop = false;
+ this._pendingNext = false;
+}
+util.inherits(CombinedStream, Stream);
+
+CombinedStream.create = function(options) {
+ var combinedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ combinedStream[option] = options[option];
+ }
+
+ return combinedStream;
+};
+
+CombinedStream.isStreamLike = function(stream) {
+ return (typeof stream !== 'function')
+ && (typeof stream !== 'string')
+ && (typeof stream !== 'boolean')
+ && (typeof stream !== 'number')
+ && (!Buffer.isBuffer(stream));
+};
+
+CombinedStream.prototype.append = function(stream) {
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+
+ if (isStreamLike) {
+ if (!(stream instanceof DelayedStream)) {
+ var newStream = DelayedStream.create(stream, {
+ maxDataSize: Infinity,
+ pauseStream: this.pauseStreams,
+ });
+ stream.on('data', this._checkDataSize.bind(this));
+ stream = newStream;
+ }
+
+ this._handleErrors(stream);
+
+ if (this.pauseStreams) {
+ stream.pause();
+ }
+ }
+
+ this._streams.push(stream);
+ return this;
+};
+
+CombinedStream.prototype.pipe = function(dest, options) {
+ Stream.prototype.pipe.call(this, dest, options);
+ this.resume();
+ return dest;
+};
+
+CombinedStream.prototype._getNext = function() {
+ this._currentStream = null;
+
+ if (this._insideLoop) {
+ this._pendingNext = true;
+ return; // defer call
+ }
+
+ this._insideLoop = true;
+ try {
+ do {
+ this._pendingNext = false;
+ this._realGetNext();
+ } while (this._pendingNext);
+ } finally {
+ this._insideLoop = false;
+ }
+};
+
+CombinedStream.prototype._realGetNext = function() {
+ var stream = this._streams.shift();
+
+
+ if (typeof stream == 'undefined') {
+ this.end();
+ return;
+ }
+
+ if (typeof stream !== 'function') {
+ this._pipeNext(stream);
+ return;
+ }
+
+ var getStream = stream;
+ getStream(function(stream) {
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+ if (isStreamLike) {
+ stream.on('data', this._checkDataSize.bind(this));
+ this._handleErrors(stream);
+ }
+
+ this._pipeNext(stream);
+ }.bind(this));
+};
+
+CombinedStream.prototype._pipeNext = function(stream) {
+ this._currentStream = stream;
+
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+ if (isStreamLike) {
+ stream.on('end', this._getNext.bind(this));
+ stream.pipe(this, {end: false});
+ return;
+ }
+
+ var value = stream;
+ this.write(value);
+ this._getNext();
+};
+
+CombinedStream.prototype._handleErrors = function(stream) {
+ var self = this;
+ stream.on('error', function(err) {
+ self._emitError(err);
+ });
+};
+
+CombinedStream.prototype.write = function(data) {
+ this.emit('data', data);
+};
+
+CombinedStream.prototype.pause = function() {
+ if (!this.pauseStreams) {
+ return;
+ }
+
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
+ this.emit('pause');
+};
+
+CombinedStream.prototype.resume = function() {
+ if (!this._released) {
+ this._released = true;
+ this.writable = true;
+ this._getNext();
+ }
+
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
+ this.emit('resume');
+};
+
+CombinedStream.prototype.end = function() {
+ this._reset();
+ this.emit('end');
+};
+
+CombinedStream.prototype.destroy = function() {
+ this._reset();
+ this.emit('close');
+};
+
+CombinedStream.prototype._reset = function() {
+ this.writable = false;
+ this._streams = [];
+ this._currentStream = null;
+};
+
+CombinedStream.prototype._checkDataSize = function() {
+ this._updateDataSize();
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
+ this._emitError(new Error(message));
+};
+
+CombinedStream.prototype._updateDataSize = function() {
+ this.dataSize = 0;
+
+ var self = this;
+ this._streams.forEach(function(stream) {
+ if (!stream.dataSize) {
+ return;
+ }
+
+ self.dataSize += stream.dataSize;
+ });
+
+ if (this._currentStream && this._currentStream.dataSize) {
+ this.dataSize += this._currentStream.dataSize;
+ }
+};
+
+CombinedStream.prototype._emitError = function(err) {
+ this._reset();
+ this.emit('error', err);
+};
diff --git a/node_modules/combined-stream/package.json b/node_modules/combined-stream/package.json
new file mode 100644
index 0000000..6982b6d
--- /dev/null
+++ b/node_modules/combined-stream/package.json
@@ -0,0 +1,25 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "name": "combined-stream",
+ "description": "A stream that emits multiple other streams one after another.",
+ "version": "1.0.8",
+ "homepage": "https://github.com/felixge/node-combined-stream",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/felixge/node-combined-stream.git"
+ },
+ "main": "./lib/combined_stream",
+ "scripts": {
+ "test": "node test/run.js"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "devDependencies": {
+ "far": "~0.0.7"
+ },
+ "license": "MIT"
+}
diff --git a/node_modules/combined-stream/yarn.lock b/node_modules/combined-stream/yarn.lock
new file mode 100644
index 0000000..7edf418
--- /dev/null
+++ b/node_modules/combined-stream/yarn.lock
@@ -0,0 +1,17 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+far@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7"
+ dependencies:
+ oop "0.0.3"
+
+oop@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401"
diff --git a/node_modules/concat-map/.travis.yml b/node_modules/concat-map/.travis.yml
new file mode 100644
index 0000000..f1d0f13
--- /dev/null
+++ b/node_modules/concat-map/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.4
+ - 0.6
diff --git a/node_modules/concat-map/LICENSE b/node_modules/concat-map/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/concat-map/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/concat-map/README.markdown b/node_modules/concat-map/README.markdown
new file mode 100644
index 0000000..408f70a
--- /dev/null
+++ b/node_modules/concat-map/README.markdown
@@ -0,0 +1,62 @@
+concat-map
+==========
+
+Concatenative mapdashery.
+
+[](http://ci.testling.com/substack/node-concat-map)
+
+[](http://travis-ci.org/substack/node-concat-map)
+
+example
+=======
+
+``` js
+var concatMap = require('concat-map');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
+```
+
+***
+
+```
+[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
+```
+
+methods
+=======
+
+``` js
+var concatMap = require('concat-map')
+```
+
+concatMap(xs, fn)
+-----------------
+
+Return an array of concatenated elements by calling `fn(x, i)` for each element
+`x` and each index `i` in the array `xs`.
+
+When `fn(x, i)` returns an array, its result will be concatenated with the
+result array. If `fn(x, i)` returns anything else, that value will be pushed
+onto the end of the result array.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install concat-map
+```
+
+license
+=======
+
+MIT
+
+notes
+=====
+
+This module was written while sitting high above the ground in a tree.
diff --git a/node_modules/concat-map/example/map.js b/node_modules/concat-map/example/map.js
new file mode 100644
index 0000000..3365621
--- /dev/null
+++ b/node_modules/concat-map/example/map.js
@@ -0,0 +1,6 @@
+var concatMap = require('../');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
diff --git a/node_modules/concat-map/index.js b/node_modules/concat-map/index.js
new file mode 100644
index 0000000..b29a781
--- /dev/null
+++ b/node_modules/concat-map/index.js
@@ -0,0 +1,13 @@
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+var isArray = Array.isArray || function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]';
+};
diff --git a/node_modules/concat-map/package.json b/node_modules/concat-map/package.json
new file mode 100644
index 0000000..d3640e6
--- /dev/null
+++ b/node_modules/concat-map/package.json
@@ -0,0 +1,43 @@
+{
+ "name" : "concat-map",
+ "description" : "concatenative mapdashery",
+ "version" : "0.0.1",
+ "repository" : {
+ "type" : "git",
+ "url" : "git://github.com/substack/node-concat-map.git"
+ },
+ "main" : "index.js",
+ "keywords" : [
+ "concat",
+ "concatMap",
+ "map",
+ "functional",
+ "higher-order"
+ ],
+ "directories" : {
+ "example" : "example",
+ "test" : "test"
+ },
+ "scripts" : {
+ "test" : "tape test/*.js"
+ },
+ "devDependencies" : {
+ "tape" : "~2.4.0"
+ },
+ "license" : "MIT",
+ "author" : {
+ "name" : "James Halliday",
+ "email" : "mail@substack.net",
+ "url" : "http://substack.net"
+ },
+ "testling" : {
+ "files" : "test/*.js",
+ "browsers" : {
+ "ie" : [ 6, 7, 8, 9 ],
+ "ff" : [ 3.5, 10, 15.0 ],
+ "chrome" : [ 10, 22 ],
+ "safari" : [ 5.1 ],
+ "opera" : [ 12 ]
+ }
+ }
+}
diff --git a/node_modules/concat-map/test/map.js b/node_modules/concat-map/test/map.js
new file mode 100644
index 0000000..fdbd702
--- /dev/null
+++ b/node_modules/concat-map/test/map.js
@@ -0,0 +1,39 @@
+var concatMap = require('../');
+var test = require('tape');
+
+test('empty or not', function (t) {
+ var xs = [ 1, 2, 3, 4, 5, 6 ];
+ var ixes = [];
+ var ys = concatMap(xs, function (x, ix) {
+ ixes.push(ix);
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+ });
+ t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);
+ t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);
+ t.end();
+});
+
+test('always something', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('scalars', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : x;
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('undefs', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function () {});
+ t.same(ys, [ undefined, undefined, undefined, undefined ]);
+ t.end();
+});
diff --git a/node_modules/content-disposition/HISTORY.md b/node_modules/content-disposition/HISTORY.md
new file mode 100644
index 0000000..488effa
--- /dev/null
+++ b/node_modules/content-disposition/HISTORY.md
@@ -0,0 +1,60 @@
+0.5.4 / 2021-12-10
+==================
+
+ * deps: safe-buffer@5.2.1
+
+0.5.3 / 2018-12-17
+==================
+
+ * Use `safe-buffer` for improved Buffer API
+
+0.5.2 / 2016-12-08
+==================
+
+ * Fix `parse` to accept any linear whitespace character
+
+0.5.1 / 2016-01-17
+==================
+
+ * perf: enable strict mode
+
+0.5.0 / 2014-10-11
+==================
+
+ * Add `parse` function
+
+0.4.0 / 2014-09-21
+==================
+
+ * Expand non-Unicode `filename` to the full ISO-8859-1 charset
+
+0.3.0 / 2014-09-20
+==================
+
+ * Add `fallback` option
+ * Add `type` option
+
+0.2.0 / 2014-09-19
+==================
+
+ * Reduce ambiguity of file names with hex escape in buggy browsers
+
+0.1.2 / 2014-09-19
+==================
+
+ * Fix periodic invalid Unicode filename header
+
+0.1.1 / 2014-09-19
+==================
+
+ * Fix invalid characters appearing in `filename*` parameter
+
+0.1.0 / 2014-09-18
+==================
+
+ * Make the `filename` argument optional
+
+0.0.0 / 2014-09-18
+==================
+
+ * Initial release
diff --git a/node_modules/content-disposition/LICENSE b/node_modules/content-disposition/LICENSE
new file mode 100644
index 0000000..84441fb
--- /dev/null
+++ b/node_modules/content-disposition/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2014-2017 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/content-disposition/README.md b/node_modules/content-disposition/README.md
new file mode 100644
index 0000000..3a0bb05
--- /dev/null
+++ b/node_modules/content-disposition/README.md
@@ -0,0 +1,142 @@
+# content-disposition
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][github-actions-ci-image]][github-actions-ci-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Create and parse HTTP `Content-Disposition` header
+
+## Installation
+
+```sh
+$ npm install content-disposition
+```
+
+## API
+
+```js
+var contentDisposition = require('content-disposition')
+```
+
+### contentDisposition(filename, options)
+
+Create an attachment `Content-Disposition` header value using the given file name,
+if supplied. The `filename` is optional and if no file name is desired, but you
+want to specify `options`, set `filename` to `undefined`.
+
+```js
+res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf'))
+```
+
+**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this
+header through a means different from `setHeader` in Node.js, you'll want to specify
+the `'binary'` encoding in Node.js.
+
+#### Options
+
+`contentDisposition` accepts these properties in the options object.
+
+##### fallback
+
+If the `filename` option is outside ISO-8859-1, then the file name is actually
+stored in a supplemental field for clients that support Unicode file names and
+a ISO-8859-1 version of the file name is automatically generated.
+
+This specifies the ISO-8859-1 file name to override the automatic generation or
+disables the generation all together, defaults to `true`.
+
+ - A string will specify the ISO-8859-1 file name to use in place of automatic
+ generation.
+ - `false` will disable including a ISO-8859-1 file name and only include the
+ Unicode version (unless the file name is already ISO-8859-1).
+ - `true` will enable automatic generation if the file name is outside ISO-8859-1.
+
+If the `filename` option is ISO-8859-1 and this option is specified and has a
+different value, then the `filename` option is encoded in the extended field
+and this set as the fallback field, even though they are both ISO-8859-1.
+
+##### type
+
+Specifies the disposition type, defaults to `"attachment"`. This can also be
+`"inline"`, or any other value (all values except inline are treated like
+`attachment`, but can convey additional information if both parties agree to
+it). The type is normalized to lower-case.
+
+### contentDisposition.parse(string)
+
+```js
+var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt')
+```
+
+Parse a `Content-Disposition` header string. This automatically handles extended
+("Unicode") parameters by decoding them and providing them under the standard
+parameter name. This will return an object with the following properties (examples
+are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`):
+
+ - `type`: The disposition type (always lower case). Example: `'attachment'`
+
+ - `parameters`: An object of the parameters in the disposition (name of parameter
+ always lower case and extended versions replace non-extended versions). Example:
+ `{filename: "€ rates.txt"}`
+
+## Examples
+
+### Send a file for download
+
+```js
+var contentDisposition = require('content-disposition')
+var destroy = require('destroy')
+var fs = require('fs')
+var http = require('http')
+var onFinished = require('on-finished')
+
+var filePath = '/path/to/public/plans.pdf'
+
+http.createServer(function onRequest (req, res) {
+ // set headers
+ res.setHeader('Content-Type', 'application/pdf')
+ res.setHeader('Content-Disposition', contentDisposition(filePath))
+
+ // send file
+ var stream = fs.createReadStream(filePath)
+ stream.pipe(res)
+ onFinished(res, function () {
+ destroy(stream)
+ })
+})
+```
+
+## Testing
+
+```sh
+$ npm test
+```
+
+## References
+
+- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616]
+- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987]
+- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266]
+- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231]
+
+[rfc-2616]: https://tools.ietf.org/html/rfc2616
+[rfc-5987]: https://tools.ietf.org/html/rfc5987
+[rfc-6266]: https://tools.ietf.org/html/rfc6266
+[tc-2231]: http://greenbytes.de/tech/tc2231/
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/content-disposition.svg
+[npm-url]: https://npmjs.org/package/content-disposition
+[node-version-image]: https://img.shields.io/node/v/content-disposition.svg
+[node-version-url]: https://nodejs.org/en/download
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg
+[downloads-url]: https://npmjs.org/package/content-disposition
+[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/content-disposition/ci/master?label=ci
+[github-actions-ci-url]: https://github.com/jshttp/content-disposition?query=workflow%3Aci
diff --git a/node_modules/content-disposition/index.js b/node_modules/content-disposition/index.js
new file mode 100644
index 0000000..ecec899
--- /dev/null
+++ b/node_modules/content-disposition/index.js
@@ -0,0 +1,458 @@
+/*!
+ * content-disposition
+ * Copyright(c) 2014-2017 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = contentDisposition
+module.exports.parse = parse
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var basename = require('path').basename
+var Buffer = require('safe-buffer').Buffer
+
+/**
+ * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%")
+ * @private
+ */
+
+var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex
+
+/**
+ * RegExp to match percent encoding escape.
+ * @private
+ */
+
+var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/
+var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g
+
+/**
+ * RegExp to match non-latin1 characters.
+ * @private
+ */
+
+var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g
+
+/**
+ * RegExp to match quoted-pair in RFC 2616
+ *
+ * quoted-pair = "\" CHAR
+ * CHAR =
+ * @private
+ */
+
+var QESC_REGEXP = /\\([\u0000-\u007f])/g // eslint-disable-line no-control-regex
+
+/**
+ * RegExp to match chars that must be quoted-pair in RFC 2616
+ * @private
+ */
+
+var QUOTE_REGEXP = /([\\"])/g
+
+/**
+ * RegExp for various RFC 2616 grammar
+ *
+ * parameter = token "=" ( token | quoted-string )
+ * token = 1*
+ * separators = "(" | ")" | "<" | ">" | "@"
+ * | "," | ";" | ":" | "\" | <">
+ * | "/" | "[" | "]" | "?" | "="
+ * | "{" | "}" | SP | HT
+ * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
+ * qdtext = >
+ * quoted-pair = "\" CHAR
+ * CHAR =
+ * TEXT =
+ * LWS = [CRLF] 1*( SP | HT )
+ * CRLF = CR LF
+ * CR =
+ * LF =
+ * SP =
+ * HT =
+ * CTL =
+ * OCTET =
+ * @private
+ */
+
+var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex
+var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/
+var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/
+
+/**
+ * RegExp for various RFC 5987 grammar
+ *
+ * ext-value = charset "'" [ language ] "'" value-chars
+ * charset = "UTF-8" / "ISO-8859-1" / mime-charset
+ * mime-charset = 1*mime-charsetc
+ * mime-charsetc = ALPHA / DIGIT
+ * / "!" / "#" / "$" / "%" / "&"
+ * / "+" / "-" / "^" / "_" / "`"
+ * / "{" / "}" / "~"
+ * language = ( 2*3ALPHA [ extlang ] )
+ * / 4ALPHA
+ * / 5*8ALPHA
+ * extlang = *3( "-" 3ALPHA )
+ * value-chars = *( pct-encoded / attr-char )
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * attr-char = ALPHA / DIGIT
+ * / "!" / "#" / "$" / "&" / "+" / "-" / "."
+ * / "^" / "_" / "`" / "|" / "~"
+ * @private
+ */
+
+var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/
+
+/**
+ * RegExp for various RFC 6266 grammar
+ *
+ * disposition-type = "inline" | "attachment" | disp-ext-type
+ * disp-ext-type = token
+ * disposition-parm = filename-parm | disp-ext-parm
+ * filename-parm = "filename" "=" value
+ * | "filename*" "=" ext-value
+ * disp-ext-parm = token "=" value
+ * | ext-token "=" ext-value
+ * ext-token =
+ * @private
+ */
+
+var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex
+
+/**
+ * Create an attachment Content-Disposition header.
+ *
+ * @param {string} [filename]
+ * @param {object} [options]
+ * @param {string} [options.type=attachment]
+ * @param {string|boolean} [options.fallback=true]
+ * @return {string}
+ * @public
+ */
+
+function contentDisposition (filename, options) {
+ var opts = options || {}
+
+ // get type
+ var type = opts.type || 'attachment'
+
+ // get parameters
+ var params = createparams(filename, opts.fallback)
+
+ // format into string
+ return format(new ContentDisposition(type, params))
+}
+
+/**
+ * Create parameters object from filename and fallback.
+ *
+ * @param {string} [filename]
+ * @param {string|boolean} [fallback=true]
+ * @return {object}
+ * @private
+ */
+
+function createparams (filename, fallback) {
+ if (filename === undefined) {
+ return
+ }
+
+ var params = {}
+
+ if (typeof filename !== 'string') {
+ throw new TypeError('filename must be a string')
+ }
+
+ // fallback defaults to true
+ if (fallback === undefined) {
+ fallback = true
+ }
+
+ if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {
+ throw new TypeError('fallback must be a string or boolean')
+ }
+
+ if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {
+ throw new TypeError('fallback must be ISO-8859-1 string')
+ }
+
+ // restrict to file base name
+ var name = basename(filename)
+
+ // determine if name is suitable for quoted string
+ var isQuotedString = TEXT_REGEXP.test(name)
+
+ // generate fallback name
+ var fallbackName = typeof fallback !== 'string'
+ ? fallback && getlatin1(name)
+ : basename(fallback)
+ var hasFallback = typeof fallbackName === 'string' && fallbackName !== name
+
+ // set extended filename parameter
+ if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {
+ params['filename*'] = name
+ }
+
+ // set filename parameter
+ if (isQuotedString || hasFallback) {
+ params.filename = hasFallback
+ ? fallbackName
+ : name
+ }
+
+ return params
+}
+
+/**
+ * Format object to Content-Disposition header.
+ *
+ * @param {object} obj
+ * @param {string} obj.type
+ * @param {object} [obj.parameters]
+ * @return {string}
+ * @private
+ */
+
+function format (obj) {
+ var parameters = obj.parameters
+ var type = obj.type
+
+ if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {
+ throw new TypeError('invalid type')
+ }
+
+ // start with normalized type
+ var string = String(type).toLowerCase()
+
+ // append parameters
+ if (parameters && typeof parameters === 'object') {
+ var param
+ var params = Object.keys(parameters).sort()
+
+ for (var i = 0; i < params.length; i++) {
+ param = params[i]
+
+ var val = param.substr(-1) === '*'
+ ? ustring(parameters[param])
+ : qstring(parameters[param])
+
+ string += '; ' + param + '=' + val
+ }
+ }
+
+ return string
+}
+
+/**
+ * Decode a RFC 5987 field value (gracefully).
+ *
+ * @param {string} str
+ * @return {string}
+ * @private
+ */
+
+function decodefield (str) {
+ var match = EXT_VALUE_REGEXP.exec(str)
+
+ if (!match) {
+ throw new TypeError('invalid extended field value')
+ }
+
+ var charset = match[1].toLowerCase()
+ var encoded = match[2]
+ var value
+
+ // to binary string
+ var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)
+
+ switch (charset) {
+ case 'iso-8859-1':
+ value = getlatin1(binary)
+ break
+ case 'utf-8':
+ value = Buffer.from(binary, 'binary').toString('utf8')
+ break
+ default:
+ throw new TypeError('unsupported charset in extended field')
+ }
+
+ return value
+}
+
+/**
+ * Get ISO-8859-1 version of string.
+ *
+ * @param {string} val
+ * @return {string}
+ * @private
+ */
+
+function getlatin1 (val) {
+ // simple Unicode -> ISO-8859-1 transformation
+ return String(val).replace(NON_LATIN1_REGEXP, '?')
+}
+
+/**
+ * Parse Content-Disposition header string.
+ *
+ * @param {string} string
+ * @return {object}
+ * @public
+ */
+
+function parse (string) {
+ if (!string || typeof string !== 'string') {
+ throw new TypeError('argument string is required')
+ }
+
+ var match = DISPOSITION_TYPE_REGEXP.exec(string)
+
+ if (!match) {
+ throw new TypeError('invalid type format')
+ }
+
+ // normalize type
+ var index = match[0].length
+ var type = match[1].toLowerCase()
+
+ var key
+ var names = []
+ var params = {}
+ var value
+
+ // calculate index to start at
+ index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'
+ ? index - 1
+ : index
+
+ // match parameters
+ while ((match = PARAM_REGEXP.exec(string))) {
+ if (match.index !== index) {
+ throw new TypeError('invalid parameter format')
+ }
+
+ index += match[0].length
+ key = match[1].toLowerCase()
+ value = match[2]
+
+ if (names.indexOf(key) !== -1) {
+ throw new TypeError('invalid duplicate parameter')
+ }
+
+ names.push(key)
+
+ if (key.indexOf('*') + 1 === key.length) {
+ // decode extended value
+ key = key.slice(0, -1)
+ value = decodefield(value)
+
+ // overwrite existing value
+ params[key] = value
+ continue
+ }
+
+ if (typeof params[key] === 'string') {
+ continue
+ }
+
+ if (value[0] === '"') {
+ // remove quotes and escapes
+ value = value
+ .substr(1, value.length - 2)
+ .replace(QESC_REGEXP, '$1')
+ }
+
+ params[key] = value
+ }
+
+ if (index !== -1 && index !== string.length) {
+ throw new TypeError('invalid parameter format')
+ }
+
+ return new ContentDisposition(type, params)
+}
+
+/**
+ * Percent decode a single character.
+ *
+ * @param {string} str
+ * @param {string} hex
+ * @return {string}
+ * @private
+ */
+
+function pdecode (str, hex) {
+ return String.fromCharCode(parseInt(hex, 16))
+}
+
+/**
+ * Percent encode a single character.
+ *
+ * @param {string} char
+ * @return {string}
+ * @private
+ */
+
+function pencode (char) {
+ return '%' + String(char)
+ .charCodeAt(0)
+ .toString(16)
+ .toUpperCase()
+}
+
+/**
+ * Quote a string for HTTP.
+ *
+ * @param {string} val
+ * @return {string}
+ * @private
+ */
+
+function qstring (val) {
+ var str = String(val)
+
+ return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"'
+}
+
+/**
+ * Encode a Unicode string for HTTP (RFC 5987).
+ *
+ * @param {string} val
+ * @return {string}
+ * @private
+ */
+
+function ustring (val) {
+ var str = String(val)
+
+ // percent encode as UTF-8
+ var encoded = encodeURIComponent(str)
+ .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)
+
+ return 'UTF-8\'\'' + encoded
+}
+
+/**
+ * Class for parsed Content-Disposition header for v8 optimization
+ *
+ * @public
+ * @param {string} type
+ * @param {object} parameters
+ * @constructor
+ */
+
+function ContentDisposition (type, parameters) {
+ this.type = type
+ this.parameters = parameters
+}
diff --git a/node_modules/content-disposition/package.json b/node_modules/content-disposition/package.json
new file mode 100644
index 0000000..43c70ce
--- /dev/null
+++ b/node_modules/content-disposition/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "content-disposition",
+ "description": "Create and parse Content-Disposition header",
+ "version": "0.5.4",
+ "author": "Douglas Christopher Wilson ",
+ "license": "MIT",
+ "keywords": [
+ "content-disposition",
+ "http",
+ "rfc6266",
+ "res"
+ ],
+ "repository": "jshttp/content-disposition",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "devDependencies": {
+ "deep-equal": "1.0.1",
+ "eslint": "7.32.0",
+ "eslint-config-standard": "13.0.1",
+ "eslint-plugin-import": "2.25.3",
+ "eslint-plugin-markdown": "2.2.1",
+ "eslint-plugin-node": "11.1.0",
+ "eslint-plugin-promise": "5.2.0",
+ "eslint-plugin-standard": "4.1.0",
+ "istanbul": "0.4.5",
+ "mocha": "9.1.3"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "README.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+ }
+}
diff --git a/node_modules/content-type/HISTORY.md b/node_modules/content-type/HISTORY.md
new file mode 100644
index 0000000..8f5cb70
--- /dev/null
+++ b/node_modules/content-type/HISTORY.md
@@ -0,0 +1,24 @@
+1.0.4 / 2017-09-11
+==================
+
+ * perf: skip parameter parsing when no parameters
+
+1.0.3 / 2017-09-10
+==================
+
+ * perf: remove argument reassignment
+
+1.0.2 / 2016-05-09
+==================
+
+ * perf: enable strict mode
+
+1.0.1 / 2015-02-13
+==================
+
+ * Improve missing `Content-Type` header error message
+
+1.0.0 / 2015-02-01
+==================
+
+ * Initial implementation, derived from `media-typer@0.3.0`
diff --git a/node_modules/content-type/LICENSE b/node_modules/content-type/LICENSE
new file mode 100644
index 0000000..34b1a2d
--- /dev/null
+++ b/node_modules/content-type/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/content-type/README.md b/node_modules/content-type/README.md
new file mode 100644
index 0000000..3ed6741
--- /dev/null
+++ b/node_modules/content-type/README.md
@@ -0,0 +1,92 @@
+# content-type
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Create and parse HTTP Content-Type header according to RFC 7231
+
+## Installation
+
+```sh
+$ npm install content-type
+```
+
+## API
+
+```js
+var contentType = require('content-type')
+```
+
+### contentType.parse(string)
+
+```js
+var obj = contentType.parse('image/svg+xml; charset=utf-8')
+```
+
+Parse a content type string. This will return an object with the following
+properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):
+
+ - `type`: The media type (the type and subtype, always lower case).
+ Example: `'image/svg+xml'`
+
+ - `parameters`: An object of the parameters in the media type (name of parameter
+ always lower case). Example: `{charset: 'utf-8'}`
+
+Throws a `TypeError` if the string is missing or invalid.
+
+### contentType.parse(req)
+
+```js
+var obj = contentType.parse(req)
+```
+
+Parse the `content-type` header from the given `req`. Short-cut for
+`contentType.parse(req.headers['content-type'])`.
+
+Throws a `TypeError` if the `Content-Type` header is missing or invalid.
+
+### contentType.parse(res)
+
+```js
+var obj = contentType.parse(res)
+```
+
+Parse the `content-type` header set on the given `res`. Short-cut for
+`contentType.parse(res.getHeader('content-type'))`.
+
+Throws a `TypeError` if the `Content-Type` header is missing or invalid.
+
+### contentType.format(obj)
+
+```js
+var str = contentType.format({type: 'image/svg+xml'})
+```
+
+Format an object into a content type string. This will return a string of the
+content type for the given object with the following properties (examples are
+shown that produce the string `'image/svg+xml; charset=utf-8'`):
+
+ - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'`
+
+ - `parameters`: An object of the parameters in the media type (name of the
+ parameter will be lower-cased). Example: `{charset: 'utf-8'}`
+
+Throws a `TypeError` if the object contains an invalid type or parameter names.
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/content-type.svg
+[npm-url]: https://npmjs.org/package/content-type
+[node-version-image]: https://img.shields.io/node/v/content-type.svg
+[node-version-url]: http://nodejs.org/download/
+[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg
+[travis-url]: https://travis-ci.org/jshttp/content-type
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/content-type
+[downloads-image]: https://img.shields.io/npm/dm/content-type.svg
+[downloads-url]: https://npmjs.org/package/content-type
diff --git a/node_modules/content-type/index.js b/node_modules/content-type/index.js
new file mode 100644
index 0000000..6ce03f2
--- /dev/null
+++ b/node_modules/content-type/index.js
@@ -0,0 +1,222 @@
+/*!
+ * content-type
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1
+ *
+ * parameter = token "=" ( token / quoted-string )
+ * token = 1*tchar
+ * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
+ * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
+ * / DIGIT / ALPHA
+ * ; any VCHAR, except delimiters
+ * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
+ * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text
+ * obs-text = %x80-FF
+ * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
+ */
+var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g
+var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/
+var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/
+
+/**
+ * RegExp to match quoted-pair in RFC 7230 sec 3.2.6
+ *
+ * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
+ * obs-text = %x80-FF
+ */
+var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g
+
+/**
+ * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6
+ */
+var QUOTE_REGEXP = /([\\"])/g
+
+/**
+ * RegExp to match type in RFC 7231 sec 3.1.1.1
+ *
+ * media-type = type "/" subtype
+ * type = token
+ * subtype = token
+ */
+var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/
+
+/**
+ * Module exports.
+ * @public
+ */
+
+exports.format = format
+exports.parse = parse
+
+/**
+ * Format object to media type.
+ *
+ * @param {object} obj
+ * @return {string}
+ * @public
+ */
+
+function format (obj) {
+ if (!obj || typeof obj !== 'object') {
+ throw new TypeError('argument obj is required')
+ }
+
+ var parameters = obj.parameters
+ var type = obj.type
+
+ if (!type || !TYPE_REGEXP.test(type)) {
+ throw new TypeError('invalid type')
+ }
+
+ var string = type
+
+ // append parameters
+ if (parameters && typeof parameters === 'object') {
+ var param
+ var params = Object.keys(parameters).sort()
+
+ for (var i = 0; i < params.length; i++) {
+ param = params[i]
+
+ if (!TOKEN_REGEXP.test(param)) {
+ throw new TypeError('invalid parameter name')
+ }
+
+ string += '; ' + param + '=' + qstring(parameters[param])
+ }
+ }
+
+ return string
+}
+
+/**
+ * Parse media type to object.
+ *
+ * @param {string|object} string
+ * @return {Object}
+ * @public
+ */
+
+function parse (string) {
+ if (!string) {
+ throw new TypeError('argument string is required')
+ }
+
+ // support req/res-like objects as argument
+ var header = typeof string === 'object'
+ ? getcontenttype(string)
+ : string
+
+ if (typeof header !== 'string') {
+ throw new TypeError('argument string is required to be a string')
+ }
+
+ var index = header.indexOf(';')
+ var type = index !== -1
+ ? header.substr(0, index).trim()
+ : header.trim()
+
+ if (!TYPE_REGEXP.test(type)) {
+ throw new TypeError('invalid media type')
+ }
+
+ var obj = new ContentType(type.toLowerCase())
+
+ // parse parameters
+ if (index !== -1) {
+ var key
+ var match
+ var value
+
+ PARAM_REGEXP.lastIndex = index
+
+ while ((match = PARAM_REGEXP.exec(header))) {
+ if (match.index !== index) {
+ throw new TypeError('invalid parameter format')
+ }
+
+ index += match[0].length
+ key = match[1].toLowerCase()
+ value = match[2]
+
+ if (value[0] === '"') {
+ // remove quotes and escapes
+ value = value
+ .substr(1, value.length - 2)
+ .replace(QESC_REGEXP, '$1')
+ }
+
+ obj.parameters[key] = value
+ }
+
+ if (index !== header.length) {
+ throw new TypeError('invalid parameter format')
+ }
+ }
+
+ return obj
+}
+
+/**
+ * Get content-type from req/res objects.
+ *
+ * @param {object}
+ * @return {Object}
+ * @private
+ */
+
+function getcontenttype (obj) {
+ var header
+
+ if (typeof obj.getHeader === 'function') {
+ // res-like
+ header = obj.getHeader('content-type')
+ } else if (typeof obj.headers === 'object') {
+ // req-like
+ header = obj.headers && obj.headers['content-type']
+ }
+
+ if (typeof header !== 'string') {
+ throw new TypeError('content-type header is missing from object')
+ }
+
+ return header
+}
+
+/**
+ * Quote a string if necessary.
+ *
+ * @param {string} val
+ * @return {string}
+ * @private
+ */
+
+function qstring (val) {
+ var str = String(val)
+
+ // no need to quote tokens
+ if (TOKEN_REGEXP.test(str)) {
+ return str
+ }
+
+ if (str.length > 0 && !TEXT_REGEXP.test(str)) {
+ throw new TypeError('invalid parameter value')
+ }
+
+ return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"'
+}
+
+/**
+ * Class to represent a content type.
+ * @private
+ */
+function ContentType (type) {
+ this.parameters = Object.create(null)
+ this.type = type
+}
diff --git a/node_modules/content-type/package.json b/node_modules/content-type/package.json
new file mode 100644
index 0000000..f2d31d4
--- /dev/null
+++ b/node_modules/content-type/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "content-type",
+ "description": "Create and parse HTTP Content-Type header",
+ "version": "1.0.4",
+ "author": "Douglas Christopher Wilson ",
+ "license": "MIT",
+ "keywords": [
+ "content-type",
+ "http",
+ "req",
+ "res",
+ "rfc7231"
+ ],
+ "repository": "jshttp/content-type",
+ "devDependencies": {
+ "eslint": "3.19.0",
+ "eslint-config-standard": "10.2.1",
+ "eslint-plugin-import": "2.7.0",
+ "eslint-plugin-node": "5.1.1",
+ "eslint-plugin-promise": "3.5.0",
+ "eslint-plugin-standard": "3.0.1",
+ "istanbul": "0.4.5",
+ "mocha": "~1.21.5"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "README.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --reporter spec --check-leaks --bail test/",
+ "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+ }
+}
diff --git a/node_modules/cookie-signature/.npmignore b/node_modules/cookie-signature/.npmignore
new file mode 100644
index 0000000..f1250e5
--- /dev/null
+++ b/node_modules/cookie-signature/.npmignore
@@ -0,0 +1,4 @@
+support
+test
+examples
+*.sock
diff --git a/node_modules/cookie-signature/History.md b/node_modules/cookie-signature/History.md
new file mode 100644
index 0000000..78513cc
--- /dev/null
+++ b/node_modules/cookie-signature/History.md
@@ -0,0 +1,38 @@
+1.0.6 / 2015-02-03
+==================
+
+* use `npm test` instead of `make test` to run tests
+* clearer assertion messages when checking input
+
+
+1.0.5 / 2014-09-05
+==================
+
+* add license to package.json
+
+1.0.4 / 2014-06-25
+==================
+
+ * corrected avoidance of timing attacks (thanks @tenbits!)
+
+1.0.3 / 2014-01-28
+==================
+
+ * [incorrect] fix for timing attacks
+
+1.0.2 / 2014-01-28
+==================
+
+ * fix missing repository warning
+ * fix typo in test
+
+1.0.1 / 2013-04-15
+==================
+
+ * Revert "Changed underlying HMAC algo. to sha512."
+ * Revert "Fix for timing attacks on MAC verification."
+
+0.0.1 / 2010-01-03
+==================
+
+ * Initial release
diff --git a/node_modules/cookie-signature/Readme.md b/node_modules/cookie-signature/Readme.md
new file mode 100644
index 0000000..2559e84
--- /dev/null
+++ b/node_modules/cookie-signature/Readme.md
@@ -0,0 +1,42 @@
+
+# cookie-signature
+
+ Sign and unsign cookies.
+
+## Example
+
+```js
+var cookie = require('cookie-signature');
+
+var val = cookie.sign('hello', 'tobiiscool');
+val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');
+
+var val = cookie.sign('hello', 'tobiiscool');
+cookie.unsign(val, 'tobiiscool').should.equal('hello');
+cookie.unsign(val, 'luna').should.be.false;
+```
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2012 LearnBoost <tj@learnboost.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/cookie-signature/index.js b/node_modules/cookie-signature/index.js
new file mode 100644
index 0000000..b8c9463
--- /dev/null
+++ b/node_modules/cookie-signature/index.js
@@ -0,0 +1,51 @@
+/**
+ * Module dependencies.
+ */
+
+var crypto = require('crypto');
+
+/**
+ * Sign the given `val` with `secret`.
+ *
+ * @param {String} val
+ * @param {String} secret
+ * @return {String}
+ * @api private
+ */
+
+exports.sign = function(val, secret){
+ if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string.");
+ if ('string' != typeof secret) throw new TypeError("Secret string must be provided.");
+ return val + '.' + crypto
+ .createHmac('sha256', secret)
+ .update(val)
+ .digest('base64')
+ .replace(/\=+$/, '');
+};
+
+/**
+ * Unsign and decode the given `val` with `secret`,
+ * returning `false` if the signature is invalid.
+ *
+ * @param {String} val
+ * @param {String} secret
+ * @return {String|Boolean}
+ * @api private
+ */
+
+exports.unsign = function(val, secret){
+ if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided.");
+ if ('string' != typeof secret) throw new TypeError("Secret string must be provided.");
+ var str = val.slice(0, val.lastIndexOf('.'))
+ , mac = exports.sign(str, secret);
+
+ return sha1(mac) == sha1(val) ? str : false;
+};
+
+/**
+ * Private
+ */
+
+function sha1(str){
+ return crypto.createHash('sha1').update(str).digest('hex');
+}
diff --git a/node_modules/cookie-signature/package.json b/node_modules/cookie-signature/package.json
new file mode 100644
index 0000000..29c4498
--- /dev/null
+++ b/node_modules/cookie-signature/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "cookie-signature",
+ "version": "1.0.6",
+ "description": "Sign and unsign cookies",
+ "keywords": ["cookie", "sign", "unsign"],
+ "author": "TJ Holowaychuk ",
+ "license": "MIT",
+ "repository": { "type": "git", "url": "https://github.com/visionmedia/node-cookie-signature.git"},
+ "dependencies": {},
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "scripts": {
+ "test": "mocha --require should --reporter spec"
+ },
+ "main": "index"
+}
diff --git a/node_modules/cookie/HISTORY.md b/node_modules/cookie/HISTORY.md
new file mode 100644
index 0000000..ae9b995
--- /dev/null
+++ b/node_modules/cookie/HISTORY.md
@@ -0,0 +1,142 @@
+0.5.0 / 2022-04-11
+==================
+
+ * Add `priority` option
+ * Fix `expires` option to reject invalid dates
+ * pref: improve default decode speed
+ * pref: remove slow string split in parse
+
+0.4.2 / 2022-02-02
+==================
+
+ * pref: read value only when assigning in parse
+ * pref: remove unnecessary regexp in parse
+
+0.4.1 / 2020-04-21
+==================
+
+ * Fix `maxAge` option to reject invalid values
+
+0.4.0 / 2019-05-15
+==================
+
+ * Add `SameSite=None` support
+
+0.3.1 / 2016-05-26
+==================
+
+ * Fix `sameSite: true` to work with draft-7 clients
+ - `true` now sends `SameSite=Strict` instead of `SameSite`
+
+0.3.0 / 2016-05-26
+==================
+
+ * Add `sameSite` option
+ - Replaces `firstPartyOnly` option, never implemented by browsers
+ * Improve error message when `encode` is not a function
+ * Improve error message when `expires` is not a `Date`
+
+0.2.4 / 2016-05-20
+==================
+
+ * perf: enable strict mode
+ * perf: use for loop in parse
+ * perf: use string concatination for serialization
+
+0.2.3 / 2015-10-25
+==================
+
+ * Fix cookie `Max-Age` to never be a floating point number
+
+0.2.2 / 2015-09-17
+==================
+
+ * Fix regression when setting empty cookie value
+ - Ease the new restriction, which is just basic header-level validation
+ * Fix typo in invalid value errors
+
+0.2.1 / 2015-09-17
+==================
+
+ * Throw on invalid values provided to `serialize`
+ - Ensures the resulting string is a valid HTTP header value
+
+0.2.0 / 2015-08-13
+==================
+
+ * Add `firstPartyOnly` option
+ * Throw better error for invalid argument to parse
+ * perf: hoist regular expression
+
+0.1.5 / 2015-09-17
+==================
+
+ * Fix regression when setting empty cookie value
+ - Ease the new restriction, which is just basic header-level validation
+ * Fix typo in invalid value errors
+
+0.1.4 / 2015-09-17
+==================
+
+ * Throw better error for invalid argument to parse
+ * Throw on invalid values provided to `serialize`
+ - Ensures the resulting string is a valid HTTP header value
+
+0.1.3 / 2015-05-19
+==================
+
+ * Reduce the scope of try-catch deopt
+ * Remove argument reassignments
+
+0.1.2 / 2014-04-16
+==================
+
+ * Remove unnecessary files from npm package
+
+0.1.1 / 2014-02-23
+==================
+
+ * Fix bad parse when cookie value contained a comma
+ * Fix support for `maxAge` of `0`
+
+0.1.0 / 2013-05-01
+==================
+
+ * Add `decode` option
+ * Add `encode` option
+
+0.0.6 / 2013-04-08
+==================
+
+ * Ignore cookie parts missing `=`
+
+0.0.5 / 2012-10-29
+==================
+
+ * Return raw cookie value if value unescape errors
+
+0.0.4 / 2012-06-21
+==================
+
+ * Use encode/decodeURIComponent for cookie encoding/decoding
+ - Improve server/client interoperability
+
+0.0.3 / 2012-06-06
+==================
+
+ * Only escape special characters per the cookie RFC
+
+0.0.2 / 2012-06-01
+==================
+
+ * Fix `maxAge` option to not throw error
+
+0.0.1 / 2012-05-28
+==================
+
+ * Add more tests
+
+0.0.0 / 2012-05-28
+==================
+
+ * Initial release
diff --git a/node_modules/cookie/LICENSE b/node_modules/cookie/LICENSE
new file mode 100644
index 0000000..058b6b4
--- /dev/null
+++ b/node_modules/cookie/LICENSE
@@ -0,0 +1,24 @@
+(The MIT License)
+
+Copyright (c) 2012-2014 Roman Shtylman
+Copyright (c) 2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/node_modules/cookie/README.md b/node_modules/cookie/README.md
new file mode 100644
index 0000000..5449c3a
--- /dev/null
+++ b/node_modules/cookie/README.md
@@ -0,0 +1,302 @@
+# cookie
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][github-actions-ci-image]][github-actions-ci-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Basic HTTP cookie parser and serializer for HTTP servers.
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install cookie
+```
+
+## API
+
+```js
+var cookie = require('cookie');
+```
+
+### cookie.parse(str, options)
+
+Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs.
+The `str` argument is the string representing a `Cookie` header value and `options` is an
+optional object containing additional parsing options.
+
+```js
+var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');
+// { foo: 'bar', equation: 'E=mc^2' }
+```
+
+#### Options
+
+`cookie.parse` accepts these properties in the options object.
+
+##### decode
+
+Specifies a function that will be used to decode a cookie's value. Since the value of a cookie
+has a limited character set (and must be a simple string), this function can be used to decode
+a previously-encoded cookie value into a JavaScript string or other object.
+
+The default function is the global `decodeURIComponent`, which will decode any URL-encoded
+sequences into their byte representations.
+
+**note** if an error is thrown from this function, the original, non-decoded cookie value will
+be returned as the cookie's value.
+
+### cookie.serialize(name, value, options)
+
+Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the
+name for the cookie, the `value` argument is the value to set the cookie to, and the `options`
+argument is an optional object containing additional serialization options.
+
+```js
+var setCookie = cookie.serialize('foo', 'bar');
+// foo=bar
+```
+
+#### Options
+
+`cookie.serialize` accepts these properties in the options object.
+
+##### domain
+
+Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no
+domain is set, and most clients will consider the cookie to apply to only the current domain.
+
+##### encode
+
+Specifies a function that will be used to encode a cookie's value. Since value of a cookie
+has a limited character set (and must be a simple string), this function can be used to encode
+a value into a string suited for a cookie's value.
+
+The default function is the global `encodeURIComponent`, which will encode a JavaScript string
+into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range.
+
+##### expires
+
+Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1].
+By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and
+will delete it on a condition like exiting a web browser application.
+
+**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and
+`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,
+so if both are set, they should point to the same date and time.
+
+##### httpOnly
+
+Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy,
+the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set.
+
+**note** be careful when setting this to `true`, as compliant clients will not allow client-side
+JavaScript to see the cookie in `document.cookie`.
+
+##### maxAge
+
+Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2].
+The given number will be converted to an integer by rounding down. By default, no maximum age is set.
+
+**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and
+`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,
+so if both are set, they should point to the same date and time.
+
+##### path
+
+Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path
+is considered the ["default path"][rfc-6265-5.1.4].
+
+##### priority
+
+Specifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1].
+
+ - `'low'` will set the `Priority` attribute to `Low`.
+ - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set.
+ - `'high'` will set the `Priority` attribute to `High`.
+
+More information about the different priority levels can be found in
+[the specification][rfc-west-cookie-priority-00-4.1].
+
+**note** This is an attribute that has not yet been fully standardized, and may change in the future.
+This also means many clients may ignore this attribute until they understand it.
+
+##### sameSite
+
+Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-09-5.4.7].
+
+ - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
+ - `false` will not set the `SameSite` attribute.
+ - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.
+ - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.
+ - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.
+
+More information about the different enforcement levels can be found in
+[the specification][rfc-6265bis-09-5.4.7].
+
+**note** This is an attribute that has not yet been fully standardized, and may change in the future.
+This also means many clients may ignore this attribute until they understand it.
+
+##### secure
+
+Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy,
+the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.
+
+**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to
+the server in the future if the browser does not have an HTTPS connection.
+
+## Example
+
+The following example uses this module in conjunction with the Node.js core HTTP server
+to prompt a user for their name and display it back on future visits.
+
+```js
+var cookie = require('cookie');
+var escapeHtml = require('escape-html');
+var http = require('http');
+var url = require('url');
+
+function onRequest(req, res) {
+ // Parse the query string
+ var query = url.parse(req.url, true, true).query;
+
+ if (query && query.name) {
+ // Set a new cookie with the name
+ res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {
+ httpOnly: true,
+ maxAge: 60 * 60 * 24 * 7 // 1 week
+ }));
+
+ // Redirect back after setting cookie
+ res.statusCode = 302;
+ res.setHeader('Location', req.headers.referer || '/');
+ res.end();
+ return;
+ }
+
+ // Parse the cookies on the request
+ var cookies = cookie.parse(req.headers.cookie || '');
+
+ // Get the visitor name set in the cookie
+ var name = cookies.name;
+
+ res.setHeader('Content-Type', 'text/html; charset=UTF-8');
+
+ if (name) {
+ res.write('Welcome back, ' + escapeHtml(name) + '!
');
+ } else {
+ res.write('Hello, new visitor!
');
+ }
+
+ res.write('');
+}
+
+http.createServer(onRequest).listen(3000);
+```
+
+## Testing
+
+```sh
+$ npm test
+```
+
+## Benchmark
+
+```
+$ npm run bench
+
+> cookie@0.4.2 bench
+> node benchmark/index.js
+
+ node@16.14.0
+ v8@9.4.146.24-node.20
+ uv@1.43.0
+ zlib@1.2.11
+ brotli@1.0.9
+ ares@1.18.1
+ modules@93
+ nghttp2@1.45.1
+ napi@8
+ llhttp@6.0.4
+ openssl@1.1.1m+quic
+ cldr@40.0
+ icu@70.1
+ tz@2021a3
+ unicode@14.0
+ ngtcp2@0.1.0-DEV
+ nghttp3@0.1.0-DEV
+
+> node benchmark/parse-top.js
+
+ cookie.parse - top sites
+
+ 15 tests completed.
+
+ parse accounts.google.com x 2,421,245 ops/sec ±0.80% (188 runs sampled)
+ parse apple.com x 2,684,710 ops/sec ±0.59% (189 runs sampled)
+ parse cloudflare.com x 2,231,418 ops/sec ±0.76% (186 runs sampled)
+ parse docs.google.com x 2,316,357 ops/sec ±1.28% (187 runs sampled)
+ parse drive.google.com x 2,363,543 ops/sec ±0.49% (189 runs sampled)
+ parse en.wikipedia.org x 839,414 ops/sec ±0.53% (189 runs sampled)
+ parse linkedin.com x 553,797 ops/sec ±0.63% (190 runs sampled)
+ parse maps.google.com x 1,314,779 ops/sec ±0.72% (189 runs sampled)
+ parse microsoft.com x 153,783 ops/sec ±0.53% (190 runs sampled)
+ parse play.google.com x 2,249,574 ops/sec ±0.59% (187 runs sampled)
+ parse plus.google.com x 2,258,682 ops/sec ±0.60% (188 runs sampled)
+ parse sites.google.com x 2,247,069 ops/sec ±0.68% (189 runs sampled)
+ parse support.google.com x 1,456,840 ops/sec ±0.70% (187 runs sampled)
+ parse www.google.com x 1,046,028 ops/sec ±0.58% (188 runs sampled)
+ parse youtu.be x 937,428 ops/sec ±1.47% (190 runs sampled)
+ parse youtube.com x 963,878 ops/sec ±0.59% (190 runs sampled)
+
+> node benchmark/parse.js
+
+ cookie.parse - generic
+
+ 6 tests completed.
+
+ simple x 2,745,604 ops/sec ±0.77% (185 runs sampled)
+ decode x 557,287 ops/sec ±0.60% (188 runs sampled)
+ unquote x 2,498,475 ops/sec ±0.55% (189 runs sampled)
+ duplicates x 868,591 ops/sec ±0.89% (187 runs sampled)
+ 10 cookies x 306,745 ops/sec ±0.49% (190 runs sampled)
+ 100 cookies x 22,414 ops/sec ±2.38% (182 runs sampled)
+```
+
+## References
+
+- [RFC 6265: HTTP State Management Mechanism][rfc-6265]
+- [Same-site Cookies][rfc-6265bis-09-5.4.7]
+
+[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1
+[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7
+[rfc-6265]: https://tools.ietf.org/html/rfc6265
+[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4
+[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1
+[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2
+[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3
+[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4
+[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5
+[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6
+[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3
+
+## License
+
+[MIT](LICENSE)
+
+[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master
+[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master
+[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/cookie/ci/master?label=ci
+[github-actions-ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml
+[node-version-image]: https://badgen.net/npm/node/cookie
+[node-version-url]: https://nodejs.org/en/download
+[npm-downloads-image]: https://badgen.net/npm/dm/cookie
+[npm-url]: https://npmjs.org/package/cookie
+[npm-version-image]: https://badgen.net/npm/v/cookie
diff --git a/node_modules/cookie/SECURITY.md b/node_modules/cookie/SECURITY.md
new file mode 100644
index 0000000..fd4a6c5
--- /dev/null
+++ b/node_modules/cookie/SECURITY.md
@@ -0,0 +1,25 @@
+# Security Policies and Procedures
+
+## Reporting a Bug
+
+The `cookie` team and community take all security bugs seriously. Thank
+you for improving the security of the project. We appreciate your efforts and
+responsible disclosure and will make every effort to acknowledge your
+contributions.
+
+Report security bugs by emailing the current owner(s) of `cookie`. This
+information can be found in the npm registry using the command
+`npm owner ls cookie`.
+If unsure or unable to get the information from the above, open an issue
+in the [project issue tracker](https://github.com/jshttp/cookie/issues)
+asking for the current contact information.
+
+To ensure the timely response to your report, please ensure that the entirety
+of the report is contained within the email body and not solely behind a web
+link or an attachment.
+
+At least one owner will acknowledge your email within 48 hours, and will send a
+more detailed response within 48 hours indicating the next steps in handling
+your report. After the initial reply to your report, the owners will
+endeavor to keep you informed of the progress towards a fix and full
+announcement, and may ask for additional information or guidance.
diff --git a/node_modules/cookie/index.js b/node_modules/cookie/index.js
new file mode 100644
index 0000000..9c3d07d
--- /dev/null
+++ b/node_modules/cookie/index.js
@@ -0,0 +1,270 @@
+/*!
+ * cookie
+ * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module exports.
+ * @public
+ */
+
+exports.parse = parse;
+exports.serialize = serialize;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var __toString = Object.prototype.toString
+
+/**
+ * RegExp to match field-content in RFC 7230 sec 3.2
+ *
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar = VCHAR / obs-text
+ * obs-text = %x80-FF
+ */
+
+var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
+
+/**
+ * Parse a cookie header.
+ *
+ * Parse the given cookie header string into an object
+ * The object has the various cookies as keys(names) => values
+ *
+ * @param {string} str
+ * @param {object} [options]
+ * @return {object}
+ * @public
+ */
+
+function parse(str, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('argument str must be a string');
+ }
+
+ var obj = {}
+ var opt = options || {};
+ var dec = opt.decode || decode;
+
+ var index = 0
+ while (index < str.length) {
+ var eqIdx = str.indexOf('=', index)
+
+ // no more cookie pairs
+ if (eqIdx === -1) {
+ break
+ }
+
+ var endIdx = str.indexOf(';', index)
+
+ if (endIdx === -1) {
+ endIdx = str.length
+ } else if (endIdx < eqIdx) {
+ // backtrack on prior semicolon
+ index = str.lastIndexOf(';', eqIdx - 1) + 1
+ continue
+ }
+
+ var key = str.slice(index, eqIdx).trim()
+
+ // only assign once
+ if (undefined === obj[key]) {
+ var val = str.slice(eqIdx + 1, endIdx).trim()
+
+ // quoted values
+ if (val.charCodeAt(0) === 0x22) {
+ val = val.slice(1, -1)
+ }
+
+ obj[key] = tryDecode(val, dec);
+ }
+
+ index = endIdx + 1
+ }
+
+ return obj;
+}
+
+/**
+ * Serialize data into a cookie header.
+ *
+ * Serialize the a name value pair into a cookie string suitable for
+ * http headers. An optional options object specified cookie parameters.
+ *
+ * serialize('foo', 'bar', { httpOnly: true })
+ * => "foo=bar; httpOnly"
+ *
+ * @param {string} name
+ * @param {string} val
+ * @param {object} [options]
+ * @return {string}
+ * @public
+ */
+
+function serialize(name, val, options) {
+ var opt = options || {};
+ var enc = opt.encode || encode;
+
+ if (typeof enc !== 'function') {
+ throw new TypeError('option encode is invalid');
+ }
+
+ if (!fieldContentRegExp.test(name)) {
+ throw new TypeError('argument name is invalid');
+ }
+
+ var value = enc(val);
+
+ if (value && !fieldContentRegExp.test(value)) {
+ throw new TypeError('argument val is invalid');
+ }
+
+ var str = name + '=' + value;
+
+ if (null != opt.maxAge) {
+ var maxAge = opt.maxAge - 0;
+
+ if (isNaN(maxAge) || !isFinite(maxAge)) {
+ throw new TypeError('option maxAge is invalid')
+ }
+
+ str += '; Max-Age=' + Math.floor(maxAge);
+ }
+
+ if (opt.domain) {
+ if (!fieldContentRegExp.test(opt.domain)) {
+ throw new TypeError('option domain is invalid');
+ }
+
+ str += '; Domain=' + opt.domain;
+ }
+
+ if (opt.path) {
+ if (!fieldContentRegExp.test(opt.path)) {
+ throw new TypeError('option path is invalid');
+ }
+
+ str += '; Path=' + opt.path;
+ }
+
+ if (opt.expires) {
+ var expires = opt.expires
+
+ if (!isDate(expires) || isNaN(expires.valueOf())) {
+ throw new TypeError('option expires is invalid');
+ }
+
+ str += '; Expires=' + expires.toUTCString()
+ }
+
+ if (opt.httpOnly) {
+ str += '; HttpOnly';
+ }
+
+ if (opt.secure) {
+ str += '; Secure';
+ }
+
+ if (opt.priority) {
+ var priority = typeof opt.priority === 'string'
+ ? opt.priority.toLowerCase()
+ : opt.priority
+
+ switch (priority) {
+ case 'low':
+ str += '; Priority=Low'
+ break
+ case 'medium':
+ str += '; Priority=Medium'
+ break
+ case 'high':
+ str += '; Priority=High'
+ break
+ default:
+ throw new TypeError('option priority is invalid')
+ }
+ }
+
+ if (opt.sameSite) {
+ var sameSite = typeof opt.sameSite === 'string'
+ ? opt.sameSite.toLowerCase() : opt.sameSite;
+
+ switch (sameSite) {
+ case true:
+ str += '; SameSite=Strict';
+ break;
+ case 'lax':
+ str += '; SameSite=Lax';
+ break;
+ case 'strict':
+ str += '; SameSite=Strict';
+ break;
+ case 'none':
+ str += '; SameSite=None';
+ break;
+ default:
+ throw new TypeError('option sameSite is invalid');
+ }
+ }
+
+ return str;
+}
+
+/**
+ * URL-decode string value. Optimized to skip native call when no %.
+ *
+ * @param {string} str
+ * @returns {string}
+ */
+
+function decode (str) {
+ return str.indexOf('%') !== -1
+ ? decodeURIComponent(str)
+ : str
+}
+
+/**
+ * URL-encode value.
+ *
+ * @param {string} str
+ * @returns {string}
+ */
+
+function encode (val) {
+ return encodeURIComponent(val)
+}
+
+/**
+ * Determine if value is a Date.
+ *
+ * @param {*} val
+ * @private
+ */
+
+function isDate (val) {
+ return __toString.call(val) === '[object Date]' ||
+ val instanceof Date
+}
+
+/**
+ * Try decoding a string using a decoding function.
+ *
+ * @param {string} str
+ * @param {function} decode
+ * @private
+ */
+
+function tryDecode(str, decode) {
+ try {
+ return decode(str);
+ } catch (e) {
+ return str;
+ }
+}
diff --git a/node_modules/cookie/package.json b/node_modules/cookie/package.json
new file mode 100644
index 0000000..ed5606a
--- /dev/null
+++ b/node_modules/cookie/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "cookie",
+ "description": "HTTP server cookie parsing and serialization",
+ "version": "0.5.0",
+ "author": "Roman Shtylman ",
+ "contributors": [
+ "Douglas Christopher Wilson "
+ ],
+ "license": "MIT",
+ "keywords": [
+ "cookie",
+ "cookies"
+ ],
+ "repository": "jshttp/cookie",
+ "devDependencies": {
+ "beautify-benchmark": "0.2.4",
+ "benchmark": "2.1.4",
+ "eslint": "7.32.0",
+ "eslint-plugin-markdown": "2.2.1",
+ "mocha": "9.2.2",
+ "nyc": "15.1.0",
+ "safe-buffer": "5.2.1",
+ "top-sites": "1.1.97"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "README.md",
+ "SECURITY.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "bench": "node benchmark/index.js",
+ "lint": "eslint .",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test",
+ "update-bench": "node scripts/update-benchmark.js",
+ "version": "node scripts/version-history.js && git add HISTORY.md"
+ }
+}
diff --git a/node_modules/data-uri-to-buffer/README.md b/node_modules/data-uri-to-buffer/README.md
new file mode 100644
index 0000000..2463f1f
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/README.md
@@ -0,0 +1,88 @@
+data-uri-to-buffer
+==================
+### Generate a Buffer instance from a [Data URI][rfc] string
+[](https://travis-ci.org/TooTallNate/node-data-uri-to-buffer)
+
+This module accepts a ["data" URI][rfc] String of data, and returns a
+node.js `Buffer` instance with the decoded data.
+
+
+Installation
+------------
+
+Install with `npm`:
+
+``` bash
+$ npm install data-uri-to-buffer
+```
+
+
+Example
+-------
+
+``` js
+var dataUriToBuffer = require('data-uri-to-buffer');
+
+// plain-text data is supported
+var uri = 'data:,Hello%2C%20World!';
+var decoded = dataUriToBuffer(uri);
+console.log(decoded.toString());
+// 'Hello, World!'
+
+// base64-encoded data is supported
+uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D';
+decoded = dataUriToBuffer(uri);
+console.log(decoded.toString());
+// 'Hello, World!'
+```
+
+
+API
+---
+
+### dataUriToBuffer(String uri) → Buffer
+
+The `type` property on the Buffer instance gets set to the main type portion of
+the "mediatype" portion of the "data" URI, or defaults to `"text/plain"` if not
+specified.
+
+The `typeFull` property on the Buffer instance gets set to the entire
+"mediatype" portion of the "data" URI (including all parameters), or defaults
+to `"text/plain;charset=US-ASCII"` if not specified.
+
+The `charset` property on the Buffer instance gets set to the Charset portion of
+the "mediatype" portion of the "data" URI, or defaults to `"US-ASCII"` if the
+entire type is not specified, or defaults to `""` otherwise.
+
+*Note*: If the only the main type is specified but not the charset, e.g.
+`"data:text/plain,abc"`, the charset is set to the empty string. The spec only
+defaults to US-ASCII as charset if the entire type is not specified.
+
+
+License
+-------
+
+(The MIT License)
+
+Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[rfc]: http://tools.ietf.org/html/rfc2397
diff --git a/node_modules/data-uri-to-buffer/dist/index.d.ts b/node_modules/data-uri-to-buffer/dist/index.d.ts
new file mode 100644
index 0000000..2a3d91e
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/index.d.ts
@@ -0,0 +1,15 @@
+///
+export interface MimeBuffer extends Buffer {
+ type: string;
+ typeFull: string;
+ charset: string;
+}
+/**
+ * Returns a `Buffer` instance from the given data URI `uri`.
+ *
+ * @param {String} uri Data URI to turn into a Buffer instance
+ * @returns {Buffer} Buffer instance from Data URI
+ * @api public
+ */
+export declare function dataUriToBuffer(uri: string): MimeBuffer;
+export default dataUriToBuffer;
diff --git a/node_modules/data-uri-to-buffer/dist/index.js b/node_modules/data-uri-to-buffer/dist/index.js
new file mode 100644
index 0000000..341b151
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/index.js
@@ -0,0 +1,53 @@
+/**
+ * Returns a `Buffer` instance from the given data URI `uri`.
+ *
+ * @param {String} uri Data URI to turn into a Buffer instance
+ * @returns {Buffer} Buffer instance from Data URI
+ * @api public
+ */
+export function dataUriToBuffer(uri) {
+ if (!/^data:/i.test(uri)) {
+ throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');
+ }
+ // strip newlines
+ uri = uri.replace(/\r?\n/g, '');
+ // split the URI up into the "metadata" and the "data" portions
+ const firstComma = uri.indexOf(',');
+ if (firstComma === -1 || firstComma <= 4) {
+ throw new TypeError('malformed data: URI');
+ }
+ // remove the "data:" scheme and parse the metadata
+ const meta = uri.substring(5, firstComma).split(';');
+ let charset = '';
+ let base64 = false;
+ const type = meta[0] || 'text/plain';
+ let typeFull = type;
+ for (let i = 1; i < meta.length; i++) {
+ if (meta[i] === 'base64') {
+ base64 = true;
+ }
+ else {
+ typeFull += `;${meta[i]}`;
+ if (meta[i].indexOf('charset=') === 0) {
+ charset = meta[i].substring(8);
+ }
+ }
+ }
+ // defaults to US-ASCII only if type is not provided
+ if (!meta[0] && !charset.length) {
+ typeFull += ';charset=US-ASCII';
+ charset = 'US-ASCII';
+ }
+ // get the encoded data portion and decode URI-encoded chars
+ const encoding = base64 ? 'base64' : 'ascii';
+ const data = unescape(uri.substring(firstComma + 1));
+ const buffer = Buffer.from(data, encoding);
+ // set `.type` and `.typeFull` properties to MIME type
+ buffer.type = type;
+ buffer.typeFull = typeFull;
+ // set the `.charset` property
+ buffer.charset = charset;
+ return buffer;
+}
+export default dataUriToBuffer;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/data-uri-to-buffer/dist/index.js.map b/node_modules/data-uri-to-buffer/dist/index.js.map
new file mode 100644
index 0000000..5392b25
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACzB,MAAM,IAAI,SAAS,CAClB,kEAAkE,CAClE,CAAC;KACF;IAED,iBAAiB;IACjB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhC,+DAA+D;IAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE;QACzC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC3C;IAED,mDAAmD;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACzB,MAAM,GAAG,IAAI,CAAC;SACd;aAAM;YACN,QAAQ,IAAI,IAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC/B;SACD;KACD;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAChC,QAAQ,IAAI,mBAAmB,CAAC;QAChC,OAAO,GAAG,UAAU,CAAC;KACrB;IAED,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAe,CAAC;IAEzD,sDAAsD;IACtD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,8BAA8B;IAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEzB,OAAO,MAAM,CAAC;AACf,CAAC;AAED,eAAe,eAAe,CAAC"}
\ No newline at end of file
diff --git a/node_modules/data-uri-to-buffer/dist/src/index.d.ts b/node_modules/data-uri-to-buffer/dist/src/index.d.ts
new file mode 100644
index 0000000..2a3d91e
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/src/index.d.ts
@@ -0,0 +1,15 @@
+///
+export interface MimeBuffer extends Buffer {
+ type: string;
+ typeFull: string;
+ charset: string;
+}
+/**
+ * Returns a `Buffer` instance from the given data URI `uri`.
+ *
+ * @param {String} uri Data URI to turn into a Buffer instance
+ * @returns {Buffer} Buffer instance from Data URI
+ * @api public
+ */
+export declare function dataUriToBuffer(uri: string): MimeBuffer;
+export default dataUriToBuffer;
diff --git a/node_modules/data-uri-to-buffer/dist/src/index.js b/node_modules/data-uri-to-buffer/dist/src/index.js
new file mode 100644
index 0000000..341b151
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/src/index.js
@@ -0,0 +1,53 @@
+/**
+ * Returns a `Buffer` instance from the given data URI `uri`.
+ *
+ * @param {String} uri Data URI to turn into a Buffer instance
+ * @returns {Buffer} Buffer instance from Data URI
+ * @api public
+ */
+export function dataUriToBuffer(uri) {
+ if (!/^data:/i.test(uri)) {
+ throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');
+ }
+ // strip newlines
+ uri = uri.replace(/\r?\n/g, '');
+ // split the URI up into the "metadata" and the "data" portions
+ const firstComma = uri.indexOf(',');
+ if (firstComma === -1 || firstComma <= 4) {
+ throw new TypeError('malformed data: URI');
+ }
+ // remove the "data:" scheme and parse the metadata
+ const meta = uri.substring(5, firstComma).split(';');
+ let charset = '';
+ let base64 = false;
+ const type = meta[0] || 'text/plain';
+ let typeFull = type;
+ for (let i = 1; i < meta.length; i++) {
+ if (meta[i] === 'base64') {
+ base64 = true;
+ }
+ else {
+ typeFull += `;${meta[i]}`;
+ if (meta[i].indexOf('charset=') === 0) {
+ charset = meta[i].substring(8);
+ }
+ }
+ }
+ // defaults to US-ASCII only if type is not provided
+ if (!meta[0] && !charset.length) {
+ typeFull += ';charset=US-ASCII';
+ charset = 'US-ASCII';
+ }
+ // get the encoded data portion and decode URI-encoded chars
+ const encoding = base64 ? 'base64' : 'ascii';
+ const data = unescape(uri.substring(firstComma + 1));
+ const buffer = Buffer.from(data, encoding);
+ // set `.type` and `.typeFull` properties to MIME type
+ buffer.type = type;
+ buffer.typeFull = typeFull;
+ // set the `.charset` property
+ buffer.charset = charset;
+ return buffer;
+}
+export default dataUriToBuffer;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/data-uri-to-buffer/dist/src/index.js.map b/node_modules/data-uri-to-buffer/dist/src/index.js.map
new file mode 100644
index 0000000..f3363a7
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACzB,MAAM,IAAI,SAAS,CAClB,kEAAkE,CAClE,CAAC;KACF;IAED,iBAAiB;IACjB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhC,+DAA+D;IAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE;QACzC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC3C;IAED,mDAAmD;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACzB,MAAM,GAAG,IAAI,CAAC;SACd;aAAM;YACN,QAAQ,IAAI,IAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC/B;SACD;KACD;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAChC,QAAQ,IAAI,mBAAmB,CAAC;QAChC,OAAO,GAAG,UAAU,CAAC;KACrB;IAED,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAe,CAAC;IAEzD,sDAAsD;IACtD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,8BAA8B;IAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEzB,OAAO,MAAM,CAAC;AACf,CAAC;AAED,eAAe,eAAe,CAAC"}
\ No newline at end of file
diff --git a/node_modules/data-uri-to-buffer/dist/test/test.d.ts b/node_modules/data-uri-to-buffer/dist/test/test.d.ts
new file mode 100644
index 0000000..a672ba1
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/test/test.d.ts
@@ -0,0 +1,4 @@
+/**
+ * Module dependencies.
+ */
+export {};
diff --git a/node_modules/data-uri-to-buffer/dist/test/test.js b/node_modules/data-uri-to-buffer/dist/test/test.js
new file mode 100644
index 0000000..8e59ebb
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/test/test.js
@@ -0,0 +1,144 @@
+/**
+ * Module dependencies.
+ */
+import assert from 'assert';
+import dataUriToBuffer from '../src';
+describe('data-uri-to-buffer', function () {
+ it('should decode bare-bones Data URIs', function () {
+ var uri = 'data:,Hello%2C%20World!';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('text/plain;charset=US-ASCII', buf.typeFull);
+ assert.equal('US-ASCII', buf.charset);
+ assert.equal('Hello, World!', buf.toString());
+ });
+ it('should decode bare-bones "base64" Data URIs', function () {
+ var uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('Hello, World!', buf.toString());
+ });
+ it('should decode plain-text Data URIs', function () {
+ var html = '' +
+ '' +
+ 'Embedded Window' +
+ '42
' +
+ '';
+ // Escape the HTML for URL formatting
+ var uri = 'data:text/html;charset=utf-8,' + encodeURIComponent(html);
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/html', buf.type);
+ assert.equal('utf-8', buf.charset);
+ assert.equal(html, buf.toString());
+ });
+ // the next 4 tests are from:
+ // https://bug161965.bugzilla.mozilla.org/attachment.cgi?id=94670&action=view
+ it('should decode "ISO-8859-8 in Base64" URIs', function () {
+ var uri = 'data:text/plain;charset=iso-8859-8-i;base64,+ezl7Q==';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('iso-8859-8-i', buf.charset);
+ assert.equal(4, buf.length);
+ assert.equal(0xf9, buf[0]);
+ assert.equal(0xec, buf[1]);
+ assert.equal(0xe5, buf[2]);
+ assert.equal(0xed, buf[3]);
+ });
+ it('should decode "ISO-8859-8 in URL-encoding" URIs', function () {
+ var uri = 'data:text/plain;charset=iso-8859-8-i,%f9%ec%e5%ed';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('iso-8859-8-i', buf.charset);
+ assert.equal(4, buf.length);
+ assert.equal(0xf9, buf[0]);
+ assert.equal(0xec, buf[1]);
+ assert.equal(0xe5, buf[2]);
+ assert.equal(0xed, buf[3]);
+ });
+ it('should decode "UTF-8 in Base64" URIs', function () {
+ var uri = 'data:text/plain;charset=UTF-8;base64,16nXnNeV150=';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('UTF-8', buf.charset);
+ assert.equal(8, buf.length);
+ assert.equal('שלום', buf.toString('utf8'));
+ });
+ it('should decode "UTF-8 in URL-encoding" URIs', function () {
+ var uri = 'data:text/plain;charset=UTF-8,%d7%a9%d7%9c%d7%95%d7%9d';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('UTF-8', buf.charset);
+ assert.equal(8, buf.length);
+ assert.equal('שלום', buf.toString('utf8'));
+ });
+ // this next one is from Wikipedia IIRC
+ it('should decode "base64" Data URIs with newlines', function () {
+ var uri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA\n' +
+ 'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO\n' +
+ '9TXL0Y4OHwAAAABJRU5ErkJggg==';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('image/png', buf.type);
+ assert.equal('iVBORw0KGgoAAAANSUhEUgAAAAUA' +
+ 'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO' +
+ '9TXL0Y4OHwAAAABJRU5ErkJggg==', buf.toString('base64'));
+ });
+ it('should decode a plain-text URI with a space character in it', function () {
+ var uri = 'data:,foo bar';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('foo bar', buf.toString());
+ });
+ it('should decode data with a "," comma char', function () {
+ var uri = 'data:,a,b';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('a,b', buf.toString());
+ });
+ it('should decode data with traditionally reserved characters like ";"', function () {
+ var uri = 'data:,;test';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal(';test', buf.toString());
+ });
+ it('should not default to US-ASCII if main type is provided', function () {
+ var uri = 'data:text/plain,abc';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('text/plain', buf.typeFull);
+ assert.equal('', buf.charset);
+ assert.equal('abc', buf.toString());
+ });
+ it('should default to text/plain if main type is not provided', function () {
+ var uri = 'data:;charset=UTF-8,abc';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('text/plain;charset=UTF-8', buf.typeFull);
+ assert.equal('UTF-8', buf.charset);
+ assert.equal('abc', buf.toString());
+ });
+ it('should not allow charset without a leading ;', function () {
+ var uri = 'data:charset=UTF-8,abc';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('charset=UTF-8', buf.type);
+ assert.equal('charset=UTF-8', buf.typeFull);
+ assert.equal('', buf.charset);
+ assert.equal('abc', buf.toString());
+ });
+ it('should allow custom media type parameters', function () {
+ var uri = 'data:application/javascript;version=1.8;charset=UTF-8,abc';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('application/javascript', buf.type);
+ assert.equal('application/javascript;version=1.8;charset=UTF-8', buf.typeFull);
+ assert.equal('UTF-8', buf.charset);
+ assert.equal('abc', buf.toString());
+ });
+ it('should allow base64 annotation anywhere', function () {
+ var uri = 'data:text/plain;base64;charset=UTF-8,YWJj';
+ var buf = dataUriToBuffer(uri);
+ assert.equal('text/plain', buf.type);
+ assert.equal('text/plain;charset=UTF-8', buf.typeFull);
+ assert.equal('UTF-8', buf.charset);
+ assert.equal('abc', buf.toString());
+ });
+});
+//# sourceMappingURL=test.js.map
\ No newline at end of file
diff --git a/node_modules/data-uri-to-buffer/dist/test/test.js.map b/node_modules/data-uri-to-buffer/dist/test/test.js.map
new file mode 100644
index 0000000..3786864
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/dist/test/test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"test.js","sourceRoot":"","sources":["../../test/test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,eAAe,MAAM,QAAQ,CAAC;AAErC,QAAQ,CAAC,oBAAoB,EAAE;IAC9B,EAAE,CAAC,oCAAoC,EAAE;QACxC,IAAI,GAAG,GAAG,yBAAyB,CAAC;QAEpC,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE;QACjD,IAAI,GAAG,GAAG,iDAAiD,CAAC;QAE5D,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE;QACxC,IAAI,IAAI,GACP,iBAAiB;YACjB,kBAAkB;YAClB,6CAA6C;YAC7C,0BAA0B;YAC1B,SAAS,CAAC;QAEX,qCAAqC;QACrC,IAAI,GAAG,GAAG,+BAA+B,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAErE,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,6EAA6E;IAE7E,EAAE,CAAC,2CAA2C,EAAE;QAC/C,IAAI,GAAG,GAAG,sDAAsD,CAAC;QAEjE,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE;QACrD,IAAI,GAAG,GAAG,mDAAmD,CAAC;QAE9D,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE;QAC1C,IAAI,GAAG,GAAG,mDAAmD,CAAC;QAE9D,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE;QAChD,IAAI,GAAG,GAAG,wDAAwD,CAAC;QAEnE,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,uCAAuC;IAEvC,EAAE,CAAC,gDAAgD,EAAE;QACpD,IAAI,GAAG,GACN,sDAAsD;YACtD,gEAAgE;YAChE,8BAA8B,CAAC;QAEhC,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CACX,8BAA8B;YAC7B,8DAA8D;YAC9D,8BAA8B,EAC/B,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE;QACjE,IAAI,GAAG,GAAG,eAAe,CAAC;QAE1B,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE;QAC9C,IAAI,GAAG,GAAG,WAAW,CAAC;QACtB,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE;QACxE,IAAI,GAAG,GAAG,aAAa,CAAC;QACxB,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE;QAC7D,IAAI,GAAG,GAAG,qBAAqB,CAAC;QAChC,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE;QAC/D,IAAI,GAAG,GAAG,yBAAyB,CAAC;QACpC,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE;QAClD,IAAI,GAAG,GAAG,wBAAwB,CAAC;QACnC,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE;QAC/C,IAAI,GAAG,GAAG,2DAA2D,CAAC;QACtE,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CACX,kDAAkD,EAClD,GAAG,CAAC,QAAQ,CACZ,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE;QAC7C,IAAI,GAAG,GAAG,2CAA2C,CAAC;QACtD,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
\ No newline at end of file
diff --git a/node_modules/data-uri-to-buffer/package.json b/node_modules/data-uri-to-buffer/package.json
new file mode 100644
index 0000000..e4f7357
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "data-uri-to-buffer",
+ "version": "4.0.0",
+ "description": "Generate a Buffer instance from a Data URI string",
+ "type": "module",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "files": [
+ "dist",
+ "src"
+ ],
+ "scripts": {
+ "build": "tsc",
+ "test": "jest",
+ "prepublishOnly": "npm run build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/TooTallNate/node-data-uri-to-buffer.git"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "keywords": [
+ "data",
+ "uri",
+ "datauri",
+ "data-uri",
+ "buffer",
+ "convert",
+ "rfc2397",
+ "2397"
+ ],
+ "author": "Nathan Rajlich (http://n8.io/)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/TooTallNate/node-data-uri-to-buffer/issues"
+ },
+ "homepage": "https://github.com/TooTallNate/node-data-uri-to-buffer",
+ "devDependencies": {
+ "@types/es6-promisify": "^5.0.0",
+ "@types/mocha": "^9.0.0",
+ "@types/node": "^10.5.3",
+ "jest": "^27.2.2",
+ "ts-jest": "^27.0.5",
+ "typescript": "^4.4.3"
+ },
+ "jest": {
+ "preset": "ts-jest",
+ "globals": {
+ "ts-jest": {
+ "diagnostics": false,
+ "isolatedModules": true
+ }
+ },
+ "verbose": false,
+ "testEnvironment": "node",
+ "testMatch": [
+ "/test/**/*.test.ts"
+ ]
+ }
+}
diff --git a/node_modules/data-uri-to-buffer/src/index.ts b/node_modules/data-uri-to-buffer/src/index.ts
new file mode 100644
index 0000000..00e4446
--- /dev/null
+++ b/node_modules/data-uri-to-buffer/src/index.ts
@@ -0,0 +1,68 @@
+export interface MimeBuffer extends Buffer {
+ type: string;
+ typeFull: string;
+ charset: string;
+}
+
+/**
+ * Returns a `Buffer` instance from the given data URI `uri`.
+ *
+ * @param {String} uri Data URI to turn into a Buffer instance
+ * @returns {Buffer} Buffer instance from Data URI
+ * @api public
+ */
+export function dataUriToBuffer(uri: string): MimeBuffer {
+ if (!/^data:/i.test(uri)) {
+ throw new TypeError(
+ '`uri` does not appear to be a Data URI (must begin with "data:")'
+ );
+ }
+
+ // strip newlines
+ uri = uri.replace(/\r?\n/g, '');
+
+ // split the URI up into the "metadata" and the "data" portions
+ const firstComma = uri.indexOf(',');
+ if (firstComma === -1 || firstComma <= 4) {
+ throw new TypeError('malformed data: URI');
+ }
+
+ // remove the "data:" scheme and parse the metadata
+ const meta = uri.substring(5, firstComma).split(';');
+
+ let charset = '';
+ let base64 = false;
+ const type = meta[0] || 'text/plain';
+ let typeFull = type;
+ for (let i = 1; i < meta.length; i++) {
+ if (meta[i] === 'base64') {
+ base64 = true;
+ } else {
+ typeFull += `;${ meta[i]}`;
+ if (meta[i].indexOf('charset=') === 0) {
+ charset = meta[i].substring(8);
+ }
+ }
+ }
+ // defaults to US-ASCII only if type is not provided
+ if (!meta[0] && !charset.length) {
+ typeFull += ';charset=US-ASCII';
+ charset = 'US-ASCII';
+ }
+
+ // get the encoded data portion and decode URI-encoded chars
+ const encoding = base64 ? 'base64' : 'ascii';
+ const data = unescape(uri.substring(firstComma + 1));
+ const buffer = Buffer.from(data, encoding) as MimeBuffer;
+
+ // set `.type` and `.typeFull` properties to MIME type
+ buffer.type = type;
+ buffer.typeFull = typeFull;
+
+ // set the `.charset` property
+ buffer.charset = charset;
+
+ return buffer;
+}
+
+export default dataUriToBuffer;
diff --git a/node_modules/debug/.coveralls.yml b/node_modules/debug/.coveralls.yml
new file mode 100644
index 0000000..20a7068
--- /dev/null
+++ b/node_modules/debug/.coveralls.yml
@@ -0,0 +1 @@
+repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve
diff --git a/node_modules/debug/.eslintrc b/node_modules/debug/.eslintrc
new file mode 100644
index 0000000..8a37ae2
--- /dev/null
+++ b/node_modules/debug/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "rules": {
+ "no-console": 0,
+ "no-empty": [1, { "allowEmptyCatch": true }]
+ },
+ "extends": "eslint:recommended"
+}
diff --git a/node_modules/debug/.npmignore b/node_modules/debug/.npmignore
new file mode 100644
index 0000000..5f60eec
--- /dev/null
+++ b/node_modules/debug/.npmignore
@@ -0,0 +1,9 @@
+support
+test
+examples
+example
+*.sock
+dist
+yarn.lock
+coverage
+bower.json
diff --git a/node_modules/debug/.travis.yml b/node_modules/debug/.travis.yml
new file mode 100644
index 0000000..6c6090c
--- /dev/null
+++ b/node_modules/debug/.travis.yml
@@ -0,0 +1,14 @@
+
+language: node_js
+node_js:
+ - "6"
+ - "5"
+ - "4"
+
+install:
+ - make node_modules
+
+script:
+ - make lint
+ - make test
+ - make coveralls
diff --git a/node_modules/debug/CHANGELOG.md b/node_modules/debug/CHANGELOG.md
new file mode 100644
index 0000000..eadaa18
--- /dev/null
+++ b/node_modules/debug/CHANGELOG.md
@@ -0,0 +1,362 @@
+
+2.6.9 / 2017-09-22
+==================
+
+ * remove ReDoS regexp in %o formatter (#504)
+
+2.6.8 / 2017-05-18
+==================
+
+ * Fix: Check for undefined on browser globals (#462, @marbemac)
+
+2.6.7 / 2017-05-16
+==================
+
+ * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
+ * Fix: Inline extend function in node implementation (#452, @dougwilson)
+ * Docs: Fix typo (#455, @msasad)
+
+2.6.5 / 2017-04-27
+==================
+
+ * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
+ * Misc: clean up browser reference checks (#447, @thebigredgeek)
+ * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
+
+
+2.6.4 / 2017-04-20
+==================
+
+ * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
+ * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
+ * Misc: update "ms" to v0.7.3 (@tootallnate)
+
+2.6.3 / 2017-03-13
+==================
+
+ * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
+ * Docs: Changelog fix (@thebigredgeek)
+
+2.6.2 / 2017-03-10
+==================
+
+ * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
+ * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
+ * Docs: Add Slackin invite badge (@tootallnate)
+
+2.6.1 / 2017-02-10
+==================
+
+ * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+ * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+ * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+ * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+ * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+ * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+ * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+ * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+ * Docs: fixed README typo (#391, @lurch)
+ * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+ * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+ * Fix: wrong reference in bower file (@thebigredgeek)
+ * Fix: webworker compatibility (@thebigredgeek)
+ * Fix: output formatting issue (#388, @kribblo)
+ * Fix: babel-loader compatibility (#383, @escwald)
+ * Misc: removed built asset from repo and publications (@thebigredgeek)
+ * Misc: moved source files to /src (#378, @yamikuronue)
+ * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+ * Test: coveralls integration (#378, @yamikuronue)
+ * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+ * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+ * Fix: custom log function (#379, @hsiliev)
+ * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+ * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+ * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+ * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+ * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+ * Fix: browser colors (#367, @tootallnate)
+ * Misc: travis ci integration (@thebigredgeek)
+ * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+ * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+ * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+ * Fix: revert "handle regex special characters" (@tootallnate)
+ * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+ * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+ * Improvement: allow colors in workers (#335, @botverse)
+ * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+ * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+ * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+ * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+ * Fix: be super-safe in index.js as well (@TooTallNate)
+ * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+ * Fix: Added electron compatibility (#324, @paulcbetts)
+ * Improvement: Added performance optimizations (@tootallnate)
+ * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+ * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+ * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+ * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+ * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+ * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+ * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+ * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+ * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+ * Readme: fix USE_COLORS to DEBUG_COLORS
+ * Readme: Doc fixes for format string sugar (#269, @mlucool)
+ * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+ * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+ * Readme: better docs for browser support (#224, @matthewmueller)
+ * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+ * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+ * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+ * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+ * package: update "ms" to v0.7.1 (#202, @dougwilson)
+ * README: add logging to file example (#193, @DanielOchoa)
+ * README: fixed a typo (#191, @amir-s)
+ * browser: expose `storage` (#190, @stephenmathieson)
+ * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+ * Updated stdout/stderr example (#186)
+ * Updated example/stdout.js to match debug current behaviour
+ * Renamed example/stderr.js to stdout.js
+ * Update Readme.md (#184)
+ * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+ * dist: recompile
+ * update "ms" to v0.7.0
+ * package: update "browserify" to v9.0.3
+ * component: fix "ms.js" repo location
+ * changed bower package name
+ * updated documentation about using debug in a browser
+ * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+ * browser: use `typeof` to check for `console` existence
+ * browser: check for `console.log` truthiness (fix IE 8/9)
+ * browser: add support for Chrome apps
+ * Readme: added Windows usage remarks
+ * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+ * node: implement `DEBUG_FD` env variable support
+ * package: update "browserify" to v6.1.0
+ * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+ * package: update "browserify" to v5.11.0
+ * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+ * dist: recompile
+ * example: remove `console.info()` log usage
+ * example: add "Content-Type" UTF-8 header to browser example
+ * browser: place %c marker after the space character
+ * browser: reset the "content" color via `color: inherit`
+ * browser: add colors support for Firefox >= v31
+ * debug: prefer an instance `log()` function over the global one (#119)
+ * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+ * Add support for multiple wildcards in namespaces (#122, @seegno)
+ * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+ * browser: update color palette (#113, @gscottolson)
+ * common: make console logging function configurable (#108, @timoxley)
+ * node: fix %o colors on old node <= 0.8.x
+ * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+ * browser: use `removeItem()` to clear localStorage
+ * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+ * package: add "contributors" section
+ * node: fix comment typo
+ * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+ * make ms diff be global, not be scope
+ * debug: ignore empty strings in enable()
+ * node: make DEBUG_COLORS able to disable coloring
+ * *: export the `colors` array
+ * npmignore: don't publish the `dist` dir
+ * Makefile: refactor to use browserify
+ * package: add "browserify" as a dev dependency
+ * Readme: add Web Inspector Colors section
+ * node: reset terminal color for the debug content
+ * node: map "%o" to `util.inspect()`
+ * browser: map "%j" to `JSON.stringify()`
+ * debug: add custom "formatters"
+ * debug: use "ms" module for humanizing the diff
+ * Readme: add "bash" syntax highlighting
+ * browser: add Firebug color support
+ * browser: add colors for WebKit browsers
+ * node: apply log to `console`
+ * rewrite: abstract common logic for Node & browsers
+ * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+ * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+ * add `enable()` method for nodejs. Closes #27
+ * change from stderr to stdout
+ * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+ * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+ * fix: catch localStorage security error when cookies are blocked (Chrome)
+ * add debug(err) support. Closes #46
+ * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+ * fix package.json
+ * fix: Mobile Safari (private mode) is broken with debug
+ * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+ * add repository URL to package.json
+ * add DEBUG_COLORED to force colored output
+ * add browserify support
+ * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+ * Added .component to package.json
+ * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+ * Added support for "-" prefix in DEBUG [Vinay Pulim]
+ * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+ * Added: humanize diffs. Closes #8
+ * Added `debug.disable()` to the CS variant
+ * Removed padding. Closes #10
+ * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+ * Added browser variant support for older browsers [TooTallNate]
+ * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+ * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+ * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+ * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+ * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+ * Initial release
diff --git a/node_modules/debug/LICENSE b/node_modules/debug/LICENSE
new file mode 100644
index 0000000..658c933
--- /dev/null
+++ b/node_modules/debug/LICENSE
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the 'Software'), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/node_modules/debug/Makefile b/node_modules/debug/Makefile
new file mode 100644
index 0000000..584da8b
--- /dev/null
+++ b/node_modules/debug/Makefile
@@ -0,0 +1,50 @@
+# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
+THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
+
+# BIN directory
+BIN := $(THIS_DIR)/node_modules/.bin
+
+# Path
+PATH := node_modules/.bin:$(PATH)
+SHELL := /bin/bash
+
+# applications
+NODE ?= $(shell which node)
+YARN ?= $(shell which yarn)
+PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
+BROWSERIFY ?= $(NODE) $(BIN)/browserify
+
+.FORCE:
+
+install: node_modules
+
+node_modules: package.json
+ @NODE_ENV= $(PKG) install
+ @touch node_modules
+
+lint: .FORCE
+ eslint browser.js debug.js index.js node.js
+
+test-node: .FORCE
+ istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
+
+test-browser: .FORCE
+ mkdir -p dist
+
+ @$(BROWSERIFY) \
+ --standalone debug \
+ . > dist/debug.js
+
+ karma start --single-run
+ rimraf dist
+
+test: .FORCE
+ concurrently \
+ "make test-node" \
+ "make test-browser"
+
+coveralls:
+ cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+
+.PHONY: all install clean distclean
diff --git a/node_modules/debug/README.md b/node_modules/debug/README.md
new file mode 100644
index 0000000..f67be6b
--- /dev/null
+++ b/node_modules/debug/README.md
@@ -0,0 +1,312 @@
+# debug
+[](https://travis-ci.org/visionmedia/debug) [](https://coveralls.io/github/visionmedia/debug?branch=master) [](https://visionmedia-community-slackin.now.sh/) [](#backers)
+[](#sponsors)
+
+
+
+A tiny node.js debugging utility modelled after node core's debugging technique.
+
+**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example _app.js_:
+
+```js
+var debug = require('debug')('http')
+ , http = require('http')
+ , name = 'My App';
+
+// fake app
+
+debug('booting %s', name);
+
+http.createServer(function(req, res){
+ debug(req.method + ' ' + req.url);
+ res.end('hello\n');
+}).listen(3000, function(){
+ debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example _worker.js_:
+
+```js
+var debug = require('debug')('worker');
+
+setInterval(function(){
+ debug('doing some work');
+}, 1000);
+```
+
+ The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
+
+ 
+
+ 
+
+#### Windows note
+
+ On Windows the environment variable is set using the `set` command.
+
+ ```cmd
+ set DEBUG=*,-not_this
+ ```
+
+ Note that PowerShell uses different syntax to set environment variables.
+
+ ```cmd
+ $env:DEBUG = "*,-not_this"
+ ```
+
+Then, run the program to be debugged as usual.
+
+## Millisecond diff
+
+ When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+ 
+
+ When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
+
+ 
+
+## Conventions
+
+ If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
+
+## Wildcards
+
+ The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+ You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
+
+## Environment Variables
+
+ When running through Node.js, you can set a few environment variables that will
+ change the behavior of the debug logging:
+
+| Name | Purpose |
+|-----------|-------------------------------------------------|
+| `DEBUG` | Enables/disables specific debugging namespaces. |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth. |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+ __Note:__ The environment variables beginning with `DEBUG_` end up being
+ converted into an Options object that gets used with `%o`/`%O` formatters.
+ See the Node.js documentation for
+ [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+ for the complete list.
+
+## Formatters
+
+
+ Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O` | Pretty-print an Object on multiple lines. |
+| `%o` | Pretty-print an Object all on a single line. |
+| `%s` | String. |
+| `%d` | Number (both integer and float). |
+| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%` | Single percent sign ('%'). This does not consume an argument. |
+
+### Custom formatters
+
+ You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+ return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+// foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+## Browser support
+ You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+ or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+ if you don't want to build it yourself.
+
+ Debug's enable state is currently persisted by `localStorage`.
+ Consider the situation shown below where you have `worker:a` and `worker:b`,
+ and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+ a('doing some work');
+}, 1000);
+
+setInterval(function(){
+ b('doing some work');
+}, 1200);
+```
+
+#### Web Inspector Colors
+
+ Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+ option. These are WebKit web inspectors, Firefox ([since version
+ 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+ and the Firebug plugin for Firefox (any version).
+
+ Colored output looks something like:
+
+ 
+
+
+## Output streams
+
+ By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example _stdout.js_:
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Sponsors
+
+Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/debug/component.json b/node_modules/debug/component.json
new file mode 100644
index 0000000..9de2641
--- /dev/null
+++ b/node_modules/debug/component.json
@@ -0,0 +1,19 @@
+{
+ "name": "debug",
+ "repo": "visionmedia/debug",
+ "description": "small debugging utility",
+ "version": "2.6.9",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "main": "src/browser.js",
+ "scripts": [
+ "src/browser.js",
+ "src/debug.js"
+ ],
+ "dependencies": {
+ "rauchg/ms.js": "0.7.1"
+ }
+}
diff --git a/node_modules/debug/karma.conf.js b/node_modules/debug/karma.conf.js
new file mode 100644
index 0000000..103a82d
--- /dev/null
+++ b/node_modules/debug/karma.conf.js
@@ -0,0 +1,70 @@
+// Karma configuration
+// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC)
+
+module.exports = function(config) {
+ config.set({
+
+ // base path that will be used to resolve all patterns (eg. files, exclude)
+ basePath: '',
+
+
+ // frameworks to use
+ // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+ frameworks: ['mocha', 'chai', 'sinon'],
+
+
+ // list of files / patterns to load in the browser
+ files: [
+ 'dist/debug.js',
+ 'test/*spec.js'
+ ],
+
+
+ // list of files to exclude
+ exclude: [
+ 'src/node.js'
+ ],
+
+
+ // preprocess matching files before serving them to the browser
+ // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+ preprocessors: {
+ },
+
+ // test results reporter to use
+ // possible values: 'dots', 'progress'
+ // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+ reporters: ['progress'],
+
+
+ // web server port
+ port: 9876,
+
+
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+
+
+ // level of logging
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+ logLevel: config.LOG_INFO,
+
+
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: true,
+
+
+ // start these browsers
+ // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+ browsers: ['PhantomJS'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false,
+
+ // Concurrency level
+ // how many browser should be started simultaneous
+ concurrency: Infinity
+ })
+}
diff --git a/node_modules/debug/node.js b/node_modules/debug/node.js
new file mode 100644
index 0000000..7fc36fe
--- /dev/null
+++ b/node_modules/debug/node.js
@@ -0,0 +1 @@
+module.exports = require('./src/node');
diff --git a/node_modules/debug/package.json b/node_modules/debug/package.json
new file mode 100644
index 0000000..dc787ba
--- /dev/null
+++ b/node_modules/debug/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "debug",
+ "version": "2.6.9",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/debug.git"
+ },
+ "description": "small debugging utility",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "author": "TJ Holowaychuk ",
+ "contributors": [
+ "Nathan Rajlich (http://n8.io)",
+ "Andrew Rhyne "
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ },
+ "devDependencies": {
+ "browserify": "9.0.3",
+ "chai": "^3.5.0",
+ "concurrently": "^3.1.0",
+ "coveralls": "^2.11.15",
+ "eslint": "^3.12.1",
+ "istanbul": "^0.4.5",
+ "karma": "^1.3.0",
+ "karma-chai": "^0.1.0",
+ "karma-mocha": "^1.3.0",
+ "karma-phantomjs-launcher": "^1.0.2",
+ "karma-sinon": "^1.0.5",
+ "mocha": "^3.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "rimraf": "^2.5.4",
+ "sinon": "^1.17.6",
+ "sinon-chai": "^2.8.0"
+ },
+ "main": "./src/index.js",
+ "browser": "./src/browser.js",
+ "component": {
+ "scripts": {
+ "debug/index.js": "browser.js",
+ "debug/debug.js": "debug.js"
+ }
+ }
+}
diff --git a/node_modules/debug/src/browser.js b/node_modules/debug/src/browser.js
new file mode 100644
index 0000000..7106924
--- /dev/null
+++ b/node_modules/debug/src/browser.js
@@ -0,0 +1,185 @@
+/**
+ * This is the web browser implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = 'undefined' != typeof chrome
+ && 'undefined' != typeof chrome.storage
+ ? chrome.storage.local
+ : localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+ 'lightseagreen',
+ 'forestgreen',
+ 'goldenrod',
+ 'dodgerblue',
+ 'darkorchid',
+ 'crimson'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+ return true;
+ }
+
+ // is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ // is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ // is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+exports.formatters.j = function(v) {
+ try {
+ return JSON.stringify(v);
+ } catch (err) {
+ return '[UnexpectedJSONParseError]: ' + err.message;
+ }
+};
+
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var useColors = this.useColors;
+
+ args[0] = (useColors ? '%c' : '')
+ + this.namespace
+ + (useColors ? ' %c' : ' ')
+ + args[0]
+ + (useColors ? '%c ' : ' ')
+ + '+' + exports.humanize(this.diff);
+
+ if (!useColors) return;
+
+ var c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit')
+
+ // the final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ var index = 0;
+ var lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, function(match) {
+ if ('%%' === match) return;
+ index++;
+ if ('%c' === match) {
+ // we only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+
+function log() {
+ // this hackery is required for IE8/9, where
+ // the `console.log` function doesn't have 'apply'
+ return 'object' === typeof console
+ && console.log
+ && Function.prototype.apply.call(console.log, console, arguments);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ try {
+ if (null == namespaces) {
+ exports.storage.removeItem('debug');
+ } else {
+ exports.storage.debug = namespaces;
+ }
+ } catch(e) {}
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ var r;
+ try {
+ r = exports.storage.debug;
+ } catch(e) {}
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+}
+
+/**
+ * Enable namespaces listed in `localStorage.debug` initially.
+ */
+
+exports.enable(load());
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+ try {
+ return window.localStorage;
+ } catch (e) {}
+}
diff --git a/node_modules/debug/src/debug.js b/node_modules/debug/src/debug.js
new file mode 100644
index 0000000..6a5e3fc
--- /dev/null
+++ b/node_modules/debug/src/debug.js
@@ -0,0 +1,202 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+exports.coerce = coerce;
+exports.disable = disable;
+exports.enable = enable;
+exports.enabled = enabled;
+exports.humanize = require('ms');
+
+/**
+ * The currently active debug mode names, and names to skip.
+ */
+
+exports.names = [];
+exports.skips = [];
+
+/**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+exports.formatters = {};
+
+/**
+ * Previous log timestamp.
+ */
+
+var prevTime;
+
+/**
+ * Select a color.
+ * @param {String} namespace
+ * @return {Number}
+ * @api private
+ */
+
+function selectColor(namespace) {
+ var hash = 0, i;
+
+ for (i in namespace) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return exports.colors[Math.abs(hash) % exports.colors.length];
+}
+
+/**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+function createDebug(namespace) {
+
+ function debug() {
+ // disabled?
+ if (!debug.enabled) return;
+
+ var self = debug;
+
+ // set `diff` timestamp
+ var curr = +new Date();
+ var ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ // turn the `arguments` into a proper Array
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i];
+ }
+
+ args[0] = exports.coerce(args[0]);
+
+ if ('string' !== typeof args[0]) {
+ // anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // apply any `formatters` transformations
+ var index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
+ // if we encounter an escaped % then don't increase the array index
+ if (match === '%%') return match;
+ index++;
+ var formatter = exports.formatters[format];
+ if ('function' === typeof formatter) {
+ var val = args[index];
+ match = formatter.call(self, val);
+
+ // now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // apply env-specific formatting (colors, etc.)
+ exports.formatArgs.call(self, args);
+
+ var logFn = debug.log || exports.log || console.log.bind(console);
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.enabled = exports.enabled(namespace);
+ debug.useColors = exports.useColors();
+ debug.color = selectColor(namespace);
+
+ // env-specific initialization logic for debug instances
+ if ('function' === typeof exports.init) {
+ exports.init(debug);
+ }
+
+ return debug;
+}
+
+/**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+function enable(namespaces) {
+ exports.save(namespaces);
+
+ exports.names = [];
+ exports.skips = [];
+
+ var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ var len = split.length;
+
+ for (var i = 0; i < len; i++) {
+ if (!split[i]) continue; // ignore empty strings
+ namespaces = split[i].replace(/\*/g, '.*?');
+ if (namespaces[0] === '-') {
+ exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+ } else {
+ exports.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+}
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+function disable() {
+ exports.enable('');
+}
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+function enabled(name) {
+ var i, len;
+ for (i = 0, len = exports.skips.length; i < len; i++) {
+ if (exports.skips[i].test(name)) {
+ return false;
+ }
+ }
+ for (i = 0, len = exports.names.length; i < len; i++) {
+ if (exports.names[i].test(name)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function coerce(val) {
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+}
diff --git a/node_modules/debug/src/index.js b/node_modules/debug/src/index.js
new file mode 100644
index 0000000..e12cf4d
--- /dev/null
+++ b/node_modules/debug/src/index.js
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process !== 'undefined' && process.type === 'renderer') {
+ module.exports = require('./browser.js');
+} else {
+ module.exports = require('./node.js');
+}
diff --git a/node_modules/debug/src/inspector-log.js b/node_modules/debug/src/inspector-log.js
new file mode 100644
index 0000000..60ea6c0
--- /dev/null
+++ b/node_modules/debug/src/inspector-log.js
@@ -0,0 +1,15 @@
+module.exports = inspectorLog;
+
+// black hole
+const nullStream = new (require('stream').Writable)();
+nullStream._write = () => {};
+
+/**
+ * Outputs a `console.log()` to the Node.js Inspector console *only*.
+ */
+function inspectorLog() {
+ const stdout = console._stdout;
+ console._stdout = nullStream;
+ console.log.apply(console, arguments);
+ console._stdout = stdout;
+}
diff --git a/node_modules/debug/src/node.js b/node_modules/debug/src/node.js
new file mode 100644
index 0000000..b15109c
--- /dev/null
+++ b/node_modules/debug/src/node.js
@@ -0,0 +1,248 @@
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+var util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(function (key) {
+ return /^debug_/i.test(key);
+}).reduce(function (obj, key) {
+ // camel-case
+ var prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
+
+ // coerce string value into JS value
+ var val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
+ else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
+ else if (val === 'null') val = null;
+ else val = Number(val);
+
+ obj[prop] = val;
+ return obj;
+}, {});
+
+/**
+ * The file descriptor to write the `debug()` calls to.
+ * Set the `DEBUG_FD` env variable to override with another value. i.e.:
+ *
+ * $ DEBUG_FD=3 node script.js 3>debug.log
+ */
+
+var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
+
+if (1 !== fd && 2 !== fd) {
+ util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
+}
+
+var stream = 1 === fd ? process.stdout :
+ 2 === fd ? process.stderr :
+ createWritableStdioStream(fd);
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+ return 'colors' in exports.inspectOpts
+ ? Boolean(exports.inspectOpts.colors)
+ : tty.isatty(fd);
+}
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+exports.formatters.o = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .split('\n').map(function(str) {
+ return str.trim()
+ }).join(' ');
+};
+
+/**
+ * Map %o to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+exports.formatters.O = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+};
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var name = this.namespace;
+ var useColors = this.useColors;
+
+ if (useColors) {
+ var c = this.color;
+ var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
+ } else {
+ args[0] = new Date().toUTCString()
+ + ' ' + name + ' ' + args[0];
+ }
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to `stream`.
+ */
+
+function log() {
+ return stream.write(util.format.apply(util, arguments) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ if (null == namespaces) {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ } else {
+ process.env.DEBUG = namespaces;
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ return process.env.DEBUG;
+}
+
+/**
+ * Copied from `node/src/node.js`.
+ *
+ * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
+ * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
+ */
+
+function createWritableStdioStream (fd) {
+ var stream;
+ var tty_wrap = process.binding('tty_wrap');
+
+ // Note stream._type is used for test-module-load-list.js
+
+ switch (tty_wrap.guessHandleType(fd)) {
+ case 'TTY':
+ stream = new tty.WriteStream(fd);
+ stream._type = 'tty';
+
+ // Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ case 'FILE':
+ var fs = require('fs');
+ stream = new fs.SyncWriteStream(fd, { autoClose: false });
+ stream._type = 'fs';
+ break;
+
+ case 'PIPE':
+ case 'TCP':
+ var net = require('net');
+ stream = new net.Socket({
+ fd: fd,
+ readable: false,
+ writable: true
+ });
+
+ // FIXME Should probably have an option in net.Socket to create a
+ // stream from an existing fd which is writable only. But for now
+ // we'll just add this hack and set the `readable` member to false.
+ // Test: ./node test/fixtures/echo.js < /etc/passwd
+ stream.readable = false;
+ stream.read = null;
+ stream._type = 'pipe';
+
+ // FIXME Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ default:
+ // Probably an error on in uv_guess_handle()
+ throw new Error('Implement me. Unknown stream file type!');
+ }
+
+ // For supporting legacy API we put the FD here.
+ stream.fd = fd;
+
+ stream._isStdio = true;
+
+ return stream;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init (debug) {
+ debug.inspectOpts = {};
+
+ var keys = Object.keys(exports.inspectOpts);
+ for (var i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
+}
+
+/**
+ * Enable namespaces listed in `process.env.DEBUG` initially.
+ */
+
+exports.enable(load());
diff --git a/node_modules/delayed-stream/.npmignore b/node_modules/delayed-stream/.npmignore
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/node_modules/delayed-stream/.npmignore
@@ -0,0 +1 @@
+test
diff --git a/node_modules/delayed-stream/License b/node_modules/delayed-stream/License
new file mode 100644
index 0000000..4804b7a
--- /dev/null
+++ b/node_modules/delayed-stream/License
@@ -0,0 +1,19 @@
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/delayed-stream/Makefile b/node_modules/delayed-stream/Makefile
new file mode 100644
index 0000000..b4ff85a
--- /dev/null
+++ b/node_modules/delayed-stream/Makefile
@@ -0,0 +1,7 @@
+SHELL := /bin/bash
+
+test:
+ @./test/run.js
+
+.PHONY: test
+
diff --git a/node_modules/delayed-stream/Readme.md b/node_modules/delayed-stream/Readme.md
new file mode 100644
index 0000000..aca36f9
--- /dev/null
+++ b/node_modules/delayed-stream/Readme.md
@@ -0,0 +1,141 @@
+# delayed-stream
+
+Buffers events from a stream until you are ready to handle them.
+
+## Installation
+
+``` bash
+npm install delayed-stream
+```
+
+## Usage
+
+The following example shows how to write a http echo server that delays its
+response by 1000 ms.
+
+``` javascript
+var DelayedStream = require('delayed-stream');
+var http = require('http');
+
+http.createServer(function(req, res) {
+ var delayed = DelayedStream.create(req);
+
+ setTimeout(function() {
+ res.writeHead(200);
+ delayed.pipe(res);
+ }, 1000);
+});
+```
+
+If you are not using `Stream#pipe`, you can also manually release the buffered
+events by calling `delayedStream.resume()`:
+
+``` javascript
+var delayed = DelayedStream.create(req);
+
+setTimeout(function() {
+ // Emit all buffered events and resume underlaying source
+ delayed.resume();
+}, 1000);
+```
+
+## Implementation
+
+In order to use this meta stream properly, here are a few things you should
+know about the implementation.
+
+### Event Buffering / Proxying
+
+All events of the `source` stream are hijacked by overwriting the `source.emit`
+method. Until node implements a catch-all event listener, this is the only way.
+
+However, delayed-stream still continues to emit all events it captures on the
+`source`, regardless of whether you have released the delayed stream yet or
+not.
+
+Upon creation, delayed-stream captures all `source` events and stores them in
+an internal event buffer. Once `delayedStream.release()` is called, all
+buffered events are emitted on the `delayedStream`, and the event buffer is
+cleared. After that, delayed-stream merely acts as a proxy for the underlaying
+source.
+
+### Error handling
+
+Error events on `source` are buffered / proxied just like any other events.
+However, `delayedStream.create` attaches a no-op `'error'` listener to the
+`source`. This way you only have to handle errors on the `delayedStream`
+object, rather than in two places.
+
+### Buffer limits
+
+delayed-stream provides a `maxDataSize` property that can be used to limit
+the amount of data being buffered. In order to protect you from bad `source`
+streams that don't react to `source.pause()`, this feature is enabled by
+default.
+
+## API
+
+### DelayedStream.create(source, [options])
+
+Returns a new `delayedStream`. Available options are:
+
+* `pauseStream`
+* `maxDataSize`
+
+The description for those properties can be found below.
+
+### delayedStream.source
+
+The `source` stream managed by this object. This is useful if you are
+passing your `delayedStream` around, and you still want to access properties
+on the `source` object.
+
+### delayedStream.pauseStream = true
+
+Whether to pause the underlaying `source` when calling
+`DelayedStream.create()`. Modifying this property afterwards has no effect.
+
+### delayedStream.maxDataSize = 1024 * 1024
+
+The amount of data to buffer before emitting an `error`.
+
+If the underlaying source is emitting `Buffer` objects, the `maxDataSize`
+refers to bytes.
+
+If the underlaying source is emitting JavaScript strings, the size refers to
+characters.
+
+If you know what you are doing, you can set this property to `Infinity` to
+disable this feature. You can also modify this property during runtime.
+
+### delayedStream.dataSize = 0
+
+The amount of data buffered so far.
+
+### delayedStream.readable
+
+An ECMA5 getter that returns the value of `source.readable`.
+
+### delayedStream.resume()
+
+If the `delayedStream` has not been released so far, `delayedStream.release()`
+is called.
+
+In either case, `source.resume()` is called.
+
+### delayedStream.pause()
+
+Calls `source.pause()`.
+
+### delayedStream.pipe(dest)
+
+Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.
+
+### delayedStream.release()
+
+Emits and clears all events that have been buffered up so far. This does not
+resume the underlaying source, use `delayedStream.resume()` instead.
+
+## License
+
+delayed-stream is licensed under the MIT license.
diff --git a/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/delayed-stream/lib/delayed_stream.js
new file mode 100644
index 0000000..b38fc85
--- /dev/null
+++ b/node_modules/delayed-stream/lib/delayed_stream.js
@@ -0,0 +1,107 @@
+var Stream = require('stream').Stream;
+var util = require('util');
+
+module.exports = DelayedStream;
+function DelayedStream() {
+ this.source = null;
+ this.dataSize = 0;
+ this.maxDataSize = 1024 * 1024;
+ this.pauseStream = true;
+
+ this._maxDataSizeExceeded = false;
+ this._released = false;
+ this._bufferedEvents = [];
+}
+util.inherits(DelayedStream, Stream);
+
+DelayedStream.create = function(source, options) {
+ var delayedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ delayedStream[option] = options[option];
+ }
+
+ delayedStream.source = source;
+
+ var realEmit = source.emit;
+ source.emit = function() {
+ delayedStream._handleEmit(arguments);
+ return realEmit.apply(source, arguments);
+ };
+
+ source.on('error', function() {});
+ if (delayedStream.pauseStream) {
+ source.pause();
+ }
+
+ return delayedStream;
+};
+
+Object.defineProperty(DelayedStream.prototype, 'readable', {
+ configurable: true,
+ enumerable: true,
+ get: function() {
+ return this.source.readable;
+ }
+});
+
+DelayedStream.prototype.setEncoding = function() {
+ return this.source.setEncoding.apply(this.source, arguments);
+};
+
+DelayedStream.prototype.resume = function() {
+ if (!this._released) {
+ this.release();
+ }
+
+ this.source.resume();
+};
+
+DelayedStream.prototype.pause = function() {
+ this.source.pause();
+};
+
+DelayedStream.prototype.release = function() {
+ this._released = true;
+
+ this._bufferedEvents.forEach(function(args) {
+ this.emit.apply(this, args);
+ }.bind(this));
+ this._bufferedEvents = [];
+};
+
+DelayedStream.prototype.pipe = function() {
+ var r = Stream.prototype.pipe.apply(this, arguments);
+ this.resume();
+ return r;
+};
+
+DelayedStream.prototype._handleEmit = function(args) {
+ if (this._released) {
+ this.emit.apply(this, args);
+ return;
+ }
+
+ if (args[0] === 'data') {
+ this.dataSize += args[1].length;
+ this._checkIfMaxDataSizeExceeded();
+ }
+
+ this._bufferedEvents.push(args);
+};
+
+DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
+ if (this._maxDataSizeExceeded) {
+ return;
+ }
+
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ this._maxDataSizeExceeded = true;
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
+ this.emit('error', new Error(message));
+};
diff --git a/node_modules/delayed-stream/package.json b/node_modules/delayed-stream/package.json
new file mode 100644
index 0000000..eea3291
--- /dev/null
+++ b/node_modules/delayed-stream/package.json
@@ -0,0 +1,27 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "contributors": [
+ "Mike Atkins "
+ ],
+ "name": "delayed-stream",
+ "description": "Buffers events from a stream until you are ready to handle them.",
+ "license": "MIT",
+ "version": "1.0.0",
+ "homepage": "https://github.com/felixge/node-delayed-stream",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/felixge/node-delayed-stream.git"
+ },
+ "main": "./lib/delayed_stream",
+ "engines": {
+ "node": ">=0.4.0"
+ },
+ "scripts": {
+ "test": "make test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "fake": "0.2.0",
+ "far": "0.0.1"
+ }
+}
diff --git a/node_modules/denque/CHANGELOG.md b/node_modules/denque/CHANGELOG.md
new file mode 100644
index 0000000..391a1f5
--- /dev/null
+++ b/node_modules/denque/CHANGELOG.md
@@ -0,0 +1,29 @@
+## 2.1.0
+
+ - fix: issue where `clear()` is still keeping references to the elements (#47)
+ - refactor: performance optimizations for growth and array copy (#43)
+ - refactor: performance optimizations for toArray and fromArray (#46)
+ - test: add additional benchmarks for queue growth and `toArray` (#45)
+
+## 2.0.1
+
+ - fix(types): incorrect return type on `size()`
+
+## 2.0.0
+
+ - fix!: `push` & `unshift` now accept `undefined` values to match behaviour of `Array` (fixes #25) (#35)
+ - This is only a **BREAKING** change if you are currently expecting `push(undefined)` and `unshift(undefined)` to do
+ nothing - the new behaviour now correctly adds undefined values to the queue.
+ - **Note**: behaviour of `push()` & `unshift()` (no arguments) remains unchanged (nothing gets added to the queue).
+ - **Note**: If you need to differentiate between `undefined` values in the queue and the return value of `pop()` then
+ check the queue `.length` before popping.
+ - fix: incorrect methods in types definition file
+
+## 1.5.1
+
+ - perf: minor performance tweak when growing queue size (#29)
+
+## 1.5.0
+
+ - feat: adds capacity option for circular buffers (#27)
+
diff --git a/node_modules/denque/LICENSE b/node_modules/denque/LICENSE
new file mode 100644
index 0000000..c9cde92
--- /dev/null
+++ b/node_modules/denque/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2018-present Invertase Limited
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/node_modules/denque/README.md b/node_modules/denque/README.md
new file mode 100644
index 0000000..3c645d3
--- /dev/null
+++ b/node_modules/denque/README.md
@@ -0,0 +1,77 @@
+
+
Denque
+
+
+
+
+
+
+
+
+
+
+
+Denque is a well tested, extremely fast and lightweight [double-ended queue](http://en.wikipedia.org/wiki/Double-ended_queue)
+implementation with zero dependencies and includes TypeScript types.
+
+Double-ended queues can also be used as a:
+
+- [Stack](http://en.wikipedia.org/wiki/Stack_\(abstract_data_type\))
+- [Queue](http://en.wikipedia.org/wiki/Queue_\(data_structure\))
+
+This implementation is currently the fastest available, even faster than `double-ended-queue`, see the [benchmarks](https://docs.page/invertase/denque/benchmarks).
+
+Every queue operation is done at a constant `O(1)` - including random access from `.peekAt(index)`.
+
+**Works on all node versions >= v0.10**
+
+## Quick Start
+
+Install the package:
+
+```bash
+npm install denque
+```
+
+Create and consume a queue:
+
+```js
+const Denque = require("denque");
+
+const denque = new Denque([1,2,3,4]);
+denque.shift(); // 1
+denque.pop(); // 4
+```
+
+
+See the [API reference documentation](https://docs.page/invertase/denque/api) for more examples.
+
+---
+
+## Who's using it?
+
+- [Kafka Node.js client](https://www.npmjs.com/package/kafka-node)
+- [MariaDB Node.js client](https://www.npmjs.com/package/mariadb)
+- [MongoDB Node.js client](https://www.npmjs.com/package/mongodb)
+- [MySQL Node.js client](https://www.npmjs.com/package/mysql2)
+- [Redis Node.js clients](https://www.npmjs.com/package/redis)
+
+... and [many more](https://www.npmjs.com/browse/depended/denque).
+
+
+---
+
+## License
+
+- See [LICENSE](/LICENSE)
+
+---
+
+
+
+
+
+
+ Built and maintained by Invertase.
+
+
diff --git a/node_modules/denque/index.d.ts b/node_modules/denque/index.d.ts
new file mode 100644
index 0000000..e125dd4
--- /dev/null
+++ b/node_modules/denque/index.d.ts
@@ -0,0 +1,47 @@
+declare class Denque {
+ length: number;
+
+ constructor();
+
+ constructor(array: T[]);
+
+ constructor(array: T[], options: IDenqueOptions);
+
+ push(item: T): number;
+
+ unshift(item: T): number;
+
+ pop(): T | undefined;
+
+ shift(): T | undefined;
+
+ peekBack(): T | undefined;
+
+ peekFront(): T | undefined;
+
+ peekAt(index: number): T | undefined;
+
+ get(index: number): T | undefined;
+
+ remove(index: number, count: number): T[];
+
+ removeOne(index: number): T | undefined;
+
+ splice(index: number, count: number, ...item: T[]): T[] | undefined;
+
+ isEmpty(): boolean;
+
+ clear(): void;
+
+ size(): number;
+
+ toString(): string;
+
+ toArray(): T[];
+}
+
+interface IDenqueOptions {
+ capacity?: number
+}
+
+export = Denque;
diff --git a/node_modules/denque/index.js b/node_modules/denque/index.js
new file mode 100644
index 0000000..6b2e9d8
--- /dev/null
+++ b/node_modules/denque/index.js
@@ -0,0 +1,481 @@
+'use strict';
+
+/**
+ * Custom implementation of a double ended queue.
+ */
+function Denque(array, options) {
+ var options = options || {};
+ this._capacity = options.capacity;
+
+ this._head = 0;
+ this._tail = 0;
+
+ if (Array.isArray(array)) {
+ this._fromArray(array);
+ } else {
+ this._capacityMask = 0x3;
+ this._list = new Array(4);
+ }
+}
+
+/**
+ * --------------
+ * PUBLIC API
+ * -------------
+ */
+
+/**
+ * Returns the item at the specified index from the list.
+ * 0 is the first element, 1 is the second, and so on...
+ * Elements at negative values are that many from the end: -1 is one before the end
+ * (the last element), -2 is two before the end (one before last), etc.
+ * @param index
+ * @returns {*}
+ */
+Denque.prototype.peekAt = function peekAt(index) {
+ var i = index;
+ // expect a number or return undefined
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ var len = this.size();
+ if (i >= len || i < -len) return undefined;
+ if (i < 0) i += len;
+ i = (this._head + i) & this._capacityMask;
+ return this._list[i];
+};
+
+/**
+ * Alias for peekAt()
+ * @param i
+ * @returns {*}
+ */
+Denque.prototype.get = function get(i) {
+ return this.peekAt(i);
+};
+
+/**
+ * Returns the first item in the list without removing it.
+ * @returns {*}
+ */
+Denque.prototype.peek = function peek() {
+ if (this._head === this._tail) return undefined;
+ return this._list[this._head];
+};
+
+/**
+ * Alias for peek()
+ * @returns {*}
+ */
+Denque.prototype.peekFront = function peekFront() {
+ return this.peek();
+};
+
+/**
+ * Returns the item that is at the back of the queue without removing it.
+ * Uses peekAt(-1)
+ */
+Denque.prototype.peekBack = function peekBack() {
+ return this.peekAt(-1);
+};
+
+/**
+ * Returns the current length of the queue
+ * @return {Number}
+ */
+Object.defineProperty(Denque.prototype, 'length', {
+ get: function length() {
+ return this.size();
+ }
+});
+
+/**
+ * Return the number of items on the list, or 0 if empty.
+ * @returns {number}
+ */
+Denque.prototype.size = function size() {
+ if (this._head === this._tail) return 0;
+ if (this._head < this._tail) return this._tail - this._head;
+ else return this._capacityMask + 1 - (this._head - this._tail);
+};
+
+/**
+ * Add an item at the beginning of the list.
+ * @param item
+ */
+Denque.prototype.unshift = function unshift(item) {
+ if (arguments.length === 0) return this.size();
+ var len = this._list.length;
+ this._head = (this._head - 1 + len) & this._capacityMask;
+ this._list[this._head] = item;
+ if (this._tail === this._head) this._growArray();
+ if (this._capacity && this.size() > this._capacity) this.pop();
+ if (this._head < this._tail) return this._tail - this._head;
+ else return this._capacityMask + 1 - (this._head - this._tail);
+};
+
+/**
+ * Remove and return the first item on the list,
+ * Returns undefined if the list is empty.
+ * @returns {*}
+ */
+Denque.prototype.shift = function shift() {
+ var head = this._head;
+ if (head === this._tail) return undefined;
+ var item = this._list[head];
+ this._list[head] = undefined;
+ this._head = (head + 1) & this._capacityMask;
+ if (head < 2 && this._tail > 10000 && this._tail <= this._list.length >>> 2) this._shrinkArray();
+ return item;
+};
+
+/**
+ * Add an item to the bottom of the list.
+ * @param item
+ */
+Denque.prototype.push = function push(item) {
+ if (arguments.length === 0) return this.size();
+ var tail = this._tail;
+ this._list[tail] = item;
+ this._tail = (tail + 1) & this._capacityMask;
+ if (this._tail === this._head) {
+ this._growArray();
+ }
+ if (this._capacity && this.size() > this._capacity) {
+ this.shift();
+ }
+ if (this._head < this._tail) return this._tail - this._head;
+ else return this._capacityMask + 1 - (this._head - this._tail);
+};
+
+/**
+ * Remove and return the last item on the list.
+ * Returns undefined if the list is empty.
+ * @returns {*}
+ */
+Denque.prototype.pop = function pop() {
+ var tail = this._tail;
+ if (tail === this._head) return undefined;
+ var len = this._list.length;
+ this._tail = (tail - 1 + len) & this._capacityMask;
+ var item = this._list[this._tail];
+ this._list[this._tail] = undefined;
+ if (this._head < 2 && tail > 10000 && tail <= len >>> 2) this._shrinkArray();
+ return item;
+};
+
+/**
+ * Remove and return the item at the specified index from the list.
+ * Returns undefined if the list is empty.
+ * @param index
+ * @returns {*}
+ */
+Denque.prototype.removeOne = function removeOne(index) {
+ var i = index;
+ // expect a number or return undefined
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ if (this._head === this._tail) return void 0;
+ var size = this.size();
+ var len = this._list.length;
+ if (i >= size || i < -size) return void 0;
+ if (i < 0) i += size;
+ i = (this._head + i) & this._capacityMask;
+ var item = this._list[i];
+ var k;
+ if (index < size / 2) {
+ for (k = index; k > 0; k--) {
+ this._list[i] = this._list[i = (i - 1 + len) & this._capacityMask];
+ }
+ this._list[i] = void 0;
+ this._head = (this._head + 1 + len) & this._capacityMask;
+ } else {
+ for (k = size - 1 - index; k > 0; k--) {
+ this._list[i] = this._list[i = (i + 1 + len) & this._capacityMask];
+ }
+ this._list[i] = void 0;
+ this._tail = (this._tail - 1 + len) & this._capacityMask;
+ }
+ return item;
+};
+
+/**
+ * Remove number of items from the specified index from the list.
+ * Returns array of removed items.
+ * Returns undefined if the list is empty.
+ * @param index
+ * @param count
+ * @returns {array}
+ */
+Denque.prototype.remove = function remove(index, count) {
+ var i = index;
+ var removed;
+ var del_count = count;
+ // expect a number or return undefined
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ if (this._head === this._tail) return void 0;
+ var size = this.size();
+ var len = this._list.length;
+ if (i >= size || i < -size || count < 1) return void 0;
+ if (i < 0) i += size;
+ if (count === 1 || !count) {
+ removed = new Array(1);
+ removed[0] = this.removeOne(i);
+ return removed;
+ }
+ if (i === 0 && i + count >= size) {
+ removed = this.toArray();
+ this.clear();
+ return removed;
+ }
+ if (i + count > size) count = size - i;
+ var k;
+ removed = new Array(count);
+ for (k = 0; k < count; k++) {
+ removed[k] = this._list[(this._head + i + k) & this._capacityMask];
+ }
+ i = (this._head + i) & this._capacityMask;
+ if (index + count === size) {
+ this._tail = (this._tail - count + len) & this._capacityMask;
+ for (k = count; k > 0; k--) {
+ this._list[i = (i + 1 + len) & this._capacityMask] = void 0;
+ }
+ return removed;
+ }
+ if (index === 0) {
+ this._head = (this._head + count + len) & this._capacityMask;
+ for (k = count - 1; k > 0; k--) {
+ this._list[i = (i + 1 + len) & this._capacityMask] = void 0;
+ }
+ return removed;
+ }
+ if (i < size / 2) {
+ this._head = (this._head + index + count + len) & this._capacityMask;
+ for (k = index; k > 0; k--) {
+ this.unshift(this._list[i = (i - 1 + len) & this._capacityMask]);
+ }
+ i = (this._head - 1 + len) & this._capacityMask;
+ while (del_count > 0) {
+ this._list[i = (i - 1 + len) & this._capacityMask] = void 0;
+ del_count--;
+ }
+ if (index < 0) this._tail = i;
+ } else {
+ this._tail = i;
+ i = (i + count + len) & this._capacityMask;
+ for (k = size - (count + index); k > 0; k--) {
+ this.push(this._list[i++]);
+ }
+ i = this._tail;
+ while (del_count > 0) {
+ this._list[i = (i + 1 + len) & this._capacityMask] = void 0;
+ del_count--;
+ }
+ }
+ if (this._head < 2 && this._tail > 10000 && this._tail <= len >>> 2) this._shrinkArray();
+ return removed;
+};
+
+/**
+ * Native splice implementation.
+ * Remove number of items from the specified index from the list and/or add new elements.
+ * Returns array of removed items or empty array if count == 0.
+ * Returns undefined if the list is empty.
+ *
+ * @param index
+ * @param count
+ * @param {...*} [elements]
+ * @returns {array}
+ */
+Denque.prototype.splice = function splice(index, count) {
+ var i = index;
+ // expect a number or return undefined
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ var size = this.size();
+ if (i < 0) i += size;
+ if (i > size) return void 0;
+ if (arguments.length > 2) {
+ var k;
+ var temp;
+ var removed;
+ var arg_len = arguments.length;
+ var len = this._list.length;
+ var arguments_index = 2;
+ if (!size || i < size / 2) {
+ temp = new Array(i);
+ for (k = 0; k < i; k++) {
+ temp[k] = this._list[(this._head + k) & this._capacityMask];
+ }
+ if (count === 0) {
+ removed = [];
+ if (i > 0) {
+ this._head = (this._head + i + len) & this._capacityMask;
+ }
+ } else {
+ removed = this.remove(i, count);
+ this._head = (this._head + i + len) & this._capacityMask;
+ }
+ while (arg_len > arguments_index) {
+ this.unshift(arguments[--arg_len]);
+ }
+ for (k = i; k > 0; k--) {
+ this.unshift(temp[k - 1]);
+ }
+ } else {
+ temp = new Array(size - (i + count));
+ var leng = temp.length;
+ for (k = 0; k < leng; k++) {
+ temp[k] = this._list[(this._head + i + count + k) & this._capacityMask];
+ }
+ if (count === 0) {
+ removed = [];
+ if (i != size) {
+ this._tail = (this._head + i + len) & this._capacityMask;
+ }
+ } else {
+ removed = this.remove(i, count);
+ this._tail = (this._tail - leng + len) & this._capacityMask;
+ }
+ while (arguments_index < arg_len) {
+ this.push(arguments[arguments_index++]);
+ }
+ for (k = 0; k < leng; k++) {
+ this.push(temp[k]);
+ }
+ }
+ return removed;
+ } else {
+ return this.remove(i, count);
+ }
+};
+
+/**
+ * Soft clear - does not reset capacity.
+ */
+Denque.prototype.clear = function clear() {
+ this._list = new Array(this._list.length);
+ this._head = 0;
+ this._tail = 0;
+};
+
+/**
+ * Returns true or false whether the list is empty.
+ * @returns {boolean}
+ */
+Denque.prototype.isEmpty = function isEmpty() {
+ return this._head === this._tail;
+};
+
+/**
+ * Returns an array of all queue items.
+ * @returns {Array}
+ */
+Denque.prototype.toArray = function toArray() {
+ return this._copyArray(false);
+};
+
+/**
+ * -------------
+ * INTERNALS
+ * -------------
+ */
+
+/**
+ * Fills the queue with items from an array
+ * For use in the constructor
+ * @param array
+ * @private
+ */
+Denque.prototype._fromArray = function _fromArray(array) {
+ var length = array.length;
+ var capacity = this._nextPowerOf2(length);
+
+ this._list = new Array(capacity);
+ this._capacityMask = capacity - 1;
+ this._tail = length;
+
+ for (var i = 0; i < length; i++) this._list[i] = array[i];
+};
+
+/**
+ *
+ * @param fullCopy
+ * @param size Initialize the array with a specific size. Will default to the current list size
+ * @returns {Array}
+ * @private
+ */
+Denque.prototype._copyArray = function _copyArray(fullCopy, size) {
+ var src = this._list;
+ var capacity = src.length;
+ var length = this.length;
+ size = size | length;
+
+ // No prealloc requested and the buffer is contiguous
+ if (size == length && this._head < this._tail) {
+ // Simply do a fast slice copy
+ return this._list.slice(this._head, this._tail);
+ }
+
+ var dest = new Array(size);
+
+ var k = 0;
+ var i;
+ if (fullCopy || this._head > this._tail) {
+ for (i = this._head; i < capacity; i++) dest[k++] = src[i];
+ for (i = 0; i < this._tail; i++) dest[k++] = src[i];
+ } else {
+ for (i = this._head; i < this._tail; i++) dest[k++] = src[i];
+ }
+
+ return dest;
+}
+
+/**
+ * Grows the internal list array.
+ * @private
+ */
+Denque.prototype._growArray = function _growArray() {
+ if (this._head != 0) {
+ // double array size and copy existing data, head to end, then beginning to tail.
+ var newList = this._copyArray(true, this._list.length << 1);
+
+ this._tail = this._list.length;
+ this._head = 0;
+
+ this._list = newList;
+ } else {
+ this._tail = this._list.length;
+ this._list.length <<= 1;
+ }
+
+ this._capacityMask = (this._capacityMask << 1) | 1;
+};
+
+/**
+ * Shrinks the internal list array.
+ * @private
+ */
+Denque.prototype._shrinkArray = function _shrinkArray() {
+ this._list.length >>>= 1;
+ this._capacityMask >>>= 1;
+};
+
+/**
+ * Find the next power of 2, at least 4
+ * @private
+ * @param {number} num
+ * @returns {number}
+ */
+Denque.prototype._nextPowerOf2 = function _nextPowerOf2(num) {
+ var log2 = Math.log(num) / Math.log(2);
+ var nextPow2 = 1 << (log2 + 1);
+
+ return Math.max(nextPow2, 4);
+}
+
+module.exports = Denque;
diff --git a/node_modules/denque/package.json b/node_modules/denque/package.json
new file mode 100644
index 0000000..a635910
--- /dev/null
+++ b/node_modules/denque/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "denque",
+ "version": "2.1.0",
+ "description": "The fastest javascript implementation of a double-ended queue. Used by the official Redis, MongoDB, MariaDB & MySQL libraries for Node.js and many other libraries. Maintains compatability with deque.",
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10"
+ },
+ "keywords": [
+ "data-structure",
+ "data-structures",
+ "queue",
+ "double",
+ "end",
+ "ended",
+ "deque",
+ "denque",
+ "double-ended-queue"
+ ],
+ "scripts": {
+ "test": "istanbul cover --report lcov _mocha && npm run typescript",
+ "coveralls": "cat ./coverage/lcov.info | coveralls",
+ "typescript": "tsc --project ./test/type/tsconfig.json",
+ "benchmark_thousand": "node benchmark/thousand",
+ "benchmark_2mil": "node benchmark/two_million",
+ "benchmark_splice": "node benchmark/splice",
+ "benchmark_remove": "node benchmark/remove",
+ "benchmark_removeOne": "node benchmark/removeOne",
+ "benchmark_growth": "node benchmark/growth",
+ "benchmark_toArray": "node benchmark/toArray",
+ "benchmark_fromArray": "node benchmark/fromArray"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/invertase/denque.git"
+ },
+ "license": "Apache-2.0",
+ "author": {
+ "name": "Invertase",
+ "email": "oss@invertase.io",
+ "url": "http://github.com/invertase/"
+ },
+ "contributors": [
+ "Mike Diarmid (Salakar) "
+ ],
+ "bugs": {
+ "url": "https://github.com/invertase/denque/issues"
+ },
+ "homepage": "https://docs.page/invertase/denque",
+ "devDependencies": {
+ "benchmark": "^2.1.4",
+ "codecov": "^3.8.3",
+ "double-ended-queue": "^2.1.0-0",
+ "istanbul": "^0.4.5",
+ "mocha": "^3.5.3",
+ "typescript": "^3.4.1"
+ }
+}
diff --git a/node_modules/depd/History.md b/node_modules/depd/History.md
new file mode 100644
index 0000000..cd9ebaa
--- /dev/null
+++ b/node_modules/depd/History.md
@@ -0,0 +1,103 @@
+2.0.0 / 2018-10-26
+==================
+
+ * Drop support for Node.js 0.6
+ * Replace internal `eval` usage with `Function` constructor
+ * Use instance methods on `process` to check for listeners
+
+1.1.2 / 2018-01-11
+==================
+
+ * perf: remove argument reassignment
+ * Support Node.js 0.6 to 9.x
+
+1.1.1 / 2017-07-27
+==================
+
+ * Remove unnecessary `Buffer` loading
+ * Support Node.js 0.6 to 8.x
+
+1.1.0 / 2015-09-14
+==================
+
+ * Enable strict mode in more places
+ * Support io.js 3.x
+ * Support io.js 2.x
+ * Support web browser loading
+ - Requires bundler like Browserify or webpack
+
+1.0.1 / 2015-04-07
+==================
+
+ * Fix `TypeError`s when under `'use strict'` code
+ * Fix useless type name on auto-generated messages
+ * Support io.js 1.x
+ * Support Node.js 0.12
+
+1.0.0 / 2014-09-17
+==================
+
+ * No changes
+
+0.4.5 / 2014-09-09
+==================
+
+ * Improve call speed to functions using the function wrapper
+ * Support Node.js 0.6
+
+0.4.4 / 2014-07-27
+==================
+
+ * Work-around v8 generating empty stack traces
+
+0.4.3 / 2014-07-26
+==================
+
+ * Fix exception when global `Error.stackTraceLimit` is too low
+
+0.4.2 / 2014-07-19
+==================
+
+ * Correct call site for wrapped functions and properties
+
+0.4.1 / 2014-07-19
+==================
+
+ * Improve automatic message generation for function properties
+
+0.4.0 / 2014-07-19
+==================
+
+ * Add `TRACE_DEPRECATION` environment variable
+ * Remove non-standard grey color from color output
+ * Support `--no-deprecation` argument
+ * Support `--trace-deprecation` argument
+ * Support `deprecate.property(fn, prop, message)`
+
+0.3.0 / 2014-06-16
+==================
+
+ * Add `NO_DEPRECATION` environment variable
+
+0.2.0 / 2014-06-15
+==================
+
+ * Add `deprecate.property(obj, prop, message)`
+ * Remove `supports-color` dependency for node.js 0.8
+
+0.1.0 / 2014-06-15
+==================
+
+ * Add `deprecate.function(fn, message)`
+ * Add `process.on('deprecation', fn)` emitter
+ * Automatically generate message when omitted from `deprecate()`
+
+0.0.1 / 2014-06-15
+==================
+
+ * Fix warning for dynamic calls at singe call site
+
+0.0.0 / 2014-06-15
+==================
+
+ * Initial implementation
diff --git a/node_modules/depd/LICENSE b/node_modules/depd/LICENSE
new file mode 100644
index 0000000..248de7a
--- /dev/null
+++ b/node_modules/depd/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2014-2018 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/depd/Readme.md b/node_modules/depd/Readme.md
new file mode 100644
index 0000000..043d1ca
--- /dev/null
+++ b/node_modules/depd/Readme.md
@@ -0,0 +1,280 @@
+# depd
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-image]][node-url]
+[![Linux Build][travis-image]][travis-url]
+[![Windows Build][appveyor-image]][appveyor-url]
+[![Coverage Status][coveralls-image]][coveralls-url]
+
+Deprecate all the things
+
+> With great modules comes great responsibility; mark things deprecated!
+
+## Install
+
+This module is installed directly using `npm`:
+
+```sh
+$ npm install depd
+```
+
+This module can also be bundled with systems like
+[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/),
+though by default this module will alter it's API to no longer display or
+track deprecations.
+
+## API
+
+
+
+```js
+var deprecate = require('depd')('my-module')
+```
+
+This library allows you to display deprecation messages to your users.
+This library goes above and beyond with deprecation warnings by
+introspection of the call stack (but only the bits that it is interested
+in).
+
+Instead of just warning on the first invocation of a deprecated
+function and never again, this module will warn on the first invocation
+of a deprecated function per unique call site, making it ideal to alert
+users of all deprecated uses across the code base, rather than just
+whatever happens to execute first.
+
+The deprecation warnings from this module also include the file and line
+information for the call into the module that the deprecated function was
+in.
+
+**NOTE** this library has a similar interface to the `debug` module, and
+this module uses the calling file to get the boundary for the call stacks,
+so you should always create a new `deprecate` object in each file and not
+within some central file.
+
+### depd(namespace)
+
+Create a new deprecate function that uses the given namespace name in the
+messages and will display the call site prior to the stack entering the
+file this function was called from. It is highly suggested you use the
+name of your module as the namespace.
+
+### deprecate(message)
+
+Call this function from deprecated code to display a deprecation message.
+This message will appear once per unique caller site. Caller site is the
+first call site in the stack in a different file from the caller of this
+function.
+
+If the message is omitted, a message is generated for you based on the site
+of the `deprecate()` call and will display the name of the function called,
+similar to the name displayed in a stack trace.
+
+### deprecate.function(fn, message)
+
+Call this function to wrap a given function in a deprecation message on any
+call to the function. An optional message can be supplied to provide a custom
+message.
+
+### deprecate.property(obj, prop, message)
+
+Call this function to wrap a given property on object in a deprecation message
+on any accessing or setting of the property. An optional message can be supplied
+to provide a custom message.
+
+The method must be called on the object where the property belongs (not
+inherited from the prototype).
+
+If the property is a data descriptor, it will be converted to an accessor
+descriptor in order to display the deprecation message.
+
+### process.on('deprecation', fn)
+
+This module will allow easy capturing of deprecation errors by emitting the
+errors as the type "deprecation" on the global `process`. If there are no
+listeners for this type, the errors are written to STDERR as normal, but if
+there are any listeners, nothing will be written to STDERR and instead only
+emitted. From there, you can write the errors in a different format or to a
+logging source.
+
+The error represents the deprecation and is emitted only once with the same
+rules as writing to STDERR. The error has the following properties:
+
+ - `message` - This is the message given by the library
+ - `name` - This is always `'DeprecationError'`
+ - `namespace` - This is the namespace the deprecation came from
+ - `stack` - This is the stack of the call to the deprecated thing
+
+Example `error.stack` output:
+
+```
+DeprecationError: my-cool-module deprecated oldfunction
+ at Object. ([eval]-wrapper:6:22)
+ at Module._compile (module.js:456:26)
+ at evalScript (node.js:532:25)
+ at startup (node.js:80:7)
+ at node.js:902:3
+```
+
+### process.env.NO_DEPRECATION
+
+As a user of modules that are deprecated, the environment variable `NO_DEPRECATION`
+is provided as a quick solution to silencing deprecation warnings from being
+output. The format of this is similar to that of `DEBUG`:
+
+```sh
+$ NO_DEPRECATION=my-module,othermod node app.js
+```
+
+This will suppress deprecations from being output for "my-module" and "othermod".
+The value is a list of comma-separated namespaces. To suppress every warning
+across all namespaces, use the value `*` for a namespace.
+
+Providing the argument `--no-deprecation` to the `node` executable will suppress
+all deprecations (only available in Node.js 0.8 or higher).
+
+**NOTE** This will not suppress the deperecations given to any "deprecation"
+event listeners, just the output to STDERR.
+
+### process.env.TRACE_DEPRECATION
+
+As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION`
+is provided as a solution to getting more detailed location information in deprecation
+warnings by including the entire stack trace. The format of this is the same as
+`NO_DEPRECATION`:
+
+```sh
+$ TRACE_DEPRECATION=my-module,othermod node app.js
+```
+
+This will include stack traces for deprecations being output for "my-module" and
+"othermod". The value is a list of comma-separated namespaces. To trace every
+warning across all namespaces, use the value `*` for a namespace.
+
+Providing the argument `--trace-deprecation` to the `node` executable will trace
+all deprecations (only available in Node.js 0.8 or higher).
+
+**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`.
+
+## Display
+
+
+
+When a user calls a function in your library that you mark deprecated, they
+will see the following written to STDERR (in the given colors, similar colors
+and layout to the `debug` module):
+
+```
+bright cyan bright yellow
+| | reset cyan
+| | | |
+▼ ▼ ▼ ▼
+my-cool-module deprecated oldfunction [eval]-wrapper:6:22
+▲ ▲ ▲ ▲
+| | | |
+namespace | | location of mycoolmod.oldfunction() call
+ | deprecation message
+ the word "deprecated"
+```
+
+If the user redirects their STDERR to a file or somewhere that does not support
+colors, they see (similar layout to the `debug` module):
+
+```
+Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22
+▲ ▲ ▲ ▲ ▲
+| | | | |
+timestamp of message namespace | | location of mycoolmod.oldfunction() call
+ | deprecation message
+ the word "deprecated"
+```
+
+## Examples
+
+### Deprecating all calls to a function
+
+This will display a deprecated message about "oldfunction" being deprecated
+from "my-module" on STDERR.
+
+```js
+var deprecate = require('depd')('my-cool-module')
+
+// message automatically derived from function name
+// Object.oldfunction
+exports.oldfunction = deprecate.function(function oldfunction () {
+ // all calls to function are deprecated
+})
+
+// specific message
+exports.oldfunction = deprecate.function(function () {
+ // all calls to function are deprecated
+}, 'oldfunction')
+```
+
+### Conditionally deprecating a function call
+
+This will display a deprecated message about "weirdfunction" being deprecated
+from "my-module" on STDERR when called with less than 2 arguments.
+
+```js
+var deprecate = require('depd')('my-cool-module')
+
+exports.weirdfunction = function () {
+ if (arguments.length < 2) {
+ // calls with 0 or 1 args are deprecated
+ deprecate('weirdfunction args < 2')
+ }
+}
+```
+
+When calling `deprecate` as a function, the warning is counted per call site
+within your own module, so you can display different deprecations depending
+on different situations and the users will still get all the warnings:
+
+```js
+var deprecate = require('depd')('my-cool-module')
+
+exports.weirdfunction = function () {
+ if (arguments.length < 2) {
+ // calls with 0 or 1 args are deprecated
+ deprecate('weirdfunction args < 2')
+ } else if (typeof arguments[0] !== 'string') {
+ // calls with non-string first argument are deprecated
+ deprecate('weirdfunction non-string first arg')
+ }
+}
+```
+
+### Deprecating property access
+
+This will display a deprecated message about "oldprop" being deprecated
+from "my-module" on STDERR when accessed. A deprecation will be displayed
+when setting the value and when getting the value.
+
+```js
+var deprecate = require('depd')('my-cool-module')
+
+exports.oldprop = 'something'
+
+// message automatically derives from property name
+deprecate.property(exports, 'oldprop')
+
+// explicit message
+deprecate.property(exports, 'oldprop', 'oldprop >= 0.10')
+```
+
+## License
+
+[MIT](LICENSE)
+
+[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/nodejs-depd/master?label=windows
+[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd
+[coveralls-image]: https://badgen.net/coveralls/c/github/dougwilson/nodejs-depd/master
+[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master
+[node-image]: https://badgen.net/npm/node/depd
+[node-url]: https://nodejs.org/en/download/
+[npm-downloads-image]: https://badgen.net/npm/dm/depd
+[npm-url]: https://npmjs.org/package/depd
+[npm-version-image]: https://badgen.net/npm/v/depd
+[travis-image]: https://badgen.net/travis/dougwilson/nodejs-depd/master?label=linux
+[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd
diff --git a/node_modules/depd/index.js b/node_modules/depd/index.js
new file mode 100644
index 0000000..1bf2fcf
--- /dev/null
+++ b/node_modules/depd/index.js
@@ -0,0 +1,538 @@
+/*!
+ * depd
+ * Copyright(c) 2014-2018 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var relative = require('path').relative
+
+/**
+ * Module exports.
+ */
+
+module.exports = depd
+
+/**
+ * Get the path to base files on.
+ */
+
+var basePath = process.cwd()
+
+/**
+ * Determine if namespace is contained in the string.
+ */
+
+function containsNamespace (str, namespace) {
+ var vals = str.split(/[ ,]+/)
+ var ns = String(namespace).toLowerCase()
+
+ for (var i = 0; i < vals.length; i++) {
+ var val = vals[i]
+
+ // namespace contained
+ if (val && (val === '*' || val.toLowerCase() === ns)) {
+ return true
+ }
+ }
+
+ return false
+}
+
+/**
+ * Convert a data descriptor to accessor descriptor.
+ */
+
+function convertDataDescriptorToAccessor (obj, prop, message) {
+ var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
+ var value = descriptor.value
+
+ descriptor.get = function getter () { return value }
+
+ if (descriptor.writable) {
+ descriptor.set = function setter (val) { return (value = val) }
+ }
+
+ delete descriptor.value
+ delete descriptor.writable
+
+ Object.defineProperty(obj, prop, descriptor)
+
+ return descriptor
+}
+
+/**
+ * Create arguments string to keep arity.
+ */
+
+function createArgumentsString (arity) {
+ var str = ''
+
+ for (var i = 0; i < arity; i++) {
+ str += ', arg' + i
+ }
+
+ return str.substr(2)
+}
+
+/**
+ * Create stack string from stack.
+ */
+
+function createStackString (stack) {
+ var str = this.name + ': ' + this.namespace
+
+ if (this.message) {
+ str += ' deprecated ' + this.message
+ }
+
+ for (var i = 0; i < stack.length; i++) {
+ str += '\n at ' + stack[i].toString()
+ }
+
+ return str
+}
+
+/**
+ * Create deprecate for namespace in caller.
+ */
+
+function depd (namespace) {
+ if (!namespace) {
+ throw new TypeError('argument namespace is required')
+ }
+
+ var stack = getStack()
+ var site = callSiteLocation(stack[1])
+ var file = site[0]
+
+ function deprecate (message) {
+ // call to self as log
+ log.call(deprecate, message)
+ }
+
+ deprecate._file = file
+ deprecate._ignored = isignored(namespace)
+ deprecate._namespace = namespace
+ deprecate._traced = istraced(namespace)
+ deprecate._warned = Object.create(null)
+
+ deprecate.function = wrapfunction
+ deprecate.property = wrapproperty
+
+ return deprecate
+}
+
+/**
+ * Determine if event emitter has listeners of a given type.
+ *
+ * The way to do this check is done three different ways in Node.js >= 0.8
+ * so this consolidates them into a minimal set using instance methods.
+ *
+ * @param {EventEmitter} emitter
+ * @param {string} type
+ * @returns {boolean}
+ * @private
+ */
+
+function eehaslisteners (emitter, type) {
+ var count = typeof emitter.listenerCount !== 'function'
+ ? emitter.listeners(type).length
+ : emitter.listenerCount(type)
+
+ return count > 0
+}
+
+/**
+ * Determine if namespace is ignored.
+ */
+
+function isignored (namespace) {
+ if (process.noDeprecation) {
+ // --no-deprecation support
+ return true
+ }
+
+ var str = process.env.NO_DEPRECATION || ''
+
+ // namespace ignored
+ return containsNamespace(str, namespace)
+}
+
+/**
+ * Determine if namespace is traced.
+ */
+
+function istraced (namespace) {
+ if (process.traceDeprecation) {
+ // --trace-deprecation support
+ return true
+ }
+
+ var str = process.env.TRACE_DEPRECATION || ''
+
+ // namespace traced
+ return containsNamespace(str, namespace)
+}
+
+/**
+ * Display deprecation message.
+ */
+
+function log (message, site) {
+ var haslisteners = eehaslisteners(process, 'deprecation')
+
+ // abort early if no destination
+ if (!haslisteners && this._ignored) {
+ return
+ }
+
+ var caller
+ var callFile
+ var callSite
+ var depSite
+ var i = 0
+ var seen = false
+ var stack = getStack()
+ var file = this._file
+
+ if (site) {
+ // provided site
+ depSite = site
+ callSite = callSiteLocation(stack[1])
+ callSite.name = depSite.name
+ file = callSite[0]
+ } else {
+ // get call site
+ i = 2
+ depSite = callSiteLocation(stack[i])
+ callSite = depSite
+ }
+
+ // get caller of deprecated thing in relation to file
+ for (; i < stack.length; i++) {
+ caller = callSiteLocation(stack[i])
+ callFile = caller[0]
+
+ if (callFile === file) {
+ seen = true
+ } else if (callFile === this._file) {
+ file = this._file
+ } else if (seen) {
+ break
+ }
+ }
+
+ var key = caller
+ ? depSite.join(':') + '__' + caller.join(':')
+ : undefined
+
+ if (key !== undefined && key in this._warned) {
+ // already warned
+ return
+ }
+
+ this._warned[key] = true
+
+ // generate automatic message from call site
+ var msg = message
+ if (!msg) {
+ msg = callSite === depSite || !callSite.name
+ ? defaultMessage(depSite)
+ : defaultMessage(callSite)
+ }
+
+ // emit deprecation if listeners exist
+ if (haslisteners) {
+ var err = DeprecationError(this._namespace, msg, stack.slice(i))
+ process.emit('deprecation', err)
+ return
+ }
+
+ // format and write message
+ var format = process.stderr.isTTY
+ ? formatColor
+ : formatPlain
+ var output = format.call(this, msg, caller, stack.slice(i))
+ process.stderr.write(output + '\n', 'utf8')
+}
+
+/**
+ * Get call site location as array.
+ */
+
+function callSiteLocation (callSite) {
+ var file = callSite.getFileName() || ''
+ var line = callSite.getLineNumber()
+ var colm = callSite.getColumnNumber()
+
+ if (callSite.isEval()) {
+ file = callSite.getEvalOrigin() + ', ' + file
+ }
+
+ var site = [file, line, colm]
+
+ site.callSite = callSite
+ site.name = callSite.getFunctionName()
+
+ return site
+}
+
+/**
+ * Generate a default message from the site.
+ */
+
+function defaultMessage (site) {
+ var callSite = site.callSite
+ var funcName = site.name
+
+ // make useful anonymous name
+ if (!funcName) {
+ funcName = ''
+ }
+
+ var context = callSite.getThis()
+ var typeName = context && callSite.getTypeName()
+
+ // ignore useless type name
+ if (typeName === 'Object') {
+ typeName = undefined
+ }
+
+ // make useful type name
+ if (typeName === 'Function') {
+ typeName = context.name || typeName
+ }
+
+ return typeName && callSite.getMethodName()
+ ? typeName + '.' + funcName
+ : funcName
+}
+
+/**
+ * Format deprecation message without color.
+ */
+
+function formatPlain (msg, caller, stack) {
+ var timestamp = new Date().toUTCString()
+
+ var formatted = timestamp +
+ ' ' + this._namespace +
+ ' deprecated ' + msg
+
+ // add stack trace
+ if (this._traced) {
+ for (var i = 0; i < stack.length; i++) {
+ formatted += '\n at ' + stack[i].toString()
+ }
+
+ return formatted
+ }
+
+ if (caller) {
+ formatted += ' at ' + formatLocation(caller)
+ }
+
+ return formatted
+}
+
+/**
+ * Format deprecation message with color.
+ */
+
+function formatColor (msg, caller, stack) {
+ var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan
+ ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow
+ ' \x1b[0m' + msg + '\x1b[39m' // reset
+
+ // add stack trace
+ if (this._traced) {
+ for (var i = 0; i < stack.length; i++) {
+ formatted += '\n \x1b[36mat ' + stack[i].toString() + '\x1b[39m' // cyan
+ }
+
+ return formatted
+ }
+
+ if (caller) {
+ formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan
+ }
+
+ return formatted
+}
+
+/**
+ * Format call site location.
+ */
+
+function formatLocation (callSite) {
+ return relative(basePath, callSite[0]) +
+ ':' + callSite[1] +
+ ':' + callSite[2]
+}
+
+/**
+ * Get the stack as array of call sites.
+ */
+
+function getStack () {
+ var limit = Error.stackTraceLimit
+ var obj = {}
+ var prep = Error.prepareStackTrace
+
+ Error.prepareStackTrace = prepareObjectStackTrace
+ Error.stackTraceLimit = Math.max(10, limit)
+
+ // capture the stack
+ Error.captureStackTrace(obj)
+
+ // slice this function off the top
+ var stack = obj.stack.slice(1)
+
+ Error.prepareStackTrace = prep
+ Error.stackTraceLimit = limit
+
+ return stack
+}
+
+/**
+ * Capture call site stack from v8.
+ */
+
+function prepareObjectStackTrace (obj, stack) {
+ return stack
+}
+
+/**
+ * Return a wrapped function in a deprecation message.
+ */
+
+function wrapfunction (fn, message) {
+ if (typeof fn !== 'function') {
+ throw new TypeError('argument fn must be a function')
+ }
+
+ var args = createArgumentsString(fn.length)
+ var stack = getStack()
+ var site = callSiteLocation(stack[1])
+
+ site.name = fn.name
+
+ // eslint-disable-next-line no-new-func
+ var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',
+ '"use strict"\n' +
+ 'return function (' + args + ') {' +
+ 'log.call(deprecate, message, site)\n' +
+ 'return fn.apply(this, arguments)\n' +
+ '}')(fn, log, this, message, site)
+
+ return deprecatedfn
+}
+
+/**
+ * Wrap property in a deprecation message.
+ */
+
+function wrapproperty (obj, prop, message) {
+ if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ throw new TypeError('argument obj must be object')
+ }
+
+ var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
+
+ if (!descriptor) {
+ throw new TypeError('must call property on owner object')
+ }
+
+ if (!descriptor.configurable) {
+ throw new TypeError('property must be configurable')
+ }
+
+ var deprecate = this
+ var stack = getStack()
+ var site = callSiteLocation(stack[1])
+
+ // set site name
+ site.name = prop
+
+ // convert data descriptor
+ if ('value' in descriptor) {
+ descriptor = convertDataDescriptorToAccessor(obj, prop, message)
+ }
+
+ var get = descriptor.get
+ var set = descriptor.set
+
+ // wrap getter
+ if (typeof get === 'function') {
+ descriptor.get = function getter () {
+ log.call(deprecate, message, site)
+ return get.apply(this, arguments)
+ }
+ }
+
+ // wrap setter
+ if (typeof set === 'function') {
+ descriptor.set = function setter () {
+ log.call(deprecate, message, site)
+ return set.apply(this, arguments)
+ }
+ }
+
+ Object.defineProperty(obj, prop, descriptor)
+}
+
+/**
+ * Create DeprecationError for deprecation
+ */
+
+function DeprecationError (namespace, message, stack) {
+ var error = new Error()
+ var stackString
+
+ Object.defineProperty(error, 'constructor', {
+ value: DeprecationError
+ })
+
+ Object.defineProperty(error, 'message', {
+ configurable: true,
+ enumerable: false,
+ value: message,
+ writable: true
+ })
+
+ Object.defineProperty(error, 'name', {
+ enumerable: false,
+ configurable: true,
+ value: 'DeprecationError',
+ writable: true
+ })
+
+ Object.defineProperty(error, 'namespace', {
+ configurable: true,
+ enumerable: false,
+ value: namespace,
+ writable: true
+ })
+
+ Object.defineProperty(error, 'stack', {
+ configurable: true,
+ enumerable: false,
+ get: function () {
+ if (stackString !== undefined) {
+ return stackString
+ }
+
+ // prepare stack trace
+ return (stackString = createStackString.call(this, stack))
+ },
+ set: function setter (val) {
+ stackString = val
+ }
+ })
+
+ return error
+}
diff --git a/node_modules/depd/lib/browser/index.js b/node_modules/depd/lib/browser/index.js
new file mode 100644
index 0000000..6be45cc
--- /dev/null
+++ b/node_modules/depd/lib/browser/index.js
@@ -0,0 +1,77 @@
+/*!
+ * depd
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = depd
+
+/**
+ * Create deprecate for namespace in caller.
+ */
+
+function depd (namespace) {
+ if (!namespace) {
+ throw new TypeError('argument namespace is required')
+ }
+
+ function deprecate (message) {
+ // no-op in browser
+ }
+
+ deprecate._file = undefined
+ deprecate._ignored = true
+ deprecate._namespace = namespace
+ deprecate._traced = false
+ deprecate._warned = Object.create(null)
+
+ deprecate.function = wrapfunction
+ deprecate.property = wrapproperty
+
+ return deprecate
+}
+
+/**
+ * Return a wrapped function in a deprecation message.
+ *
+ * This is a no-op version of the wrapper, which does nothing but call
+ * validation.
+ */
+
+function wrapfunction (fn, message) {
+ if (typeof fn !== 'function') {
+ throw new TypeError('argument fn must be a function')
+ }
+
+ return fn
+}
+
+/**
+ * Wrap property in a deprecation message.
+ *
+ * This is a no-op version of the wrapper, which does nothing but call
+ * validation.
+ */
+
+function wrapproperty (obj, prop, message) {
+ if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ throw new TypeError('argument obj must be object')
+ }
+
+ var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
+
+ if (!descriptor) {
+ throw new TypeError('must call property on owner object')
+ }
+
+ if (!descriptor.configurable) {
+ throw new TypeError('property must be configurable')
+ }
+}
diff --git a/node_modules/depd/package.json b/node_modules/depd/package.json
new file mode 100644
index 0000000..3857e19
--- /dev/null
+++ b/node_modules/depd/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "depd",
+ "description": "Deprecate all the things",
+ "version": "2.0.0",
+ "author": "Douglas Christopher Wilson ",
+ "license": "MIT",
+ "keywords": [
+ "deprecate",
+ "deprecated"
+ ],
+ "repository": "dougwilson/nodejs-depd",
+ "browser": "lib/browser/index.js",
+ "devDependencies": {
+ "benchmark": "2.1.4",
+ "beautify-benchmark": "0.2.4",
+ "eslint": "5.7.0",
+ "eslint-config-standard": "12.0.0",
+ "eslint-plugin-import": "2.14.0",
+ "eslint-plugin-markdown": "1.0.0-beta.7",
+ "eslint-plugin-node": "7.0.1",
+ "eslint-plugin-promise": "4.0.1",
+ "eslint-plugin-standard": "4.0.0",
+ "istanbul": "0.4.5",
+ "mocha": "5.2.0",
+ "safe-buffer": "5.1.2",
+ "uid-safe": "2.1.5"
+ },
+ "files": [
+ "lib/",
+ "History.md",
+ "LICENSE",
+ "index.js",
+ "Readme.md"
+ ],
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "scripts": {
+ "bench": "node benchmark/index.js",
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --reporter spec --bail test/",
+ "test-ci": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter spec test/ && istanbul report lcovonly text-summary",
+ "test-cov": "istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter dot test/ && istanbul report lcov text-summary"
+ }
+}
diff --git a/node_modules/destroy/LICENSE b/node_modules/destroy/LICENSE
new file mode 100644
index 0000000..0e2c35f
--- /dev/null
+++ b/node_modules/destroy/LICENSE
@@ -0,0 +1,23 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
+Copyright (c) 2015-2022 Douglas Christopher Wilson doug@somethingdoug.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/destroy/README.md b/node_modules/destroy/README.md
new file mode 100644
index 0000000..e7701ae
--- /dev/null
+++ b/node_modules/destroy/README.md
@@ -0,0 +1,63 @@
+# destroy
+
+[![NPM version][npm-image]][npm-url]
+[![Build Status][github-actions-ci-image]][github-actions-ci-url]
+[![Test coverage][coveralls-image]][coveralls-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+Destroy a stream.
+
+This module is meant to ensure a stream gets destroyed, handling different APIs
+and Node.js bugs.
+
+## API
+
+```js
+var destroy = require('destroy')
+```
+
+### destroy(stream [, suppress])
+
+Destroy the given stream, and optionally suppress any future `error` events.
+
+In most cases, this is identical to a simple `stream.destroy()` call. The rules
+are as follows for a given stream:
+
+ 1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()`
+ and add a listener to the `open` event to call `stream.close()` if it is
+ fired. This is for a Node.js bug that will leak a file descriptor if
+ `.destroy()` is called before `open`.
+ 2. If the `stream` is an instance of a zlib stream, then call `stream.destroy()`
+ and close the underlying zlib handle if open, otherwise call `stream.close()`.
+ This is for consistency across Node.js versions and a Node.js bug that will
+ leak a native zlib handle.
+ 3. If the `stream` is not an instance of `Stream`, then nothing happens.
+ 4. If the `stream` has a `.destroy()` method, then call it.
+
+The function returns the `stream` passed in as the argument.
+
+## Example
+
+```js
+var destroy = require('destroy')
+
+var fs = require('fs')
+var stream = fs.createReadStream('package.json')
+
+// ... and later
+destroy(stream)
+```
+
+[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square
+[npm-url]: https://npmjs.org/package/destroy
+[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square
+[github-url]: https://github.com/stream-utils/destroy/tags
+[coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square
+[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master
+[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square
+[license-url]: LICENSE.md
+[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square
+[downloads-url]: https://npmjs.org/package/destroy
+[github-actions-ci-image]: https://img.shields.io/github/workflow/status/stream-utils/destroy/ci/master?label=ci&style=flat-square
+[github-actions-ci-url]: https://github.com/stream-utils/destroy/actions/workflows/ci.yml
diff --git a/node_modules/destroy/index.js b/node_modules/destroy/index.js
new file mode 100644
index 0000000..7fd5c09
--- /dev/null
+++ b/node_modules/destroy/index.js
@@ -0,0 +1,209 @@
+/*!
+ * destroy
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015-2022 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var EventEmitter = require('events').EventEmitter
+var ReadStream = require('fs').ReadStream
+var Stream = require('stream')
+var Zlib = require('zlib')
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = destroy
+
+/**
+ * Destroy the given stream, and optionally suppress any future `error` events.
+ *
+ * @param {object} stream
+ * @param {boolean} suppress
+ * @public
+ */
+
+function destroy (stream, suppress) {
+ if (isFsReadStream(stream)) {
+ destroyReadStream(stream)
+ } else if (isZlibStream(stream)) {
+ destroyZlibStream(stream)
+ } else if (hasDestroy(stream)) {
+ stream.destroy()
+ }
+
+ if (isEventEmitter(stream) && suppress) {
+ stream.removeAllListeners('error')
+ stream.addListener('error', noop)
+ }
+
+ return stream
+}
+
+/**
+ * Destroy a ReadStream.
+ *
+ * @param {object} stream
+ * @private
+ */
+
+function destroyReadStream (stream) {
+ stream.destroy()
+
+ if (typeof stream.close === 'function') {
+ // node.js core bug work-around
+ stream.on('open', onOpenClose)
+ }
+}
+
+/**
+ * Close a Zlib stream.
+ *
+ * Zlib streams below Node.js 4.5.5 have a buggy implementation
+ * of .close() when zlib encountered an error.
+ *
+ * @param {object} stream
+ * @private
+ */
+
+function closeZlibStream (stream) {
+ if (stream._hadError === true) {
+ var prop = stream._binding === null
+ ? '_binding'
+ : '_handle'
+
+ stream[prop] = {
+ close: function () { this[prop] = null }
+ }
+ }
+
+ stream.close()
+}
+
+/**
+ * Destroy a Zlib stream.
+ *
+ * Zlib streams don't have a destroy function in Node.js 6. On top of that
+ * simply calling destroy on a zlib stream in Node.js 8+ will result in a
+ * memory leak. So until that is fixed, we need to call both close AND destroy.
+ *
+ * PR to fix memory leak: https://github.com/nodejs/node/pull/23734
+ *
+ * In Node.js 6+8, it's important that destroy is called before close as the
+ * stream would otherwise emit the error 'zlib binding closed'.
+ *
+ * @param {object} stream
+ * @private
+ */
+
+function destroyZlibStream (stream) {
+ if (typeof stream.destroy === 'function') {
+ // node.js core bug work-around
+ // istanbul ignore if: node.js 0.8
+ if (stream._binding) {
+ // node.js < 0.10.0
+ stream.destroy()
+ if (stream._processing) {
+ stream._needDrain = true
+ stream.once('drain', onDrainClearBinding)
+ } else {
+ stream._binding.clear()
+ }
+ } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {
+ // node.js >= 12, ^11.1.0, ^10.15.1
+ stream.destroy()
+ } else if (stream._destroy && typeof stream.close === 'function') {
+ // node.js 7, 8
+ stream.destroyed = true
+ stream.close()
+ } else {
+ // fallback
+ // istanbul ignore next
+ stream.destroy()
+ }
+ } else if (typeof stream.close === 'function') {
+ // node.js < 8 fallback
+ closeZlibStream(stream)
+ }
+}
+
+/**
+ * Determine if stream has destroy.
+ * @private
+ */
+
+function hasDestroy (stream) {
+ return stream instanceof Stream &&
+ typeof stream.destroy === 'function'
+}
+
+/**
+ * Determine if val is EventEmitter.
+ * @private
+ */
+
+function isEventEmitter (val) {
+ return val instanceof EventEmitter
+}
+
+/**
+ * Determine if stream is fs.ReadStream stream.
+ * @private
+ */
+
+function isFsReadStream (stream) {
+ return stream instanceof ReadStream
+}
+
+/**
+ * Determine if stream is Zlib stream.
+ * @private
+ */
+
+function isZlibStream (stream) {
+ return stream instanceof Zlib.Gzip ||
+ stream instanceof Zlib.Gunzip ||
+ stream instanceof Zlib.Deflate ||
+ stream instanceof Zlib.DeflateRaw ||
+ stream instanceof Zlib.Inflate ||
+ stream instanceof Zlib.InflateRaw ||
+ stream instanceof Zlib.Unzip
+}
+
+/**
+ * No-op function.
+ * @private
+ */
+
+function noop () {}
+
+/**
+ * On drain handler to clear binding.
+ * @private
+ */
+
+// istanbul ignore next: node.js 0.8
+function onDrainClearBinding () {
+ this._binding.clear()
+}
+
+/**
+ * On open handler to close stream.
+ * @private
+ */
+
+function onOpenClose () {
+ if (typeof this.fd === 'number') {
+ // actually close down the fd
+ this.close()
+ }
+}
diff --git a/node_modules/destroy/package.json b/node_modules/destroy/package.json
new file mode 100644
index 0000000..c85e438
--- /dev/null
+++ b/node_modules/destroy/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "destroy",
+ "description": "destroy a stream if possible",
+ "version": "1.2.0",
+ "author": {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com",
+ "twitter": "https://twitter.com/jongleberry"
+ },
+ "contributors": [
+ "Douglas Christopher Wilson "
+ ],
+ "license": "MIT",
+ "repository": "stream-utils/destroy",
+ "devDependencies": {
+ "eslint": "7.32.0",
+ "eslint-config-standard": "14.1.1",
+ "eslint-plugin-import": "2.25.4",
+ "eslint-plugin-node": "11.1.0",
+ "eslint-plugin-promise": "5.2.0",
+ "eslint-plugin-standard": "4.1.0",
+ "mocha": "9.2.2",
+ "nyc": "15.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --reporter spec",
+ "test-ci": "nyc --reporter=lcovonly --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test"
+ },
+ "files": [
+ "index.js",
+ "LICENSE"
+ ],
+ "keywords": [
+ "stream",
+ "streams",
+ "destroy",
+ "cleanup",
+ "leak",
+ "fd"
+ ]
+}
diff --git a/node_modules/ee-first/LICENSE b/node_modules/ee-first/LICENSE
new file mode 100644
index 0000000..a7ae8ee
--- /dev/null
+++ b/node_modules/ee-first/LICENSE
@@ -0,0 +1,22 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/ee-first/README.md b/node_modules/ee-first/README.md
new file mode 100644
index 0000000..cbd2478
--- /dev/null
+++ b/node_modules/ee-first/README.md
@@ -0,0 +1,80 @@
+# EE First
+
+[![NPM version][npm-image]][npm-url]
+[![Build status][travis-image]][travis-url]
+[![Test coverage][coveralls-image]][coveralls-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+[![Gittip][gittip-image]][gittip-url]
+
+Get the first event in a set of event emitters and event pairs,
+then clean up after itself.
+
+## Install
+
+```sh
+$ npm install ee-first
+```
+
+## API
+
+```js
+var first = require('ee-first')
+```
+
+### first(arr, listener)
+
+Invoke `listener` on the first event from the list specified in `arr`. `arr` is
+an array of arrays, with each array in the format `[ee, ...event]`. `listener`
+will be called only once, the first time any of the given events are emitted. If
+`error` is one of the listened events, then if that fires first, the `listener`
+will be given the `err` argument.
+
+The `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the
+first argument emitted from an `error` event, if applicable; `ee` is the event
+emitter that fired; `event` is the string event name that fired; and `args` is an
+array of the arguments that were emitted on the event.
+
+```js
+var ee1 = new EventEmitter()
+var ee2 = new EventEmitter()
+
+first([
+ [ee1, 'close', 'end', 'error'],
+ [ee2, 'error']
+], function (err, ee, event, args) {
+ // listener invoked
+})
+```
+
+#### .cancel()
+
+The group of listeners can be cancelled before being invoked and have all the event
+listeners removed from the underlying event emitters.
+
+```js
+var thunk = first([
+ [ee1, 'close', 'end', 'error'],
+ [ee2, 'error']
+], function (err, ee, event, args) {
+ // listener invoked
+})
+
+// cancel and clean up
+thunk.cancel()
+```
+
+[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square
+[npm-url]: https://npmjs.org/package/ee-first
+[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square
+[github-url]: https://github.com/jonathanong/ee-first/tags
+[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square
+[travis-url]: https://travis-ci.org/jonathanong/ee-first
+[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square
+[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master
+[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square
+[license-url]: LICENSE.md
+[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square
+[downloads-url]: https://npmjs.org/package/ee-first
+[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square
+[gittip-url]: https://www.gittip.com/jonathanong/
diff --git a/node_modules/ee-first/index.js b/node_modules/ee-first/index.js
new file mode 100644
index 0000000..501287c
--- /dev/null
+++ b/node_modules/ee-first/index.js
@@ -0,0 +1,95 @@
+/*!
+ * ee-first
+ * Copyright(c) 2014 Jonathan Ong
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = first
+
+/**
+ * Get the first event in a set of event emitters and event pairs.
+ *
+ * @param {array} stuff
+ * @param {function} done
+ * @public
+ */
+
+function first(stuff, done) {
+ if (!Array.isArray(stuff))
+ throw new TypeError('arg must be an array of [ee, events...] arrays')
+
+ var cleanups = []
+
+ for (var i = 0; i < stuff.length; i++) {
+ var arr = stuff[i]
+
+ if (!Array.isArray(arr) || arr.length < 2)
+ throw new TypeError('each array member must be [ee, events...]')
+
+ var ee = arr[0]
+
+ for (var j = 1; j < arr.length; j++) {
+ var event = arr[j]
+ var fn = listener(event, callback)
+
+ // listen to the event
+ ee.on(event, fn)
+ // push this listener to the list of cleanups
+ cleanups.push({
+ ee: ee,
+ event: event,
+ fn: fn,
+ })
+ }
+ }
+
+ function callback() {
+ cleanup()
+ done.apply(null, arguments)
+ }
+
+ function cleanup() {
+ var x
+ for (var i = 0; i < cleanups.length; i++) {
+ x = cleanups[i]
+ x.ee.removeListener(x.event, x.fn)
+ }
+ }
+
+ function thunk(fn) {
+ done = fn
+ }
+
+ thunk.cancel = cleanup
+
+ return thunk
+}
+
+/**
+ * Create the event listener.
+ * @private
+ */
+
+function listener(event, done) {
+ return function onevent(arg1) {
+ var args = new Array(arguments.length)
+ var ee = this
+ var err = event === 'error'
+ ? arg1
+ : null
+
+ // copy args to prevent arguments escaping scope
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i]
+ }
+
+ done(err, ee, event, args)
+ }
+}
diff --git a/node_modules/ee-first/package.json b/node_modules/ee-first/package.json
new file mode 100644
index 0000000..b6d0b7d
--- /dev/null
+++ b/node_modules/ee-first/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "ee-first",
+ "description": "return the first event in a set of ee/event pairs",
+ "version": "1.1.1",
+ "author": {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com",
+ "twitter": "https://twitter.com/jongleberry"
+ },
+ "contributors": [
+ "Douglas Christopher Wilson "
+ ],
+ "license": "MIT",
+ "repository": "jonathanong/ee-first",
+ "devDependencies": {
+ "istanbul": "0.3.9",
+ "mocha": "2.2.5"
+ },
+ "files": [
+ "index.js",
+ "LICENSE"
+ ],
+ "scripts": {
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+ }
+}
diff --git a/node_modules/encodeurl/HISTORY.md b/node_modules/encodeurl/HISTORY.md
new file mode 100644
index 0000000..41313b2
--- /dev/null
+++ b/node_modules/encodeurl/HISTORY.md
@@ -0,0 +1,14 @@
+1.0.2 / 2018-01-21
+==================
+
+ * Fix encoding `%` as last character
+
+1.0.1 / 2016-06-09
+==================
+
+ * Fix encoding unpaired surrogates at start/end of string
+
+1.0.0 / 2016-06-08
+==================
+
+ * Initial release
diff --git a/node_modules/encodeurl/LICENSE b/node_modules/encodeurl/LICENSE
new file mode 100644
index 0000000..8812229
--- /dev/null
+++ b/node_modules/encodeurl/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2016 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/encodeurl/README.md b/node_modules/encodeurl/README.md
new file mode 100644
index 0000000..127c5a0
--- /dev/null
+++ b/node_modules/encodeurl/README.md
@@ -0,0 +1,128 @@
+# encodeurl
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Encode a URL to a percent-encoded form, excluding already-encoded sequences
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install encodeurl
+```
+
+## API
+
+```js
+var encodeUrl = require('encodeurl')
+```
+
+### encodeUrl(url)
+
+Encode a URL to a percent-encoded form, excluding already-encoded sequences.
+
+This function will take an already-encoded URL and encode all the non-URL
+code points (as UTF-8 byte sequences). This function will not encode the
+"%" character unless it is not part of a valid sequence (`%20` will be
+left as-is, but `%foo` will be encoded as `%25foo`).
+
+This encode is meant to be "safe" and does not throw errors. It will try as
+hard as it can to properly encode the given URL, including replacing any raw,
+unpaired surrogate pairs with the Unicode replacement character prior to
+encoding.
+
+This function is _similar_ to the intrinsic function `encodeURI`, except it
+will not encode the `%` character if that is part of a valid sequence, will
+not encode `[` and `]` (for IPv6 hostnames) and will replace raw, unpaired
+surrogate pairs with the Unicode replacement character (instead of throwing).
+
+## Examples
+
+### Encode a URL containing user-controled data
+
+```js
+var encodeUrl = require('encodeurl')
+var escapeHtml = require('escape-html')
+
+http.createServer(function onRequest (req, res) {
+ // get encoded form of inbound url
+ var url = encodeUrl(req.url)
+
+ // create html message
+ var body = 'Location ' + escapeHtml(url) + ' not found
'
+
+ // send a 404
+ res.statusCode = 404
+ res.setHeader('Content-Type', 'text/html; charset=UTF-8')
+ res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8')))
+ res.end(body, 'utf-8')
+})
+```
+
+### Encode a URL for use in a header field
+
+```js
+var encodeUrl = require('encodeurl')
+var escapeHtml = require('escape-html')
+var url = require('url')
+
+http.createServer(function onRequest (req, res) {
+ // parse inbound url
+ var href = url.parse(req)
+
+ // set new host for redirect
+ href.host = 'localhost'
+ href.protocol = 'https:'
+ href.slashes = true
+
+ // create location header
+ var location = encodeUrl(url.format(href))
+
+ // create html message
+ var body = 'Redirecting to new site: ' + escapeHtml(location) + '
'
+
+ // send a 301
+ res.statusCode = 301
+ res.setHeader('Content-Type', 'text/html; charset=UTF-8')
+ res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8')))
+ res.setHeader('Location', location)
+ res.end(body, 'utf-8')
+})
+```
+
+## Testing
+
+```sh
+$ npm test
+$ npm run lint
+```
+
+## References
+
+- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986]
+- [WHATWG URL Living Standard][whatwg-url]
+
+[rfc-3986]: https://tools.ietf.org/html/rfc3986
+[whatwg-url]: https://url.spec.whatwg.org/
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/encodeurl.svg
+[npm-url]: https://npmjs.org/package/encodeurl
+[node-version-image]: https://img.shields.io/node/v/encodeurl.svg
+[node-version-url]: https://nodejs.org/en/download
+[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg
+[travis-url]: https://travis-ci.org/pillarjs/encodeurl
+[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg
+[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg
+[downloads-url]: https://npmjs.org/package/encodeurl
diff --git a/node_modules/encodeurl/index.js b/node_modules/encodeurl/index.js
new file mode 100644
index 0000000..fc4906c
--- /dev/null
+++ b/node_modules/encodeurl/index.js
@@ -0,0 +1,60 @@
+/*!
+ * encodeurl
+ * Copyright(c) 2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = encodeUrl
+
+/**
+ * RegExp to match non-URL code points, *after* encoding (i.e. not including "%")
+ * and including invalid escape sequences.
+ * @private
+ */
+
+var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g
+
+/**
+ * RegExp to match unmatched surrogate pair.
+ * @private
+ */
+
+var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g
+
+/**
+ * String to replace unmatched surrogate pair with.
+ * @private
+ */
+
+var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2'
+
+/**
+ * Encode a URL to a percent-encoded form, excluding already-encoded sequences.
+ *
+ * This function will take an already-encoded URL and encode all the non-URL
+ * code points. This function will not encode the "%" character unless it is
+ * not part of a valid sequence (`%20` will be left as-is, but `%foo` will
+ * be encoded as `%25foo`).
+ *
+ * This encode is meant to be "safe" and does not throw errors. It will try as
+ * hard as it can to properly encode the given URL, including replacing any raw,
+ * unpaired surrogate pairs with the Unicode replacement character prior to
+ * encoding.
+ *
+ * @param {string} url
+ * @return {string}
+ * @public
+ */
+
+function encodeUrl (url) {
+ return String(url)
+ .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)
+ .replace(ENCODE_CHARS_REGEXP, encodeURI)
+}
diff --git a/node_modules/encodeurl/package.json b/node_modules/encodeurl/package.json
new file mode 100644
index 0000000..b9f25ef
--- /dev/null
+++ b/node_modules/encodeurl/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "encodeurl",
+ "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences",
+ "version": "1.0.2",
+ "contributors": [
+ "Douglas Christopher Wilson "
+ ],
+ "license": "MIT",
+ "keywords": [
+ "encode",
+ "encodeurl",
+ "url"
+ ],
+ "repository": "pillarjs/encodeurl",
+ "devDependencies": {
+ "eslint": "3.19.0",
+ "eslint-config-standard": "10.2.1",
+ "eslint-plugin-import": "2.8.0",
+ "eslint-plugin-node": "5.2.1",
+ "eslint-plugin-promise": "3.6.0",
+ "eslint-plugin-standard": "3.0.1",
+ "istanbul": "0.4.5",
+ "mocha": "2.5.3"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "README.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+ }
+}
diff --git a/node_modules/escape-html/LICENSE b/node_modules/escape-html/LICENSE
new file mode 100644
index 0000000..2e70de9
--- /dev/null
+++ b/node_modules/escape-html/LICENSE
@@ -0,0 +1,24 @@
+(The MIT License)
+
+Copyright (c) 2012-2013 TJ Holowaychuk
+Copyright (c) 2015 Andreas Lubbe
+Copyright (c) 2015 Tiancheng "Timothy" Gu
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/escape-html/Readme.md b/node_modules/escape-html/Readme.md
new file mode 100644
index 0000000..653d9ea
--- /dev/null
+++ b/node_modules/escape-html/Readme.md
@@ -0,0 +1,43 @@
+
+# escape-html
+
+ Escape string for use in HTML
+
+## Example
+
+```js
+var escape = require('escape-html');
+var html = escape('foo & bar');
+// -> foo & bar
+```
+
+## Benchmark
+
+```
+$ npm run-script bench
+
+> escape-html@1.0.3 bench nodejs-escape-html
+> node benchmark/index.js
+
+
+ http_parser@1.0
+ node@0.10.33
+ v8@3.14.5.9
+ ares@1.9.0-DEV
+ uv@0.10.29
+ zlib@1.2.3
+ modules@11
+ openssl@1.0.1j
+
+ 1 test completed.
+ 2 tests completed.
+ 3 tests completed.
+
+ no special characters x 19,435,271 ops/sec ±0.85% (187 runs sampled)
+ single special character x 6,132,421 ops/sec ±0.67% (194 runs sampled)
+ many special characters x 3,175,826 ops/sec ±0.65% (193 runs sampled)
+```
+
+## License
+
+ MIT
\ No newline at end of file
diff --git a/node_modules/escape-html/index.js b/node_modules/escape-html/index.js
new file mode 100644
index 0000000..bf9e226
--- /dev/null
+++ b/node_modules/escape-html/index.js
@@ -0,0 +1,78 @@
+/*!
+ * escape-html
+ * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var matchHtmlRegExp = /["'&<>]/;
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = escapeHtml;
+
+/**
+ * Escape special characters in the given string of html.
+ *
+ * @param {string} string The string to escape for inserting into HTML
+ * @return {string}
+ * @public
+ */
+
+function escapeHtml(string) {
+ var str = '' + string;
+ var match = matchHtmlRegExp.exec(str);
+
+ if (!match) {
+ return str;
+ }
+
+ var escape;
+ var html = '';
+ var index = 0;
+ var lastIndex = 0;
+
+ for (index = match.index; index < str.length; index++) {
+ switch (str.charCodeAt(index)) {
+ case 34: // "
+ escape = '"';
+ break;
+ case 38: // &
+ escape = '&';
+ break;
+ case 39: // '
+ escape = ''';
+ break;
+ case 60: // <
+ escape = '<';
+ break;
+ case 62: // >
+ escape = '>';
+ break;
+ default:
+ continue;
+ }
+
+ if (lastIndex !== index) {
+ html += str.substring(lastIndex, index);
+ }
+
+ lastIndex = index + 1;
+ html += escape;
+ }
+
+ return lastIndex !== index
+ ? html + str.substring(lastIndex, index)
+ : html;
+}
diff --git a/node_modules/escape-html/package.json b/node_modules/escape-html/package.json
new file mode 100644
index 0000000..57ec7bd
--- /dev/null
+++ b/node_modules/escape-html/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "escape-html",
+ "description": "Escape string for use in HTML",
+ "version": "1.0.3",
+ "license": "MIT",
+ "keywords": [
+ "escape",
+ "html",
+ "utility"
+ ],
+ "repository": "component/escape-html",
+ "devDependencies": {
+ "benchmark": "1.0.0",
+ "beautify-benchmark": "0.2.4"
+ },
+ "files": [
+ "LICENSE",
+ "Readme.md",
+ "index.js"
+ ],
+ "scripts": {
+ "bench": "node benchmark/index.js"
+ }
+}
diff --git a/node_modules/etag/HISTORY.md b/node_modules/etag/HISTORY.md
new file mode 100644
index 0000000..222b293
--- /dev/null
+++ b/node_modules/etag/HISTORY.md
@@ -0,0 +1,83 @@
+1.8.1 / 2017-09-12
+==================
+
+ * perf: replace regular expression with substring
+
+1.8.0 / 2017-02-18
+==================
+
+ * Use SHA1 instead of MD5 for ETag hashing
+ - Improves performance for larger entities
+ - Works with FIPS 140-2 OpenSSL configuration
+
+1.7.0 / 2015-06-08
+==================
+
+ * Always include entity length in ETags for hash length extensions
+ * Generate non-Stats ETags using MD5 only (no longer CRC32)
+ * Improve stat performance by removing hashing
+ * Remove base64 padding in ETags to shorten
+ * Use MD5 instead of MD4 in weak ETags over 1KB
+
+1.6.0 / 2015-05-10
+==================
+
+ * Improve support for JXcore
+ * Remove requirement of `atime` in the stats object
+ * Support "fake" stats objects in environments without `fs`
+
+1.5.1 / 2014-11-19
+==================
+
+ * deps: crc@3.2.1
+ - Minor fixes
+
+1.5.0 / 2014-10-14
+==================
+
+ * Improve string performance
+ * Slightly improve speed for weak ETags over 1KB
+
+1.4.0 / 2014-09-21
+==================
+
+ * Support "fake" stats objects
+ * Support Node.js 0.6
+
+1.3.1 / 2014-09-14
+==================
+
+ * Use the (new and improved) `crc` for crc32
+
+1.3.0 / 2014-08-29
+==================
+
+ * Default strings to strong ETags
+ * Improve speed for weak ETags over 1KB
+
+1.2.1 / 2014-08-29
+==================
+
+ * Use the (much faster) `buffer-crc32` for crc32
+
+1.2.0 / 2014-08-24
+==================
+
+ * Add support for file stat objects
+
+1.1.0 / 2014-08-24
+==================
+
+ * Add fast-path for empty entity
+ * Add weak ETag generation
+ * Shrink size of generated ETags
+
+1.0.1 / 2014-08-24
+==================
+
+ * Fix behavior of string containing Unicode
+
+1.0.0 / 2014-05-18
+==================
+
+ * Initial release
diff --git a/node_modules/etag/LICENSE b/node_modules/etag/LICENSE
new file mode 100644
index 0000000..cab251c
--- /dev/null
+++ b/node_modules/etag/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2014-2016 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/etag/README.md b/node_modules/etag/README.md
new file mode 100644
index 0000000..09c2169
--- /dev/null
+++ b/node_modules/etag/README.md
@@ -0,0 +1,159 @@
+# etag
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Create simple HTTP ETags
+
+This module generates HTTP ETags (as defined in RFC 7232) for use in
+HTTP responses.
+
+## Installation
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install etag
+```
+
+## API
+
+
+
+```js
+var etag = require('etag')
+```
+
+### etag(entity, [options])
+
+Generate a strong ETag for the given entity. This should be the complete
+body of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By
+default, a strong ETag is generated except for `fs.Stats`, which will
+generate a weak ETag (this can be overwritten by `options.weak`).
+
+
+
+```js
+res.setHeader('ETag', etag(body))
+```
+
+#### Options
+
+`etag` accepts these properties in the options object.
+
+##### weak
+
+Specifies if the generated ETag will include the weak validator mark (that
+is, the leading `W/`). The actual entity tag is the same. The default value
+is `false`, unless the `entity` is `fs.Stats`, in which case it is `true`.
+
+## Testing
+
+```sh
+$ npm test
+```
+
+## Benchmark
+
+```bash
+$ npm run-script bench
+
+> etag@1.8.1 bench nodejs-etag
+> node benchmark/index.js
+
+ http_parser@2.7.0
+ node@6.11.1
+ v8@5.1.281.103
+ uv@1.11.0
+ zlib@1.2.11
+ ares@1.10.1-DEV
+ icu@58.2
+ modules@48
+ openssl@1.0.2k
+
+> node benchmark/body0-100b.js
+
+ 100B body
+
+ 4 tests completed.
+
+ buffer - strong x 258,647 ops/sec ±1.07% (180 runs sampled)
+ buffer - weak x 263,812 ops/sec ±0.61% (184 runs sampled)
+ string - strong x 259,955 ops/sec ±1.19% (185 runs sampled)
+ string - weak x 264,356 ops/sec ±1.09% (184 runs sampled)
+
+> node benchmark/body1-1kb.js
+
+ 1KB body
+
+ 4 tests completed.
+
+ buffer - strong x 189,018 ops/sec ±1.12% (182 runs sampled)
+ buffer - weak x 190,586 ops/sec ±0.81% (186 runs sampled)
+ string - strong x 144,272 ops/sec ±0.96% (188 runs sampled)
+ string - weak x 145,380 ops/sec ±1.43% (187 runs sampled)
+
+> node benchmark/body2-5kb.js
+
+ 5KB body
+
+ 4 tests completed.
+
+ buffer - strong x 92,435 ops/sec ±0.42% (188 runs sampled)
+ buffer - weak x 92,373 ops/sec ±0.58% (189 runs sampled)
+ string - strong x 48,850 ops/sec ±0.56% (186 runs sampled)
+ string - weak x 49,380 ops/sec ±0.56% (190 runs sampled)
+
+> node benchmark/body3-10kb.js
+
+ 10KB body
+
+ 4 tests completed.
+
+ buffer - strong x 55,989 ops/sec ±0.93% (188 runs sampled)
+ buffer - weak x 56,148 ops/sec ±0.55% (190 runs sampled)
+ string - strong x 27,345 ops/sec ±0.43% (188 runs sampled)
+ string - weak x 27,496 ops/sec ±0.45% (190 runs sampled)
+
+> node benchmark/body4-100kb.js
+
+ 100KB body
+
+ 4 tests completed.
+
+ buffer - strong x 7,083 ops/sec ±0.22% (190 runs sampled)
+ buffer - weak x 7,115 ops/sec ±0.26% (191 runs sampled)
+ string - strong x 3,068 ops/sec ±0.34% (190 runs sampled)
+ string - weak x 3,096 ops/sec ±0.35% (190 runs sampled)
+
+> node benchmark/stats.js
+
+ stat
+
+ 4 tests completed.
+
+ real - strong x 871,642 ops/sec ±0.34% (189 runs sampled)
+ real - weak x 867,613 ops/sec ±0.39% (190 runs sampled)
+ fake - strong x 401,051 ops/sec ±0.40% (189 runs sampled)
+ fake - weak x 400,100 ops/sec ±0.47% (188 runs sampled)
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/etag.svg
+[npm-url]: https://npmjs.org/package/etag
+[node-version-image]: https://img.shields.io/node/v/etag.svg
+[node-version-url]: https://nodejs.org/en/download/
+[travis-image]: https://img.shields.io/travis/jshttp/etag/master.svg
+[travis-url]: https://travis-ci.org/jshttp/etag
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag/master.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/etag.svg
+[downloads-url]: https://npmjs.org/package/etag
diff --git a/node_modules/etag/index.js b/node_modules/etag/index.js
new file mode 100644
index 0000000..2a585c9
--- /dev/null
+++ b/node_modules/etag/index.js
@@ -0,0 +1,131 @@
+/*!
+ * etag
+ * Copyright(c) 2014-2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = etag
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var crypto = require('crypto')
+var Stats = require('fs').Stats
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var toString = Object.prototype.toString
+
+/**
+ * Generate an entity tag.
+ *
+ * @param {Buffer|string} entity
+ * @return {string}
+ * @private
+ */
+
+function entitytag (entity) {
+ if (entity.length === 0) {
+ // fast-path empty
+ return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"'
+ }
+
+ // compute hash of entity
+ var hash = crypto
+ .createHash('sha1')
+ .update(entity, 'utf8')
+ .digest('base64')
+ .substring(0, 27)
+
+ // compute length of entity
+ var len = typeof entity === 'string'
+ ? Buffer.byteLength(entity, 'utf8')
+ : entity.length
+
+ return '"' + len.toString(16) + '-' + hash + '"'
+}
+
+/**
+ * Create a simple ETag.
+ *
+ * @param {string|Buffer|Stats} entity
+ * @param {object} [options]
+ * @param {boolean} [options.weak]
+ * @return {String}
+ * @public
+ */
+
+function etag (entity, options) {
+ if (entity == null) {
+ throw new TypeError('argument entity is required')
+ }
+
+ // support fs.Stats object
+ var isStats = isstats(entity)
+ var weak = options && typeof options.weak === 'boolean'
+ ? options.weak
+ : isStats
+
+ // validate argument
+ if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {
+ throw new TypeError('argument entity must be string, Buffer, or fs.Stats')
+ }
+
+ // generate entity tag
+ var tag = isStats
+ ? stattag(entity)
+ : entitytag(entity)
+
+ return weak
+ ? 'W/' + tag
+ : tag
+}
+
+/**
+ * Determine if object is a Stats object.
+ *
+ * @param {object} obj
+ * @return {boolean}
+ * @api private
+ */
+
+function isstats (obj) {
+ // genuine fs.Stats
+ if (typeof Stats === 'function' && obj instanceof Stats) {
+ return true
+ }
+
+ // quack quack
+ return obj && typeof obj === 'object' &&
+ 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&
+ 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&
+ 'ino' in obj && typeof obj.ino === 'number' &&
+ 'size' in obj && typeof obj.size === 'number'
+}
+
+/**
+ * Generate a tag for a stat.
+ *
+ * @param {object} stat
+ * @return {string}
+ * @private
+ */
+
+function stattag (stat) {
+ var mtime = stat.mtime.getTime().toString(16)
+ var size = stat.size.toString(16)
+
+ return '"' + size + '-' + mtime + '"'
+}
diff --git a/node_modules/etag/package.json b/node_modules/etag/package.json
new file mode 100644
index 0000000..b06ab80
--- /dev/null
+++ b/node_modules/etag/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "etag",
+ "description": "Create simple HTTP ETags",
+ "version": "1.8.1",
+ "contributors": [
+ "Douglas Christopher Wilson ",
+ "David Björklund "
+ ],
+ "license": "MIT",
+ "keywords": [
+ "etag",
+ "http",
+ "res"
+ ],
+ "repository": "jshttp/etag",
+ "devDependencies": {
+ "beautify-benchmark": "0.2.4",
+ "benchmark": "2.1.4",
+ "eslint": "3.19.0",
+ "eslint-config-standard": "10.2.1",
+ "eslint-plugin-import": "2.7.0",
+ "eslint-plugin-markdown": "1.0.0-beta.6",
+ "eslint-plugin-node": "5.1.1",
+ "eslint-plugin-promise": "3.5.0",
+ "eslint-plugin-standard": "3.0.1",
+ "istanbul": "0.4.5",
+ "mocha": "1.21.5",
+ "safe-buffer": "5.1.1",
+ "seedrandom": "2.4.3"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "README.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "bench": "node benchmark/index.js",
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+ }
+}
diff --git a/node_modules/express/History.md b/node_modules/express/History.md
new file mode 100644
index 0000000..4c12ec9
--- /dev/null
+++ b/node_modules/express/History.md
@@ -0,0 +1,3579 @@
+4.18.1 / 2022-04-29
+===================
+
+ * Fix hanging on large stack of sync routes
+
+4.18.0 / 2022-04-25
+===================
+
+ * Add "root" option to `res.download`
+ * Allow `options` without `filename` in `res.download`
+ * Deprecate string and non-integer arguments to `res.status`
+ * Fix behavior of `null`/`undefined` as `maxAge` in `res.cookie`
+ * Fix handling very large stacks of sync middleware
+ * Ignore `Object.prototype` values in settings through `app.set`/`app.get`
+ * Invoke `default` with same arguments as types in `res.format`
+ * Support proper 205 responses using `res.send`
+ * Use `http-errors` for `res.format` error
+ * deps: body-parser@1.20.0
+ - Fix error message for json parse whitespace in `strict`
+ - Fix internal error when inflated body exceeds limit
+ - Prevent loss of async hooks context
+ - Prevent hanging when request already read
+ - deps: depd@2.0.0
+ - deps: http-errors@2.0.0
+ - deps: on-finished@2.4.1
+ - deps: qs@6.10.3
+ - deps: raw-body@2.5.1
+ * deps: cookie@0.5.0
+ - Add `priority` option
+ - Fix `expires` option to reject invalid dates
+ * deps: depd@2.0.0
+ - Replace internal `eval` usage with `Function` constructor
+ - Use instance methods on `process` to check for listeners
+ * deps: finalhandler@1.2.0
+ - Remove set content headers that break response
+ - deps: on-finished@2.4.1
+ - deps: statuses@2.0.1
+ * deps: on-finished@2.4.1
+ - Prevent loss of async hooks context
+ * deps: qs@6.10.3
+ * deps: send@0.18.0
+ - Fix emitted 416 error missing headers property
+ - Limit the headers removed for 304 response
+ - deps: depd@2.0.0
+ - deps: destroy@1.2.0
+ - deps: http-errors@2.0.0
+ - deps: on-finished@2.4.1
+ - deps: statuses@2.0.1
+ * deps: serve-static@1.15.0
+ - deps: send@0.18.0
+ * deps: statuses@2.0.1
+ - Remove code 306
+ - Rename `425 Unordered Collection` to standard `425 Too Early`
+
+4.17.3 / 2022-02-16
+===================
+
+ * deps: accepts@~1.3.8
+ - deps: mime-types@~2.1.34
+ - deps: negotiator@0.6.3
+ * deps: body-parser@1.19.2
+ - deps: bytes@3.1.2
+ - deps: qs@6.9.7
+ - deps: raw-body@2.4.3
+ * deps: cookie@0.4.2
+ * deps: qs@6.9.7
+ * Fix handling of `__proto__` keys
+ * pref: remove unnecessary regexp for trust proxy
+
+4.17.2 / 2021-12-16
+===================
+
+ * Fix handling of `undefined` in `res.jsonp`
+ * Fix handling of `undefined` when `"json escape"` is enabled
+ * Fix incorrect middleware execution with unanchored `RegExp`s
+ * Fix `res.jsonp(obj, status)` deprecation message
+ * Fix typo in `res.is` JSDoc
+ * deps: body-parser@1.19.1
+ - deps: bytes@3.1.1
+ - deps: http-errors@1.8.1
+ - deps: qs@6.9.6
+ - deps: raw-body@2.4.2
+ - deps: safe-buffer@5.2.1
+ - deps: type-is@~1.6.18
+ * deps: content-disposition@0.5.4
+ - deps: safe-buffer@5.2.1
+ * deps: cookie@0.4.1
+ - Fix `maxAge` option to reject invalid values
+ * deps: proxy-addr@~2.0.7
+ - Use `req.socket` over deprecated `req.connection`
+ - deps: forwarded@0.2.0
+ - deps: ipaddr.js@1.9.1
+ * deps: qs@6.9.6
+ * deps: safe-buffer@5.2.1
+ * deps: send@0.17.2
+ - deps: http-errors@1.8.1
+ - deps: ms@2.1.3
+ - pref: ignore empty http tokens
+ * deps: serve-static@1.14.2
+ - deps: send@0.17.2
+ * deps: setprototypeof@1.2.0
+
+4.17.1 / 2019-05-25
+===================
+
+ * Revert "Improve error message for `null`/`undefined` to `res.status`"
+
+4.17.0 / 2019-05-16
+===================
+
+ * Add `express.raw` to parse bodies into `Buffer`
+ * Add `express.text` to parse bodies into string
+ * Improve error message for non-strings to `res.sendFile`
+ * Improve error message for `null`/`undefined` to `res.status`
+ * Support multiple hosts in `X-Forwarded-Host`
+ * deps: accepts@~1.3.7
+ * deps: body-parser@1.19.0
+ - Add encoding MIK
+ - Add petabyte (`pb`) support
+ - Fix parsing array brackets after index
+ - deps: bytes@3.1.0
+ - deps: http-errors@1.7.2
+ - deps: iconv-lite@0.4.24
+ - deps: qs@6.7.0
+ - deps: raw-body@2.4.0
+ - deps: type-is@~1.6.17
+ * deps: content-disposition@0.5.3
+ * deps: cookie@0.4.0
+ - Add `SameSite=None` support
+ * deps: finalhandler@~1.1.2
+ - Set stricter `Content-Security-Policy` header
+ - deps: parseurl@~1.3.3
+ - deps: statuses@~1.5.0
+ * deps: parseurl@~1.3.3
+ * deps: proxy-addr@~2.0.5
+ - deps: ipaddr.js@1.9.0
+ * deps: qs@6.7.0
+ - Fix parsing array brackets after index
+ * deps: range-parser@~1.2.1
+ * deps: send@0.17.1
+ - Set stricter CSP header in redirect & error responses
+ - deps: http-errors@~1.7.2
+ - deps: mime@1.6.0
+ - deps: ms@2.1.1
+ - deps: range-parser@~1.2.1
+ - deps: statuses@~1.5.0
+ - perf: remove redundant `path.normalize` call
+ * deps: serve-static@1.14.1
+ - Set stricter CSP header in redirect response
+ - deps: parseurl@~1.3.3
+ - deps: send@0.17.1
+ * deps: setprototypeof@1.1.1
+ * deps: statuses@~1.5.0
+ - Add `103 Early Hints`
+ * deps: type-is@~1.6.18
+ - deps: mime-types@~2.1.24
+ - perf: prevent internal `throw` on invalid type
+
+4.16.4 / 2018-10-10
+===================
+
+ * Fix issue where `"Request aborted"` may be logged in `res.sendfile`
+ * Fix JSDoc for `Router` constructor
+ * deps: body-parser@1.18.3
+ - Fix deprecation warnings on Node.js 10+
+ - Fix stack trace for strict json parse error
+ - deps: depd@~1.1.2
+ - deps: http-errors@~1.6.3
+ - deps: iconv-lite@0.4.23
+ - deps: qs@6.5.2
+ - deps: raw-body@2.3.3
+ - deps: type-is@~1.6.16
+ * deps: proxy-addr@~2.0.4
+ - deps: ipaddr.js@1.8.0
+ * deps: qs@6.5.2
+ * deps: safe-buffer@5.1.2
+
+4.16.3 / 2018-03-12
+===================
+
+ * deps: accepts@~1.3.5
+ - deps: mime-types@~2.1.18
+ * deps: depd@~1.1.2
+ - perf: remove argument reassignment
+ * deps: encodeurl@~1.0.2
+ - Fix encoding `%` as last character
+ * deps: finalhandler@1.1.1
+ - Fix 404 output for bad / missing pathnames
+ - deps: encodeurl@~1.0.2
+ - deps: statuses@~1.4.0
+ * deps: proxy-addr@~2.0.3
+ - deps: ipaddr.js@1.6.0
+ * deps: send@0.16.2
+ - Fix incorrect end tag in default error & redirects
+ - deps: depd@~1.1.2
+ - deps: encodeurl@~1.0.2
+ - deps: statuses@~1.4.0
+ * deps: serve-static@1.13.2
+ - Fix incorrect end tag in redirects
+ - deps: encodeurl@~1.0.2
+ - deps: send@0.16.2
+ * deps: statuses@~1.4.0
+ * deps: type-is@~1.6.16
+ - deps: mime-types@~2.1.18
+
+4.16.2 / 2017-10-09
+===================
+
+ * Fix `TypeError` in `res.send` when given `Buffer` and `ETag` header set
+ * perf: skip parsing of entire `X-Forwarded-Proto` header
+
+4.16.1 / 2017-09-29
+===================
+
+ * deps: send@0.16.1
+ * deps: serve-static@1.13.1
+ - Fix regression when `root` is incorrectly set to a file
+ - deps: send@0.16.1
+
+4.16.0 / 2017-09-28
+===================
+
+ * Add `"json escape"` setting for `res.json` and `res.jsonp`
+ * Add `express.json` and `express.urlencoded` to parse bodies
+ * Add `options` argument to `res.download`
+ * Improve error message when autoloading invalid view engine
+ * Improve error messages when non-function provided as middleware
+ * Skip `Buffer` encoding when not generating ETag for small response
+ * Use `safe-buffer` for improved Buffer API
+ * deps: accepts@~1.3.4
+ - deps: mime-types@~2.1.16
+ * deps: content-type@~1.0.4
+ - perf: remove argument reassignment
+ - perf: skip parameter parsing when no parameters
+ * deps: etag@~1.8.1
+ - perf: replace regular expression with substring
+ * deps: finalhandler@1.1.0
+ - Use `res.headersSent` when available
+ * deps: parseurl@~1.3.2
+ - perf: reduce overhead for full URLs
+ - perf: unroll the "fast-path" `RegExp`
+ * deps: proxy-addr@~2.0.2
+ - Fix trimming leading / trailing OWS in `X-Forwarded-For`
+ - deps: forwarded@~0.1.2
+ - deps: ipaddr.js@1.5.2
+ - perf: reduce overhead when no `X-Forwarded-For` header
+ * deps: qs@6.5.1
+ - Fix parsing & compacting very deep objects
+ * deps: send@0.16.0
+ - Add 70 new types for file extensions
+ - Add `immutable` option
+ - Fix missing `