tedious 16.4.1 → 16.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/benchmarks/bulk-load/iterable.js +1 -1
- package/benchmarks/common.js +2 -4
- package/benchmarks/package-lock.json +21173 -0
- package/benchmarks/package.json +11 -0
- package/benchmarks/query/call-tvp.js +1 -1
- package/benchmarks/query/insert-varbinary.js +1 -1
- package/benchmarks/query/select-many-rows.js +1 -1
- package/benchmarks/query/select-nvarchar.js +1 -1
- package/benchmarks/query/select-varbinary.js +1 -1
- package/benchmarks/request/rpcrequest-payload-tvp.js +2 -2
- package/benchmarks/request/rpcrequest-payload-varbinary.js +2 -2
- package/benchmarks/token-parser/colmetadata-token.js +4 -2
- package/benchmarks/token-parser/done-token.js +5 -2
- package/benchmarks/token-parser/simple-tokens.js +8 -2
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +1 -8
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -1
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +1 -8
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -1
- package/lib/always-encrypted/cek-entry.js +1 -7
- package/lib/always-encrypted/cek-entry.js.map +1 -1
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js +1 -8
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -1
- package/lib/always-encrypted/symmetric-key.js +1 -2
- package/lib/always-encrypted/symmetric-key.js.map +1 -1
- package/lib/bulk-load-payload.js +1 -3
- package/lib/bulk-load-payload.js.map +1 -1
- package/lib/bulk-load.js +15 -23
- package/lib/bulk-load.js.map +1 -1
- package/lib/collation.js +1 -7
- package/lib/collation.js.map +1 -1
- package/lib/connection.js +22 -28
- package/lib/connection.js.map +1 -1
- package/lib/debug.js +1 -4
- package/lib/debug.js.map +1 -1
- package/lib/errors/abort-error.js +1 -2
- package/lib/errors/abort-error.js.map +1 -1
- package/lib/errors/timeout-error.js +1 -2
- package/lib/errors/timeout-error.js.map +1 -1
- package/lib/errors.js +1 -10
- package/lib/errors.js.map +1 -1
- package/lib/incoming-message-stream.js +1 -4
- package/lib/incoming-message-stream.js.map +1 -1
- package/lib/login7-payload.js +1 -23
- package/lib/login7-payload.js.map +1 -1
- package/lib/message-io.js +1 -8
- package/lib/message-io.js.map +1 -1
- package/lib/message.js +1 -4
- package/lib/message.js.map +1 -1
- package/lib/metadata-parser.js +361 -241
- package/lib/metadata-parser.js.map +1 -1
- package/lib/ntlm-payload.js +1 -2
- package/lib/ntlm-payload.js.map +1 -1
- package/lib/outgoing-message-stream.js +1 -5
- package/lib/outgoing-message-stream.js.map +1 -1
- package/lib/packet.js +1 -2
- package/lib/packet.js.map +1 -1
- package/lib/prelogin-payload.js +1 -11
- package/lib/prelogin-payload.js.map +1 -1
- package/lib/request.js +13 -19
- package/lib/request.js.map +1 -1
- package/lib/rpcrequest-payload.js +1 -6
- package/lib/rpcrequest-payload.js.map +1 -1
- package/lib/sqlbatch-payload.js +1 -4
- package/lib/sqlbatch-payload.js.map +1 -1
- package/lib/token/colmetadata-token-parser.js +103 -74
- package/lib/token/colmetadata-token-parser.js.map +1 -1
- package/lib/token/done-token-parser.js +52 -40
- package/lib/token/done-token-parser.js.map +1 -1
- package/lib/token/env-change-token-parser.js +110 -81
- package/lib/token/env-change-token-parser.js.map +1 -1
- package/lib/token/feature-ext-ack-parser.js +30 -22
- package/lib/token/feature-ext-ack-parser.js.map +1 -1
- package/lib/token/fedauth-info-parser.js +47 -30
- package/lib/token/fedauth-info-parser.js.map +1 -1
- package/lib/token/handler.js +3 -13
- package/lib/token/handler.js.map +1 -1
- package/lib/token/helpers.js +205 -0
- package/lib/token/helpers.js.map +1 -0
- package/lib/token/infoerror-token-parser.js +69 -36
- package/lib/token/infoerror-token-parser.js.map +1 -1
- package/lib/token/loginack-token-parser.js +59 -31
- package/lib/token/loginack-token-parser.js.map +1 -1
- package/lib/token/nbcrow-token-parser.js +60 -23
- package/lib/token/nbcrow-token-parser.js.map +1 -1
- package/lib/token/order-token-parser.js +22 -20
- package/lib/token/order-token-parser.js.map +1 -1
- package/lib/token/returnstatus-token-parser.js +9 -5
- package/lib/token/returnstatus-token-parser.js.map +1 -1
- package/lib/token/returnvalue-token-parser.js +79 -22
- package/lib/token/returnvalue-token-parser.js.map +1 -1
- package/lib/token/row-token-parser.js +50 -20
- package/lib/token/row-token-parser.js.map +1 -1
- package/lib/token/sspi-token-parser.js +14 -5
- package/lib/token/sspi-token-parser.js.map +1 -1
- package/lib/token/stream-parser.js +289 -330
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/token-stream-parser.js +1 -4
- package/lib/token/token-stream-parser.js.map +1 -1
- package/lib/token/token.js +2 -88
- package/lib/token/token.js.map +1 -1
- package/lib/tracking-buffer/writable-tracking-buffer.js +1 -7
- package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
- package/lib/transaction.js +1 -4
- package/lib/transaction.js.map +1 -1
- package/lib/value-parser.js +655 -438
- package/lib/value-parser.js.map +1 -1
- package/package.json +1 -1
- package/benchmarks/bulk-load/stream.js +0 -62
- package/benchmarks/bulk-load/sync.js +0 -59
package/lib/prelogin-payload.js
CHANGED
|
@@ -41,16 +41,6 @@ for (const name in MARS) {
|
|
|
41
41
|
s2.2.6.4
|
|
42
42
|
*/
|
|
43
43
|
class PreloginPayload {
|
|
44
|
-
data;
|
|
45
|
-
options;
|
|
46
|
-
version;
|
|
47
|
-
encryption;
|
|
48
|
-
encryptionString;
|
|
49
|
-
instance;
|
|
50
|
-
threadId;
|
|
51
|
-
mars;
|
|
52
|
-
marsString;
|
|
53
|
-
fedAuthRequired;
|
|
54
44
|
constructor(bufferOrOptions = {
|
|
55
45
|
encrypt: false,
|
|
56
46
|
version: {
|
|
@@ -217,4 +207,4 @@ class PreloginPayload {
|
|
|
217
207
|
var _default = PreloginPayload;
|
|
218
208
|
exports.default = _default;
|
|
219
209
|
module.exports = PreloginPayload;
|
|
220
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3B0aW9uQnVmZmVyU2l6ZSIsIlRPS0VOIiwiVkVSU0lPTiIsIkVOQ1JZUFRJT04iLCJJTlNUT1BUIiwiVEhSRUFESUQiLCJNQVJTIiwiRkVEQVVUSFJFUVVJUkVEIiwiVEVSTUlOQVRPUiIsIkVOQ1JZUFQiLCJPRkYiLCJPTiIsIk5PVF9TVVAiLCJSRVEiLCJlbmNyeXB0QnlWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsIm1hcnNCeVZhbHVlIiwiUHJlbG9naW5QYXlsb2FkIiwiZGF0YSIsIm9wdGlvbnMiLCJ2ZXJzaW9uIiwiZW5jcnlwdGlvbiIsImVuY3J5cHRpb25TdHJpbmciLCJpbnN0YW5jZSIsInRocmVhZElkIiwibWFycyIsIm1hcnNTdHJpbmciLCJmZWRBdXRoUmVxdWlyZWQiLCJjb25zdHJ1Y3RvciIsImJ1ZmZlck9yT3B0aW9ucyIsImVuY3J5cHQiLCJtYWpvciIsIm1pbm9yIiwiYnVpbGQiLCJzdWJidWlsZCIsIkJ1ZmZlciIsImNyZWF0ZU9wdGlvbnMiLCJleHRyYWN0T3B0aW9ucyIsImNyZWF0ZVZlcnNpb25PcHRpb24iLCJjcmVhdGVFbmNyeXB0aW9uT3B0aW9uIiwiY3JlYXRlSW5zdGFuY2VPcHRpb24iLCJjcmVhdGVUaHJlYWRJZE9wdGlvbiIsImNyZWF0ZU1hcnNPcHRpb24iLCJjcmVhdGVGZWRBdXRoT3B0aW9uIiwibGVuZ3RoIiwiaSIsImxlbiIsIm9wdGlvbiIsImFsbG9jIiwib3B0aW9uT2Zmc2V0Iiwib3B0aW9uRGF0YU9mZnNldCIsImoiLCJ3cml0ZVVJbnQ4IiwidG9rZW4iLCJ3cml0ZVVJbnQxNkJFIiwiY29weSIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVJbnQzMkJFIiwib2Zmc2V0IiwiZGF0YU9mZnNldCIsInJlYWRVSW50MTZCRSIsImRhdGFMZW5ndGgiLCJleHRyYWN0VmVyc2lvbiIsImV4dHJhY3RFbmNyeXB0aW9uIiwiZXh0cmFjdEluc3RhbmNlIiwiZXh0cmFjdFRocmVhZElkIiwiZXh0cmFjdE1hcnMiLCJleHRyYWN0RmVkQXV0aCIsInJlYWRVSW50OCIsInJlYWRVSW50MzJCRSIsInRvU3RyaW5nIiwiaW5kZW50Iiwic3ByaW50ZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVsb2dpbi1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3Qgb3B0aW9uQnVmZmVyU2l6ZSA9IDIwO1xuXG5jb25zdCBUT0tFTiA9IHtcbiAgVkVSU0lPTjogMHgwMCxcbiAgRU5DUllQVElPTjogMHgwMSxcbiAgSU5TVE9QVDogMHgwMixcbiAgVEhSRUFESUQ6IDB4MDMsXG4gIE1BUlM6IDB4MDQsXG4gIEZFREFVVEhSRVFVSVJFRDogMHgwNixcbiAgVEVSTUlOQVRPUjogMHhGRlxufTtcblxuY29uc3QgRU5DUllQVDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgT0ZGOiAweDAwLFxuICBPTjogMHgwMSxcbiAgTk9UX1NVUDogMHgwMixcbiAgUkVROiAweDAzXG59O1xuXG5jb25zdCBlbmNyeXB0QnlWYWx1ZTogeyBba2V5OiBudW1iZXJdOiBzdHJpbmcgfSA9IHt9O1xuXG5mb3IgKGNvbnN0IG5hbWUgaW4gRU5DUllQVCkge1xuICBjb25zdCB2YWx1ZSA9IEVOQ1JZUFRbbmFtZV07XG4gIGVuY3J5cHRCeVZhbHVlW3ZhbHVlXSA9IG5hbWU7XG59XG5cbmNvbnN0IE1BUlM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIE9GRjogMHgwMCxcbiAgT046IDB4MDFcbn07XG5cbmNvbnN0IG1hcnNCeVZhbHVlOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge307XG5cbmZvciAoY29uc3QgbmFtZSBpbiBNQVJTKSB7XG4gIGNvbnN0IHZhbHVlID0gTUFSU1tuYW1lXTtcbiAgbWFyc0J5VmFsdWVbdmFsdWVdID0gbmFtZTtcbn1cblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBlbmNyeXB0OiBib29sZWFuO1xuICB2ZXJzaW9uOiB7XG4gICAgbWFqb3I6IG51bWJlcjtcbiAgICBtaW5vcjogbnVtYmVyO1xuICAgIGJ1aWxkOiBudW1iZXI7XG4gICAgc3ViYnVpbGQ6IG51bWJlcjtcbiAgfTtcbn1cblxuLypcbiAgczIuMi42LjRcbiAqL1xuY2xhc3MgUHJlbG9naW5QYXlsb2FkIHtcbiAgZGF0YSE6IEJ1ZmZlcjtcbiAgb3B0aW9uczogT3B0aW9ucztcblxuICB2ZXJzaW9uIToge1xuICAgIG1ham9yOiBudW1iZXI7XG4gICAgbWlub3I6IG51bWJlcjtcbiAgICBidWlsZDogbnVtYmVyO1xuICAgIHN1YmJ1aWxkOiBudW1iZXI7XG4gIH07XG5cbiAgZW5jcnlwdGlvbiE6IG51bWJlcjtcbiAgZW5jcnlwdGlvblN0cmluZyE6IHN0cmluZztcblxuICBpbnN0YW5jZSE6IG51bWJlcjtcblxuICB0aHJlYWRJZCE6IG51bWJlcjtcblxuICBtYXJzITogbnVtYmVyO1xuICBtYXJzU3RyaW5nITogc3RyaW5nO1xuICBmZWRBdXRoUmVxdWlyZWQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoYnVmZmVyT3JPcHRpb25zOiBCdWZmZXIgfCBPcHRpb25zID0geyBlbmNyeXB0OiBmYWxzZSwgdmVyc2lvbjogeyBtYWpvcjogMCwgbWlub3I6IDAsIGJ1aWxkOiAwLCBzdWJidWlsZDogMCB9IH0pIHtcbiAgICBpZiAoYnVmZmVyT3JPcHRpb25zIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICB0aGlzLmRhdGEgPSBidWZmZXJPck9wdGlvbnM7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7IGVuY3J5cHQ6IGZhbHNlLCB2ZXJzaW9uOiB7IG1ham9yOiAwLCBtaW5vcjogMCwgYnVpbGQ6IDAsIHN1YmJ1aWxkOiAwIH0gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zID0gYnVmZmVyT3JPcHRpb25zO1xuICAgICAgdGhpcy5jcmVhdGVPcHRpb25zKCk7XG4gICAgfVxuICAgIHRoaXMuZXh0cmFjdE9wdGlvbnMoKTtcbiAgfVxuXG4gIGNyZWF0ZU9wdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbk9wdGlvbigpLFxuICAgICAgdGhpcy5jcmVhdGVFbmNyeXB0aW9uT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZVRocmVhZElkT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZU1hcnNPcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlRmVkQXV0aE9wdGlvbigpXG4gICAgXTtcblxuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zW2ldO1xuICAgICAgbGVuZ3RoICs9IDUgKyBvcHRpb24uZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGxlbmd0aCsrOyAvLyB0ZXJtaW5hdG9yXG4gICAgdGhpcy5kYXRhID0gQnVmZmVyLmFsbG9jKGxlbmd0aCwgMCk7XG4gICAgbGV0IG9wdGlvbk9mZnNldCA9IDA7XG4gICAgbGV0IG9wdGlvbkRhdGFPZmZzZXQgPSA1ICogb3B0aW9ucy5sZW5ndGggKyAxO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IG9wdGlvbnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbal07XG4gICAgICB0aGlzLmRhdGEud3JpdGVVSW50OChvcHRpb24udG9rZW4sIG9wdGlvbk9mZnNldCArIDApO1xuICAgICAgdGhpcy5kYXRhLndyaXRlVUludDE2QkUob3B0aW9uRGF0YU9mZnNldCwgb3B0aW9uT2Zmc2V0ICsgMSk7XG4gICAgICB0aGlzLmRhdGEud3JpdGVVSW50MTZCRShvcHRpb24uZGF0YS5sZW5ndGgsIG9wdGlvbk9mZnNldCArIDMpO1xuICAgICAgb3B0aW9uT2Zmc2V0ICs9IDU7XG4gICAgICBvcHRpb24uZGF0YS5jb3B5KHRoaXMuZGF0YSwgb3B0aW9uRGF0YU9mZnNldCk7XG4gICAgICBvcHRpb25EYXRhT2Zmc2V0ICs9IG9wdGlvbi5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEud3JpdGVVSW50OChUT0tFTi5URVJNSU5BVE9SLCBvcHRpb25PZmZzZXQpO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbk9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm9wdGlvbnMudmVyc2lvbi5tYWpvcik7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5vcHRpb25zLnZlcnNpb24ubWlub3IpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKHRoaXMub3B0aW9ucy52ZXJzaW9uLmJ1aWxkKTtcbiAgICBidWZmZXIud3JpdGVVSW50MTZCRSh0aGlzLm9wdGlvbnMudmVyc2lvbi5zdWJidWlsZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiBUT0tFTi5WRVJTSU9OLFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlRW5jcnlwdGlvbk9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuY3J5cHQpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEVOQ1JZUFQuT04pO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50OChFTkNSWVBULk5PVF9TVVApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLkVOQ1JZUFRJT04sXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVJbnN0YW5jZU9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCgweDAwKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLklOU1RPUFQsXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVUaHJlYWRJZE9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50MzJCRSgweDAwKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLlRIUkVBRElELFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlTWFyc09wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OChNQVJTLk9GRik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiBUT0tFTi5NQVJTLFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlRmVkQXV0aE9wdGlvbigpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcihvcHRpb25CdWZmZXJTaXplKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCgweDAxKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLkZFREFVVEhSRVFVSVJFRCxcbiAgICAgIGRhdGE6IGJ1ZmZlci5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RPcHRpb25zKCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlICh0aGlzLmRhdGFbb2Zmc2V0XSAhPT0gVE9LRU4uVEVSTUlOQVRPUikge1xuICAgICAgbGV0IGRhdGFPZmZzZXQgPSB0aGlzLmRhdGEucmVhZFVJbnQxNkJFKG9mZnNldCArIDEpO1xuICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgMyk7XG4gICAgICBzd2l0Y2ggKHRoaXMuZGF0YVtvZmZzZXRdKSB7XG4gICAgICAgIGNhc2UgVE9LRU4uVkVSU0lPTjpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RWZXJzaW9uKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLkVOQ1JZUFRJT046XG4gICAgICAgICAgdGhpcy5leHRyYWN0RW5jcnlwdGlvbihkYXRhT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUT0tFTi5JTlNUT1BUOlxuICAgICAgICAgIHRoaXMuZXh0cmFjdEluc3RhbmNlKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLlRIUkVBRElEOlxuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5leHRyYWN0VGhyZWFkSWQoZGF0YU9mZnNldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLk1BUlM6XG4gICAgICAgICAgdGhpcy5leHRyYWN0TWFycyhkYXRhT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUT0tFTi5GRURBVVRIUkVRVUlSRUQ6XG4gICAgICAgICAgdGhpcy5leHRyYWN0RmVkQXV0aChkYXRhT2Zmc2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSA1O1xuICAgICAgZGF0YU9mZnNldCArPSBkYXRhTGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIGV4dHJhY3RWZXJzaW9uKG9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy52ZXJzaW9uID0ge1xuICAgICAgbWFqb3I6IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0ICsgMCksXG4gICAgICBtaW5vcjogdGhpcy5kYXRhLnJlYWRVSW50OChvZmZzZXQgKyAxKSxcbiAgICAgIGJ1aWxkOiB0aGlzLmRhdGEucmVhZFVJbnQxNkJFKG9mZnNldCArIDIpLFxuICAgICAgc3ViYnVpbGQ6IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgNClcbiAgICB9O1xuICB9XG5cbiAgZXh0cmFjdEVuY3J5cHRpb24ob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLmVuY3J5cHRpb24gPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uU3RyaW5nID0gZW5jcnlwdEJ5VmFsdWVbdGhpcy5lbmNyeXB0aW9uXTtcbiAgfVxuXG4gIGV4dHJhY3RJbnN0YW5jZShvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gIH1cblxuICBleHRyYWN0VGhyZWFkSWQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLnRocmVhZElkID0gdGhpcy5kYXRhLnJlYWRVSW50MzJCRShvZmZzZXQpO1xuICB9XG5cbiAgZXh0cmFjdE1hcnMob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLm1hcnMgPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gICAgdGhpcy5tYXJzU3RyaW5nID0gbWFyc0J5VmFsdWVbdGhpcy5tYXJzXTtcbiAgfVxuXG4gIGV4dHJhY3RGZWRBdXRoKG9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy5mZWRBdXRoUmVxdWlyZWQgPSB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCk7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnUHJlTG9naW4gLSAnICsgc3ByaW50ZihcbiAgICAgICd2ZXJzaW9uOiVkLiVkLiVkLiVkLCBlbmNyeXB0aW9uOjB4JTAyWCglcyksIGluc3RvcHQ6MHglMDJYLCB0aHJlYWRJZDoweCUwOFgsIG1hcnM6MHglMDJYKCVzKScsXG4gICAgICB0aGlzLnZlcnNpb24ubWFqb3IsIHRoaXMudmVyc2lvbi5taW5vciwgdGhpcy52ZXJzaW9uLmJ1aWxkLCB0aGlzLnZlcnNpb24uc3ViYnVpbGQsXG4gICAgICB0aGlzLmVuY3J5cHRpb24gPyB0aGlzLmVuY3J5cHRpb24gOiAwLFxuICAgICAgdGhpcy5lbmNyeXB0aW9uU3RyaW5nID8gdGhpcy5lbmNyeXB0aW9uU3RyaW5nIDogJycsXG4gICAgICB0aGlzLmluc3RhbmNlID8gdGhpcy5pbnN0YW5jZSA6IDAsXG4gICAgICB0aGlzLnRocmVhZElkID8gdGhpcy50aHJlYWRJZCA6IDAsXG4gICAgICB0aGlzLm1hcnMgPyB0aGlzLm1hcnMgOiAwLFxuICAgICAgdGhpcy5tYXJzU3RyaW5nID8gdGhpcy5tYXJzU3RyaW5nIDogJydcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByZWxvZ2luUGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gUHJlbG9naW5QYXlsb2FkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQWdGLFNBQUFFLHVCQUFBQyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxD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
|
|
210
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3B0aW9uQnVmZmVyU2l6ZSIsIlRPS0VOIiwiVkVSU0lPTiIsIkVOQ1JZUFRJT04iLCJJTlNUT1BUIiwiVEhSRUFESUQiLCJNQVJTIiwiRkVEQVVUSFJFUVVJUkVEIiwiVEVSTUlOQVRPUiIsIkVOQ1JZUFQiLCJPRkYiLCJPTiIsIk5PVF9TVVAiLCJSRVEiLCJlbmNyeXB0QnlWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsIm1hcnNCeVZhbHVlIiwiUHJlbG9naW5QYXlsb2FkIiwiY29uc3RydWN0b3IiLCJidWZmZXJPck9wdGlvbnMiLCJlbmNyeXB0IiwidmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJidWlsZCIsInN1YmJ1aWxkIiwiQnVmZmVyIiwiZGF0YSIsIm9wdGlvbnMiLCJjcmVhdGVPcHRpb25zIiwiZXh0cmFjdE9wdGlvbnMiLCJjcmVhdGVWZXJzaW9uT3B0aW9uIiwiY3JlYXRlRW5jcnlwdGlvbk9wdGlvbiIsImNyZWF0ZUluc3RhbmNlT3B0aW9uIiwiY3JlYXRlVGhyZWFkSWRPcHRpb24iLCJjcmVhdGVNYXJzT3B0aW9uIiwiY3JlYXRlRmVkQXV0aE9wdGlvbiIsImxlbmd0aCIsImkiLCJsZW4iLCJvcHRpb24iLCJhbGxvYyIsIm9wdGlvbk9mZnNldCIsIm9wdGlvbkRhdGFPZmZzZXQiLCJqIiwid3JpdGVVSW50OCIsInRva2VuIiwid3JpdGVVSW50MTZCRSIsImNvcHkiLCJidWZmZXIiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50MzJCRSIsIm9mZnNldCIsImRhdGFPZmZzZXQiLCJyZWFkVUludDE2QkUiLCJkYXRhTGVuZ3RoIiwiZXh0cmFjdFZlcnNpb24iLCJleHRyYWN0RW5jcnlwdGlvbiIsImV4dHJhY3RJbnN0YW5jZSIsImV4dHJhY3RUaHJlYWRJZCIsImV4dHJhY3RNYXJzIiwiZXh0cmFjdEZlZEF1dGgiLCJyZWFkVUludDgiLCJlbmNyeXB0aW9uIiwiZW5jcnlwdGlvblN0cmluZyIsImluc3RhbmNlIiwidGhyZWFkSWQiLCJyZWFkVUludDMyQkUiLCJtYXJzIiwibWFyc1N0cmluZyIsImZlZEF1dGhSZXF1aXJlZCIsInRvU3RyaW5nIiwiaW5kZW50Iiwic3ByaW50ZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVsb2dpbi1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3Qgb3B0aW9uQnVmZmVyU2l6ZSA9IDIwO1xuXG5jb25zdCBUT0tFTiA9IHtcbiAgVkVSU0lPTjogMHgwMCxcbiAgRU5DUllQVElPTjogMHgwMSxcbiAgSU5TVE9QVDogMHgwMixcbiAgVEhSRUFESUQ6IDB4MDMsXG4gIE1BUlM6IDB4MDQsXG4gIEZFREFVVEhSRVFVSVJFRDogMHgwNixcbiAgVEVSTUlOQVRPUjogMHhGRlxufTtcblxuY29uc3QgRU5DUllQVDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgT0ZGOiAweDAwLFxuICBPTjogMHgwMSxcbiAgTk9UX1NVUDogMHgwMixcbiAgUkVROiAweDAzXG59O1xuXG5jb25zdCBlbmNyeXB0QnlWYWx1ZTogeyBba2V5OiBudW1iZXJdOiBzdHJpbmcgfSA9IHt9O1xuXG5mb3IgKGNvbnN0IG5hbWUgaW4gRU5DUllQVCkge1xuICBjb25zdCB2YWx1ZSA9IEVOQ1JZUFRbbmFtZV07XG4gIGVuY3J5cHRCeVZhbHVlW3ZhbHVlXSA9IG5hbWU7XG59XG5cbmNvbnN0IE1BUlM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIE9GRjogMHgwMCxcbiAgT046IDB4MDFcbn07XG5cbmNvbnN0IG1hcnNCeVZhbHVlOiB7IFtrZXk6IG51bWJlcl06IHN0cmluZyB9ID0ge307XG5cbmZvciAoY29uc3QgbmFtZSBpbiBNQVJTKSB7XG4gIGNvbnN0IHZhbHVlID0gTUFSU1tuYW1lXTtcbiAgbWFyc0J5VmFsdWVbdmFsdWVdID0gbmFtZTtcbn1cblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBlbmNyeXB0OiBib29sZWFuO1xuICB2ZXJzaW9uOiB7XG4gICAgbWFqb3I6IG51bWJlcjtcbiAgICBtaW5vcjogbnVtYmVyO1xuICAgIGJ1aWxkOiBudW1iZXI7XG4gICAgc3ViYnVpbGQ6IG51bWJlcjtcbiAgfTtcbn1cblxuLypcbiAgczIuMi42LjRcbiAqL1xuY2xhc3MgUHJlbG9naW5QYXlsb2FkIHtcbiAgZGVjbGFyZSBkYXRhOiBCdWZmZXI7XG4gIGRlY2xhcmUgb3B0aW9uczogT3B0aW9ucztcblxuICBkZWNsYXJlIHZlcnNpb246IHtcbiAgICBtYWpvcjogbnVtYmVyO1xuICAgIG1pbm9yOiBudW1iZXI7XG4gICAgYnVpbGQ6IG51bWJlcjtcbiAgICBzdWJidWlsZDogbnVtYmVyO1xuICB9O1xuXG4gIGRlY2xhcmUgZW5jcnlwdGlvbjogbnVtYmVyO1xuICBkZWNsYXJlIGVuY3J5cHRpb25TdHJpbmc6IHN0cmluZztcblxuICBkZWNsYXJlIGluc3RhbmNlOiBudW1iZXI7XG5cbiAgZGVjbGFyZSB0aHJlYWRJZDogbnVtYmVyO1xuXG4gIGRlY2xhcmUgbWFyczogbnVtYmVyO1xuICBkZWNsYXJlIG1hcnNTdHJpbmc6IHN0cmluZztcbiAgZGVjbGFyZSBmZWRBdXRoUmVxdWlyZWQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihidWZmZXJPck9wdGlvbnM6IEJ1ZmZlciB8IE9wdGlvbnMgPSB7IGVuY3J5cHQ6IGZhbHNlLCB2ZXJzaW9uOiB7IG1ham9yOiAwLCBtaW5vcjogMCwgYnVpbGQ6IDAsIHN1YmJ1aWxkOiAwIH0gfSkge1xuICAgIGlmIChidWZmZXJPck9wdGlvbnMgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGJ1ZmZlck9yT3B0aW9ucztcbiAgICAgIHRoaXMub3B0aW9ucyA9IHsgZW5jcnlwdDogZmFsc2UsIHZlcnNpb246IHsgbWFqb3I6IDAsIG1pbm9yOiAwLCBidWlsZDogMCwgc3ViYnVpbGQ6IDAgfSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBidWZmZXJPck9wdGlvbnM7XG4gICAgICB0aGlzLmNyZWF0ZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgdGhpcy5leHRyYWN0T3B0aW9ucygpO1xuICB9XG5cbiAgY3JlYXRlT3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAgdGhpcy5jcmVhdGVWZXJzaW9uT3B0aW9uKCksXG4gICAgICB0aGlzLmNyZWF0ZUVuY3J5cHRpb25PcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlSW5zdGFuY2VPcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlVGhyZWFkSWRPcHRpb24oKSxcbiAgICAgIHRoaXMuY3JlYXRlTWFyc09wdGlvbigpLFxuICAgICAgdGhpcy5jcmVhdGVGZWRBdXRoT3B0aW9uKClcbiAgICBdO1xuXG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbaV07XG4gICAgICBsZW5ndGggKz0gNSArIG9wdGlvbi5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgbGVuZ3RoKys7IC8vIHRlcm1pbmF0b3JcbiAgICB0aGlzLmRhdGEgPSBCdWZmZXIuYWxsb2MobGVuZ3RoLCAwKTtcbiAgICBsZXQgb3B0aW9uT2Zmc2V0ID0gMDtcbiAgICBsZXQgb3B0aW9uRGF0YU9mZnNldCA9IDUgKiBvcHRpb25zLmxlbmd0aCArIDE7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gb3B0aW9ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uc1tqXTtcbiAgICAgIHRoaXMuZGF0YS53cml0ZVVJbnQ4KG9wdGlvbi50b2tlbiwgb3B0aW9uT2Zmc2V0ICsgMCk7XG4gICAgICB0aGlzLmRhdGEud3JpdGVVSW50MTZCRShvcHRpb25EYXRhT2Zmc2V0LCBvcHRpb25PZmZzZXQgKyAxKTtcbiAgICAgIHRoaXMuZGF0YS53cml0ZVVJbnQxNkJFKG9wdGlvbi5kYXRhLmxlbmd0aCwgb3B0aW9uT2Zmc2V0ICsgMyk7XG4gICAgICBvcHRpb25PZmZzZXQgKz0gNTtcbiAgICAgIG9wdGlvbi5kYXRhLmNvcHkodGhpcy5kYXRhLCBvcHRpb25EYXRhT2Zmc2V0KTtcbiAgICAgIG9wdGlvbkRhdGFPZmZzZXQgKz0gb3B0aW9uLmRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS53cml0ZVVJbnQ4KFRPS0VOLlRFUk1JTkFUT1IsIG9wdGlvbk9mZnNldCk7XG4gIH1cblxuICBjcmVhdGVWZXJzaW9uT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMub3B0aW9ucy52ZXJzaW9uLm1ham9yKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm9wdGlvbnMudmVyc2lvbi5taW5vcik7XG4gICAgYnVmZmVyLndyaXRlVUludDE2QkUodGhpcy5vcHRpb25zLnZlcnNpb24uYnVpbGQpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKHRoaXMub3B0aW9ucy52ZXJzaW9uLnN1YmJ1aWxkKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLlZFUlNJT04sXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVFbmNyeXB0aW9uT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5jcnlwdCkge1xuICAgICAgYnVmZmVyLndyaXRlVUludDgoRU5DUllQVC5PTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEVOQ1JZUFQuTk9UX1NVUCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uRU5DUllQVElPTixcbiAgICAgIGRhdGE6IGJ1ZmZlci5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZUluc3RhbmNlT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDApO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uSU5TVE9QVCxcbiAgICAgIGRhdGE6IGJ1ZmZlci5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVRocmVhZElkT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkJFKDB4MDApO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uVEhSRUFESUQsXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVNYXJzT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KE1BUlMuT0ZGKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IFRPS0VOLk1BUlMsXG4gICAgICBkYXRhOiBidWZmZXIuZGF0YVxuICAgIH07XG4gIH1cblxuICBjcmVhdGVGZWRBdXRoT3B0aW9uKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKG9wdGlvbkJ1ZmZlclNpemUpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDEpO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogVE9LRU4uRkVEQVVUSFJFUVVJUkVELFxuICAgICAgZGF0YTogYnVmZmVyLmRhdGFcbiAgICB9O1xuICB9XG5cbiAgZXh0cmFjdE9wdGlvbnMoKSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgd2hpbGUgKHRoaXMuZGF0YVtvZmZzZXRdICE9PSBUT0tFTi5URVJNSU5BVE9SKSB7XG4gICAgICBsZXQgZGF0YU9mZnNldCA9IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgMSk7XG4gICAgICBjb25zdCBkYXRhTGVuZ3RoID0gdGhpcy5kYXRhLnJlYWRVSW50MTZCRShvZmZzZXQgKyAzKTtcbiAgICAgIHN3aXRjaCAodGhpcy5kYXRhW29mZnNldF0pIHtcbiAgICAgICAgY2FzZSBUT0tFTi5WRVJTSU9OOlxuICAgICAgICAgIHRoaXMuZXh0cmFjdFZlcnNpb24oZGF0YU9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVE9LRU4uRU5DUllQVElPTjpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RFbmNyeXB0aW9uKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLklOU1RPUFQ6XG4gICAgICAgICAgdGhpcy5leHRyYWN0SW5zdGFuY2UoZGF0YU9mZnNldCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVE9LRU4uVEhSRUFESUQ6XG4gICAgICAgICAgaWYgKGRhdGFMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RUaHJlYWRJZChkYXRhT2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVE9LRU4uTUFSUzpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RNYXJzKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRPS0VOLkZFREFVVEhSRVFVSVJFRDpcbiAgICAgICAgICB0aGlzLmV4dHJhY3RGZWRBdXRoKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IDU7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGRhdGFMZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgZXh0cmFjdFZlcnNpb24ob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLnZlcnNpb24gPSB7XG4gICAgICBtYWpvcjogdGhpcy5kYXRhLnJlYWRVSW50OChvZmZzZXQgKyAwKSxcbiAgICAgIG1pbm9yOiB0aGlzLmRhdGEucmVhZFVJbnQ4KG9mZnNldCArIDEpLFxuICAgICAgYnVpbGQ6IHRoaXMuZGF0YS5yZWFkVUludDE2QkUob2Zmc2V0ICsgMiksXG4gICAgICBzdWJidWlsZDogdGhpcy5kYXRhLnJlYWRVSW50MTZCRShvZmZzZXQgKyA0KVxuICAgIH07XG4gIH1cblxuICBleHRyYWN0RW5jcnlwdGlvbihvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMuZW5jcnlwdGlvbiA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgICB0aGlzLmVuY3J5cHRpb25TdHJpbmcgPSBlbmNyeXB0QnlWYWx1ZVt0aGlzLmVuY3J5cHRpb25dO1xuICB9XG5cbiAgZXh0cmFjdEluc3RhbmNlKG9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgfVxuXG4gIGV4dHJhY3RUaHJlYWRJZChvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMudGhyZWFkSWQgPSB0aGlzLmRhdGEucmVhZFVJbnQzMkJFKG9mZnNldCk7XG4gIH1cblxuICBleHRyYWN0TWFycyhvZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMubWFycyA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgICB0aGlzLm1hcnNTdHJpbmcgPSBtYXJzQnlWYWx1ZVt0aGlzLm1hcnNdO1xuICB9XG5cbiAgZXh0cmFjdEZlZEF1dGgob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLmZlZEF1dGhSZXF1aXJlZCA9IHRoaXMuZGF0YS5yZWFkVUludDgob2Zmc2V0KTtcbiAgfVxuXG4gIHRvU3RyaW5nKGluZGVudCA9ICcnKSB7XG4gICAgcmV0dXJuIGluZGVudCArICdQcmVMb2dpbiAtICcgKyBzcHJpbnRmKFxuICAgICAgJ3ZlcnNpb246JWQuJWQuJWQuJWQsIGVuY3J5cHRpb246MHglMDJYKCVzKSwgaW5zdG9wdDoweCUwMlgsIHRocmVhZElkOjB4JTA4WCwgbWFyczoweCUwMlgoJXMpJyxcbiAgICAgIHRoaXMudmVyc2lvbi5tYWpvciwgdGhpcy52ZXJzaW9uLm1pbm9yLCB0aGlzLnZlcnNpb24uYnVpbGQsIHRoaXMudmVyc2lvbi5zdWJidWlsZCxcbiAgICAgIHRoaXMuZW5jcnlwdGlvbiA/IHRoaXMuZW5jcnlwdGlvbiA6IDAsXG4gICAgICB0aGlzLmVuY3J5cHRpb25TdHJpbmcgPyB0aGlzLmVuY3J5cHRpb25TdHJpbmcgOiAnJyxcbiAgICAgIHRoaXMuaW5zdGFuY2UgPyB0aGlzLmluc3RhbmNlIDogMCxcbiAgICAgIHRoaXMudGhyZWFkSWQgPyB0aGlzLnRocmVhZElkIDogMCxcbiAgICAgIHRoaXMubWFycyA/IHRoaXMubWFycyA6IDAsXG4gICAgICB0aGlzLm1hcnNTdHJpbmcgPyB0aGlzLm1hcnNTdHJpbmcgOiAnJ1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJlbG9naW5QYXlsb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBQcmVsb2dpblBheWxvYWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLHVCQUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prelogin-payload.js","names":["_sprintfJs","require","_writableTrackingBuffer","_interopRequireDefault","obj","__esModule","default","optionBufferSize","TOKEN","VERSION","ENCRYPTION","INSTOPT","THREADID","MARS","FEDAUTHREQUIRED","TERMINATOR","ENCRYPT","OFF","ON","NOT_SUP","REQ","encryptByValue","name","value","marsByValue","PreloginPayload","data","options","version","encryption","encryptionString","instance","threadId","mars","marsString","fedAuthRequired","constructor","bufferOrOptions","encrypt","major","minor","build","subbuild","Buffer","createOptions","extractOptions","createVersionOption","createEncryptionOption","createInstanceOption","createThreadIdOption","createMarsOption","createFedAuthOption","length","i","len","option","alloc","optionOffset","optionDataOffset","j","writeUInt8","token","writeUInt16BE","copy","buffer","WritableTrackingBuffer","writeUInt32BE","offset","dataOffset","readUInt16BE","dataLength","extractVersion","extractEncryption","extractInstance","extractThreadId","extractMars","extractFedAuth","readUInt8","readUInt32BE","toString","indent","sprintf","_default","exports","module"],"sources":["../src/prelogin-payload.ts"],"sourcesContent":["import { sprintf } from 'sprintf-js';\n\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\n\nconst optionBufferSize = 20;\n\nconst TOKEN = {\n VERSION: 0x00,\n ENCRYPTION: 0x01,\n INSTOPT: 0x02,\n THREADID: 0x03,\n MARS: 0x04,\n FEDAUTHREQUIRED: 0x06,\n TERMINATOR: 0xFF\n};\n\nconst ENCRYPT: { [key: string]: number } = {\n OFF: 0x00,\n ON: 0x01,\n NOT_SUP: 0x02,\n REQ: 0x03\n};\n\nconst encryptByValue: { [key: number]: string } = {};\n\nfor (const name in ENCRYPT) {\n const value = ENCRYPT[name];\n encryptByValue[value] = name;\n}\n\nconst MARS: { [key: string]: number } = {\n OFF: 0x00,\n ON: 0x01\n};\n\nconst marsByValue: { [key: number]: string } = {};\n\nfor (const name in MARS) {\n const value = MARS[name];\n marsByValue[value] = name;\n}\n\ninterface Options {\n encrypt: boolean;\n version: {\n major: number;\n minor: number;\n build: number;\n subbuild: number;\n };\n}\n\n/*\n s2.2.6.4\n */\nclass PreloginPayload {\n data!: Buffer;\n options: Options;\n\n version!: {\n major: number;\n minor: number;\n build: number;\n subbuild: number;\n };\n\n encryption!: number;\n encryptionString!: string;\n\n instance!: number;\n\n threadId!: number;\n\n mars!: number;\n marsString!: string;\n fedAuthRequired!: number;\n\n constructor(bufferOrOptions: Buffer | Options = { encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } }) {\n if (bufferOrOptions instanceof Buffer) {\n this.data = bufferOrOptions;\n this.options = { encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } };\n } else {\n this.options = bufferOrOptions;\n this.createOptions();\n }\n this.extractOptions();\n }\n\n createOptions() {\n const options = [\n this.createVersionOption(),\n this.createEncryptionOption(),\n this.createInstanceOption(),\n this.createThreadIdOption(),\n this.createMarsOption(),\n this.createFedAuthOption()\n ];\n\n let length = 0;\n for (let i = 0, len = options.length; i < len; i++) {\n const option = options[i];\n length += 5 + option.data.length;\n }\n length++; // terminator\n this.data = Buffer.alloc(length, 0);\n let optionOffset = 0;\n let optionDataOffset = 5 * options.length + 1;\n\n for (let j = 0, len = options.length; j < len; j++) {\n const option = options[j];\n this.data.writeUInt8(option.token, optionOffset + 0);\n this.data.writeUInt16BE(optionDataOffset, optionOffset + 1);\n this.data.writeUInt16BE(option.data.length, optionOffset + 3);\n optionOffset += 5;\n option.data.copy(this.data, optionDataOffset);\n optionDataOffset += option.data.length;\n }\n\n this.data.writeUInt8(TOKEN.TERMINATOR, optionOffset);\n }\n\n createVersionOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(this.options.version.major);\n buffer.writeUInt8(this.options.version.minor);\n buffer.writeUInt16BE(this.options.version.build);\n buffer.writeUInt16BE(this.options.version.subbuild);\n return {\n token: TOKEN.VERSION,\n data: buffer.data\n };\n }\n\n createEncryptionOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n if (this.options.encrypt) {\n buffer.writeUInt8(ENCRYPT.ON);\n } else {\n buffer.writeUInt8(ENCRYPT.NOT_SUP);\n }\n return {\n token: TOKEN.ENCRYPTION,\n data: buffer.data\n };\n }\n\n createInstanceOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(0x00);\n return {\n token: TOKEN.INSTOPT,\n data: buffer.data\n };\n }\n\n createThreadIdOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt32BE(0x00);\n return {\n token: TOKEN.THREADID,\n data: buffer.data\n };\n }\n\n createMarsOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(MARS.OFF);\n return {\n token: TOKEN.MARS,\n data: buffer.data\n };\n }\n\n createFedAuthOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(0x01);\n return {\n token: TOKEN.FEDAUTHREQUIRED,\n data: buffer.data\n };\n }\n\n extractOptions() {\n let offset = 0;\n while (this.data[offset] !== TOKEN.TERMINATOR) {\n let dataOffset = this.data.readUInt16BE(offset + 1);\n const dataLength = this.data.readUInt16BE(offset + 3);\n switch (this.data[offset]) {\n case TOKEN.VERSION:\n this.extractVersion(dataOffset);\n break;\n case TOKEN.ENCRYPTION:\n this.extractEncryption(dataOffset);\n break;\n case TOKEN.INSTOPT:\n this.extractInstance(dataOffset);\n break;\n case TOKEN.THREADID:\n if (dataLength > 0) {\n this.extractThreadId(dataOffset);\n }\n break;\n case TOKEN.MARS:\n this.extractMars(dataOffset);\n break;\n case TOKEN.FEDAUTHREQUIRED:\n this.extractFedAuth(dataOffset);\n break;\n }\n offset += 5;\n dataOffset += dataLength;\n }\n }\n\n extractVersion(offset: number) {\n this.version = {\n major: this.data.readUInt8(offset + 0),\n minor: this.data.readUInt8(offset + 1),\n build: this.data.readUInt16BE(offset + 2),\n subbuild: this.data.readUInt16BE(offset + 4)\n };\n }\n\n extractEncryption(offset: number) {\n this.encryption = this.data.readUInt8(offset);\n this.encryptionString = encryptByValue[this.encryption];\n }\n\n extractInstance(offset: number) {\n this.instance = this.data.readUInt8(offset);\n }\n\n extractThreadId(offset: number) {\n this.threadId = this.data.readUInt32BE(offset);\n }\n\n extractMars(offset: number) {\n this.mars = this.data.readUInt8(offset);\n this.marsString = marsByValue[this.mars];\n }\n\n extractFedAuth(offset: number) {\n this.fedAuthRequired = this.data.readUInt8(offset);\n }\n\n toString(indent = '') {\n return indent + 'PreLogin - ' + sprintf(\n 'version:%d.%d.%d.%d, encryption:0x%02X(%s), instopt:0x%02X, threadId:0x%08X, mars:0x%02X(%s)',\n this.version.major, this.version.minor, this.version.build, this.version.subbuild,\n this.encryption ? this.encryption : 0,\n this.encryptionString ? this.encryptionString : '',\n this.instance ? this.instance : 0,\n this.threadId ? this.threadId : 0,\n this.mars ? this.mars : 0,\n this.marsString ? this.marsString : ''\n );\n }\n}\n\nexport default PreloginPayload;\nmodule.exports = PreloginPayload;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prelogin-payload.js","names":["_sprintfJs","require","_writableTrackingBuffer","_interopRequireDefault","obj","__esModule","default","optionBufferSize","TOKEN","VERSION","ENCRYPTION","INSTOPT","THREADID","MARS","FEDAUTHREQUIRED","TERMINATOR","ENCRYPT","OFF","ON","NOT_SUP","REQ","encryptByValue","name","value","marsByValue","PreloginPayload","constructor","bufferOrOptions","encrypt","version","major","minor","build","subbuild","Buffer","data","options","createOptions","extractOptions","createVersionOption","createEncryptionOption","createInstanceOption","createThreadIdOption","createMarsOption","createFedAuthOption","length","i","len","option","alloc","optionOffset","optionDataOffset","j","writeUInt8","token","writeUInt16BE","copy","buffer","WritableTrackingBuffer","writeUInt32BE","offset","dataOffset","readUInt16BE","dataLength","extractVersion","extractEncryption","extractInstance","extractThreadId","extractMars","extractFedAuth","readUInt8","encryption","encryptionString","instance","threadId","readUInt32BE","mars","marsString","fedAuthRequired","toString","indent","sprintf","_default","exports","module"],"sources":["../src/prelogin-payload.ts"],"sourcesContent":["import { sprintf } from 'sprintf-js';\n\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\n\nconst optionBufferSize = 20;\n\nconst TOKEN = {\n VERSION: 0x00,\n ENCRYPTION: 0x01,\n INSTOPT: 0x02,\n THREADID: 0x03,\n MARS: 0x04,\n FEDAUTHREQUIRED: 0x06,\n TERMINATOR: 0xFF\n};\n\nconst ENCRYPT: { [key: string]: number } = {\n OFF: 0x00,\n ON: 0x01,\n NOT_SUP: 0x02,\n REQ: 0x03\n};\n\nconst encryptByValue: { [key: number]: string } = {};\n\nfor (const name in ENCRYPT) {\n const value = ENCRYPT[name];\n encryptByValue[value] = name;\n}\n\nconst MARS: { [key: string]: number } = {\n OFF: 0x00,\n ON: 0x01\n};\n\nconst marsByValue: { [key: number]: string } = {};\n\nfor (const name in MARS) {\n const value = MARS[name];\n marsByValue[value] = name;\n}\n\ninterface Options {\n encrypt: boolean;\n version: {\n major: number;\n minor: number;\n build: number;\n subbuild: number;\n };\n}\n\n/*\n s2.2.6.4\n */\nclass PreloginPayload {\n declare data: Buffer;\n declare options: Options;\n\n declare version: {\n major: number;\n minor: number;\n build: number;\n subbuild: number;\n };\n\n declare encryption: number;\n declare encryptionString: string;\n\n declare instance: number;\n\n declare threadId: number;\n\n declare mars: number;\n declare marsString: string;\n declare fedAuthRequired: number;\n\n constructor(bufferOrOptions: Buffer | Options = { encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } }) {\n if (bufferOrOptions instanceof Buffer) {\n this.data = bufferOrOptions;\n this.options = { encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } };\n } else {\n this.options = bufferOrOptions;\n this.createOptions();\n }\n this.extractOptions();\n }\n\n createOptions() {\n const options = [\n this.createVersionOption(),\n this.createEncryptionOption(),\n this.createInstanceOption(),\n this.createThreadIdOption(),\n this.createMarsOption(),\n this.createFedAuthOption()\n ];\n\n let length = 0;\n for (let i = 0, len = options.length; i < len; i++) {\n const option = options[i];\n length += 5 + option.data.length;\n }\n length++; // terminator\n this.data = Buffer.alloc(length, 0);\n let optionOffset = 0;\n let optionDataOffset = 5 * options.length + 1;\n\n for (let j = 0, len = options.length; j < len; j++) {\n const option = options[j];\n this.data.writeUInt8(option.token, optionOffset + 0);\n this.data.writeUInt16BE(optionDataOffset, optionOffset + 1);\n this.data.writeUInt16BE(option.data.length, optionOffset + 3);\n optionOffset += 5;\n option.data.copy(this.data, optionDataOffset);\n optionDataOffset += option.data.length;\n }\n\n this.data.writeUInt8(TOKEN.TERMINATOR, optionOffset);\n }\n\n createVersionOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(this.options.version.major);\n buffer.writeUInt8(this.options.version.minor);\n buffer.writeUInt16BE(this.options.version.build);\n buffer.writeUInt16BE(this.options.version.subbuild);\n return {\n token: TOKEN.VERSION,\n data: buffer.data\n };\n }\n\n createEncryptionOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n if (this.options.encrypt) {\n buffer.writeUInt8(ENCRYPT.ON);\n } else {\n buffer.writeUInt8(ENCRYPT.NOT_SUP);\n }\n return {\n token: TOKEN.ENCRYPTION,\n data: buffer.data\n };\n }\n\n createInstanceOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(0x00);\n return {\n token: TOKEN.INSTOPT,\n data: buffer.data\n };\n }\n\n createThreadIdOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt32BE(0x00);\n return {\n token: TOKEN.THREADID,\n data: buffer.data\n };\n }\n\n createMarsOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(MARS.OFF);\n return {\n token: TOKEN.MARS,\n data: buffer.data\n };\n }\n\n createFedAuthOption() {\n const buffer = new WritableTrackingBuffer(optionBufferSize);\n buffer.writeUInt8(0x01);\n return {\n token: TOKEN.FEDAUTHREQUIRED,\n data: buffer.data\n };\n }\n\n extractOptions() {\n let offset = 0;\n while (this.data[offset] !== TOKEN.TERMINATOR) {\n let dataOffset = this.data.readUInt16BE(offset + 1);\n const dataLength = this.data.readUInt16BE(offset + 3);\n switch (this.data[offset]) {\n case TOKEN.VERSION:\n this.extractVersion(dataOffset);\n break;\n case TOKEN.ENCRYPTION:\n this.extractEncryption(dataOffset);\n break;\n case TOKEN.INSTOPT:\n this.extractInstance(dataOffset);\n break;\n case TOKEN.THREADID:\n if (dataLength > 0) {\n this.extractThreadId(dataOffset);\n }\n break;\n case TOKEN.MARS:\n this.extractMars(dataOffset);\n break;\n case TOKEN.FEDAUTHREQUIRED:\n this.extractFedAuth(dataOffset);\n break;\n }\n offset += 5;\n dataOffset += dataLength;\n }\n }\n\n extractVersion(offset: number) {\n this.version = {\n major: this.data.readUInt8(offset + 0),\n minor: this.data.readUInt8(offset + 1),\n build: this.data.readUInt16BE(offset + 2),\n subbuild: this.data.readUInt16BE(offset + 4)\n };\n }\n\n extractEncryption(offset: number) {\n this.encryption = this.data.readUInt8(offset);\n this.encryptionString = encryptByValue[this.encryption];\n }\n\n extractInstance(offset: number) {\n this.instance = this.data.readUInt8(offset);\n }\n\n extractThreadId(offset: number) {\n this.threadId = this.data.readUInt32BE(offset);\n }\n\n extractMars(offset: number) {\n this.mars = this.data.readUInt8(offset);\n this.marsString = marsByValue[this.mars];\n }\n\n extractFedAuth(offset: number) {\n this.fedAuthRequired = this.data.readUInt8(offset);\n }\n\n toString(indent = '') {\n return indent + 'PreLogin - ' + sprintf(\n 'version:%d.%d.%d.%d, encryption:0x%02X(%s), instopt:0x%02X, threadId:0x%08X, mars:0x%02X(%s)',\n this.version.major, this.version.minor, this.version.build, this.version.subbuild,\n this.encryption ? this.encryption : 0,\n this.encryptionString ? this.encryptionString : '',\n this.instance ? this.instance : 0,\n this.threadId ? this.threadId : 0,\n this.mars ? this.mars : 0,\n this.marsString ? this.marsString : ''\n );\n }\n}\n\nexport default PreloginPayload;\nmodule.exports = PreloginPayload;\n"],"mappings":"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"}
|
package/lib/request.js
CHANGED
|
@@ -30,68 +30,62 @@ class Request extends _events.EventEmitter {
|
|
|
30
30
|
/**
|
|
31
31
|
* @private
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
/**
|
|
35
35
|
* @private
|
|
36
36
|
*/
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
/**
|
|
39
39
|
* @private
|
|
40
40
|
*/
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
/**
|
|
43
43
|
* @private
|
|
44
44
|
*/
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
/**
|
|
47
47
|
* @private
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
/**
|
|
51
51
|
* @private
|
|
52
52
|
*/
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
/**
|
|
55
55
|
* @private
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
/**
|
|
59
59
|
* @private
|
|
60
60
|
*/
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
/**
|
|
63
63
|
* @private
|
|
64
64
|
*/
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
/**
|
|
67
67
|
* @private
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
/**
|
|
71
71
|
* @private
|
|
72
72
|
*/
|
|
73
|
-
timeout;
|
|
74
73
|
|
|
75
74
|
/**
|
|
76
75
|
* @private
|
|
77
76
|
*/
|
|
78
|
-
|
|
77
|
+
|
|
79
78
|
/**
|
|
80
79
|
* @private
|
|
81
80
|
*/
|
|
82
|
-
|
|
81
|
+
|
|
83
82
|
/**
|
|
84
83
|
* @private
|
|
85
84
|
*/
|
|
86
|
-
rowCount;
|
|
87
85
|
|
|
88
86
|
/**
|
|
89
87
|
* @private
|
|
90
88
|
*/
|
|
91
|
-
callback;
|
|
92
|
-
shouldHonorAE;
|
|
93
|
-
statementColumnEncryptionSetting;
|
|
94
|
-
cryptoMetadataLoaded;
|
|
95
89
|
|
|
96
90
|
/**
|
|
97
91
|
* This event, describing result set columns, will be emitted before row
|
|
@@ -389,4 +383,4 @@ class Request extends _events.EventEmitter {
|
|
|
389
383
|
var _default = Request;
|
|
390
384
|
exports.default = _default;
|
|
391
385
|
module.exports = Request;
|
|
392
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwic3FsVGV4dE9yUHJvY2VkdXJlIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNCeU5hbWUiLCJwcmVwYXJpbmciLCJjYW5jZWxlZCIsInBhdXNlZCIsInVzZXJDYWxsYmFjayIsImhhbmRsZSIsImVycm9yIiwiY29ubmVjdGlvbiIsInRpbWVvdXQiLCJyb3dzIiwicnN0Iiwicm93Q291bnQiLCJjYWxsYmFjayIsInNob3VsZEhvbm9yQUUiLCJzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsImNyeXB0b01ldGFkYXRhTG9hZGVkIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiZXJyIiwiYWRkUGFyYW1ldGVyIiwibmFtZSIsInR5cGUiLCJ2YWx1ZSIsIm91dHB1dCIsImxlbmd0aCIsInByZWNpc2lvbiIsInNjYWxlIiwicGFyYW1ldGVyIiwicHVzaCIsImFkZE91dHB1dFBhcmFtZXRlciIsIm1ha2VQYXJhbXNQYXJhbWV0ZXIiLCJwYXJhbXNQYXJhbWV0ZXIiLCJpIiwibGVuIiwiZGVjbGFyYXRpb24iLCJ2YWxpZGF0ZVBhcmFtZXRlcnMiLCJjb2xsYXRpb24iLCJ2YWxpZGF0ZSIsIlJlcXVlc3RFcnJvciIsIm1lc3NhZ2UiLCJwYXVzZSIsInJlc3VtZSIsImNhbmNlbCIsInNldFRpbWVvdXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3JlcXVlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IHR5cGUgUGFyYW1ldGVyLCB0eXBlIERhdGFUeXBlIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgQ29ubmVjdGlvbiBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgdHlwZSBNZXRhZGF0YSB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nIH0gZnJvbSAnLi9hbHdheXMtZW5jcnlwdGVkL3R5cGVzJztcbmltcG9ydCB7IHR5cGUgQ29sdW1uTWV0YWRhdGEgfSBmcm9tICcuL3Rva2VuL2NvbG1ldGFkYXRhLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbi8qKlxuICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQsIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBhbiBlcnJvci5cbiAqIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBzdGF0ZW1lbnQocyksIHRoZW4gYGVycmAgd2lsbCBkZXNjcmliZSB0aGUgZXJyb3IuXG4gKlxuICogQXMgb25seSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgbWF5IGJlIGV4ZWN1dGVkIG9uIGEgY29ubmVjdGlvbiwgYW5vdGhlciByZXF1ZXN0IHNob3VsZCBub3RcbiAqIGJlIGluaXRpYXRlZCB1bnRpbCB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAqXG4gKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUgYHJlcXVlc3RDb21wbGV0ZWRgIGlzIGVtaXR0ZWQuXG4gKi9cbnR5cGUgQ29tcGxldGlvbkNhbGxiYWNrID1cbiAgLyoqXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiAgIElmIGFuIGVycm9yIG9jY3VyZWQsIGFuIGVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50XG4gICAqICAgVGhlIG51bWJlciBvZiByb3dzIGVtaXR0ZWQgYXMgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NcbiAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25dXSBpcyBgdHJ1ZWAuXG4gICAqL1xuICAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byB0eXBlIHRoZSBgcm93c2AgcGFyYW1ldGVyIGhlcmUuXG4gIChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCByb3dDb3VudD86IG51bWJlciwgcm93cz86IGFueSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZz86IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xufVxuXG4vKipcbiAqIGBgYGpzXG4gKiBjb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJ3RlZGlvdXMnKTtcbiAqIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChcInNlbGVjdCA0MiwgJ2hlbGxvIHdvcmxkJ1wiLCAoZXJyLCByb3dDb3VudCkge1xuICogICAvLyBSZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suLi5cbiAqIH0pO1xuICogY29ubmVjdGlvbi5leGVjU3FsKHJlcXVlc3QpO1xuICogYGBgXG4gKi9cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNxbFRleHRPclByb2NlZHVyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHBhcmFtZXRlcnNCeU5hbWU6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldGVyIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJlcGFyaW5nOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbmNlbGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHBhdXNlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1c2VyQ2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoYW5kbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByb3dzPzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByc3Q/OiBBcnJheTxhbnk+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJvd0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaztcblxuXG4gIHNob3VsZEhvbm9yQUU/OiBib29sZWFuO1xuICBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc7XG4gIGNyeXB0b01ldGFkYXRhTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50LCBkZXNjcmliaW5nIHJlc3VsdCBzZXQgY29sdW1ucywgd2lsbCBiZSBlbWl0dGVkIGJlZm9yZSByb3dcbiAgICogZXZlbnRzIGFyZSBlbWl0dGVkLiBUaGlzIGV2ZW50IG1heSBiZSBlbWl0ZWQgbXVsdGlwbGUgdGltZXMgd2hlbiBtb3JlXG4gICAqIHRoYW4gb25lIHJlY29yZHNldCBpcyBwcm9kdWNlZCBieSB0aGUgc3RhdGVtZW50LlxuICAgKlxuICAgKiBBbiBhcnJheSBsaWtlIG9iamVjdCwgd2hlcmUgdGhlIGNvbHVtbnMgY2FuIGJlIGFjY2Vzc2VkIGVpdGhlciBieSBpbmRleFxuICAgKiBvciBuYW1lLiBDb2x1bW5zIHdpdGggYSBuYW1lIHRoYXQgaXMgYW4gaW50ZWdlciBhcmUgbm90IGFjY2Vzc2libGUgYnkgbmFtZSxcbiAgICogYXMgaXQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gYXJyYXkgaW5kZXguXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ2NvbHVtbk1ldGFkYXRhJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAoY29sdW1uczogQ29sdW1uTWV0YWRhdGFbXSB8IHsgW2tleTogc3RyaW5nXTogQ29sdW1uTWV0YWRhdGEgfSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGhhcyBiZWVuIHByZXBhcmVkIGFuZCBjYW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IGNhbGxzIHRvIGV4ZWN1dGUgYW5kIHVucHJlcGFyZS5cbiAgICovXG4gIG9uKGV2ZW50OiAncHJlcGFyZWQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgZW5jb3VudGVyZWQgYW4gZXJyb3IgYW5kIGhhcyBub3QgYmVlbiBwcmVwYXJlZC5cbiAgICovXG4gIG9uKGV2ZW50OiAnZXJyb3InLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIEEgcm93IHJlc3VsdGluZyBmcm9tIGV4ZWN1dGlvbiBvZiB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAncm93JyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQW4gYXJyYXkgb3Igb2JqZWN0IChkZXBlbmRzIG9uIFtbQ29ubmVjdGlvbk9wdGlvbnMudXNlQ29sdW1uTmFtZXNdXSksIHdoZXJlIHRoZSBjb2x1bW5zIGNhbiBiZSBhY2Nlc3NlZCBieSBpbmRleC9uYW1lLlxuICAgICAgICogRWFjaCBjb2x1bW4gaGFzIHR3byBwcm9wZXJ0aWVzLCBgbWV0YWRhdGFgIGFuZCBgdmFsdWVg77yaXG4gICAgICAgKlxuICAgICAgICogKiBgbWV0YWRhdGFgXG4gICAgICAgKlxuICAgICAgICogICAgVGhlIHNhbWUgZGF0YSB0aGF0IGlzIGV4cG9zZWQgaW4gdGhlIGBjb2x1bW5NZXRhZGF0YWAgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogKiBgdmFsdWVgXG4gICAgICAgKlxuICAgICAgICogICAgVGhlIGNvbHVtbidzIHZhbHVlLiBJdCB3aWxsIGJlIGBudWxsYCBmb3IgYSBgTlVMTGAuXG4gICAgICAgKiAgICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29sdW1ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZW4gdGhpcyB3aWxsIGJlIGFuIGFycmF5IG9mIHRoZSB2YWx1ZXMuXG4gICAgICAgKi9cbiAgICAgIChjb2x1bW5zOiBhbnkpID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBbGwgcm93cyBmcm9tIGEgcmVzdWx0IHNldCBoYXZlIGJlZW4gcHJvdmlkZWQgKHRocm91Z2ggYHJvd2AgZXZlbnRzKS5cbiAgICpcbiAgICogVGhpcyB0b2tlbiBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBjb21wbGV0aW9uIG9mIGEgU1FMIHN0YXRlbWVudC5cbiAgICogQXMgbXVsdGlwbGUgU1FMIHN0YXRlbWVudHMgY2FuIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBpbiBhIHNpbmdsZSBTUUwgYmF0Y2gsIG11bHRpcGxlIGBkb25lYCBjYW4gYmUgZ2VuZXJhdGVkLlxuICAgKiBBbiBgZG9uZWAgZXZlbnQgaXMgZW1pdGVkIGZvciBlYWNoIFNRTCBzdGF0ZW1lbnQgaW4gdGhlIFNRTCBiYXRjaCBleGNlcHQgdmFyaWFibGUgZGVjbGFyYXRpb25zLlxuICAgKiBGb3IgZXhlY3V0aW9uIG9mIFNRTCBzdGF0ZW1lbnRzIHdpdGhpbiBzdG9yZWQgcHJvY2VkdXJlcywgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBhcmUgdXNlZCBpbiBwbGFjZSBvZiBgZG9uZWAuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXSB0aGVuIFNRTCBzZXJ2ZXIgbWF5IHRyZWF0IHRoZSBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFzIGEgc3RvcmVkIHByb2NlZHVyZS5cbiAgICogV2hlbiB0aGlzIG9jY3VycywgdGhlIGBkb25lUHJvY2AgYW5kIGBkb25lSW5Qcm9jYCBldmVudHMgbWF5IGJlIGVtaXR0ZWQgaW5zdGVhZC4gWW91IG11c3QgaGFuZGxlIGJvdGggZXZlbnRzIHRvIGVuc3VyZSBjb21wbGV0ZSBjb3ZlcmFnZS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZScsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWFibGUgaWYgQ29ubmVjdGlvbidzIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZV1dIGlzIGB0cnVlYC5cbiAgICAgICAqL1xuICAgICAgKHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogYHJlcXVlc3Qub24oJ2RvbmVJblByb2MnLCBmdW5jdGlvbiAocm93Q291bnQsIG1vcmUsIHJvd3MpIHsgfSk7YFxuICAgKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mIGEgU1FMIHN0YXRlbWVudCB3aXRoaW4gYSBzdG9yZWQgcHJvY2VkdXJlLiBBbGwgcm93cyBmcm9tIGEgc3RhdGVtZW50XG4gICAqIGluIGEgc3RvcmVkIHByb2NlZHVyZSBoYXZlIGJlZW4gcHJvdmlkZWQgKHRocm91Z2ggYHJvd2AgZXZlbnRzKS5cbiAgICpcbiAgICogVGhpcyBldmVudCBtYXkgYWxzbyBvY2N1ciB3aGVuIGV4ZWN1dGluZyBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IHVzaW5nIFtbZXhlY1NxbF1dLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lSW5Qcm9jJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpYWJsZSBpZiBDb25uZWN0aW9uJ3MgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXV0gaXMgYHRydWVgLlxuICAgICAgICovXG4gICAgICAocm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mIGEgc3RvcmVkIHByb2NlZHVyZS4gVGhpcyBpcyBhbHNvIGdlbmVyYXRlZCBmb3Igc3RvcmVkIHByb2NlZHVyZXNcbiAgICogZXhlY3V0ZWQgdGhyb3VnaCBTUUwgc3RhdGVtZW50cy5cXFxuICAgKiBUaGlzIGV2ZW50IG1heSBhbHNvIG9jY3VyIHdoZW4gZXhlY3V0aW5nIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgdXNpbmcgW1tleGVjU3FsXV0uXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ2RvbmVQcm9jJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpYWJsZSBpZiBDb25uZWN0aW9uJ3MgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXV0gaXMgYHRydWVgLlxuICAgICAgICovXG4gICAgICAocm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiBudW1iZXIsIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogQSB2YWx1ZSBmb3IgYW4gb3V0cHV0IHBhcmFtZXRlciAodGhhdCB3YXMgYWRkZWQgdG8gdGhlIHJlcXVlc3Qgd2l0aCBbW2FkZE91dHB1dFBhcmFtZXRlcl1dKS5cbiAgICogU2VlIGFsc28gYFVzaW5nIFBhcmFtZXRlcnNgLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdyZXR1cm5WYWx1ZScsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lXG4gICAgICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gKERvZXMgbm90IHN0YXJ0IHdpdGggJ0AnLilcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlcidzIG91dHB1dCB2YWx1ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbWV0YWRhdGFcbiAgICAgICAqICAgVGhlIHNhbWUgZGF0YSB0aGF0IGlzIGV4cG9zZWQgaW4gdGhlIGBjb2x1bW5NZXRhRGF0YWAgZXZlbnQuXG4gICAgICAgKi9cbiAgICAgIChwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdpdmVzIHRoZSBjb2x1bW5zIGJ5IHdoaWNoIGRhdGEgaXMgb3JkZXJlZCwgaWYgYE9SREVSIEJZYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaW4gU1FMIFNlcnZlci5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnb3JkZXInLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gb3JkZXJDb2x1bW5zXG4gICAgICAgKiAgIEFuIGFycmF5IG9mIGNvbHVtbiBudW1iZXJzIGluIHRoZSByZXN1bHQgc2V0IGJ5IHdoaWNoIGRhdGEgaXMgb3JkZXJlZC5cbiAgICAgICAqL1xuICAgICAgKG9yZGVyQ29sdW1uczogbnVtYmVyW10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAncmVxdWVzdENvbXBsZXRlZCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAnY2FuY2VsJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdwYXVzZScsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAncmVzdW1lJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkge1xuICAgIHJldHVybiBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY29sdW1uTWV0YWRhdGEnLCBjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdIHwgeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9KTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdwcmVwYXJlZCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2Vycm9yJywgZXJyOiBFcnJvcik6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncm93JywgY29sdW1uczogYW55KTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lJywgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcnN0PzogYW55W10pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmVJblByb2MnLCByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZVByb2MnLCByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCBwcm9jUmV0dXJuU3RhdHVzVmFsdWU6IG51bWJlciwgcnN0PzogYW55W10pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JldHVyblZhbHVlJywgcGFyYW1ldGVyTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgbWV0YWRhdGE6IE1ldGFkYXRhKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyZXF1ZXN0Q29tcGxldGVkJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY2FuY2VsJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncGF1c2UnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyZXN1bWUnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdvcmRlcicsIG9yZGVyQ29sdW1uczogbnVtYmVyW10pOiBib29sZWFuXG4gIGVtaXQoZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgLi4uYXJnczogYW55W10pIHtcbiAgICByZXR1cm4gc3VwZXIuZW1pdChldmVudCwgLi4uYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNxbFRleHRPclByb2NlZHVyZVxuICAgKiAgIFRoZSBTUUwgc3RhdGVtZW50IHRvIGJlIGV4ZWN1dGVkXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiAgIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHJlcXVlc3QgaGFzIGJlZW4gZnVsbHkgY29tcGxldGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3FsVGV4dE9yUHJvY2VkdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNhbGxiYWNrOiBDb21wbGV0aW9uQ2FsbGJhY2ssIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnNxbFRleHRPclByb2NlZHVyZSA9IHNxbFRleHRPclByb2NlZHVyZTtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBbXTtcbiAgICB0aGlzLnBhcmFtZXRlcnNCeU5hbWUgPSB7fTtcbiAgICB0aGlzLnByZXBhcmluZyA9IGZhbHNlO1xuICAgIHRoaXMuaGFuZGxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVzZXJDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcgPSAob3B0aW9ucyAmJiBvcHRpb25zLnN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nKSB8fCBTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZy5Vc2VDb25uZWN0aW9uU2V0dGluZztcbiAgICB0aGlzLmNyeXB0b01ldGFkYXRhTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5jYWxsYmFjayA9IGZ1bmN0aW9uKGVycjogRXJyb3IgfCB1bmRlZmluZWQgfCBudWxsLCByb3dDb3VudD86IG51bWJlciwgcm93cz86IGFueSkge1xuICAgICAgaWYgKHRoaXMucHJlcGFyaW5nKSB7XG4gICAgICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ3ByZXBhcmVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlckNhbGxiYWNrKGVyciwgcm93Q291bnQsIHJvd3MpO1xuICAgICAgICB0aGlzLmVtaXQoJ3JlcXVlc3RDb21wbGV0ZWQnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcGFyYW1ldGVyIGluIHRoZSBTUUwsXG4gICAqICAgb3IgYSBwYXJhbWV0ZXIgdGhhdCBhIGNhbGxlZCBwcm9jZWR1cmUgZXhwZWN0cy4gVGhlIG5hbWUgc2hvdWxkIG5vdCBzdGFydCB3aXRoIGBAYC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGVcbiAgICogICBPbmUgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogICBUaGUgdmFsdWUgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIGdpdmVuLiBUaGUgSmF2YXNjcmlwdCB0eXBlIG9mIHRoZVxuICAgKiAgIGFyZ3VtZW50IHNob3VsZCBtYXRjaCB0aGF0IGRvY3VtZW50ZWQgZm9yIGRhdGEgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqICAgQWRkaXRpb25hbCB0eXBlIG9wdGlvbnMuIE9wdGlvbmFsLlxuICAgKi9cbiAgLy8gVE9ETzogYHR5cGVgIG11c3QgYmUgYSB2YWxpZCBURFMgdmFsdWUgdHlwZVxuICBhZGRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgY29uc3QgeyBvdXRwdXQgPSBmYWxzZSwgbGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcGFyYW1ldGVyOiBQYXJhbWV0ZXIgPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgIHNjYWxlOiBzY2FsZVxuICAgIH07XG5cbiAgICB0aGlzLnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZVtuYW1lXSA9IHBhcmFtZXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gVGhpcyBzaG91bGQgY29ycmVzcG9uZCB0byBhIHBhcmFtZXRlciBpbiB0aGUgU1FMLFxuICAgKiAgIG9yIGEgcGFyYW1ldGVyIHRoYXQgYSBjYWxsZWQgcHJvY2VkdXJlIGV4cGVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqICAgT25lIG9mIHRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqICAgVGhlIHZhbHVlIHRoYXQgdGhlIHBhcmFtZXRlciBpcyB0byBiZSBnaXZlbi4gVGhlIEphdmFzY3JpcHQgdHlwZSBvZiB0aGVcbiAgICogICBhcmd1bWVudCBzaG91bGQgbWF0Y2ggdGhhdCBkb2N1bWVudGVkIGZvciBkYXRhIHR5cGVzXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqICAgQWRkaXRpb25hbCB0eXBlIG9wdGlvbnMuIE9wdGlvbmFsLlxuICAgKi9cbiAgYWRkT3V0cHV0UGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdHlwZTogRGF0YVR5cGUsIHZhbHVlPzogdW5rbm93biwgb3B0aW9ucz86IFJlYWRvbmx5PFBhcmFtZXRlck9wdGlvbnM+IHwgbnVsbCkge1xuICAgIHRoaXMuYWRkUGFyYW1ldGVyKG5hbWUsIHR5cGUsIHZhbHVlLCB7IC4uLm9wdGlvbnMsIG91dHB1dDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWFrZVBhcmFtc1BhcmFtZXRlcihwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSkge1xuICAgIGxldCBwYXJhbXNQYXJhbWV0ZXIgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGFyYW1ldGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXTtcbiAgICAgIGlmIChwYXJhbXNQYXJhbWV0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnQCcgKyBwYXJhbWV0ZXIubmFtZSArICcgJztcbiAgICAgIHBhcmFtc1BhcmFtZXRlciArPSBwYXJhbWV0ZXIudHlwZS5kZWNsYXJhdGlvbihwYXJhbWV0ZXIpO1xuICAgICAgaWYgKHBhcmFtZXRlci5vdXRwdXQpIHtcbiAgICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICcgT1VUUFVUJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtc1BhcmFtZXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFsaWRhdGVQYXJhbWV0ZXJzKGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMucGFyYW1ldGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gdGhpcy5wYXJhbWV0ZXJzW2ldO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBwYXJhbWV0ZXIudHlwZS52YWxpZGF0ZShwYXJhbWV0ZXIudmFsdWUsIGNvbGxhdGlvbik7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkIGZvciBwYXJhbWV0ZXIgXFwnJyArIHBhcmFtZXRlci5uYW1lICsgJ1xcJy4gJyArIGVycm9yLm1lc3NhZ2UsICdFUEFSQU0nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVtcG9yYXJpbHkgc3VzcGVuZHMgdGhlIGZsb3cgb2YgZGF0YSBmcm9tIHRoZSBkYXRhYmFzZS4gTm8gbW9yZSBgcm93YCBldmVudHMgd2lsbCBiZSBlbWl0dGVkIHVudGlsIFtbcmVzdW1lXSBpcyBjYWxsZWQuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBhbHJlYWR5IGluIGEgcGF1c2VkIHN0YXRlLCBjYWxsaW5nIFtbcGF1c2VdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKiBJZiB0aGlzIHJlcXVlc3QgaXMgbm90IGluIGEgcGF1c2VkIHN0YXRlLCBjYWxsaW5nIFtbcmVzdW1lXV0gaGFzIG5vIGVmZmVjdC5cbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGEgcmVxdWVzdCB3aGlsZSB3YWl0aW5nIGZvciBhIHNlcnZlciByZXNwb25zZS5cbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoaXMgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXRcbiAgICogICBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgY29uc2lkZXJlZCBmYWlsZWQsXG4gICAqICAgb3IgYDBgIGZvciBubyB0aW1lb3V0LiBXaGVuIG5vIHRpbWVvdXQgaXMgc2V0IGZvciB0aGUgcmVxdWVzdCxcbiAgICogICB0aGUgW1tDb25uZWN0aW9uT3B0aW9ucy5yZXF1ZXN0VGltZW91dF1dIG9mIHRoZSBbW0Nvbm5lY3Rpb25dXSBpcyB1c2VkLlxuICAgKi9cbiAgc2V0VGltZW91dCh0aW1lb3V0PzogbnVtYmVyKSB7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFJQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1HLE9BQU8sU0FBU0Msb0JBQVksQ0FBQztFQUNqQztBQUNGO0FBQ0E7RUFDRUMsa0JBQWtCO0VBQ2xCO0FBQ0Y7QUFDQTtFQUNFQyxVQUFVO0VBQ1Y7QUFDRjtBQUNBO0VBQ0VDLGdCQUFnQjtFQUNoQjtBQUNGO0FBQ0E7RUFDRUMsU0FBUztFQUNUO0FBQ0Y7QUFDQTtFQUNFQyxRQUFRO0VBQ1I7QUFDRjtBQUNBO0VBQ0VDLE1BQU07RUFDTjtBQUNGO0FBQ0E7RUFDRUMsWUFBWTtFQUNaO0FBQ0Y7QUFDQTtFQUNFQyxNQUFNO0VBQ047QUFDRjtBQUNBO0VBQ0VDLEtBQUs7RUFDTDtBQUNGO0FBQ0E7RUFDRUMsVUFBVTtFQUNWO0FBQ0Y7QUFDQTtFQUNFQyxPQUFPOztFQUVQO0FBQ0Y7QUFDQTtFQUNFQyxJQUFJO0VBQ0o7QUFDRjtBQUNBO0VBQ0VDLEdBQUc7RUFDSDtBQUNGO0FBQ0E7RUFDRUMsUUFBUTs7RUFFUjtBQUNGO0FBQ0E7RUFD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
|
|
386
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsInNxbFRleHRPclByb2NlZHVyZSIsImNhbGxiYWNrIiwib3B0aW9ucyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQnlOYW1lIiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJwYXVzZWQiLCJlcnJvciIsImNvbm5lY3Rpb24iLCJ0aW1lb3V0IiwidXNlckNhbGxiYWNrIiwic3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJlcnIiLCJyb3dDb3VudCIsInJvd3MiLCJhZGRQYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInZhbHVlIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJwYXJhbWV0ZXIiLCJwdXNoIiwiYWRkT3V0cHV0UGFyYW1ldGVyIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsInBhcmFtc1BhcmFtZXRlciIsImkiLCJsZW4iLCJkZWNsYXJhdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImNvbGxhdGlvbiIsInZhbGlkYXRlIiwiUmVxdWVzdEVycm9yIiwibWVzc2FnZSIsInBhdXNlIiwicmVzdW1lIiwiY2FuY2VsIiwic2V0VGltZW91dCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgdHlwZSBQYXJhbWV0ZXIsIHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4vY29ubmVjdGlvbic7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQvdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vdG9rZW4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudChzKSwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAqXG4gKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICpcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBgcmVxdWVzdENvbXBsZXRlZGAgaXMgZW1pdHRlZC5cbiAqL1xudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQHBhcmFtIGVycm9yXG4gICAqICAgSWYgYW4gZXJyb3Igb2NjdXJlZCwgYW4gZXJyb3Igb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICogICBUaGUgbnVtYmVyIG9mIHJvd3MgZW1pdHRlZCBhcyByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcm93c1xuICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgKiAgIFdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbl1dIGlzIGB0cnVlYC5cbiAgICovXG4gIC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIHR5cGUgdGhlIGByb3dzYCBwYXJhbWV0ZXIgaGVyZS5cbiAgKGVycm9yOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlck9wdGlvbnMge1xuICBvdXRwdXQ/OiBib29sZWFuO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIHN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nPzogU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc7XG59XG5cbi8qKlxuICogYGBganNcbiAqIGNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgndGVkaW91cycpO1xuICogY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KFwic2VsZWN0IDQyLCAnaGVsbG8gd29ybGQnXCIsIChlcnIsIHJvd0NvdW50KSB7XG4gKiAgIC8vIFJlcXVlc3QgY29tcGxldGlvbiBjYWxsYmFjay4uLlxuICogfSk7XG4gKiBjb25uZWN0aW9uLmV4ZWNTcWwocmVxdWVzdCk7XG4gKiBgYGBcbiAqL1xuY2xhc3MgUmVxdWVzdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcGFyYW1ldGVyc0J5TmFtZTogeyBba2V5OiBzdHJpbmddOiBQYXJhbWV0ZXIgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHByZXBhcmluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbmNlbGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcGF1c2VkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdXNlckNhbGxiYWNrOiBDb21wbGV0aW9uQ2FsbGJhY2s7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBoYW5kbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd3M/OiBBcnJheTxhbnk+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcnN0PzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYWxsYmFjazogQ29tcGxldGlvbkNhbGxiYWNrO1xuXG5cbiAgZGVjbGFyZSBzaG91bGRIb25vckFFPzogYm9vbGVhbjtcbiAgZGVjbGFyZSBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZzogU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc7XG4gIGRlY2xhcmUgY3J5cHRvTWV0YWRhdGFMb2FkZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQsIGRlc2NyaWJpbmcgcmVzdWx0IHNldCBjb2x1bW5zLCB3aWxsIGJlIGVtaXR0ZWQgYmVmb3JlIHJvd1xuICAgKiBldmVudHMgYXJlIGVtaXR0ZWQuIFRoaXMgZXZlbnQgbWF5IGJlIGVtaXRlZCBtdWx0aXBsZSB0aW1lcyB3aGVuIG1vcmVcbiAgICogdGhhbiBvbmUgcmVjb3Jkc2V0IGlzIHByb2R1Y2VkIGJ5IHRoZSBzdGF0ZW1lbnQuXG4gICAqXG4gICAqIEFuIGFycmF5IGxpa2Ugb2JqZWN0LCB3aGVyZSB0aGUgY29sdW1ucyBjYW4gYmUgYWNjZXNzZWQgZWl0aGVyIGJ5IGluZGV4XG4gICAqIG9yIG5hbWUuIENvbHVtbnMgd2l0aCBhIG5hbWUgdGhhdCBpcyBhbiBpbnRlZ2VyIGFyZSBub3QgYWNjZXNzaWJsZSBieSBuYW1lLFxuICAgKiBhcyBpdCB3b3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbiBhcnJheSBpbmRleC5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnY29sdW1uTWV0YWRhdGEnLFxuICAgIGxpc3RlbmVyOlxuICAgIChjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdIHwgeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9KSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJlcGFyZWQgYW5kIGNhbiBiZSB1c2VkIGluIHN1YnNlcXVlbnQgY2FsbHMgdG8gZXhlY3V0ZSBhbmQgdW5wcmVwYXJlLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdwcmVwYXJlZCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBlbmNvdW50ZXJlZCBhbiBlcnJvciBhbmQgaGFzIG5vdCBiZWVuIHByZXBhcmVkLlxuICAgKi9cbiAgb24oZXZlbnQ6ICdlcnJvcicsIGxpc3RlbmVyOiAoZXJyOiBFcnJvcikgPT4gdm9pZCk6IHRoaXNcblxuICAvKipcbiAgICogQSByb3cgcmVzdWx0aW5nIGZyb20gZXhlY3V0aW9uIG9mIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdyb3cnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvciBvYmplY3QgKGRlcGVuZHMgb24gW1tDb25uZWN0aW9uT3B0aW9ucy51c2VDb2x1bW5OYW1lc11dKSwgd2hlcmUgdGhlIGNvbHVtbnMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGluZGV4L25hbWUuXG4gICAgICAgKiBFYWNoIGNvbHVtbiBoYXMgdHdvIHByb3BlcnRpZXMsIGBtZXRhZGF0YWAgYW5kIGB2YWx1ZWDvvJpcbiAgICAgICAqXG4gICAgICAgKiAqIGBtZXRhZGF0YWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFkYXRhYCBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiAqIGB2YWx1ZWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgY29sdW1uJ3MgdmFsdWUuIEl0IHdpbGwgYmUgYG51bGxgIGZvciBhIGBOVUxMYC5cbiAgICAgICAqICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlbiB0aGlzIHdpbGwgYmUgYW4gYXJyYXkgb2YgdGhlIHZhbHVlcy5cbiAgICAgICAqL1xuICAgICAgKGNvbHVtbnM6IGFueSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEFsbCByb3dzIGZyb20gYSByZXN1bHQgc2V0IGhhdmUgYmVlbiBwcm92aWRlZCAodGhyb3VnaCBgcm93YCBldmVudHMpLlxuICAgKlxuICAgKiBUaGlzIHRva2VuIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGNvbXBsZXRpb24gb2YgYSBTUUwgc3RhdGVtZW50LlxuICAgKiBBcyBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyBjYW4gYmUgc2VudCB0byB0aGUgc2VydmVyIGluIGEgc2luZ2xlIFNRTCBiYXRjaCwgbXVsdGlwbGUgYGRvbmVgIGNhbiBiZSBnZW5lcmF0ZWQuXG4gICAqIEFuIGBkb25lYCBldmVudCBpcyBlbWl0ZWQgZm9yIGVhY2ggU1FMIHN0YXRlbWVudCBpbiB0aGUgU1FMIGJhdGNoIGV4Y2VwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAqIEZvciBleGVjdXRpb24gb2YgU1FMIHN0YXRlbWVudHMgd2l0aGluIHN0b3JlZCBwcm9jZWR1cmVzLCBgZG9uZVByb2NgIGFuZCBgZG9uZUluUHJvY2AgZXZlbnRzIGFyZSB1c2VkIGluIHBsYWNlIG9mIGBkb25lYC5cbiAgICpcbiAgICogSWYgeW91IGFyZSB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dIHRoZW4gU1FMIHNlcnZlciBtYXkgdHJlYXQgdGhlIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgYXMgYSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgKiBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBtYXkgYmUgZW1pdHRlZCBpbnN0ZWFkLiBZb3UgbXVzdCBoYW5kbGUgYm90aCBldmVudHMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpYWJsZSBpZiBDb25uZWN0aW9uJ3MgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXV0gaXMgYHRydWVgLlxuICAgICAgICovXG4gICAgICAocm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBgcmVxdWVzdC5vbignZG9uZUluUHJvYycsIGZ1bmN0aW9uIChyb3dDb3VudCwgbW9yZSwgcm93cykgeyB9KTtgXG4gICAqXG4gICAqIEluZGljYXRlcyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBTUUwgc3RhdGVtZW50IHdpdGhpbiBhIHN0b3JlZCBwcm9jZWR1cmUuIEFsbCByb3dzIGZyb20gYSBzdGF0ZW1lbnRcbiAgICogaW4gYSBzdG9yZWQgcHJvY2VkdXJlIGhhdmUgYmVlbiBwcm92aWRlZCAodGhyb3VnaCBgcm93YCBldmVudHMpLlxuICAgKlxuICAgKiBUaGlzIGV2ZW50IG1heSBhbHNvIG9jY3VyIHdoZW4gZXhlY3V0aW5nIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgdXNpbmcgW1tleGVjU3FsXV0uXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ2RvbmVJblByb2MnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICAgICAqICAgVGhlIG51bWJlciBvZiByZXN1bHQgcm93cy4gTWF5IGJlIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG1vcmVcbiAgICAgICAqICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVzdWx0cyB0byBjb21lIChwcm9iYWJseSBiZWNhdXNlIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIGJlaW5nIGV4ZWN1dGVkKSwgdGhlbiBgdHJ1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHJzdFxuICAgICAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICAgICAqICAgV2lsbCBvbmx5IGJlIGF2YWlhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBzdG9yZWQgcHJvY2VkdXJlLiBUaGlzIGlzIGFsc28gZ2VuZXJhdGVkIGZvciBzdG9yZWQgcHJvY2VkdXJlc1xuICAgKiBleGVjdXRlZCB0aHJvdWdoIFNRTCBzdGF0ZW1lbnRzLlxcXG4gICAqIFRoaXMgZXZlbnQgbWF5IGFsc28gb2NjdXIgd2hlbiBleGVjdXRpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2FtZSBxdWVyeSB1c2luZyBbW2V4ZWNTcWxdXS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZVByb2MnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICAgICAqICAgVGhlIG51bWJlciBvZiByZXN1bHQgcm93cy4gTWF5IGJlIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG1vcmVcbiAgICAgICAqICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVzdWx0cyB0byBjb21lIChwcm9iYWJseSBiZWNhdXNlIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIGJlaW5nIGV4ZWN1dGVkKSwgdGhlbiBgdHJ1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHJzdFxuICAgICAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICAgICAqICAgV2lsbCBvbmx5IGJlIGF2YWlhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCBwcm9jUmV0dXJuU3RhdHVzVmFsdWU6IG51bWJlciwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIGZvciBhbiBvdXRwdXQgcGFyYW1ldGVyICh0aGF0IHdhcyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aXRoIFtbYWRkT3V0cHV0UGFyYW1ldGVyXV0pLlxuICAgKiBTZWUgYWxzbyBgVXNpbmcgUGFyYW1ldGVyc2AuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JldHVyblZhbHVlJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHBhcmFtZXRlck5hbWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiAoRG9lcyBub3Qgc3RhcnQgd2l0aCAnQCcuKVxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAgICogICBUaGUgcGFyYW1ldGVyJ3Mgb3V0cHV0IHZhbHVlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtZXRhZGF0YVxuICAgICAgICogICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFEYXRhYCBldmVudC5cbiAgICAgICAqL1xuICAgICAgKHBhcmFtZXRlck5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2l2ZXMgdGhlIGNvbHVtbnMgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLCBpZiBgT1JERVIgQllgIGNsYXVzZSBpcyBleGVjdXRlZCBpbiBTUUwgU2VydmVyLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdvcmRlcicsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBvcmRlckNvbHVtbnNcbiAgICAgICAqICAgQW4gYXJyYXkgb2YgY29sdW1uIG51bWJlcnMgaW4gdGhlIHJlc3VsdCBzZXQgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLlxuICAgICAgICovXG4gICAgICAob3JkZXJDb2x1bW5zOiBudW1iZXJbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXF1ZXN0Q29tcGxldGVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdjYW5jZWwnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ3BhdXNlJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXN1bWUnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogc3RyaW5nIHwgc3ltYm9sLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3ByZXBhcmVkJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3InLCBlcnI6IEVycm9yKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyb3cnLCBjb2x1bW5zOiBhbnkpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmUnLCByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZUluUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHByb2NSZXR1cm5TdGF0dXNWYWx1ZTogbnVtYmVyLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmV0dXJuVmFsdWUnLCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JlcXVlc3RDb21wbGV0ZWQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjYW5jZWwnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdwYXVzZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlc3VtZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ29yZGVyJywgb3JkZXJDb2x1bW5zOiBudW1iZXJbXSk6IGJvb2xlYW5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3FsVGV4dE9yUHJvY2VkdXJlXG4gICAqICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWRcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmdWxseSBjb21wbGV0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3FsVGV4dE9yUHJvY2VkdXJlID0gc3FsVGV4dE9yUHJvY2VkdXJlO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IFtdO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5zdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHx8IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLlVzZUNvbm5lY3Rpb25TZXR0aW5nO1xuICAgIHRoaXMuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSB7XG4gICAgICBpZiAodGhpcy5wcmVwYXJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgncHJlcGFyZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyQ2FsbGJhY2soZXJyLCByb3dDb3VudCwgcm93cyk7XG4gICAgICAgIHRoaXMuZW1pdCgncmVxdWVzdENvbXBsZXRlZCcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG5hbWVcbiAgICogICBUaGUgcGFyYW1ldGVyIG5hbWUuIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBwYXJhbWV0ZXIgaW4gdGhlIFNRTCxcbiAgICogICBvciBhIHBhcmFtZXRlciB0aGF0IGEgY2FsbGVkIHByb2NlZHVyZSBleHBlY3RzLiBUaGUgbmFtZSBzaG91bGQgbm90IHN0YXJ0IHdpdGggYEBgLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiAgIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiAgIFRoZSB2YWx1ZSB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgZ2l2ZW4uIFRoZSBKYXZhc2NyaXB0IHR5cGUgb2YgdGhlXG4gICAqICAgYXJndW1lbnQgc2hvdWxkIG1hdGNoIHRoYXQgZG9jdW1lbnRlZCBmb3IgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICAvLyBUT0RPOiBgdHlwZWAgbXVzdCBiZSBhIHZhbGlkIFREUyB2YWx1ZSB0eXBlXG4gIGFkZFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB2YWx1ZT86IHVua25vd24sIG9wdGlvbnM/OiBSZWFkb25seTxQYXJhbWV0ZXJPcHRpb25zPiB8IG51bGwpIHtcbiAgICBjb25zdCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwYXJhbWV0ZXI6IFBhcmFtZXRlciA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlXG4gICAgfTtcblxuICAgIHRoaXMucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgdGhpcy5wYXJhbWV0ZXJzQnlOYW1lW25hbWVdID0gcGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcGFyYW1ldGVyIGluIHRoZSBTUUwsXG4gICAqICAgb3IgYSBwYXJhbWV0ZXIgdGhhdCBhIGNhbGxlZCBwcm9jZWR1cmUgZXhwZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGVcbiAgICogICBPbmUgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogICBUaGUgdmFsdWUgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIGdpdmVuLiBUaGUgSmF2YXNjcmlwdCB0eXBlIG9mIHRoZVxuICAgKiAgIGFyZ3VtZW50IHNob3VsZCBtYXRjaCB0aGF0IGRvY3VtZW50ZWQgZm9yIGRhdGEgdHlwZXNcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICBhZGRPdXRwdXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgdGhpcy5hZGRQYXJhbWV0ZXIobmFtZSwgdHlwZSwgdmFsdWUsIHsgLi4ub3B0aW9ucywgb3V0cHV0OiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUGFyYW1zUGFyYW1ldGVyKHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdKSB7XG4gICAgbGV0IHBhcmFtc1BhcmFtZXRlciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldO1xuICAgICAgaWYgKHBhcmFtc1BhcmFtZXRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnLCAnO1xuICAgICAgfVxuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICdAJyArIHBhcmFtZXRlci5uYW1lICsgJyAnO1xuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9IHBhcmFtZXRlci50eXBlLmRlY2xhcmF0aW9uKHBhcmFtZXRlcik7XG4gICAgICBpZiAocGFyYW1ldGVyLm91dHB1dCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJyBPVVRQVVQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zUGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YWxpZGF0ZVBhcmFtZXRlcnMoY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB0aGlzLnBhcmFtZXRlcnNbaV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtZXRlci52YWx1ZSA9IHBhcmFtZXRlci50eXBlLnZhbGlkYXRlKHBhcmFtZXRlci52YWx1ZSwgY29sbGF0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBhcmFtZXRlciBcXCcnICsgcGFyYW1ldGVyLm5hbWUgKyAnXFwnLiAnICsgZXJyb3IubWVzc2FnZSwgJ0VQQVJBTScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBzdXNwZW5kcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLiBObyBtb3JlIGByb3dgIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWQgdW50aWwgW1tyZXN1bWVdIGlzIGNhbGxlZC5cbiAgICogSWYgdGhpcyByZXF1ZXN0IGlzIGFscmVhZHkgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1twYXVzZV1dIGhhcyBubyBlZmZlY3QuXG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBmbG93IG9mIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1tyZXN1bWVdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcmVzdW1lKCkge1xuICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYSByZXF1ZXN0IHdoaWxlIHdhaXRpbmcgZm9yIGEgc2VydmVyIHJlc3BvbnNlLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dFxuICAgKiAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZCxcbiAgICogICBvciBgMGAgZm9yIG5vIHRpbWVvdXQuIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LFxuICAgKiAgIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIFtbQ29ubmVjdGlvbl1dIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUlBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsT0FBTyxTQUFTQyxvQkFBWSxDQUFDO0VBQ2pDO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFD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
|
package/lib/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","names":["_events","require","_errors","_types","Request","EventEmitter","sqlTextOrProcedure","parameters","parametersByName","preparing","canceled","paused","userCallback","handle","error","connection","timeout","rows","rst","rowCount","callback","shouldHonorAE","statementColumnEncryptionSetting","cryptoMetadataLoaded","on","event","listener","emit","args","constructor","options","undefined","SQLServerStatementColumnEncryptionSetting","UseConnectionSetting","err","addParameter","name","type","value","output","length","precision","scale","parameter","push","addOutputParameter","makeParamsParameter","paramsParameter","i","len","declaration","validateParameters","collation","validate","RequestError","message","pause","resume","cancel","setTimeout","_default","exports","default","module"],"sources":["../src/request.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Parameter, type DataType } from './data-type';\nimport { RequestError } from './errors';\n\nimport Connection from './connection';\nimport { type Metadata } from './metadata-parser';\nimport { SQLServerStatementColumnEncryptionSetting } from './always-encrypted/types';\nimport { type ColumnMetadata } from './token/colmetadata-token-parser';\nimport { Collation } from './collation';\n\n/**\n * The callback is called when the request has completed, either successfully or with an error.\n * If an error occurs during execution of the statement(s), then `err` will describe the error.\n *\n * As only one request at a time may be executed on a connection, another request should not\n * be initiated until this callback is called.\n *\n * This callback is called before `requestCompleted` is emitted.\n */\ntype CompletionCallback =\n /**\n * @param error\n * If an error occured, an error object.\n *\n * @param rowCount\n * The number of rows emitted as result of executing the SQL statement.\n *\n * @param rows\n * Rows as a result of executing the SQL statement.\n * Will only be available if [[ConnectionOptions.rowCollectionOnRequestCompletion]] is `true`.\n */\n // TODO: Figure out how to type the `rows` parameter here.\n (error: Error | null | undefined, rowCount?: number, rows?: any) => void;\n\nexport interface ParameterOptions {\n output?: boolean;\n length?: number;\n precision?: number;\n scale?: number;\n}\n\ninterface RequestOptions {\n statementColumnEncryptionSetting?: SQLServerStatementColumnEncryptionSetting;\n}\n\n/**\n * ```js\n * const { Request } = require('tedious');\n * const request = new Request(\"select 42, 'hello world'\", (err, rowCount) {\n * // Request completion callback...\n * });\n * connection.execSql(request);\n * ```\n */\nclass Request extends EventEmitter {\n /**\n * @private\n */\n sqlTextOrProcedure: string | undefined;\n /**\n * @private\n */\n parameters: Parameter[];\n /**\n * @private\n */\n parametersByName: { [key: string]: Parameter };\n /**\n * @private\n */\n preparing: boolean;\n /**\n * @private\n */\n canceled: boolean;\n /**\n * @private\n */\n paused: boolean;\n /**\n * @private\n */\n userCallback: CompletionCallback;\n /**\n * @private\n */\n handle: number | undefined;\n /**\n * @private\n */\n error: Error | undefined;\n /**\n * @private\n */\n connection: Connection | undefined;\n /**\n * @private\n */\n timeout: number | undefined;\n\n /**\n * @private\n */\n rows?: Array<any>;\n /**\n * @private\n */\n rst?: Array<any>;\n /**\n * @private\n */\n rowCount?: number;\n\n /**\n * @private\n */\n callback: CompletionCallback;\n\n\n shouldHonorAE?: boolean;\n statementColumnEncryptionSetting: SQLServerStatementColumnEncryptionSetting;\n cryptoMetadataLoaded: boolean;\n\n /**\n * This event, describing result set columns, will be emitted before row\n * events are emitted. This event may be emited multiple times when more\n * than one recordset is produced by the statement.\n *\n * An array like object, where the columns can be accessed either by index\n * or name. Columns with a name that is an integer are not accessible by name,\n * as it would be interpreted as an array index.\n */\n on(\n event: 'columnMetadata',\n listener:\n (columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }) => void\n ): this\n\n /**\n * The request has been prepared and can be used in subsequent calls to execute and unprepare.\n */\n on(event: 'prepared', listener: () => void): this\n\n /**\n * The request encountered an error and has not been prepared.\n */\n on(event: 'error', listener: (err: Error) => void): this\n\n /**\n * A row resulting from execution of the SQL statement.\n */\n on(\n event: 'row',\n listener:\n /**\n * An array or object (depends on [[ConnectionOptions.useColumnNames]]), where the columns can be accessed by index/name.\n * Each column has two properties, `metadata` and `value`:\n *\n * * `metadata`\n *\n * The same data that is exposed in the `columnMetadata` event.\n *\n * * `value`\n *\n * The column's value. It will be `null` for a `NULL`.\n * If there are multiple columns with the same name, then this will be an array of the values.\n */\n (columns: any) => void\n ): this\n\n /**\n * All rows from a result set have been provided (through `row` events).\n *\n * This token is used to indicate the completion of a SQL statement.\n * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.\n * An `done` event is emited for each SQL statement in the SQL batch except variable declarations.\n * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.\n *\n * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.\n * When this occurs, the `doneProc` and `doneInProc` events may be emitted instead. You must handle both events to ensure complete coverage.\n */\n on(\n event: 'done',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * `request.on('doneInProc', function (rowCount, more, rows) { });`\n *\n * Indicates the completion status of a SQL statement within a stored procedure. All rows from a statement\n * in a stored procedure have been provided (through `row` events).\n *\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneInProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * Indicates the completion status of a stored procedure. This is also generated for stored procedures\n * executed through SQL statements.\\\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]) => void\n ): this\n\n /**\n * A value for an output parameter (that was added to the request with [[addOutputParameter]]).\n * See also `Using Parameters`.\n */\n on(\n event: 'returnValue',\n listener:\n /**\n * @param parameterName\n * The parameter name. (Does not start with '@'.)\n *\n * @param value\n * The parameter's output value.\n *\n * @param metadata\n * The same data that is exposed in the `columnMetaData` event.\n */\n (parameterName: string, value: unknown, metadata: Metadata) => void\n ): this\n\n /**\n * This event gives the columns by which data is ordered, if `ORDER BY` clause is executed in SQL Server.\n */\n on(\n event: 'order',\n listener:\n /**\n * @param orderColumns\n * An array of column numbers in the result set by which data is ordered.\n */\n (orderColumns: number[]) => void\n ): this\n\n on(event: 'requestCompleted', listener: () => void): this\n\n on(event: 'cancel', listener: () => void): this\n\n on(event: 'pause', listener: () => void): this\n\n on(event: 'resume', listener: () => void): this\n\n on(event: string | symbol, listener: (...args: any[]) => void) {\n return super.on(event, listener);\n }\n\n /**\n * @private\n */\n emit(event: 'columnMetadata', columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }): boolean\n /**\n * @private\n */\n emit(event: 'prepared'): boolean\n /**\n * @private\n */\n emit(event: 'error', err: Error): boolean\n /**\n * @private\n */\n emit(event: 'row', columns: any): boolean\n /**\n * @private\n */\n emit(event: 'done', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneInProc', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneProc', rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'returnValue', parameterName: string, value: unknown, metadata: Metadata): boolean\n /**\n * @private\n */\n emit(event: 'requestCompleted'): boolean\n /**\n * @private\n */\n emit(event: 'cancel'): boolean\n /**\n * @private\n */\n emit(event: 'pause'): boolean\n /**\n * @private\n */\n emit(event: 'resume'): boolean\n /**\n * @private\n */\n emit(event: 'order', orderColumns: number[]): boolean\n emit(event: string | symbol, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n /**\n * @param sqlTextOrProcedure\n * The SQL statement to be executed\n *\n * @param callback\n * The callback to execute once the request has been fully completed.\n */\n constructor(sqlTextOrProcedure: string | undefined, callback: CompletionCallback, options?: RequestOptions) {\n super();\n\n this.sqlTextOrProcedure = sqlTextOrProcedure;\n this.parameters = [];\n this.parametersByName = {};\n this.preparing = false;\n this.handle = undefined;\n this.canceled = false;\n this.paused = false;\n this.error = undefined;\n this.connection = undefined;\n this.timeout = undefined;\n this.userCallback = callback;\n this.statementColumnEncryptionSetting = (options && options.statementColumnEncryptionSetting) || SQLServerStatementColumnEncryptionSetting.UseConnectionSetting;\n this.cryptoMetadataLoaded = false;\n this.callback = function(err: Error | undefined | null, rowCount?: number, rows?: any) {\n if (this.preparing) {\n this.preparing = false;\n if (err) {\n this.emit('error', err);\n } else {\n this.emit('prepared');\n }\n } else {\n this.userCallback(err, rowCount, rows);\n this.emit('requestCompleted');\n }\n };\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects. The name should not start with `@`.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types.\n *\n * @param options\n * Additional type options. Optional.\n */\n // TODO: `type` must be a valid TDS value type\n addParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n const { output = false, length, precision, scale } = options ?? {};\n\n const parameter: Parameter = {\n type: type,\n name: name,\n value: value,\n output: output,\n length: length,\n precision: precision,\n scale: scale\n };\n\n this.parameters.push(parameter);\n this.parametersByName[name] = parameter;\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types\n *\n * @param options\n * Additional type options. Optional.\n */\n addOutputParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n this.addParameter(name, type, value, { ...options, output: true });\n }\n\n /**\n * @private\n */\n makeParamsParameter(parameters: Parameter[]) {\n let paramsParameter = '';\n for (let i = 0, len = parameters.length; i < len; i++) {\n const parameter = parameters[i];\n if (paramsParameter.length > 0) {\n paramsParameter += ', ';\n }\n paramsParameter += '@' + parameter.name + ' ';\n paramsParameter += parameter.type.declaration(parameter);\n if (parameter.output) {\n paramsParameter += ' OUTPUT';\n }\n }\n return paramsParameter;\n }\n\n /**\n * @private\n */\n validateParameters(collation: Collation | undefined) {\n for (let i = 0, len = this.parameters.length; i < len; i++) {\n const parameter = this.parameters[i];\n\n try {\n parameter.value = parameter.type.validate(parameter.value, collation);\n } catch (error: any) {\n throw new RequestError('Validation failed for parameter \\'' + parameter.name + '\\'. ' + error.message, 'EPARAM');\n }\n }\n }\n\n /**\n * Temporarily suspends the flow of data from the database. No more `row` events will be emitted until [[resume] is called.\n * If this request is already in a paused state, calling [[pause]] has no effect.\n */\n pause() {\n if (this.paused) {\n return;\n }\n this.emit('pause');\n this.paused = true;\n }\n\n /**\n * Resumes the flow of data from the database.\n * If this request is not in a paused state, calling [[resume]] has no effect.\n */\n resume() {\n if (!this.paused) {\n return;\n }\n this.paused = false;\n this.emit('resume');\n }\n\n /**\n * Cancels a request while waiting for a server response.\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n\n /**\n * Sets a timeout for this request.\n *\n * @param timeout\n * The number of milliseconds before the request is considered failed,\n * or `0` for no timeout. When no timeout is set for the request,\n * the [[ConnectionOptions.requestTimeout]] of the [[Connection]] is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n}\n\nexport default Request;\nmodule.exports = Request;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,OAAO,SAASC,oBAAY,CAAC;EACjC;AACF;AACA;EACEC,kBAAkB;EAClB;AACF;AACA;EACEC,UAAU;EACV;AACF;AACA;EACEC,gBAAgB;EAChB;AACF;AACA;EACEC,SAAS;EACT;AACF;AACA;EACEC,QAAQ;EACR;AACF;AACA;EACEC,MAAM;EACN;AACF;AACA;EACEC,YAAY;EACZ;AACF;AACA;EACEC,MAAM;EACN;AACF;AACA;EACEC,KAAK;EACL;AACF;AACA;EACEC,UAAU;EACV;AACF;AACA;EACEC,OAAO;;EAEP;AACF;AACA;EACEC,IAAI;EACJ;AACF;AACA;EACEC,GAAG;EACH;AACF;AACA;EACEC,QAAQ;;EAER;AACF;AACA;EACEC,QAAQ;EAGRC,aAAa;EACbC,gCAAgC;EAChCC,oBAAoB;;EAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAoBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;;EAiBE;AACF;AACA;;EAmBEC,EAAEA,CAACC,KAAsB,EAAEC,QAAkC,EAAE;IAC7D,OAAO,KAAK,CAACF,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAClC;;EAEA;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;A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"}
|
|
1
|
+
{"version":3,"file":"request.js","names":["_events","require","_errors","_types","Request","EventEmitter","on","event","listener","emit","args","constructor","sqlTextOrProcedure","callback","options","parameters","parametersByName","preparing","handle","undefined","canceled","paused","error","connection","timeout","userCallback","statementColumnEncryptionSetting","SQLServerStatementColumnEncryptionSetting","UseConnectionSetting","cryptoMetadataLoaded","err","rowCount","rows","addParameter","name","type","value","output","length","precision","scale","parameter","push","addOutputParameter","makeParamsParameter","paramsParameter","i","len","declaration","validateParameters","collation","validate","RequestError","message","pause","resume","cancel","setTimeout","_default","exports","default","module"],"sources":["../src/request.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Parameter, type DataType } from './data-type';\nimport { RequestError } from './errors';\n\nimport Connection from './connection';\nimport { type Metadata } from './metadata-parser';\nimport { SQLServerStatementColumnEncryptionSetting } from './always-encrypted/types';\nimport { type ColumnMetadata } from './token/colmetadata-token-parser';\nimport { Collation } from './collation';\n\n/**\n * The callback is called when the request has completed, either successfully or with an error.\n * If an error occurs during execution of the statement(s), then `err` will describe the error.\n *\n * As only one request at a time may be executed on a connection, another request should not\n * be initiated until this callback is called.\n *\n * This callback is called before `requestCompleted` is emitted.\n */\ntype CompletionCallback =\n /**\n * @param error\n * If an error occured, an error object.\n *\n * @param rowCount\n * The number of rows emitted as result of executing the SQL statement.\n *\n * @param rows\n * Rows as a result of executing the SQL statement.\n * Will only be available if [[ConnectionOptions.rowCollectionOnRequestCompletion]] is `true`.\n */\n // TODO: Figure out how to type the `rows` parameter here.\n (error: Error | null | undefined, rowCount?: number, rows?: any) => void;\n\nexport interface ParameterOptions {\n output?: boolean;\n length?: number;\n precision?: number;\n scale?: number;\n}\n\ninterface RequestOptions {\n statementColumnEncryptionSetting?: SQLServerStatementColumnEncryptionSetting;\n}\n\n/**\n * ```js\n * const { Request } = require('tedious');\n * const request = new Request(\"select 42, 'hello world'\", (err, rowCount) {\n * // Request completion callback...\n * });\n * connection.execSql(request);\n * ```\n */\nclass Request extends EventEmitter {\n /**\n * @private\n */\n declare sqlTextOrProcedure: string | undefined;\n /**\n * @private\n */\n declare parameters: Parameter[];\n /**\n * @private\n */\n declare parametersByName: { [key: string]: Parameter };\n /**\n * @private\n */\n declare preparing: boolean;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare paused: boolean;\n /**\n * @private\n */\n declare userCallback: CompletionCallback;\n /**\n * @private\n */\n declare handle: number | undefined;\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare rows?: Array<any>;\n /**\n * @private\n */\n declare rst?: Array<any>;\n /**\n * @private\n */\n declare rowCount?: number;\n\n /**\n * @private\n */\n declare callback: CompletionCallback;\n\n\n declare shouldHonorAE?: boolean;\n declare statementColumnEncryptionSetting: SQLServerStatementColumnEncryptionSetting;\n declare cryptoMetadataLoaded: boolean;\n\n /**\n * This event, describing result set columns, will be emitted before row\n * events are emitted. This event may be emited multiple times when more\n * than one recordset is produced by the statement.\n *\n * An array like object, where the columns can be accessed either by index\n * or name. Columns with a name that is an integer are not accessible by name,\n * as it would be interpreted as an array index.\n */\n on(\n event: 'columnMetadata',\n listener:\n (columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }) => void\n ): this\n\n /**\n * The request has been prepared and can be used in subsequent calls to execute and unprepare.\n */\n on(event: 'prepared', listener: () => void): this\n\n /**\n * The request encountered an error and has not been prepared.\n */\n on(event: 'error', listener: (err: Error) => void): this\n\n /**\n * A row resulting from execution of the SQL statement.\n */\n on(\n event: 'row',\n listener:\n /**\n * An array or object (depends on [[ConnectionOptions.useColumnNames]]), where the columns can be accessed by index/name.\n * Each column has two properties, `metadata` and `value`:\n *\n * * `metadata`\n *\n * The same data that is exposed in the `columnMetadata` event.\n *\n * * `value`\n *\n * The column's value. It will be `null` for a `NULL`.\n * If there are multiple columns with the same name, then this will be an array of the values.\n */\n (columns: any) => void\n ): this\n\n /**\n * All rows from a result set have been provided (through `row` events).\n *\n * This token is used to indicate the completion of a SQL statement.\n * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.\n * An `done` event is emited for each SQL statement in the SQL batch except variable declarations.\n * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.\n *\n * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.\n * When this occurs, the `doneProc` and `doneInProc` events may be emitted instead. You must handle both events to ensure complete coverage.\n */\n on(\n event: 'done',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * `request.on('doneInProc', function (rowCount, more, rows) { });`\n *\n * Indicates the completion status of a SQL statement within a stored procedure. All rows from a statement\n * in a stored procedure have been provided (through `row` events).\n *\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneInProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * Indicates the completion status of a stored procedure. This is also generated for stored procedures\n * executed through SQL statements.\\\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be avaiable if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]) => void\n ): this\n\n /**\n * A value for an output parameter (that was added to the request with [[addOutputParameter]]).\n * See also `Using Parameters`.\n */\n on(\n event: 'returnValue',\n listener:\n /**\n * @param parameterName\n * The parameter name. (Does not start with '@'.)\n *\n * @param value\n * The parameter's output value.\n *\n * @param metadata\n * The same data that is exposed in the `columnMetaData` event.\n */\n (parameterName: string, value: unknown, metadata: Metadata) => void\n ): this\n\n /**\n * This event gives the columns by which data is ordered, if `ORDER BY` clause is executed in SQL Server.\n */\n on(\n event: 'order',\n listener:\n /**\n * @param orderColumns\n * An array of column numbers in the result set by which data is ordered.\n */\n (orderColumns: number[]) => void\n ): this\n\n on(event: 'requestCompleted', listener: () => void): this\n\n on(event: 'cancel', listener: () => void): this\n\n on(event: 'pause', listener: () => void): this\n\n on(event: 'resume', listener: () => void): this\n\n on(event: string | symbol, listener: (...args: any[]) => void) {\n return super.on(event, listener);\n }\n\n /**\n * @private\n */\n emit(event: 'columnMetadata', columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }): boolean\n /**\n * @private\n */\n emit(event: 'prepared'): boolean\n /**\n * @private\n */\n emit(event: 'error', err: Error): boolean\n /**\n * @private\n */\n emit(event: 'row', columns: any): boolean\n /**\n * @private\n */\n emit(event: 'done', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneInProc', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneProc', rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'returnValue', parameterName: string, value: unknown, metadata: Metadata): boolean\n /**\n * @private\n */\n emit(event: 'requestCompleted'): boolean\n /**\n * @private\n */\n emit(event: 'cancel'): boolean\n /**\n * @private\n */\n emit(event: 'pause'): boolean\n /**\n * @private\n */\n emit(event: 'resume'): boolean\n /**\n * @private\n */\n emit(event: 'order', orderColumns: number[]): boolean\n emit(event: string | symbol, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n /**\n * @param sqlTextOrProcedure\n * The SQL statement to be executed\n *\n * @param callback\n * The callback to execute once the request has been fully completed.\n */\n constructor(sqlTextOrProcedure: string | undefined, callback: CompletionCallback, options?: RequestOptions) {\n super();\n\n this.sqlTextOrProcedure = sqlTextOrProcedure;\n this.parameters = [];\n this.parametersByName = {};\n this.preparing = false;\n this.handle = undefined;\n this.canceled = false;\n this.paused = false;\n this.error = undefined;\n this.connection = undefined;\n this.timeout = undefined;\n this.userCallback = callback;\n this.statementColumnEncryptionSetting = (options && options.statementColumnEncryptionSetting) || SQLServerStatementColumnEncryptionSetting.UseConnectionSetting;\n this.cryptoMetadataLoaded = false;\n this.callback = function(err: Error | undefined | null, rowCount?: number, rows?: any) {\n if (this.preparing) {\n this.preparing = false;\n if (err) {\n this.emit('error', err);\n } else {\n this.emit('prepared');\n }\n } else {\n this.userCallback(err, rowCount, rows);\n this.emit('requestCompleted');\n }\n };\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects. The name should not start with `@`.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types.\n *\n * @param options\n * Additional type options. Optional.\n */\n // TODO: `type` must be a valid TDS value type\n addParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n const { output = false, length, precision, scale } = options ?? {};\n\n const parameter: Parameter = {\n type: type,\n name: name,\n value: value,\n output: output,\n length: length,\n precision: precision,\n scale: scale\n };\n\n this.parameters.push(parameter);\n this.parametersByName[name] = parameter;\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types\n *\n * @param options\n * Additional type options. Optional.\n */\n addOutputParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n this.addParameter(name, type, value, { ...options, output: true });\n }\n\n /**\n * @private\n */\n makeParamsParameter(parameters: Parameter[]) {\n let paramsParameter = '';\n for (let i = 0, len = parameters.length; i < len; i++) {\n const parameter = parameters[i];\n if (paramsParameter.length > 0) {\n paramsParameter += ', ';\n }\n paramsParameter += '@' + parameter.name + ' ';\n paramsParameter += parameter.type.declaration(parameter);\n if (parameter.output) {\n paramsParameter += ' OUTPUT';\n }\n }\n return paramsParameter;\n }\n\n /**\n * @private\n */\n validateParameters(collation: Collation | undefined) {\n for (let i = 0, len = this.parameters.length; i < len; i++) {\n const parameter = this.parameters[i];\n\n try {\n parameter.value = parameter.type.validate(parameter.value, collation);\n } catch (error: any) {\n throw new RequestError('Validation failed for parameter \\'' + parameter.name + '\\'. ' + error.message, 'EPARAM');\n }\n }\n }\n\n /**\n * Temporarily suspends the flow of data from the database. No more `row` events will be emitted until [[resume] is called.\n * If this request is already in a paused state, calling [[pause]] has no effect.\n */\n pause() {\n if (this.paused) {\n return;\n }\n this.emit('pause');\n this.paused = true;\n }\n\n /**\n * Resumes the flow of data from the database.\n * If this request is not in a paused state, calling [[resume]] has no effect.\n */\n resume() {\n if (!this.paused) {\n return;\n }\n this.paused = false;\n this.emit('resume');\n }\n\n /**\n * Cancels a request while waiting for a server response.\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n\n /**\n * Sets a timeout for this request.\n *\n * @param timeout\n * The number of milliseconds before the request is considered failed,\n * or `0` for no timeout. When no timeout is set for the request,\n * the [[ConnectionOptions.requestTimeout]] of the [[Connection]] is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n}\n\nexport default Request;\nmodule.exports = Request;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,OAAO,SAASC,oBAAY,CAAC;EACjC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAQE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAoBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;;EAiBE;AACF;AACA;;EAmBEC,EAAEA,CAACC,KAAsB,EAAEC,QAAkC,EAAE;IAC7D,OAAO,KAAK,CAACF,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAClC;;EAEA;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEEC,IAAIA,CAACF,KAAsB,EAAE,GAAGG,IAAW,EAAE;IAC3C,OAAO,KAAK,CAACD,IAAI,CAACF,KAAK,EAAE,GAAGG,IAAI,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,kBAAsC,EAAEC,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"}
|
|
@@ -21,11 +21,6 @@ const STATUS = {
|
|
|
21
21
|
s2.2.6.5
|
|
22
22
|
*/
|
|
23
23
|
class RpcRequestPayload {
|
|
24
|
-
procedure;
|
|
25
|
-
parameters;
|
|
26
|
-
options;
|
|
27
|
-
txnDescriptor;
|
|
28
|
-
collation;
|
|
29
24
|
constructor(procedure, parameters, txnDescriptor, options, collation) {
|
|
30
25
|
this.procedure = procedure;
|
|
31
26
|
this.parameters = parameters;
|
|
@@ -104,4 +99,4 @@ class RpcRequestPayload {
|
|
|
104
99
|
var _default = RpcRequestPayload;
|
|
105
100
|
exports.default = _default;
|
|
106
101
|
module.exports = RpcRequestPayload;
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FsbEhlYWRlcnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlNUQVRVUyIsIkJZX1JFRl9WQUxVRSIsIkRFRkFVTFRfVkFMVUUiLCJScGNSZXF1ZXN0UGF5bG9hZCIsInByb2NlZHVyZSIsInBhcmFtZXRlcnMiLCJvcHRpb25zIiwidHhuRGVzY3JpcHRvciIsImNvbGxhdGlvbiIsImNvbnN0cnVjdG9yIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJnZW5lcmF0ZURhdGEiLCJidWZmZXIiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwidGRzVmVyc2lvbiIsIm91dHN0YW5kaW5nUmVxdWVzdENvdW50Iiwid3JpdGVUb1RyYWNraW5nQnVmZmVyIiwid3JpdGVVc1ZhcmNoYXIiLCJ3cml0ZVVTaG9ydCIsIm9wdGlvbkZsYWdzIiwid3JpdGVVSW50MTZMRSIsImRhdGEiLCJwYXJhbWV0ZXJzTGVuZ3RoIiwibGVuZ3RoIiwiaSIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInRvU3RyaW5nIiwiaW5kZW50IiwicGFyYW1ldGVyIiwiQnVmZmVyIiwiYnl0ZUxlbmd0aCIsIm5hbWUiLCJ3cml0ZUJWYXJjaGFyIiwic3RhdHVzRmxhZ3MiLCJvdXRwdXQiLCJ3cml0ZVVJbnQ4IiwicGFyYW0iLCJ2YWx1ZSIsInR5cGUiLCJpZCIsInJlc29sdmVMZW5ndGgiLCJwcmVjaXNpb24iLCJyZXNvbHZlUHJlY2lzaW9uIiwic2NhbGUiLCJyZXNvbHZlU2NhbGUiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvcnBjcmVxdWVzdC1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4vdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlcic7XG5pbXBvcnQgeyB3cml0ZVRvVHJhY2tpbmdCdWZmZXIgfSBmcm9tICcuL2FsbC1oZWFkZXJzJztcbmltcG9ydCB7IHR5cGUgUGFyYW1ldGVyLCB0eXBlIFBhcmFtZXRlckRhdGEgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyB0eXBlIEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgQ29sbGF0aW9uIH0gZnJvbSAnLi9jb2xsYXRpb24nO1xuXG4vLyBjb25zdCBPUFRJT04gPSB7XG4vLyAgIFdJVEhfUkVDT01QSUxFOiAweDAxLFxuLy8gICBOT19NRVRBREFUQTogMHgwMixcbi8vICAgUkVVU0VfTUVUQURBVEE6IDB4MDRcbi8vIH07XG5cbmNvbnN0IFNUQVRVUyA9IHtcbiAgQllfUkVGX1ZBTFVFOiAweDAxLFxuICBERUZBVUxUX1ZBTFVFOiAweDAyXG59O1xuXG4vKlxuICBzMi4yLjYuNVxuICovXG5jbGFzcyBScGNSZXF1ZXN0UGF5bG9hZCBpbXBsZW1lbnRzIEl0ZXJhYmxlPEJ1ZmZlcj4ge1xuICBwcm9jZWR1cmU6IHN0cmluZyB8IG51bWJlcjtcbiAgcGFyYW1ldGVyczogUGFyYW1ldGVyW107XG5cbiAgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbiAgdHhuRGVzY3JpcHRvcjogQnVmZmVyO1xuICBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcm9jZWR1cmU6IHN0cmluZyB8IG51bWJlciwgcGFyYW1ldGVyczogUGFyYW1ldGVyW10sIHR4bkRlc2NyaXB0b3I6IEJ1ZmZlciwgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucywgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnByb2NlZHVyZSA9IHByb2NlZHVyZTtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50eG5EZXNjcmlwdG9yID0gdHhuRGVzY3JpcHRvcjtcbiAgICB0aGlzLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRGF0YSgpO1xuICB9XG5cbiAgKiBnZW5lcmF0ZURhdGEoKSB7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoNTAwKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgIGNvbnN0IG91dHN0YW5kaW5nUmVxdWVzdENvdW50ID0gMTtcbiAgICAgIHdyaXRlVG9UcmFja2luZ0J1ZmZlcihidWZmZXIsIHRoaXMudHhuRGVzY3JpcHRvciwgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9jZWR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWZmZXIud3JpdGVVc1ZhcmNoYXIodGhpcy5wcm9jZWR1cmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIud3JpdGVVU2hvcnQoMHhGRkZGKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVTaG9ydCh0aGlzLnByb2NlZHVyZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uRmxhZ3MgPSAwO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQxNkxFKG9wdGlvbkZsYWdzKTtcbiAgICB5aWVsZCBidWZmZXIuZGF0YTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnNMZW5ndGggPSB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyc0xlbmd0aDsgaSsrKSB7XG4gICAgICB5aWVsZCAqIHRoaXMuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHRoaXMucGFyYW1ldGVyc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcoaW5kZW50ID0gJycpIHtcbiAgICByZXR1cm4gaW5kZW50ICsgKCdSUEMgUmVxdWVzdCAtICcgKyB0aGlzLnByb2NlZHVyZSk7XG4gIH1cblxuICAqIGdlbmVyYXRlUGFyYW1ldGVyRGF0YShwYXJhbWV0ZXI6IFBhcmFtZXRlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEgKyAyICsgQnVmZmVyLmJ5dGVMZW5ndGgocGFyYW1ldGVyLm5hbWUsICd1Y3MtMicpICsgMSk7XG5cbiAgICBpZiAocGFyYW1ldGVyLm5hbWUpIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJWYXJjaGFyKCdAJyArIHBhcmFtZXRlci5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLndyaXRlQlZhcmNoYXIoJycpO1xuICAgIH1cblxuICAgIGxldCBzdGF0dXNGbGFncyA9IDA7XG4gICAgaWYgKHBhcmFtZXRlci5vdXRwdXQpIHtcbiAgICAgIHN0YXR1c0ZsYWdzIHw9IFNUQVRVUy5CWV9SRUZfVkFMVUU7XG4gICAgfVxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHN0YXR1c0ZsYWdzKTtcblxuICAgIHlpZWxkIGJ1ZmZlci5kYXRhO1xuXG4gICAgY29uc3QgcGFyYW06IFBhcmFtZXRlckRhdGEgPSB7IHZhbHVlOiBwYXJhbWV0ZXIudmFsdWUgfTtcblxuICAgIGNvbnN0IHR5cGUgPSBwYXJhbWV0ZXIudHlwZTtcblxuICAgIGlmICgodHlwZS5pZCAmIDB4MzApID09PSAweDIwKSB7XG4gICAgICBpZiAocGFyYW1ldGVyLmxlbmd0aCkge1xuICAgICAgICBwYXJhbS5sZW5ndGggPSBwYXJhbWV0ZXIubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmICh0eXBlLnJlc29sdmVMZW5ndGgpIHtcbiAgICAgICAgcGFyYW0ubGVuZ3RoID0gdHlwZS5yZXNvbHZlTGVuZ3RoKHBhcmFtZXRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlci5wcmVjaXNpb24pIHtcbiAgICAgIHBhcmFtLnByZWNpc2lvbiA9IHBhcmFtZXRlci5wcmVjaXNpb247XG4gICAgfSBlbHNlIGlmICh0eXBlLnJlc29sdmVQcmVjaXNpb24pIHtcbiAgICAgIHBhcmFtLnByZWNpc2lvbiA9IHR5cGUucmVzb2x2ZVByZWNpc2lvbihwYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbWV0ZXIuc2NhbGUpIHtcbiAgICAgIHBhcmFtLnNjYWxlID0gcGFyYW1ldGVyLnNjYWxlO1xuICAgIH0gZWxzZSBpZiAodHlwZS5yZXNvbHZlU2NhbGUpIHtcbiAgICAgIHBhcmFtLnNjYWxlID0gdHlwZS5yZXNvbHZlU2NhbGUocGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb2xsYXRpb24pIHtcbiAgICAgIHBhcmFtLmNvbGxhdGlvbiA9IHRoaXMuY29sbGF0aW9uO1xuICAgIH1cblxuICAgIHlpZWxkIHR5cGUuZ2VuZXJhdGVUeXBlSW5mbyhwYXJhbSwgdGhpcy5vcHRpb25zKTtcbiAgICB5aWVsZCB0eXBlLmdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtLCB0aGlzLm9wdGlvbnMpO1xuICAgIHlpZWxkICogdHlwZS5nZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW0sIHRoaXMub3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUnBjUmVxdWVzdFBheWxvYWQ7XG5tb2R1bGUuZXhwb3J0cyA9IFJwY1JlcXVlc3RQYXlsb2FkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQXNELFNBQUFELHVCQUFBRyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBO0FBS3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
|
|
102
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FsbEhlYWRlcnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlNUQVRVUyIsIkJZX1JFRl9WQUxVRSIsIkRFRkFVTFRfVkFMVUUiLCJScGNSZXF1ZXN0UGF5bG9hZCIsImNvbnN0cnVjdG9yIiwicHJvY2VkdXJlIiwicGFyYW1ldGVycyIsInR4bkRlc2NyaXB0b3IiLCJvcHRpb25zIiwiY29sbGF0aW9uIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJnZW5lcmF0ZURhdGEiLCJidWZmZXIiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwidGRzVmVyc2lvbiIsIm91dHN0YW5kaW5nUmVxdWVzdENvdW50Iiwid3JpdGVUb1RyYWNraW5nQnVmZmVyIiwid3JpdGVVc1ZhcmNoYXIiLCJ3cml0ZVVTaG9ydCIsIm9wdGlvbkZsYWdzIiwid3JpdGVVSW50MTZMRSIsImRhdGEiLCJwYXJhbWV0ZXJzTGVuZ3RoIiwibGVuZ3RoIiwiaSIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInRvU3RyaW5nIiwiaW5kZW50IiwicGFyYW1ldGVyIiwiQnVmZmVyIiwiYnl0ZUxlbmd0aCIsIm5hbWUiLCJ3cml0ZUJWYXJjaGFyIiwic3RhdHVzRmxhZ3MiLCJvdXRwdXQiLCJ3cml0ZVVJbnQ4IiwicGFyYW0iLCJ2YWx1ZSIsInR5cGUiLCJpZCIsInJlc29sdmVMZW5ndGgiLCJwcmVjaXNpb24iLCJyZXNvbHZlUHJlY2lzaW9uIiwic2NhbGUiLCJyZXNvbHZlU2NhbGUiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvcnBjcmVxdWVzdC1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4vdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlcic7XG5pbXBvcnQgeyB3cml0ZVRvVHJhY2tpbmdCdWZmZXIgfSBmcm9tICcuL2FsbC1oZWFkZXJzJztcbmltcG9ydCB7IHR5cGUgUGFyYW1ldGVyLCB0eXBlIFBhcmFtZXRlckRhdGEgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyB0eXBlIEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgQ29sbGF0aW9uIH0gZnJvbSAnLi9jb2xsYXRpb24nO1xuXG4vLyBjb25zdCBPUFRJT04gPSB7XG4vLyAgIFdJVEhfUkVDT01QSUxFOiAweDAxLFxuLy8gICBOT19NRVRBREFUQTogMHgwMixcbi8vICAgUkVVU0VfTUVUQURBVEE6IDB4MDRcbi8vIH07XG5cbmNvbnN0IFNUQVRVUyA9IHtcbiAgQllfUkVGX1ZBTFVFOiAweDAxLFxuICBERUZBVUxUX1ZBTFVFOiAweDAyXG59O1xuXG4vKlxuICBzMi4yLjYuNVxuICovXG5jbGFzcyBScGNSZXF1ZXN0UGF5bG9hZCBpbXBsZW1lbnRzIEl0ZXJhYmxlPEJ1ZmZlcj4ge1xuICBkZWNsYXJlIHByb2NlZHVyZTogc3RyaW5nIHwgbnVtYmVyO1xuICBkZWNsYXJlIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xuXG4gIGRlY2xhcmUgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbiAgZGVjbGFyZSB0eG5EZXNjcmlwdG9yOiBCdWZmZXI7XG4gIGRlY2xhcmUgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvY2VkdXJlOiBzdHJpbmcgfCBudW1iZXIsIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdLCB0eG5EZXNjcmlwdG9yOiBCdWZmZXIsIG9wdGlvbnM6IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMsIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5wcm9jZWR1cmUgPSBwcm9jZWR1cmU7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudHhuRGVzY3JpcHRvciA9IHR4bkRlc2NyaXB0b3I7XG4gICAgdGhpcy5jb2xsYXRpb24gPSBjb2xsYXRpb247XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZURhdGEoKTtcbiAgfVxuXG4gICogZ2VuZXJhdGVEYXRhKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDUwMCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uID49ICc3XzInKSB7XG4gICAgICBjb25zdCBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCA9IDE7XG4gICAgICB3cml0ZVRvVHJhY2tpbmdCdWZmZXIoYnVmZmVyLCB0aGlzLnR4bkRlc2NyaXB0b3IsIG91dHN0YW5kaW5nUmVxdWVzdENvdW50KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucHJvY2VkdXJlID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmZmVyLndyaXRlVXNWYXJjaGFyKHRoaXMucHJvY2VkdXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLndyaXRlVVNob3J0KDB4RkZGRik7XG4gICAgICBidWZmZXIud3JpdGVVU2hvcnQodGhpcy5wcm9jZWR1cmUpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbkZsYWdzID0gMDtcbiAgICBidWZmZXIud3JpdGVVSW50MTZMRShvcHRpb25GbGFncyk7XG4gICAgeWllbGQgYnVmZmVyLmRhdGE7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzTGVuZ3RoID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlcnNMZW5ndGg7IGkrKykge1xuICAgICAgeWllbGQgKiB0aGlzLmdlbmVyYXRlUGFyYW1ldGVyRGF0YSh0aGlzLnBhcmFtZXRlcnNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKGluZGVudCA9ICcnKSB7XG4gICAgcmV0dXJuIGluZGVudCArICgnUlBDIFJlcXVlc3QgLSAnICsgdGhpcy5wcm9jZWR1cmUpO1xuICB9XG5cbiAgKiBnZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyOiBQYXJhbWV0ZXIpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcigxICsgMiArIEJ1ZmZlci5ieXRlTGVuZ3RoKHBhcmFtZXRlci5uYW1lLCAndWNzLTInKSArIDEpO1xuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lKSB7XG4gICAgICBidWZmZXIud3JpdGVCVmFyY2hhcignQCcgKyBwYXJhbWV0ZXIubmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJWYXJjaGFyKCcnKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhdHVzRmxhZ3MgPSAwO1xuICAgIGlmIChwYXJhbWV0ZXIub3V0cHV0KSB7XG4gICAgICBzdGF0dXNGbGFncyB8PSBTVEFUVVMuQllfUkVGX1ZBTFVFO1xuICAgIH1cbiAgICBidWZmZXIud3JpdGVVSW50OChzdGF0dXNGbGFncyk7XG5cbiAgICB5aWVsZCBidWZmZXIuZGF0YTtcblxuICAgIGNvbnN0IHBhcmFtOiBQYXJhbWV0ZXJEYXRhID0geyB2YWx1ZTogcGFyYW1ldGVyLnZhbHVlIH07XG5cbiAgICBjb25zdCB0eXBlID0gcGFyYW1ldGVyLnR5cGU7XG5cbiAgICBpZiAoKHR5cGUuaWQgJiAweDMwKSA9PT0gMHgyMCkge1xuICAgICAgaWYgKHBhcmFtZXRlci5sZW5ndGgpIHtcbiAgICAgICAgcGFyYW0ubGVuZ3RoID0gcGFyYW1ldGVyLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZS5yZXNvbHZlTGVuZ3RoKSB7XG4gICAgICAgIHBhcmFtLmxlbmd0aCA9IHR5cGUucmVzb2x2ZUxlbmd0aChwYXJhbWV0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uKSB7XG4gICAgICBwYXJhbS5wcmVjaXNpb24gPSBwYXJhbWV0ZXIucHJlY2lzaW9uO1xuICAgIH0gZWxzZSBpZiAodHlwZS5yZXNvbHZlUHJlY2lzaW9uKSB7XG4gICAgICBwYXJhbS5wcmVjaXNpb24gPSB0eXBlLnJlc29sdmVQcmVjaXNpb24ocGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1ldGVyLnNjYWxlKSB7XG4gICAgICBwYXJhbS5zY2FsZSA9IHBhcmFtZXRlci5zY2FsZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUucmVzb2x2ZVNjYWxlKSB7XG4gICAgICBwYXJhbS5zY2FsZSA9IHR5cGUucmVzb2x2ZVNjYWxlKHBhcmFtZXRlcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29sbGF0aW9uKSB7XG4gICAgICBwYXJhbS5jb2xsYXRpb24gPSB0aGlzLmNvbGxhdGlvbjtcbiAgICB9XG5cbiAgICB5aWVsZCB0eXBlLmdlbmVyYXRlVHlwZUluZm8ocGFyYW0sIHRoaXMub3B0aW9ucyk7XG4gICAgeWllbGQgdHlwZS5nZW5lcmF0ZVBhcmFtZXRlckxlbmd0aChwYXJhbSwgdGhpcy5vcHRpb25zKTtcbiAgICB5aWVsZCAqIHR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtLCB0aGlzLm9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJwY1JlcXVlc3RQYXlsb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBScGNSZXF1ZXN0UGF5bG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUFzRCxTQUFBRCx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9B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
|