tedious 16.5.0 → 16.6.1
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/lib/connection.js +4 -4
- package/lib/connection.js.map +1 -1
- package/lib/data-types/date.js +2 -2
- package/lib/data-types/date.js.map +1 -1
- package/lib/message-io.js +2 -2
- package/lib/message-io.js.map +1 -1
- package/lib/metadata-parser.js +361 -241
- package/lib/metadata-parser.js.map +1 -1
- package/lib/request.js +3 -3
- package/lib/request.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/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 +292 -324
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/token.js +1 -1
- package/lib/token/token.js.map +1 -1
- package/lib/value-parser.js +655 -438
- package/lib/value-parser.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-parser.js","names":["_collation","require","_dataType","_sprintfJs","readCollation","parser","callback","readBuffer","collationData","Collation","fromBuffer","readSchema","readUInt8","schemaPresent","readBVarChar","dbname","owningSchema","readUsVarChar","xmlSchemaCollection","undefined","readUDTInfo","readUInt16LE","maxByteSize","typeName","assemblyName","metadataParse","options","tdsVersion","readUInt32LE","call","userType","flags","typeNumber","type","TYPE","Error","sprintf","name","collation","precision","scale","dataLength","schema","udtInfo","_default","exports","default","module"],"sources":["../src/metadata-parser.ts"],"sourcesContent":["import { Collation } from './collation';\nimport Parser, { type ParserOptions } from './token/stream-parser';\nimport { TYPE, type DataType } from './data-type';\nimport { type CryptoMetadata } from './always-encrypted/types';\n\nimport { sprintf } from 'sprintf-js';\n\ninterface XmlSchema {\n dbname: string;\n owningSchema: string;\n xmlSchemaCollection: string;\n}\n\ninterface UdtInfo {\n maxByteSize: number;\n dbname: string;\n owningSchema: string;\n typeName: string;\n assemblyName: string;\n}\n\nexport type BaseMetadata = {\n userType: number;\n\n flags: number;\n /**\n * The column's type, such as VarChar, Int or Binary.\n */\n type: DataType;\n\n collation: Collation | undefined;\n /**\n * The precision. Only applicable to numeric and decimal.\n */\n precision: number | undefined;\n\n /**\n * The scale. Only applicable to numeric, decimal, time, datetime2 and datetimeoffset.\n */\n scale: number | undefined;\n\n /**\n * The length, for char, varchar, nvarchar and varbinary.\n */\n dataLength: number | undefined;\n\n schema: XmlSchema | undefined;\n\n udtInfo: UdtInfo | undefined;\n}\n\nexport type Metadata = {\n cryptoMetadata?: CryptoMetadata;\n} & BaseMetadata;\n\n\nfunction readCollation(parser: Parser, callback: (collation: Collation) => void) {\n // s2.2.5.1.2\n parser.readBuffer(5, (collationData) => {\n callback(Collation.fromBuffer(collationData));\n });\n}\n\nfunction readSchema(parser: Parser, callback: (schema: XmlSchema | undefined) => void) {\n // s2.2.5.5.3\n parser.readUInt8((schemaPresent) => {\n if (schemaPresent === 0x01) {\n parser.readBVarChar((dbname) => {\n parser.readBVarChar((owningSchema) => {\n parser.readUsVarChar((xmlSchemaCollection) => {\n callback({\n dbname: dbname,\n owningSchema: owningSchema,\n xmlSchemaCollection: xmlSchemaCollection\n });\n });\n });\n });\n } else {\n callback(undefined);\n }\n });\n}\n\nfunction readUDTInfo(parser: Parser, callback: (udtInfo: UdtInfo | undefined) => void) {\n parser.readUInt16LE((maxByteSize) => {\n parser.readBVarChar((dbname) => {\n parser.readBVarChar((owningSchema) => {\n parser.readBVarChar((typeName) => {\n parser.readUsVarChar((assemblyName) => {\n callback({\n maxByteSize: maxByteSize,\n dbname: dbname,\n owningSchema: owningSchema,\n typeName: typeName,\n assemblyName: assemblyName\n });\n });\n });\n });\n });\n });\n}\n\nfunction metadataParse(parser: Parser, options: ParserOptions, callback: (metadata: Metadata) => void) {\n (options.tdsVersion < '7_2' ? parser.readUInt16LE : parser.readUInt32LE).call(parser, (userType) => {\n parser.readUInt16LE((flags) => {\n parser.readUInt8((typeNumber) => {\n const type: DataType = TYPE[typeNumber];\n\n if (!type) {\n throw new Error(sprintf('Unrecognised data type 0x%02X', typeNumber));\n }\n\n switch (type.name) {\n case 'Null':\n case 'TinyInt':\n case 'SmallInt':\n case 'Int':\n case 'BigInt':\n case 'Real':\n case 'Float':\n case 'SmallMoney':\n case 'Money':\n case 'Bit':\n case 'SmallDateTime':\n case 'DateTime':\n case 'Date':\n return callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n });\n\n case 'IntN':\n case 'FloatN':\n case 'MoneyN':\n case 'BitN':\n case 'UniqueIdentifier':\n case 'DateTimeN':\n return parser.readUInt8((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Variant':\n return parser.readUInt32LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'VarChar':\n case 'Char':\n case 'NVarChar':\n case 'NChar':\n return parser.readUInt16LE((dataLength) => {\n readCollation(parser, (collation) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n\n case 'Text':\n case 'NText':\n return parser.readUInt32LE((dataLength) => {\n readCollation(parser, (collation) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n\n case 'VarBinary':\n case 'Binary':\n return parser.readUInt16LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Image':\n return parser.readUInt32LE((dataLength) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'Xml':\n return readSchema(parser, (schema) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: schema,\n udtInfo: undefined\n });\n });\n\n case 'Time':\n case 'DateTime2':\n case 'DateTimeOffset':\n return parser.readUInt8((scale) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: scale,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n });\n });\n\n case 'NumericN':\n case 'DecimalN':\n return parser.readUInt8((dataLength) => {\n parser.readUInt8((precision) => {\n parser.readUInt8((scale) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: precision,\n scale: scale,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n });\n });\n });\n });\n\n case 'UDT':\n return readUDTInfo(parser, (udtInfo) => {\n callback({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: udtInfo\n });\n });\n\n default:\n throw new Error(sprintf('Unrecognised type %s', type.name));\n }\n });\n });\n });\n}\n\nexport default metadataParse;\nexport { readCollation };\n\nmodule.exports = metadataParse;\nmodule.exports.readCollation = readCollation;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadata-parser.js","names":["_collation","require","_dataType","_sprintfJs","_helpers","readCollation","buf","offset","length","NotEnoughDataError","collation","Collation","fromBuffer","slice","Result","readSchema","schemaPresent","value","readUInt8","undefined","dbname","readBVarChar","owningSchema","xmlSchemaCollection","readUsVarChar","readUDTInfo","maxByteSize","readUInt16LE","typeName","assemblyName","readMetadata","options","userType","tdsVersion","readUInt32LE","flags","typeNumber","type","TYPE","Error","sprintf","name","precision","scale","dataLength","schema","udtInfo","metadataParse","parser","callback","result","buffer","position","err","waitForChunk","_default","exports","default","module"],"sources":["../src/metadata-parser.ts"],"sourcesContent":["import { Collation } from './collation';\nimport Parser, { type ParserOptions } from './token/stream-parser';\nimport { TYPE, type DataType } from './data-type';\nimport { type CryptoMetadata } from './always-encrypted/types';\n\nimport { sprintf } from 'sprintf-js';\n\nimport { Result, NotEnoughDataError, readUInt8, readBVarChar, readUsVarChar, readUInt16LE, readUInt32LE } from './token/helpers';\n\ninterface XmlSchema {\n dbname: string;\n owningSchema: string;\n xmlSchemaCollection: string;\n}\n\ninterface UdtInfo {\n maxByteSize: number;\n dbname: string;\n owningSchema: string;\n typeName: string;\n assemblyName: string;\n}\n\nexport type BaseMetadata = {\n userType: number;\n\n flags: number;\n /**\n * The column's type, such as VarChar, Int or Binary.\n */\n type: DataType;\n\n collation: Collation | undefined;\n /**\n * The precision. Only applicable to numeric and decimal.\n */\n precision: number | undefined;\n\n /**\n * The scale. Only applicable to numeric, decimal, time, datetime2 and datetimeoffset.\n */\n scale: number | undefined;\n\n /**\n * The length, for char, varchar, nvarchar and varbinary.\n */\n dataLength: number | undefined;\n\n schema: XmlSchema | undefined;\n\n udtInfo: UdtInfo | undefined;\n}\n\nexport type Metadata = {\n cryptoMetadata?: CryptoMetadata;\n} & BaseMetadata;\n\nfunction readCollation(buf: Buffer, offset: number): Result<Collation> {\n offset = +offset;\n\n if (buf.length < offset + 5) {\n throw new NotEnoughDataError(offset + 5);\n }\n\n const collation = Collation.fromBuffer(buf.slice(offset, offset + 5));\n return new Result(collation, offset + 5);\n}\n\nfunction readSchema(buf: Buffer, offset: number): Result<XmlSchema | undefined> {\n offset = +offset;\n\n let schemaPresent;\n ({ offset, value: schemaPresent } = readUInt8(buf, offset));\n\n if (schemaPresent !== 0x01) {\n return new Result(undefined, offset);\n }\n\n let dbname;\n ({ offset, value: dbname } = readBVarChar(buf, offset));\n\n let owningSchema;\n ({ offset, value: owningSchema } = readBVarChar(buf, offset));\n\n let xmlSchemaCollection;\n ({ offset, value: xmlSchemaCollection } = readUsVarChar(buf, offset));\n\n return new Result({ dbname, owningSchema, xmlSchemaCollection }, offset);\n}\n\nfunction readUDTInfo(buf: Buffer, offset: number): Result<UdtInfo> {\n let maxByteSize;\n ({ offset, value: maxByteSize } = readUInt16LE(buf, offset));\n\n let dbname;\n ({ offset, value: dbname } = readBVarChar(buf, offset));\n\n let owningSchema;\n ({ offset, value: owningSchema } = readBVarChar(buf, offset));\n\n let typeName;\n ({ offset, value: typeName } = readBVarChar(buf, offset));\n\n let assemblyName;\n ({ offset, value: assemblyName } = readUsVarChar(buf, offset));\n\n return new Result({\n maxByteSize: maxByteSize,\n dbname: dbname,\n owningSchema: owningSchema,\n typeName: typeName,\n assemblyName: assemblyName\n }, offset);\n}\n\nfunction readMetadata(buf: Buffer, offset: number, options: ParserOptions): Result<Metadata> {\n let userType;\n ({ offset, value: userType } = (options.tdsVersion < '7_2' ? readUInt16LE : readUInt32LE)(buf, offset));\n\n let flags;\n ({ offset, value: flags } = readUInt16LE(buf, offset));\n\n let typeNumber;\n ({ offset, value: typeNumber } = readUInt8(buf, offset));\n\n const type: DataType = TYPE[typeNumber];\n if (!type) {\n throw new Error(sprintf('Unrecognised data type 0x%02X', typeNumber));\n }\n\n switch (type.name) {\n case 'Null':\n case 'TinyInt':\n case 'SmallInt':\n case 'Int':\n case 'BigInt':\n case 'Real':\n case 'Float':\n case 'SmallMoney':\n case 'Money':\n case 'Bit':\n case 'SmallDateTime':\n case 'DateTime':\n case 'Date':\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n\n case 'IntN':\n case 'FloatN':\n case 'MoneyN':\n case 'BitN':\n case 'UniqueIdentifier':\n case 'DateTimeN': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt8(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Variant': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt32LE(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'VarChar':\n case 'Char':\n case 'NVarChar':\n case 'NChar': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt16LE(buf, offset));\n\n let collation;\n ({ offset, value: collation } = readCollation(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Text':\n case 'NText': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt32LE(buf, offset));\n\n let collation;\n ({ offset, value: collation } = readCollation(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: collation,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'VarBinary':\n case 'Binary': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt16LE(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Image': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt32LE(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Xml': {\n let schema;\n ({ offset, value: schema } = readSchema(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: schema,\n udtInfo: undefined\n }, offset);\n }\n\n case 'Time':\n case 'DateTime2':\n case 'DateTimeOffset': {\n let scale;\n ({ offset, value: scale } = readUInt8(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: scale,\n dataLength: undefined,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'NumericN':\n case 'DecimalN': {\n let dataLength;\n ({ offset, value: dataLength } = readUInt8(buf, offset));\n\n let precision;\n ({ offset, value: precision } = readUInt8(buf, offset));\n\n let scale;\n ({ offset, value: scale } = readUInt8(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: precision,\n scale: scale,\n dataLength: dataLength,\n schema: undefined,\n udtInfo: undefined\n }, offset);\n }\n\n case 'UDT': {\n let udtInfo;\n ({ offset, value: udtInfo } = readUDTInfo(buf, offset));\n\n return new Result({\n userType: userType,\n flags: flags,\n type: type,\n collation: undefined,\n precision: undefined,\n scale: undefined,\n dataLength: undefined,\n schema: undefined,\n udtInfo: udtInfo\n }, offset);\n }\n\n default:\n throw new Error(sprintf('Unrecognised type %s', type.name));\n }\n}\n\nfunction metadataParse(parser: Parser, options: ParserOptions, callback: (metadata: Metadata) => void) {\n (async () => {\n while (true) {\n let result;\n try {\n result = readMetadata(parser.buffer, parser.position, options);\n } catch (err: any) {\n if (err instanceof NotEnoughDataError) {\n await parser.waitForChunk();\n continue;\n }\n\n throw err;\n }\n\n parser.position = result.offset;\n return callback(result.value);\n }\n })();\n}\n\nexport default metadataParse;\nexport { readCollation, readMetadata };\n\nmodule.exports = metadataParse;\nmodule.exports.readCollation = readCollation;\nmodule.exports.readMetadata = readMetadata;\n"],"mappings":"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"}
|
package/lib/request.js
CHANGED
|
@@ -89,7 +89,7 @@ class Request extends _events.EventEmitter {
|
|
|
89
89
|
|
|
90
90
|
/**
|
|
91
91
|
* This event, describing result set columns, will be emitted before row
|
|
92
|
-
* events are emitted. This event may be
|
|
92
|
+
* events are emitted. This event may be emitted multiple times when more
|
|
93
93
|
* than one recordset is produced by the statement.
|
|
94
94
|
*
|
|
95
95
|
* An array like object, where the columns can be accessed either by index
|
|
@@ -114,7 +114,7 @@ class Request extends _events.EventEmitter {
|
|
|
114
114
|
*
|
|
115
115
|
* This token is used to indicate the completion of a SQL statement.
|
|
116
116
|
* As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.
|
|
117
|
-
* An `done` event is
|
|
117
|
+
* An `done` event is emitted for each SQL statement in the SQL batch except variable declarations.
|
|
118
118
|
* For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.
|
|
119
119
|
*
|
|
120
120
|
* If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.
|
|
@@ -383,4 +383,4 @@ class Request extends _events.EventEmitter {
|
|
|
383
383
|
var _default = Request;
|
|
384
384
|
exports.default = _default;
|
|
385
385
|
module.exports = Request;
|
|
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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
|
|
386
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsInNxbFRleHRPclByb2NlZHVyZSIsImNhbGxiYWNrIiwib3B0aW9ucyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQnlOYW1lIiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJwYXVzZWQiLCJlcnJvciIsImNvbm5lY3Rpb24iLCJ0aW1lb3V0IiwidXNlckNhbGxiYWNrIiwic3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJlcnIiLCJyb3dDb3VudCIsInJvd3MiLCJhZGRQYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInZhbHVlIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJwYXJhbWV0ZXIiLCJwdXNoIiwiYWRkT3V0cHV0UGFyYW1ldGVyIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsInBhcmFtc1BhcmFtZXRlciIsImkiLCJsZW4iLCJkZWNsYXJhdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImNvbGxhdGlvbiIsInZhbGlkYXRlIiwiUmVxdWVzdEVycm9yIiwibWVzc2FnZSIsInBhdXNlIiwicmVzdW1lIiwiY2FuY2VsIiwic2V0VGltZW91dCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgdHlwZSBQYXJhbWV0ZXIsIHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4vY29ubmVjdGlvbic7XG5pbXBvcnQgeyB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgU1FMU2VydmVyU3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQvdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vdG9rZW4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudChzKSwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAqXG4gKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICpcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBgcmVxdWVzdENvbXBsZXRlZGAgaXMgZW1pdHRlZC5cbiAqL1xudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQHBhcmFtIGVycm9yXG4gICAqICAgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIGVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50XG4gICAqICAgVGhlIG51bWJlciBvZiByb3dzIGVtaXR0ZWQgYXMgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NcbiAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25dXSBpcyBgdHJ1ZWAuXG4gICAqL1xuICAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byB0eXBlIHRoZSBgcm93c2AgcGFyYW1ldGVyIGhlcmUuXG4gIChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCByb3dDb3VudD86IG51bWJlciwgcm93cz86IGFueSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZz86IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xufVxuXG4vKipcbiAqIGBgYGpzXG4gKiBjb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJ3RlZGlvdXMnKTtcbiAqIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChcInNlbGVjdCA0MiwgJ2hlbGxvIHdvcmxkJ1wiLCAoZXJyLCByb3dDb3VudCkge1xuICogICAvLyBSZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suLi5cbiAqIH0pO1xuICogY29ubmVjdGlvbi5leGVjU3FsKHJlcXVlc3QpO1xuICogYGBgXG4gKi9cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgc3FsVGV4dE9yUHJvY2VkdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhcmFtZXRlcnNCeU5hbWU6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldGVyIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwcmVwYXJpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhdXNlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHVzZXJDYWxsYmFjazogQ29tcGxldGlvbkNhbGxiYWNrO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgaGFuZGxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzPzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdD86IEFycmF5PGFueT47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaztcblxuXG4gIGRlY2xhcmUgc2hvdWxkSG9ub3JBRT86IGJvb2xlYW47XG4gIGRlY2xhcmUgc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc6IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xuICBkZWNsYXJlIGNyeXB0b01ldGFkYXRhTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50LCBkZXNjcmliaW5nIHJlc3VsdCBzZXQgY29sdW1ucywgd2lsbCBiZSBlbWl0dGVkIGJlZm9yZSByb3dcbiAgICogZXZlbnRzIGFyZSBlbWl0dGVkLiBUaGlzIGV2ZW50IG1heSBiZSBlbWl0dGVkIG11bHRpcGxlIHRpbWVzIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSByZWNvcmRzZXQgaXMgcHJvZHVjZWQgYnkgdGhlIHN0YXRlbWVudC5cbiAgICpcbiAgICogQW4gYXJyYXkgbGlrZSBvYmplY3QsIHdoZXJlIHRoZSBjb2x1bW5zIGNhbiBiZSBhY2Nlc3NlZCBlaXRoZXIgYnkgaW5kZXhcbiAgICogb3IgbmFtZS4gQ29sdW1ucyB3aXRoIGEgbmFtZSB0aGF0IGlzIGFuIGludGVnZXIgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IG5hbWUsXG4gICAqIGFzIGl0IHdvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIGFycmF5IGluZGV4LlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsXG4gICAgbGlzdGVuZXI6XG4gICAgKGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBoYXMgYmVlbiBwcmVwYXJlZCBhbmQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBjYWxscyB0byBleGVjdXRlIGFuZCB1bnByZXBhcmUuXG4gICAqL1xuICBvbihldmVudDogJ3ByZXBhcmVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGVuY291bnRlcmVkIGFuIGVycm9yIGFuZCBoYXMgbm90IGJlZW4gcHJlcGFyZWQuXG4gICAqL1xuICBvbihldmVudDogJ2Vycm9yJywgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHJvdyByZXN1bHRpbmcgZnJvbSBleGVjdXRpb24gb2YgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JvdycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEFuIGFycmF5IG9yIG9iamVjdCAoZGVwZW5kcyBvbiBbW0Nvbm5lY3Rpb25PcHRpb25zLnVzZUNvbHVtbk5hbWVzXV0pLCB3aGVyZSB0aGUgY29sdW1ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5kZXgvbmFtZS5cbiAgICAgICAqIEVhY2ggY29sdW1uIGhhcyB0d28gcHJvcGVydGllcywgYG1ldGFkYXRhYCBhbmQgYHZhbHVlYO+8mlxuICAgICAgICpcbiAgICAgICAqICogYG1ldGFkYXRhYFxuICAgICAgICpcbiAgICAgICAqICAgIFRoZSBzYW1lIGRhdGEgdGhhdCBpcyBleHBvc2VkIGluIHRoZSBgY29sdW1uTWV0YWRhdGFgIGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqICogYHZhbHVlYFxuICAgICAgICpcbiAgICAgICAqICAgIFRoZSBjb2x1bW4ncyB2YWx1ZS4gSXQgd2lsbCBiZSBgbnVsbGAgZm9yIGEgYE5VTExgLlxuICAgICAgICogICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbHVtbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGVuIHRoaXMgd2lsbCBiZSBhbiBhcnJheSBvZiB0aGUgdmFsdWVzLlxuICAgICAgICovXG4gICAgICAoY29sdW1uczogYW55KSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogQWxsIHJvd3MgZnJvbSBhIHJlc3VsdCBzZXQgaGF2ZSBiZWVuIHByb3ZpZGVkICh0aHJvdWdoIGByb3dgIGV2ZW50cykuXG4gICAqXG4gICAqIFRoaXMgdG9rZW4gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY29tcGxldGlvbiBvZiBhIFNRTCBzdGF0ZW1lbnQuXG4gICAqIEFzIG11bHRpcGxlIFNRTCBzdGF0ZW1lbnRzIGNhbiBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgaW4gYSBzaW5nbGUgU1FMIGJhdGNoLCBtdWx0aXBsZSBgZG9uZWAgY2FuIGJlIGdlbmVyYXRlZC5cbiAgICogQW4gYGRvbmVgIGV2ZW50IGlzIGVtaXR0ZWQgZm9yIGVhY2ggU1FMIHN0YXRlbWVudCBpbiB0aGUgU1FMIGJhdGNoIGV4Y2VwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAqIEZvciBleGVjdXRpb24gb2YgU1FMIHN0YXRlbWVudHMgd2l0aGluIHN0b3JlZCBwcm9jZWR1cmVzLCBgZG9uZVByb2NgIGFuZCBgZG9uZUluUHJvY2AgZXZlbnRzIGFyZSB1c2VkIGluIHBsYWNlIG9mIGBkb25lYC5cbiAgICpcbiAgICogSWYgeW91IGFyZSB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dIHRoZW4gU1FMIHNlcnZlciBtYXkgdHJlYXQgdGhlIG11bHRpcGxlIGNhbGxzIHdpdGggdGhlIHNhbWUgcXVlcnkgYXMgYSBzdG9yZWQgcHJvY2VkdXJlLlxuICAgKiBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBtYXkgYmUgZW1pdHRlZCBpbnN0ZWFkLiBZb3UgbXVzdCBoYW5kbGUgYm90aCBldmVudHMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgQ29ubmVjdGlvbidzIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZV1dIGlzIGB0cnVlYC5cbiAgICAgICAqL1xuICAgICAgKHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogYHJlcXVlc3Qub24oJ2RvbmVJblByb2MnLCBmdW5jdGlvbiAocm93Q291bnQsIG1vcmUsIHJvd3MpIHsgfSk7YFxuICAgKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mIGEgU1FMIHN0YXRlbWVudCB3aXRoaW4gYSBzdG9yZWQgcHJvY2VkdXJlLiBBbGwgcm93cyBmcm9tIGEgc3RhdGVtZW50XG4gICAqIGluIGEgc3RvcmVkIHByb2NlZHVyZSBoYXZlIGJlZW4gcHJvdmlkZWQgKHRocm91Z2ggYHJvd2AgZXZlbnRzKS5cbiAgICpcbiAgICogVGhpcyBldmVudCBtYXkgYWxzbyBvY2N1ciB3aGVuIGV4ZWN1dGluZyBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IHVzaW5nIFtbZXhlY1NxbF1dLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lSW5Qcm9jJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHJvd0NvdW50XG4gICAgICAgKiAgIFRoZSBudW1iZXIgb2YgcmVzdWx0IHJvd3MuIE1heSBiZSBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtb3JlXG4gICAgICAgKiAgIElmIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgdG8gY29tZSAocHJvYmFibHkgYmVjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFyZSBiZWluZyBleGVjdXRlZCksIHRoZW4gYHRydWVgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByc3RcbiAgICAgICAqICAgUm93cyBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAgICAgKiAgIFdpbGwgb25seSBiZSBhdmFpbGFibGUgaWYgQ29ubmVjdGlvbidzIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZV1dIGlzIGB0cnVlYC5cbiAgICAgICAqL1xuICAgICAgKHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZiBhIHN0b3JlZCBwcm9jZWR1cmUuIFRoaXMgaXMgYWxzbyBnZW5lcmF0ZWQgZm9yIHN0b3JlZCBwcm9jZWR1cmVzXG4gICAqIGV4ZWN1dGVkIHRocm91Z2ggU1FMIHN0YXRlbWVudHMuXFxcbiAgICogVGhpcyBldmVudCBtYXkgYWxzbyBvY2N1ciB3aGVuIGV4ZWN1dGluZyBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IHVzaW5nIFtbZXhlY1NxbF1dLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdkb25lUHJvYycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCBwcm9jUmV0dXJuU3RhdHVzVmFsdWU6IG51bWJlciwgcnN0PzogYW55W10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIGZvciBhbiBvdXRwdXQgcGFyYW1ldGVyICh0aGF0IHdhcyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aXRoIFtbYWRkT3V0cHV0UGFyYW1ldGVyXV0pLlxuICAgKiBTZWUgYWxzbyBgVXNpbmcgUGFyYW1ldGVyc2AuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JldHVyblZhbHVlJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHBhcmFtZXRlck5hbWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiAoRG9lcyBub3Qgc3RhcnQgd2l0aCAnQCcuKVxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAgICogICBUaGUgcGFyYW1ldGVyJ3Mgb3V0cHV0IHZhbHVlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBtZXRhZGF0YVxuICAgICAgICogICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFEYXRhYCBldmVudC5cbiAgICAgICAqL1xuICAgICAgKHBhcmFtZXRlck5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2l2ZXMgdGhlIGNvbHVtbnMgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLCBpZiBgT1JERVIgQllgIGNsYXVzZSBpcyBleGVjdXRlZCBpbiBTUUwgU2VydmVyLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdvcmRlcicsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBvcmRlckNvbHVtbnNcbiAgICAgICAqICAgQW4gYXJyYXkgb2YgY29sdW1uIG51bWJlcnMgaW4gdGhlIHJlc3VsdCBzZXQgYnkgd2hpY2ggZGF0YSBpcyBvcmRlcmVkLlxuICAgICAgICovXG4gICAgICAob3JkZXJDb2x1bW5zOiBudW1iZXJbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXF1ZXN0Q29tcGxldGVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdjYW5jZWwnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ3BhdXNlJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdyZXN1bWUnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogc3RyaW5nIHwgc3ltYm9sLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3ByZXBhcmVkJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZXJyb3InLCBlcnI6IEVycm9yKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyb3cnLCBjb2x1bW5zOiBhbnkpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmUnLCByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZUluUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lUHJvYycsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHByb2NSZXR1cm5TdGF0dXNWYWx1ZTogbnVtYmVyLCByc3Q/OiBhbnlbXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmV0dXJuVmFsdWUnLCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JlcXVlc3RDb21wbGV0ZWQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdjYW5jZWwnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdwYXVzZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3Jlc3VtZScpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ29yZGVyJywgb3JkZXJDb2x1bW5zOiBudW1iZXJbXSk6IGJvb2xlYW5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3FsVGV4dE9yUHJvY2VkdXJlXG4gICAqICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWRcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmdWxseSBjb21wbGV0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3FsVGV4dE9yUHJvY2VkdXJlID0gc3FsVGV4dE9yUHJvY2VkdXJlO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IFtdO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5zdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHx8IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLlVzZUNvbm5lY3Rpb25TZXR0aW5nO1xuICAgIHRoaXMuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSB7XG4gICAgICBpZiAodGhpcy5wcmVwYXJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW1pdCgncHJlcGFyZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyQ2FsbGJhY2soZXJyLCByb3dDb3VudCwgcm93cyk7XG4gICAgICAgIHRoaXMuZW1pdCgncmVxdWVzdENvbXBsZXRlZCcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG5hbWVcbiAgICogICBUaGUgcGFyYW1ldGVyIG5hbWUuIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBwYXJhbWV0ZXIgaW4gdGhlIFNRTCxcbiAgICogICBvciBhIHBhcmFtZXRlciB0aGF0IGEgY2FsbGVkIHByb2NlZHVyZSBleHBlY3RzLiBUaGUgbmFtZSBzaG91bGQgbm90IHN0YXJ0IHdpdGggYEBgLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiAgIE9uZSBvZiB0aGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiAgIFRoZSB2YWx1ZSB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgZ2l2ZW4uIFRoZSBKYXZhc2NyaXB0IHR5cGUgb2YgdGhlXG4gICAqICAgYXJndW1lbnQgc2hvdWxkIG1hdGNoIHRoYXQgZG9jdW1lbnRlZCBmb3IgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICAvLyBUT0RPOiBgdHlwZWAgbXVzdCBiZSBhIHZhbGlkIFREUyB2YWx1ZSB0eXBlXG4gIGFkZFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB2YWx1ZT86IHVua25vd24sIG9wdGlvbnM/OiBSZWFkb25seTxQYXJhbWV0ZXJPcHRpb25zPiB8IG51bGwpIHtcbiAgICBjb25zdCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwYXJhbWV0ZXI6IFBhcmFtZXRlciA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlXG4gICAgfTtcblxuICAgIHRoaXMucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgdGhpcy5wYXJhbWV0ZXJzQnlOYW1lW25hbWVdID0gcGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcGFyYW1ldGVyIGluIHRoZSBTUUwsXG4gICAqICAgb3IgYSBwYXJhbWV0ZXIgdGhhdCBhIGNhbGxlZCBwcm9jZWR1cmUgZXhwZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGVcbiAgICogICBPbmUgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogICBUaGUgdmFsdWUgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIGdpdmVuLiBUaGUgSmF2YXNjcmlwdCB0eXBlIG9mIHRoZVxuICAgKiAgIGFyZ3VtZW50IHNob3VsZCBtYXRjaCB0aGF0IGRvY3VtZW50ZWQgZm9yIGRhdGEgdHlwZXNcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICBhZGRPdXRwdXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgdGhpcy5hZGRQYXJhbWV0ZXIobmFtZSwgdHlwZSwgdmFsdWUsIHsgLi4ub3B0aW9ucywgb3V0cHV0OiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUGFyYW1zUGFyYW1ldGVyKHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdKSB7XG4gICAgbGV0IHBhcmFtc1BhcmFtZXRlciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldO1xuICAgICAgaWYgKHBhcmFtc1BhcmFtZXRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnLCAnO1xuICAgICAgfVxuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICdAJyArIHBhcmFtZXRlci5uYW1lICsgJyAnO1xuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9IHBhcmFtZXRlci50eXBlLmRlY2xhcmF0aW9uKHBhcmFtZXRlcik7XG4gICAgICBpZiAocGFyYW1ldGVyLm91dHB1dCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJyBPVVRQVVQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zUGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YWxpZGF0ZVBhcmFtZXRlcnMoY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB0aGlzLnBhcmFtZXRlcnNbaV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcmFtZXRlci52YWx1ZSA9IHBhcmFtZXRlci50eXBlLnZhbGlkYXRlKHBhcmFtZXRlci52YWx1ZSwgY29sbGF0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBhcmFtZXRlciBcXCcnICsgcGFyYW1ldGVyLm5hbWUgKyAnXFwnLiAnICsgZXJyb3IubWVzc2FnZSwgJ0VQQVJBTScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBzdXNwZW5kcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLiBObyBtb3JlIGByb3dgIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWQgdW50aWwgW1tyZXN1bWVdIGlzIGNhbGxlZC5cbiAgICogSWYgdGhpcyByZXF1ZXN0IGlzIGFscmVhZHkgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1twYXVzZV1dIGhhcyBubyBlZmZlY3QuXG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBmbG93IG9mIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1tyZXN1bWVdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcmVzdW1lKCkge1xuICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYSByZXF1ZXN0IHdoaWxlIHdhaXRpbmcgZm9yIGEgc2VydmVyIHJlc3BvbnNlLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dFxuICAgKiAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZCxcbiAgICogICBvciBgMGAgZm9yIG5vIHRpbWVvdXQuIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LFxuICAgKiAgIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIFtbQ29ubmVjdGlvbl1dIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUlBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsT0FBTyxTQUFTQyxvQkFBWSxDQUFDO0VBQ2pDO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFPRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQUdFO0FBQ0Y7QUFDQTs7RUFvQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFrQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFrQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7RUFrQkU7QUFDRjtBQUNBO0FBQ0E7O0VBaUJFO0FBQ0Y7QUFDQTs7RUFtQkVDLEVBQUVBLENBQUNDLEtBQXNCLEVBQUVDLFFBQWtDLEVBQUU7SUFDN0QsT0FBTyxLQUFLLENBQUNGLEVBQUUsQ0FBQ0MsS0FBSyxFQUFFQyxRQUFRLENBQUM7RUFDbEM7O0VBRUE7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFQyxJQUFJQSxDQUFDRixLQUFzQixFQUFFLEdBQUdHLElBQVcsRUFBRTtJQUMzQyxPQUFPLEtBQUssQ0FBQ0QsSUFBSSxDQUFDRixLQUFLLEVBQUUsR0FBR0csSUFBSSxDQUFDO0VBQ25DOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLFdBQVdBLENBQUNDLGtCQUFzQyxFQUFFQyxRQUE0QixFQUFFQyxPQUF3QixFQUFFO0lBQzFHLEtBQUssQ0FBQyxDQUFDO0lBRVAsSUFBSSxDQUFDRixrQkFBa0IsR0FBR0Esa0JBQWtCO0lBQzVDLElBQUksQ0FBQ0csVUFBVSxHQUFHLEVBQUU7SUFDcEIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDQyxTQUFTLEdBQUcsS0FBSztJQUN0QixJQUFJLENBQUNDLE1BQU0sR0FBR0MsU0FBUztJQUN2QixJQUFJLENBQUNDLFFBQVEsR0FBRyxLQUFLO0lBQ3JCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLEtBQUs7SUFDbkIsSUFBSSxDQUFDQyxLQUFLLEdBQUdILFNBQVM7SUFDdEIsSUFBSSxDQUFDSSxVQUFVLEdBQUdKLFNBQVM7SUFDM0IsSUFBSSxDQUFDSyxPQUFPLEdBQUdMLFNBQVM7SUFDeEIsSUFBSSxDQUFDTSxZQUFZLEdBQUdaLFFBQVE7SUFDNUIsSUFBSSxDQUFDYSxnQ0FBZ0MsR0FBSVosT0FBTyxJQUFJQSxPQUFPLENBQUNZLGdDQUFnQyxJQUFLQyxnREFBeUMsQ0FBQ0Msb0JBQW9CO0lBQy9KLElBQUksQ0FBQ0Msb0JBQW9CLEdBQUcsS0FBSztJQUNqQyxJQUFJLENBQUNoQixRQUFRLEdBQUcsVUFBU2lCLEdBQTZCLEVBQUVDLFFBQWlCLEVBQUVDLElBQVUsRUFBRTtNQUNyRixJQUFJLElBQUksQ0FBQ2YsU0FBUyxFQUFFO1FBQ2xCLElBQUksQ0FBQ0EsU0FBUyxHQUFHLEtBQUs7UUFDdEIsSUFBSWEsR0FBRyxFQUFFO1VBQ1AsSUFBSSxDQUFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRXFCLEdBQUcsQ0FBQztRQUN6QixDQUFDLE1BQU07VUFDTCxJQUFJLENBQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3ZCO01BQ0YsQ0FBQyxNQUFNO1FBQ0wsSUFBSSxDQUFDZ0IsWUFBWSxDQUFDSyxHQUFHLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztNQUMvQjtJQUNGLENBQUM7RUFDSDs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRTtFQUNBd0IsWUFBWUEsQ0FBQ0MsSUFBWSxFQUFFQyxJQUFjLEVBQUVDLEtBQWUsRUFBRXRCLE9BQTJDLEVBQUU7SUFDdkcsTUFBTTtNQUFFdUIsTUFBTSxHQUFHLEtBQUs7TUFBRUMsTUFBTTtNQUFFQyxTQUFTO01BQUVDO0lBQU0sQ0FBQyxHQUFHMUIsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUVsRSxNQUFNMkIsU0FBb0IsR0FBRztNQUMzQk4sSUFBSSxFQUFFQSxJQUFJO01BQ1ZELElBQUksRUFBRUEsSUFBSTtNQUNWRSxLQUFLLEVBQUVBLEtBQUs7TUFDWkMsTUFBTSxFQUFFQSxNQUFNO01BQ2RDLE1BQU0sRUFBRUEsTUFBTTtNQUNkQyxTQUFTLEVBQUVBLFNBQVM7TUFDcEJDLEtBQUssRUFBRUE7SUFDVCxDQUFDO0lBRUQsSUFBSSxDQUFDekIsVUFBVSxDQUFDMkIsSUFBSSxDQUFDRCxTQUFTLENBQUM7SUFDL0IsSUFBSSxDQUFDekIsZ0JBQWdCLENBQUNrQixJQUFJLENBQUMsR0FBR08sU0FBUztFQUN6Qzs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUUsa0JBQWtCQSxDQUFDVCxJQUFZLEVBQUVDLElBQWMsRUFBRUMsS0FBZSxFQUFFdEIsT0FBMkMsRUFBRTtJQUM3RyxJQUFJLENBQUNtQixZQUFZLENBQUNDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUU7TUFBRSxHQUFHdEIsT0FBTztNQUFFdUIsTUFBTSxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQ3BFOztFQUVBO0FBQ0Y7QUFDQTtFQUNFTyxtQkFBbUJBLENBQUM3QixVQUF1QixFQUFFO0lBQzNDLElBQUk4QixlQUFlLEdBQUcsRUFBRTtJQUN4QixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVDLEdBQUcsR0FBR2hDLFVBQVUsQ0FBQ3VCLE1BQU0sRUFBRVEsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO01BQ3JELE1BQU1MLFNBQVMsR0FBRzFCLFVBQVUsQ0FBQytCLENBQUMsQ0FBQztNQUMvQixJQUFJRCxlQUFlLENBQUNQLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDOUJPLGVBQWUsSUFBSSxJQUFJO01BQ3pCO01BQ0FBLGVBQWUsSUFBSSxHQUFHLEdBQUdKLFNBQVMsQ0FBQ1AsSUFBSSxHQUFHLEdBQUc7TUFDN0NXLGVBQWUsSUFBSUosU0FBUyxDQUFDTixJQUFJLENBQUNhLFdBQVcsQ0FBQ1AsU0FBUyxDQUFDO01BQ3hELElBQUlBLFNBQVMsQ0FBQ0osTUFBTSxFQUFFO1FBQ3BCUSxlQUFlLElBQUksU0FBUztNQUM5QjtJQUNGO0lBQ0EsT0FBT0EsZUFBZTtFQUN4Qjs7RUFFQTtBQUNGO0FBQ0E7RUFDRUksa0JBQWtCQSxDQUFDQyxTQUFnQyxFQUFFO0lBQ25ELEtBQUssSUFBSUosQ0FBQyxHQUFHLENBQUMsRUFBRUMsR0FBRyxHQUFHLElBQUksQ0FBQ2hDLFVBQVUsQ0FBQ3VCLE1BQU0sRUFBRVEsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO01BQzFELE1BQU1MLFNBQVMsR0FBRyxJQUFJLENBQUMxQixVQUFVLENBQUMrQixDQUFDLENBQUM7TUFFcEMsSUFBSTtRQUNGTCxTQUFTLENBQUNMLEtBQUssR0FBR0ssU0FBUyxDQUFDTixJQUFJLENBQUNnQixRQUFRLENBQUNWLFNBQVMsQ0FBQ0wsS0FBSyxFQUFFYyxTQUFTLENBQUM7TUFDdkUsQ0FBQyxDQUFDLE9BQU81QixLQUFVLEVBQUU7UUFDbkIsTUFBTSxJQUFJOEIsb0JBQVksQ0FBQyxvQ0FBb0MsR0FBR1gsU0FBUyxDQUFDUCxJQUFJLEdBQUcsTUFBTSxHQUFHWixLQUFLLENBQUMrQixPQUFPLEVBQUUsUUFBUSxDQUFDO01BQ2xIO0lBQ0Y7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxLQUFLQSxDQUFBLEVBQUc7SUFDTixJQUFJLElBQUksQ0FBQ2pDLE1BQU0sRUFBRTtNQUNmO0lBQ0Y7SUFDQSxJQUFJLENBQUNaLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDbEIsSUFBSSxDQUFDWSxNQUFNLEdBQUcsSUFBSTtFQUNwQjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFa0MsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQ2xDLE1BQU0sRUFBRTtNQUNoQjtJQUNGO0lBQ0EsSUFBSSxDQUFDQSxNQUFNLEdBQUcsS0FBSztJQUNuQixJQUFJLENBQUNaLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDckI7O0VBRUE7QUFDRjtBQUNBO0VBQ0UrQyxNQUFNQSxDQUFBLEVBQUc7SUFDUCxJQUFJLElBQUksQ0FBQ3BDLFFBQVEsRUFBRTtNQUNqQjtJQUNGO0lBRUEsSUFBSSxDQUFDQSxRQUFRLEdBQUcsSUFBSTtJQUNwQixJQUFJLENBQUNYLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDckI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFZ0QsVUFBVUEsQ0FBQ2pDLE9BQWdCLEVBQUU7SUFDM0IsSUFBSSxDQUFDQSxPQUFPLEdBQUdBLE9BQU87RUFDeEI7QUFDRjtBQUFDLElBQUFrQyxRQUFBLEdBRWN0RCxPQUFPO0FBQUF1RCxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQTtBQUN0QkcsTUFBTSxDQUFDRixPQUFPLEdBQUd2RCxPQUFPIn0=
|
package/lib/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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 occurred, 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 emitted 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 emitted 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 available 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 available 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 available 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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"}
|
|
@@ -4,93 +4,122 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _metadataParser =
|
|
7
|
+
var _metadataParser = require("../metadata-parser");
|
|
8
8
|
var _token = require("./token");
|
|
9
|
-
|
|
10
|
-
function readTableName(
|
|
11
|
-
if (metadata.type.hasTableName) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
} else {
|
|
31
|
-
parser.readUsVarChar(callback);
|
|
32
|
-
}
|
|
33
|
-
} else {
|
|
34
|
-
callback(undefined);
|
|
9
|
+
var _helpers = require("./helpers");
|
|
10
|
+
function readTableName(buf, offset, metadata, options) {
|
|
11
|
+
if (!metadata.type.hasTableName) {
|
|
12
|
+
return new _helpers.Result(undefined, offset);
|
|
13
|
+
}
|
|
14
|
+
if (options.tdsVersion < '7_2') {
|
|
15
|
+
return (0, _helpers.readUsVarChar)(buf, offset);
|
|
16
|
+
}
|
|
17
|
+
let numberOfTableNameParts;
|
|
18
|
+
({
|
|
19
|
+
offset,
|
|
20
|
+
value: numberOfTableNameParts
|
|
21
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
22
|
+
const tableName = [];
|
|
23
|
+
for (let i = 0; i < numberOfTableNameParts; i++) {
|
|
24
|
+
let tableNamePart;
|
|
25
|
+
({
|
|
26
|
+
offset,
|
|
27
|
+
value: tableNamePart
|
|
28
|
+
} = (0, _helpers.readUsVarChar)(buf, offset));
|
|
29
|
+
tableName.push(tableNamePart);
|
|
35
30
|
}
|
|
31
|
+
return new _helpers.Result(tableName, offset);
|
|
36
32
|
}
|
|
37
|
-
function readColumnName(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
33
|
+
function readColumnName(buf, offset, index, metadata, options) {
|
|
34
|
+
let colName;
|
|
35
|
+
({
|
|
36
|
+
offset,
|
|
37
|
+
value: colName
|
|
38
|
+
} = (0, _helpers.readBVarChar)(buf, offset));
|
|
39
|
+
if (options.columnNameReplacer) {
|
|
40
|
+
return new _helpers.Result(options.columnNameReplacer(colName, index, metadata), offset);
|
|
41
|
+
} else if (options.camelCaseColumns) {
|
|
42
|
+
return new _helpers.Result(colName.replace(/^[A-Z]/, function (s) {
|
|
43
|
+
return s.toLowerCase();
|
|
44
|
+
}), offset);
|
|
45
|
+
} else {
|
|
46
|
+
return new _helpers.Result(colName, offset);
|
|
47
|
+
}
|
|
49
48
|
}
|
|
50
|
-
function readColumn(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
49
|
+
function readColumn(buf, offset, options, index) {
|
|
50
|
+
let metadata;
|
|
51
|
+
({
|
|
52
|
+
offset,
|
|
53
|
+
value: metadata
|
|
54
|
+
} = (0, _metadataParser.readMetadata)(buf, offset, options));
|
|
55
|
+
let tableName;
|
|
56
|
+
({
|
|
57
|
+
offset,
|
|
58
|
+
value: tableName
|
|
59
|
+
} = readTableName(buf, offset, metadata, options));
|
|
60
|
+
let colName;
|
|
61
|
+
({
|
|
62
|
+
offset,
|
|
63
|
+
value: colName
|
|
64
|
+
} = readColumnName(buf, offset, index, metadata, options));
|
|
65
|
+
return new _helpers.Result({
|
|
66
|
+
userType: metadata.userType,
|
|
67
|
+
flags: metadata.flags,
|
|
68
|
+
type: metadata.type,
|
|
69
|
+
collation: metadata.collation,
|
|
70
|
+
precision: metadata.precision,
|
|
71
|
+
scale: metadata.scale,
|
|
72
|
+
udtInfo: metadata.udtInfo,
|
|
73
|
+
dataLength: metadata.dataLength,
|
|
74
|
+
schema: metadata.schema,
|
|
75
|
+
colName: colName,
|
|
76
|
+
tableName: tableName
|
|
77
|
+
}, offset);
|
|
70
78
|
}
|
|
71
79
|
async function colMetadataParser(parser) {
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
let columnCount;
|
|
81
|
+
while (true) {
|
|
82
|
+
let offset;
|
|
83
|
+
try {
|
|
84
|
+
({
|
|
85
|
+
offset,
|
|
86
|
+
value: columnCount
|
|
87
|
+
} = (0, _helpers.readUInt16LE)(parser.buffer, parser.position));
|
|
88
|
+
} catch (err) {
|
|
89
|
+
if (err instanceof _helpers.NotEnoughDataError) {
|
|
90
|
+
await parser.waitForChunk();
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
parser.position = offset;
|
|
96
|
+
break;
|
|
74
97
|
}
|
|
75
|
-
const columnCount = parser.buffer.readUInt16LE(parser.position);
|
|
76
|
-
parser.position += 2;
|
|
77
98
|
const columns = [];
|
|
78
99
|
for (let i = 0; i < columnCount; i++) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
100
|
+
while (true) {
|
|
101
|
+
let column;
|
|
102
|
+
let offset;
|
|
103
|
+
try {
|
|
104
|
+
({
|
|
105
|
+
offset,
|
|
106
|
+
value: column
|
|
107
|
+
} = readColumn(parser.buffer, parser.position, parser.options, i));
|
|
108
|
+
} catch (err) {
|
|
109
|
+
if (err instanceof _helpers.NotEnoughDataError) {
|
|
110
|
+
await parser.waitForChunk();
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
parser.position = offset;
|
|
116
|
+
columns.push(column);
|
|
117
|
+
break;
|
|
88
118
|
}
|
|
89
|
-
columns.push(column);
|
|
90
119
|
}
|
|
91
120
|
return new _token.ColMetadataToken(columns);
|
|
92
121
|
}
|
|
93
122
|
var _default = colMetadataParser;
|
|
94
123
|
exports.default = _default;
|
|
95
124
|
module.exports = colMetadataParser;
|
|
96
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90b2tlbiIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicmVhZFRhYmxlTmFtZSIsInBhcnNlciIsIm9wdGlvbnMiLCJtZXRhZGF0YSIsImNhbGxiYWNrIiwidHlwZSIsImhhc1RhYmxlTmFtZSIsInRkc1ZlcnNpb24iLCJyZWFkVUludDgiLCJudW1iZXJPZlRhYmxlTmFtZVBhcnRzIiwidGFibGVOYW1lIiwiaSIsIm5leHQiLCJkb25lIiwicmVhZFVzVmFyQ2hhciIsInBhcnQiLCJwdXNoIiwidW5kZWZpbmVkIiwicmVhZENvbHVtbk5hbWUiLCJpbmRleCIsInJlYWRCVmFyQ2hhciIsImNvbE5hbWUiLCJjb2x1bW5OYW1lUmVwbGFjZXIiLCJjYW1lbENhc2VDb2x1bW5zIiwicmVwbGFjZSIsInMiLCJ0b0xvd2VyQ2FzZSIsInJlYWRDb2x1bW4iLCJtZXRhZGF0YVBhcnNlIiwidXNlclR5cGUiLCJmbGFncyIsImNvbGxhdGlvbiIsInByZWNpc2lvbiIsInNjYWxlIiwidWR0SW5mbyIsImRhdGFMZW5ndGgiLCJzY2hlbWEiLCJjb2xNZXRhZGF0YVBhcnNlciIsImJ1ZmZlciIsImxlbmd0aCIsInBvc2l0aW9uIiwic3RyZWFtQnVmZmVyIiwid2FpdEZvckNodW5rIiwiY29sdW1uQ291bnQiLCJyZWFkVUludDE2TEUiLCJjb2x1bW5zIiwiY29sdW1uIiwiYyIsInN1c3BlbmRlZCIsIkNvbE1ldGFkYXRhVG9rZW4iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXRhZGF0YVBhcnNlLCB7IHR5cGUgTWV0YWRhdGEgfSBmcm9tICcuLi9tZXRhZGF0YS1wYXJzZXInO1xuXG5pbXBvcnQgUGFyc2VyLCB7IHR5cGUgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyBDb2xNZXRhZGF0YVRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uTWV0YWRhdGEgZXh0ZW5kcyBNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uJ3MgbmFtZeOAglxuICAgKi9cbiAgY29sTmFtZTogc3RyaW5nO1xuXG4gIHRhYmxlTmFtZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWFkVGFibGVOYW1lKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBtZXRhZGF0YTogTWV0YWRhdGEsIGNhbGxiYWNrOiAodGFibGVOYW1lPzogc3RyaW5nIHwgc3RyaW5nW10pID0+IHZvaWQpIHtcbiAgaWYgKG1ldGFkYXRhLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgaWYgKG9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgcGFyc2VyLnJlYWRVSW50OCgobnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cykgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZU5hbWU6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmdW5jdGlvbiBuZXh0KGRvbmU6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgICBpZiAobnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cyA9PT0gaSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJzZXIucmVhZFVzVmFyQ2hhcigocGFydCkgPT4ge1xuICAgICAgICAgICAgdGFibGVOYW1lLnB1c2gocGFydCk7XG5cbiAgICAgICAgICAgIGkrKztcblxuICAgICAgICAgICAgbmV4dChkb25lKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKHRhYmxlTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlci5yZWFkVXNWYXJDaGFyKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkQ29sdW1uTmFtZShwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgaW5kZXg6IG51bWJlciwgbWV0YWRhdGE6IE1ldGFkYXRhLCBjYWxsYmFjazogKGNvbE5hbWU6IHN0cmluZykgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJWYXJDaGFyKChjb2xOYW1lKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY29sdW1uTmFtZVJlcGxhY2VyKSB7XG4gICAgICBjYWxsYmFjayhvcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcihjb2xOYW1lLCBpbmRleCwgbWV0YWRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucykge1xuICAgICAgY2FsbGJhY2soY29sTmFtZS5yZXBsYWNlKC9eW0EtWl0vLCBmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGNvbE5hbWUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2x1bW4ocGFyc2VyOiBQYXJzZXIsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMsIGluZGV4OiBudW1iZXIsIGNhbGxiYWNrOiAoY29sdW1uOiBDb2x1bW5NZXRhZGF0YSkgPT4gdm9pZCkge1xuICBtZXRhZGF0YVBhcnNlKHBhcnNlciwgb3B0aW9ucywgKG1ldGFkYXRhKSA9PiB7XG4gICAgcmVhZFRhYmxlTmFtZShwYXJzZXIsIG9wdGlvbnMsIG1ldGFkYXRhLCAodGFibGVOYW1lKSA9PiB7XG4gICAgICByZWFkQ29sdW1uTmFtZShwYXJzZXIsIG9wdGlvbnMsIGluZGV4LCBtZXRhZGF0YSwgKGNvbE5hbWUpID0+IHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHVzZXJUeXBlOiBtZXRhZGF0YS51c2VyVHlwZSxcbiAgICAgICAgICBmbGFnczogbWV0YWRhdGEuZmxhZ3MsXG4gICAgICAgICAgdHlwZTogbWV0YWRhdGEudHlwZSxcbiAgICAgICAgICBjb2xsYXRpb246IG1ldGFkYXRhLmNvbGxhdGlvbixcbiAgICAgICAgICBwcmVjaXNpb246IG1ldGFkYXRhLnByZWNpc2lvbixcbiAgICAgICAgICBzY2FsZTogbWV0YWRhdGEuc2NhbGUsXG4gICAgICAgICAgdWR0SW5mbzogbWV0YWRhdGEudWR0SW5mbyxcbiAgICAgICAgICBkYXRhTGVuZ3RoOiBtZXRhZGF0YS5kYXRhTGVuZ3RoLFxuICAgICAgICAgIHNjaGVtYTogbWV0YWRhdGEuc2NoZW1hLFxuICAgICAgICAgIGNvbE5hbWU6IGNvbE5hbWUsXG4gICAgICAgICAgdGFibGVOYW1lOiB0YWJsZU5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbE1ldGFkYXRhUGFyc2VyKHBhcnNlcjogUGFyc2VyKTogUHJvbWlzZTxDb2xNZXRhZGF0YVRva2VuPiB7XG4gIHdoaWxlIChwYXJzZXIuYnVmZmVyLmxlbmd0aCAtIHBhcnNlci5wb3NpdGlvbiA8IDIpIHtcbiAgICBhd2FpdCBwYXJzZXIuc3RyZWFtQnVmZmVyLndhaXRGb3JDaHVuaygpO1xuICB9XG5cbiAgY29uc3QgY29sdW1uQ291bnQgPSBwYXJzZXIuYnVmZmVyLnJlYWRVSW50MTZMRShwYXJzZXIucG9zaXRpb24pO1xuICBwYXJzZXIucG9zaXRpb24gKz0gMjtcblxuICBjb25zdCBjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgIGxldCBjb2x1bW46IENvbHVtbk1ldGFkYXRhO1xuXG4gICAgcmVhZENvbHVtbihwYXJzZXIsIHBhcnNlci5vcHRpb25zLCBpLCAoYykgPT4ge1xuICAgICAgY29sdW1uID0gYztcbiAgICB9KTtcblxuICAgIHdoaWxlIChwYXJzZXIuc3VzcGVuZGVkKSB7XG4gICAgICBhd2FpdCBwYXJzZXIuc3RyZWFtQnVmZmVyLndhaXRGb3JDaHVuaygpO1xuXG4gICAgICBwYXJzZXIuc3VzcGVuZGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBuZXh0ID0gcGFyc2VyLm5leHQhO1xuXG4gICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgY29sdW1ucy5wdXNoKGNvbHVtbiEpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDb2xNZXRhZGF0YVRva2VuKGNvbHVtbnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb2xNZXRhZGF0YVBhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gY29sTWV0YWRhdGFQYXJzZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUEyQyxTQUFBRCx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQVczQyxTQUFTRyxhQUFhQSxDQUFDQyxNQUFjLEVBQUVDLE9BQXNCLEVBQUVDLFFBQWtCLEVBQUVDLFFBQWlELEVBQUU7RUFDcEksSUFBSUQsUUFBUSxDQUFDRSxJQUFJLENBQUNDLFlBQVksRUFBRTtJQUM5QixJQUFJSixPQUFPLENBQUNLLFVBQVUsSUFBSSxLQUFLLEVBQUU7TUFDL0JOLE1BQU0sQ0FBQ08sU0FBUyxDQUFFQyxzQkFBc0IsSUFBSztRQUMzQyxNQUFNQyxTQUFtQixHQUFHLEVBQUU7UUFFOUIsSUFBSUMsQ0FBQyxHQUFHLENBQUM7UUFDVCxTQUFTQyxJQUFJQSxDQUFDQyxJQUFn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
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX3Rva2VuIiwiX2hlbHBlcnMiLCJyZWFkVGFibGVOYW1lIiwiYnVmIiwib2Zmc2V0IiwibWV0YWRhdGEiLCJvcHRpb25zIiwidHlwZSIsImhhc1RhYmxlTmFtZSIsIlJlc3VsdCIsInVuZGVmaW5lZCIsInRkc1ZlcnNpb24iLCJyZWFkVXNWYXJDaGFyIiwibnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cyIsInZhbHVlIiwicmVhZFVJbnQ4IiwidGFibGVOYW1lIiwiaSIsInRhYmxlTmFtZVBhcnQiLCJwdXNoIiwicmVhZENvbHVtbk5hbWUiLCJpbmRleCIsImNvbE5hbWUiLCJyZWFkQlZhckNoYXIiLCJjb2x1bW5OYW1lUmVwbGFjZXIiLCJjYW1lbENhc2VDb2x1bW5zIiwicmVwbGFjZSIsInMiLCJ0b0xvd2VyQ2FzZSIsInJlYWRDb2x1bW4iLCJyZWFkTWV0YWRhdGEiLCJ1c2VyVHlwZSIsImZsYWdzIiwiY29sbGF0aW9uIiwicHJlY2lzaW9uIiwic2NhbGUiLCJ1ZHRJbmZvIiwiZGF0YUxlbmd0aCIsInNjaGVtYSIsImNvbE1ldGFkYXRhUGFyc2VyIiwicGFyc2VyIiwiY29sdW1uQ291bnQiLCJyZWFkVUludDE2TEUiLCJidWZmZXIiLCJwb3NpdGlvbiIsImVyciIsIk5vdEVub3VnaERhdGFFcnJvciIsIndhaXRGb3JDaHVuayIsImNvbHVtbnMiLCJjb2x1bW4iLCJDb2xNZXRhZGF0YVRva2VuIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZE1ldGFkYXRhLCB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi4vbWV0YWRhdGEtcGFyc2VyJztcblxuaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgQ29sTWV0YWRhdGFUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yLCBSZXN1bHQsIHJlYWRCVmFyQ2hhciwgcmVhZFVJbnQxNkxFLCByZWFkVUludDgsIHJlYWRVc1ZhckNoYXIgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbk1ldGFkYXRhIGV4dGVuZHMgTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGNvbHVtbidzIG5hbWXjgIJcbiAgICovXG4gIGNvbE5hbWU6IHN0cmluZztcblxuICB0YWJsZU5hbWU/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZFRhYmxlTmFtZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSwgb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIW1ldGFkYXRhLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodW5kZWZpbmVkLCBvZmZzZXQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgcmV0dXJuIHJlYWRVc1ZhckNoYXIoYnVmLCBvZmZzZXQpO1xuICB9XG5cbiAgbGV0IG51bWJlck9mVGFibGVOYW1lUGFydHM7XG4gICh7IG9mZnNldCwgdmFsdWU6IG51bWJlck9mVGFibGVOYW1lUGFydHMgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIGNvbnN0IHRhYmxlTmFtZTogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlRhYmxlTmFtZVBhcnRzOyBpKyspIHtcbiAgICBsZXQgdGFibGVOYW1lUGFydDtcbiAgICAoeyBvZmZzZXQsIHZhbHVlOiB0YWJsZU5hbWVQYXJ0IH0gPSByZWFkVXNWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICB0YWJsZU5hbWUucHVzaCh0YWJsZU5hbWVQYXJ0KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KHRhYmxlTmFtZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZENvbHVtbk5hbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGxldCBjb2xOYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBjb2xOYW1lIH0gPSByZWFkQlZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICBpZiAob3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIpIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChvcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcihjb2xOYW1lLCBpbmRleCwgbWV0YWRhdGEpLCBvZmZzZXQpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucykge1xuICAgIHJldHVybiBuZXcgUmVzdWx0KGNvbE5hbWUucmVwbGFjZSgvXltBLVpdLywgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHMudG9Mb3dlckNhc2UoKTtcbiAgICB9KSwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChjb2xOYW1lLCBvZmZzZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2x1bW4oYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBpbmRleDogbnVtYmVyKSB7XG4gIGxldCBtZXRhZGF0YTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogbWV0YWRhdGEgfSA9IHJlYWRNZXRhZGF0YShidWYsIG9mZnNldCwgb3B0aW9ucykpO1xuXG4gIGxldCB0YWJsZU5hbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRhYmxlTmFtZSB9ID0gcmVhZFRhYmxlTmFtZShidWYsIG9mZnNldCwgbWV0YWRhdGEsIG9wdGlvbnMpKTtcblxuICBsZXQgY29sTmFtZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sTmFtZSB9ID0gcmVhZENvbHVtbk5hbWUoYnVmLCBvZmZzZXQsIGluZGV4LCBtZXRhZGF0YSwgb3B0aW9ucykpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICB1c2VyVHlwZTogbWV0YWRhdGEudXNlclR5cGUsXG4gICAgZmxhZ3M6IG1ldGFkYXRhLmZsYWdzLFxuICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgY29sbGF0aW9uOiBtZXRhZGF0YS5jb2xsYXRpb24sXG4gICAgcHJlY2lzaW9uOiBtZXRhZGF0YS5wcmVjaXNpb24sXG4gICAgc2NhbGU6IG1ldGFkYXRhLnNjYWxlLFxuICAgIHVkdEluZm86IG1ldGFkYXRhLnVkdEluZm8sXG4gICAgZGF0YUxlbmd0aDogbWV0YWRhdGEuZGF0YUxlbmd0aCxcbiAgICBzY2hlbWE6IG1ldGFkYXRhLnNjaGVtYSxcbiAgICBjb2xOYW1lOiBjb2xOYW1lLFxuICAgIHRhYmxlTmFtZTogdGFibGVOYW1lXG4gIH0sIG9mZnNldCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbE1ldGFkYXRhUGFyc2VyKHBhcnNlcjogUGFyc2VyKTogUHJvbWlzZTxDb2xNZXRhZGF0YVRva2VuPiB7XG4gIGxldCBjb2x1bW5Db3VudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGxldCBvZmZzZXQ7XG5cbiAgICB0cnkge1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sdW1uQ291bnQgfSA9IHJlYWRVSW50MTZMRShwYXJzZXIuYnVmZmVyLCBwYXJzZXIucG9zaXRpb24pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHBhcnNlci5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBjb2x1bW46IENvbHVtbk1ldGFkYXRhO1xuICAgICAgbGV0IG9mZnNldDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sdW1uIH0gPSByZWFkQ29sdW1uKHBhcnNlci5idWZmZXIsIHBhcnNlci5wb3NpdGlvbiwgcGFyc2VyLm9wdGlvbnMsIGkpKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgICBhd2FpdCBwYXJzZXIud2FpdEZvckNodW5rKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IENvbE1ldGFkYXRhVG9rZW4oY29sdW1ucyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbE1ldGFkYXRhUGFyc2VyO1xubW9kdWxlLmV4cG9ydHMgPSBjb2xNZXRhZGF0YVBhcnNlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxPQUFBO0FBR0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBV0EsU0FBU0csYUFBYUEsQ0FBQ0MsR0FBVyxF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
|